Как да работим с bash history в Linux
Познаването на основните техники за работа с историята ви позволява бързо да търсите, повтаряте и редактирате въведени преди това команди в Linux, като по този начин пестите време и намалявате риска от печатна грешка. Освен това възможността за персонализиране и изчистване на историята помага за гарантиране на сигурността чрез скриване на чувствителни данни.В настоящата статия:
- Как да видите историята на екипа.
- Как да търсите правилните команди.
- Как да повтаряте и променяте предишни команди.
- Как да използвате интерактивно редактиране на команди чрез fc.
- Настройки на Bash и конфигурационни файлове.
- Практически примери и сценарии.
Основни команди за работа с историята
Командата history - показва списък с последно въведените команди в bash shell с номериране.root@EuroHoster:~# history
1 ls /
2 pwd
3 du -sh /
4 ping 8.8.8.8
5 history
6 date
7 apt-get install sl
8 apt update
9 du -sh /
Команда history N - извежда последните N команди.
root@EuroHoster:~# history 5
5 history
6 date
7 apt-get install sl
8 apt update
9 du -sh /
Други полезни команди за работа с история в Linux
В допълнение към стандартните техники има и допълнителни инструменти, които позволяват по-задълбочен контрол и анализ на командните логове, нека разгледаме и тях.Повтаряне на командите по брой
!<номер> — повтаряне на команда с определен номер от списъка с история.root@EuroHoster:~# !2
pwd
/root
root@EuroHoster:~#
Повтаряне на предишната команда
!! — повтаря последната команда. Това е изключително полезно, ако забравите да довършите нещо.root@EuroHoster:~# ping
ping: usage error: Destination address required
root@EuroHoster:~# !! 8.8.8.8
ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=120 time=0.560 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=120 time=0.534 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=120 time=0.591 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=120 time=0.526 ms
--- 8.8.8.8 ping statistics ---
Повтаряне на командата по стечение на обстоятелствата
! — повтаря последната команда, започваща с посочения подниз.root@EuroHoster:~# !du
du -sh /
5.7G /
Директно търсене (Ctrl + R)
Когато активно използвате терминала, бързата навигация в историята се превръща във важно умение.Ето няколко начина да намерите желаната команда сред вече въведените.
Натиснете Ctrl + R и започнете да въвеждате подниз; шелът ще покаже последната команда, която има това съответствие. Повторното натискане на Ctrl + R ще превърти останалите опции.

Търсене с grep
Можете да филтрирате историята:root@EuroHoster:~# history | grep figlet
23 28 Mar 2025 10:46:53 apt-get install figlet
24 28 Mar 2025 10:46:58 figlet Hello
26 28 Mar 2025 10:47:24 figlet "Hello" | lolcat
42 28 Mar 2025 11:06:03 history | grep figlet
Редактиране и настройване на команди
Понякога се налага бързо да поправите печатна грешка или да промените някой от аргументите в наскоро изпълнена команда.Съществуват няколко начина да го направите, нека ги разгледаме подробно.
Бързо редактиране на предишната команда
Натиснете стрелката нагоре, направете промени и натиснете Enter.
Интерактивно редактиране на команди с fc
Командата fc (fix commands) отваря последните команди в избрания текстов редактор за редактиране, преди да бъдат изпълнени отново.По подразбиране Bash използва редактора, зададен в променливата на средата EDITOR или VISUAL (например vim или nano).
fc без параметри ще отвори последната команда; с параметри можете да посочите диапазон.
Пример:
fc -1 -5
Отваря последните 5 команди (от -5 до -1 включително) в редактора. След като запазите и излезете от редактора, всички тези команди ще бъдат изпълнени отново (като се вземат предвид вашите корекции).Позовавайки се на аргументите на предишната команда
!$ — последния аргумент на предишната команда.!^ — първия аргумент на предишната команда.
!:n — n-ти аргумент на предишната команда.
!:- — всички аргументи на предишната команда (без името на самата команда).
Персонализиране на историята
Променливи на средата
HISTSIZE — брой команди за текущата сесия.HISTFILESIZE — общ брой редове, съхранявани в ~/.bash_history
Пример за настройка в ~/.bashrc
export HISTSIZE=1000
export HISTFILESIZE=2000
Игнориране на дублиращи се команди
export HISTCONTROL=ignoredups — не записва последователни дубликати.Съществува и опция ignorespace - ако тя е активирана, командите, започващи с интервал, не се включват в историята.
Конфигурационни файлове на Bash
Различните дистрибуции могат да използват различни конфигурационни файлове:~/.bashrc — обикновено за интерактивни сесии на shell.
~/.bash_profile или ~/.profile —за сесиите за влизане.
Именно в тези файлове се правят промени в променливите на средата (HISTSIZE, HISTIGNORE и пр.). Можете също така да включите:
shopt -s histappend
Така че новите команди не презаписват историята, а се добавят в края на файла ~/.bash_history, което е особено полезно при работа в няколко терминала.Сигурност и чувствителни данни
Вашата история може да включва пароли, токени или ключове. За да избегнете записването на такива низове в историята си, можете да:- Въведете командата, започваща с интервал (ако е активирана функцията ignorespace).
- Предписване на шаблони в HISTIGNORE (например, 'passwd*').
- Използвайте променливи на средата за съхраняване на чувствителна информация.
Дополнительные настройки безопасности:
HISTIGNORE ви позволява да игнорирате определени команди и шаблони. Пример:export HISTIGNORE="ls:cd:exit:clear"
Възможно е също така периодично да изчиствате историята (history -c), но трябва да внимавате да не загубите полезни данни.Практически примери и сценарии
По-долу са изброени няколко типични ситуации, в които работата с историята на Bash спестява много време.Бързо изпълнете командата за инсталиране на пакета:
history | grep apt
Изведете всички команди с apt, намерете желаната (напр. apt-get install ) и я изпълнете по номер: !<номер>.
Можете също така да използвате (Ctrl + R), за да търсите в историята.
Поправка на печатна грешка:
nano /ect/hosts
Понял, опечатка в «ect» вместо «etc». Выполните: fc и отредактируйте.Ако командата е била изпълнена с грешка, например печатна грешка в името на директорията.
rsync -avz root@IP:/home_dir1 /home_dir1
Да предположим, че има печатна грешка в home_dir1 и в този случай ще изпълним:fc -s home_dir1=home_dir2
Двете директории home_dir1 ще бъдат променени на новата home_dir2 и ще бъде изпълнена командата rsync.Копиране на файл и по-нататъшна работа с него:
cp /path/to/myfile.txt /tmp
След това веднага гледайте файла:less !$
Тук !$ замества /tmp, последния аргумент на предишната команда.Заключение
Историята и разширенията на Bash спестяват много време, когато често повтаряте едни и същи команди или търсите нещо, което сте правили преди. Достатъчно е да познавате командата history, комбинацията Ctrl + R, както и !!, !<част_команди> и някои разширения (например !$ и !^).За допълнително удобство и безопасност:
- Използвайте fc за интерактивно редактиране.
- Настройте histappend и HISTCONTROL.
- Бъдете внимателни с чувствителните данни.
- Научете допълнителни променливи (като HISTIGNORE) и бързи клавиши на Bash.
С натрупването на опит всички тези техники ще ви помогнат да работите в терминала по-бързо, по-безопасно и по-ефективно.
28 Mar 2025, 12:10:45