Топ Необходимых Bash-Команд для Разработчика [Шпаргалка]
Bash — самый распространенный командный интерпретатор в UNIX-подобных системах, предоставляет возможность выполнения практически любого действия через терминал. Не все операции можно выполнить через графический интерфейс, в то время как Bash дает возможность полного контроля над системой.
Ознакомление с командами Bash становится крайне важным в повседневной работе, поскольку многие задачи эффективнее и быстрее выполнять через команды Bash в терминале. Например, поиск файлов по содержимому, изменение файлов, их копирование и перемещение и т.д.
В условиях отсутствия графического интерфейса, Bash становится ключевым инструментом для управления сервером. Это особенно актуально в случае удаленных серверов, где графический интерфейс не устанавливается.
Цель этой статьи — ближе познакомить пользователей с Bash, рассмотреть основные команды, которые разработчики используют в повседневной работе.
Получение информации о команде
Для вызова различных программ или команд часто требуется использовать разнообразные флаги, которые может быть трудно запомнить. Удобно обращаться сразу в терминале к руководствам, предоставляющим подробное описание синтаксиса команды, ее опций, параметров и возможных вариантов использования. Чтобы получить доступ к информации в терминале и составить запрос, соответствующий требуемой задаче, можно использовать:
man -это сокращение от «manual» (руководство). Выполняйте
man
, когда нужно получить руководство по различным программам и утилитам в UNIX-подобных операционных системах. Например командаman ps
отобразит подробное руководство по использованию командыps
. В этом руководстве вы найдете информацию о синтаксисе команды, параметрах, переменных окружения и других важных аспектах работы с командной. Вы можете использоватьman
для получения справки по практически любой команде или программе в вашей системе.
Выход из руководства: клавиша Q (в англ раскладке).Флаг --help является распространенным стандартом в командной строке для получения справочной информации о программе или команде. Когда вы добавляете
--help
к выполнению команды, программа обычно выводит краткую справку, объясняющую основные опции и функциональность команды.
Напримерgrep --help
выведет информацию о том, как используется команда grep. Флаг--help
в основном дает информацию по использованию команды (флаги, переменные и т.д.) его удобнее использовать как подсказку, тогда какman
выдает полную информацию о программе.
Работа с процессами:
ps — используется для отображения текущих процессов.
Пример:
Вывод всех процессов, запущенных в системе
ps aux
.Вывод всех процессов, запущенных в системе с фильтром по названию (достаточно составить шаблон названия)
ps aux | grep -i '*название_процесса*'
мы разберем дальше.
grep
top — в операционных системах предоставляет интерактивный и динамический просмотр информации о загрузке системы и работающих процессах.
kill — используется для удаления процесса
Пример:
Удалить процесс по id (id можно посмотреть командой
ps
)kill PID
Завершение процесса по имени процесса
pkill имя_процесса
df — используется в операционных системах, предоставляет информацию о доступном месте на диске.
Также полезно знать удобную команду для поиска наиболее тяжелых файлов в директории:
Работа с файловой системой
ls — используется для просмотра содержимого директории. Стандартно команду используют с флагами
-lah
, выведет скрытые файлы (которые начинаются с точки) и выведет больше информации о файлах (их размер, дата последнего изменения, права доступа). Командаls
имеет множество опций для настройки вывода в соответствии с вашими потребностями. Для получения более подробной информации о доступных опциях, вы можете использовать командуman
илиls --help
.
Пример использования:ls -lah
pwd — используется для вывода полного пути текущей рабочей директории. Команда
pwd
полезна, когда вам нужно знать, в какой директории вы находитесь, особенно при написании скриптов или команд в терминале.cd — используеется для навигации в терминале по директориям, для смены текущей рабочей директории в командной строке.
Основные примеры использования:
Прямой путь
cd /home/user/Documents/work/project
Относительный путь
cd Documents/work/project
На каталог вверх
cd ..
Перейти в домашнюю директорию
cd
Перейти в предыдущую директорию
cd -
Перейти в директорию начиная с домашней (чтобы не указывать полный путь)
cd ~/Documents/work/project
mkdir — используется для создания новых директорий.
Несколько примеров использования:
Создание новой директории в текущей
mkdir directory_name
Создание нескольких директорий сразу
mkdir dir1 dir2 dir3
Создание вложенных директорий
mkdir -p path/to/nested/directory
Флаг-p
позволяет создавать вложенные директории. В данном случае, будет создана структура директорийpath/to/nested/directory
, и все промежуточные директории будут созданы автоматически, если их нет.Создание дирректории и утановка прав доступа
mkdir -m 755 new_directory
touch — позволяет создать новый пустой файл через командную строку. Для создания файла я обычно использую
vim
если нужно сразу записать какие-то данные в файл, если нет —vim
файл пустой не создаст. Командуvim
разберем дальше.Примеры использования:
Создание файла
touch filename.txt
Если файлfilename.txt
уже существует, командаtouch
обновит его временные метки, не затрагивая содержимое файла.Создание нескольких файлов сразу
touch file1.txt file2.txt file3.txt
Создание файла с использованием абсолютного пути
touch /path/to/newfile.txt
cp — команда используется для копирования файлов и директорий.
Примеры:
Команда
cp from.txt to.txt
копирует содержимое файлаfrom.txt
в файлto.txt
. Если файлto.txt
не существует, эта утилита создаст его.Копирование файла
source_file.txt
в директориюdestination
cp source_file.txt destination/
Копирование нескольких файлов в директорию
directory
cp file1.txt file2.txt directory/
Копирование файла с изменением имени
cp file.txt directory/new_name.txt
Копирование дирректории
cp -r source_directory/ destination/
Копирование с подтверждением (вопрос перед перезаписью)
cp -i source_file.txt destination/
Флаг-i
запрашивает подтверждение, если файл с таким именем уже существует в целевой директории.
mv — команда в терминале, предназначенная для перемещения файлов и директорий.
Эту команду также часто используют для переименования файлов.
Перемещение файла в другую директорию
mv text.txt /path/new-dir/
Переименование файла
mv old-file.txt new-file.txt
Перемещение всех файлов из одной директории в другую
mv /path/dir/* /path/new-dir/
Перемещение файла в текущую директорию (использование
.
)mv /path/dir/file.txt .
Перемещение нескольких файлов в директорию
mv file-1.txt file-2.txt /path/dir/
Интерактивное перемещение с запросом подтверждения
mv -i file.txt /path/new-dir/
Флаг-i
запрашивает подтверждение, если файл с таким именем уже существует в целевой директории.
rm — для удаления файлов, для удаления каталогов с файлами внутри нужно использовать флаг
rm -rf
Эта команда не перемещает файлы или директории в корзину, что делает их восстановление невозможным. Поэтому будьте осторожны, используя эту магию!
Удаление с подтверждением
rm -i file.txt
Удаление файлов с использованием шаблонов
rm *.txt
Удаление нескольких файлов
rm file-1.txt file-2.txt
Важно!
При использовании команд cp
и mv
если вторым аргументом использовать существующий файл — его затрет файл из первого аргумента, его будет невозможно восстановить!
Пример:
Есть 2 файла file1.txt
и file2.txt
.
Вызываем команду mv file1.txt file2.txt
Файл file1.txt
стал file2.txt
при этом данные из изначального файла file2.txt
затираются, их не восстановить.
Чтобы избежать такого поведения нужно использовать флаг -i
, в этом случае будет предупреждение, что выбранный файл будет записан поверх уже существующего в каталоге назначения. Будет возможность отменить это действие прописав n
и нажав Еnter
.
Лайфхак:
Чтобы избежать неприятных последствий, очень удобно прописать один раз в элиасах:
alias mv="mv -i
alias cp="cp -i"
alias rm="rm -i"
С концепцией элиасов мы познакомимся в следующей статье.
find — используется для поиска файлов и директорий в файловой системе на основе различных критериев.
Интерфейс (самый простой, команду можно задавать очень гибко через флаги):
find `где искать` -name `имя файла, можно использовать паттерн`
Примеры:
Поиск файла по имени
find ./ -name "file"
Поиск файлов по расширению
find /abs/path/dir -name "*.js"
Поиск файлов по размеру
find ./dir/ -mtime -7
Можно указать максимальную глубину (если мы хотим найти только в нашей папке или ограничить несколькими уровнями вложенности)
-maxdepth 2
Совместное использование нескольких условий
find /путь -name "*.расширение" -size +1M
Работа с файлами
cat — конкатенация, часто используется для вывода содержимого файлов на экран терминала.
Примеры:
Вывод содержимого файла на экран
cat file.txt
Объединение содержимого файлов
cat file-1.txt file-2.txt
Вывод всех файлов в директории
cat *
Вывод всех файлов в директориис расширением js (можно прописать любой паттерн)
cat *.js
Нумерация строк при выводе файла
cat -n file-1.txt
grep — утилита, используемая для поиска текста в файлах или выводе других команд. Можно задавать регексом искомый текст.
Пример
grep -E -i '^(linux|unix)' file-name.txt
флаг-E
используем для регэкс, флаг-i
для игнорирования регистра.Простой поиск текста в файле
grep "искомый_текст" file.txt
Поиск текста в нескольких файлах
grep "искомый_текст" file-1.txt file-2.txt
Рекурсивный поиск в директории
grep -r "искомый_текст" ./dir/
Подсветка совпадений
grep --color=auto "искомый_текст" file.txt
Исключение строк с совпадениями
grep -v "искомый_текст" file.txt
Найти строку подходящую под регэкс
'^(linux|unix)'
в текущем каталоге (проходя по всем файлам рекурсивно) при этом в вывод попадет файл и сторкаgrep '^(linux|unix)' -insr ./
grep — очень полезная утилита, особенно при работе с логами приложений на сервере.
head — используется для просмотра первых строк любого текстового файла.
Пример:
head -30 file.txt
выводит 30 первых строк файлаfile.txt
tail — команда имеет функцию, аналогичную команде
head
, но вместо отображения первых строк tail выводит последниеn
строк текстового файла.Пример:
tail -100 file.txt
выводит 100 последних строк файлаfile.txt
diff — сравнивает содержимое двух файлов построчно. После анализа файлов будут выведены строки, которые не совпадают.
Пример:
diff file1.txt file2.txt
vim — это текстовый редактор в UNIX-подобных системах, который предоставляет обширные возможности для редактирования текстовых файлов. Основные команды и концепции, связанные с использованием
vim
:vim filename.txt
команда открывает файлfilename.txt
в редактореvim
.Режимы
vim
:Normal Mode: Режим, в котором можно перемещаться по тексту, удалять строки, копировать и вставлять текст. После запуска
vim filename.txt
, вы обычно начинаете в Normal Mode.Insert Mode: Режим для ввода текста.
Visual Mode: Режим для выделения блоков текста.
Переход между режимами:
Для входа в режим Insert Mode, нажмите клавишу
i
в Normal Mode.Для входа в режим Visual Mode, нажмите
v
в Normal Mode.Для возврата в Normal Mode из режимов Insert или Visual, нажмите клавишу
Esc
.
Сохранение изменений и выход:
В Normal Mode, введите
:w
и нажмитеEnter
, чтобы сохранить изменения.Введите
:q
и нажмитеEnter
, чтобы выйти изvim
.Для сохранения и выхода одновременно введите
:wq
и нажмитеEnter
.Чтобы выйти без сохранения изменений воспользуйтесь сочитанием
:q!
и нажмитеEnter
. Вы выйдете изvim
, отменив все изменения.
Вставка текста:
В Normal Mode, переместите курсор в нужное место.
Перейдите в режим вставки, нажав
i
.Введите текст.
Вернитесь в Normal Mode, нажав
Esc
.
Поиск и замена:
В Normal Mode, введите
/
и введите текст для поиска. НажмитеEnter
.Для замены введите
:%s/старый_текст/новый_текст/g
и нажмитеEnter
.
vim
предоставляет множество функций, и освоение всех их может занять время. Однако, овладев базовыми командами, вы сможете эффективно редактировать текстовые файлы прямо из терминала.vim
иnano
— это два текстовых редактора в командной строке, у них есть различия в стиле использования и функциональности, однако в базовом функционале они сходятся, в этой статье мы разобрали основной функционалvim
т.к. я предпочитаю использоватьvim
из-за его расширенных возможностей. Вы можете использоватьnano
вместо него, зависит от ваших предпочтений и требований команды.
Паттерны для поиска
Создание паттерна для команд find
, grep
и подобных может быть полезным для поиска и фильтрации файлов и данных, паттерн очень похож на регэкс, но с урезанным функционалом. Как составлять паттерн:
Примеры:
Поиск всех файлов с расширением .txt
find /путь -type f -name "*.txt"
Поиск всех файлов, содержащих «ключевое-слово»
find /путь -name "*ключевое-слово*"
Создание эффективных паттернов зависит от конкретных задач поиска, и их можно настраивать в зависимости от вашего конкретного сценария использования.
В grep
можно использовать регулярные выражения для более сложного поиска, для этого укажите флаг -E
.
Заключение
Использование bash-команд в терминале — неотъемлемая часть повседневной работы разработчика, предоставляющая мощный и эффективный инструментарий для управления файлами, процессами и системой в целом.
Многие задачи можно выполнять значительно быстрее и проще через терминал, особенно когда речь идет о работе с файлами, поиском, обновлением и управлением пакетами, работе с процессами и мониторингом.
Изучение bash-команд — это важный этап профессионального роста для разработчика, поскольку они предоставляют возможность оптимизировать рутинные операции, легко управлять процессами, мониторить ресурсы, а также иметь полный контроль над файловой системой.
Важные концепции, которые помогают эффективно и быстро работать в терминале, мы разберем в следующих статьях. Среди них будут рассмотрены права доступа к файлам и директориям, использование конвейеров, управление потоками и перенаправление ввода-вывода, а также освоение функционала элиасов и многих других важных аспектов.