Базовые команды терминала
Практическое знакомство с терминалом Linux: пути, файлы, каталоги, конвейеры, перенаправление вывода и редактирование через vi.
Содержание статьи
- С чего начинается работа в терминале
- Как перемещаться по каталогам
- `pwd`: текущий каталог
- `ls`: содержимое каталога
- `cd`: смена каталога
- Абсолютные и относительные пути
- Создание каталогов и файлов
- `mkdir`
- `touch`
- Просмотр содержимого файлов
- `cat`
- `less`
- `head` и `tail`
- Информация о файлах и дисках
- `file`
- `stat`
- `df`
- `du`
- Копирование, перемещение и удаление
- `cp`
- `mv`
- `rm`
- Имена файлов, пробелы и кавычки
- Маски файлов
- Перенаправление вывода
- `>` и `>>`
- Передача вывода через `|`
- Ошибки и `2>&1`
- Условное выполнение команд
- Редактирование конфигурации на сервере
- Практическое упражнение
- Что делать, если команда не найдена
- Минимальный набор, который стоит запомнить
- Итог
После знакомства с философией Unix/Linux и структурой файловой системы пора перейти к повседневной работе в терминале.
Терминал — это не отдельная операционная система и не «чёрное окно для специалистов». Это интерфейс, через который мы запускаем программы, перемещаемся по файловой системе, читаем конфигурацию и управляем сервисами.
В этой статье разберём основные команды, работу с путями, файлами и каталогами, простые конвейеры, перенаправление вывода и безопасное редактирование файлов через vi.
С чего начинается работа в терминале
После подключения к серверу вы видите приглашение shell. В нём могут отображаться имя пользователя, имя машины и текущий каталог.
Первое правило — не спешить выполнять команду, если вы не понимаете, где находитесь и от какого пользователя работаете.
whoami
pwd
whoami показывает текущего пользователя, а pwd — полный путь к текущему каталогу.
Перед потенциально опасной операцией полезно выполнить обе команды. Это особенно важно при работе с sudo, системными каталогами и командами удаления.
Как перемещаться по каталогам
pwd: текущий каталог
pwd
Пример результата:
/home/deploy
Это абсолютный путь. Он начинается с / и однозначно указывает расположение каталога.
ls: содержимое каталога
ls
Показать подробную информацию:
ls -l
Показать скрытые файлы:
ls -la
Удобный вариант с размерами:
ls -lah
Скрытые файлы в Linux начинаются с точки. Например, .env, .ssh и .git не отображаются обычной командой ls.
cd: смена каталога
cd /var/log
Перейти в домашний каталог текущего пользователя:
cd
или:
cd ~
Перейти на уровень выше:
cd ..
Вернуться в предыдущий каталог:
cd -
Текущий каталог обозначается как ., родительский — как ...
Абсолютные и относительные пути
Абсолютный путь начинается с /:
cd /var/log
Такая команда работает независимо от того, где вы находились до этого.
Относительный путь считается от текущего каталога:
cd project
cd ./project
Если вы находитесь в /home/deploy, оба варианта ведут в /home/deploy/project.
Путь к соседнему каталогу можно записать так:
cd ../backup
Перед выполнением команды полезно проверить путь:
pwd
ls -la ../backup
Создание каталогов и файлов
mkdir
Создать один каталог:
mkdir project
Создать вложенную структуру каталогов:
mkdir -p project/config project/data project/logs
Ключ -p создаёт отсутствующие родительские каталоги и не выдаёт ошибку, если каталог уже существует.
Проверить результат:
find project -maxdepth 2 -type d
touch
Создать пустой файл:
touch project/config/app.env
Если файл уже существует, touch не очищает его содержимое. Команда обновляет время изменения файла.
Это важно отличать от перенаправления через >: оно может перезаписать существующий файл.
Просмотр содержимого файлов
cat
Для небольшого файла:
cat project/config/app.env
Показать строки с номерами:
cat -n project/config/app.env
Не стоит использовать cat для огромных логов: весь вывод может заполнить терминал.
less
Для больших файлов используйте:
less /var/log/syslog
Внутри less:
Space— следующая страница;b— предыдущая страница;- стрелки — перемещение по строкам;
/слово— поиск;n— следующее совпадение;q— выход.
head и tail
Первые строки файла:
head -n 20 config.yml
Последние строки:
tail -n 50 /var/log/syslog
Следить за появлением новых строк в логе:
tail -f /var/log/syslog
Для остановки tail -f нажмите Ctrl+C. Это прерывает текущую команду, а не выключает сервер.
Информация о файлах и дисках
file
Определить тип файла:
file archive.tar.gz
file image.bin
Расширение не всегда достоверно показывает содержимое. file анализирует сам файл.
stat
Получить подробную информацию:
stat project/config/app.env
Можно увидеть размер, владельца, права доступа и время изменения.
df
Проверить свободное место файловых систем:
df -h
Ключ -h показывает размеры в удобном для чтения формате.
du
Узнать размер каталога:
du -sh project
Оценить размеры элементов текущего каталога:
du -sh ./*
Комбинация df и du помогает понять, заканчивается ли место на диске и какой каталог занимает его больше всего.
Копирование, перемещение и удаление
cp
Скопировать файл:
cp config.example.yml config.yml
Скопировать каталог со всем содержимым:
cp -r project project-backup
Перед копированием большого каталога убедитесь, что путь назначения правильный.
mv
Переименовать файл:
mv old-name.txt new-name.txt
Переместить файл:
mv config.yml project/config.yml
Если в месте назначения уже есть файл с таким именем, он может быть перезаписан. Для интерактивного подтверждения используйте:
mv -i config.yml project/config.yml
rm
Удалить файл:
rm temporary.txt
Удаление каталога с содержимым:
rm -r temporary-directory
Перед удалением проверьте:
pwd
ls -la
Особенно опасна команда rm -rf: она удаляет рекурсивно и без подтверждения. Ошибка в пути может привести к потере данных. Не используйте её на сервере, пока не проверили путь и содержимое.
Linux обычно не перемещает удалённые файлы в корзину. Если данные важны, сначала создайте копию или используйте backup.
Имена файлов, пробелы и кавычки
Пробел разделяет аргументы команды. Поэтому путь с пробелами нужно заключать в кавычки:
cd "My Project"
Можно также экранировать пробел:
cd My\ Project
Одинарные кавычки передают текст буквально:
printf '%s\n' '$HOME'
Двойные кавычки позволяют shell подставлять переменные:
printf '%s\n' "$HOME"
По возможности используйте в именах файлов и каталогов латинские буквы, цифры, дефисы и подчёркивания. Это уменьшает количество проблем в скриптах, Docker Compose и CI/CD.
Маски файлов
Маски помогают обращаться сразу к нескольким именам.
* означает любое количество символов:
ls *.log
? означает один символ:
ls file?.txt
Квадратные скобки задают один символ из набора:
ls backup-[0-9].dump
Перед командами копирования и удаления полезно сначала проверить, какие файлы совпали с маской:
printf '%s\n' ./*.log
И только после проверки выполнять операцию.
Перенаправление вывода
> и >>
Записать вывод в новый файл или перезаписать существующий:
printf '%s\n' 'первая строка' > notes.txt
Добавить строку в конец:
printf '%s\n' 'вторая строка' >> notes.txt
Перед использованием > убедитесь, что файл не содержит важных данных.
Передача вывода через |
Команды можно соединять:
ls -la /var/log | less
Результат ls передаётся программе less для постраничного просмотра.
Пример подсчёта строк:
find /var/log -type f | wc -l
find формирует список файлов, а wc -l считает строки в этом списке.
Ошибки и 2>&1
Обычный вывод и сообщения об ошибках — разные потоки. Записать ошибки отдельно:
some-command 2> errors.log
Объединить оба потока:
some-command > output.log 2>&1
Эта форма часто используется при сохранении логов диагностической команды.
Условное выполнение команд
Запустить вторую команду только при успешном завершении первой:
mkdir -p backup && cp config.yml backup/config.yml
Запустить вторую команду только при ошибке первой:
systemctl is-active --quiet nginx || echo 'nginx не запущен'
Точка с запятой запускает команды последовательно независимо от результата предыдущей:
pwd; ls -la
Для автоматизации чаще безопаснее использовать &&, чтобы не продолжать цепочку после ошибки.
Редактирование конфигурации на сервере
В серверной работе конфигурационные файлы часто редактируют непосредственно на машине: от имени root или через sudo. Это нормальная практика, если доступ ограничен, изменения понятны, а после редактирования выполняется проверка конфигурации и состояния сервиса.
Например:
sudo vi /etc/example/config.conf
Перед изменением важного файла полезно сохранить резервную копию:
sudo cp /etc/example/config.conf /etc/example/config.conf.backup
sudo vi /etc/example/config.conf
После изменения:
- проверьте содержимое файла;
- выполните встроенную проверку синтаксиса, если она есть;
- перезапустите или перечитайте конфигурацию сервиса;
- проверьте его статус и логи.
Базовые и продвинутые приёмы работы с vi будут разобраны в отдельной статье серии: от режимов, сохранения и поиска до макросов, регистров, настройки и тюнинга редактора.
Практическое упражнение
Создадим небольшой проект и выполним основные операции:
mkdir -p ~/terminal-practice/{config,logs,backup}
cd ~/terminal-practice
printf '%s\n' 'MODE=development' > config/app.env
cat config/app.env
cp config/app.env backup/app.env
ls -lah config backup
Проверим структуру:
find . -maxdepth 3 -type f -print
Добавим строку в файл:
printf '%s\n' 'PORT=8080' >> config/app.env
cat -n config/app.env
Проверим размер:
du -sh .
После упражнения каталог можно удалить, предварительно убедившись в текущем пути:
pwd
rm -r ~/terminal-practice
Что делать, если команда не найдена
Если shell сообщает:
command not found
это может означать, что программа не установлена или её каталог отсутствует в PATH.
Проверить расположение команды:
command -v curl
command -v docker
Посмотреть значение PATH:
printf '%s\n' "$PATH"
Не устанавливайте случайный пакет из первой найденной инструкции. Сначала определите дистрибутив и используйте официальный репозиторий или документацию проекта.
Минимальный набор, который стоит запомнить
pwd
ls -lah
cd /path/to/directory
mkdir -p directory
cp source destination
mv old new
less file
head -n 20 file
tail -f file
df -h
du -sh directory
find . -type f
Этого набора достаточно для большинства простых операций с файлами и первичного осмотра сервера.
Итог
Работа в терминале строится вокруг нескольких понятных действий:
- определить пользователя и текущий каталог;
- посмотреть содержимое;
- перейти по правильному пути;
- создать, прочитать, скопировать или переместить файл;
- проверить размер и тип данных;
- соединить команды конвейером;
- сохранить вывод или ошибки;
- перед опасной операцией проверить путь и содержимое.
Команды Linux становятся предсказуемыми, если понимать их аргументы и заранее проверять контекст. Не нужно запоминать всё сразу: достаточно освоить базовый набор и постепенно добавлять новые инструменты по мере появления задач.
В следующей статье разберём права доступа: пользователей, группы, rwx, chmod, chown, sudo и причины ошибки Permission denied.