Vi vil i dette afsnit se på et par af systemets mere smarte funktioner, som gør livet lettere for dig som bruger.
Forestil dig, at du har mange filer, som du gerne vil slette. Du kan naturligvis skrive rm filnavn for hvert enkelt navn, men bare med 5-10 filer bliver du hurtigt træt af det. Redningen er joker-tegnet. Lad os antage, at du har tre filer i et katalog, og at du gerne vil slette dem alle. Nedenfor ser du hvordan.
[daisy@linus EtKatalog]$ ls aaa bbb ccc [daisy@linus EtKatalog]$ rm * [daisy@linus EtKatalog]$ ls [daisy@linus EtKatalog]$ |
Alle filer er det samme som *. Hvis du i stedet havde skrevet a*, betyder det alle filer som begynder med a.
[daisy@linus NytKatalog]$ ls aaa abb ccc [daisy@linus NytKatalog]$ rm a* [daisy@linus NytKatalog]$ ls ccc [daisy@linus NytKatalog]$ |
Stjernen, også kaldet joker-tegnet, kan bruges overalt. F.eks. betyder a*b alle filer, der begynder med a og slutter på b, hvilket vil inkludere filerne ab, aDuErGodb, men ikke en fil med navnet abe. Joker-tegnet kan bruges sammen med alle de mest almindelige kommandoer i Linux, f.eks. viser nedenstående eksempel, hvordan du viser alle filer, der begynder med ad i kataloget /usr/bin
[daisy@linus daisy]$ cd /usr/bin [daisy@linus bin]$ ls ad* /usr/bin/addftinfo /usr/bin/addr /usr/bin/addr2line |
Det er værd at bemærke, at jokertegn ekspanderes af shellen ("kommandofortolkeren") - ikke af applikationen. Det har bl.a. den store fordel, at jokertegn altid fungerer - og fungerer konsistent på tværs af applikationer.
Et meget simpelt eksempel: Et katalog indeholder 3 filer: file1, file2 og myfile. Skriver du: ls *, vil shellen først ekspandere *-tegnet og derefter kalde ls med: ls file1 file2 myfile. Output fra ls er blot:
[daisy@linus test]$ ls file1 file2 myfile |
Men der er flere muligheder i dette. Et eksempel: For at se forskellen mellem file1 og file2 kan du skrive: diff file1 file2. Men du kan også nøjes med at skrive: diff f* og således lade shellen ekspandere f* til file1 file2.
Somme tider kan denne konsekvente ekspansion af joker-tegn dog være en ulempe.
Et eksempel: Et katalog indeholder 2 filer:
[daisy@linus film]$ ls dogme95.zip film_index.html |
Du kan også bruge zip-filer under Unix, og du kan se indholdet af zip-filen ved f.eks. at skrive:
[daisy@linus film]$ unzip -v d* Archive: dogme95.zip Length Method Size Ratio Date Time CRC-32 Name ------ ------ ---- ----- ---- ---- ------ ---- 14853 Defl:N 5224 65% 10-27-98 16:12 944a4af4 festen.html 14844 Defl:N 5401 64% 11-14-98 19:53 e55c1636 idioterne.html 1941 Defl:N 1024 47% 03-12-99 22:12 5ecb7d23 mifune.html ------ ------ --- ------- 31638 11649 63% 3 files |
Nu vil vi pakke festen.html ud af zip-filen. Det er den eneste fil i zip-filen, der starter med f, så under DOS kunne man blot skrive: unzip d* f*. Men prøver man det under Unix, går det galt:
[daisy@linus film]$ unzip d* f* Archive: dogme95.zip caution: filename not matched: film_index.html |
Du bliver som minimum nødt til at skrive: unzip d* fe*. Der er ingen fil i kataloget, der matcher fe*, så shellen vil kun ekspandere d* og kalde unzip med: unzip dogme95.zip fe*. Det overlades nu til unzip at ekspandere fe*.
Det bør også nævnes, at mange programmer understøtter en ekstrem sej syntaks, kaldet regulære udtryk (eng. "regular expressions"), til alt inden for mønstergenkendelse af tekst, du kan f.eks. slette alle dine filer, der starter med bogstaver mellem a og g ved at skrive rm [a-g]*
Det siger vist sig selv, at du skal passe meget på, når du skal slette - for du kan ikke fortryde. Regulære udtryk er beskrevet i afsnit 7 i manualen under navnet regex.
Det er ikke altid hensigtsmæssigt at få outputtet fra en kommando skrevet direkte på skærmen. Hvis du skriver ls /usr/bin, vil du forstå hvorfor. Derfor er det muligt at omdirigere output (eng. "redirect"). Til det formål bruger du tegnet > til at omdirigere outputtet til en fil.
[daisy@linus daisy]$ ls /usr/bin > usrbin.dir [daisy@linus daisy]$ less usrbin.dir |
Du kan også sende skreven tekst ind til et program som forventer tastetryk. Nedenstående lille program svarer "y" på et spørgsmål som "Interaktivkommando", beder brugeren at svare på.
#!/bin/sh Interaktivkommando <<EOF y EOF |
Som du så i det foregående afsnit, kan du omdirigere outputtet til en fil. Nu kan du med rette spørge, hvorfor du skal omdirigere til en fil, hvis du kun skal se på den en gang? Svaret på dit spørgsmål er ligefremt: det behøver du heller ikke. Du kan nemlig sætte en pipe op. Ordet "pipe" betyder på engelsk ikke blot en pibe, man ryger tobak i, men også et rør, som kan bruges til at lede væske fra et sted til et andet. I Linux betyder det, at outputtet fra et program bruges som input til et andet. Lad os give et lille eksempel:
[daisy@linus daisy]$ ls /usr/bin | less |
Den lodrette streg (|) sætter en "pipe" op. Outputtet fra ls /usr/bin bruges som input til less. Det er naturligvis muligt at sætte en række pipes op efter hinanden og på den måde slippe for en masse midlertidige filer.
Ofte vil du fra kommandoer som cat, ls og find få alt for meget information, og oftest ved du godt, at det kun er en begrænset del af de viste linjer tekst, du er interesseret i. Hvis du f.eks. kun skal bruge de linjer af /etc/passwd, der indeholder navnet daisy, kan du bruge grep til at begrænse outputtet med.
[daisy@linus daisy]$ cat /etc/passwd | grep daisy daisy:x:501:501:Daisy,,,,:/home/daisy:/bin/bash |