[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда

Матэрыял, пераклад якога мы публікуем сёння, прызначаны для тых, хто жадае асвоіць камандны радок Linux. Уменне эфектыўна карыстацца гэтай прыладай дазваляе эканоміць нямала чакай. У прыватнасці, размова тут пойдзе аб каманднай абалонцы Bash і аб 21 карыснай камандзе. Таксама мы пагаворым аб тым, як карыстацца сцягамі каманд і псеўданімамі Bash, якія дазваляюць паскорыць увод доўгіх інструкцый.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда

Таксама чытайце ў нашым блогу цыкл публікацый пра bash-скрыпты

тэрміны

Падчас засваення працы ў камандным радку Linux вам можа сустрэцца мноства паняццяў, у якіх карысна будзе арыентавацца. Некаторыя з іх, накшталт "Linux" і "Unix", або "камандная абалонка" і "тэрмінал", часам блытаюць. Пагаворым пра гэтыя і іншыя важныя тэрміны.

юнікс – гэта папулярная аперацыйная сістэма, якая была распрацавана Bell Labs у 1970-х. Яе код быў зачыненым.

Linux - гэта самая папулярная Unix-падобная аперацыйная сістэма. Яна ў нашы дні выкарыстоўваецца на мностве прылад, у тым ліку - і на кампутарах.

Тэрмінал (terminal), або эмулятар тэрмінала - гэта праграма, якая дае доступ да аперацыйнай сістэмы. Адначасова можна адчыняць некалькі вокнаў тэрмінала.

абалонка (shell) - гэта праграма, якая дазваляе адпраўляць аперацыйнай сістэме каманды, напісаныя на адмысловай мове.

Біць расшыфроўваецца як Bourne Again SHell. Гэта - самая распаўсюджаная мова каманднай абалонкі, які выкарыстоўваецца для ўзаемадзеяння з аперацыйнай сістэмай. Акрамя таго, абалонка Bash па змаўчанні выкарыстоўваецца ў macOS.

Інтэрфейс каманднага радка (Command Line Interface, CLI) - гэта спосаб узаемадзеяння чалавека і кампутара, пры выкарыстанні якога карыстач уводзіць каманды з клавіятуры, а кампутар, выконваючы гэтыя каманды, выводзіць, у тэкставым выглядзе, паведамленні для карыстача. Галоўным чынам CLI выкарыстоўваецца для атрымання свежай інфармацыі аб нейкіх сутнасцях, напрыклад, аб файлах, і для працы з файламі. Інтэрфейс каманднага радка варта адрозніваць ад графічнага карыстацкага інтэрфейсу (Graphical User Interface, GUI), пры працы з якім, у асноўным, выкарыстоўваецца мыш. Інтэрфейс каманднага радка часта называюць проста камандным радком.

Скрыпт (script) - гэта невялікая праграма, якая змяшчае паслядоўнасць каманд каманднай абалонкі. Скрыпты запісваюць у файлы, выкарыстоўваць іх можна шматкроць. Пры напісанні скрыптоў можна карыстацца зменнымі, умоўнымі канструкцыямі, цыкламі, функцыямі і іншымі магчымасцямі.

Цяпер, калі мы разгледзелі важныя тэрміны, хачу адзначыць, што тут я буду карыстацца тэрмінамі "Bash", "абалонка" і "камандны радок" як узаемазаменнымі, роўна як і паняццямі "дырэкторыя" (directory) і "тэчка" (folder).

стандартныя патокі, якімі мы будзем тут карыстацца - гэта стандартны ўвод (standard input, stdin), стандартная выснова (standard output, stdout) і стандартная выснова памылак (standard error, stderr).

Калі ў прыкладах каманд, якія будуць прыводзіцца ніжэй, вы сустрэнеце нешта накшталт my_whatever - Гэта азначае, што дадзены фрагмент трэба замяніць чымсьці вашым. Напрыклад - імем файла.

Зараз, перш чым прыступаць да разбору каманд, якім прысвечаны гэты матэрыял, давайце зірнем на іх спіс і на іх кароткія апісанні.

21 Bash-каманда

▍Атрыманне інфармацыі

  • man: выводзіць кіраўніцтва карыстальніка (даведку) па камандзе.
  • pwd: выводзіць звесткі аб рабочай дырэкторыі.
  • ls: выводзіць змесціва дырэкторыі.
  • ps: дазваляе праглядаць звесткі аб працуючых працэсах.

▍Маніпуляцыі з файлавай сістэмай

  • cd: змена працоўнай дырэкторыі.
  • touch: стварэнне файла.
  • mkdir: стварэнне дырэкторыі.
  • cp: капіраванне файла.
  • mv: перасоўванне ці выдаленне файла.
  • ln: стварэнне спасылкі.

▍Перанакіраванне ўводу-вываду і канвееры

  • <: перанакіраванне stdin.
  • >: перанакіраванне stdout.
  • |: перанакіраванне з дапамогай канвеера вываду адной каманды на ўваход іншай каманды.

▍Чытанне файлаў

  • head: чытанне пачатку файла.
  • tail: чытанне канца файла.
  • cat: чытанне файла і вывад яго змесціва на экран або канкатэнацыя файлаў.

▍Выдаленне файлаў, спыненне працэсаў

  • rm: выдаленне файла.
  • kill: прыпынак працэсу.

▍Пошук

  • grep: пошук інфармацыі.
  • ag: прасунутая каманда для пошуку.

▍Архівацыя

  • tar: стварэнне архіваў і праца з імі.

Пагаворым аб гэтых камандах падрабязней.

Падрабязнасці аб камандах

Для пачатку давайце разбяромся з камандамі, вынікі працы якіх выдаюцца ў форме stdout. Звычайна гэтыя вынікі з'яўляюцца ў акне тэрмінала.

▍Атрыманне інфармацыі

man command_name: вывад кіраўніцтва па камандзе, гэта значыць – даведачнай інфармацыі.

pwd: вывад на экран шляху да бягучай рабочай дырэкторыі. Падчас працы з камандным радком карыстачу часта трэба даведвацца тое, дзе менавіта ў сістэме ён знаходзіцца.

ls: вывад змесціва дырэкторыі. Гэтая каманда таксама выкарыстоўваецца вельмі часта.

ls -a: вывад схаваных файлаў. Тут ужыты сцяг -a каманды ls. Выкарыстанне сцягоў дапамагае настройваць паводзіны каманд.

ls -l: вывад падрабязнай інфармацыі аб файлах.

Звярніце ўвагу на тое, што сцягі можна камбінаваць. Напрыклад - так: ls -al.

ps: прагляд выкананых працэсаў.

ps -e: выснова звестак пра ўсе выкананыя працэсы, а не толькі пра тыя, якія злучаны з бягучай абалонкай карыстача. Дадзеную каманду часта выкарыстоўваюць менавіта ў такім выглядзе.

▍Маніпуляцыі з файлавай сістэмай

cd my_directory: змена працоўнай дырэкторыі на my_directory. Для таго каб перайсці на адзін узровень вышэй у дрэве каталогаў выкарыстоўвайце ў якасці my_directory адносны шлях ../.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Каманда cd

touch my_file: стварэнне файла my_file па зададзеным шляху.

mkdir my_directory: стварэнне тэчкі my_directory па зададзеным шляху.

mv my_file target_directory: перамяшчэнне файла my_file у тэчку target_directory. Пры ўказанні мэтавай дырэкторыі трэба выкарыстоўваць абсалютны шлях да яе (а не канструкцыю накшталт ../).

Каманду mv, акрамя таго, можна выкарыстоўваць для перайменавання файлаў ці тэчак. Напрыклад, выглядаць гэта можа так:

mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory
: стварэнне копіі файла my_source_file і памяшканне яе ў тэчку target_directory.

ln -s my_source_file my_target_file: стварэнне сімвалічнай спасылкі my_target_file на файл my_source_file. Калі змяніць спасылку, тое зменіцца і зыходны файл.

Калі файл my_source_file будзе выдалены, то my_target_file застанецца. Сцяг -s каманды ln дазваляе ствараць спасылкі і для дырэкторый.

Зараз пагаворым аб перанакіраванні ўводу-вываду і канвеерах.

▍Перанакіраванне ўводу-вываду і канвееры

my_command < my_file: замяняе дэскрыптар файла стандартнага ўводу (stdin) на файл my_file. Гэта можа апынуцца карысным у тым выпадку, калі каманда чакае ўводу некаторых дадзеных з клавіятуры, а гэтыя дадзеныя загадзя захаваны ў файле.

my_command > my_file: перанакіроўвае вынікі працы каманды, то бок тое, што звычайна трапляе ў stdout і выводзіцца на экран, у файл my_file. Калі файл my_file не існуе - ён ствараецца. Калі файл існуе - ён перазапісваецца.

Напрыклад, пасля выканання каманды ls > my_folder_contents.txt будзе створаны тэкставы файл, які змяшчае спіс таго, што знаходзіцца ў бягучай працоўнай дырэкторыі.

Калі замест сімвала > скарыстацца канструкцыяй >>, то, пры ўмове існавання файла, у які перанакіроўваецца выснова каманды, гэты файл перазапісаны не будзе. Дадзеныя будуць дададзены ў канец гэтага файла.

Цяпер зірнем на канвеерную апрацоўку дадзеных.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Тое, што выводзіць адна каманда, падаецца на ўваход іншай каманды. Гэта падобна на падлучэнне адной трубы да іншай

first_command | second_command: сімвал канвеера, |, выкарыстоўваецца для таго каб адправіць вынікі працы адной каманды іншай камандзе. Тое, што каманда, змешчаная ў левай частцы апісванай канструкцыі, адпраўляе ў stdout, трапляе ў stdin каманды, якая знаходзіцца справа ад знака канвеера.

У Linux канвеерную апрацоўку дадзеных можна арганізаваць з выкарыстаннем практычна любой правільна складзенай каманды. Часта кажуць, што ўсё ў Linux - гэта канвеер.

З дапамогай знака канвеера можна аб'ядноўваць у ланцужок некалькі каманд. Выглядае гэта так:

first_command | second_command | third_command

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Канвеер з некалькіх каманд можна параўнаць з трубаправодам

Звярніце ўвагу на тое, што калі каманда, якая знаходзіцца злева ад сімвала |, выводзіць нешта ў stdout, тое, што яна вывела, неадкладна становіцца даступным у выглядзе stdin другой камандзе. Гэта значыць аказваецца, што, выкарыстоўваючы канвеер, мы маем справу з паралельным выкананнем каманд. Часам гэта можа прывесці да нечаканых вынікаў. Падрабязнасці аб гэтым можна пачытаць тут.

Зараз пагаворым аб чытанні дадзеных з файлаў і аб вывадзе іх на экран.

▍Чытанне файлаў

head my_file: счытвае радкі з пачатку файла і выводзіць іх на экран. Чытаць можна не толькі змесціва файлаў, але і тое, што каманды выводзяць у stdin, выкарыстоўваючы гэтую каманду ў якасці элемента канвеера.

tail my_file: счытвае радкі з канца файла. Гэтую каманду таксама можна выкарыстоўваць у канвееры.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Head (галава) знаходзіцца спераду, а tail (хвост) ззаду

Калі вы працуеце з дадзенымі, выкарыстоўваючы бібліятэку pandas, тады каманды head и tail павінны быць вам знаёмы. Калі гэта не так - зірніце на вышэйпрыведзены малюнак, і вы без працы іх запомніце.

Разгледзім іншыя спосабы чытання файлаў, пагаворым аб камандзе cat.

Каманда cat альбо выводзіць змесціва файла на экран, альбо канкатэнуе некалькі файлаў. Гэта залежыць ад таго, колькі файлаў перададзена гэтай камандзе пры выкліку.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Каманда cat

cat my_one_file.txt: калі гэтай камандзе перадаюць адзін файл - яна выводзіць яго ў stdout.

Калі ж перадаць ёй два файлы або большую колькасць файлаў, то яна паводзіць сябе па-іншаму.

cat my_file1.txt my_file2.txt: атрымаўшы на ўваход некалькі файлаў гэтая каманда канкатэнуе іх змесціва і выведзе тое, што атрымалася ў stdout.

Калі вынік канкатэнацыі файлаў трэба захаваць у выглядзе новага файла, можна скарыстацца аператарам >:

cat my_file1.txt my_file2.txt > my_new_file.txt

Цяпер пагаворым аб тым, як выдаляць файлы і спыняць працэсы.

▍Выдаленне файлаў, спыненне працэсаў

rm my_file: выдаляе файл my_file.

rm -r my_folder: выдаляе тэчку my_folder і ўсе якія змяшчаюцца ў ёй файлы і тэчкі. Сцяг -r указвае на тое, што каманда будзе працаваць у рэкурсіўным рэжыме.

Для таго каб сістэма не запытвала пацверджанне пры выкананні кожнай аперацыі выдалення файла ці тэчкі, скарыстайцеся сцягам -f.

kill 012345: спыняе ўказаны выкананы працэс, даючы яму час на карэктнае завяршэнне працы.

kill -9 012345: прымусова завяршае ўказаны запушчаны працэс. Сцяг віду -s SIGKILL азначае тое ж самае, што і сцяг -9.

▍Пошук

Для пошуку дадзеных можна выкарыстоўваць розныя каманды. У прыватнасці - grep, ag и ack. Пачнём наша знаёмства з гэтымі камандамі з grep. Гэта - правераная часам, надзейная каманда, якая, праўда, павольней за іншых і не так, як яны, зручная ў выкарыстанні.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Каманда grep

grep my_regex my_file: выконвае пошук my_regex в my_file. Пры выяўленні супадзенняў вяртаецца, для кожнага з іх, увесь радок. Па змаўчанні my_regex ўспрымаецца як рэгулярнае выраз.

grep -i my_regex my_file: пошук выконваецца без уліку рэгістра сімвалаў.

grep -v my_regex my_file: вяртае ўсе радкі, у якіх няма my_regex. Сцяг -v азначае інверсію, ён нагадвае аператар NOT, наяўны ў многіх мовах праграмавання.

grep -c my_regex my_file: вяртае звесткі аб колькасці супадзенняў з шуканым шаблонам, знойдзеным у файле.

grep -R my_regex my_folder: выконвае рэкурсіўны пошук ва ўсіх файлах, змешчаных у зададзенай тэчцы і ў тэчках, укладзеных у яе.

Цяпер пагаворым аб камандзе ag. Яна з'явілася пазней grep, яна хутчэй, працаваць з ёй зручней.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Каманда ag

ag my_regex my_file: вяртае звесткі аб нумарах радкоў, і самі радкі, у якіх знойдзены супадзенні з my_regex.

ag -i my_regex my_file: пошук выконваецца без уліку рэгістра сімвалаў.

Каманда ag аўтаматычна апрацоўвае файл .gitignore і выключае з высновы тое, што знойдзена ў тэчках ці файлах, пералічаных у гэтым файле. Гэта вельмі зручна.

ag my_regex my_file -- skip-vcs-ignores: змесціва файлаў сістэм аўтаматычнага кантролю версій (накшталт .gitignore) пры пошуку не ўлічваецца.

Акрамя таго, для таго каб паказаць камандзе ag на тое, якія шляхі да файлаў трэба выключыць з пошуку, можна стварыць файл .agignore.

У пачатку гэтага раздзела мы згадалі аб камандзе ack. Каманды ack и ag вельмі падобныя, можна сказаць, што яны ўзаемазаменныя на 99%. Аднак каманда ag працуе хутчэй, таму я апісаў менавіта яе.

Цяпер пагаворым аб рабоце з архівамі.

▍Архівацыя

tar my_source_directory: аб'ядноўвае файлы з тэчкі my_source_directory у адзін файл tarball. Такія файлы зручна выкарыстоўваць для таго, каб перадаваць каму-небудзь вялікія наборы файлаў.

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда
Каманда tar

Tarball-файлы, якія ствараюцца гэтай камандай, уяўляюць сабой файлы з пашырэннем .tar (Tape ARchive). Тое, што ў назове каманды і ў пашырэнні імёнаў файлаў, ствараных ёй, утоена слова "tape" (стужка), кажа аб тым, як даўно існуе гэтая каманда.

tar -cf my_file.tar my_source_directory: стварае tarball-файл з імем my_file.tar са змесцівам тэчкі my_source_directory. Сцяг -c расшыфроўваецца як «create» (стварэнне), а сцяг -f як "file" (файл).

Для вымання файлаў, якія знаходзяцца ў .tar-файле, выкарыстоўваецца каманда tar з флагамі -x («extract», выманне) і -f ("file", файл).

tar -xf my_file.tar: здабывае файлы з my_file.tar у бягучую працоўную дырэкторыю.

Цяпер пагаворым аб тым, як сціскаць і распакоўваць .tar-файлы.

tar -cfz my_file.tar.gz my_source_directory: тут, з выкарыстаннем сцяга -z («zip», алгарытм сціску) паказана, што для сціску файлаў павінен выкарыстоўвацца алгарытм gzip (GNU zip). Сціск файлаў дазваляе эканоміць дыскавую прастору пры захоўванні такіх файлаў. Калі ж файлы плануецца, напрыклад, перадаваць іншым карыстачам, гэта спрыяе хутчэйшай загрузцы такіх файлаў.

Распакаваць файл .tar.gz можна, дадаўшы сцяг -z да каманды вымання змесціва .tar-файлаў, якую мы разглядалі вышэй. Выглядае гэта так:

tar -xfz my_file.tar.gz
Трэба адзначыць, што ў каманды tar ёсць яшчэ мноства карысных сцягоў.

Bash-псеўданімы

Bash-псеўданімы (іх яшчэ называюць аліясамі або скарачэннямі) прызначаны для стварэння скарочаных найменняў каманд або іх паслядоўнасцяў, выкарыстанне якіх замест звычайных каманд паскарае працу. Калі ў вас, дапусцім, ёсць псеўданім bu, за якім хаваецца каманда python setup.py sdist bdist_wheel, то для выкліку дадзенай каманды дастаткова скарыстацца гэтым псеўданімам.

Для стварэння падобнага псеўданіма дастаткова дадаць наступную каманду ў файл. ~/.bash_profile:

alias bu="python setup.py sdist bdist_wheel"

Калі ў вашай сістэме няма файла ~/.bash_profile, то вы можаце стварыць яго самастойна, скарыстаўшыся камандай touch. Пасля стварэння псеўданіма перазапусціце тэрмінал, пасля чаго вы зможаце гэтым псеўданімам карыстацца. У дадзеным выпадку ўвод двух знакаў замяняе ўвод больш за трох дзясяткаў знакаў каманды, якая прызначана для зборкі Python-пакетаў.

В ~/.bash_profile можна дадаваць псеўданімы для любых часта выкарыстоўваных каманд.

▍Вынікі

У гэтым матэрыяле мы разгледзелі 21 папулярную каманду Bash і пагаварылі аб стварэнні псеўданімаў для каманд. Калі вам гэтая тэма цікавая - вось цыкл публікацый, прысвечаны Bash. Тут можна знайсці pdf-версію гэтых публікацый. Акрамя таго, калі вы жадаеце асвоіць Bash, падушыце аб тым, што тут, як і пры вывучэнні любой іншай праграмнай сістэмы, важная практыка.

Паважаныя чытачы! Якія каманды, якія карысна ведаць пачаткоўцам, вы дадалі б да тых, якія былі разгледжаны ў гэтым артыкуле?

Таксама чытайце ў нашым блогу цыкл публікацый пра bash-скрыпты

[у закладкі] Bash для пачаткоўцаў: 21 карысная каманда

Крыніца: habr.com

Дадаць каментар