Caurules: kas jums jāzina, lai sāktu tos izmantot GNU / Linux

caurules

A caurule vai caurulee faktiski ir cauruļvads, kas pieejams UNIX / Linux, un ir ļoti praktisks. Bet, lai pilnībā saprastu, kas ir caurule, jums jāzina, ka * nix vidē tai ir 3 iebūvētas datu plūsmas. Tas, kas nezina, nozīmē, ka dati var pārvietoties uz trim punktiem vai no tiem.

Tad jūs to sapratīsit labāk, bet tas, ko es jums tagad gribu paskaidrot, ir tas, ka ar cauruļvada palīdzību jūs varat novirzīt vienu no šiem punktiem uz citiem. Tas ļauj iegūt produkciju vai rezultātu, ko programma iemet pretī cita ievadam, lai to izmantotu utt. Es mēģināšu to izskaidrot ar dažiem praktiskiem piemēriem, kas palīdzēs jums to ļoti labi saprast.

Tie punkti, par kuriem es runāju vai datu plūsmas, ir:

  • stdin: atbilst 0 un ir standarta ievade. Parasti * nix sistēmas standarta ievade ir tastatūra. Tas ir, tas, ko ievadīsit, būs izmantotā informācija. Viņai ir saistīta īpaša ierīce, kas ir / dev / stdin.
  • stdout: identificēts ar 1, tas ir standarta izvads. Parasti tas atbilst datora monitoram vai ekrānam, kur jūs varat redzēt informāciju. Piemēram, palaižot komandu ls, ekrānā tiks parādīts satura saraksts, vai ne? Saistītā ierīce ir / dev / stdout.
  • Stderr: identificēts ar 2, tas ir standarta kļūdas izvads, ja programmā rodas kļūda. Saistītā ierīce ir / dev / stderr.

Izmantojot cauruļvadu, jūs varat panākt, lai vienas komandas standarta izeja vai stdout pārietu tieši otras standarta ieejai. Tas ir, jūs varat padarīt vienu programmu barot citu. Tā vietā, lai izmantotu tastatūras ievadītos parametrus, caurule piegādā iepriekšējās komandas ģenerēto informāciju pa šo cauruļvadu, ko apzīmē |

ar piemēri jūs to labāk sapratīsit. Pieņemsim, ka vēlaties uzskaitīt direktorija saturu, bet jūs interesē tikai redzēt vārdus, kas atbilst vārdam doc. Tātad jūs varētu izmantot cauruļvadu, lai ievadītu ls izvadi grep filtra ievadā, lai liktu tai parādīt tikai tos, kas atbilst šim modelim:

ls -l | grep doc

Tāpēc tā vietā, lai parādītu jums visus vārdus, tas tikai parāda jūs tie, kas jūs patiešām interesē. To pašu var darīt ar faila saturu. Iedomājieties, ka vēlaties redzēt tikai informāciju par procesiem ar nosaukumu Firefox, nevis visus:

ps aux | grep firefox

Tā vietā, lai ekrānā parādītu visu ps programmas izvadi (stdout), tas novirza to uz grep filtra ieeju un izvadē parāda tikai to, kas šajā gadījumā atbilst Firefox modelim ...

Ja vēlaties, varat izmantot dažādas caurules lai vienas komandas izvadi novestu pie otras otras komandas ievades, bet šīs sekundes izvadi uz trešās daļas ievadi utt. Piemēram:

cat libro | grep love | more

Kā redzat, iespējas ir daudz, viss, ko jūs varat iedomāties, un ir atļauts. Parādiet tikai faila pirmās un pēdējās rindas, saskaitiet rindas, kas ievada wc un nāk no saraksta, un pat kārtojiet tās:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

Jūs varat arī strādāt ar kļūdas ar | & un, piemēram, skripta izvadē meklējiet vārdu brīdinājums, ja tas neizdodas:

./miscript |& grep alerta 

Un visbeidzot, ir divas komandas, kas ir cieši saistītas ar caurulēm, kas ir tee un xargs un ka viņi var vēl vairāk paplašināt to iespējas. Tee gadījumā tas ļaus parādīt iepriekšējās programmas rezultātu standarta izvadā, lai jūs to varētu redzēt, un papildus tam tas var to ievietot citā failā. Piemērs varētu būt tas, ja jūs uzskaitāt direktorijas saturu un vēlaties redzēt ls -l izvadi un to arī saglabāt failā listing.txt:

ls -l | tee listado.txt

Ja neizmantojat tee, jūs nevarēsiet redzēt izvadi konsolē ...

Y xargs dažos gadījumos tas ir vēl interesantāk. Šajā gadījumā tā spēj izveidot komandu no standarta ievades, ko tā saņem caur cauruļvadu. Citiem vārdiem sakot, tas spēj uztvert visu, ko iepriekšējā programma ir palaidusi, izmantojot savu izvadi, un kas caur cauruļvadu sasniedz xargs, lai to pēc kārtas nodotu citai komandai kā argumentus.

Joprojām nesaproti? Jūs to redzēsiet daudz labāk ar piemēru. Iedomājieties, ka vēlaties noņemt visus sasodītos thumbs.db failus no direktorija, diska vai nodalījuma. Ja to ir daudz, var būt neiespējami iet pa vienam ar komandu rm, lai tos manuāli izdzēstu. Bet ar xargs jūs varat visu automatizēt. Un jūs varat to izdarīt, izmantojot meklēšanu, lai tos atrastu, nosūtītu izvadi caur xargs ievadi, un tas savukārt sniegs rm nosaukumus kā argumentus. Tāpēc visi izvietotie tiks automātiski izdzēsti:

find ./ -name "thumbs.db" | xargs rm

Piemēram, pieņemsim, ka atrod atrod /home/name/thumbs.db, /media/test/thumbs.db un /tmp/thumbs.db. Nu, xargs tos piegādās rm, it kā tie būtu argumenti. Tas ir, it kā mēs būtu izpildījuši: rm /home/name/thumbs.db, tad rm /media/test/thumbs.db un pēc tam rm /tmp/thumbs.db.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: AB Internet Networks 2008 SL
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Jose teica

    Lieliski, šī informācija mums ir ļoti svarīga Linux lietotājiem

  2.   Daniel teica

    Cik labs raksts, šobrīd, kad studēju I / O novirzīšanu Linux komandrindas grāmatā. Man ir skaidrāk par caurulēm (cauruļvadiem) un trim datu plūsmām. Ieguldījums tiek novērtēts. Sveiciens.

  3.   01101001b teica

    Piemērs ar xargs man derēja kā cimds. Tieši šodien es nodarbojos ar detalizētu informāciju par vairākkārtēju izeju, kas man bija jāsūta "pa daļām". xargs staigāja pa pinturīti.
    Super pateicīgs!