Ak už máme nejaké predstavy o adresárovom strome GNU / Linux, mali by sme byť oboznámení aspoň s / dev / reference, ktorá je vlastne miestom, kde sa nachádzajú všetky súbory spojené s hardvérové zariadenia.
Ak sa pozrieme do adresára / dev / uvidíme „súbor“ s názvom null, ale ak ho chceme otvoriť, aby sme videli jeho obsah, systém nám oznámi, že to nie je možné, pretože nejde o bežný obsah. Priložil som slovo súbor, pretože ako všetci viete v systéme Linux, všetko (hardvér a softvér) je reprezentované ako súbor. |
Akému zariadeniu zodpovedá / dev / null?
Pre praktické účely si predstavte odpadkový kôš, bezodnú jamu alebo vesmír, do ktorého môžete vrhnúť čokoľvek bez možnosti ich získania (bez ohľadu na to, ako veľmi sa chlapci z NASA snažia).
Ale ak už mám príkazy ako rm, prečo chcem niečo nové vymazať?
Pretože spôsob, akým fungujú obe „čierne diery“, je úplne odlišný: ako by ste postupovali pri prepísaní štandardného výstupu chyby v príkaze v skripte shellu za behu programu? Tu prichádza na rad / dev / null.
Pozrime sa na príklad.
Vytvorili sme súbor s názvom testy obsahujúci reťazec „Hello World“. Ak chceme reprezentovať obsah tohto súboru na príkazovom riadku, mohli by sme to urobiť nasledujúcim spôsobom:
používateľ @ laptop: ~ $ test mačiek
Ahoj svet
Ak súbor neexistoval alebo bol pomenovaný ako testy (na konci je písmeno „s“), v konzole by sa vyskytla nasledujúca chyba:
user @ laptop: ~ $ mačacie testy
cat: tests: Súbor alebo adresár neexistuje
Čo by sme mohli urobiť, aby sme sa vyhli chybovému hláseniu? Jednoducho presmerujte výstup príkazu, v prípade chyby, na „odpadkový kôš“, to znamená na / dev / null
Ako ho určíme v prípade chyby? Tu zadáte štandardné vstupné, výstupné a chybové hodnoty pre program: STDIN, STDOUT a STDERR (ktoré je možné nahradiť 0, 1 a 2). Týmto spôsobom, ak dáme ...
user @ laptop: ~ $ cat testy 2> / dev / null
používateľ @ laptop: ~ $
... Uvidíme, že chybové hlásenie sa na konzole nevytvorí.
Musíte byť opatrní, pretože syntax je nevyhnutná: medzi znakmi 2 a> by nemal byť žiadny priestor. V opačnom prípade by to poskytlo toto:
user @ laptop: ~ $ cat testy 2> / dev / null
cat: tests: Súbor alebo adresár neexistuje
cat: 2: Súbor alebo adresár neexistuje
Naproti tomu medzera medzi> a / dev / null nebude mať negatívny vplyv na výsledok.
Mohli by sme napríklad použiť aj presmerovanie chýb, aby sme chyby v protokolovom súbore zachytili nasledovne:
user @ laptop: ~ $ cat tests 2> err.log
Ďalším zaujímavým prípadom by bolo zhromažďovanie výsledkov do iného súboru, pokiaľ by nedošlo k chybe, pre ktorú by sme dali:
user @ laptop: ~ $ cat test 1> output_result 2> err.log
Nakoniec stojí za to vložiť výraz «> / dev / null 2> & 1», v ktorom sa kombinuje štandardný výstup a výstup chyby, a presmerovať ich tak, aby sa v žiadnom prípade nezískali výstupné informácie.
Aha, ale chýba jeden z najpoužívanejších nástrojov, ktoré / dev / null má, čo je vyprázdňovanie súborov: $ cat / dev / null> file.log Týmto spôsobom bude súbor file.log prázdny. Pridajte to!
Bolo to presne to vysvetlenie, ktoré hľadal.
Podporujem návrh na jeho pridanie =)
Saludos!
Dobrý deň, v prvom rade je článok veľmi dobrý! druhý by som chcel niečím prispieť týmto odkazom na túto tému úloha cron v php od Cpanela a tretia gratulácia k blogu!
Pekný článok o dev / null, aká škoda si myslím, že som sa predtým omylom vyjadril na nesprávnom mieste! ospravedlňujem sa
dakujem dobry prispevok
Pozdravujem nulový útok. Používam andrirc a zo svojej prezývky dostanem súkromie so slovom Null. O 2 sekundy neskôr sa program zavrie, čítal som a podľa toho, čo vidím, to môže urobiť iba Shell, nie niekto externý. Snažil som sa ignorovať sám seba / ignorovať -lrpcntikd a nič ma neprekvapuje, že príkaz stále prichádza. Ak máte nejaký spôsob, ako sa to pokúsiť zablokovať, ocenil by som to. Na zdravie
Čo sa stane, ak sa pri vykonaní vety symbol> neuloží?
Mohol by ma niekto viesť?
Dobry den, nainstaloval som Debian netinst do ACER Extensa 5620Z – 32 bit Po ukonceni instalacie z USB a vybrati pendrive tak, aby sa bootovalo z harddisku (nepreinstalovana z pera), ale az v momente bootovania systém sa ma pýta:
prihlasovacie meno debianu: xxxxxxxx (ok)
Heslo: xxxxxxxx (ok)
nil@debian:~$ ???? čo to je? Čo tam mám dať?
Bez tohto príkazu nemôžem pokračovať v zavádzaní systému.
Môžeš mi pomôcť? Neviem ako mám pokračovať.
Ďakujem mnohokrát. S priateľským pozdravom.