Топ Необходимых Bash-Команд для Разработчика [Шпаргалка]

a54fea27f0919521314dc540e96179be

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-команд — это важный этап профессионального роста для разработчика, поскольку они предоставляют возможность оптимизировать рутинные операции, легко управлять процессами, мониторить ресурсы, а также иметь полный контроль над файловой системой.

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

© Habrahabr.ru