В этом параграфе мы научимся разбирать команды в терминале: из каких частей они состоят и как правильно читать их синтаксис.
Мы посмотрим, где искать сами команды, познакомимся с переменными окружения и разберёмся, как пользоваться встроенной справкой — от коротких подсказок до подробных руководств.
Ключевые вопросы параграфа
- Как выглядит общий формат команды в терминале?
- Где система ищет команды и как это связано с переменными окружения?
- Как создать переменную окружения и зачем?
- Где взять помощь по работе с командой?
Общий формат команды
В предыдущем параграфе мы познакомились с несколькими командами и даже запустили их в терминале. Давайте посмотрим, из чего они состоят.
Каждая команда в терминале описывается по одному и тому же принципу:

- Команда — это имя программы или скрипта, которые вы запускаете.
- Опции (или
флаги) добавляются к команде и меняют её поведение. - Аргументы — это данные, с которыми команда должна работать: путь к файлу, имя каталога, текст для поиска и так далее.
Например, когда в предыдущем параграфе мы использовали команду echo:
1alice@ubuntu:~$ echo "Hello, world!"
echo— это команда, которую мы запускаем."Hello, world!"— это аргумент, с которым запустилась команда.- Мы не использовали никаких опций, хотя они доступны для команды
echo.
Давайте посмотрим на другую полезную команду, которая называется ls. Она позволяет вывести список всех файлов по указанному нами пути.
Что такое путь, мы узнаем в одном из следующих параграфов. Пока просто запомните, что путь — это адрес к файлу или к папке в файловой системе.
- Если путь не указан,
lsпокажет содержимое текущей папки. - Если мы укажем путь явно, то команда отобразит содержимое указанного каталога.
1alice@ubuntu:~$ ls -l /etc
ls— это команда для вывода списка файлов и каталогов;-l— одна из опций, меняющих поведение, здесь она позволяет получить список файлов в расширенном виде;/etc— аргумент, где именно мы хотим посмотреть список файлов, в данном случае — в каталоге/etc.
Вывод этой команды будет длинным, вы заметите большое количество файлов примерно следующего вида:
1...
2-rw-r--r-- 1 root root 191 Mar 31 20:24 libaudit.conf
3drwxr-xr-x 3 root root 4096 Jun 5 12:54 libblockdev
4drwxr-xr-x 2 root root 4096 Jun 5 12:55 libibverbs.d
5drwxr-xr-x 2 root root 4096 Jun 5 12:55 libnl-3
6-rw-r--r-- 1 root root 13 Jun 5 12:55 locale.conf
7-rw-r--r-- 1 root root 9563 Sep 5 04:08 locale.gen
8...
Не стоит пугаться — давайте разберём, что именно мы получили.
Этот вывод состоит из нескольких частей:
-rw-r--r--— права доступа к файлу;1— количество ссылок на файл;root— владелец файла и группа, которой принадлежит файл;191— размер файла в байтах;Mar 31 20:24— дата и время последнего изменения;libaudit.conf— имя файла.
Подробнее о том, что означают права доступа и владельцы для файла, мы расскажем в главе 4.
Ещё один пример — с командой mkdir, которая позволяет создавать новые пустые каталоги:
1alice@ubuntu:~$ mkdir -p a/b/c
mkdir— команда для создания каталогов;-p— опция, которая позволяет создавать вложенные каталоги;a/b/c— аргумент (путь из нескольких вложенных каталогов, который мы хотим создать).
Такой формат — команда [опции] [аргументы] — универсален: почти все команды в Linux следуют этой структуре.
Чем различаются опции и аргументы
При разборе команды важно понимать разницу между опциями и аргументами.
Опции (или флаги) управляют тем, как команда выполняет действие.
Обычно они начинаются с одного (-l) или двух (--help) дефисов.
Примеры:
ls -a— показать скрытые файлы;grep --ignore-case— искать без учёта регистра.
Аргументы указывают, с чем команда должна работать.
Это может быть имя файла, путь к каталогу, строка для поиска.
Примеры:
ls /etc— вывести содержимое каталога/etc;grep "main" file.c— искать словоmainв файлеfile.c.
Обычно опции можно комбинировать, а аргументы перечислять по несколько подряд через пробел. Например:
1alice@ubuntu:~$ ls -lh /var/log /etc
-lhравносильно-l -h— опции (мы хотим получить подробный список и в удобном формате);/var/logи/etc— два аргумента (каталоги, содержимое которых нужно показать).
Запомните: сначала идут опции, а затем аргументы. Опции меняют поведение команды, аргументы задают объекты для работы.
Давайте попробуем составить команду для копирования всех файлов из каталога ~/Documents/reports в /tmp/backup:
Расположение команд
Чтобы понять, как оболочка ищет и запускает команды, нужно разобраться, где они хранятся и какие параметры управляют их поиском. Эти параметры как раз задаются переменными окружения.
Переменные окружения
Переменные окружения — это значения, которые оболочка и программы используют для своей работы. Они хранят сведения о вашем пользователе, системе или полезных настройках.
Прочитать значение переменной окружения можно, добавив знак $ в начало имени переменной.
Примеры часто используемых переменных:
$HOME— путь к домашнему каталогу текущего пользователя;$USER— имя текущего пользователя;$SHELL— оболочка, которая используется по умолчанию;$PATH— список каталогов, где система ищет команды.
Давайте посмотрим значение переменной окружения $HOME. Воспользуемся для этого командой echo:
1alice@ubuntu:~$ echo $HOME
Результат:
1/home/alice
/home/alice — это полный путь домашнего каталога нашего текущего пользователя, и он хранится в переменной для быстрого доступа — например, в программах и скриптах.
Обратите внимание: команда echo может выводить не только текст, который ей передадут в качестве аргумента, но и значения переменных.
Попробуем прочитать значения других переменных.
1echo $USER
2alice
Переменная окружения $USER хранит имя текущего пользователя, под которым вы вошли в систему. Прочитать переменную $USER — это быстрый способ узнать своё имя в системе и использовать его в скриптах и программах.
Например, мы можем создать файл с именем текущего пользователя, не зная его:
1alice@ubuntu:~$ touch $USER.txt
2alice@ubuntu:~$ ls
3alice.txt
Что за команда touch?
Она позволяет создать пустой файл либо обновить дату изменения файла, если указанный в аргументе файл уже существует.
Команда очень полезна, если нужно быстро создать один файл (или несколько), предсоздать пустой файл в конкретном каталоге, проверить саму возможность создания файлов в каталоге (достаточно ли у нас прав для этого).
Подробнее о файлах и командах для работы с ними мы ещё поговорим в одном из параграфов дальше.
Переменная $SHELL указывает путь к программе-оболочке, которая используется по умолчанию для вашего пользователя. /bin/bash говорит о том, что мы используем именно оболочку Bash.
1alice@ubuntu:~$ echo $SHELL
2/bin/bash
Используется эта переменная также в скриптах и программах: например, мы можем не знать, какую именно оболочку использует пользователь, но можем прочитать переменную $SHELL и отталкиваться от этого.
Переменная окружения $PATH и расположение команд
Когда вы вводите команду в терминале, оболочка должна понять, какую программу запустить. Для этого она ищет исполняемые файлы в специальных каталогах, перечисленных в переменной окружения под названием $PATH.
Мы уже знакомы с другими переменными окружения, но давайте посмотрим значение переменной $PATH:
1alice@ubuntu:~$ echo $PATH
Результат будет выглядеть так:
1/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Здесь перечислены каталоги с программами, и разделены они двоеточиями (:).
В практическом смысле это означает, что, когда вы вводите, например, команду ls:
1alice@ubuntu:~$ ls
оболочка последовательно проверяет, есть ли программа ls в каталоге /usr/local/sbin, затем — в /usr/local/bin, затем — в /usr/sbin и так далее. Как только команда найдена — она будет запущена.

Чтобы узнать, где именно находится та или иная команда, можно использовать команду which:
1alice@ubuntu:~$ which ls
Ответ будет следующим:
1/usr/bin/ls
Попробуйте найти расположение уже известных вам команд при помощи which.
Команда which тоже существует и располагается в своём каталоге, что мы можем проверить — вы угадали — командой which:
1alice@ubuntu:~$ which which
2/usr/bin/which
Есть нюанс: утилита which показывает только первый найденный в $PATH файл, а их может быть и несколько!
Чтобы обнаружить все найденные совпадения в том порядке, в котором оболочка ищет их в $PATH, можно воспользоваться командой type -a <команда>.
Например:
1alice@ubuntu:~$ type -a date
2date is /usr/bin/date
3date is /bin/date
Таким образом, переменная $PATH определяет список каталогов, в которых система ищет исполняемые файлы. Если программа лежит вне этих каталогов, её нужно запускать по полному пути или добавить каталог, в котором находится программа, в переменную $PATH.
Полный путь — это адрес файла, начинающийся от корня файловой системы (/) и включающий все вложенные папки до самого файла.
Например:
1/bin/ls
2/usr/local/bin/python3
3/home/user/Documents/report.txt
Результат, который мы получаем, выполняя команду which, — это тоже пример полного пути.
Попробуйте запустить программу which по полному пути, который вы нашли ранее при помощи команды which:
1alice@ubuntu:~$ /usr/bin/which which
2/usr/bin/which
Система успешно выполняет программу по полному пути, так же как по её «короткому» имени.
А теперь попробуйте найти полный путь для команды date и так же запустите её по полному пути.
Создание переменных окружения
Вы можете создавать и менять переменные окружения. Например, следующая команда создаст новую переменную с именем MYVAR:
1alice@ubuntu:~$ MYVAR="Hello"
И теперь эту переменную можно прочитать при помощи echo:
1alice@ubuntu:~$ echo $MYVAR
2Hello
Вам может потребоваться создать собственную переменную для хранения часто используемых значений — например, чтобы не набирать длинный путь или команду каждый раз.
1alice@ubuntu:~$ MYVAR="/usr/bin/which which"
2alice@ubuntu:~$ $MYVAR
3/usr/bin/which
Мы сохранили команду с аргументом в переменную и затем обратились к ней при помощи $. В результате нам не нужно печатать команду с нуля — мы просто можем вызывать переменную!
Важно: переменные, которые мы создали таким образом, действуют только в текущей сессии. Если мы завершим терминальную сессию, а потом подключимся обратно — переменные окружения исчезнут. Но их можно сохранить при помощи файлов
.bashrcили.bash_profile, и об этом пойдёт речь в главе 4.
Попробуйте создать собственную переменную и вывести её значение через команду echo. А теперь попробуйте сохранить в переменную какую-нибудь полезную команду и вызовите её.
Давайте проверим знание переменных, с которыми мы встретились:
Помощь по работе с командой
В Linux у каждой команды есть встроенная справка. Это самый быстрый способ узнать, что команда делает, какие опции поддерживает и какие аргументы принимает.
Короткая справка: --help
Многие команды поддерживают опцию --help. Она выводит список поддерживаемых опций и примеры использования:
1alice@ubuntu:~$ ls --help
Возвращает:
1Usage: ls [OPTION]... [FILE]...
2List information about the FILEs (the current directory by default).
3Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
4
5Mandatory arguments to long options are mandatory for short options too.
6 -a, --all do not ignore entries starting with .
7 -A, --almost-all do not list implied . and ..
8 --author with -l, print the author of each file
9 -b, --escape print C-style escapes for nongraphic characters
10 --block-size=SIZE with -l, scale sizes by SIZE when printing them;
11 e.g., '--block-size=M'; see SIZE format below
Такой способ удобен, когда нужно быстро вспомнить флаг или понять базовый синтаксис команды.
Попробуйте получить справку для любой из команд, которую вы уже знаете. Посмотрите, какие опции можно использовать, и попробуйте их применить при вызове команды.
Например, команда ls обладает большим количеством возможных опций, которые влияют на формат отображения списка файлов, — вы уже знаете опции -l и -h, но есть и другие!
Важно: у команды может быть список и «коротких», и «длинных» форм опций. Иногда они могут совпадать и делать одно и то же, как, например, ls -a и ls --all, которые выводят все файлы и каталоги, включая скрытые.
Подробная справка: man
Для подробной информации можно использовать встроенные man-страницы (от англ. manual — руководство). Команда man появилась ещё в ОС Unix в 70-х и до сих пор остаётся важным источником справки:
1alice@ubuntu:~$ man ls
Как выглядит интерфейс man в терминале:

man содержит подробное описание команды, список всех опций и примеры. Чтобы работать со страницей man, используйте клавиши:
- стрелочки ↑ и ↓ — построчное пролистывание по странице;
/— поиск по тексту;n— переход к следующему совпадению;q— выход;Space— быстрое пролистывание вниз по странице.
Попробуйте открыть man для команды ls и найти слово reverse.
Если вы оказались в ситуации без доступа в интернет или просто хотите найти нужный флаг для вашей команды — --help и man позволят вам разобраться.
Практическая работа: команды, переменные и пути
Теперь, когда вы знаете, из каких частей состоит команда и где система ищет программы, попробуем всё это применить на практике.
Шаг 1. Проверим, кто мы и где находимся:
1echo $USER
2echo $HOME
3echo $SHELL
Шаг 2. Найдите, где находится команда echo:
1which echo
Шаг 3. Выполните команду echo по её полному пути:
1/usb/bin/echo "It Works!"
Шаг 4. Создайте собственную переменную, хранящую ваше имя:
1MYNAME="Ivan"
Шаг 5. Теперь выведите приветствие, используя переменную:
1echo "Hello, $MYNAME!"
Что дальше
В следующем параграфе вы узнаете:
- Как работает автозаполнение и чем оно помогает.
- Как просматривать и использовать историю команд.
- Полезные в работе комбинации клавиш.
- Что такое алиасы.
После этого вы сможете работать в терминале ещё быстрее и проще.
А пока закрепите материал на практике:
- Отметьте, что урок прочитан, при помощи кнопки ниже.
- Пройдите мини-квиз, чтобы проверить, насколько хорошо вы разобрались с командами и переменными окружения.
- Загляните в гайд по системе проверки, если вы здесь впервые.
Ключевые выводы по параграфу
- Каждая команда в терминале имеет общий формат:
имя команды → опции → аргументы. - Переменные окружения влияют на работу программ и оболочки; одна из важнейших —
$PATH— определяет, где система ищет исполняемые файлы. - Команды можно запускать как по короткому имени, так и по полным путям.
- Чтобы разобраться в незнакомой команде, используйте справку:
--help— для короткой подсказки,man— для получения подробного руководства.
