Обновяване на предпочитанията за бисквитки

Как да работим с 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 ще превърти останалите опции.

20250328_rSIK6FMv

Търсене с 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.

20250328_mCu9EClB

Интерактивно редактиране на команди с 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