I Linux är ett rör en mekanism för kommunikation mellan processen (IPC). Det gör att utgången från en process kan anslutas direkt till ingången till en annan process, vilket skapar en enkelriktad dataström. Tänk på det som en virtuell ledning som transporterar data mellan program utan behov av mellanliggande filer eller komplexa delade minnestekniker.
Här är en uppdelning:
* Mekanism: Ett rör är i huvudsak en filbeskrivning som fungerar som en buffert. Skrivprocessen skriver data till denna buffert, och läsningsprocessen läser data från den. Kärnan hanterar buffring och synkronisering mellan processerna.
* enkelriktad: Data flyter endast i en riktning - från skrivprocessen (producent) till läsningsprocessen (konsument).
* Syntax: Rör skapas med rörsymbolen `|` i skalet (t.ex. bash, zsh). Denna symbol separerar kommandon och ansluter standardutgången (stdout) för kommandot till vänster till standardingången (stdin) för kommandot till höger.
* Exempel:
Kommandot `ls -l | grep "txt" "visar ett rör.
* `ls -l` listar filer och kataloger i långformat. Dess utgång (en lista med filnamn och detaljer) skickas till röret.
* `grep" txt "` söker efter rader som innehåller "txt". Den tar emot sina ingångar från röret (utgången från `ls -l`). Utgången från "grep" txt "" visar bara filerna med ".txt" -förlängningen.
* typer: Det finns två huvudtyper:
* anonyma rör (namngivna rör): Skapad med `|` operatören i skalet. De finns endast under kommando -rörledningen.
* namngivna rör (FIFOS): Skapad med kommandot `mkfifo '. Dessa rör kvarstår även efter att skapa processutgångar, vilket gör att flera processer kan kommunicera asynkront. De har ett namn i filsystemet.
* Fördelar:
* Effektivitet: Data överförs direkt mellan processer och undviker omkostnaderna för att skapa och läsa tillfälliga filer.
* enkelhet: Lätt att använda inom skalkommandon.
* Flexibilitet: Tillåter att kedja flera kommandon tillsammans för komplexa arbetsflöden för databehandling.
* Begränsningar:
* enkelriktad: Data flyter bara i en riktning. För dubbelriktad kommunikation behövs andra IPC -mekanismer (t.ex. uttag).
* Blockering: Om skrivprocessen producerar data snabbare än läsningsprocessen förbrukar det, kan skrivprocessen blockera (vänta) tills bufferten har tillräckligt med utrymme. På liknande sätt kan läsprocessen blockera om bufferten är tom.
Sammanfattningsvis är rör ett grundläggande och kraftfullt verktyg i Linux för att skapa effektiva och kortfattade databehandlingsrörledningar genom att sömlöst ansluta utgången från ett program till ett annat ingång.