Hvis vi allerede har nogle forestillinger om GNU / Linux-katalogtræet, skal vi i det mindste være fortrolige med / dev / reference, som effektivt er, hvor alle filerne er relateret til hardwareenheder.
Hvis vi kigger i biblioteket / dev / vi vil se en "fil" kaldet null, men hvis vi ønsker at åbne den for at se dens indhold, vil systemet fortælle os, at det ikke er muligt, da det ikke er almindeligt indhold. Jeg har vedlagt ordfilen, fordi, som I alle ved til Linux, er alt (hardware og software) repræsenteret som en fil. |
Hvilken enhed svarer / dev / null til?
Af praktiske formål kan du forestille dig en skraldespand, en bundløs hul eller ydre rum, hvor du kan kaste noget uden mulighed for at genvinde det (uanset hvor hårdt NASA-fyrene prøver).
Men hvis jeg allerede har kommandoer som rm, hvorfor vil jeg så have noget nyt at slette?
Fordi den måde, hvorpå begge "sorte huller" fungerer, er helt anderledes: hvordan vil du gå til at tilsidesætte standardoutputtet for en fejl i en kommando i et shell-script ved kørsel? Dette er hvor / dev / null kommer ind.
Lad os se det med et eksempel.
Vi har oprettet en fil kaldet tests indeholdende strengen "Hello World". Hvis vi vil repræsentere indholdet af den fil på kommandolinjen, kunne vi gøre det på følgende måde:
bruger @ bærbar computer: ~ $ cat test
Hej Verden
Hvis filen ikke eksisterede eller blev navngivet som tests (med en 's' i slutningen), ville vi få følgende fejl i konsollen:
bruger @ bærbar computer: ~ $ kattest
cat: tests: Filen eller biblioteket findes ikke
Hvad kunne vi gøre for at undgå fejlmeddelelsen? Nå, bare omdiriger output af kommandoen i tilfælde af fejl til en "skraldespand", det vil sige til / dev / null
Hvordan angiver vi, at det skal være i tilfælde af fejl? Her indtaster du standardindgangs-, output- og fejlværdierne for et program: STDIN, STDOUT og STDERR (som kan erstattes med henholdsvis 0, 1 og 2). På denne måde, hvis vi sætter ...
bruger @ bærbar computer: ~ $ cat tests 2> / dev / null
bruger @ bærbar computer: ~ $
... Vi ser, at fejlmeddelelsen ikke bliver produceret på konsollen.
Du skal være forsigtig, fordi syntaksen er vigtig: mellem tegnene 2 og> skal der ikke være plads. Ellers ville det give følgende:
bruger @ bærbar computer: ~ $ cat tests 2> / dev / null
cat: tests: Filen eller biblioteket findes ikke
cat: 2: Filen eller biblioteket findes ikke
I modsætning hertil vil et mellemrum mellem> og / dev / null ikke påvirke resultatet negativt.
Vi kunne også bruge fejlomlægning, for eksempel til at registrere fejl i en logfil som følger:
bruger @ bærbar computer: ~ $ cat tests 2> err.log
En anden interessant sag ville være indsamling af resultater i en anden fil, så længe der ikke opstår en fejl, som vi vil lægge:
bruger @ bærbar computer: ~ $ cat test 1> output_result 2> err.log
Endelig er det værd at sætte udtrykket «> / dev / null 2> & 1», hvor standardoutputtet og fejloutputtet kombineres, og omdirigere dem, så outputinformationen under ingen omstændigheder opnås.
Ah, men et af de mest anvendte hjælpeprogrammer, som / dev / null har, mangler, hvilket tømmer filer: $ cat / dev / null> file.log På denne måde vil file.log-filen være tom. Tilføj det!
Det var netop den forklaring, han ledte efter.
Jeg støtter bevægelsen om at tilføje den =)
Saludos!
Hej, først og fremmest er artiklen meget god! det andet vil jeg gerne bidrage med dette link om emnet cron job i php fra Cpanel og den tredje tillykke med bloggen!
Dejlig artikel om dev / null, hvilken skam jeg synes, jeg fejlagtigt har kommenteret det forkerte sted før! jeg undskylder
tak godt bidrag
Hilsen Jeg får nullangreb. Jeg bruger andrirc, og jeg får en privat fra mit kaldenavn med ordet Null. 2 sekunder senere lukker programmet, jeg har læst, og fra det jeg ser, kan dette kun udføres af Shell, ikke nogen ekstern. Jeg har forsøgt at ignorere mig selv / ignorere -lrpcntikd, og intet overrasker mig, at kommandoen fortsætter med at komme. Hvis du har nogen måde at prøve at blokere for, ville jeg sætte pris på det. Skål
Hvad sker der, når symbolet> ikke placeres, når sætningen udføres?
Kan nogen vejlede mig, tak?
Godmorgen, jeg har installeret Debian netinst i ACER Extensa 5620Z – 32 bit. Når installationen fra USB er færdig, og pendrevet er fjernet, så det starter fra harddisken (ikke geninstaller fra pennen), men i opstartsøjeblikket systemet spørger hun mig:
debian login: xxxxxxxx (ok)
Adgangskode: xxxxxxxx (ok)
nil@debian:~$ ???? hvad er dette? Hvad skal jeg sætte der?
Uden denne kommando kan jeg ikke fortsætte med systemstarten.
Kan du hjælpe mig? Jeg ved ikke, hvordan jeg skal fortsætte.
Mange tak. Med venlig hilsen.