Hva gjør 2>/dev/null?

Hva gjør 2>/dev/null?
Enten du er en ny Linux -bruker eller en erfaren bash -programmerer, er det høyst sannsynlig at du har opplevd den kryptiske kommandoen 2>/dev/null. Selv om denne kommandoen ser teknisk sammensatt ut, er formålet veldig enkelt. Det refererer til en nullenhet som brukes til å undertrykke utganger fra forskjellige kommandoer. Denne artikkelen vil bryte ned hver del av 2>/dev/null -kommandoen, forklare dens formål og se eksempler på hvordan den brukes.

NULL -enhet - '/dev/null'

Alle Linux-baserte systemer har en funksjon som heter virtuelle enheter. Disse virtuelle enhetene samhandler som faktiske filer i operativsystemet. Arbeidet med slike virtuelle enheter ligner på virkelige enheter; De er vant til å skrive og lese data. Hovedforskjellen mellom de to er at dataene for de virtuelle enhetene leveres av operativsystemet.

/dev/null er en null-enhet-en spesiell type virtuell enhet. Det er til stede i hvert Linux -system, og formålet med denne enheten er å forkaste alt som er sendt til det og lese slutten av filen (EOF). De fleste virtuelle enheter brukes til å lese data; Imidlertid er /dev /null unik siden det brukes til å undertrykke data skrevet til den. Med enkle ord fungerer det som et svart hull for alle data som er skrevet til det i Linux -operativsystemer.

La oss nå se på de gjenværende delene av 2> /dev /null -kommandoen

Filbeskrivelse - '2'

Hver kommandoutførelse i Linux genererer tre tilknyttede filer: Standardinngang, standardutgang og standardfeilfiler. Linux-operativsystemet refererer til hver av disse filene med et unikt ikke-negativt heltall.

  • '0' for standardinngang
  • '1' for standardutgang
  • '2' for standardfeil

De tekniske begrepene for standardinngang, standardutgang og standardfeilstrømmer er henholdsvis STDIN, STDOUT og STDERR.

Vi vet at tallet '2' i kommandoen '2>/dev/null' refererer til standardfeil (STDERR) -strømmen.

FIL -omdirigeringsoperatør - '>'

'>' -Symbolet er kjent som filomdirigeringsoperatøren. Hensikten er å lede det som er til venstre for kommandoene på høyre side. Med enklere ord vil enhver streng med data til venstre bli rettet mot høyre side av operatøren.

Så langt har vi forstått formålet bak hver komponent i 2>/dev/null -kommandoen. Den sender feilstrømmen til /dev /null, som kaster den. Med andre ord, denne kommandoen brukes til å kaste og undertrykke feilutgangene. Imidlertid, hvis du er en erfaren Linux -veteran, kan du se på innholdet i /dev /null -filen ved å kjøre følgende kommando i terminalen:

$ ls -l /dev /null

Denne kommandoen brukes vanligvis i scenarier der vi trenger å filtrere utgang basert på feil eller når vi vil forkaste en hvilken som helst utdata forbundet med feilaktige beskrivelser. Fremover vil vi se på eksempler på bruken på et Ubuntu -system.

Bruker 2>/dev/null

Siden vi vet at kommandoen 2>/dev/null brukes til å forkaste feil, vil den alltid brukes i forbindelse med andre kommandoer. Vi vil se en lignende tilnærming i følgende eksempler. Du kan åpne terminalen enten ved å få tilgang til den via applikasjonsmenyen eller bruke tastatursnarveien Ctrl + ALT + T.

I det første eksemplet vil vi gjennomføre et søk i / sys / katalogen for en tilfeldig streng (Helloworld i dette tilfellet). Kommandoen for søk er grep, og argumentet vil være søkestrengen. Skriv inn følgende kommando for å søke etter strengen din.

$ grep -r helloworld /sys /

Denne søkekommandoen er bundet til å vise mange feil siden den brukes uten rottilgang. Vi sender feilstrømmen til/dev/null ved å bruke kommandoen 2>/dev/null for å forkaste disse feilene.

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

Vi kan se at kommandoen er mye penere og enklere enn den siste. Årsaken er at feilene blir kastet ved bruk.

For å forstå bruken av /dev /null bedre, vil vi se på følgende eksempel på å pinge et nettsted (Google.com i vårt tilfelle). Du kan pinge google.com ved å utføre følgende kommando:

$ ping google.com

Hvis vi ønsker å ekskludere alle de mislykkede pingene, kan vi bruke 2>/dev/null -kommandoen:

$ ping google.com 2> /dev /null

I dette tilfellet er standard feilstrømmen (som viser de mislykkede pingene til Google.com) blir sendt til den virtuelle enheten /dev /null som kaster dem.

Imidlertid, hvis vi bare ønsker å se de mislykkede pingene, kan vi utføre følgende kommando:

$ ping google.com 1> /dev /null

Her sender vi standard utgangsstrøm (stdout) til /dev /null -enheten som kaster den. Følgelig sitter vi bare igjen med pingene som ikke klarte å nå Google.com server. I vårt tilfelle var det imidlertid ingen mislykkede pinger. Vi kan også lede stdout og stderr til forskjellige steder. Dette er nyttig hvis vi ønsker å forkaste utgangs- og lagringsfeil i en logg eller omvendt. Du kan kjøre følgende kommando for å lagre de mislykkede pingene i en feillogg mens du kasserer standardutgangen til Ping -kommandoen:

$ ping google.com 1> /dev /null 2> feil.Logg

Ved anledninger kan det være lurt å undertrykke all output fra en kommando (inkludert standardutgang og standardfeil). Vi kan oppnå dette ved å bruke /dev /null -enheten på en litt annen måte. Du kan skrive inn følgende kommando for å undertrykke all utgang:

$ ping google.com>/dev/null 2> & 1

Merk at rekkefølgen på kommandoer her er veldig viktig. Etter å ha utført ping -kommandoen, '>/dev/null' forteller systemet å undertrykke utdataene, og '2> & 1' leder standard feilstrømmen til standardutgang. På denne måten blir all output av kommandoen kastet.

Konklusjon

Vi har dissekert 2>/dev/null -kommandoen og enkle eksempler i denne artikkelen, og forhåpentligvis forstår du nå hva hver bit av det gjør. Dette er imidlertid bare toppen av isfjellet; NULL -enheter brukes på mange måter i bash -programmering. Noen av de mer avanserte bruksområdene inkluderer eksistens fra fil, automatisering av pakkeinstallasjoner og unngå skript fra å løpe inn i uønskede unntak.