Viens šāds piemērs ir / dev / null. Tas ir īpašs fails, kas atrodas katrā atsevišķā Linux sistēmā. Tomēr, atšķirībā no vairuma citu virtuālo failu, lasīšanas vietā to izmanto rakstīšanai. Viss, ko rakstīsit / dev / null, tiks izmests, aizmirsts tukšumā. UNIX sistēmā to sauc par nulles ierīci.
Kāpēc jūs vēlaties kaut ko izmest tukšumā?? Pārbaudīsim, kas ir / dev / null un tā lietojums.
Priekšnoteikumi
Pirms ienirt dziļi / dev / null lietošanā, mums ir skaidri jāsaprot stdout un stderr datu plūsma. Iepazīstieties ar šo padziļināto ceļvedi stdin, stderr, un stdout.
Ātri atsvaidzināsimies. Ikreiz, kad tiek palaista jebkura komandrindas lietderība, tā ģenerē divas izejas. Rezultāts iet uz stdout un kļūda (ja tā ir ģenerēta) nonāk stderr. Pēc noklusējuma abas šīs datu plūsmas ir saistītas ar termināli.
Piemēram, šī komanda izdrukās virkni divkāršās pēdiņās. Šeit izeja tiek saglabāta stdout.
$ echo “Sveika pasaule”
Nākamā komanda parādīs iepriekš izpildītās komandas izejas statusu.
$ atbalss $?
Tā kā iepriekšējā komanda darbojās veiksmīgi, izejas statuss ir 0. Pretējā gadījumā izejas statuss būs atšķirīgs. Kas notiek, mēģinot izpildīt nederīgu komandu?
$ adfadsf$ atbalss $?
Tagad mums jāzina par faila deskriptoru. UNIX ekosistēmā tās ir veselu skaitļu vērtības, kas piešķirtas failam. Abi stdout (faila deskriptors = 1) un stderr (faila deskriptors = 2) ir īpašs faila deskriptors. Izmantojot faila deskriptoru (šajā situācijā 1 un 2), mēs varam novirzīt stdout un stderr uz citiem failiem.
Iesākumam šis piemērs novirzīs stdout atbalss komandu teksta failā. Šeit mēs nenorādījām faila deskriptoru. Ja nav norādīts, bash izmantos stdout pēc noklusējuma.
$ echo “Hello World”> žurnāls.txt
Šī komanda novirzīs stderr uz teksta failu.
$ asdfadsa 2> kļūda.txt
Izmantojot / dev / null
Notiek izejas novirzīšana uz / dev / null
Tagad mēs esam gatavi iemācīties izmantot / dev / null. Vispirms pārbaudīsim, kā filtrēt normālu izvadi un kļūdas. Šajā komandā grep mēģinās meklēt virkni (šajā gadījumā sveiki) direktorijā “/ sys”.
$ grep -r sveiki / sys /
Tomēr tas radīs daudz kļūdu, jo bez root privilēģijām grep nevar piekļūt vairākiem failiem. Šādā gadījumā tas radīs kļūdas “Atļauja liegta”. Izmantojot novirzīšanu, mēs varam iegūt skaidrāku rezultātu.
$ grep -r sveiki / sys / 2> / dev / null
Rezultāts izskatās daudz labāk, labi? Nekas! Šajā gadījumā grep nav piekļuves daudziem failiem, un tiem, kas ir pieejami, nav virknes “labdien”.
Šajā piemērā mēs pingēsim Google.
$ ping google.com
Tomēr mēs nevēlamies redzēt visus šos veiksmīgos ping rezultātus. Tā vietā mēs vēlamies koncentrēties tikai uz kļūdām, ja ping nevarēja sasniegt Google. Kā mēs to darām?
$ ping google.com 1> / dev / null
Šeit saturs stdout tiek izmesti uz / dev / null, atstājot tikai kļūdas.
Pārvirziet visu izvadi uz / dev / null
Dažās situācijās izeja var nebūt vispār noderīga. Izmantojot novirzīšanu, mēs varam izvadīt visu izvadi tukšumā.
$ grep -r sveiki / sys /> / dev / null 2> & 1
Nedaudz pārtrauksim šo komandu. Pirmkārt, mēs izgāžam visus stdout to / dev / null. Tad otrajā daļā mēs teicam basham nosūtīt stderr uz stdout. Šajā piemērā nav ko izvest. Tomēr, ja esat neskaidrs, vienmēr varat pārbaudīt, vai komanda ir veiksmīgi izpildīta.
$ atbalss $?
Vērtība ir 2, jo komanda radīja daudz kļūdu.
Ja jums ir tendence aizmirst faila deskriptoru stdout un stderr, šāda komanda darbosies lieliski. Tas ir vispārīgāks iepriekšējās komandas formāts. Abi stdout un stderr tiks novirzīts uz / dev / null.
$ grep -r sveiki / sys / &> / dev / null
Citi piemēri
Šis ir interesants. Atcerieties dd rīku? Tas ir spēcīgs rīks failu konvertēšanai un kopēšanai. Uzziniet vairāk par dd. Izmantojot dd, mēs varam pārbaudīt jūsu diska secīgu lasīšanas ātrumu. Protams, tas nav precīzs mērījums. Tomēr ātrai pārbaudei tas ir diezgan noderīgi.
$ dd, ja =
Šeit es esmu izmantojis Ubuntu 18.04.4 ISO kā lielais fails.
Līdzīgi varat pārbaudīt arī interneta savienojuma lejupielādes ātrumu.
$ wget -O / dev / null
Pēdējās domas
Cerams, ka jums ir skaidra izpratne par to, kas ir šis / dev / null fails. Tā ir īpaša ierīce, kas, ja tā ir uzrakstīta, izmet un, ja to nolasa, nolasa null. Šīs interesantās funkcijas patiesais potenciāls ir interesantos bash skriptos.
Vai jūs interesē bash skripti? Apskatiet iesācēju rokasgrāmatu par bash skriptu izveidi.
Izbaudi!