Цеви: шта треба да знате да бисте их почели користити у ГНУ / Линук-у

цевоводи

А цев или цеве је заправо цевовод доступан за УНИКС / Линук и најпрактичнији је. Али да бисте у потпуности разумели шта је цев, требали бисте знати да у * ник окружењу има 3 уграђена тока података. То за оне који не знају значи да подаци могу путовати у три тачке или из њих.

Тада ћете ово разумети на бољи начин, али оно што желим да вам сада јасно кажем је да помоћу цевовода оно што можете учинити је да каналишете од једне од тих тачака ка другима. Ово омогућава узимање резултата или резултата које програм баца према улазу другог да би се тај користио, итд. Покушаћу да то објасним са неколико практичних примера који ће вам помоћи да то врло добро разумете.

Те тачке о којима сам говорио или токови података, су:

  • стдин: одговара 0 и стандардни је улаз. Генерално, стандардни унос података на * ник систему је тастатура. Односно, оно што укуцате ће бити коришћене информације. Уз њу је повезан посебан уређај који је / дев / стдин.
  • стдоут: идентификовано са 1, то је стандардни излаз. Обично одговара монитору или екрану рачунара, где можете да видите информације. На пример, када покренете команду лс, листа садржаја ће се приказати на екрану, зар не? Повезани уређај је / дев / стдоут.
  • стдерр: идентификовано са 2, то је стандардни излаз грешке, јер када се грешка догоди у програму. Повезани уређај је / дев / стдерр.

Помоћу цјевовода можете направити да стандардни излаз или стдоут једне наредбе прелазе директно на стандардни улаз друге. Односно, можете натерати један програм да храни други. Уместо да користи параметре унете са тастатуре, цев испоручује информације генерисане претходном наредбом кроз овај цевовод представљен знаком |

са примери ви ћете то боље разумети. Претпоставимо да желите да наведете садржај директоријума, али вас занима само имена која се подударају са речју доц. Дакле, могли бисте користити цевовод за увођење излаза лс у улаз греп филтра како бисте му рекли да приказује само оне који одговарају том обрасцу:

ls -l | grep doc

Уместо да вам покаже сва имена, само вам показује оне које вас заиста занимају. То можете учинити и са садржајем датотеке. Замислите да желите да видите само информације о процесима названим фирефок, а не све:

ps aux | grep firefox

Уместо да на екрану прикаже сав излаз пс програма (стдоут), оно што он ради је да га каналише према улазу греп филтера и у излазу приказује само оно што одговара узорку фирефок-а у овом случају ...

Ако желите, можете да користите разне цеви да се излаз једне команде доведе на улаз друге друге команде, а излаз те секунде на улаз треће и тако даље. На пример:

cat libro | grep love | more

Као што видите, могућности је много, све што можете замислити и што вам је дозвољено. Чак приказују само први и последњи ред датотеке, преброје редове који улазе у вц који долазе са листе, па чак и сортирају:

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

Такође можете радити са грешке са | & и на пример, потражите реч упозорење у излазу скрипте ако не успе:

./miscript |& grep alerta 

И на крају, постоје две команде уско повезане са цевима које јесу тее и каргс и да могу даље проширити своје могућности. У случају тее, оно што ће дозволити је да резултат претходног програма прикаже на стандардном излазу, тако да га можете видети, а поред тога, може га усмерити у другу датотеку. Пример би могао бити ако наведете садржај директоријума и желите тренутно да видите излаз лс -л, а такође га сачувате у датотеци листинг.ткт:

ls -l | tee listado.txt

Ако не користите тее, нећете моћи да видите излазне излазе на својој конзоли ...

Y каргс то је у неким случајевима још занимљивије. У овом случају је у стању да изгради наредбу од стандардног улаза који прима кроз цевовод. Другим речима, способан је да ухвати све што је претходни програм лансирао кроз свој излаз и који кроз цевовод доспе до каргс да би га проследио другој наредби као аргументе.

Још увек не схватате? Видећете то много боље на примеру. Замислите да желите уклонити све проклете датотеке тхумбс.дб из директорија, диска или партиције. Ако их има много, можда ће бити немогуће кренути један по један помоћу команде рм да бисте их ручно избрисали. Али са карговима можете све аутоматизовати. А то можете учинити користећи финд да бисте их лоцирали, послали излаз кроз улаз каргс и то ће заузврат дати рм имена као аргументе. Стога ће се сви лоцирани аутоматски избрисати:

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

На пример, претпоставимо да финд финд проналази /хоме/наме/тхумбс.дб, /медиа/тест/тхумбс.дб и /тмп/тхумбс.дб. Па, каргс ће их предати рм-у као да су аргументи. Односно, као да смо извршили: рм /хоме/наме/тхумбс.дб, затим рм /медиа/тест/тхумбс.дб па рм /тмп/тхумбс.дб.


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

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. Odgovorni za podatke: AB Internet Networks 2008 SL
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.

  1.   Хозе дијо

    Одлично, ове информације су веома важне за нас Линук кориснике

  2.   Данијел дијо

    Какав добар чланак, тренутно када проучавам преусмеравање И / О у књизи Линук Цомманд Лине. Јасније ми је о цевима (цевоводу) и три тока података. Допринос се цени. Велики поздрав.

  3.   КСНУМКСб дијо

    Пример са каргс ми је одговарао као рукавица. Тачно данас бавио сам се детаљима вишеструког излаза које сам морао да пошаљем „у деловима“. ксаргови су ходали пинтуритом.
    Супер захвалан!