В данном руководстве в качестве основного интерпретатора командной строки Linux описывается модернизированная вариация командной оболочки Bourne shell – Bourne again shell или просто bash.
Командная оболочка Unix – командный интерпретатор, используемый в операционных системах семейства UNIX, в котором пользователь может либо давать команды операционной системе по отдельности, либо запускать скрипты, состоящие из списка команд. В первую очередь, под shell понимаются POSIX-совместимые оболочки, восходящие к Bourne shell (шелл Борна), появившемуся в Unix Version 7. Кроме bash, существуют другие разновидности оболочек, в той или иной мере совместимые между собой и со стандартом POSIX Shell:
· sh — оригинальный шелл Борна; dash, bash, zsh — другие современные клоны Bourne shell (расположены по функциональности).
o ksh (KornShell) — клон шелла Борна, разработанный Дэвидом Корном из AT&T Labs. Синтаксис совместим, функциональность интерактивности увеличена.
o pdksh (public domain ksh) — открытая (почти целиком является общественным достоянием[2]) реализация ksh.
o bash (bourne again shell) (эмуляция совместимости POSIX) расширенная Борном свободная (разработанная в рамках проекта GNU) оболочка ash, сходная с pdksh. Стандартная оболочка в Linux.
· C shell — (несовместима с POSIX shell) оболочка, с синтаксисом на основе Си, созданная Университетом Беркли в рамках проекта по реализации BSD Unix.
o csh (C-Shell)— проприетарная оболочка из состава дистрибутива BSD, имеет Си-образный синтаксис и не является POSIX-совместимой. Впервые введены возможности управления заданиями и произведены другие улучшения.
o tcsh ( csh)— свободная реализация csh с интерактивными возможностями, не уступающими bash. Удобна для интерактивной работы. Совместима с csh.
· ash (Almquist shell, оболочка Альмквиста), busybox — современные микро-версии, предназначенные для встраиваемых систем, а также используемые в мини-дистрибутивах.
sh является удобным и часто используемым интерпретируемым языком программирования. Он содержит стандартные конструкции для циклов, ветвления, объявления функций и т. п. Данный язык часто используется в UNIX-подобных системах при создании различных сценариев (скриптов) работы, в частности, сценариев автоматического конфигурирования исходных кодов программ перед их компиляцией.
Рассмотрим ряд основных команд, которые необходимы для конфигурирования сервера и установки ПО.
Справка man
man – основная команда для начинающего пользователя Linux. Она выводит справку (manual) по указанной команде, ее синтаксис, примеры и ссылки на другие раздели документации и команды.
Использование: man <команда>, например:
user@debian:~$ man ls
LS(1) User Commands
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
Перемещение по многостраничному выводу – стрелки и клавиши PgUp/PgDown, выход – клавиша q.
Полный вариант справки по использовани справки:
user@debian:~$ man man
Потоки ввода-вывода и конвейеры
Потоки ввода-вывода
Стандартные потоки ввода и вывода в UNIX/Linux наряду с файлами являются одним из наиболее распространённых средств для обмена информацией процессов с внешним миром, а перенаправления >, >> и |, одной из самых популярных конструкций командного интерпретатора.
Процесс взаимодействия с пользователем выполняется в терминах записи и чтения в файл. То есть вывод на экран представляется как запись в файл, а ввод — как чтение файла. Файл, из которого осуществляется чтение, называется стандартным потоком ввода, а в который осуществляется запись — стандартным потоком вывода.
Стандартные потоки — воображаемые файлы, позволяющие осуществлять взаимодействие с пользователем как чтение и запись в файл. Кроме потоков ввода и вывода, существует еще и стандартный поток ошибок, на который выводятся все сообщения об ошибках и те информативные сообщения о ходе работы программы, которые не могут быть выведены в стандартный поток вывода.
Стандартные потоки привязаны к файловым дескрипторам с номерами 0, 1 и 2.
· Стандартный поток ввода (stdin) — 0;
· Стандартный поток вывода (stdout) — 1;
· Стандартный поток ошибок (stderr) — 2.
Вывод данных на экран и чтение их с клавиатуры происходит потому, что по-умолчанию стандартные потоки ассоциированы с терминалом пользователя. Это не является обязательным — потоки можно подключать к чему угодно — к файлам, программам и даже устройствам. В командном интерпретаторе bash такая операция называется перенаправлением потоков:
< файл
Использовать файл как источник данных для стандартного потока ввода.
> файл
Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху.
2> файл
Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху.
>>файл
Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец.
2>>файл
Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец.
&>файл или >&файл
Направить стандартный поток вывода и стандартный поток ошибок в файл. Другая форма записи: >файл 2>&1.
Рассмотрим простой пример – ранее мы выводили список процессов на экран. Перенаправим вывод данных от команды ps из стандартного поток вывода (экран) в файл.
Исходная команда:
debian:/home/user# ps
PID TTY TIME CMD
2542 pts/0 00:00:00 su
2543 pts/0 00:00:00 bash
2563 pts/0 00:00:00 ps
Направим вывод вместо экрана – в файл ps.txt в домашней папке пользователя.
user@debian:~$ ps > ~/ps.txt
Как видно, вывод программы ушел в файл, а на экран ничего не вывелось. Так как файла не существовало – он был создан. Проверим, так ли это и содержит ли он вывод ps:
user@debian:~$ cat ~/ps.txt
PID TTY TIME CMD
2523 pts/0 00:00:00 bash
2575 pts/0 00:00:00 ps
Команда cat выводит содержимое файла на экран, как видим – файл содержит вывод ps. Иная форма записи: ps 1> ~/ps.txt, где 1 – номер потока (стандартный вывод).
Теперь попробуем вывести в файл поток ошибок, для этого сознательно выполним две команды: ps с неправильным аргументом и с правильным:
user@debian:~$ ps 2>~/ps_error.txt
PID TTY TIME CMD
2523 pts/0 00:00:00 bash
2676 pts/0 00:00:00 ps
user@debian:~$ ps * 2>~/ps_error.txt
user@debian:~$ cat ~/ps_error.txt
ERROR: Unsupported option (BSD syntax)
Первая команда выполнилась без ошибки и мы получили ее вывод на экран. Вторая команда содержала ошибку в аргументе и ее вывод потока ошибок был направлен в файл ps_error.txt, содержимое которого мы вывели на экран.
Рассмотрим использование стандартного потока ввода на примере команды sort (сортировка) из файла. Создадим файл, в котором содержатся данные для сортировки (например, числа от 0 до 9 в случайном порядке):
user@debian:~$ echo '9' >> unsort.txt
user@debian:~$ echo '7' >> unsort.txt
user@debian:~$ echo '5' >> unsort.txt
user@debian:~$ echo '3' >> unsort.txt
user@debian:~$ echo '1' >> unsort.txt
user@debian:~$ echo '8' >> unsort.txt
user@debian:~$ echo '2' >> unsort.txt
Нетрудно догадаться, что команда echo выводит указанный текст на экран, но в данном случае мы направили ее вывод в файл unsort.txt. Кавычки в данном случае нужны, так как в тексте есть пробелы и спецсимволы. Проверим, записалась ли строка в файл:
user@debian:~$ cat unsort.txt
9
7
5
3
1
8
2
Записалась. Теперь выполним следующую конструкцию:
user@debian:~$ sort < unsort.txt > sort.txt
user@debian:~$ cat sort.txt
1
2
3
5
7
8
9
Программа sort сортирует данные, поступившие в стандартный поток ввода, и выводит их на стандартный поток вывода. Стандартный поток ввода подключен к файлу unsort.txt, а выход записывается в sort. txt. Описанная структура может быть в разы более сложной и включать десятки команд.
Конвейеры
Стандартные потоки можно перенаправлять не только в файлы, но и на вход других программ. Если поток вывода одной программы соединить с потоком ввода другой программы, получится конструкция, называемая каналом, конвейером или пайпом (от англ. pipe, труба).
В bash канал выглядит как последовательность команд, отделенных друг от друга символом |:
команда1 | команда2 | команда3 | . . . | командаN
Стандартный поток вывода команды1 подключается к стандартному потоку ввода команды2, стандартный поток вывода команды2 в свою очередь подключается к потоку ввода команды3 и т.д.
В UNIX/Linux существует целый класс команд, предназначенных для преобразования потоков данных в каналах. Такие программы известны как фильтры. Программа-фильтр читает данные, поступающие со стандартного потока ввода (на вход), преобразовывает их требуемым образом и выводит на стандартный поток вывода (на выход).
Мы уже рассматривали пример использования конвейра:
debian:~# ps ax | grep ssh | grep usr | grep sbin
2758 ? Ss 0:00 /usr/sbin/sshd
2862 ttyl S+ 0:00 grep ssh
Рассмотрим пример использования конвейра еще раз на примере сортировки данных:
user@debian:~$ cat unsort.txt | sort > sort.txt
user@debian:~$ cat sort.txt
1
2
3
5
7
8
9
Сначала выполняется команда cat, которая выводит на экран содержимое файла unsort.txt, но ее поток вывода перенаправляется на поток ввода команды sort, которая выполняет сортировку и ее вывод записывается в файл sort.txt. Выводит сортированный файл на экран и убеждаемся, что числа отсортированы по возрастанию.
Немного усложенный пример:
user@debian:~$ cat unsort.txt | sort | sort -r > sort_r.txt
user@debian:~$ cat sort_r.txt
9
8
7
5
3
2
1
Та же процедура, но команда sort передает свой вывод команде sort с аргументом –r, который заставляет ее выполнить сортировку в обратном порядке (по убыванию). Выводим файл на экран и убеждаемся, что он отсортирован.
Дата: 2019-12-10, просмотров: 266.