Аднастрочнікі Shell — различия между версиями
Svetit (обсуждение | вклад) |
Svetit (обсуждение | вклад) (→Перанакіраванне стандартнага вывада) |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 2: | Строка 2: | ||
==Тэорыя== | ==Тэорыя== | ||
+ | Адна з крыхут магчымасцяў каманднага радка: перанакіраванне ўвода/вывада. Дзякуючы ёй магчыма перанакіроўваць увод і вывад каманд з файлаў і ў файлы, а таксама складаць з камандаў цэлыя канвейеры. | ||
+ | Для дэманстрацыі гэтай магчымасці увядзем наступныя каманды: | ||
+ | * '''cat''' - аб'ядноўвае файлы. | ||
+ | * '''sort''' - сарціруе радкі тэкста. | ||
+ | * '''uniq''' - паведамляе пра паўторныя радкі ці выдаляе іх. | ||
+ | * '''wc''' - выводзіць колькасць сімвалаў пераводу радка, слоў і байтаў у кожным пазначаным файле. | ||
+ | * '''grep''' - знаходзіць і выводзіць радкі суадносна з шаблонам. | ||
+ | * '''head''' - выводзіць першыя радкі файла. | ||
+ | * '''tail''' - выводзіць апошнія радкі файла. | ||
+ | * '''tee''' - чытае дадзеныя са стандартнага увода і запісвае у стандартны вывад і у файлы. | ||
− | == | + | ===Стандартны увод, вывад і вывад памылак=== |
+ | |||
+ | Шматлікія прылады '''shell''' выводзяць што-небудзь на кансоль. Гэты вывад часта дзеліцца на два тыпа. Першы - вынікі працы прылады, значыць, дадзеныя, для атрымання якіх стваралася прылада. Другі - паведамленні пра станы ці памылкі, якія паведамляюць пра самаадчуванне прылады. Напрыклад, калі глянуць на вывад каманды '''ls''', можна пабачыць, што яна выводзіць на экран вынікі сваёй працы і часам паведамленні пра памылкі. | ||
+ | |||
+ | Згодна з цэнтральнай ідэяй '''Unix''', што ''"усё існае ёсць файл"'', такія прылады, як '''ls''', насамрэч выводзяць свае вынікі ў спецыяльны файл, які называецца '''стандартным вывадам''' ''(standard output, часта вызначаецца як stdout)'', а паведамленні пра стан - у спецыяльны файл '''стандартны вывад памылак''' ''(standard error, stderr)''. Па змоўчанні оба файла, стандартны вывад і стандартны вывад памылак, звязаны з экранам і не захоўваюцца на дыске. | ||
+ | |||
+ | Акрамя таго, шматлікія прылады прымаюць увод са спецыяльнага файла з назвай '''стандартны увод''' ''(standard input, stdin)'', які па змоўчанні звязаны з клавіятурай. | ||
+ | |||
+ | Механізм перанакіравання увода/вывада дазваляе змяняць кірунак вывада і уводу. Звычайна вывад адбываецца на экран, а увод - з клавіятуры, але механізм перанакіраванні дазваляе змяніць гэты парадак рэчаў. | ||
+ | |||
+ | ==Перанакіраванне стандартнага вывада== | ||
+ | Каб перанакіраваць стандартны вывад у іншы файл замест экрана, трэба дадаць у каманду аператар перанакіравання > і імя файла. | ||
+ | |||
+ | ls -l /usr/bin > ls-output.txt | ||
+ | |||
+ | Тут доўгі спіс зместу файла /usr/bin будзе накіраваны ў ls-output.txt | ||
+ | |||
+ | Праглядзім змест файла ls-output.txt | ||
+ | less ls-output.txt | ||
+ | |||
+ | Дадаць радок тэкста у файл: | ||
+ | echo "радок тэкста" > ls-output.txt | ||
+ | |||
+ | Ачысціць файл можна наступным чынам: | ||
+ | > ls-output.txt | ||
+ | |||
+ | Каб дадаць вывад у канец існуючага файла: | ||
+ | ls -l /usr/bin >> ls-output.txt | ||
+ | |||
+ | ==Перанакіраванне стандартнага ўвода== | ||
+ | '''cat''' - аб'ядноўвае файлы. | ||
+ | |||
+ | cat [файл...] | ||
+ | |||
+ | Каманда cat выкарыстоўваецца для вывада зместу файла без магчымасці пастаронкавага прагляду. Напрыклад, | ||
+ | |||
+ | cat ls-output.txt | ||
+ | |||
+ | пакажа змест файла ls-output.txt. | ||
+ | |||
+ | Cat здольна прымаць адразу некалькі файлаў. Яна выкарыстоўваецца, каб аб'яднаць іх. | ||
+ | |||
+ | Напрыклад, у нас есць файлы movie.mpeg.001 movie.mpeg.002 ... movie.mpeg.099 | ||
+ | |||
+ | Іх можна аб'яднаць наступнай камандай: | ||
+ | cat movie.mpeg.0* > movie.mpeg | ||
+ | |||
+ | Проста вызаў каманды cat дазволіць увесці дадзеныя з клавіятуры | ||
+ | |||
+ | cat | ||
+ | Напішыце свой тэкст у кансолі | ||
+ | Увядзіце CTRL-D | ||
+ | |||
+ | Па-змоўчанні (без дадатковых аргулентаў) cat вывядзе у кансоль той жа тэкст, які вы набралі. | ||
+ | |||
+ | Каб перанакіравать тэкст у файл запішам: | ||
+ | cat > new_file.txt | ||
+ | |||
+ | І праглядзем файл, які атрымаўся: | ||
+ | cat new_file.txt | ||
+ | |||
+ | ==Канвейеры== | ||
+ | "Уменне" каманд чытаць дадзеныя са стандартнага увода і выводзіць вынікі ў стандартны вывад выкарыстоўваецца механізмам каманднай абалонцы, які называецца канвейерам. З дапамогай аператара канвейера | (вертыкальная рыска) стандартны вывад адной каманды можна звязаць з стандартным уводам другой. | ||
+ | |||
+ | каманда1 | каманда2 | ||
+ | |||
+ | Паспрабуем : | ||
+ | |||
+ | ls -l /usr/bin | less | ||
+ | |||
+ | Мы вывелі вынікі каманды ls праз less. | ||
+ | |||
+ | ==Фільтры== | ||
+ | Канвейеры часта выкарыстоўваюцца для выканання складаных аперацы з дадзенымі. Яны дазваляюць аб'яднаць разам некалькі камандаў. | ||
+ | |||
+ | Часта каманды, якія выкарыстоўваюцца такім чынам называюцца - фільтры. Яны прымаюць увод, змяняюць яго адмысловым чынам і выводзяць вынік. | ||
+ | |||
+ | ===sort - сарціроўка радкоў тэкста=== | ||
+ | |||
+ | Саставім спіс усіх праграм на выканане ў каталогах /bin i /usr/bin, размесцім іх па алфавіту і вывядзем спіс: | ||
+ | ls /bin /usr/bin | sort | less | ||
+ | |||
+ | Так як у камандзе прысутнічаюць два каталогі, то звычайны вывад каманды ls будзе складацца з дзвюх сарціраваных спісаў, па аднаму для кжнага каталога. Калі ж мы дадаем каманду sort у канвейер, мы змяняем дадзеныя, каб атрымаць адзіны сарціраваны спіс. | ||
+ | |||
+ | ===uniq - пошук ці выдаленне паўторных радкоў=== | ||
+ | Каманда uniq часта ўжываецца разам з камандай sort. uniq прымае сарціраваны спіс дадзеных або са стандартнага ўвода, ці з файла, імя якога можна перадаць у адным аргуменце, і па змоўчанні выдаляе паўторныя радкі са спісу. | ||
+ | |||
+ | У нашым выпадку. Каб пазбегнуць паўторных радкоў у папярэдняй камандзе сарціроўкі вывада ls /bin /usr/bin, дададзім у uniq канвейер: | ||
+ | ls /bin /usr/bin | sort | uniq | less | ||
+ | |||
+ | З дапамогай uniq і параметра -d мы можам зрабіць наадварот - вывесці спіс дублікатаў: | ||
+ | ls /bin /usr/bin | sort | uniq -d | less | ||
+ | |||
+ | ===wc - вывад колькасці строк, словаў і байтаў=== | ||
+ | wc палічвае каолькасць радкоў, словаў і байтаў для кожнага файла, і агульную колькасць, калі пералічаны не адзін файл. | ||
+ | wc файл1 файл2 ... | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | !Каманда | ||
+ | !Скапіруе | ||
+ | |- | ||
+ | |<nowiki>-c, --bytes</nowiki> | ||
+ | |Падлічыць колькаcць байтаў | ||
+ | |- | ||
+ | |<nowiki>-m, --chars</nowiki> | ||
+ | |Падлічыць колькасць літар | ||
+ | |- | ||
+ | |<nowiki>-l, --lines</nowiki> | ||
+ | |Падлічыць колькасць новых радкоў | ||
+ | |- | ||
+ | |<nowiki>-L, --max-line-length</nowiki> | ||
+ | |Падлічыць даўжыню самага дліннага радка | ||
+ | |- | ||
+ | |<nowiki>-w, --words</nowiki> | ||
+ | |Падлічыць колькасць словаў | ||
+ | |} | ||
+ | |||
+ | ===grep - знаходзіць і выводзіць радкі суадносна з шаблонам.=== | ||
+ | |||
+ | grep шаблон файл1 файл2... | ||
+ | Калі шаблон - радок тэкста, ён бярэцца у кавычкі "". | ||
+ | |||
+ | Опцыя -n выводзіць радок файла з нумарам. | ||
+ | grep -n шаблон файл1 файл2... | ||
+ | |||
+ | Опцыя --color выдзялае знойдзены шалон у радку колерам. | ||
+ | grep --color -n шаблон файл1 файл2... | ||
+ | |||
+ | Опцыя -i знаходзіць шаблон у тэксце, не зважаючы на рэгістр літар. | ||
+ | grep -n -i шаблон файл1 файл2... | ||
+ | |||
+ | ====Рэгулярныя выразы==== | ||
+ | Калі вы шукаеце шаблон не ў дакладным файле а ў шэрагу файлаў, вам могуць спатрэбіцца рэгулярныя выразы, каб фільтраваць файлы, патрэбныя вам па нейкіх прызнаках. | ||
+ | |||
+ | Пачнем з простага: * - значыць любы сімвал. | ||
+ | grep шаблон *.txt | ||
+ | Гэтая камнда адшукае шаблон ва усих файлах у тэчцы з пашырэннем .txt | ||
==Заданне== | ==Заданне== | ||
Строка 15: | Строка 162: | ||
Цяпер вы працуеце на ўдаленам Linux сэрверы. | Цяпер вы працуеце на ўдаленам Linux сэрверы. | ||
+ | |||
+ | ===Заданне 1=== | ||
+ | * Працаваць у тэчцы '''laba_3''' | ||
+ | |||
+ | ===Заданне 2=== | ||
+ | * Быць гатовым прадэманстраваць каманды па запыту выкладчыка. | ||
==Літаратура== | ==Літаратура== | ||
# Уильям Шоттс, "Командная строка Linux", 2017, с.70. | # Уильям Шоттс, "Командная строка Linux", 2017, с.70. | ||
+ | # Каманда grep https://www.computerhope.com/unix/ugrep.htm | ||
+ | # Каманда wc https://www.computerhope.com/unix/uwc.htm |
Текущая версия на 16:06, 19 марта 2018
Мэта: Пазнаёміцца і папрактыкавацца з асноўнымі камандамі перанакіравання у shell.
Содержание
Тэорыя
Адна з крыхут магчымасцяў каманднага радка: перанакіраванне ўвода/вывада. Дзякуючы ёй магчыма перанакіроўваць увод і вывад каманд з файлаў і ў файлы, а таксама складаць з камандаў цэлыя канвейеры. Для дэманстрацыі гэтай магчымасці увядзем наступныя каманды:
- cat - аб'ядноўвае файлы.
- sort - сарціруе радкі тэкста.
- uniq - паведамляе пра паўторныя радкі ці выдаляе іх.
- wc - выводзіць колькасць сімвалаў пераводу радка, слоў і байтаў у кожным пазначаным файле.
- grep - знаходзіць і выводзіць радкі суадносна з шаблонам.
- head - выводзіць першыя радкі файла.
- tail - выводзіць апошнія радкі файла.
- tee - чытае дадзеныя са стандартнага увода і запісвае у стандартны вывад і у файлы.
Стандартны увод, вывад і вывад памылак
Шматлікія прылады shell выводзяць што-небудзь на кансоль. Гэты вывад часта дзеліцца на два тыпа. Першы - вынікі працы прылады, значыць, дадзеныя, для атрымання якіх стваралася прылада. Другі - паведамленні пра станы ці памылкі, якія паведамляюць пра самаадчуванне прылады. Напрыклад, калі глянуць на вывад каманды ls, можна пабачыць, што яна выводзіць на экран вынікі сваёй працы і часам паведамленні пра памылкі.
Згодна з цэнтральнай ідэяй Unix, што "усё існае ёсць файл", такія прылады, як ls, насамрэч выводзяць свае вынікі ў спецыяльны файл, які называецца стандартным вывадам (standard output, часта вызначаецца як stdout), а паведамленні пра стан - у спецыяльны файл стандартны вывад памылак (standard error, stderr). Па змоўчанні оба файла, стандартны вывад і стандартны вывад памылак, звязаны з экранам і не захоўваюцца на дыске.
Акрамя таго, шматлікія прылады прымаюць увод са спецыяльнага файла з назвай стандартны увод (standard input, stdin), які па змоўчанні звязаны з клавіятурай.
Механізм перанакіравання увода/вывада дазваляе змяняць кірунак вывада і уводу. Звычайна вывад адбываецца на экран, а увод - з клавіятуры, але механізм перанакіраванні дазваляе змяніць гэты парадак рэчаў.
Перанакіраванне стандартнага вывада
Каб перанакіраваць стандартны вывад у іншы файл замест экрана, трэба дадаць у каманду аператар перанакіравання > і імя файла.
ls -l /usr/bin > ls-output.txt
Тут доўгі спіс зместу файла /usr/bin будзе накіраваны ў ls-output.txt
Праглядзім змест файла ls-output.txt
less ls-output.txt
Дадаць радок тэкста у файл:
echo "радок тэкста" > ls-output.txt
Ачысціць файл можна наступным чынам:
> ls-output.txt
Каб дадаць вывад у канец існуючага файла:
ls -l /usr/bin >> ls-output.txt
Перанакіраванне стандартнага ўвода
cat - аб'ядноўвае файлы.
cat [файл...]
Каманда cat выкарыстоўваецца для вывада зместу файла без магчымасці пастаронкавага прагляду. Напрыклад,
cat ls-output.txt
пакажа змест файла ls-output.txt.
Cat здольна прымаць адразу некалькі файлаў. Яна выкарыстоўваецца, каб аб'яднаць іх.
Напрыклад, у нас есць файлы movie.mpeg.001 movie.mpeg.002 ... movie.mpeg.099
Іх можна аб'яднаць наступнай камандай:
cat movie.mpeg.0* > movie.mpeg
Проста вызаў каманды cat дазволіць увесці дадзеныя з клавіятуры
cat Напішыце свой тэкст у кансолі Увядзіце CTRL-D
Па-змоўчанні (без дадатковых аргулентаў) cat вывядзе у кансоль той жа тэкст, які вы набралі.
Каб перанакіравать тэкст у файл запішам:
cat > new_file.txt
І праглядзем файл, які атрымаўся:
cat new_file.txt
Канвейеры
"Уменне" каманд чытаць дадзеныя са стандартнага увода і выводзіць вынікі ў стандартны вывад выкарыстоўваецца механізмам каманднай абалонцы, які называецца канвейерам. З дапамогай аператара канвейера | (вертыкальная рыска) стандартны вывад адной каманды можна звязаць з стандартным уводам другой.
каманда1 | каманда2
Паспрабуем :
ls -l /usr/bin | less
Мы вывелі вынікі каманды ls праз less.
Фільтры
Канвейеры часта выкарыстоўваюцца для выканання складаных аперацы з дадзенымі. Яны дазваляюць аб'яднаць разам некалькі камандаў.
Часта каманды, якія выкарыстоўваюцца такім чынам называюцца - фільтры. Яны прымаюць увод, змяняюць яго адмысловым чынам і выводзяць вынік.
sort - сарціроўка радкоў тэкста
Саставім спіс усіх праграм на выканане ў каталогах /bin i /usr/bin, размесцім іх па алфавіту і вывядзем спіс:
ls /bin /usr/bin | sort | less
Так як у камандзе прысутнічаюць два каталогі, то звычайны вывад каманды ls будзе складацца з дзвюх сарціраваных спісаў, па аднаму для кжнага каталога. Калі ж мы дадаем каманду sort у канвейер, мы змяняем дадзеныя, каб атрымаць адзіны сарціраваны спіс.
uniq - пошук ці выдаленне паўторных радкоў
Каманда uniq часта ўжываецца разам з камандай sort. uniq прымае сарціраваны спіс дадзеных або са стандартнага ўвода, ці з файла, імя якога можна перадаць у адным аргуменце, і па змоўчанні выдаляе паўторныя радкі са спісу.
У нашым выпадку. Каб пазбегнуць паўторных радкоў у папярэдняй камандзе сарціроўкі вывада ls /bin /usr/bin, дададзім у uniq канвейер:
ls /bin /usr/bin | sort | uniq | less
З дапамогай uniq і параметра -d мы можам зрабіць наадварот - вывесці спіс дублікатаў:
ls /bin /usr/bin | sort | uniq -d | less
wc - вывад колькасці строк, словаў і байтаў
wc палічвае каолькасць радкоў, словаў і байтаў для кожнага файла, і агульную колькасць, калі пералічаны не адзін файл.
wc файл1 файл2 ...
Каманда | Скапіруе |
---|---|
-c, --bytes | Падлічыць колькаcць байтаў |
-m, --chars | Падлічыць колькасць літар |
-l, --lines | Падлічыць колькасць новых радкоў |
-L, --max-line-length | Падлічыць даўжыню самага дліннага радка |
-w, --words | Падлічыць колькасць словаў |
grep - знаходзіць і выводзіць радкі суадносна з шаблонам.
grep шаблон файл1 файл2...
Калі шаблон - радок тэкста, ён бярэцца у кавычкі "".
Опцыя -n выводзіць радок файла з нумарам.
grep -n шаблон файл1 файл2...
Опцыя --color выдзялае знойдзены шалон у радку колерам.
grep --color -n шаблон файл1 файл2...
Опцыя -i знаходзіць шаблон у тэксце, не зважаючы на рэгістр літар.
grep -n -i шаблон файл1 файл2...
Рэгулярныя выразы
Калі вы шукаеце шаблон не ў дакладным файле а ў шэрагу файлаў, вам могуць спатрэбіцца рэгулярныя выразы, каб фільтраваць файлы, патрэбныя вам па нейкіх прызнаках.
Пачнем з простага: * - значыць любы сімвал.
grep шаблон *.txt
Гэтая камнда адшукае шаблон ва усих файлах у тэчцы з пашырэннем .txt
Заданне
Для выканання заданняў вам спатрэбіцца шукаць дадатковую інфармацыю пра каманды shell у інтэрнэце!
Удаленае падключэнне да сэврвера на Windows
- Зайсці у тэчку "Загрузки", запусціць прыладу putty.exe
- У поле Host Name (or IP Address) запісаць 10.194.0.220
- У акне кансолі ўвесці лагін: user і пароль: user.
Цяпер вы працуеце на ўдаленам Linux сэрверы.
Заданне 1
- Працаваць у тэчцы laba_3
Заданне 2
- Быць гатовым прадэманстраваць каманды па запыту выкладчыка.
Літаратура
- Уильям Шоттс, "Командная строка Linux", 2017, с.70.
- Каманда grep https://www.computerhope.com/unix/ugrep.htm
- Каманда wc https://www.computerhope.com/unix/uwc.htm