Jei jau turime keletą GNU / Linux katalogų medžio sąvokų, turėtume bent jau būti susipažinę su / dev / nuoroda, kuri yra veiksminga ten, kur visi failai, susiję su aparatūros įtaisai.
Jei pažvelgsime į katalogą / dev / pamatysime vadinamą „bylą“ null, bet jei norime jį atidaryti, kad pamatytume jo turinį, sistema mums pasakys, kad tai neįmanoma, nes tai nėra įprastas turinys. Pridedu žodį failas, nes, kaip jūs visi žinote apie „Linux“, viskas (aparatinė ir programinė įranga) vaizduojama kaip failas. |
Kokį įrenginį atitinka / dev / null?
Praktiniais tikslais įsivaizduokite šiukšliadėžę, dugno duobę ar kosminę erdvę, į kurią įmesite bet ką be galimybės ją susigrąžinti (kad ir kaip stengtųsi vaikinai iš NASA).
Bet jei jau turiu tokias komandas kaip rm, kodėl noriu ištrinti ką nors naujo?
Nes abiejų „juodųjų skylių“ veikimo būdas yra visiškai kitoks: kaip jūs vykdydami vykdymą praleistumėte standartinę komandos klaidos išvestį „shell“ scenarijuje? Čia yra / dev / null.
Pažiūrėkime tai su pavyzdžiu.
Mes sukūrėme failą, vadinamą testais, kuriame yra eilutė „Hello World“. Jei norime reprezentuoti to failo turinį komandinėje eilutėje, tai galėtume padaryti taip:
vartotojas @ nešiojamas kompiuteris: ~ $ katės testas
Labas pasauli
Jei failo nebūtų arba jis būtų pavadintas bandymais (su „s“ galu), konsolėje gausime šią klaidą:
vartotojas @ nešiojamas kompiuteris: ~ $ katės testai
katė: testai: Failo ar katalogo nėra
Ką galėtume padaryti, kad išvengtume klaidos pranešimo? Na, tiesiog peradresuokite komandos išvestį klaidos atveju į „šiukšliadėžę“, tai yra / dev / null
Kaip tai nurodyti klaidos atveju? Čia įvedate standartines programos įvesties, išvesties ir klaidų vertes: STDIN, STDOUT ir STDERR (kurias atitinkamai galima pakeisti 0, 1 ir 2). Tokiu būdu, jei mes ...
vartotojas @ nešiojamas kompiuteris: ~ $ cat tests 2> / dev / null
vartotojas @ nešiojamas kompiuteris: ~ $
... Pamatysime, kad klaidos pranešimas nebus pateiktas konsolėje.
Turite būti atsargūs, nes sintaksė yra būtina: tarp simbolių 2 ir> neturi būti tarpo. Priešingu atveju tai suteiktų:
vartotojas @ nešiojamas kompiuteris: ~ $ cat tests 2> / dev / null
katė: testai: Failo ar katalogo nėra
cat: 2: failo ar katalogo nėra
Priešingai, tarpas tarp> ir / dev / null neturės neigiamos įtakos rezultatui.
Mes taip pat galėtume naudoti klaidų peradresavimą, kad užfiksuotume klaidas žurnalo faile taip:
vartotojas @ nešiojamas kompiuteris: ~ $ cat tests 2> err.log
Kitas įdomus atvejis būtų rezultatų rinkimas kitame faile tol, kol neįvyks klaida, kurią mes pateikiame:
vartotojas @ nešiojamas kompiuteris: ~ $ cat test 1> output_result 2> err.log
Galiausiai būtina įdėti išraišką "> / dev / null 2> & 1", kurioje yra sujungta standartinė išvestis ir klaidos išvestis, nukreipiant jas taip, kad jokiu būdu nebūtų gaunama išvesties informacija.
Ak, bet trūksta vienos iš dažniausiai naudojamų / dev / null programų, kurios ištuština failus: $ cat / dev / null> file.log Tokiu būdu failas file.log bus tuščias. Pridėti!
Būtent paaiškinimo jis ieškojo.
Palaikau pasiūlymą jį pridėti =)
Sveiki atvykę!
Sveiki, pirmiausia straipsnis yra labai geras! antrasis norėčiau prisidėti prie šios nuorodos šia tema Cron darbas php iš Cpanel ir trečiasis sveikinimas tinklaraščiui!
Gražus straipsnis apie „dev / null“, kokia gėda manau, kad anksčiau klaidingai komentavau netinkamoje vietoje! aš atsiprašau
ačiū už gerą indėlį
Sveikinimai, aš puolu niekais. Aš naudoju „andrirc“ ir gaunu privatųjį iš savo slapyvardžio su žodžiu „Null“. Po 2 sekundžių programa užsidaro, kurią skaičiau, ir, ką matau, tai gali padaryti tik „Shell“, o ne kažkas išorinis. Bandžiau nepaisyti savęs / ignoruoti -lrpcntikd ir Niekas manęs nestebina, komanda vis ateina. Jei turite kokių nors būdų pabandyti jį užblokuoti, aš tai įvertinčiau. Cheers
Kas atsitiks, jei vykdant sakinį simbolis> nebus dedamas?
Ar kas nors galėtų mane nukreipti?
Labas rytas, aš įdiegiau Debian netinst į ACER Extensa 5620Z – 32 bitų. Kai diegimas iš USB baigtas ir pendrive išimama, kad paleidžiama iš kietojo disko (neiš naujo įdiegti iš rašiklio), bet paleidimo momentu sistema ji manęs klausia:
debian prisijungimas: xxxxxxxx (gerai)
Slaptažodis: xxxxxxxx (gerai)
nil@debian:~$ ???? kas čia? Ką turėčiau ten įdėti?
Be šios komandos negaliu tęsti sistemos įkrovos.
Ar gali man padėti? Nežinau, kaip turėčiau tęsti.
Labai ačiū. Geriausi linkėjimai.