Kas yra /Dev/Null sistemoje Linux?

Kas yra /Dev/Null sistemoje Linux?

Jei mokotės apvalkalo programavimo, galbūt jau susidūrėte su kažkuo panašaus į /dev/null. Šiame straipsnyje mes suprasime, kas tai yra ir kaip jis naudojamas. Pradėkime nuo supratimo, kas yra /dev.

Kas yra /dev?

Linux failų sistemoje viskas yra failas arba katalogas. Netgi įrenginiai pasiekiami kaip failai. Jūsų standžiojo disko skaidiniai, rašiklio diskas, garsiakalbiai, yra failas, iš kurio jie pasiekiami. Dabar norėdami suprasti, kaip įrenginiai pasiekiami kaip failai, pagalvokite apie tai taip: ką daryti su failu? Mes skaitome duomenis iš jo ir įrašome į jį duomenis. Įrenginys, pvz., garsiakalbis, gali įvesti duomenis, kad būtų sukurtas garsas, kietasis diskas gali būti naudojamas duomenims skaityti ir rašyti, spausdintuvas naudoja įvestį failams spausdinti ir tt Failai ir įrenginiai yra panašūs.

/dev yra katalogas, kuriame saugomi visi fiziniai ir virtualūs Linux sistemos įrenginiai. Fizinius įrenginius lengva suprasti, jie yra apčiuopiami įrenginiai, pvz., rašiklis, garsiakalbiai, spausdintuvai ir kt. Linux sistemoje taip pat yra virtualių įrenginių, kurie veikia kaip įrenginys, bet nėra fizinis įrenginys.

Kas yra /dev/null?

Tai virtualus įrenginys, turintis specialią savybę: visi į /dev/null įrašyti duomenys išnyksta arba išnyksta. Dėl šios savybės jis taip pat vadinamas bitbucket arba blackhole. Pažiūrėkime demonstraciją.

Peradresuoti išvestį į /dev/null

Šioje demonstracijoje matote, kad įtraukėme kai kuriuos duomenis, bet tie duomenys nebuvo saugomi. Ši ypatinga /dev/null savybė turi tam tikrų naudojimo atvejų. Pažiūrėkime juos.

/dev/null naudojimas

Kadangi jis atmeta viską, kas jame parašyta, galite perkelti failus į /dev/null, kad juos ištrintumėte. Tačiau tai nėra plačiai naudojamas atvejis. Jis daugiausia naudojamas norint pašalinti standartinę išvestį ir standartinę išvesties klaidą.

Kas yra standartinė išvestis ir standartinė klaida?

„Linux“ komandos išvestyje yra du duomenų srautai: standartinė išvestis (stdout) ir standartinė klaida (stderr0), o standartinė išvestis yra įprasta išvestis, jei komandoje nėra klaidų, standartinė klaida yra komandos sugeneruota klaida. Išvestyje gali būti ir standartinė išvestis, ir standartinė įvestis. Stdout ir stderr pavyzdys:

Paleiskite šį apvalkalo scenarijų

# /bin/sh ls apt update 

Pirmoji komanda buvo sėkmingai paleista, tačiau antroji sugeneravo klaidą. Kadangi stdout ir stderr yra du atskiri duomenų srautai, juos galima tvarkyti atskirai.

Kaip pasiekti stderr ir stdout?

Stdout ir stderr yra duomenų srautai, kurie abu yra traktuojami kaip failai Linux sistemoje. Jei norite atlikti bet kokį veiksmą su jais, naudokite failo aprašą, kuris unikaliai identifikuoja failų srautą. Failo aprašas stdout yra 1, o stderr - 2.

Norėdami juos pasiekti atskirai, pažiūrėkime šią komandą, kuri atliekama tuo pačiu scenarijaus failu, kuris buvo naudojamas ankstesniame pavyzdyje.

Čia galite pamatyti, kad išvestyje yra standartinių klaidų, tačiau standartinė išvestis nebuvo rodoma. Taip yra todėl, kad stdout srautas buvo išsiųstas į stdout.txt failą ir matote, kad stdout.txt faile yra standartinė išvestis.

Rašydami apvalkalo scenarijų, galime atmesti standartinę išvesties klaidą. Kad ir kokį srautą norėtume nuslopinti iš išvesties, tą duomenų srautą galima įrašyti į /dev/null. Galite įrašyti tuos duomenis į kitą failą, kaip ir aukščiau pateiktame pavyzdyje, bet jei neturite tų duomenų naudojimo, kodėl norite eikvoti atmintį, geriau juos visiškai išmesti. Pažiūrėkime toliau pateiktą pavyzdį

Taip pat pašalinome stderr iš išvesties. Jei norite atmesti visą išvestį, galite naudoti šią komandą

Komanda &> nukreipia failo deskriptoriaus, kuris paminėtas kairėje, išvestį (aukščiau pateiktoje komandoje 2 išvestis) į failo deskriptoriaus srautą, paminėtą dešinėje. Taigi, stderr (2) išvestis nukreipiama į stdout (1), kuri savo ruožtu įrašoma į /dev/null ir taip sunaikinama.

Saugus failų ištrynimas

„/dev/null“ randa saugaus failo ištrynimo įrankį. Peradresuodami „/dev/null“ į failą, galite efektyviai perrašyti jo turinį nuliniais baitais, todėl bus sudėtinga atkurti bet kokius reikšmingus duomenis.

Pavyzdžiui:

Ši komanda pakeičia „sensitive_file“ turinį nuliniais baitais, užtikrindama saugų jo ištrynimą.

Žurnalo failų valymas

Žurnalo failai laikui bėgant gali sukaupti daug duomenų. Norėdami išvalyti žurnalo failus nenutraukdami veikiančių paslaugų, galite nukreipti jų turinį į „/dev/null“.

Pavyzdžiui:

Ši komanda ištuština „syslog“ failą, nukreipdama jo turinį į „/dev/null“, efektyviai išvalydama žurnalą neištrindama paties failo.

Patarimai ir gudrybės:

  • Standartinės išvesties peradresavimas į „/dev/null“: „command> /dev/null“
  • Standartinės klaidos peradresavimas į „/dev/null“: „2 komanda> /dev/null“
  • Išvesties ir klaidos peradresavimas į „/dev/null“: „command>/dev/null 2>&1“

Išvada

Šiame straipsnyje aptarėme, kad „/dev/null“ sistemoje „Linux“ yra virtuali juodoji skylė, kurioje duomenys dingsta, kai į ją įrašomi. Jis dažniausiai naudojamas išvesties ir klaidų atmetimui, todėl komandų vykdymas tampa švaresnis. Jis taip pat gali būti naudojamas saugiam failų ištrynimui ir žurnalo failų valymui. Suprasti jo funkcionalumą leidžia efektyviai atlikti komandų eilutės operacijas sistemoje „Linux“.