Трюки в bash

5 сентября 2008
Рубрика: Linux, Ubuntu, Заметки
Теги: , ,

Zeboton

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

Особенно удобно стало работать в терминале, когда я узнал о специальных командах bash.

История и bang-bang

История команд — очень удобный инструмент. С помощью стрелок вверх-вниз можно перемещаться по истории введённых команд. Кроме того, с помощью команды history можно просмотреть всю историю команд:

190 ps axu | grep htt
191 /www/bin/apachectl start
192 vi /usr/local/lib/php.ini
193 cat /www/logs/error_log
194 ps -auxw | grep http
195 pwd

Ничего удивительного.
Гораздо интереснее то, что называется bang-bang, или команда !!
!! означает последнюю команду в истории. Т.е. ввод !! в данном случае аналогичен вводу pwd.
Но и это еще не все. Можно ввести ! . ! ps в данном случае вызовет ps -auxw | grep http. Но будьте внимательны и сообщайте восклицательному знаку достаточно символов команды. Например ! p в данном случае будет аналогично pwd, а не ps -auxw | grep http (поскольку pwd ниже в истории) как возможно хотелось бы.

: p не просто смайлик

Для того чтобы избежать конфузов при использовании ! можно добавлять к нему смайлик : p. Это заставит bash вывести то, что он собирался выполнить. Кроме того, : p достаточно умен для того, чтобы добавить выведенную команду в историю.

В качестве примера:
! ps: p в нашем случае вернет ps -auxw | grep http. Убедившись что это именно то что нужно, можно ввести !! и bash выполнит ps -auxw | grep http.

Другие способы использования истории

Наверное самый примитивный способ — вызвать команду history, узнав номер необходимой команды, а затем использовать ! N, где N — номер команды в истории (например, !192). Не следует пренебрегать этой возможностью. Иногда запомнить !123 для какой-то постоянно нужной команды гораздо проще чем пользоваться другими способами.
Кстати, : p работает и тут.

Еще один удобный способ — нажать ^r (Ctrl-r) и начать вводить первые символы нужной команды. bash будет искать в истории подходящие команды.

Работа с агрументами

!$ (bang-dollar) означает последний аргумент последней команды.
К примеру тут:
ls /some/long/path/to/dir/
rm -rf !$

В результате выполниться команда rm -rf /some/long/path/to/dir/.

Кстати, : p тут тоже работает.

!* похожа на !$, но превращается во все аргументы последней команды.

Шапочки

Наверняка вы не раз вводили что-то типа
vi /etc/X22/xorg.conf

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

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

Ну и разумеется не стоит забывать про автодополнение. Один Tab дополняет команду насколько можно понять, второй выводит все варианты дальнейшего написания. Однако не следует этим злоупотреблять. Согласитесь, написать less быстрее, чем написать le и долбить по табу.

Алиасы

Полезно дать короткие имена часто используемым командам. Также полезно дать алиасы наиболее частым опечаткам.
Полезными алиасами могут быть:
alias ls='ls --color=auto'
alias mroe='more'
alias H='kill -HUP'
alias ssh-production='ssh www.myproject.com'
alias ssh-qa='ssh qa.myproject.com'
alias sl='ls'

7 комментариев для “Трюки в bash”

  1. Michael de`Oz9 декабря 2008 ~ 09:45

    Так себе трюки, хотя для людей видевших только виндвоз наверное выглядит как настоящее шаманство!

  2. Kawaikunee27 января 2009 ~ 12:43

    Свою жену как раз линуксу обучаю, статья очень подойдет.

  3. Zeboton27 января 2009 ~ 13:03

    Для Kawaikunee
    Думаю, что женщинам терминал лучше не показывать — от греха подальше 🙂

  4. Zeboton24 марта 2009 ~ 08:42

    Для анонима
    ОС, как и всё в этом мире, нужно выбирать исходя из потребностей и решаемых задач. Для большинства пользователей Ubuntu достаточно, а Gentoo для тех — кому Ubuntu не хватает.

  5. Anonymous24 марта 2009 ~ 07:46

    2Zeboton:
    думаю, что некоторым молодым людям лучше даже и не знать про gentoo ))))

  6. «Я и Ubuntu» » Как не сохранять команду в истории .bash_history5 февраля 2011 ~ 09:04

    […] выполнив команду history , и которой можно управлять, используя специальный синтаксис. Также Вам известно, что эта история храниться в файле […]

  7. Tucha30 января 2016 ~ 12:39

    … Иногда запомнить !123 для какой-то постоянно нужной команды гораздо проще чем пользоваться другими способами…
    Когда количество команд превышает максимальный размер HISTFILESIZE=1000 команды начинают «вытесняться» из этого файла (.bash_history)

Ваш комментарий

*