Vad exakt gör 2>/dev/null?

What Exactly Does 2 Dev Null Do



Oavsett om du är en ny Linux -användare eller en erfaren bash -programmerare är det mycket troligt att du stötte på det kryptiska kommandot 2>/dev/null. Även om det här kommandot ser tekniskt komplext ut, är dess syfte väldigt enkelt. Det hänvisar till en null -enhet som används för att undertrycka utsignaler från olika kommandon. Denna artikel kommer att bryta ner varje del av kommandot 2>/dev/null, förklara dess syfte och se exempel på hur det används.

Null -enhet - ‘/dev/null’

Alla Linux-baserade system har en funktion som kallas virtuella enheter. Dessa virtuella enheter interagerar som faktiska filer i operativsystemet. Funktionen för sådana virtuella enheter liknar verkliga enheter; de används för att skriva och läsa data. Huvudskillnaden mellan de två är att data för de virtuella enheterna levereras av operativsystemet.







/dev/null är en null -enhet - en speciell typ av virtuell enhet. Det finns i alla Linux -system, och syftet med denna enhet är att kasta allt som skickas till det och läsa slutet av filen (EOF). De flesta virtuella enheter används för att läsa data; emellertid är /dev /null unikt eftersom det används för att undertrycka all data som skrivs till det. I enkla ord fungerar det som ett svart hål för all data som skrivs till det i Linux -operativsystem.



Låt oss nu ta en titt på de återstående delarna av kommandot 2> /dev /null



Filbeskrivning - ‘2’

Varje kommandoutförande i Linux genererar tre associerade filer: standardinmatning, standardutmatning och standardfelfiler. Linux-operativsystemet hänvisar till var och en av dessa filer med ett unikt icke-negativt heltal.





  • '0' för standardinmatning
  • '1' för standardutmatning
  • '2' för standardfel

De tekniska termerna för standardinmatning, standardutmatning och standardfelström är stdin, stdout respektive stderr.

Vi vet att siffran ‘2’ i kommandot ‘2>/dev/null’ hänvisar till standardfelströmmen (stderr).



Filomdirigeringsoperatör - '>'

'>' -Symbolen är känd som filomdirigeringsoperatören. Dess syfte är att rikta det som är till vänster till kommandona på höger sida. Med enklare ord kommer valfri datasträng till vänster att riktas till operatörens högra sida.

Hittills har vi förstått syftet bakom varje komponent i kommandot 2>/dev/null. Den skickar felströmmen till /dev /null, som kasserar den. Med andra ord används detta kommando för att kasta och undertrycka felutmatningar. Men om du är en erfaren Linux -veteran kan du titta på innehållet i filen /dev /null genom att köra följande kommando i terminalen:

$ls -de /dev/null

Det här kommandot används vanligtvis i scenarier där vi måste filtrera utdata baserat på fel eller när vi vill kasta bort alla utdata som är associerade med felaktiga beskrivningar. Framöver kommer vi att titta på exempel på dess användning på ett Ubuntu -system.

Använda 2>/dev/null

Eftersom vi vet att kommandot 2>/dev/null används för att kassera fel kommer det alltid att användas tillsammans med andra kommandon. Vi kommer att se ett liknande tillvägagångssätt i följande exempel. Du kan öppna terminalen antingen genom att öppna den via programmenyn eller använda kortkommandot Ctrl + Alt + T.

I det första exemplet kommer vi att söka i / sys / katalogen efter en slumpmässig sträng (helloworld i det här fallet). Kommandot för sökning är grep, och dess argument är söksträngen. Ange följande kommando för att söka efter din sträng.

$grepp -rHej världen/sys/

Detta sökkommando kommer att visa många fel eftersom det används utan root -åtkomst. Vi skickar dess felström till/dev/null med kommandot 2>/dev/null för att kassera dessa fel.

$grepp -rHej världen/sys/ 2> /dev/null

Vi kan se att utmatningen av kommandot är mycket snyggare och enklare än den förra. Anledningen är att felen kasseras genom att använda 2> /dev /null, och eftersom grep -kommandot inte kunde hitta någon fil som matchar vår sträng 'helloworld', visar den ingen utdata.

För att förstå användningen av /dev /null bättre kommer vi att titta på följande exempel på att pinga vilken webbplats som helst (google.com i vårt fall). Du kan pinga google.com genom att utföra följande kommando:

$pingGoogle com

Om vi ​​vill utesluta alla misslyckade pingar kan vi använda kommandot 2>/dev/null:

$pingGoogle com2> /dev/null

I det här fallet skickas standardfelströmmen (som visar de misslyckade pingarna till google.com) till den virtuella enheten /dev /null som kasserar dem.

Men om vi bara vill se de misslyckade pingarna kan vi utföra följande kommando:

$pingGoogle com1> /dev/null

Här skickar vi standardutmatningsströmmen (stdout) till /dev /null -enheten som kasserar den. Följaktligen är vi bara kvar med pingarna som inte lyckades nå google.com -servern. Men i vårt fall fanns det inga misslyckade pingar. Vi kan också styra stdout och stderr till olika platser. Detta är användbart om vi vill kasta utdata och lagra fel i en logg eller vice versa. Du kan köra följande kommando för att lagra de misslyckade pingarna i en fellogg samtidigt som du slänger standardutmatningen för ping -kommandot:

$pingGoogle com1> /dev/null2>felloggen

Ibland kanske du vill undertrycka all utmatning av ett kommando (inklusive standardutmatning och standardfel). Vi kan uppnå detta genom att använda /dev /null -enheten på ett något annorlunda sätt. Du kan skriva följande kommando för att undertrycka all utdata:

$pingGoogle com> /dev/null2> &1

Observera att ordningen på kommandon här är mycket viktig. Efter att ha utfört ping -kommandot säger '>/dev/null' till systemet att undertrycka utmatningen och '2> & 1' dirigerar standardfelströmmen till standardutmatning. På detta sätt kasseras all utmatning av kommandot.

Slutsats

Vi har dissekerat kommandot 2>/dev/null och enkla exempel i den här artikeln, och förhoppningsvis förstår du nu vad varje bit av det gör. Detta är dock bara toppen av isberget; null -enheter används på många sätt i bash programmering. Några av de mer avancerade användningsområdena är bland annat att kontrollera filens existens, automatisera paketinstallationer och undvika att manus stöter på oönskade undantag.