Förhoppningsvis är du bekant med grunderna rörande omdirigering av I/O (Input, Output) i skalet, i synnerhet grundkoncepten “standard input”, “standard output” och “standard error”. Om inte, så följer här en snabb genomgång, “standard input” är en datakälla, från vilken data kommer. Ett program varken behöver, eller ska bry sig om, varifrån data kommer, vare sig det är från en fil, tangentbordet, ett magnetband, eller en hålkortsläsare. På samma sätt är “standard output” ett ställe där data skickas till, ett program ska inte heller behöva veta, eller bry sig om vad det är för något. Det kan vara en bildskärm, en fil, en dvd-brännare, eller vad som helst.
Program som bara läser standard input, gör någonting med datan som det läser, och sedan skickar det vidare ut genom standard output, kallas för “filter”, detta kan bildligt jämföras med filter i en vattenledning, eller ett avloppsrör.
Med ett skal i Unix är det väldigt lätt att sätta upp “datarör”:
datagenererande_program | filter1 | ... | filterN > slutgiltig.vacker.data
Vi börjar med att skapa rå data; varje filter utför någon förvandling av datan, tills dess att datan kommer ut ur “röret”, med det önskade utseendet och formen.
Detta är bra på alla sätt för standard input och standard output, men vad hände med standard error då? Titta på “filter1” i exemplet ovan. Vad händer om filter1 skulle upptäcka ett fel i datan som den läser från standard input? Om filter1 skulle skriva ett felmeddelande till standard output, så skulle meddelanded försvinna genom dataröret, in till filter2, och användaren (du) kommer förmodligen aldrig att se det, eller mer troligt, det kommer att få din slutgiltiga data att bli allt annat än vacker. Så, program behöver någonting dit de kan skicka felmeddelanden så att användaren kan upptäcka dem. Detta är standard error, och den är vanligtvis ansluten till din terminal eller fönster, även om du har dirigerat om standard output till en fil, eller någon annanstans.
För att filterprogram ska kunna fungera tillsammans behöver utseendet, formatet på datan vara förutbestämt. Det enklaste formatet att använda är helt enkelt rader av text. Datafiler i Unix är vanligtvis strömmar av bytes, med radbrytning i form utav ett ASCII LF-tecken (Line Feed), kort och gott kallad “newline” (ny rad) i Unix-litteraturen. (Om du t ex är C-programmerare är detta “\n”.) Detta är det format som alla traditionella filterprogram i Unix använder. (Många äldre (och en del senare också..) operativsystem hade onödigt komplicerade dataformat och specialprogram för att hantera binär data. Unix har alltid hållt sig borta från sådana saker, med filosofin att det är helt enkelt enklast att kunna titta på, och redigera data med en texteditor.)
Det får räcka med introduktion för stunden. I följande avsnitt ska vi ta en titt på några olika verktyg, och hur man kan koppla samman dem på olika sätt. I avsnitten som följer kommer vi endast titta på de växlar (options) som intresserar oss, du ska som alltid läsa i manualen för att lära dig mera och se hela bilden.
Relaterade artiklar: