Документация по ОС FreeBSD
Четверг, 11.12.2025, 15:15
Главная
Регистрация
Вход
Приветствую Вас
Гость
|
RSS
Меню сайта
Главная страница
Новости в мире Unix
NEW
Каталог файлов
NEW
Установка и настройка
Ports & Packages
cvs
Безопасность
Работа с железом
X Window
Multimedia
Man pages
Net
Apache
DNS
FTP
Mail
Samba
Squid
SSH
VPN
РРР
Shell
IPFW
Tips'n'tricks
RFC
Книги по FreeBSD
Темы экзамена BSDA
Гостевая книга
Форум на bsdportal.ru
Каталог сайтов
Самый свежий софт
Каталог ссылок
Категории каталога
Shell
[40]
Главная
»
Статьи
»
Программирование
»
Shell
5 советов для работы с историей в Bash [2011]
Говорят что те, кто не помнит историю, обречены вновь и вновь повторять одно и то же. А если вы не умеете пользоваться историей в Bash, то вы не сможете использовать мощь вашей системы в полном объёме. Однако, начать никогда не поздно и возможно, прочитав эту заметку, вы откроете для себя несколько полезных и нужных в повседневной работе навыков работы с GNU Bash.
Если вы проводите какое-то количество времени в оболочке, то скорее всего знаете о том, что существует «история» команд, которые вы выполняли, аналогично тому, как ваш веб-браузер помнит историю посещённых вами веб-страниц. Хотя, конечно, история команд в оболочках появилась гораздо раньше истории посещённых страниц в браузерах.
Многие пользователи знают о том, что доступ к истории команд можно получить при помощи команды history или же при помощи клавиатурных комбинаций Ctrl+p (предыдущая команда) и Ctrl+n (следующая команда). Это очень полезные и часто используемые приёмы работы с историей, однако при помощи них не задействуете все возможности Bash для работы с историей. Давайте рассмотрим несколько трюков работы с историей Bash, пользуясь командой history или другими способами.
Использование номеров
Если вы дадите команду history, вы получите список последних введённых команд с порядковым номером перед каждой из них. Вы можете повторно запустить любую команду из истории при помощи конструкции
$ !n
где n — номер записи в истории. То есть, например, инструкция
$ !50
выполнит пятидесятую команду из истории. Также вы можете использовать конструкцию
$ !-n
если вам нужно выполнить n-ю по счёту команду, начиная с конца списка. Например, ваш вывод history выглядит так:
1 sudo su
2 exit
3 sudo apt-get update
тогда инструкция
$ !-3
запустит команду sudo su.
Вызов последней команды
Как часто вы вводите какую-то команду, а затем видите, что вы, намереваясь предварить её sudo, забыли это сделать? У меня такое происходит постоянно. Можно исправить это, вернувшись к последней команде при помощи клавиши «стрелка вверх» или при помощи комбинации Ctrl+p, затем, перейдя в начало строки при помощи клавиши Home или Ctrl+a вписать пропущенное sudo. Есть и более простой способ:
$ sudo !!
Это запустит последнюю команду (!!) при помощи sudo. Неплохо?
Вы, вероятно, знаете конструкцию !command, которая запустит последнюю команду из истории, которая начинается с command. Таким образом, если вы недавно запускали очень длинную команду и помните с чего она начиналась, такой способ запуска из истории может вам пригодиться. А знаете ли вы, что Bash в этом случае ищет не команду, а ищет подстроку? То есть, вам не нужно после восклицательного знака вписывать всю команду целиком, достаточно лишь первых символов. Допустим, вы запускали что-то вроде:
$ git commit -a -m "Various and sundry notes"
Многие пользователи введут
$ !git
чтобы повторить команду, однако зачатую вполне достаточно выполнить
$ !g
конечно же, при условии, что после искомой команды вы больше не выполняли команд, начинающихся с «g».
Если вам вдруг понадобится выполнить поиск не сначала строки, а в любой её части, воспользуйтесь конструкцией «!?string?». Например:
$ !?commit?
Вызов последнего параметра команды
Используя комбинацию «Esc+.» (Escape с точкой), вы можете вызывать из истории последнее слово, переданное команде в качестве аргумента. Например, вы запускали:
$ cp filename1 filename2
Теперь, если вы нажмёте «Esc+.», то вы получите «filename2». Попробуйте самостоятельно поиграть с этой функцией — очень полезная штука!
А что, если вам нужно не последнее слово, а скажем, второе? Или вообще все? Например, у вас в истории есть команда:
$ ls file1.txt file2.txt file3.txt file4.txt
и вам понадобилось вытащить два слова из середины? Легко!
$ ls !:2-3
Если же вам вдруг понадобились вообще все аргументы, переданные команде, вы можете воспользоваться такой конструкцией:
$ ls !:*
Поиск
Ещё одна полезная функция — это поиск при помощи «Ctrl+r». Нажмите «Ctrl+r» и в появившемся приглашении начните вводить часть какой-нибудь ранее ведённой команды. По мере ввода символов Bash будет пытаться найти в истории последнюю команду, содержащую указанные вами символы. После того, как найдёте, можете начать «Ctrl+r» ещё раз и Bash выведет более раннюю команду, если таковая имеется. После того, как вы отыщете нужную команду, просто нажмите «Enter» и она появится в вашей командной строке.
Если вам необходимо отредактировать команду, прежде чем запускать, воспользуйтесь традиционными «стрелкой влево» и «стрелкой вправо», чтобы переместить курсор в нужное место команды для исправления.
Безопасность
История команд очень полезная штука, однако иногда бывают ситуации, когда нежелательно, чтобы она сохранялась. Например, вы используете для работы разделяемую между многими пользователями систему и не хотите, чтобы системные администраторы системы выдели какие команды вы вводили. Даже если вы пользуетесь личным компьютером, всегда есть шанс, что он будет взломан и вам хотелось бы не хранить в истории действительно важные данные. В конце-концов вы можете захотеть не захламлять историю какими-то командами, поскольку в их хранении просто нет смысла. Например, вы можете часто пользоваться ls, однако зачем хранить её в истории, вместо того, чтобы хранить в ней только длинные и действительно полезные с точки зрения хранения команды?
Давайте посмотрим, каким способом можно управлять хранением команд в истории.
Первый способ — это определить в .bashrc переменную окружения со следующим значением:
HISTCONTROL=ignorespace:ignoredups
Опция ignorespace заставляет Bash игнорировать команды, начинающиеся с пробела. Если вам нужно, чтобы Bash не сохранил в истории команду, содержащую секретную информацию — просто предварите её пробелом.
Опция ingoredups исключает хранение в истории дубликатов команд, что часто помогает значительно разгрузить историю команд.
Вообще, некоторые дистрибутивы «из коробки» имеют эти опции установленными. Если это не ваш случай — просто добавьте строку в ваш ~/.bashrc.
Вы также можете заставить Bash игнорировать некоторые команды. Допустим, вы не хотите хранить в истории команды, содержащие имя какого-нибудь сервера. Просто определите значение переменной окружения HISTIGNORE и можете чувствовать себя спокойно:
HISTIGNORE="*myserver*"
Да, по поводу «спокойствия». На разделяемых системах некоторые пользователи могут видеть команды, запущенные вами при помощи утилит top и ps. Поэтому, если вы не уверены на 100% в надёжности системы, с которой работаете — не стоит запускать там какие бы то ни было команды, содержащие секретные данные.
Заключение
Очень надеюсь, что рассмотренные здесь приёмы пригодятся вам в повседневной работе и сделают её выполнение чуточку приятнее. Однако, это далеко не всё. Обязательно посмотрите man-страницу по history в вашей системе. Уверен, вы сможете найти для себя ещё массу полезного!
Источник:
http://www.ashep.org/2011/5-sovetov-dlya-raboty-s-istoriej-v-bash/
Категория:
Shell
| Добавил:
oleg
(28.04.2011) | Автор:
ashep
Просмотров:
1451
| Рейтинг:
0.0
/
0
|
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Всего комментариев:
0
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация
|
Вход
]
Форма входа
Друзья сайта
Google+
Copyright MyCorp © 2025