Bash - это самый популярный интерпретатор команд, который используется в большинстве дистрибутивов Linux. Вы сталкиваетесь с Bash каждый раз, когда открываете терминал в своей системе и начинаете выполнять там команды, а также когда пишите различные скрипты для автоматизации выполнения системных задач.
Мы уже много писали о Bash, его возможностях и особенностях, теперь пришло время написать статью, в которой будет описана работа с Bash в целом, как пользоваться Bash, горячие клавиши и другие полезные моменты, которые помогут вам пользоваться Bash более эффективно.
Содержание статьи
- Что такое Bash?
- Команды Bash
- Объединение команд
- Управляющие символы Bash
- Горячие клавиши Bash
- Выводы
Что такое Bash?
Как я уже говорил, Bash - это интерпретатор команд. По сути, это обычная программа, которая запускается при старте сеанса оболочки. Мы могли бы запускать не Bash, а скажем, интерпретатор python или ruby, и тогда нам пришлось бы выполнять методы этих языков вместо команд Bash для администрирования системы.
Bash принимает команды от пользователя и передает их системному загрузчику, а также обеспечивает взаимодействие между командами, обмен информацией и потоками ввода-вывода. Также оболочка предоставляет пользователю удобный интерфейс для работы с историей команд, поиска и замены, а также исправления ранее выполненных команд, а также автодополнение путей.
Команды Bash
Основу работы в Bash составляют команды. Именно с помощью команд вы будете выполнять большинство действий над системой. Команды можно поделить на два типа. Это встроенные в оболочку, которые существуют только виртуально, мы рассматривали их в статье основные команды Bash, а также внешние команды - обычные утилиты или скрипты, расположенные в файловой системе.
Возвращаясь к встроенным командам, можно привести пример, вы не найдете в файловой системе команду cd. Ее нет, она встроена.
Обычные же команды находятся в файловой системе. Они могут находиться в одной из папок, указанных в переменной PATH. Для выполнения встроенной или внешней команды достаточно набрать ее имя, интерпретатор отлично справляется с поиском команд по папкам, указанным в PATH. Например:
ls /
Но если команда находится в одной из сторонних папок, то необходимо ввести ее полный адрес:
/usr/local/bin/simplenote
Иначе оболочка не сможет найти исполняемый файл команды.
Объединение команд
Оболочка Bash позволяет не только выполнять команды, но и объединять их в сложные конструкции для получения нужного эффекта. Использование Bash таким способом очень эффективно. Как вы знаете, система Linux создает три потока для каждой программы - поток ввода, поток вывода и поток ошибок. Оболочка позволяет перенаправить поток одной программы прямо в другую с помощью специальных операторов. Читайте более подробно обо всем этом в статье перенаправление ввода вывода в Bash.
Кроме того, Bash позволяет объединять команды по времени выполнения. Существуют такие операторы для объединения команд:
- && - выполнить первую команду, а вторую выполнять только если первая завершится успешно;
- || - выполнить первую команду, а вторую выполнять только если первая завершится неудачей;
- ; - выполняет последовательно каждую следующую команду, как только завершится предыдущая;
- & - запустить команду в фоне и сразу же вернуть управление в командную оболочку для выполнения следующей команды.
Например, сначала выполняем загрузку файла, а затем открываем его в плеере, если загрузка прошла успешно:
wget https://archive.org/download/testmp3testfile/mpthreetest.mp3 && mplayer mpthreetest.mp3
Чтобы продолжить этот пример, мы можем удалить загруженный файл, если произошла ошибка:
wget https://archive.org/download/testmp3testfile/mpthreetest.mp3 || rm mpthreetest.mp3
Чтобы выполнить обновление системы, а затем завершить работу выполните:
sudo apt update ; shutdown -h now
И наконец, вы можете запустить какой-либо сервис или приложение, например, браузер в фоне и свободно продолжить работу в терминале:
firefox &
Управляющие символы Bash
Перенаправление вывода, организация тоннелей и поочередное выполнение команд - это очень хорошо, но у Bash есть еще и другие полезные возможности. Например, с помощью специальных символов вы можете модифицировать команды, искать в истории и многое другое.
Чтобы вставить в положение курсора предыдущую команду напишите !!. Например, чтобы выполнить последнюю команду с sudo достаточно выполнить:
sudo !!
Чтобы выполнить не последнюю команду, а скажем, предпоследнюю или выполненную еще раньше, то после восклицательного знака нужно указать ее номер:
!-1
Если вы укажите один восклицательный знак и несколько символов, то выполнится последняя команда, которая начиналась на эти символы:
!l
Также может понадобиться искать команду не по первому символу, а по вхождению в нее определенного набора символов. Тогда можно использовать такую конструкцию. Ищем последнюю команду, в которой встречалось tmp:
Если перед командой написать пробел, то она не сохранится в истории:
ls
Символ $? позволяет вывести код завершения последней команды:
echo $?
Символ звездочки возвращает массивом содержимое текущей папки:
echo *
С помощью символа ^ можно заменить несколько букв из предыдущей команды. Работает это вот так:
ls file1
^ls^rm
В результате файл будет удален.
Горячие клавиши Bash
Работа с Bash была бы не такой удобной без горячих клавиш, которые позволяют упростить множество действий. Рассмотрим основные сочетания, некоторые из них вы и так используете каждый день:
- Tab - автодополнение, наберите начало команды или пути и нажмите Tab, если такая команда только одна оболочка ее дополнит. Если доступно несколько вариантов, нажмите два раза Tab чтобы их увидеть;
- Стрелка вверх - предыдущая команда в истории;
- Стрелка вниз - следующая команда в истории;
- Ctrl+R - поиск по истории. Просто нажмите эту кнопку и начните вводить нужную команду;
- Ctrl+G - выйти из режима поиска;
- Alt+. - предыдущее слово последней команды;
- Ctrl+L - очистить вывод терминала;
- Ctrl+A - перейти в начало строки;
- Ctrl+E - в конец строки;
- Ctrl+K - удалить символы начиная от курсора и к концу команды;
- Ctrl+U - удалить символы от курсора до начала команды;
- Ctrl+W - удалить все символы этого слова слева;
- Ctrl+Y - удалить все символы этого слова справа;
- Ctrl+S - остановить вывод на экран;
- Ctrl+Q - возобновить вывод на экран.
Это все основные сочетания клавиш, которые вам понадобятся чтобы пользоваться bash. Конечно, существуют и другие, но эти основные.
Выводы
В этой статье мы рассмотрели как пользоваться Bash. Как применять основные возможности оболочки, как выполнять команды и какие бывают основные горячие клавиши, этой информации должно быть вполне достаточно новичкам для того, чтобы освоить на начальном уровне эту оболочку. Надеюсь, эта информация была полезной для вас.
На завершение видео по теме от Акцент профи:
Часто бывает задача выключить компьютер после выполнения какой-нибудь команды. Например, как в примере
sudo apt update ; shutdown -h now
Проблема в том, что shutdown требует root пароля. В случае если update длится дольше 5 мин, то когда дойдет очередь до выполнения shutdown, то компьютер потребует вести его еще раз.
Я вижу только 2 варианта
1. Разрешить выполнение shutdown без пароля через sudoers
2. Увеличить время, в течении которого sudo не будет запрашивать пароль (по умолчанию 5 мин)
Есть ли еще варианты?
На системах с systemd можно использовать вместо shutdown команду systemctl poweroff для выключения компьютера. Она не просит пароль суперпользоваетля. Для перезагрузки systemctl reboot
sudo apt install texlive-full; systemctl poweroff
Как вариант
# chmod 4755 /usr/bin/shutdown
Что, имхо, не секьюрно.
Вы писали:
"Возвращаясь к встроенным командам, можно привести пример, вы не найдете в файловой системе команду cd. Ее нет, она встроена."
[user1@localhost /]$ whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz
или вы подразумевал что то другое?
Нет, именно это:
sergiy@sergiy-pc:~$ whereis cd
cd:
sergiy@sergiy-pc:~$ whereis ]]
]]:
sergiy@sergiy-pc:~$ whereis [[
[[:
У вас, наверное, нестандартная оболочка.
У меня тоже показывает путь, стоит CentOs 8, загруженный с оффициального сайта