I tekniske termer, /dev/null er en virtuel enhedsfil. Hvad angår programmer, behandles disse ligesom rigtige filer. Hjælpeprogrammer kan anmode om data fra denne type kilde, og operativsystemet giver dem data. Men i stedet for at læse fra disk, genererer operativsystemet disse data dynamisk. Et eksempel på en sådan fil er /dev/zero.

I dette tilfælde vil du dog skrive til en enhedsfil. Uanset hvad du skriver til /dev/null bliver kasseret, glemt, smidt ud i tomrummet. For at forstå, hvorfor dette er nyttigt, skal du først have en grundlæggende forståelse af standardoutput og standardfejl i operativsystemer af typen Linux eller *nix.

stdout og stder

Et kommandolinjeværktøj kan generere to typer output. Standard output sendes til stdout. Fejl sendes til stderr.

Som standard er stdout og stderr knyttet til dit terminalvindue (eller konsol). Det betyder, at alt, der sendes til stdout og stderr, normalt vises på din skærm. Men gennem shell-omdirigeringer kan du ændre denne adfærd. For eksempel kan du omdirigere stdout til en fil. På denne måde, i stedet for at vise output på skærmen, bliver det gemt i en fil, som du kan læse senere – eller du kan omdirigere stdout til en fysisk enhed, f.eks. en digital LED- eller LCD-skærm.

En komplet artikel om rør og omdirigeringer er tilgængelig, hvis du vil vide mere.

  • Med 2> du omdirigerer standard fejlmeddelelser. Eksempel: 2>/dev/null eller 2>/home/user/error.log.
  • Med 1> du omdirigerer standardoutput.
  • Med &> du omdirigerer både standardfejl og standardoutput.

Brug /dev/null for at slippe af med output, du ikke har brug for

Da der er to typer output, standardoutput og standardfejl, er den første use case at filtrere den ene eller den anden type fra. Det er lettere at forstå gennem et praktisk eksempel. Lad os sige, at du leder efter en snor i /sys for at finde filer, der henviser til strømindstillinger.

Der vil være en masse filer, som en almindelig, ikke-root-bruger ikke kan læse. Dette vil resultere i mange Permission denied fejl.

Disse roder i outputtet og gør det sværere at få øje på de resultater, du leder efter. Siden Permission denied fejl er en del af stderr, du kan omdirigere dem til /dev/null.

grep -r power /sys/ 2>/dev/null
Dev Null Grep uden fejl

Som du kan se, er dette meget nemmere at læse.

I andre tilfælde kan det være nyttigt at gøre det omvendte: filtrer standardoutput fra, så du kun kan se fejl.

ping google.com 1>/dev/null
Dev Null Ping-fejl

Skærmbilledet ovenfor viser, at uden omdirigering viser ping sit normale output, når det kan nå destinationsmaskinen. I den anden kommando vises intet, mens netværket er online, men så snart det bliver afbrudt, vises kun fejlmeddelelser.

Du kan omdirigere både stdout og stderr til to forskellige steder.

ping google.com 1>/dev/null 2>error.log

I dette tilfælde vil stdout-meddelelser slet ikke blive vist, og fejlmeddelelser vil blive gemt i error.log.

Omdiriger alt output til /dev/null

Nogle gange er det nyttigt at slippe af med alt output. Der er to måder at gøre dette på.

grep -r power /sys/ >/dev/null 2>&1

Snoren >/dev/null send stdout to /dev/null, og anden del, 2>&1, betyder at sende stderr til stdout. I dette tilfælde skal du henvise til stdout som &1 af simpelthen 1. Skrivning 2>1 ville bare omdirigere stdout til en fil med navnet 1.

Det, der er vigtigt at bemærke her, er, at rækkefølgen er vigtig. Hvis du vender omdirigeringsparametrene på denne måde:

grep -r power /sys/ 2>&1 >/dev/null

det vil ikke virke efter hensigten. Det er fordi, så snart 2>&1 fortolkes, sendes stderr til stdout og vises på skærmen. Dernæst undertrykkes stdout, når den sendes til /dev/null. Det endelige resultat er, at du vil se fejl på skærmen i stedet for at undertrykke alt output. Hvis du ikke kan huske den rigtige rækkefølge, er der en enklere omdirigering, som er meget nemmere at skrive:

grep -r power /sys/ &>/dev/null

I dette tilfælde, &>/dev/null svarer til at sige redirect both stdout and stderr to this location.

Andre eksempler, hvor det kan være nyttigt at omdirigere til /dev/null

Lad os sige, at du vil se, hvor hurtigt din disk kan læse sekventielle data. Testen er ikke ekstremt nøjagtig, men præcis nok. Du kan bruge dd for dette, men dd udsender enten til stdout eller kan blive bedt om at skrive til en fil. Med of=/dev/null du kan bede dd om at skrive til denne virtuelle fil. Du behøver ikke engang at bruge shell-omdirigeringer her. if= angiver placeringen af ​​inputfilen, der skal læses; of= angiver navnet på outputfilen, hvor der skal skrives.

dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct
Dev Null Dd

I nogle scenarier vil du måske se, hvor hurtigt du kan downloade fra en server. Men du ønsker ikke at skrive til din disk unødigt. Simpelthen nok, skriv ikke til en almindelig fil, skriv til /dev/null.

wget -O /dev/null http://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso

Konklusion

Forhåbentlig kan eksemplerne i denne artikel inspirere dig til at finde dine egne kreative måder at bruge /dev/null.

Kender du en interessant use-case for denne specielle enhedsfil? Efterlad en kommentar nedenfor og del viden!

Previous article3 usædvanlige Android-startere, du kan bruge til at gøre din telefon sjovere
Next article3 af de bedste tidsregistreringsværktøjer til at gøre fakturering nemmere