logo

Čo je /Dev/Null v Linuxe?

Ak ste sa učili programovanie shellu, možno ste už natrafili na niečo ako /dev/null. V tomto článku pochopíme, čo to je a ako sa používa. Začnime tým, že pochopíme, čo je /dev.

Čo je /dev?

V súborovom systéme Linux je všetko súbor alebo adresár. Dokonca aj zariadenia sú prístupné ako súbory. Oddiely vášho pevného disku, jednotka Pen, reproduktory, pre všetky tieto položky existuje súbor, z ktorého sa k nim pristupuje. Aby ste teraz pochopili, ako sa k zariadeniam pristupuje ako k súborom, predstavte si to takto: čo urobíme so súborom? Dáta z neho čítame a údaje doň zapisujeme. Zariadenie, ako je reproduktor, môže vkladať údaje na produkciu zvuku, pevný disk možno použiť na čítanie a zapisovanie údajov, tlačiareň využíva vstup na tlač súborov atď. Súbory a zariadenia sú v tomto smere podobné



/dev je adresár, v ktorom sú uložené všetky fyzické a virtuálne zariadenia systému Linux. Fyzické zariadenia sú ľahko pochopiteľné, sú to hmatateľné zariadenia ako pero, reproduktory, tlačiarne atď. Systém Linux má tiež virtuálne zariadenia, ktoré fungujú ako zariadenie, ale nepredstavujú žiadne fyzické zariadenie.

Čo je /dev/null?

Je to virtuálne zariadenie, ktoré má špeciálnu vlastnosť: Všetky dáta zapísané do /dev/null zmiznú alebo zmiznú. Kvôli tejto vlastnosti sa nazýva aj bitbucket alebo blackhole. Pozrime sa na ukážku.

Presmerujte výstup do /dev/null

V tejto ukážke môžete vidieť, že sme pridali nejaké údaje, ale tieto údaje neboli uložené. Táto konkrétna charakteristika /dev/null má niekoľko prípadov použitia. Pozrime sa na ne.



Použitie /dev/null

Keďže zahodí všetko, čo je doň zapísané, môžete súbory presunúť do /dev/null a vymazať ich. Toto však nie je široko používaný prípad. Používa sa hlavne na vyradenie štandardného výstupu a štandardnej chyby z výstupu.

Čo je štandardný výstup a štandardná chyba?

Výstup príkazu systému Linux obsahuje dva prúdy údajov: štandardný výstup (stdout) a štandardnú chybu (stderr0), pričom štandardný výstup je normálny výstup, ak príkaz nemá žiadne chyby, štandardná chyba je chyba generovaná príkazom. Výstup môže obsahovať štandardný výstup aj štandardný vstup. Príklad stdout a stderr:

Spustíme nasledujúci shell skript



# /bin/sh ls apt update>

Prvý príkaz prebehol úspešne, ale druhý vygeneroval chybu. Keďže stdout a stderr sú dva samostatné dátové toky, možno s nimi zaobchádzať oddelene.

Ako získať prístup k stderr a stdout?

Stdout a stderr sú toky údajov, ktoré sa v Linuxe považujú za súbor. Ak s nimi chcete vykonať akúkoľvek akciu, použijete deskriptor súboru, ktorý jednoznačne identifikuje tok súboru. Deskriptor súboru pre stdout je 1 a pre stderr je 2.

Ak chcete k nim pristupovať samostatne, pozrime sa na nasledujúci príkaz, ktorý sa vykonáva na rovnakom súbore skriptu, ktorý bol použitý v predchádzajúcom príklade.

./script.sh 1>stdout.txt>

V tomto môžete vidieť, že výstup obsahuje štandardné chyby, ale štandardný výstup sa nezobrazil. Je to preto, že prúd stdout bol odoslaný do súboru stdout.txt a môžete vidieť, že súbor stdout.txt obsahuje štandardný výstup.

Pri písaní shell skriptu možno budeme chcieť vypustiť štandardnú chybu z výstupu. Bez ohľadu na tok, ktorý chceme z výstupu potlačiť, tento tok údajov možno zapísať do /dev/null. Tieto údaje by ste mohli zapísať do iného súboru, rovnako ako vyššie uvedený príklad, ale ak pre tieto údaje nemáte využitie, prečo by ste na ne chceli plytvať pamäťou, je lepšie ich úplne zahodiť. Pozrime sa na nasledujúci príklad

./script.sh 2>/dev/null>

A práve tak sme z výstupu odstránili stderr. Ak chcete zrušiť celý výstup, môžete použiť nasledujúci príkaz

command>/dev/null 2>&1>

Príkaz &> presmeruje výstup deskriptora súboru, ktorý je uvedený vľavo (vo vyššie uvedenom príkaze, výstup 2) do prúdu deskriptora súboru uvedeného na pravej strane. Takže výstup stderr (2) sa presmeruje na stdout (1), ktorý sa zase zapíše do /dev/null a tým sa zničí.

Bezpečné vymazanie súboru

„/dev/null“ nájde nástroj na bezpečné odstraňovanie súborov. Presmerovaním „/dev/null“ do súboru môžete efektívne prepísať jeho obsah nulovými bajtmi, čo sťažuje obnovenie akýchkoľvek zmysluplných údajov.

Napríklad:

cat /dev/null>citlivý_súbor>

Tento príkaz nahradí obsah súboru „sensitive_file“ nulovými bajtmi, čím sa zabezpečí jeho bezpečné odstránenie.

Čistenie protokolových súborov

Súbory denníkov môžu časom nahromadiť značné údaje. Ak chcete vymazať súbory denníka bez prerušenia spustených služieb, môžete ich obsah presmerovať na „/dev/null“.

Napríklad:

cat /dev/null>/var/log/syslog>

Tento príkaz vyprázdni súbor „syslog“ presmerovaním jeho obsahu na „/dev/null“, čím efektívne vyčistí protokol bez vymazania samotného súboru.

Tipy a triky:

  • Presmerovanie štandardného výstupu na „/dev/null“: „príkaz> /dev/null“
  • Štandardná chyba presmerovania na „/dev/null“: „príkaz 2> /dev/null“
  • Presmerovanie výstupu aj chyby na „/dev/null“: „príkaz>/dev/null 2>&1“

Záver

V tomto článku sme diskutovali o tom, že `/dev/null' v Linuxe je virtuálna čierna diera, z ktorej zmiznú dáta, keď sa do nej zapíšu. Bežne sa používa na vyradenie výstupu a chýb, čím je vykonávanie príkazov čistejšie. Môže byť tiež použitý na bezpečné mazanie súborov a čistenie protokolových súborov. Pochopenie jeho funkčnosti umožňuje efektívne operácie príkazového riadku v systéme Linux.