Грамотность командной строки

Грамотность командной строки

Оболочка и терминал

Понимание терминалов, оболочек, Bash, Zsh, приглашений, структуры команд, кавычек, каналов, перенаправления, переменных среды, PATH, псевдонимов и файлов запуска.

Аудитория
Любой, кто учит команды
Время чтения
21 мин

Терминал против оболочки

Терминал — это интерфейсное окно или устройство, отображающее текст и принимающее ввод с клавиатуры. Оболочка — это работающая внутри нее программа, которая интерпретирует команды. Bash и Zsh — оболочки; Терминал GNOME, Konsole, iTerm2 и консоль Linux являются интерфейсами терминала.

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

Баш и Зш

Bash — это традиционная оболочка по умолчанию во многих системах Linux и самая безопасная версия для сценариев. Zsh популярен для интерактивного использования благодаря своим функциям завершения и настройки.

Команда, работающая в Zsh в интерактивном режиме, может быть непереносима в сценарий Bash. Для изучения основ Linux Bash является общей базой.

Краткое анатомическое строение и командная структура

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

Большинство команд имеют форму: имя команды, параметры, аргументы и перенаправления. Опции изменяют поведение. Аргументы сообщают команде, что делать.

Анатомия команд
grep -n "error" /var/log/app.log > errors.txt
# grep = command, -n = option, pattern and file = arguments, > = redirection

Quoting

Заключение в кавычки управляет тем, как оболочка обрабатывает пробелы, переменные и специальные символы. Одинарные кавычки сохраняют текст почти буквально. Двойные кавычки позволяют расширять переменные, сохраняя при этом пробелы.

Многие ошибки новичков происходят из-за переменных без кавычек или путей с пробелами. В случае сомнений заключите переменные в кавычки как «$name».

Трубы и перенаправление

Канал отправляет выходные данные одной команды на вход другой. Перенаправление отправляет выходные данные в файлы или считывает входные данные из файлов. Эти идеи делают инструменты в стиле Unix компонуемыми.

Трубы и перенаправление диаграмма
journalctlпоток логов
grep errorфильтр
lessпросмотр
Пример конвейера
journalctl -u nginx --since today | grep -i error | less
Пример перенаправления
echo "hello" > message.txt
cat message.txt

Переменные среды и PATH

Переменные среды — это строки «ключ-значение», унаследованные дочерними процессами. PATH — это переменная среды, в которой перечислены каталоги, в которых оболочка ищет команды.

Если команда установлена, но не найдена, возможно, ее нет в PATH или ваша текущая оболочка не загрузила обновленную среду.

Проверить ПУТЬ
echo "$PATH"
which python3

Псевдонимы и поведение оболочки при запуске

Псевдонимы — это интерактивные ярлыки. Они удобны, но на них не следует полагаться в сценариях. Файлы запуска оболочки, такие как ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.zshrc и /etc/profile, загружаются в разных ситуациях.

Оболочки входа, интерактивные оболочки и неинтерактивные оболочки сценариев могут читать разные файлы. Если параметр отображается в одном терминале, но не отображается в другом, вероятной причиной является порядок файлов запуска.

Практические примеры

Создайте полезный псевдоним
alias ll='ls -lah'
Экспортировать редактор
export EDITOR=nano
Использовать историю команд
history 20