Unix på arbetstationer

I/O-omkoppling och filter

(nästa avsnitt, föregående avsnitt, innehållsförteckning)


I/O-omkoppling

Till varje program eller kommando som exekveras hör ett antal ''kanaler'' till in- och utfiler. Alla program har tillgång till en inkanal, som normalt är kopplad till tangentbordet, och två utkanaler, som normalt är kopplade till skärmen. Inkanalen kallas stdin (''standard input''), utkanalerna kallas stdout (''standard output'', normal utmatning) respektive stderr (''standard error'', för felmeddelanden och dylikt). Man kan på kommandoraden ange att dessa kanaler skall kopplas till filer i stället för till tangentbord/skärm på följande sätt:

Exempel: Skapa nyfil och lägg in det som skrivs på tangentbordet i filen:

Exempel: Översätt alla små bokstäver i infil till stora bokstäver, lägg resultatet i utfil:

Filter

Med I/O-omkoppling (<, >) kan man åstadkomma att ett kommando (eller program) skriver på en fil som sedan läses av ett annat kommando.

Exempel:Följande kommandon medför att antalet filer i den aktuella katalogen skrivs ut på skärmen:

  ls -1 > temp
  wc -l < temp
  rm temp

ls-kommandot medför att en innehållsförteckning över den aktuella katalogen skrivs ut på filen temp, med ett (optionen -l) filnamn per rad. wc-kommandot räknar och skriver ut antalet rader i filen. rm-kommandot tar bort filen den temporära filen temp.

Man kan i Unix åstadkomma detsamma som i exemplet utan att behöva utnyttja en temporär fil. Man kan nämligen skriva flera kommandon på samma rad och med hjälp av tecknet | ange att stdout från ett kommando skall kopplas till stdin i nästa kommando. Man säger att kommandona kopplas ihop med en pipe, ett ''rör''. Exempel: Samma exempel som ovan med en pipe:

  ls -1 | wc -l

De båda kommandona exekveras här parallellt, och wc-kommandot läser den utmatning som genereras av ls-kommandot.

Man kan mycket väl ha mer än en pipe på kommandoraden:

Exempel: Skriv ut namnen på de filer i aktuell katalog som har tillägget .p, en sida i taget:

  ls -1 | egrep '\.p' | less

Exempel: Se efter vilka som kör processer på datorn förutom root:

  ps aux | grep -v root

De kommandon som normalt läser från tangentbordet och skriver på skärmen (se exempel i Hjälpprogram) lämpar sig särskilt väl för sammankoppling med en pipe. Sådana program brukar kallas ''filter''.


(nästa avsnitt, föregående avsnitt, innehållsförteckning)

If you have any problem using our IT facilities, please feel
free to leave a message by clicking on my mail address.
 james@maths.lth.se

James Hakim