Лучшие практики для работы с командной строкой

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

1К открытий3К показов
Лучшие практики для работы с командной строкой

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

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

Настройка рабочего окружения

Самые популярные командные оболочки — Bash, Zsh и Fish.

Bash

На новых серверах с Unix-подобной системой установлен ненастроенный Bash: файлы и папки отображаются без цветовой схемы, командная строка не выводит текущее местонахождение в системе. Добавить эти функции можно в конфигурационном файле .bashrc.

Кроме цветовых схем и отображения директорий, в .bashrc можно создавать алиасы — псевдонимы, заменяющие вызовы громоздких команд простыми переменными.

Например:

			# Поиск всех файлов больше 500MB в текущей директории и поддиректориях
alias findlarge='find . -type f -size +500M -exec ls -lh {} \;'

# Вместо длинной команды find . -type f -size +500M -exec ls -lh {} \;
findlarge
		

Написанные для Bash скрипты будут работать практически везде. В отличие от оболочек вроде Zsh и Fish, Bash не требует сложной настройки — его функционала достаточно для большинства задач системного администрирования.

Zsh

Устанавливается из репозитория дистрибутива:

			$ sudo apt install zsh
		

Zsh не отличается особой функциональностью по умолчанию, однако есть скрипт Oh My Zsh, расширяющий возможности командной оболочки. Это набор конфигурационных файлов и плагинов, созданных сообществом. Такие же готовые настройки есть для Bash и Fish.

Oh My Zsh добавляет новые функции:

  • подсветку файлов и папок; 
  • отображение времени команд; 
  • автодополнение команд, исходя из истории ввода;
  • отображение подсказок и др.

По аналогии с Bash, командную оболочку Zsh можно вручную настраивать в конфигурационном файле .zshrc.

Fish

Устанавливается из репозитория дистрибутива:

			$ sudo apt install fish
		

После установки Fish выведет ссылку на localhost, которая отправит на страницу настройки командной оболочки.

Лучшие практики для работы с командной строкой 1
С помощью панели конфигурации можно выбирать цветовую схему, вводить новые функции, добавлять локальные переменные, просматривать историю команд и др.

Сравнение Zsh, Fish и Bash

  1. Если начать вводить команду ls -a, то Bash при нажатии «Tab» ничего не сделает. Zsh и Fish на то же действие ответят интерактивной подсказкой: выведут все флаги для команды с кратким описанием и возможностью применения ключа.
  2. Zsh и Fish отличаются улучшенной навигацией по директориям. При вводе директории в Bash отображается лишь перечень возможных вариантов перемещения. Аналогичная команда в Zsh и Fish вызывает интерактивный список, в котором сразу можно выбрать директорию для перехода.
  3. Если ввести неправильную команду, Bash и Zsh выдадут ошибку только после попытки выполнения. Оболочка Fish предупредит о некорректном вводе до выполнения, окрасив строку в красный цвет.
  4. В Fish для математических вычислений есть команда math. В дефолтном Bash или Zsh те же операции выполнять сложнее.
  5. Fish поддерживает vim. Можно набрать команду и переключиться в визуальный режим. При этом в командной оболочке работает навигация из vim, сочетания клавиш для удаления, копирования и вставки строк. 
  6. Синтаксис Fish и Bash отличается. Поэтому Fish обычно используют для интерактивной работы (из-за удобного автодополнения, подсветки синтаксиса и т. д.), но пишут скрипты на Bash для лучшей совместимости.
Несмотря на преимущества Fish, стоит учитывать, что она сложнее в настройке, особенно когда ресурсы сервера ограничены. Можно настроить Bash аналогично Fish, но это займет немало времени.

Эффективная навигация по файловой системе

Для перемещения по файловой системе в Bash есть 4 основные команды: pwd, cd, ls, find.

Текущая директория

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

С помощью флагов можно получить путь логический (-L, по умолчанию) или реальный (-P):

			# Создание структуры с символическими ссылками
mkdir -p /tmp/real/path
ln -s /tmp/real/path /tmp/virtual/path

# Проверка реального расположения
cd /tmp/virtual/path
pwd -L    # Покажет виртуальный путь
pwd -P    # Покажет реальный путь без символических ссылок
		

В большинстве случаев достаточно pwd без опций.

Быстрое перемещение между директориями

cd — команда для перемещения в системе:

			cd Pictures      # перейти в папку Pictures
cd ..             # вернуться на уровень выше
cd -             # вернуться в предыдущую папку
		

Из любого места можно быстро вернуться в домашний каталог /home/пользователь/ или сразу перейти в подкаталог (например, /home/пользователь/Documents):

			cd                     # без параметров
cd ~/Documents         # тильда заменяет /home/пользователь/
cd $HOME/Documents   # $HOME заменяет /home/пользователь/
		

Bash поддерживает функцию автодополнения: можно написать первые буквы из названия папки и автоматически дописать путь нажатием «Tab».

Если папок с одинаковым началом несколько, нужно дважды нажать «Tab» — командная строка выведет все варианты написания. Bash будет ожидать, что пользователь продолжит ввод, пока не останется один возможный вариант.

			$ cd D
Desktop/ Documents/ Downloads/

# Bash вывел все возможные варианты каталогов, начинающихся на D
# Чтобы уточнить, какой именно каталог нужен, добавляем следующую букву:

$ cd De
# Автоматически дополняется до:
$ cd Desktop/
		

Автодополнение в командной строке Bash адаптируется под контекст команды. Например, для cd дополняются названия каталогов, для cat — названия файлов, для ssh — имена хостов, а для chown — имена пользователей.

Просмотр содержимого директорий

ls — команда для просмотра списка файлов и каталогов. Без параметров она показывает файлы и папки в текущей директории:

			ls              # список файлов в текущей директории
ls /etc         # содержимое папки etc
		

У команды ls множество опций. Основные из них:

			ls -la          # подробный список всех файлов, включая скрытые
ls -lh          # размеры в KB, MB, GB вместо байтов
ls -lt          # сортировка по времени изменения
ls -lS          # сортировка по размеру
		

Поиск файлов

Find находит файлы по критериям: названию, дате изменения, размеру и др.

Команда состоит из трех частей:

			find каталог критерий действие
		
			# Поиск по имени
find /home -name "filename.txt"    # Учитывает регистр
find /home -iname "filename.txt"   # Игнорирует регистр

# Поиск по типу файла
find /home -type d    # Поиск директорий
find /home -type f    # Поиск файлов

# Поиск по размеру
find /home -size +1G    # Файлы больше 1 ГБ
find /home -size -1M    # Файлы меньше 1 МБ
		

Find поддерживает опции -delete, -ls и др. С помощью -exec можно выполнять преобразования самописными функциями. Полный разбор возможностей Find — тема для отдельной статьи.

Работа с историями команд в Bash

С нуля вводить предыдущую команду, чтобы изменить один флаг, — непродуктивно. Командная строка Bash запоминает историю ввода. Листать команды можно стрелками вверх и вниз, и посмотреть все предыдущие команды одним списком:

			history
		

Рекомендуется установить следующие параметры хранения последних команд в ~/.bashrc:

			HISTSIZE=5000        # Количество команд в памяти
HISTFILESIZE=10000   # Количество команд в файле истории
		

По умолчанию каждая сессия Bash перезаписывает историю. Если вводить команды в два терминала, а потом закрыть их, то сохранятся только команды из последнего закрытого терминала — это неудобно.

Чтобы такого не происходило, нужно добавлять команды в конец файла истории. Для этого в ~/.bashrc нужно добавить следующее:

			shopt -s histappend
		

Стандартное использование клавиш-стрелок для навигации по истории команд не всегда доступно. В таких случаях можно использовать альтернативные сочетания:

  • Ctrl + p — переход к предыдущей команде;
  • Ctrl + n — переход к следующей команде;
  • Alt + < — переход к первой команде в истории;
  • Alt + > — переход к последней команде в истории.

Чтобы не листать все предыдущие команды, можно ввести только ее фрагмент и выполнить поиск по совпадениям сочетанием Ctrl+R.

Управление процессами и ресурсами

Умение отслеживать запущенные процессы и при необходимости завершать зависшие программы помогает поддерживать стабильность системы. Для этого можно использовать один из трех инструментов: top, htop или ps.

top — как диспетчер задач в Windows. После ввода команды в терминале отображается список всех запущенных процессов и обновляется в реальном времени.

Лучшие практики для работы с командной строкой 2
Вывод команды top

htop — более удобная версия top. Инструмент показывает ту же информацию, но в цвете, с возможностью прокрутки, с поддержкой мыши и графиками загрузки процессора.

htop нет в дефолтном Bash. Установка выполняется командой:

			sudo apt install htop
		

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

Фоновые процессы

Иногда нужно запустить программу в фоне или перевести ее туда. Сделать это можно, добавив символ «&» в конец командной строки.

Для перевода работающей программы в фон нужно нажать Ctrl+Z, чтобы приостановить. Затем необходимо ввести bg для запуска процесса в фоновом режиме и fg, чтобы вернуть из фона.

Список всех фоновых задач можно увидеть, если ввести команду jobs.

Если программа зависла или ее нужно остановить, поможет команда kill. Для завершения необходимо знать PID процесса (отображается в таблице top, htop и ps):

			kill PIDkill -9 PID # если программа зависла
		

Работа с текстовыми данными

Рассмотрим основные инструменты и приемы для работы с текстовыми данными в командной строке.

Базовые команды для работы с текстом: cat, grep, awk, sed

cat

Команда cat используется для просмотра содержимого файлов и объединения.

Просмотр содержимого:

			cat file.txt
		

Объединение нескольких файлов:

			cat file1.txt file2.txt > combined.txt
		

grep

Команда grep ищет текст по шаблону:

Найти строки «error» в файле:

			grep "error" log.txt
		

Показать номера строк с совпадениями:

			grep -n "pattern" file.txt
		

awk

Команда awk запускает инструмент для обработки текста по столбцам:

Вывод первого столбца из файла:

			awk '{print $1}' file.txt
		

Сумма чисел в первом столбце:

			awk '{sum += $1} END {print sum}' numbers.txt
		

sed

Команда sed используется для замены текста:

Замена первого вхождения «old» на «new»:

			sed 's/old/new/' file.txt
		

Удаление пустых строк:

			sed '/^$/d' file.txt
		

Конвейеры

Передавать вывод одной команды на вход другой можно при помощи конвейеров.

Поиск строк с «error» и подсчет их количества:

			grep "error" log.txt | wc -l
		

Вывод первых 15 строк с «error»:

			grep "error" log.txt | head -n 15
		

Когда данные передаются через конвейер, они обрабатываются последовательно. Система не ждет завершения работы первой команды, чтобы начать выполнение второй.

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

В Bash можно изменять стандартные потоки команд, направляя их в файлы или от файлов, а также связывая между собой.

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

«>» — перенаправляет стандартный вывод команды в файл, создавая его, если он не существует, или перезаписывая, если файл уже существует.

			ls > files.txt
		

«>>» — перенаправляет стандартный вывод команды в конец файла, не перезаписывая его.

			ls >> files.txt
		

«<» — перенаправляет содержимое файла на стандартный ввод команды.

			grep "error" < input.txt
		

«2>» — перенаправляет стандартный поток ошибок в файл.

			grep "pattern" file.txt 2> errors.log
		

«&>» — перенаправляет стандартный вывод и стандартный поток ошибок в один файл.

			ls &> output.log
		

Перенаправление в командной строке используется вместе с конвейерами для более гибкой обработки данных.

Автоматизация и скрипты

В командной строке можно написать скрипт для автоматизации рутинных задач.

Bash-скрипты — файлы с последовательностью команд, которые выполняются одна за другой. Они имеют расширение .sh и начинаются с #!/bin/bash.

Пример простого bash-скрипта для резервного копирования:

			#!/bin/bash

# Откуда скопировать
source_dir="/home/user/important_data"

# Куда сохранить
backup_dir="/mnt/backup"

# Создать имя архива с текущей датой
backup_date=$(date +%Y-%m-%d)
archive_name="backup-$backup_date.tar.gz"

# Создать архив и сохранить его в директорию для резервных копий
tar -czf "$backup_dir/$archive_name" "$source_dir"

echo "Резервная копия создана: $backup_dir/$archive_name"
		

В Bash-скриптах также применимы циклы (for, while) и условия (if, case) для управления потоком выполнения.

Например, можно написать скрипт, который проверяет наличие файла и выполняет определенные действия, если файл существует или не существует.

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

Планировщики задач

Планировщик Cron откладывает автоматический запуск скрипта с заданным интервалом. У каждого пользователя есть свой файл crontab, в котором можно указать команды и время их выполнения. Формат записи в crontab: минуты, часы, день месяца, месяц, день недели, команда.

Например, «0 1 * * * backup.sh» будет запускать скрипт backup.sh каждый день в 1:00.

At — упрощенный аналог Cron. Утилита используется для однократного выполнения задач в указанное время.

Безопасность в командной строке

При работе в командной строке важно следить за правами доступа к файлам и директориям. Две ключевые команды для этого — chmod и chown.

chmod изменяет права доступа к файлам и папкам. С ее помощью можно указать, кто может читать, записывать и выполнять файл или директорию. Например:

			chmod 644 file.txt
		

Команда дает владельцу файла права на чтение и запись (6), а остальным пользователям — только на чтение (4).

chown используется для смены владельца файла или директории. Например:

			chown vadim:admin document.txt
		

Команда назначает пользователя «vadim» владельцем файла «document.txt», а группу «admin» — группой-владельцем.

Еще один аспект безопасности в командной строке — использование sudo. Команда дает временные права суперпользователя (root) и разрешает программе вносить изменения в систему. Следует использовать sudo с осторожностью:

  • проверять команды перед выполнением с sudo;
  • использовать sudo только когда это действительно необходимо.
Работая в командной строке, рекомендуется придерживаться принципа минимальных привилегий — давать пользователям и процессам только те права, которые им необходимы для работы.

Инструменты для повышения продуктивности

Напоследок перечислим лучшие инструменты, которые упрощают работу с командной строкой.

Менеджеры пакетов

Упрощают установку, обновление и удаление программ в Linux.

Три популярных менеджера пакетов:

  • apt — используется в Debian, Ubuntu и других дистрибутивах на базе Debian;
  • yum — используется в Red Hat, CentOS и Fedora;
  • brew — популярный менеджер пакетов для macOS.

Многооконные менеджеры

Делят терминал на несколько панелей, чтобы работать с ними одновременно.

Два популярных инструмента: tmux и screen.

Лучшие практики для работы с командной строкой 3
Два отдельных терминала в одном окне tmux

С их помощью можно открывать терминальные сессии (для разных проектов) и переключаться между ними. Еще интереснее то, что с помощью плагина tmux-tpm менеджер сохранит эти сессии при перезагрузке компьютера.

Расширенные текстовые редакторы

Текстовые редакторы упрощают работу с кодом:

  • vim — популярный редактор с режимами вставки и команд. В одном режиме можно вводить текст, в другом — выполнять команды для редактирования. Еще vim поддерживает горячие клавиши и команды.
  • nano — простой редактор. Он подходит для быстрого редактирования файлов без необходимости изучать множество команд, как в vim.

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

Используйте эту статью как чек-лист для оценки эффективности вашей работы в терминале. Посмотрите, какие из инструментов могли бы упростить повседневные задачи:

  • возможно, вам стоит попробовать новую командную оболочку: Fish или Zsh;
  • или освоить продвинутую навигацию по файловой системе;
  • или начать использовать многооконные менеджеры;
  • или автоматизировать рутинные операции с помощью скриптов.

Начните с небольших улучшений рабочего процесса, они повысят ваши навыки работы с командной строкой и продуктивность в долгосрочной перспективе.

А если хотите овладеть командной строкой как настоящий профи — Собрали полезные инструменты и команды тут

Следите за новыми постами
Следите за новыми постами по любимым темам
1К открытий3К показов