I förra artikeln (se del 2) beskrev jag ett antal grundläggande kommandon som används. I denna artikel ska jag beskriva omdirigering och s.k “pipes” för att bygga mer komplexa kommandokombinationer.

Textströmmar

Textströmmar är kanalerna som skickar text till och från ett kommando

programio

I Linux finns det 3 st olika strömmar definierade

  • Standard in, förkortast oftast som stdin eller 0, detta är den kanal som skickar in text till kommandot, oftast är detta  tangetbordet
  • Standard ut förkortas oftast som stdout eller 1, detta är den kanal som skickar ut text från kommandot, oftast är detta bildskärmen
  • Standard fel förkortas oftast som stderr eller 2, detta är den kanal som skickar ut felmmedlanden från kommandot, oftast är detta samma utenhet som för Standard ut

Normalt används tangentbord och bildskärm som in och utenheter men med vissa special tecken kan man styra om dessa kanaler.

Det vanligast är att man vill spara resultatet från ett kommando till en fil, detta görs genom att man lägger till ett större-än tecken > följt av namnet på filen som man vill skicka resultatet till. T.ex om man vill spara resultatet från från en ls -l till en fil.

lslista

 

så kan man göra det med ls -l > spara.txt

lsfil

 

Som du ser så lagras det som tidigare skickades till bildskärmen ner i en fil. Som du ser så finns filen spara.txt finns med i listan men men 0 teckens storlek då filen skapades innan kommandot utfördes.

På samma sätt använder man sig av ett mindre-än tecken < följt av namnet på filen men indata för att styra om indata strömmen från tangentbord till en fil.

stdin

 

Man kan även skicka felmeddelanden till en speciell fil, man gör på samma sätt som för standard ut förutom att man sätter en 2 före för att visa att det är felmeddelanden som ska styras till fil

stdfel

 

Alla tre typerna går att kombinera fritt och ordningen spelar ingen roll.

teekopia

Pipes

När man vill använda data som kommer från ett kommando som indata till ett annat kommand så skulle man kunna köra kommando 1,  spara resultatet i en fil och  sedan använda denna fil som indata till kommando 2. Kommandot sort sorterar en lista i bokstavordning.

sortviafil

 

Nu har Linux ett smart sätt att lösa detta utan att man behöver lagra ner mellanresultatet i en fil. Lösningen kallas pipes och fungerar som ett tunnel mellan kommandona. Det som skickas ut på stdout från kommando 1 kopplas som stdin för kommado 2

pipe

 

För att binda ihop kommandona så använder man sig av “pipetecknet” som är ett horisontellt strecket | mellan kommandona. Det går att binda ihop mer är 2 kommandon efter varandra,  det finns egentligen ingen begränsning av hur många man kan sätta efter varandra. Så exemplet ovan kan skrivas mycket enklare med pipe.

pipesort

 

På så sätt kan man bygga ihop väldigt komplex kommando av det befintliga linuxkommandona.