Uzziniet, kā darbojas Linux I/O (ievades/izvades) novirzīšana
Viena no vissvarīgākajām un interesantākajām Linux administrēšanas tēmām ir I/O novirzīšana. Šī komandrindas funkcija ļauj jums novirzīt komandu ievadi un/vai izvadi no un/vai uz failiem vai apvienot vairākas komandas kopā, izmantojot caurules, lai izveidotu tā saukto “komandu cauruļvadu”.
Visas mūsu vadītās komandas pamatā rada divu veidu izvadi:
- komandas rezultāts - dati, kurus programma ir paredzēta, un
- programmas statusa un kļūdu ziņojumi, kas informē lietotāju par programmas izpildes informāciju.
Linux un citās Unix līdzīgās sistēmās ir trīs zemāk nosauktie noklusējuma faili, kurus arī identificē čaula, izmantojot failu deskriptoru numurus:
- stdin vai 0 - tas ir savienots ar tastatūru, lielākā daļa programmu nolasa ievades datus no šī faila.
- stdout vai 1 - tas ir pievienots ekrānam, un visas programmas savus rezultātus nosūta uz šo failu un
- stderr vai 2 - programmas nosūta statusa/kļūdas ziņojumus uz šo failu, kas ir pievienots arī ekrānam.
Tāpēc I/O novirzīšana ļauj mainīt komandas ievades avotu, kā arī to, kur tiek nosūtīti tās izejas un kļūdu ziņojumi. Un to nodrošina novirzīšanas operatori “<”
un “>”
.
Kā novirzīt standarta izvadi uz failu Linux
Jūs varat novirzīt standarta izvadi, kā parādīts zemāk esošajā piemērā, šeit mēs vēlamies saglabāt augšējās komandas izvadi vēlākai pārbaudei:
$ top -bn 5 >top.log
Kur karogi:
-
-b
- ļauj top darboties pakešrežīmā, lai jūs varētu novirzīt tā izvadi uz failu vai citu komandu. -
-n
- norāda atkārtojumu skaitu pirms komandas darbības pārtraukšanas.
Faila top.log
saturu var apskatīt, izmantojot komandu cat šādi:
$ cat top.log
Lai pievienotu komandas izvadi, izmantojiet operatoru “>>”
.
Piemēram, lai pievienotu augšējās komandas izvadi augšpusē failā top.log, it īpaši skriptā (vai komandrindā), ievadiet zemāk redzamo rindu:
$ top -bn 5 >>top.log
Piezīme: Izmantojot faila deskriptora numuru, izvades novirzīšanas komanda ir tāda pati kā:
$ top -bn 5 1>top.log
Kā novirzīt standarta kļūdu failā Linux
Lai novirzītu komandas standarta kļūdu, korpusam ir skaidri jānorāda faila deskriptora numurs 2
, lai saprastu, ko jūs mēģināt darīt.
Piemēram, zemāk esošā komanda ls radīs kļūdu, ja to izpildīs parasts sistēmas lietotājs bez root tiesībām:
$ ls -l /root/
Standarta kļūdu varat novirzīt uz failu šādi:
$ ls -l /root/ 2>ls-error.log $ cat ls-error.log
Lai pievienotu standarta kļūdu, izmantojiet tālāk norādīto komandu:
$ ls -l /root/ 2>>ls-error.log
Kā novirzīt standarta izvadi/kļūdu uz vienu failu
Ir arī iespējams uztvert visu komandas izvadi (gan standarta izvadi, gan standarta kļūdu) vienā failā. To var izdarīt divos iespējamos veidos, norādot failu deskriptoru numurus:
1. Pirmā ir salīdzinoši veca metode, kas darbojas šādi:
$ ls -l /root/ >ls-error.log 2>&1
Iepriekš minētā komanda nozīmē, ka čaula vispirms nosūtīs komandas ls izvadi uz failu ls-error.log (izmantojot > ls-error.log
), un pēc tam visus kļūdu ziņojumus ieraksta faila aprakstā 2 (standarta izvade), kas ir novirzīts uz failu ls-error.log (izmantojot 2> & 1
). Tas nozīmē, ka standarta kļūda tiek nosūtīta arī uz to pašu failu kā standarta izeja.
2. Otrā un tiešā metode ir:
$ ls -l /root/ &>ls-error.log
Varat arī pievienot standarta izvadi un standarta kļūdas vienam failam, piemēram:
$ ls -l /root/ &>>ls-error.log
Kā novirzīt standarta ievadi failā
Lielākā daļa, ja ne visas komandas, iegūst ievadi no standarta ievades, un pēc noklusējuma standarta ievade tiek pievienota tastatūrai.
Lai novirzītu standarta ievadi no faila, kas nav tastatūra, izmantojiet operatoru “<”
, kā norādīts zemāk:
$ cat <domains.list
Kā novirzīt standarta ievades/izvades failu
Vienlaikus varat veikt standarta ievades, standarta izvades novirzīšanu, izmantojot kārtošanas komandu, kā norādīts zemāk:
$ sort <domains.list >sort.output
Kā izmantot I/O novirzīšanu, izmantojot caurules
Lai novirzītu vienas komandas izvadi kā citas ievadi, varat izmantot caurules, tas ir spēcīgs līdzeklis, lai izveidotu noderīgas komandrindas sarežģītām darbībām.
Piemēram, zemāk esošajā komandā tiks uzskaitīti pieci galvenie nesen modificētie faili.
$ ls -lt | head -n 5
Šeit ir iespējas:
-
-l
- iespējo garu saraksta formātu -
-t
- vispirms tiek parādīts kārtojums pēc modifikācijas laika, izmantojot jaunākos failus -
-n
- norāda rādāmo galvenes rindu skaitu
Svarīgas komandas cauruļvadu būvniecībai
Šeit mēs īsi pārskatīsim divas svarīgas komandas komandu cauruļvadu izveidošanai, un tās ir:
xargs, ko izmanto, lai izveidotu un izpildītu komandrindas no standarta ievades. Zemāk ir cauruļvada piemērs, kas izmanto xargs. Šī komanda tiek izmantota, lai failu kopētu vairākos Linux direktorijos:
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
Un iespējas:
-
-n 1
- uzdod xargs komandrindā izmantot ne vairāk kā vienu argumentu un nosūtīt to komandai cp -
cp
- kopē failu -
-v
- parāda kopēšanas komandas progresu.
Lai iegūtu plašākas lietošanas iespējas un informāciju, izlasiet xargs rokasgrāmatu:
$ man xargs
Tee komanda nolasa no standarta ievades un raksta uz standarta izvadi un failiem. Mēs varam pierādīt, kā tee darbojas šādi:
$ echo "Testing how tee command works" | tee file1
Linux sistēmas administrēšanas uzdevumi.
Lai uzzinātu vairāk par Linux filtriem un caurulēm, izlasiet šo rakstu Atrast 10 IP adreses, kas piekļūst Apache serverim, ir parādīts noderīgs filtru un cauruļu izmantošanas piemērs.
Šajā rakstā mēs izskaidrojām I/O novirzīšanas pamatus Linux. Atcerieties dalīties savās domās, izmantojot tālāk sniegto atsauksmju sadaļu.