Удобная работа в Bash

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

1. Потеря комманд в .history

   Многие  пользуются  стандартными  гномовским  или  кдешным эмуляторами
   терминала.  У  них  есть  возможность открывать в одном окне несколько
   оболочек – каждую в отдельной вкладке.

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

   К  тому  же  закрыв  первый  терминал,  а потом второй вы не найдете в
   истории  команд  набранных в первом терминале. Потому что по умолчанию
   bash не дописывает файл .history, а переписывает.

   Исправить  ситуацию  можно,  дописав в конфигурационный файл ~/.bashrc
   пару строк

        shopt -s histappend
        PROMPT_COMMAND=’history -a’

   Теперь  каждая  введенная  вами команда будет писаться в историю сразу
   же. Не бойтесь – дырку на жестком месте такая конфигурация не протрет.
   Не  так  уж  часто  вы  команды  в  баше набираете. 🙂 Да и слава богу
   кеширование дисков пока еще рулит.

2. Эвристическое исправление ошибок директорий

   Если дописать такую строчку

        shopt -s cdspell

   то bash будет пытаться исправлять допущенные вами опечатки (пропуски и
   перестановки символов, например /ect/init.d вместо /etc/init.d) в пути
   у  команды  cd.  Не  бойтесь,  у  rm такая фича работать уже не будет.
   Только у cd.

3. Не писать в историю подряд идущие строки-дубликаты

   Пишем в ~/.bashrc

        export HISTCONTROL=”ignoredups”

   А  если  вы  не  хотите,  чтобы  в  историю  попадали  вызовы каких-то
   “неинформативных” команд, то их логирование можно запретить:

        export HISTIGNORE=”&:ls:[bf]g:exit”

   После  этой команды в хистори не будут писаться команды &, ls, bg, fg,
   exit.  Можно  дописать  и  свои,  через  двоеточие, можно использовать
   шаблоны.

4. Не разрывать многострочные команды

   Еще команда в конфигурационный файл

        shopt -s cmdhist

5. Поиск по истории команд

   Иногда команды бывают большими и сложными, и чтобы заново ее не писать
   и  не искать по истории 100 раз нажимая “вверх”, можно воспользоваться
   поиском.

   Если  вы помните кусочек команды которую хотите найти, то можно просто
   нажать  в  bash’e комбинацию Ctrl + R и набрать этот кусочек. bash вам
   покажет   последнюю  команду  с  такой  подстрокой.  Можно  продолжать
   нажимать  Ctrl  +  R  и  bash  будет  выдавать более старые подходящие
   команды, подходящие под искомую строку.

6. Вернуться в предыдущую директорию

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

        [kpblca@localhost html]$ cd /var/www/html
        [kpblca@localhost html]$ cd /etc/
        [kpblca@localhost etc]$ vi my.cnf
        [kpblca@localhost etc]$ cd –
        /var/www/html
        [kpblca@localhost html]$

   Эта команда вернет нас в директорию где мы были раньше.

   ЗЫЖ
   Дополнительно  можно почитать man bash и найти там описание всех опций
   у shopt. Может быть еще что-то вам тоже пригодится.

   Для  многих  Linux-дистрибутивов  в  качестве  командной  оболочки  по
   умолчанию  используется  Bash.  Часто,  в  процессе  работы  с  данной
   оболочкой  “достают”  те  или иные неудобства, но на поиски их решения
   либо  нет  времени, либо просто много лени… В данном выпуске описаны
   некоторые раздражающие в работе моменты и возможные пути их решения.

1. Затирание истории команд

   Если  вы  работаете  в  терминале,  то  при открытии второго терминала
   последний  не  будет “помнить” тех команд, что вы вводили только что в
   первом.  К  тому  же, если вы закроете первый терминал, а чуть позже –
   второй,   то   сохранится  только  история  команд  второго  терминала
   (последнего закрытого).

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

   Решение:

   В файл ~/.bashrc добавить такие строки:

           shopt -s histappend
           PROMPT_COMMAND=’history -a’

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

2. Случайные опечатки

   Бывает,  что  при  быстром  наборе команды, вы пишете, например, “ect”
   вместо  “etc”  –  и узнаете об ошибке только набрав километровой длины
   строку и нажав Enter…

   Решение:

   В этом случае может помочь указание в файле .bashrc такой строки

           shopt -s cdspell

   Теперь после ввода команды “cd /ect” вы попадете в каталог “/etc”

3. Дубликаты команд в хистори

   Часто  в  работе приходится давать несколько одинаковых команд подряд.
   Например  “cd  ..” или “ps ax | grep something”. В результате, история
   команд  захламляется  дубликатами  строк,  после  чего бывает непросто
   добраться до истории команд, введенных ранее.

   Решение:

   добавить в .bashrc строку

           export HISTCONTROL=”ignoredupes”

   Это  избавит  от  записи  в истории дубликатов команд. Можно пойти еще
   дальше,  и  запретить  запись  в  историю  команд  ls,  bg, fg и exit.
   Делается это добавлением строки

           export HISTIGNORE=”&:ls:[bf]g:exit”

4. Многострочные команды разбиваются в истории на несколько строк

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

   Решение:

   Добавить в файл .bashrc строку

           shopt -s cmdhist

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

5. Быстрый поиск команды в хистори

   Чтобы  найти  какуюлибо  команду  (например,  ping)  в  истории, можно
   сделать так:

           history | grep “foo”

   Но это неудобно и совсем не функционально.

   Решение:

   Нажать  комбинацию клавиш CTRL+R – после этого найти нужную команду по
   вводимому сочетанию букв.

6. Как перейти в последнюю директорию?

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

   Решение:

   Использовать команду

           cd –

   После  чего  вы  перейдете в директорию, в которой только что были (до
   выполнения этой команды).

7. Как обратиться к объекту, с которым только что работал?

   Представим  ситуацию:  сисадмин  проводит  неспешный  осмотр каталогов
   своих  пользователей,  вытирая  в процессе “ненужный хлам” – например,
   заготовленные   непосильным   трудом  несколько  гигабайт  мп3-музыки.
   Положим, что делает он это примерно так:

           ls /home/user/mp3
           rm -rf /home/user/mp3

   В данном случае будет полезно воспользоваться таким сочетанием клавиш:

           ESC . (нажать “ESC”, а потом “.” последовательно)

   Как  результат, сработает автодополнение, используя объект, к которому
   было  последнее  обращение.  В данном случае, если набрать команду “ls
   /home/user/mp3”,    затем   набрать   “rm   -rf”   и   потом   нажать
   последовательно  ESC  и  .  –  то  после набранного “rm -rf” командная
   строка автоматически дополнится “/home/user/mp3”.

Добавить комментарий

Войти с помощью: