Автозавершение команд в linux

Обновлено: 03.07.2024

Видели про-юзеров Linux, которые эффективно работают в терминале? Хотите так же? Не вопрос: в этой статье мы собрали некоторые из полезных команд, которые помогут вам сэкономить время и повысить продуктивность.

Использование табов для автодополнения

Когда вы начинаете что-то вводить в терминале, вы можете нажать Tab и вам будут предложены возможные варианты продолжения, которые начинаются с введённой вами строки.

Например, если вы хотите скопировать файл с именем file1.txt , вы можете ввести только cp f , нажать Tab и увидеть возможные варианты.

Также Tab можно использовать для автодополнения команд.

Возвращение в последнюю рабочую директорию

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

Она вернёт вас в последнюю рабочую директорию и вам не придётся вручную вводить длинный путь.

Примечание Последняя рабочая директория хранится в переменной окружения OLDPWD ; вы можете использовать эту переменную для своих целей (попробуйте echo $OLDPWD ) или даже подложить команде cd - другой путь ( OLDPWD=/usr/bin cd - ).

Возвращение в домашнюю директорию

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

А вообще, можно ограничиться командой cd и получить тот же результат. В большинстве современных дистрибутивов Linux эта команда должна сработать.

Вывести содержимое каталога

Вы, наверное, догадываетесь, какая команда нужна для отображения содержимого каталога. Всем известно, что для этого можно использовать ls -l .

Однако не все знают, что можно обойтись командой ll .

Белкасофт , Удалённо , По итогам собеседования

Конечно, всё зависит от дистрибутива, но в большинстве случаев вы сможете воспользоваться этой командой.

Примечание На самом деле, ll является не отдельной командой, а псевдонимом для ls -l .

Запуск нескольких команд за раз

Допустим, вам нужно запустить несколько команд одну за другой. Что вы будете делать? Подождёте завершения первой команды, а затем запустите следующую?

Вместо этого вы можете использовать разделитель ; . Таким образом можно запустить несколько команд на одной строке. Вам не нужно ждать, пока какая-то из команд завершит свою работу, чтобы запустить следующую.

command_1; command_2; command_3

Примечание При запуске команд таким образом, они выполняются не параллельно, а последовательно. Если вам нужен именно первый вариант, то используйте конструкцию (command_1 &); (command_2 &) .

Запуск нескольких команд за раз при условии, что предыдущая команда была выполнена успешно

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

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

В этом случае вы можете использовать разделитель && , который запускает следующую команду только при условии, что предыдущая успешно завершилась.

Как пример использования && можно привести команду sudo apt update && sudo apt upgrade для обновления системы через терминал на системах, основанных на Debian.

Время убивать

Есть несколько способов «убить» программу. Команда killall сделает это по имени, а kill требуется номер процесса. Например, killall chrome убьёт все процессы chrome. Также можно послать любому процессу сигнал прерывания (как Ctrl+C) с помощью kill -INT <номер процесса> .

Пора остановиться

Чтобы поставить работающую команду на паузу нажмите комбинацию Ctrl+Z, а чтобы продолжить — % .

Простой поиск и использование предыдущих команд

Представим ситуацию, когда вы воспользовались какой-то командой пару часов назад и снова хотите её использовать, но не можете вспомнить название.

Здесь поможет обратный поиск. С его помощью можно по заданному условию найти команду в истории.

Просто нажмите комбинацию Ctrl+R и введите часть команды. Затем вам будут показаны команды из истории, которые удовлетворяют заданному условию.

По умолчанию показывается только один результат. Чтобы увидеть больше результатов, нужно повторно нажать Ctrl+R. Чтобы выйти из поиска, нажмите Ctrl+C.

Учтите, что в некоторых оболочках Bash можно использовать Page Up и Page Down с условием поиска для автодополнения команды.

Выводим консоль из зависания после Ctrl+S

Многие привыкли использовать комбинацию Ctrl+S для сохранения. Однако после её использования в терминале, он часто зависает. Чтобы вернуть его в нормальное состояние, нажмите комбинацию Ctrl+Q.

Переход к началу или концу строки

Допустим, вы вводите длинную команду и вдруг понимаете, что вам нужно что-то изменить в её начале. Чтобы попасть в начало или конец строки вы можете несколько раз нажать клавишу стрелки влево/вправо или Home/End. А можете нажать Ctrl+A или Ctrl+E.

Чтение лог-файла в реальном времени

В ситуациях, когда вам нужно анализировать логи при запущенном приложении, можно использовать команду tail с флагом -f .

tail -f <путь к лог-файлу>

Также можно использовать регулярные выражения в grep , чтобы выводить только нужные строки:

tail -f <путь к лог-файлу> | grep <регулярное выражение>

Кроме того, вы можете использовать флаг -F , чтобы tail продолжал работу даже в случае удаления лог-файла. Таким образом, когда лог-файл снова будет создан, tail продолжит логирование.

Если вы хотите просматривать системный лог в реальном времени, воспользуйтесь аналогичной опцией -f команды journalctl :

Чтение сжатых логов без извлечения

К счастью, в таких ситуациях всегда спасут z-команды. Они являются альтернативами обычных команд, которые используются для работы с логами вроде less , cat , grep .

Поэтому вы можете воспользоваться zless , zcat , zgrep и т.д., даже не извлекая логи.

Использование less для чтения файлов

Команда cat не всегда лучший выбор для отображения содержимого файла, особенно если он большой — cat выведет сразу весь файл.

Вы можете использовать Vi, Vim или другой терминальный текстовый редактор, но если вам просто нужно прочитать файл, то команда less подойдёт гораздо лучше.

less <путь к файлу>

В less можно искать нужную подстроку, листать по страницам, отображать номера строк и не только. А ещё less может читать не только текстовые документы, но ещё и архивы и другие типы файлов.

Использование аргумента предыдущей команды с помощью !$

Использование аргумента предыдущей команды может пригодиться во многих ситуациях. Например, вы создали директорию и вам нужно сразу в неё перейти.

Ещё лучше использовать alt+. . Множественное нажатие точки позволяет выбрать аргумент одной из нескольких предыдущих команд.

Использование предыдущей команды в текущей с помощью !!

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

Быстрое sudo !! позволяет сэкономить немного времени.

Использование alias для исправления опечаток

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

Представим, что вместо grep вы часто пишете gerp . Если вы установите псевдоним следующим образом, то вам не придётся больше перепечатывать команду:

К слову, для исправления опечаток не обязательно использовать псевдонимы — утилита The Fuck сама исправит предыдущую команду.

Перезагружаемся

Чтобы выключить компьютер из терминала, введите poweroff , а для перезагрузки — reboot .

Вставка скопированного текста в терминал

Здесь не всё однозначно, так как между дистрибутивами Linux и терминалами есть определённая разница. Но в общем случае вставить текст можно одним из следующих способов:

  • Скопируйте текст и кликните правую кнопку мыши для вставки (работает в Putty и других Windows-клиентах SSH);
  • Скопируйте текст и нажмите среднюю кнопку мыши (колёсико) для вставки;
  • Ctrl+Shift+C для копирования и Ctrl+Shift+V для вставки;
  • В некоторых эмуляторах терминала работает привычная комбинация Ctrl+V.

Завершить работающий процесс/команду

Возможно, это слишком очевидно. Если у вас запущена команда, работу которой вы хотите завершить, просто нажмите Ctrl+C и команде будет отправлен сигнал прерывания (SIGINT). А если вы хотите быстро покинуть терминал, нажмите комбинацию Ctrl+D, которая для баша и других интерактивных программ означает окончание ввода.

Команда для скриптов или команд, которым нужен интерактивный ответ

Команда yes может пригодиться, если какой-то скрипт/команда требует взаимодействия с пользователем, которое заключается только в нажатии Y каждый раз.

yes | <команда или скрипт>

Очистить файл, не удаляя его

Если вам нужно только очистить содержимое файла, а не удалить его, вы можете сделать это следующим образом:

Узнать, есть ли файл с определённым текстом

В терминале Linux можно искать разными способами. Если вам нужно узнать, есть ли файл(ы) с определённым текстом, можете воспользоваться этой командой:

grep -Pri <текст_для_поиска> <путь_к_директории>

Получаем справку для каждой команды

Почти все команды/инструменты командной строки содержат справку с указаниями по работе. Чтобы получить справку, воспользуйтесь этой командой:

Кроме того, порой можно получить более подробную справку с помощью команды man <команда> .

Получаем историю команд

Если вы хотите взглянуть на все команды, которые вы когда-либо запускали, введите history . Если вам нужен не полный список, а только несколько последних, воспользуйтесь командой fc -l .

Быстро запускаем команды из истории

При получении команд одним из вышеуказанных способов рядом с каждой командой находится её номер в истории. Чтобы быстро запустить команду из этого списка просто введите !<номер команды> .

Выполняем команду в обход истории

Если вы хотите выполнить команду так, чтобы она не сохранилась в истории, просто введите пробел перед командой.

Пишем длинные команды с удобством

Если зажать Ctrl, а затем нажать по очереди X и E, то откроется текстовый редактор, в котором можно будет спокойно записать длинную команду, а после выхода из него — выполнить её.

Восстанавливаем терминал

Если вы вывели в терминал сырые бинарные данные или ещё что-то, что выводить не стоило, то убрать увиденную абракадабру позволит команда reset .

Информация о файловых системах

Чтобы получить информацию о текущих смонтированных файловых системах с удобным оформлением по столбцам, введите команду mount | column -t .

Также вы можете воспользоваться командой findmnt , которая отображает информацию в виде красивого дерева и сама форматирует столбцы, а также может найти нужную файловую систему:

Деревья процессов

Есть инструмент pstree , который умеет рисовать красивые деревья процессов. Например:

Экран блокировки

Чтобы заблокировать экран, используйте команду $ loginctl lock-session .

Для разблокировки экрана введите команду $ loginctl unlock-session . Конечно, вряд ли вы сможете использовать терминал при заблокированном экране, однако вы можете пойти обходными путями. Например, можно создать задачу для разблокировки через какое-то время.

Супершелл

Чтобы запустить шелл от имени суперпользователя, можно воспользоваться командой sudo -s . Во многих источниках можно встретить вариант sudo su , который тоже работает, но медленнее, так как запускает лишний процесс.

Быстро открываем файлы в программе по умолчанию

Команда xdg-open позволяет открыть любой файл в соответствующей программе. Например, xdg-open file.txt откроет файл в текстовом редакторе по умолчанию.

Статус системных сервисов

Чтобы посмотреть статус системных сервисов, введите команду systemctl status или systemctl status <имя сервиса> , если вас интересует конкретный сервис.

Быстро ищем файлы

Если вам нужно найти файл, но вы не знаете, где конкретно он находится, можно воспользоваться командой find . Например:

Используем вывод одной команды в качестве аргумента другой

Чтобы использовать вывод одной команды в качестве аргумента другой, используйте конструкцию команда-2 $(команда-1) . Например:

Календарь

Команда cal может нарисовать календарь на текущий месяц (и даже выделить текущее число) или на другой промежуток:

Планировщик задач

Чтобы выполнить какую-то команду в нужное вам время, воспользуйтесь at :

echo команда-для-выполнения | at время_выполнения

Учтите, что эта команда может отсутствовать на вашей системе, и вам придётся установить её самостоятельно.

Получаем свой внешний IP

Чтобы получить свой внешний IP-адрес введите curl ifconfig.me или curl ipinfo.io/ip . Возможно, сначала вам придётся установить curl .

Прогноз погоды

Введите команду curl wttr.in/<нужный город> и получите красивую таблицу с прогнозом погоды:

Получаем таблицу ASCII

Чтобы получить быстрый доступ к таблице ASCII просто введите man ascii .

Простой калькулятор

Небольшие выражения можно вычислять прямо в терминале. Это можно сделать либо с помощью конструкции echo <выражение> | bc , либо echo $((<выражение>)) . Например:

Выполняем команду в другой директории и возвращаемся обратно

Если вы хотите выполнить команду в другой директории, но при это не хотите покидать текущую, то просто оберните команду скобками. Например, (cd /tmp && ls) . Здесь скобки запускают подшелл (subshell), внутри которого мы и выполняем cd .

Узнаём, какие библиотеки нужны команде/библиотеке

Чтобы узнать, какие динамические библиотеки нужны программе или библиотеке и как они будут разрешены при запуске, используйте команду ldd :

Узнаём, что лежит внутри файла

Чтобы определить тип содержимого, находящегося в файле, используйте команду file :

Многократный запуск команды

Чтобы запускать команду каждые несколько секунд (по умолчанию две) и смотреть на её вывод, воспользуйтесь командой watch <команда> .

Время на запуск команды

Чтобы узнать, сколько времени уходит на запуск команды, используйте time <команда> .

Системные вызовы команды

Чтобы узнать, какие системные вызовы совершает программа, введите strace <команда> .

Запоминаем набираемую команду

Если вы набираете какую-то команду и вам по какой-то причине нужно прерваться и, например, ввести другую команду, вы можете «запомнить» то, что вы ввели комбинацией Ctrl+U, а затем вставить комбинацией Ctrl+Y.

Выкачиваем сайты

Чтобы выкачать сайт используйте команду wget --random-wait -r -p -e robots=off -U mozilla <адрес сайта> .

Проводим туннели

С помощью команды ssh -N -L 2001:localhost:80 somemachine можно создать туннель от 80 порта на удалённой машине до 2001 на локальной.

Тема полезных приёмов работы в терминале Linux неисчерпаема. Казалось бы — всё устроено очень просто: приглашение оболочки, да введённые с клавиатуры команды. Однако, в этой простоте кроется бездна неочевидных, но полезных возможностей. Именно поэтому мы регулярно публикуем материалы, посвящённые особенностям работы в командной строке Linux. В частности, сегодня это будет перевод статьи, автор которой увлечён экономией времени через повышение продуктивности труда.


Если вас интересует работа в командной строке Linux — вот некоторые из наших материалов на эту тему:

Приёмы работы в командной строке Linux и экономия времени

Вам когда-нибудь доводилось видеть, как коллега использует некие простые команды Linux для решения задач, решение которых занимает у вас несколько строк? Должно быть, когда подобное случалось, вы только и могли сказать себе: «Ну ничего ж себе! Я и не знал, что это можно сделать так просто».

В этом материале я покажу вам некоторые профессиональные приёмы работы в командной строке Linux, которые сэкономят вам уйму времени и в некоторых случаях избавят от плохого настроения. Мало того, что ваши друзья или коллеги скажут: «Ну надо же!», глядя на вас. Эти приёмы, кроме того, помогут вам увеличить личную продуктивность, так как вам понадобится вводить меньше команд и даже делать меньше щелчков мышью.

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

Прежде чем мы начнём, хочется отметить, что некоторые из приведённых здесь методов зависят от настройки командной оболочки.

0. Автозавершение команд с использованием клавиши Tab

Я начну с кое-чего вполне очевидного, но весьма важного: с автозавершения команд с помощью клавиши Tab .

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

Например, собираясь скопировать файл с именем my_best_file_1.txt , вы можете просто ввести cp m и нажать Tab для того, чтобы увидеть возможные варианты продолжения команды.


Использование клавиши Tab для автозавершения ввода

Клавишу Tab можно использовать и для автозавершения команд.

1. Переход в последнюю рабочую директорию

Представьте, что вы работали в директории, до которой не так уж и просто добраться, а потом перешли в другую директорию, расположенную совершенно в другом месте. Потом вы поняли, что вам нужно вернуться в предыдущую директорию. В этом случае достаточно воспользоваться следующей командой:


Она позволит вам оказаться в последней рабочей директории. Теперь в подобных ситуациях вам не нужно больше будет вводить длинные пути, или пользоваться копированием и вставкой.


Простое переключение между директориями

2. Возврат в домашнюю директорию

Этот приём тоже весьма очевиден. Вы можете использовать нижеприведённую команду для того, чтобы вернуться в домашнюю директорию из любого места:


Однако, в домашнюю директорию можно вернуться ещё быстрее — с помощью команды cd .

В большинстве современных дистрибутивов Linux оболочка предварительно настроена на именно такое восприятие команды cd . Это сэкономит вам пару нажатий клавиш на клавиатуре.


Самый быстрый способ перехода в домашнюю директорию

3. Вывод на экран содержимого директории

Возможно, вы зададитесь вопросом о том, в чём состоит тонкость использования команды для вывода содержимого директории. Все знают, что для этой цели служит команда ls -l .

Но в том-то всё и дело. Практически все используют команду ls -l для вывода содержимого директорий, в то время как то же самое можно сделать с помощью следующей команды:


Работоспособность этой команды зависит от дистрибутива Linux и от настройки оболочки, но весьма вероятно, что вы сможете воспользоваться ей в большинстве дистрибутивов.


Использование команды ll вместо команды ls -l

4. Вызов нескольких команд в одной строке

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

В подобной ситуации полезным окажется разделитель команд ; (точка с запятой). При таком подходе вы можете ввести несколько команд в одной строке. При этом, в отличие от обычного ввода команд, для выполнения следующей команды не надо ждать завершения предыдущей.

5. Выполнение нескольких команд в одной строке и условие на успешное завершение предыдущей команды

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

Представьте себе, что хотите собрать код, а затем, если сборка оказалась успешной, вызвать make ?

В подобной ситуации можно использовать разделитель && . Этот разделитель позволяет гарантировать то, что следующая команда будет выполнена лишь в том случае, если предыдущая отработает успешно.


Вот хороший пример использования && :

6. Простой поиск и использование ранее введённых команд

Представьте себе, что вы, пару минут или пару часов назад, вводили длинную команду, и вам снова нужна эта команда. Причём, проблема заключается в том, что вспомнить точно эту команду вы не можете.

В подобной ситуации вас спасёт обратный поиск. Данная методика позволяет проводить поиск в истории команд по ключевому слову. Тут достаточно использовать комбинацию клавиш Ctrl + R для запуска обратного поиска и ввести что-то, имеющее отношение к команде. Система просмотрит историю команд и покажет команды, соответствующие введённому запросу.


По умолчанию показан будет лишь один результат. Для того, чтобы увидеть больше результатов, соответствующих запросу, вам понадобится использовать комбинацию клавиш Ctrl + R снова и снова. Для того, чтобы выйти из режима обратного поиска, нажмите Ctrl + C .


Обратный поиск по истории команд

Обратите внимание на то, что в некоторых оболочках Bash для перебора результатов поиска можно пользоваться клавишами Page Up и Page Down .

7. Разблокировка терминала после случайного нажатия Ctrl + S

Возможно, вы привыкли пользоваться комбинацией клавиш Ctrl + S для сохранения файлов. Но если нажать эти клавиши в терминале Linux, вы его заблокируете.

8. Перемещение к началу или концу строки

Представьте себе, что вы вводите длинную команду и где-нибудь посередине понимаете, что должны что-нибудь изменить в её начале. Вероятно, вы используете клавиши-стрелки для того, чтобы сначала переместиться в начало строки, а потом вернуться в конец.

Конечно, в подобной ситуации можно использовать клавиши Home и End , но, как вариант, с помощью комбинации клавиш Ctrl + A можно перейти в начало строки, а с помощью комбинации Ctrl + E — в конец.


Перемещение к началу или концу строки

Мне такой способ кажется удобнее, чем использование клавиш Home и End , особенно когда я работаю на ноутбуке.

9. Чтение лог-файлов в режиме реального времени

Когда вам нужно проанализировать файлы журналов, в которые, во время анализа, пишет данные какое-нибудь работающее приложение, вы можете использовать команду tail с опцией -f .


Кроме того, вы можете использовать команду grep в её обычном виде для отображения только тех строк, которые вас интересуют:


Также тут можно задействовать опцию F . Это приведёт к тому, что утилита tail продолжит работать даже в том случае, если просматриваемый лог-файл будет удалён. При таком подходе, если этот файл снова будет создан, tail продолжит выводить данные из него на экран.

10. Чтение сжатых лог-файлов без их распаковки

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

Тут нам на помощью приходит группа команд, имя которых начинается с буквы «z». Эти команды являются альтернативой обычным командам, которые используются для работы с файлами журналов. Среди них — less , cat , grep , и другие.

Итак, используя команды zless , zcat , zgrep и подобные им, вам не придётся явным образом распаковывать сжатые файлы. Подробности об этих командах можно посмотреть здесь.

Кстати, когда я рассказал об этих «секретных» командах коллеге, мне досталась чашка кофе.

11. Использование команды less для чтения файлов

Если вам нужно просмотреть файл, особенно — большой, можно попробовать команду cat , но гораздо лучше поискать что-нибудь другое. Дело в том, что cat выведет на экран весь файл, что не так уж и удобно.

Для просмотра файлов можно воспользоваться редакторами вроде Vi или Vim, работающими в терминале, но если вам просто нужно прочесть файл, очень кстати окажется команда less .


Во время сеанса работы с less можно искать нужные фрагменты текста по ключевым словам, перемещаться по страницам, выводить данные с номерами строк, и так далее.

12. Повторное использование последнего элемента из предыдущей команды с помощью !$

Во многих ситуациях очень кстати оказывается возможность использования аргумента предыдущей команды.

Предположим, вам нужно создать директорию, а потом в неё перейти. Тут можно воспользоваться опцией !$ , вводя команду перехода после команды создания директории.


Применение !$ для использования аргумента последней команды

Ещё лучше то же самое делается с помощью сочетания клавиш Alt +. (точка). Точку можно использовать несколько раз для перебора опций последней команды.

13. Использование предыдущей команды в текущей команде с помощью !!

С помощью !! можно вызвать всю предыдущую команду. Этот приём оказывается особенно полезным, когда вам нужно выполнить команду и оказывается, что для её выполнения нужны привилегии суперпользователя. Например, на рисунке ниже показана ситуация, в которой команда sudo !! позволяет сэкономить немало времени.


Воспользуйтесь. для подстановки последней команды в качестве аргумента

14. Использование псевдонимов для исправления ошибок ввода

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


Теперь вам не придётся перенабирать эту команду если вы введёте её имя неправильно.

15. Копирование и вставка в терминале Linux

Этот совет несколько неоднозначен, так как он зависит от дистрибутива Linux и от терминала.

Но обычно команды копирования и вставки можно вызывать следующим образом:

  • Выделите текст, который надо скопировать, и щёлкните правой кнопкой мыши для его вставки (работает в Putty и других SSH-клиентах для Windows).
  • Выделите текст, который надо скопировать, после чего щёлкните центральной кнопкой мыши (колесом прокрутки) для того, чтобы его вставить.
  • Используйте комбинации клавиш Ctrl + Shift + C для копирования, и Ctrl + Shift + V для вставки.

16. Завершение работы команды или процесса

Возможно, то, что я тут хочу посоветовать, совершенно очевидно, однако, всё равно об этом расскажу. Если команда выполняется на переднем плане и вы хотите из неё выйти, можете нажать клавиши Ctrl + C для того, чтобы её остановить.

17. Использование команды yes для автоматизации интерактивных команд или скриптов

Если вам приходится работать с некоторыми командами или скриптами, которые предусматривают взаимодействие с пользователем, и вы знаете, что будете вводить Y в ответ на каждый вопрос программы, можете автоматизировать этот процесс с помощью команды yes . Делается это так:

18. Очистка содержимого файла без удаления самого файла

Если вы хотите очистить содержимое текстового файла, не удаляя сам файл, можете использовать следующую команду:

19. Выяснение наличия в директории файлов, содержащих определённый текст

Командная строка Linux поддерживает множество способов поиска информации. Однако, если вам просто нужно узнать, имеются ли в некоей директории файлы, которые содержат определённый текст, вы можете воспользоваться такой командой:


Однако я советую всем, кому нужен поиск в Linux, разобраться как следует с командой find .

20. Вызов справки для любой команды

Хочу завершить этот материал одним весьма очевидным, но, тем не менее, очень важным «трюком», который заключается в вызове справки для команды или инструмента командной строки.

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

Итоги: делитесь полезными советами!

Я намеренно не включил в этот материал команды вроде fuck, так как они не из тех стандартных средств, которые можно найти буквально повсюду. То, о чём я тут рассказал, может принести пользу при работе практически со всеми дистрибутивами Linux и оболочками командной строки без необходимости установки новых программ.

Если у нас не установлен пакет bash-completing, мы его устанавливаем:

Включить автозаполнение TTY для всех пользователей

Открываем / etc / profile

Ищем в / etc / profile следующие строки .

Последний активирует bash_completion для всех пользователей, включая root. Но он активирует его только на TTY, а не на эмуляторах терминала.

Сбрасываем TTY и все.

Как видите, мы добавили if в исходный файл, который подтверждает, что bash_completion запускается только тогда, когда мы находимся в Bash. Без этого условия GDM выдаст ранее упомянутую ошибку, поскольку GDM будет вызывать bash_completion и по какой-то причине конфликтует с xsession.

Включить автозаполнение в эмуляторах терминала для всех пользователей

Ищем в /etc/bash.bashrc следующие строки .

Последний активирует bash_completion для всех пользователей, включая root. Но он включит его только в эмуляторах терминала, но не в TTY.

Мы перезапускаем любой терминал и изменения вступят в силу.

Включить автозаполнение в эмуляторах терминала только для одного пользователя

Мы должны создать (или отредактировать, если он существует) файл

Добавляем (или ищем, если их нет, но прокомментировали, как это сделано в /etc/bash.bashrc) так, чтобы это выглядело так:

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

Мы перезапускаем консоль, и изменения вступят в силу.

Включите автозаполнение при желании

Нам просто нужно запустить bash_completion в тот момент, когда мы хотим его использовать. Он будет деактивирован, когда мы завершим сеанс в терминале (с помощью команды exit) или закроем терминал, который мы используем, если мы находимся в графической среде. Чтобы запустить его, когда захотим, мы делаем:

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Из Linux » ФайлДавайте использовать Linux » Как включить автозаполнение в терминале

Настроенный по дефолту терминал — унылое зрелище, отпугивающее новичков и наводящее тоску на гуру. Многое из того, что способен дать командный интерпретатор пользователю, оказывается скрыто за семью замками, а то, что остается доступным — просто неудобно. Перед тем, как консоль станет действительно сподручным инструментом, придется изрядно попотеть.

Полезная инфа в приглашении

Приглашение командного интерпретатора bash формируется на основе содержимого переменной окружения PS1. Если верить man-страницам, эта переменная может содержать любые строки, а также довольно большой набор специальных управляющих символов, которые при выводе приглашения будут превращены в актуальные данные. Так, например, в дистрибутиве Ubuntu содержимое переменной PS1 выглядит так:

А при выводе на экран превращается во всем знакомую строку вида:

Нетрудно догадаться, что юзер здесь появляется за счет управляющего символа 'u', имя хоста — за счет 'h', а текущий каталог — это 'w'. Неуклюжая запись, содержащая в себе слова debian_chroot, это всего лишь индикатор того, находится ли пользователь в chroot-окружении. Такое лаконичное приглашение, конечно, удобно, но содержит далеко не всю информацию, которую bash способен отобразить. В его арсенале есть как минимум два десятка различных управляющих последовательностей, о которых многие пользователи даже не подозревают. Вот список наиболее интересных из них:

  • d — текущая дата
  • j — количество фоновых заданий
  • A — текущее время
  • ! — номер команды в истории

Кроме того, в PS1 вполне можно использовать текущие переменные окружения, а если учитывать, что перед каждым выводом на экран PS1 перечитывается, то туда можно засунуть такие вкусности, как, например, статус последней выполненной команды (переменная $?), чтобы знать, было ли ее исполнение успешным.

Управляющий символ 'n' также допустим в PS1, поэтому приглашение к вводу можно сделать многострочным, а заодно визуально отделить его от остального текста (с помощью начальной пустой строки):

Но и это еще не все. Пример с индикатором chrootокружения показывает, что в приглашении можно использовать вывод любых сторонних приложений, а это открывает просто безграничные возможности по его кастомизации. Например, следующим образом в приглашение можно добавить данные о текущей погоде, количестве непрочитанных писем в gmail и уровне сигнала Wi-Fi:

local city="Moscow"
curl -s "http://www.google.com/ig/
api?weather=$city" | sed 's|.<temp_c data ])"/>.*|1|'
>

local login="логин"
local password="пароль"
wget --secure-protocol=TLSv1 --timeout=3 -t 1 -q -O — https://$:$@
mail.google.com/mail/feed/atom --nocheckcertificate | grep fullcount | sed
"s/<fullcount>(.*)</fullcount>/1/"
>

wifi() /sbin/iwconfig wlan0 | grep Quality | cut -d = -f2 | awk ''
>
PS1='n weather : unread_mail : wifi :wn
u@h:$?$ '

Все это нужно поместить в конец

/.bashrc и выставить на файл права 600, чтобы никто не смог подсмотреть пароли. Результат будет примерно таким:

Раскрашиваем консоль

При работе в консоли пользователь часто получает большое количество никак не отформатированной информации. Порой выбрать в потоке данных действительно необходимое довольно сложно. Благодаря специальным непечатаемым escape-последовательностям мы можем изменить цвет и фон выводимых символов, чтобы облегчить восприятие данных.

Все escape-последовательности заключаются в [�33[ и ], а после кода цвета должна еще стоять буква m. Все цвета расписаны в справочной странице. Например, черному соответствует 0;30, зеленому — 0;32, красному — 0;31, желтому — 1;33, белому — 1;37 и так далее. Чтобы в строке приглашения выводились имя системы (символ h) и логин пользователя (u), подсвеченные красным цветом, а текущий каталог — желтым (w), в конфиге

/.bashrc заменяем значение переменной PS1 на следующее:

При необходимости через точку с запятой можно указать цвет фона. Для этой цели используются числа от 40 (черный) до 47 (белый).

Все это также можно использовать в скриптах, хотя, чтобы не путаться, в этом случае лучше задействовать переменные, которые потом и вызывать в нужном месте. Например:

local GRAY="[�33[1;30m]"
local NO_COLOUR="[�33[0m]"

Не забываем о том, что некоторые команды поддерживают цветной вывод. Проще это решить при помощи алиасов:

alias ls='ls --color=auto'
alias grep='grep --color=auto'

И так далее. За настройки цветов каталогов и файлов с разным расширением отвечает утилита dircolors, устанавливающая переменную LC_COLORS. Чтобы получить все значения, просто вводим:

Использовав полученный результат как шаблон и сохранив его в / etc/DIR_COLORS (либо в персональном конфиге

/.dir_colors), можно создать свою раскраску.

$ alias makec='cout data/make-gcc.cfg'

Теперь проверяем работоспособность, используя заранее подготовленный Makefile:

$ makec -f Makefile

Автодополнение bash

Одна из самых удобных функций, имеющихся в bash — автодополнение команд по клавише <Tab>. К этому быстро привыкаешь, и кажется, что улучшить уже ничего нельзя. Однако в разных дистрибутивах автодополнение работает по-разному.

Например, в современных Linux-дистрибутивах, ориентированных на обычного пользователя, bash не только дополняет саму команду, но и предлагает дополнительные параметры. Однако в Gentoo и производных (вроде Calculate Linux) такого нет. Здесь приходится помнить все параметры назубок. Как такое может быть? Некоторые разработчики дистрибутивов используют патченые версии bash?
На самом деле, возможность автодополнения в bash — расширяемая функция. За необходимую функциональность отвечает встроенная команда compgen, генерирующая соответствующие списки. Все настройки производятся в файле /etc/bash_completion (или пользовательском

/.bash_completion), хотя в некоторых дистрибутивах можно найти целый каталог /etc/bash_completion.d, в котором обычно собраны настройки, специфичные для отдельных программ.

В самом простом случае файл содержит программу и указания для bash по дополнению имен файлов.

Например, чтобы MPlayer предлагал пользователю в качестве автодополнения только файлы с расширением avi и mpg, пишем такое правило: complete -f -X ‘!*.@(avi|mpg|AVI|MPG/so)’ mplayer Но это самый простой вариант, ведь MPlayer имеет большое количество дополнительных параметров, а значит, ему потребуется описать шрифты, звуковые файлы, субтитры и так далее. Все это легко решается при помощи оператора case. Поддерживаются регулярные выражения, что немного упрощает создание правил.

Обычно майнтейнеры конкретного пакета сами составляют списки параметров программы для bash_completion. Никаких чудес здесь нет.

Например, для tar создаем такое правило:

COMPREPLY=( $( compgen -W 'c t x u r d A' -- "$cur" ) )

Как видишь, мы просто перечислили все параметры, и теперь в процессе ввода bash сам выдаст этот список. Команда compgen имеет ряд параметров. Так '-b' позволяет получить список встроенных команд оболочки, '-c' — имена команд, '-v' — имена переменных и так далее. Все подробности можно найти в man-странице bash, в секциях complete и compgen.

Продвинутые настройки

Bash — довольно развитый командный интерпретатор, поддерживающий кучу разных настроек. Причем из этих настроек можно получить гораздо больше профита, чем из настроек поведения терминала, выполненных с помощью утилит setterm и stty. Список всех возможных опций можно посмотреть командой «shopt -p» (shopt — сокращение от Shell Options). Приведем самые интересные из них:

  • autocd — если эта опция включена, то можно просто написать путь к каталогу (опустив команду cd), чтобы в него переместиться;
  • cdspell — bash будет пытаться исправлять простые опечатки (например, /ect/init.d вместо /etc/init.d) в аргументах команды cd;;
  • checkjobs — не дает выйти из консоли, пока в ней есть выполняющиеся задания;
  • cmdhist — объединение многострочных команд в одну строку так, чтобы тебе было проще искать их в истории;
  • dirspell — исправление небольших ошибок в написании имени директории при автодополнении;
  • globstar — позволит использовать конструкцию вида **, обозначающую «все файлы, начиная с текущего каталога, рекурсивно»;
  • Очень удобный новый wildchar — например, данная конструкция отобразит все mp3 в текущем и вложенных каталогах:

Согласись, это гораздо короче и удобнее, чем:

$ find ./ -name "*.mp3" -type f -print

Устанавливаются опции следующим образом:

$ shopt -s autocd cdspell checkjobs cmdhist dirspell globstar

1.Bash умеет сокращать путь к текущему каталогу в приглашении, если он становится слишком длинным. Для управления этой функцией предусмотрена переменная окружения PROMPT_DIRTRIM. При превышении уровня вложенности каталогов, указанного в этой переменной, путь будет сокращен. Пример использования:

2.Bash поддерживает «умный» метод помещения команд в историю, позволяя освободить ее от банальностей вроде ls. В историю не будут попадать дубликаты и команды ls, bg, fg, exit после выполнения следующей команды:

3. Bash умеет делать так, чтобы команды, выполненные с использованием sudo, автоматически попадали в файл истории root'а и не засоряли историю пользователя. Просто добавь следующую строку в файл /etc/bash.bashrc:

Индикатор прогресса

Отсутствие индикатора прогресса у большинства консольных утилит — одна из главных проблем для тех, кто часто работает в консоли. И хорошо, если под рукой есть mc, который многие так и используют, чтобы получить окошко с прогрессом. А что если это голая консоль, а тебе требуется сохранить бэкап на флешку, смонтированную в режиме sync? В этом случае тебе поможет rsync, который хоть и несколько замедляет процесс копирования, но зато обеспечивает вывод на экран шкалы прогресса. Помещаем в

/.bashrc следующую строку:

alias cpr='rsync --progress'

И используем команду cpr вместо cp:

$ cpr file1 file2

Если добавить опцию '--remove-source-files', то исходные файлы будут удалены (правда, следует помнить, что в пределах одной файловой системы mv гораздо быстрее rsync). Единственный минус — прогресс отображается для каждого файла в отдельности, общий прогресс увидеть нельзя.

Чтобы увидеть ход выполнения, например, при создании архива, можно использовать утилиту pv (Pipe Viewer). Технически она представляет собой замену стандартного cat, способную не только тупо копировать байты на выход, но и показывать прогресс этой операции. Например:

$ tar -czf — /path/to/dir | pv > /path/to/archive.tgz
758MB 0:01:29 [8,48MB/s] [ <=>

Уже хорошо. Но не хватает времени завершения. Для этого надо передать утилите pv размер каталога (в байтах) с помощью ключа '-s':

$ tar -czf — /path/to/dir | pv -s $(du -sb /path/to/dir | grep -o '4*') > /path/to/archive.tgz
461MB 0:00:21 [ 32MB/s] [=======================================> ] 60% ETA 0:00:13

Каждый раз набирать такую конструкцию не очень удобно, лучше сделать алиас.

Закладки каталогов в консоли

При выполнении операций администрирования приходится часто переходить по каталогам файлового дерева. Bash поддерживает ряд сокращений (например, чтобы вернуться в домашний каталог, просто вводим «cd», в предыдущий каталог — «cd -»), но этого мало. Конечно, можно использовать псевдонимы (aliases), вроде:

alias cdwww='cd /var/www'

Но этого все равно бывает недостаточно в том случае, если список каталогов большой. И главное — использование алиасов не очень удобно. Так, чтобы создать новый псевдоним, нужно вручную прописать его в

/.bashrc и перезапустить терминал. Небольшой скрипт Directory Bookmarks for BASH (dirb.info/bashDirB) расширяет набор сокращений, позволяя на лету создавать закладки на нужные каталоги и переходить в них короткой командой.

И добавляем в файл

Теперь каждая новая сессия будет поддерживать закладки. Переходим в нужный каталог и сохраняем его в закладку:

$ cd /var/www
$ s www

После этого будет создан файл

/.DirB/www, содержащий ссылку на закладку. Теперь, чтобы вернуться в указанный каталог с любого места файловой системы, достаточно ввести в консоли «g www». Аналогичным образом можно создавать любое количество закладок. Но это не все параметры. Например, параметр «p» позволяет запомнить последние перемещения и выводит их в консоли:

И, наконец, команда s1 позволит просмотреть листинг закладок. Для удаления закладки используем ключ '-r'.

Также следует знать, что bashDirB модифицирует переменную PS1 таким образом, что в приглашении выводится время и номер текущего каталога в history. Если тебя это не устраивает, просто закомментируй соответствующую строку в скрипте.

Фортунки

В некоторых Linux-дистрибутивах после запуска консоли выводится небольшая цитата. Практической пользы от нее вроде и нет, но небольшое шуточное высказывание повышает настроение и настраивает на рабочий лад. Тематические пакеты с базами высказываний называются fortunes, а сами цитаты — фортунками.

За несколько десятков лет в Сети появилось большое количество сборников цитат, которые легко интегрируются в консоль. Чтобы установить их в Debian или Ubuntu, достаточно ввести команду:

$ sudo apt-get install fortunes fortunes-debianhits fortunes-ubuntu-server fortunes-min fortune-mod fortunes-ru

После установки необходимо настроить вывод цитат в консоль. В самом простом случае достаточно прописать в конфиг

/.bashrc всего одно слово:

Далее следует перезапустить терминал или перезагрузить файл настроек (команда «source

/.bashrc»). Cписок выводимых категорий фортунок можно получить, введя:

После установки все фортунки помещаются в один из подкаталогов /usr/share/games/fortunes, откуда их и забирает программа. В случае необходимости при помощи ключа '-m' можно указать шаблон фортунок, которые будут выводиться. После добавления своих фортунок следует использовать утилиту strfile для создания индекса (strfile файл_фортунок).

$ sudo apt-get install cowsay xcowsay

По умолчанию корова не знает, что сказать, умную мысль ей надо подкинуть. Например, выведем uptime:

Или фортунку (так реализовано в Linux Mint):

Кроме стандартной коровы доступны и другие персонажи, соответствующие названию файлов в подкаталоге /usr/share/cowsay/ cows. Вызвать их можно при помощи параметра '-f'. Также ряд параметров изменяют внешний вид коровы: '-t' — усталая корова, '-p' — параноидальная, '-w' — обалдевшая и так далее. Чтобы автоматизировать процесс, заносим строку запуска в

COWDIR=/usr/share/cowsay/cows/;
COWNUM=$(($RANDOM%$(ls $COWDIR | wc -l)));
COWFILE=$(ls $COWDIR | sed -n ''$COWNUM'p'); fortune |
cowsay -f $COWFILE

Заключение

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

Перенос директории dotfiles

Перенос директории dotfiles с одного компа (IP-адрес 192.168.1.1, порт 10000) на другой при помощи netcat и pv:

host1$ tar -cf — dotfiles | pv | nc -l -p 10000 -q 5
host2$ nc 192.168.1.1 10000 | pv | tar -xf

В случае, если host1 работает под управлением OpenBSD, команда должна выглядеть так:

obsdhost1$ tar -cf — dotfiles | pv | nc -l 10000

Пишем в твиттер легко и непринужденно

$ twit 'Привет из консоли'

Не забываем про 140 символов.

How much is the FISH?

Новичкам в консоли следует внимательно посмотреть в сторону альтернативного командного интерпретатора под названием FISH (Friendly Interactive Shell). Его преимущества перед bash довольно внушительны. Fish на полную катушку использует возможность управления цветами терминала. Он оснащен гораздо более мощной системой автодополнения, которая выводит на экран не только списки каталогов, аргументов и имена команд, но и массу другой полезной информации (например, рядом с каждой опцией помещается описание того, что она делает). В Fish встроена очень хорошая система подсказок, так что если ты допустишь ошибку, то получишь обширное разъяснение того, что произошло, и способы обхода проблемы. Наконец, скриптовый язык Fish гораздо проще и логичнее стандартного языка sh.

Читайте также: