TDP001 Handhavande av datormiljö
Terminalkommandon v35
Nu är vi redan klara med andra veckan och därmed är det dags för ett nytt mail om terminalen och dess kommandon. 
I detta mail får ni de första uppgifterna. De finns instoppade i texten där de passar in, men en sammanställning finns även i slutet av mailet.
Vi inleder med lite grundläggande tips som gör det lättare att arbeta i terminalen.
| Tangent | Använding | 
|---|---|
| Tab | Fyll i automatiskt. Om du börjat skriva något och det endast finns en fil som passar kan terminalen automatiskt fylla i resten av ordet. Trycker du tab två gånger får du en lista över alternativ. | 
| Pil upp/ner | bläddra mellan tidigare utförda kommandon | 
| kommando | Betydelse | Beskrivning | cat [fil]... | conCATenate | Slå ihop innehållet i de givna filerna och skriv ut i terminalen. Om endast en fil anges skrivs dess innehåll ut. | 
|---|---|---|
| less fil | Visa filens innehåll | |
| tail fil | Visa de sista raderna i filen | |
| head fil | Visa de första raderna i filen | |
| grep text fil | Global RegEx Print | Skriv ut alla rader i filen som har en viss text (med -E stöds fulla reguljära uttryck) | 
| wc fil | Word Count | Visa statistik om filen (antal rader, tecken osv) | 
| cut fil | Plocka ut kolumner ur filen. | |
| paste fil... | Slå ihop filer radvis | |
| diff fil1 fil2 | Visa skillnader mellan de två givna filerna | 
I nedanstående exempel använder vi den givna filen för introduktionslaborationen som finns på kurshemsidorna under "Laborationer" (http://www.ida.liu.se/~TDP001/2015/material/resultat.txt).
Vi börjar med att visa filens innhåll:
   $ cat resultat.txt
Med hjälp av cut kan vi skriva ut alla namnen:
    $ cut -d' ' -f1-2 resultat.txt
cut tar som sagt ut kolumner och -d anger vilket tecken vi använder som avgränsare (delimiter) mellan kolumner. -f väljer vilka kolumner (fields) vi är intresserade av. Detta betyder alltså tag ut de två första kolumnerna som avgränsas med mellanslag (dvs ord). Eftersom mellanslag används för att separera värden som skickas till kommandot (även kallat argument) använder jag apostrofer för att använda mellanslag som avgränsare. 
grep går att använda på ett väldigt avancerat sätt (vi behandlar reguljära uttryck senare i kursen), men grundfallet är ganska enkelt.
     $ grep son resultat.txt
Pipe
Grundidéen bland de inbyggda kommandona är att varje program ska göra EN sak på ett bra sätt. Ofta vill man dock lösa flera problem och därför finns Pipe. En pipe (tecknet  | ) används för att skicka utskriften från ett program som indata till ett annat. De flesta kommandona kan alltså antingen läsa från en fil eller från inmatning.
    $ grep son resultat.txt | head -n1
-n1 begränsar utskriften till den första raden. Sammansatt kommer alltså detta skriva ut den första raden som innehåller "son".
Uppgift 2: Skriv ut de fem första efternamnen som inte avslutas med "son" (Tips: undersök man-sidorna för grep)
Strömmar och omdirigering
Normalt sett skrivs resultat ut i terminalfönstret (STDOUT, eller standard output). Ibland är det dock trevligt att få resultatet i en textfil. Det kan man göra med omdirigering:
    $ tail resultat.txt > tio_sista.txt
   $ tail resultat.txt >> tio_sista.txt
>> till resultatet i slutet av filen.
Utöver STDOUT finns det även en ström som heter STDERR där felmeddelanden normalt sätt skrivs ut. Denna separeras ifrån STDOUT när man omdirigerar utskrifter så exempelvis kommer följande kommando skriva ut feltexten i terminalen istället för på filen:
   $ python3 -c '1/0' > output
'1/0'. Detta ger som vi vet en felutskrift och den skrivs ut i terminalen. 
  $ python3 -c 'print(4); 1/0' > output 2> errs
'print(4); 1/0' och vanlig utskrift hamnar i filen output och fel (ström nummer 2) hamnar i filen errs.
  $ cat output
  4
  $ cat errs
  Traceback (most recent call last):
    File "", line 1, in 
  ZeroDivisionError: division by zero
  Glob
För att hitta filer i terminalen kan man såklart använda deras namn. Det blir dock jobbigt efter ett tag, särskilt om det är många filer man vill komma åt och därför har terminalen stöd för glob-mönster. I sitt enklaste fall har vi två symboler att använda oss av, ? och *. Tecknet ? matchar ETT tecken och * betyder noll eller fler tecken. 
   $ ls /home/*/Documents/
Uppgifter (de ovanstående och några till)
Om ni väljer att redovisa dessa ska de besvaras tydligt med stegvisa beskrivningar på din hemsida senast torsdag den 3/9 kl 12.00. Uppgift 1,2 och 4 använder filen http://www.ida.liu.se/~TDP001/2015/material/resultat.txt
- Uppgift 1: Hur kan man med grep hitta alla rader med namn (förnamn eller efternamn) som slutar med tecknen "on"?
- Uppgift 2: Skriv ut de fem första efternamnen som inte avslutas med "son"
- Uppgift 3: I mappen /usr/lib finns det flera filer som har namn på formatet xxx.so.d, där xxx är dess namn och d är ett (eller flera separerade med .) heltal. Skriv ut alla dessa filers namn (dvs xxx-delen) till en fil med valfritt namn.
- Uppgift 4: Ge ett kommando som (endast) skriver ut hur många rader i filen som har ett namn som har bokstäverna "an" efter varandra. (Bör bli 7)
             Sidansvarig: Eric Elfving
Senast uppdaterad: 2016-08-02
	  
 English web site
English web site 
          
           
           
        