Найти в Дзене
ИТ Канал

10 прикольных трюков в командной строке Linux

Оглавление

Работая в Linux или обслуживая сервера, избежать ввода команд в Bash/Sh/Zsh невозможно. Говоря Linux, в первую очередь мы подразумеваем консоль.

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

01 Фиксация происходящего в консоли

Бывает, что активно работаешь, разворачиваешь что-то в первый раз или просто строишь сложную инфраструктуру, потом отвлекся (на совещание/обед/тушение пожара), а когда вернулся к работе забыл часть того, что делал.

Сам Bash умеет логировать вводимые команды и их всегда можно увидеть в файле:

~/.bash_history

(лог вводимых команд для каждого пользователя лежит в его домашней директории)

Но что делать, если нужно еще и знать, что выводилось в ответ на ту или иную команду? Для этого есть команда "script".

Синтаксис:

script [options] [file]

Пишите:

scipt terminallog.scr

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

Для остановки логирование выполните команду:

exit
Пример начала записи и завершения записи
Пример начала записи и завершения записи

Для продолжения записи в этот же файл:

scipt -a terminallog.scr

Если хотите почитать то, что записалось:

cat terminallog.scr

на экран будет выведено всё, что происходило

Пример вывода содердимого записанного экрана
Пример вывода содердимого записанного экрана

02 Алиасы команд

Если во время обслуживания приходится постоянно вводить одни и те же длинные команды, то можно использовать алиасы (alias).

Например, мы хотим сократить команду "docker":

alias d=docker

Теперь проверим:

d ps

Вот что получилось:

-4

Если нужно создать алиас на команду с параметрами, например на команду "docker ps", то при создании алиаса после знака равенства напишите сокращаюмую команду в одинарных кавычках, типа так:

alias d='docker ps'

Теперь вместно "docker ps" нам достаточно набрать "d".

Чтобы созданный алиас не исчез после закрытия сессии, пропишите команду создания алиаса в файл профиля Вашего командного интерпретатора. Вот где они находятся для Bash и ZSH:

  • Bash – ~/.bashrc
  • ZSH – ~/.zshrc

03 Сразу несколько команд

Иногда нужно выполнить сразу несколько команд. Это делается просто: перечисляйте команды с примеyением разделителя ";" . Например:

who; pwd; ls
-5

Если же Вам нужно, чтобы команды исполнялись последовательно, т.к. результат выполнения каждой команды может повлиять на последующую, то вместо разделителя ";" используйте разделитель "&&". Например:

apt update && apt upgrade -y

04 Поиск команд, введенных ранее

Иногда нужно набрать команду, которую уже набирали ранее, но команда длинная, есть куча параметров в которых можно напортачить, а Вы не любите портачить. Ничего страшного, нажмите на клавиатуре стрелочку "Вверх" , потом еще раз и ещё. Каждое нажатие возвращает Вас на шаг назад. Аналогично действует клавиша "Вниз" на клавиатуре, только вы двигаетесь по истории ввода команд не назад, а вперед.

А как быть с командой, которую вводили давно? Можно открыть файл ~/.bash_history и через поиск по файлу найти команду, а потом ее скопировать в буфер обмена. Далее нужно будет из буфера обмена вставить строку. Не очень удобно.

Можно иначе.

Нажмите "CTRL+R" и появится интерфейс для ввода поискового запроса. Начните набирать ту длинную команду, которую ранее набирали и поисковик подскажет ту строку. Когда вы увидите, что поисковик отобразил нужную Вам команду, то просто нажмите Enter и команда выполнится

-6

Бывает так, что команда очень длинная и она такая не одна, есть еще с десяток таких же длинных, которые отличаются только последними параметрами. Если мы будем в поиске рыться, то, фактически, наберем эту команду сами, пока доберемся до нужной. Как быть?

Можно заранее подготовиться :) Набирая длинную команду, в конце поставьте тег, что-то типа "#getfirst". Например:

ls #getfirst

После этого вызвав поиск, ищите просто по тегу. В чём фокус? В том, что командный интерпретатор знак "#" воспринимает как комментарий и все что после этого знака идет он не выполняет, но в history эта команда сохранится вместе с этим комментарием, что и поможет нам при поиске.

05 Повторное использование параметра

Бывает, что нужно выполнить одну команду с параметром, а потом другую с ним же. Как не набирать всё руками?

Либо использовать на клавиатуре стрелочку "Вверх" для вызова предыдущей команды, чтобы потом исправить первую часть команды на новую, либо вызвать новую команду и передать ей повтор параметра с помощью "!$". Например:

cd !$

Вот как это выглядит на экране:

-7

06 Автоответ в интерактивном скрипте

Некоторые скрипты запрашивают подтверждение каких-либо действий в интерактивном режиме, например, принятие соглашение о защите авторских прав. Обычно в таком случае требуется ввести "yes" и нажать Enter, чтобы работа скрипта продолжилась.

Пожно поступить так:

yes | script_deleteallfiles

07 Найти id процесса

Мы хотим прибить ранее запущенный процесс, но не знаем его id.

Допустим, это один из нескольких python-скриптов. Если убить процесс по имени python3, то улетят все скрипты, использующие python3. Поэтому правильнее искать по имени файла-скрипта в списке запущенных процессов:

ps ax | grep prog.py

и когда мы узнаем id нужного процесса, тогда уже его и убить

-8

08 Переключение между задачами

Бывает, что Вы работаете на консоли, запустили какой-то скрипт, который достаточно долго работает, но тут Вам срочно нужно запустить еще что-то. Как это сделать в рамках одной сессии?

Нажмите "CTRL+Z" и запущенный скрипт уйдет в фон (foregroud), а Вам снова станет доступна консоль для работы.

-9

На скриншоте выше видно, что консоль нам вернулась и можно вводить команды дальше. Но как потом вернуться назад?

Когда процесс уходил в фон, он сообщил нам номер, который был присвоен этой жопе джобе (Job). На картинке это:

[2]+

т.е. номер этой джобы: 2

Кроме того, номера всех джоб (Jobs) в рамках этой сессии можно получить командой (исли вдруг забудете присвоенный номер):

jobs

Чтобы вернуться к нужной джобе (в нашем случае №2), мы используем команду "fg":

fg 2

таким образом мы вернемся к экрану, где мы запускали наш скрипт.

09 Очистка всего файла

Иногда нужно просто очистить весь файл, а не удалять и заново его создавать.

Как сделать? Просто. Через оператор ">". Пример

> file.txt

Вот что получается:

-10

10 Поиск файлов, содержащих строку

Если внутри директории нужно найти файлы, в которых содержится определенный текст, то делается это так:

grep -rl "что_мы_ищем" /home/spider/temp

где /home/spider/temp - путь к папке, внутри которой производится поиск

. . .

Linux - очень мощная и развитая система. Разнообразие способов решать различные задачи в ОС этого семейства настолько огромное, что даже книги не хватит, чтобы всё описать, но будет здорово, если кому-то пригодятся описанные выше трюки.