logo

Hvad er /Dev/Null i Linux?

Hvis du har lært shell-programmering, er du muligvis allerede stødt på noget som /dev/null. I denne artikel vil vi forstå, hvad det er, og hvordan det bruges. Lad os starte med at forstå, hvad /dev er.

Hvad er /dev?

I Linux-filsystemet er alt en fil eller en mappe. Selv enheder tilgås som filer. Dine harddiskpartitioner, Pen-drev, højttalere, for alle disse findes der en fil, hvorfra disse er tilgået. For nu at forstå, hvordan enheder tilgås som filer, tænk på det på denne måde: hvad gør vi med en fil? Vi læser data fra den og skriver data til den. En enhed som en højttaler kan indtaste data for at producere lyd, en harddisk kan bruges til at læse og skrive data, en printer tager inputtet til at udskrive filer osv. Filer og enheder ligner på denne måde



/dev er en mappe, der gemmer alle fysiske og virtuelle enheder i et Linux-system. Fysiske enheder er lette at forstå, de er håndgribelige enheder som pen-drev, højttalere, printere osv. Et Linux-system har også virtuelle enheder, der fungerer som en enhed, men som ikke repræsenterer nogen fysisk enhed.

Hvad er /dev/null?

Det er en virtuel enhed, som har en speciel egenskab: Alle data skrevet til /dev/null forsvinder eller forsvinder. På grund af denne egenskab kaldes den også bitbucket eller blackhole. Lad os se en demonstration.

Omdiriger output til /dev/null

I denne demo kan du se, at vi tilføjede nogle data, men at data ikke blev gemt. Denne særlige karakteristik af /dev/null har nogle use cases. Lad os se dem.



Brug af /dev/null

Da den kasserer alt, der er skrevet til den, kan du flytte filer til /dev/null for at slette dem. Men dette er ikke en udbredt use case. Det bruges hovedsageligt til at kassere standardoutput og standardfejl fra en output.

Hvad er standardoutput og standardfejl?

Outputtet af en Linux-kommando indeholder to datastrømme: standardoutput (stdout) og standardfejl (stderr0), mens standardoutputtet er det normale output, hvis kommandoen ikke har nogen fejl, er standardfejlen den fejl, der genereres af kommandoen. Output kan indeholde både standard output og standard input. Eksempel på stdout og stderr:

Lad os køre følgende shell-script



til string array java
# /bin/sh ls apt update>

Den første kommando kørte med succes, men den anden genererede fejl. Da stdout og stderr er to separate datastrømme, kan de håndteres separat.

Hvordan får man adgang til stderr og stdout?

Stdout og stderr er datastrømme, som begge behandles som en fil i Linux. Hvis du ønsker at udføre en handling på disse, bruger du en filbeskrivelse, der entydigt identificerer filstrømmen. Filbeskrivelsen for stdout er 1 og for stderr er 2.

For at få adgang til dem separat, lad os se følgende kommando, som udføres på den samme script-fil, som blev brugt i det forrige eksempel.

./script.sh 1>stdout.txt>

I denne kan du se, at outputtet indeholder standardfejl, men standardoutputtet blev ikke vist. Dette skyldes, at stdout-strømmen blev sendt til filen stdout.txt, og du kan se, at filen stdout.txt indeholder standardoutputtet.

Mens vi skriver et shell-script, vil vi måske kassere standardfejlen fra outputtet. Uanset hvilken strøm vi måtte ønske at undertrykke fra outputtet, kan denne strøm af data skrives ind i /dev/null. Du kan skrive disse data ind i en anden fil, ligesom eksemplet ovenfor, men hvis du ikke har brug for disse data, hvorfor vil du så spilde hukommelse på det, det er bedre at kassere det helt. Lad os se følgende eksempel

./script.sh 2>/dev/null>

Og ligesom det har vi fjernet stderr fra outputtet. Hvis du ønsker at kassere hele outputtet, kan du bruge følgende kommando

command>/dev/null 2>&1>

Kommandoen &> omdirigerer outputtet af filbeskrivelsen, som er nævnt til venstre (i ovenstående kommando, outputtet af 2) til strømmen af ​​filbeskrivelsen nævnt i højre side. Så outputtet af stderr (2) bliver omdirigeret til stdout(1), som igen bliver skrevet i /dev/null og dermed bliver ødelagt.

Sikker filsletning

'/dev/null' finder nytte i sikker filsletning. Ved at omdirigere '/dev/null' til en fil, kan du effektivt overskrive dens indhold med null-bytes, hvilket gør det udfordrende at gendanne meningsfulde data.

For eksempel:

cat /dev/null>sensitive_file>

Denne kommando erstatter indholdet af 'sensitive_file' med null-bytes, hvilket sikrer sikker sletning.

Rensning af logfiler

Logfiler kan akkumulere betydelige data over tid. For at rydde logfiler uden at afbryde kørende tjenester, kan du omdirigere deres indhold til '/dev/null.'

For eksempel:

cat /dev/null>/var/log/syslog>

Denne kommando tømmer 'syslog'-filen ved at omdirigere dens indhold til '/dev/null', og renser effektivt loggen uden at slette selve filen.

Tips og tricks:

  • Omdirigerer standardoutput til '/dev/null': 'command> /dev/null'
  • Omdirigerer standardfejl til '/dev/null': 'kommando 2> /dev/null'
  • Omdirigerer både output og fejl til '/dev/null': 'command>/dev/null 2>&1'

Konklusion

I denne artikel diskuterede vi at `/dev/null' i Linux er et virtuelt sort hul, hvor data forsvinder, når de skrives til det. Det bruges almindeligvis til at kassere output og fejl, hvilket gør kommandoudførelsen renere. Det kan også bruges til sikker sletning af filer og rensning af logfiler. Forståelse af dens funktionalitet giver mulighed for effektive kommandolinjeoperationer i Linux.