Насколько вероятно, что вы порекомендуете FirstVDS своим друзьям?
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
×
ВЫ ПОСТАВИЛИ НАМ 8 ИЗ 10
×

Структура команд

Главный способ работы в терминале — ввод текстовых команд. 

Команда может состоять из нескольких блоков:

mkdir

[ключевое слово]

-p

[набор параметров]

/usr/home/documents/work

[набор аргументов]

Блоки параметров (или, иначе, ключей) и аргументов могут включать в себя сразу несколько значений.

Скажем миру привет:

echo "Hello, World!"

Здесь echo — ключевое слово. "Hello, World!" — аргумент в виде строки, который передаётся команде. Ключи в примере не используются.

Чтобы запустить команду, после ввода нажмите клавишу Enter.

В терминале можно получить информацию практически о любой доступной в нём команде. Справка выводится с помощью команды:

man [ключевое слово]

Например, man echo вызовет справку по использованной выше команде echo. Она будет включать описание, список доступных ключей и тип принимаемых аргументов. Чтобы выйти из режима чтения справки, нажмите клавишу q.

Кроме man, многие команды поддерживают параметр --help. При запуске команды с ним в терминал будет выведена краткая сводка по её функциям.

А теперь перейдём к более специфическим возможностям.

Запуск нескольких команд за раз

Командная строка имеет несколько инструментов, которые позволяют запускать сразу несколько операций, управлять порядком их выполнения и выводом.

Например, если нам нужно выполнить несколько команд последовательно, не обязательно вводить каждую по отдельности. Можно перечислить их через точку с запятой:

echo -n "Hello, "; echo "World!"

Если нам нужно выполнить список зависимых друг от друга команд, для их разделения нужно использовать оператор &&. В таком случае следующая команда в списке будет выполнена только при условии успешного выполнения предыдущей.

echo -n "Hello, " && echo "World!"

Оператор || действует наоборот — запускает следующую операцию при условии, что первая не выполнилась или завершилась с ошибкой.

wrongCommand || echo "Что-то пошло не так!"

Также можно запускать команды параллельно. Для этого в конец команд добавляется символ &, каждая команда заключается в круглые скобки, которые между тем разделяются между собой точкой с запятой:

(echo "Кто сказал, что убить двух зайцев" &); (echo "одним махом нельзя?" &)

Перенаправление ввода/вывода

Вывод команды можно перенаправлять. Это бывает полезно, например, когда нам нужно сохранить результат выполненных действий в файл, или, наоборот, передать аргументы из файла в команду. Для этого используются три оператора: >, >> и <.

Пример записи вывода команды в файл: 

echo "Hello, World!" > hello.txt

Вместо вывода строки "Hello, World!" в терминал она будет записана в файл hello.txt. Если такого файла не существует, он будет автоматически создан, а если существует, то будет перезаписан (осторожно — всё старое содержимое безвозвратно удалится).

Если нам нужно записать результат выполнения в конец файла, а не перезаписывать его полностью, можно использовать второй оператор, >>:

echo "Hello, World!" >> hello.txt

А так можно передать в команду аргументы из файла:

tee hello2.txt < hello.txt

tee прочитает информацию из файла hello.txt, выведет его содержимое в терминал и одновременно сохранит его в новый файл hello2.txt

У потоков ввода/вывода есть своё специфическое обозначение. Это положительное целое число, определяющее источник ввода/вывода.

  • 0 — стандартный ввод (stdin)
  • 1 — стандартный вывод (stdout)
  • 2 — вывод ошибок (stderr)

Самый распространённый пример использования — перенаправление ошибок при выполнении команд, в т.ч. в bash-скриптах. В примере ниже ошибка о том, что команды не существует, будет направлена на устройство /dev/null. Оно автоматически обнуляет всю записываемую на него информацию:

wrongCommand 2>/dev/null

Если нам нужно записывать ошибки в лог-файл, всё так же просто:

wrongCommand 2>>error.log

В этом случае ошибка о том, что команды wrongCommand не существует, будет записана в файл error.log

Конвейер

Конвейер (pipe) — очень мощный инструмент, позволяющий передавать результаты работы одних команд в виде аргументов другим командам. Для этого используется оператор |

ls | grep "hello"

В примере мы выводим список содержимого текущей рабочей директории (ls) и передаём его команде grep. Она в свою очередь ищет в нём файлы, в имени которых содержится "hello", и выводит их список на экран.

Выполнение в фоновом режиме

Некоторые команды могут временно блокировать или усложнять работу в терминале. Например, когда запущенный процесс долго выполняется или выводит в консоль большие объёмы не особо полезного текста. Такие команды можно запускать в фоновом режиме. Тогда система будет выполнять их «на заднем плане», а вы продолжите работать и не будете ждать выполнения очередной операции.

Чтобы запустить команду в фоновом режиме, достаточно добавить в конце знак «&»:

sleep 3600 &

sleep — команда «И пусть весь мир подождёт». Включает паузу на заданный промежуток времени в секундах.

Если вам нужно переместить на задний план активный процесс, тогда нужно прервать процесс его выполнения сочетанием Ctrl + Z и ввести в консоли команду bg:

sleep 3600

[останавливаем процесс сочетанием Ctrl + Z]

bg

Вывести список команд, запущенных в фоновом режиме, можно с помощью команды 

jobs -l

Важно помнить, что фоновый режим привязан к сессии — при выходе из терминала все процессы, запущенные через него, будут прерваны. Этого можно избежать, выполнив нужную команду через nohup:

nohup sleep 3600 &

Либо, если процесс уже запущен, отвязать его от сессии можно командой disown с идентификатором ID нужной задачи. 

disown -h %ID

После выхода из терминала задание будет удалено из списка jobs, но продолжит выполняться на фоне. Проверить его выполнение можно, отобразив список всех запущенных процессов командой ps aux:

Команды, запущенные в фоновом режиме, при наличии ошибок будут отправлять их в терминал — что не всегда удобно. Можно перенаправить вывод ошибок. В следующем примере ошибки вместо вывода в терминал будут записаны в файл error.log:

sleep 3600 2>>error.log &

Вернуть процесс на передний план можно, введя команду fg. Если процессов несколько, потребуется указать идентификатор задачи ID. Его можно посмотреть в выводе команды jobs -l (число в квадратных скобках).

fg %ID

Отмена процесса, запущенного в фоновом режиме, выполняется с помощью следующей команды:

kill PID

Где PID — ID процесса, указанный в выводе jobs -l. Если процесс завис и не реагирует, можно использовать более грубый вариант:

kill -KILL PID

Теперь самое время познакомиться с базовым набором команд для работы в терминале.

Первые шаги в командной строке