Тръби: какво трябва да знаете, за да започнете да ги използвате в GNU / Linux

тръбопроводи

а тръба или тръбаe всъщност е конвейер, наличен за UNIX / Linux и много практичен. Но за да разберете напълно какво е тръба, трябва да знаете, че в среда * nix има 3 вградени потока от данни. Това за тези, които не знаят, означава, че данните могат да пътуват до или от три точки.

Тогава ще разберете това по-добре, но това, което искам да ви изясня сега, е, че с конвейер това, което можете да направите, е да насочвате от една от тези точки към други. Това позволява да се вземат изхода или резултата, които програмата изхвърля към входа на друг, за да може този да се използва и т.н. Ще се опитам да го обясня с някои практически примери, които ще ви помогнат да го разберете много добре.

Тези точки, за които говорих или потоци от данни, са:

  • стандартния вход: съответства на 0 и е стандартният вход. Обикновено стандартният вход за система * nix е клавиатурата. Тоест това, което въвеждате, ще бъде използваната информация. Тя има специално устройство, свързано с него, което е / dev / stdin.
  • стандартния изход: идентифициран с 1, това е стандартният изход. Обикновено той съответства на монитора или екрана на вашия компютър, където можете да видите информацията. Например, когато изпълните команда ls, списъкът със съдържание ще се покаже на екрана, нали? Свързаното устройство е / dev / stdout.
  • STDERR: идентифициран с 2, това е стандартният изход за грешка, когато възникне грешка в програма. Свързаното устройство е / dev / stderr.

С тръба можете да накарате стандартния изход или stdout на една команда да премине директно към стандартния вход на друга. Тоест можете да накарате една програма да подава друга. Вместо да използва параметрите, въведени от клавиатурата, каналът доставя информацията, генерирана от предишната команда, през този конвейер, представен от |

с примерите ще разберете по-добре. Да предположим, че искате да изброите съдържанието на директория, но ви интересува само да видите имената, които съответстват на думата doc. Така че можете да използвате конвейер, за да насочите изхода на ls към входа на grep филтъра, за да му кажете да показва само тези, които съответстват на този модел:

ls -l | grep doc

Така че вместо да ви показва всички имена, той просто ви показва тези, които наистина ви интересуват. Можете да направите същото със съдържанието на файл. Представете си, че искате да видите само информацията за процесите с име firefox, а не всички:

ps aux | grep firefox

Вместо да показва целия изход на програмата ps на екрана (stdout), това, което прави, е да я насочи към входа на grep филтъра и в изхода показва само това, което съответства на шаблона на firefox в този случай ...

Ако искате, можете да използвате различни тръби за да приведе изхода на една команда към входа на друга втора команда, а изхода на тази втора до входа на трета и т.н. Например:

cat libro | grep love | more

Както виждате, възможностите са много, всичко, което можете да си представите и е позволено. Дори показват само първия и последния ред на файл, преброяват редовете, които влизат в wc, които идват от списъка, и дори ги сортират:

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

Можете също така да работите с грешки с | & и например потърсете думата предупреждение в изхода на скрипт, ако не успее:

./miscript |& grep alerta 

И накрая, има две команди, тясно свързани с тръбите, които са тройник и ксарги и че те могат допълнително да разширят възможностите за тях. В случай на tee, това, което ще позволи, е да покаже резултата от предишната програма на стандартния изход, така че да можете да го видите и в допълнение към това, той може да го насочи към друг файл. Пример може да бъде, ако изброите съдържанието на директория и искате да видите изхода на ls -l в момента и също така да го запазите във файл listing.txt:

ls -l | tee listado.txt

Ако не използвате тройник, няма да можете да видите изхода на конзолата си ...

Y xargs в някои случаи е още по-интересно. В този случай той е в състояние да изгради команда от стандартния вход, който получава през тръбопровода. С други думи, той е способен да улови всичко, което предишна програма е стартирала чрез изхода си и което достига до xargs през конвейера, за да го предаде на свой ред на друга команда като аргументи.

Все още не го разбирате? Ще го видите много по-добре с пример. Представете си, че искате да премахнете всички проклети файлове thumbs.db от директория, диск или дял. Ако са много, може да е невъзможно да преминете един по един с командата rm, за да ги изтриете ръчно. Но с xargs можете да автоматизирате всичко. И можете да го направите с помощта на find, за да ги намерите, изпратете изхода през входа на xargs и това от своя страна ще даде на rm имената като аргументи. Следователно всички разположени ще бъдат изтрити автоматично:

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

Да предположим например, че търси локали /home/name/thumbs.db, /media/test/thumbs.db и /tmp/thumbs.db. Е, xargs ще ги достави на rm, сякаш са аргументи. Тоест, сякаш бяхме изпълнили: rm /home/name/thumbs.db, след това rm /media/test/thumbs.db и след това rm /tmp/thumbs.db.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорник за данните: AB Internet Networks 2008 SL
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Хосе каза той

    Отлично, тази информация е много важна за нас, потребителите на Linux

  2.   Daniel каза той

    Каква добра статия в момента, когато изучавам пренасочването на I / O в книгата за командния ред на Linux. По-ясно ми е за тръбите (тръбопровод) и трите потока от данни. Приносът е оценен. Поздравления.

  3.   01101001b каза той

    Примерът с xargs ме устройваше като ръкавица. Точно днес се занимавах с онази малка подробност на многократния изход, която трябваше да изпратя „на части“. ксарги разхождаха пинтурита.
    Супер благодарен!