Filhantering

Vad är / dev / null och hur man använder det

Vad är / dev / null och hur man använder det
Linux är ett intressant operativsystem som är värd för vissa virtuella enheter för många ändamål. När det gäller program som körs i systemet, fungerar dessa virtuella enheter som om de är riktiga filer. Verktyg kan begära och mata data från dessa källor. Data genereras av operativsystemet istället för att läsa dem från en disk.

Ett sådant exempel är / dev / null. Det är en speciell fil som finns i varje enskilt Linux-system. Till skillnad från de flesta andra virtuella filer används det istället för att läsa det för att skriva. Vad du än skriver till / dev / null kommer att kasseras, glömmas bort i tomrummet. Det är känt som null-enheten i ett UNIX-system.

Varför skulle du vilja kasta något i tomrummet? Låt oss kolla vad / dev / null är och dess användning.

Förutsättningar

Innan vi dyker djupt in i användningen av / dev / null måste vi ha ett tydligt grepp om stdout och stderr dataström. Kolla in den här fördjupade guiden stdin, stderr, och stdout.

Låt oss ta en snabb uppdatering. Närhelst något kommandoradsverktyg körs genererar det två utgångar. Produktionen går till stdout och felet (om det genereras) går till stderr. Som standard är båda dessa dataströmmar associerade med terminalen.

Till exempel kommer följande kommando att skriva ut strängen inom det dubbla citattecknet. Här lagras utgången i stdout.

$ echo “Hello World”

Nästa kommando visar oss utgångsstatus för det tidigare körda kommandot.

$ echo $?

Eftersom det tidigare kommandot kördes framgångsrikt är utgångsstatus 0. I annat fall kommer utgångsstatusen att vara annorlunda. Vad händer när du försöker köra ett ogiltigt kommando?

$ adfadsf
$ echo $?

Nu måste vi veta om filbeskrivaren. I UNIX-ekosystemet är detta heltal som tilldelats en fil. Både stdout (filbeskrivare = 1) och stderr (filbeskrivare = 2) har en specifik filbeskrivare. Med hjälp av filbeskrivaren (1 och 2 i denna situation) kan vi omdirigera stdout och stderr till andra filer.

För starter, kommer följande exempel att omdirigera stdout av ekokommandot till en textfil. Här specificerade vi inte filbeskrivaren. Om det inte anges kommer bash att använda stdout som standard.

$ echo “Hello World”> logg.Text

Följande kommando omdirigerar stderr till en textfil.

$ asdfadsa 2> fel.Text

Använda / dev / null

Omdirigerar utdata till / dev / null

Nu är vi redo att lära oss hur man använder / dev / null. Låt oss först kolla hur man filtrerar normal utmatning och fel. I följande kommando försöker grep söka efter en sträng (hej, i det här fallet) i katalogen “/ sys”.

$ grep -r hej / sys /

Det kommer dock att generera mycket fel eftersom grep inte har tillgång till ett antal filer utan root-behörighet. I ett sådant fall kommer det att resultera i ”Tillstånd nekad” -fel. Nu, med hjälp av omdirigeringen, kan vi få en tydligare produktion.

$ grep -r hej / sys / 2> / dev / null

Produktionen ser mycket bättre ut, eller hur? Ingenting! I det här fallet har grep inte tillgång till många filer och de som är tillgängliga har inte strängen "hej".

I följande exempel pingar vi Google.

$ ping google.com

Vi vill dock inte se alla de framgångsrika pingresultaten. Istället vill vi bara fokusera på felen när ping inte kunde nå Google. Hur gör vi det?

$ ping google.com 1> / dev / null

Här, innehållet i stdout dumpas till / dev / null, så att endast felen lämnas.

Omdirigera all utdata till / dev / null

I vissa situationer kanske utdata inte är användbar alls. Med omdirigering kan vi dumpa all utdata i tomrummet.

$ grep -r hej / sys /> / dev / null 2> & 1

Låt oss bryta detta kommando lite. Först dumpar vi allt stdout till / dev / null. Sedan, i den andra delen, ber vi bash att skicka stderr till stdout. I det här exemplet finns det inget att mata ut. Men om du är förvirrad kan du alltid kontrollera om kommandot kördes framgångsrikt.

$ echo $?

Värdet är 2 eftersom kommandot genererade många fel.

Om du brukar glömma filbeskrivaren för stdout och stderr, följande kommando kommer att fungera bra. Det är ett mer generaliserat format av föregående kommando. Både stdout och stderr kommer att omdirigeras till / dev / null.

$ grep -r hej / sys / &> / dev / null

Andra exempel

Det här är intressant. Kom ihåg dd-verktyget? Det är ett kraftfullt verktyg för att konvertera och kopiera filer. Läs mer om dd. Med hjälp av dd kan vi testa sekvensens läshastighet för din disk. Naturligtvis är det inte en korrekt mätning. Men för ett snabbtest är det ganska användbart.

$ dd if = av = / dev / null status = framsteg bs = 1M iflag = direkt

Här har jag använt Ubuntu 18.04.4 ISO som den stora filen.

På samma sätt kan du också testa nedladdningshastigheten för din internetanslutning.

$ wget -O / dev / null

Slutgiltiga tankar

Förhoppningsvis har du en klar förståelse för vad denna / dev / null-fil är. Det är en speciell enhet som, om den skrivs till den, kasseras och läses från den läser null. Den verkliga potentialen för denna intressanta funktion ligger i intressanta bash-skript.

Är du intresserad av bash scripting? Kolla in nybörjarguiden för bash scripting.

Njut av!

Hur man visar FPS-räknare i Linux-spel
Linux-spel fick ett stort tryck när Valve tillkännagav Linux-stöd för Steam-klient och deras spel 2012. Sedan dess har många AAA- och indiespel tagit ...
Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...
Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...