/ / Како се користе цеви на Линуку

Како се користе цеви на Линуку

Линук терминал на лаптопу

Користите Линук цеви да бисте кореографирали како наредбену линијукомуналије сарађују. Поједноставите сложене процесе и повећајте своју продуктивност тако што ћете прикупити самосталне команде и претворити их у јединствени тим. Показаћемо вам како.

Цеви су свуда

Цеви су једна од најкориснијих командних линијафункције које имају Линук и Уник оперативни системи. Цеви се користе на безброј начина. Погледајте било који чланак Линук командне линије - на било којој веб локацији, не само нашој - и видећете да цеви чешће наступе. Прегледао сам неке од чланака како се Геек-ови Геек-ови Линук и цеви користе у свим њима, на овај или онај начин.

Линук цеви вам омогућавају да изводите акције које јесуније подржан од стране кутије од стране кутије. Али с обзиром да је филозофија дизајна Линук-а имати много малих услужних програма који врло добро обављају своју наменску функцију и без непотребне функционалности - мантре „уради једно и уради добро“ - можете жвакати низове команди заједно са цевима тако да излаз једне наредбе постају улаз друге. Свака команда коју доделите унесе свој јединствени таленат у тим и убрзо откријете да сте саставили победнички одред.

Једноставан пример

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

Лако можемо добити списак датотека ls:

ls

Колекција ако су датотеке у директоријуму, у прозору терминала

Да бисмо издвојили врсту датотеке која нас занима, користићемо grep. Желимо да пронађемо датотеке које имају назив „страница“ у називу датотеке или у продужетку датотеке.

Користићемо посебан знак шкољке “|„Да би се произвео излаз из ls у grep.

ls | grep "page"

лс -л | греп "паге" у прозору терминала

grep штампа линије које одговарају његовом обрасцу претраге. То нам даје списак који садржи само „.паге“ датотеке.

листа датотека са страницама у прозору терминала

Чак и овај тривијални пример приказује функционалност цеви. Излаз из ls није послан у прозор терминала. Послано је grep као подаци за grep наредба за рад. Излаз који видимо долази од нас grep, која је последња команда у овом ланцу.

Проширење нашег ланца

Кренимо да проширимо наш ланац пипед команди. Датотеке „.паге“ можемо пребројати додавањем wc команда. Користићемо -l (број линија) са wc. Напомињемо да смо такође додали -l (дуги формат) опција за ls . Ускоро ћемо то користити.

ls - | grep "page" | wc -l

лс - | греп "страница" | вц -л у прозору терминала

grep више није задња наредба у ланцу, тако да не видимо његов излаз. Излаз из grep се уноси у wc команда. Излаз из којег видимо у прозору терминала је wc. wc извештава да у директорију има 69 „.паге“ датотека.

Хајде да продужимо ствари поново. Ми ћемо узети wc наредбу искључите из командне линије и замените је awk. На излазу је девет колона ls са -l (дуги формат) опција. Користићемо awk за штампање колона пет, три и девет. Ово су величина, власник и име датотеке.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}'

лс -л | греп "страница" | авк '{принт $ 5 "" $ 3 "" $ 9} "у прозору терминала

Добијамо листу тих колона за сваку од датотека које одговарају.

Три колона за сваку одговарајућу датотеку у прозору терминала

Сада ћемо тај излаз пренети кроз sort команда. Користићемо -n (нумеричка) опција за пустити sort знам да би први ступац требало третирати као бројеве.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n

лс -л | греп "страница" | авк '{принт $ 5 "" $ 3 "" $ 9} "| сортирај -н у прозору терминала

Излаз је сортиран према величини датотеке, уз наш прилагођени избор три колоне.

Датотеке сортиране по величини у прозору терминала

Додавање друге команде

Завршићемо додавањем у tail команда. Рећи ћемо му да наведе само пет последњих редова.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n | tail -5

лс -л | греп "страница" | авк '{принт $ 5 "" $ 3 "" $ 9} "| врста -н | реп -5 у прозору терминала

То значи да наша наредба значи нештопопут „покажи ми пет највећих„ .паге “датотека у овом директорију, пореданих по величини.“ Наравно, не постоји команда да то постигнемо, али користећи цеви, створили смо своју. Могли бисмо додати ову - или било коју другу дугу команду - као псеудоним или функцију љуске да сачувамо све куцање.

Ево резултата:

Пет највећих .паге датотека наведених по редоследу величине у прозору терминала

Могли бисмо да поништимо редослед величине додавањем -r (обрнуто) опцију на sort команде и употребе head уместо tail да одаберете линије с врха резултата.

лс -л | греп "страница" | авк '{принт $ 5 "" $ 3 "" $ 9} "| врста -рн | глава -5 у прозору терминала

Овог пута је наведено пет највећих „.паге“ датотека од највећих до најмањих:

Пет највећих .паге датотека наведене су обрнутим редоследом у прозору терминала

Неки новији примери

Ево два занимљива примера из недавних чланака о Хов-То геековима.

Неке команде, попут xargsкоманде, дизајниране су тако да имају улазни цевовод за њих. Ево начина на који можемо wc пребројите речи, карактере и редове у више датотека цевоводом ls у xargs која затим уноси списак датотека wc као да су им пренесени wc као параметре командне линије

ls *.page | xargs wc

лс * .паге | каргс вц у прозору терминала

Укупни број речи, знакова и линија наведен је на дну прозора терминала.

Број речи, цхартера и линија у прозору терминала

Ево начина да се сортира листа јединствених екстензија датотека у тренутном директорију, са бројем сваке врсте.

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

лс | рев | цут -д '.' -ф1 | рев | врста | уник -ц у прозору терминала

Овдје се пуно тога догађа.

  • лс: Листа датотека у директорију
  • рев: Обрне текст у називима датотека.
  • исећи: Сече низ при првом појављивању наведеног разграничника ".". Текст након тога се одбацује.
  • рев: Поништава преостали текст, који је проширење имена датотеке.
  • врста: Списује листу абецедним редом.
  • уник: Броји број сваког јединственог уноса на листи.

Излаз приказује листу екстензија датотека, пореданих по абецеди са бројем сваке јединствене врсте.

Листа јединствених екстензија датотека у прозору терминала

Намед Пипес

Доступна нам је друга врста цеви,називају се цеви. Цеви у претходним примерима су креиране у покрету помоћу љуске приликом обраде командне линије. Цеви се стварају, користе и затим одбацују. Они су пролазни и не остављају трага о себи. Они постоје само онолико дуго колико траје наредба која их користи.

Називне цијеви се појављују као трајни објекти у датотечном суставу, тако да их можете видјети користећи ls. Они су упорни јер ће преживети поновно покретање рачунара - мада ће тада сви непрочитани подаци у њима бити одбачени.

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

Називне цеви су створене помоћу mkfifo команда. Ова наредба ће створити именовану цев која се у тренутном директорију назива "геек-пипе".

mkfifo geek-pipe

мкфифо геек-пипе у терминалном прозору

Можете видети детаље именоване цеви ако користимо ls команда са -l (дуги формат) опција:

ls -l geek-pipe

Ја сам цевовод у прозору терминала

Први знак листе је "п", што значи да је цев. Ако је то било „д“, то би значило да је објект датотечног система директориј, а цртица „-“ би значила да је то редовна датотека.

Коришћење именоване цеви

Користимо нашу цев. Неименоване цеви које смо користили у нашим претходним примерима пренели су податке одмах из наредбе за слање у наредбу за пријем. Подаци послати кроз именовану цев остат ће у цијеви док се не прочитају. Подаци се заправо чувају у меморији, тако да величина именоване цеви неће варирати у ls уноси да ли у њему има података или не.

За овај пример користићемо два терминална прозора. Користићу ознаку:

# Terminal-1

у једном прозору терминала и

# Terminal-2

у другом, тако да их можете разликовати. Хасх "#" говори шкољци да је оно што следи је коментар и да га игнорише.

Узмимо целину нашег претходног примера и преусмеримо га у именовану цев. Зато користимо и неименоване и именоване цеви у једној наредби:

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c > geek-pipe

лс | рев | цут -д '.' -ф1 | рев | врста | уник -ц> геек-цев у прозору терминала

Чини се да се ништа велико неће догодити. Можда ћете приметити да се не враћате у наредбени редак, па се нешто дешава.

У другом прозору терминала издајте ову наредбу:

cat < geek-pipe

мачка <геек-цев у прозору терминала

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

Садржај именованог пипа приказан је у прозору терминала

И видећете да сте враћени у наредбени редак у првом прозору терминала.

Довршени задатак и наредбена линија у прозору терминала

Дакле, шта се управо догодило

  • Преусмерили смо неки излаз у именовану цев.
  • Први прозор терминала се није вратио у наредбени редак.
  • Подаци су остали у цеви док нису прочитани из цеви на другом терминалу.
  • Враћени су нам у наредбени редак у првом прозору терминала.

Можда мислите да бисте могли извршити наредбу у првом прозору терминала као позадински задатак додавањем ан & до краја команде. И у праву си У том случају би нас одмах вратили у командни редак.

Поента не коришћење позадинске обраде требало је да се истакне да је именована цев процес блокирања. Стављање нечега у именовану цев се само отвараједан крај цеви. Други крај се не отвара док програм за читање не извуче податке. Кернел зауставља процес у првом прозору терминала док се подаци не прочитају са другог краја цеви.

Моћ цеви

У данашње време именоване цеви су нешто новост.

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

Савет о одвајању: Најбоље је да напишете своје пипед команде додавањем једне команде у исто време и приметите тај део да ради, а затим пређите на следећу наредбу.