Матэрыял, пераклад якога мы публікуем сёння, прызначаны для тых, хто жадае асвоіць камандны радок Linux. Уменне эфектыўна карыстацца гэтай прыладай дазваляе эканоміць нямала чакай. У прыватнасці, размова тут пойдзе аб каманднай абалонцы Bash і аб 21 карыснай камандзе. Таксама мы пагаворым аб тым, як карыстацца сцягамі каманд і псеўданімамі Bash, якія дазваляюць паскорыць увод доўгіх інструкцый.
→
тэрміны
Падчас засваення працы ў камандным радку Linux вам можа сустрэцца мноства паняццяў, у якіх карысна будзе арыентавацца. Некаторыя з іх, накшталт "Linux" і "Unix", або "камандная абалонка" і "тэрмінал", часам блытаюць. Пагаворым пра гэтыя і іншыя важныя тэрміны.
Цяпер, калі мы разгледзелі важныя тэрміны, хачу адзначыць, што тут я буду карыстацца тэрмінамі "Bash", "абалонка" і "камандны радок" як узаемазаменнымі, роўна як і паняццямі "дырэкторыя" (directory) і "тэчка" (folder).
стандартныя 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
адносны шлях ../
.
Каманда 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_directorymy_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
будзе створаны тэкставы файл, які змяшчае спіс таго, што знаходзіцца ў бягучай працоўнай дырэкторыі.
Калі замест сімвала >
скарыстацца канструкцыяй >>
, то, пры ўмове існавання файла, у які перанакіроўваецца выснова каманды, гэты файл перазапісаны не будзе. Дадзеныя будуць дададзены ў канец гэтага файла.
Цяпер зірнем на канвеерную апрацоўку дадзеных.
Тое, што выводзіць адна каманда, падаецца на ўваход іншай каманды. Гэта падобна на падлучэнне адной трубы да іншай
first_command | second_command
: сімвал канвеера, |
, выкарыстоўваецца для таго каб адправіць вынікі працы адной каманды іншай камандзе. Тое, што каманда, змешчаная ў левай частцы апісванай канструкцыі, адпраўляе ў stdout
, трапляе ў stdin
каманды, якая знаходзіцца справа ад знака канвеера.
У Linux канвеерную апрацоўку дадзеных можна арганізаваць з выкарыстаннем практычна любой правільна складзенай каманды. Часта кажуць, што ўсё ў Linux - гэта канвеер.
З дапамогай знака канвеера можна аб'ядноўваць у ланцужок некалькі каманд. Выглядае гэта так:
first_command | second_command | third_command
Канвеер з некалькіх каманд можна параўнаць з трубаправодам
Звярніце ўвагу на тое, што калі каманда, якая знаходзіцца злева ад сімвала |
, выводзіць нешта ў stdout
, тое, што яна вывела, неадкладна становіцца даступным у выглядзе stdin
другой камандзе. Гэта значыць аказваецца, што, выкарыстоўваючы канвеер, мы маем справу з паралельным выкананнем каманд. Часам гэта можа прывесці да нечаканых вынікаў. Падрабязнасці аб гэтым можна пачытаць
Зараз пагаворым аб чытанні дадзеных з файлаў і аб вывадзе іх на экран.
▍Чытанне файлаў
head my_file
: счытвае радкі з пачатку файла і выводзіць іх на экран. Чытаць можна не толькі змесціва файлаў, але і тое, што каманды выводзяць у stdin
, выкарыстоўваючы гэтую каманду ў якасці элемента канвеера.
tail my_file
: счытвае радкі з канца файла. Гэтую каманду таксама можна выкарыстоўваць у канвееры.
Head (галава) знаходзіцца спераду, а tail (хвост) ззаду
Калі вы працуеце з дадзенымі, выкарыстоўваючы бібліятэку pandas, тады каманды head
и tail
павінны быць вам знаёмы. Калі гэта не так - зірніце на вышэйпрыведзены малюнак, і вы без працы іх запомніце.
Разгледзім іншыя спосабы чытання файлаў, пагаворым аб камандзе cat
.
Каманда cat
альбо выводзіць змесціва файла на экран, альбо канкатэнуе некалькі файлаў. Гэта залежыць ад таго, колькі файлаў перададзена гэтай камандзе пры выкліку.
Каманда 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
. Гэта - правераная часам, надзейная каманда, якая, праўда, павольней за іншых і не так, як яны, зручная ў выкарыстанні.
Каманда 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
, яна хутчэй, працаваць з ёй зручней.
Каманда 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. Такія файлы зручна выкарыстоўваць для таго, каб перадаваць каму-небудзь вялікія наборы файлаў.
Каманда 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
. Пасля стварэння псеўданіма перазапусціце тэрмінал, пасля чаго вы зможаце гэтым псеўданімам карыстацца. У дадзеным выпадку ўвод двух знакаў замяняе ўвод больш за трох дзясяткаў знакаў каманды, якая прызначана для
В ~/.bash_profile
можна дадаваць псеўданімы для любых часта выкарыстоўваных каманд.
▍Вынікі
У гэтым матэрыяле мы разгледзелі 21 папулярную каманду Bash і пагаварылі аб стварэнні псеўданімаў для каманд. Калі вам гэтая тэма цікавая -
Паважаныя чытачы! Якія каманды, якія карысна ведаць пачаткоўцам, вы дадалі б да тых, якія былі разгледжаны ў гэтым артыкуле?
→
Крыніца: habr.com