Аднастрочнікі Shell — различия между версиями

Материал из Вікі Фаланстэра
Перейти к: навигация, поиск
(Перанакіраванне стандартнага вывада)
 
(не показана одна промежуточная версия этого же участника)
Строка 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

  1. Зайсці у тэчку "Загрузки", запусціць прыладу putty.exe
  2. У поле Host Name (or IP Address) запісаць 10.194.0.220
  3. У акне кансолі ўвесці лагін: user і пароль: user.

Цяпер вы працуеце на ўдаленам Linux сэрверы.

Заданне 1

  • Працаваць у тэчцы laba_3

Заданне 2

  • Быць гатовым прадэманстраваць каманды па запыту выкладчыка.

Літаратура

  1. Уильям Шоттс, "Командная строка Linux", 2017, с.70.
  2. Каманда grep https://www.computerhope.com/unix/ugrep.htm
  3. Каманда wc https://www.computerhope.com/unix/uwc.htm