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:

  1. komandas rezultāts - dati, kurus programma ir paredzēta, un
  2. 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:

  1. stdin vai 0 - tas ir savienots ar tastatūru, lielākā daļa programmu nolasa ievades datus no šī faila.
  2. stdout vai 1 - tas ir pievienots ekrānam, un visas programmas savus rezultātus nosūta uz šo failu un
  3. 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:

  1. -b - ļauj top darboties pakešrežīmā, lai jūs varētu novirzīt tā izvadi uz failu vai citu komandu.
  2. -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:

  1. -l - iespējo garu saraksta formātu
  2. -t - vispirms tiek parādīts kārtojums pēc modifikācijas laika, izmantojot jaunākos failus
  3. -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:

  1. -n 1 - uzdod xargs komandrindā izmantot ne vairāk kā vienu argumentu un nosūtīt to komandai cp
  2. cp - kopē failu
  3. -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.