Filbehandling

Hva er / dev / null og hvordan du bruker det

Hva er / dev / null og hvordan du bruker det
Linux er et interessant operativsystem som er vert for noen virtuelle enheter for mange formål. Når det gjelder programmer som kjører i systemet, fungerer disse virtuelle enhetene som om de er ekte filer. Verktøy kan be om og mate data fra disse kildene. Dataene genereres av operativsystemet i stedet for å lese dem fra en disk.

Et slikt eksempel er / dev / null. Det er en spesiell fil som finnes i hvert eneste Linux-system. Imidlertid, i motsetning til de fleste andre virtuelle filer, brukes det til å skrive i stedet for å lese. Uansett hva du skriver til / dev / null, vil du bli kastet, glemt i tomrommet. Det er kjent som null-enheten i et UNIX-system.

Hvorfor vil du kaste noe i tomrommet?? La oss sjekke ut hva / dev / null er og bruken.

Forutsetninger

Før du dykker dypt inn i bruken av / dev / null, må vi ha en klar forståelse av stdout og stderr data strøm. Sjekk ut denne grundige guiden på stdin, stderr, og stdout.

La oss få en rask oppdatering. Hver gang et kommandolinjeverktøy kjøres, genererer det to utganger. Produksjonen går til stdout og feilen (hvis generert) går til stderr. Som standard er begge disse datastrømmene tilknyttet terminalen.

For eksempel vil følgende kommando skrive ut strengen innenfor det doble anførselstegnet. Her lagres utdataene i stdout.

$ echo “Hello World”

Den neste kommandoen viser oss utgangsstatus for den tidligere kjørte kommandoen.

$ ekko $?

Ettersom den forrige kommandoen kjørte med hell, er utgangsstatusen 0. Ellers vil utgangsstatusen være annerledes. Hva skjer når du prøver å kjøre en ugyldig kommando?

$ adfadsf
$ ekko $?

Nå må vi vite om filbeskrivelsen. I UNIX-økosystemet er dette heltallverdier som er tildelt en fil. Både stdout (filbeskrivelse = 1) og stderr (filbeskrivelse = 2) har en spesifikk filbeskrivelse. Ved hjelp av filbeskrivelsen (1 og 2 i denne situasjonen) kan vi omdirigere stdout og stderr til andre filer.

For starter vil følgende eksempel omdirigere stdout av ekkokommandoen til en tekstfil. Her spesifiserte vi ikke filbeskrivelsen. Hvis ikke spesifisert, vil bash bruke stdout som standard.

$ echo “Hello World”> logg.tekst

Følgende kommando omdirigerer stderr til en tekstfil.

$ asdfadsa 2> feil.tekst

Bruker / dev / null

Omdirigerer utdata til / dev / null

Nå er vi klare til å lære å bruke / dev / null. La oss først sjekke ut hvordan du filtrerer normal utgang og feil. I den følgende kommandoen vil grep prøve å søke etter en streng (hei, i dette tilfellet) i katalogen “/ sys”.

$ grep -r hallo / sys /

Imidlertid vil det generere mye feil, uten grep privilegium, grep kan ikke få tilgang til et antall filer. I et slikt tilfelle vil det føre til feil "Tillatelse nektet". Nå, ved hjelp av omdirigering, kan vi få en klarere produksjon.

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

Resultatet ser mye bedre ut, ikke sant? Ingenting! I dette tilfellet har grep ikke tilgang til mange filer, og de som er tilgjengelige har ikke strengen “hei”.

I det følgende eksemplet pinger vi Google.

$ ping google.com

Vi ønsker imidlertid ikke å se alle de vellykkede ping-resultatene. I stedet vil vi bare fokusere på feilene når ping ikke kunne nå Google. Hvordan gjør vi det?

$ ping google.com 1> / dev / null

Her, innholdet i stdout blir dumpet til / dev / null, og etterlater bare feilene.

Omdiriger all utdata til / dev / null

I visse situasjoner kan det hende at utgangen ikke er nyttig i det hele tatt. Ved å bruke omdirigering kan vi dumpe all utdata i tomrommet.

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

La oss bryte denne kommandoen litt. Først dumper vi alt stdout til / dev / null. Så, i andre del, ber vi bash om å sende stderr til stdout. I dette eksemplet er det ingenting å sende ut. Men hvis du er forvirret, kan du alltid sjekke om kommandoen kjørte vellykket.

$ ekko $?

Verdien er 2 fordi kommandoen genererte mange feil.

Hvis du pleier å glemme filbeskrivelsen til stdout og stderr, følgende kommando vil gjøre det bra. Det er et mer generalisert format av forrige kommando. Både stdout og stderr vil bli omdirigert til / dev / null.

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

Andre eksempler

Dette er interessant. Husk dd-verktøyet? Det er et kraftig verktøy for konvertering og kopiering av filer. Lær mer om dd. Ved hjelp av dd kan vi teste sekvensiell lesehastighet på disken din. Selvfølgelig er det ikke en nøyaktig måling. For en rask test er det imidlertid ganske nyttig.

$ dd hvis = av = / dev / null status = fremgang bs = 1M iflag = direkte

Her har jeg brukt Ubuntu 18.04.4 ISO som storfil.

På samme måte kan du også teste nedlastingshastigheten til internettforbindelsen.

$ wget -O / dev / null

Siste tanker

Forhåpentligvis har du en klar forståelse av hva denne / dev / null-filen er. Det er en spesiell enhet som, hvis den skrives til den, kasseres og leses fra, leser null. Det sanne potensialet til denne interessante funksjonen er i interessante bash-skript.

Er du interessert i bash scripting? Sjekk ut nybegynnerveiledningen for bash scripting.

Nyt!

Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...
Hvordan utvikle et spill på Linux
For et tiår siden ville ikke mange Linux-brukere forutsi at deres favorittoperativsystem en dag ville være en populær spillplattform for kommersielle ...
Åpne kildeporter for kommersielle spillmotorer
Gratis, åpen kildekode og plattformspillmotorrekreasjoner kan brukes til å spille gamle så vel som noen av de ganske nylige spilletitlene. Denne artik...