На главную

DevOps и серверы

Разбор shell-команды

Разбирает длинную команду на части и объясняет по-русски каждый флаг, перенаправление и оператор. Полезно, когда команду скопировали из статьи и хочется понять, что она сделает, до того как нажать Enter.

grep -rn --include=*.js TODO src/

  • grep

    командаИщет строки по образцу.

  • -rn

    флаг-r — рекурсивно по каталогу; -n — печатать номер строки

  • --include=*.js

    флагискать только в файлах по маске → «*.js»

  • TODO

    аргументобразец, затем файлы (в кавычках — оболочка не разбивает по пробелам и не раскрывает маски)

  • src/

    аргументобразец, затем файлы

|

Конвейер: то, что первая команда вывела в stdout, приходит второй на stdin.

head -20

  • head

    командаПечатает начало файла.

  • -20

    флагсокращённая запись количества: то же, что -n 20

Операторы и перенаправления

Между командами

|Конвейер: то, что первая команда вывела в stdout, приходит второй на stdin.
|&Конвейер вместе с ошибками: stdout и stderr уходят следующей команде (bash).
&&Следующая команда выполнится, только если предыдущая завершилась успешно (код 0).
||Следующая команда выполнится, только если предыдущая завершилась с ошибкой.
;Просто разделитель: следующая команда выполнится в любом случае.
&Запуск в фоне: оболочка не ждёт завершения и сразу возвращает приглашение.

Потоки

>Перезаписывает файл выводом команды (stdout). Прежнее содержимое теряется.
>>Дописывает вывод (stdout) в конец файла.
<Берёт содержимое файла на вход команде (stdin).
<<Heredoc: на вход идёт текст до строки-ограничителя.
<<<Here-string: на вход идёт одна строка.
2>Перенаправляет поток ошибок (stderr) в файл.
2>>Дописывает поток ошибок (stderr) в конец файла.
&>Перенаправляет и вывод, и ошибки в один файл.
&>>Дописывает вывод и ошибки в конец файла.
2>&1Поток ошибок направляется туда же, куда уже направлен stdout. Порядок важен: после «> файл», а не до.
1>&2Обычный вывод направляется в поток ошибок.
>&2Обычный вывод направляется в поток ошибок.