Как да използвате командата history в Linux

Обвивката на Linux запазва история на командите, които изпълнявате, и можете да я търсите, за да повторите командите, които сте изпълнявали в миналото. След като разберете командата за история на Linux и как да я използвате, тя може значително да повиши вашата производителност.

Манипулиране на историята

Като Известно е казал Джордж Сантаяна, „Тези, които не могат да си спомнят миналото, са осъдени да го повтарят.” За съжаление в Linux, ако не можете да си спомните миналото, не можете да го повторите, дори и да искате.

Тогава е полезна командата за история на Linux. Позволява ви да преглеждате и повтаряте предишните си команди. Това не е предназначено просто да насърчи мързела или да спести време – има и фактор за ефективност (и точност). Колкото по-дълга и по-сложна е една команда, толкова по-трудно е да се запомни и въведе, без да се прави грешка. Има два типа грешки: едната, която пречи на командата да работи, и тази, която позволява на командата да работи, но я кара да направи нещо неочаквано.

Командата за история елиминира тези проблеми. Както повечето команди на Linux, има повече, отколкото си мислите. Въпреки това, ако научите как да използвате командата history, тя може да подобри използването на командния ред на Linux всеки ден. Това е добра инвестиция на вашето време. Има много по-добри начини да използвате командата history, отколкото просто да натискате многократно стрелката нагоре.

Команда за история

В най-простата си форма можете да използвате командата history, като просто напишете нейното име:

history

В

След това списъкът с използваните преди това команди се записва в прозореца на терминала.

Пример за изход от

Командите са номерирани, като най-скоро използваните (тези с най-високи номера) са в края на списъка.

За да видите определен брой команди, можете да предадете номер в историята на командния ред. Например, за да видите последните 10 команди, които сте използвали, въведете следното:

history 10

В

Можете да постигнете същия резултат, ако прекарате историята през команда за опашка. За да направите това, въведете следното:

history | tail -n 10

В

Повтарящи се команди

Ако искате да използвате повторно команда от списъка с история, въведете удивителен знак (!) и номера на командата без интервали между тях.

Например, за да повторите команда номер 37, трябва да въведете тази команда:

!37

Ан

За да повторите последната команда, въведете отново два удивителни знака без интервали:

!!

Ан

Това може да бъде полезно, когато издадете команда и забравите да използвате sudo. Въведете sudo, един интервал, двойните удивителни знаци и след това натиснете Enter.

За следващия пример въведохме команда, която изисква sudo. Вместо да въвеждаме отново целия ред, можем да запазим няколко натискания на клавиши и просто да напишем sudo !!, както е показано по-долу:

mv ./my_script.sh /usr/local/bin/
sudo !!

Ан

Така че можете да въведете съответното число от списъка, за да повторите команда или да използвате двойните удивителни знаци, за да повторите последната команда, която сте използвали. Но какво ще стане, ако искате да повторите петата или осмата команда?

  Как да играете игри с Itch.io на Linux

Можете да използвате един удивителен знак, тире (-) и номера на всяка предишна команда (отново без интервали), за да я повторите.

За да повторите 13-та предишна команда, трябва да въведете следното:

!-13

Ан

Търсене на команди по низ

За да повторите последната команда, която започва с конкретен низ, можете да въведете удивителен знак и след това низа без интервали и след това да натиснете Enter.

Например, за да повторите последната команда, започнала със sudo, трябва да въведете тази команда:

!sudo

Ан

В това обаче има елемент на опасност. Ако последната команда, започнала със sudo, не е тази, която мислите, че е, ще стартирате грешната команда.

За да осигурите предпазна мрежа обаче, можете да използвате модификатора :p (печат), както е показано по-долу:

!sudo:p

Ан

Това инструктира историята да отпечата командата в прозореца на терминала, вместо да я изпълнява. Това ви позволява да видите командата, преди да я използвате. Ако това е командата, която искате, натиснете стрелката нагоре и след това натиснете Enter, за да я използвате.

Ако искате да намерите команда, която съдържа конкретен низ, можете да използвате удивителен знак и въпросителен знак.

Например, за да намерите и изпълните първата съвпадаща команда, която съдържа думата „псевдоними“, трябва да въведете тази команда:

!?aliases

Ан

Това ще намери всяка команда, която съдържа низа „псевдоними“, независимо къде се появява в низа.

Интерактивно търсене

Интерактивното търсене ви позволява да прескачате през списък със съвпадащи команди и да повторите желаната.

Просто натиснете Ctrl+r, за да започнете търсенето.

Прозорец на терминала след

Докато въвеждате уликата за търсене, ще се появи първата съответстваща команда. Буквите, които въвеждате, се появяват между отметката (`) и апострофа (‘). Съвпадащите команди се актуализират, докато пишете всяка буква.

А

Всеки път, когато натиснете Ctrl+r, вие търсите назад за следващата съответстваща команда, която се появява в прозореца на терминала.

А

Когато натиснете Enter, показаната команда ще се изпълни.

В

За да редактирате команда, преди да я изпълните, натиснете клавиша със стрелка наляво или надясно.

А

Командата се появява в командния ред и можете да я редактирате.

Можете да използвате други инструменти на Linux, за да търсите в списъка с история. Например, за да преведете изхода от историята в grep и търсене на команди, които съдържат низа „псевдоними“, можете да използвате тази команда:

history | grep aliases

В

Промяна на последната команда

Ако трябва да поправите печатна грешка и след това да повторите командата, можете да използвате знака за символ (^), за да я промените. Това е страхотен трик, за да имате в ръкава си всеки път, когато сбъркате команда или искате да я изпълните отново с различна опция или параметър от командния ред.

За да го използвате, въведете (без интервали) карета, текста, който искате да замените, друга карета, текста, с който искате да го замените, друга карета и след това натиснете Enter.

Например, да предположим, че въведете следната команда, като случайно напишете „shhd“ вместо „sshd“:

sudo systemctl start shhd

Можете лесно да коригирате това, като напишете следното:

^shhd^sshd^

А

Командата се изпълнява с „shhd“, коригиран на „sshd“.

Изтриване на команди от списъка с история

Можете също да изтриете команди от списъка с история с опцията -d (изтриване). Няма причина да запазите грешно написаната си команда в списъка с историята.

  Как да защитите USB флаш устройство на Linux

Можете да използвате grep, за да го намерите, да предадете номера му в историята с опцията -d, за да го изтриете, и след това да потърсите отново, за да се уверите, че го няма:

history | grep shhd
history -d 83
history | grep shhd

В

Можете също да подадете набор от команди на опцията -d. За да изтриете всички записи в списъка от 22 до 32 (включително), въведете тази команда:

history -d 22 32

За да изтриете само последните пет команди, можете да въведете отрицателно число, както следва:

history -d -5

Ръчно актуализиране на файла с история

Когато влезете или отворите терминална сесия, списъкът с историята се чете от файла с историята. В Bash файлът с историята по подразбиране е .bash_history.

Всички промени, които правите в текущата сесия на прозореца на терминала, се записват във файла с историята само когато затворите прозореца на терминала или излезете от него.

Да предположим, че искате да отворите друг прозорец на терминала, за да получите достъп до пълния списък на историята, включително командите, които сте въвели в първия прозорец на терминала. Опцията -a (всички) ви позволява да направите това в първия терминален прозорец, преди да отворите втория.

За да го използвате, въведете следното:

history -a

В

Командите се записват безшумно във файла с история.

Ако искате да запишете всички промени в списъка с история във файла с историята (ако сте изтрили някои стари команди, например), можете да използвате опцията -w (запис), както следва:

history -w

В

Изчистване на списъка с история

За да изчистите всички команди от списъка с история, можете да използвате опцията -c (изчистване), както следва:

history -c

Ако искате допълнително да принудите тези промени във файла с историята, използвайте опцията -w, както следва:

history -w

Сигурност и хронологията

Ако използвате някакви приложения, които изискват от вас да въведете чувствителна информация (като пароли) в командния ред, не забравяйте, че това също ще бъде запазено във файла с история. Ако не искате определена информация да бъде запазена, можете да използвате следната командна структура, за да я изтриете незабавно от списъка с история:

special-app my-secret-password;history -d $(history 1)
history 5

А

Тази структура включва две команди, разделени с точка и запетая (;). Нека разбием това:

special-app: Името на програмата, която използваме.
my-secret-password: Тайната парола, която трябва да предоставим за приложението в командния ред. Това е краят на първата команда.
history -d: В команда две извикаме опцията -d (изтриване) на историята. Това, което ще изтрием, идва в следващата част от командата.
$(история 1): Това използва заместване на команда. Частта от командата, съдържаща се в $(), се изпълнява в подчерупка. Резултатът от това изпълнение се публикува като текст в оригиналната команда. Командата history 1 връща предишната команда. Така че можете да мислите за втората команда като history -d „последна команда тук“.

Можете да използвате командата history 5, за да се уверите, че командата, съдържаща паролата, е премахната от списъка с история.

Има обаче още по-прост начин да направите това. Тъй като Bash игнорира редове, които започват с интервал по подразбиране, просто включете интервал в началото на реда, както следва:

 special-app another-password
history 5

А

Командата с паролата не се добавя към списъка с история. Причината, поради която този трик работи, се съдържа във файла .bashrc.

  Как да копаете биткойн злато (BTG) криптовалута на Linux с помощта на Minergate

Файлът .bashrc

Файлът .bashrc се изпълнява всеки път, когато влезете или отворите прозорец на терминал. Той също така съдържа някои стойности, които контролират поведението на командата history. Нека редактираме този файл с gedit.

Въведете следното:

gedit .bashrc

В

В горната част на файла виждате два записа:

HISTSIZE: Максималният брой записи, които списъкът с историята може да съдържа.
HISTFILESIZE: Ограничението за броя на редовете, които може да съдържа исторически файл.

Тези две стойности взаимодействат по следните начини:

Когато влезете или стартирате сесия на терминален прозорец, списъкът с историята се попълва от файла .bash_history.
Когато затворите прозорец на терминал, максималният брой команди, зададени в HISTSIZE, се записват във файла .bash_history.
Ако опцията за обвивка histappend е активирана, командите се добавят към .bash_history. Ако histappend не е зададен, .bash_history се презаписва.
След запазване на командите от списъка с история в .bash_history, хронологическият файл се съкращава, за да съдържа не повече от HISTFILESIZE редове.

Също в горната част на файла виждате запис за стойността на HISTCONTROL.

В

Можете да зададете тази стойност да прави някое от следните неща:

ignorespaces: Редове, които започват с интервал, не се добавят към списъка с история.
ignoredups: Дублиращи се команди не се добавят към файла с история.
ignoreboth: Активира и двете по-горе.

Можете също да изброите конкретни команди, които не искате да се добавят към вашия списък с история. Разделете ги с двоеточие (:) и ги поставете в кавички (“…”).

Трябва да следвате тази структура, за да добавите ред към вашия .bashrc файл и да замените командите, които искате да бъдат игнорирани:

export HISTIGNORE="ls:history"

Ан

Използване на времеви печати

Ако искате да добавите времеви печати към списъка с история, можете да използвате настройката HISTIMEFORMAT. За да направите това, просто добавите ред като следния към вашия .bashrc файл:

export HISTTIMEFORMAT="%c "

Имайте предвид, че има интервал преди затварящите кавички. Това не позволява на клеймото за време да се доближава до командите в списъка с команди.

Ан

Сега, когато стартирате командата history, виждате клеймо за дата и време. Обърнете внимание, че всички команди, които са били в списъка с хронология, преди да добавите времеви печати, ще бъдат маркирани с датата и часа на първата команда, която получава времеви печат. В този пример, показан по-долу, това беше команда 118.

Това е много дълготрайна времева марка. Въпреки това, можете да използвате токени, различни от %c, за да го прецизирате. Другите токени, които можете да използвате са:

%d: Ден
%m: Месец
%y: Година
%H: час
%M: Минути
%S: Секунди
%F: Пълна дата (формат година-месец-дата)
%T: Време (формат час:минути:секунди)
%c: Пълен печат за дата и час (формати ден-дата-месец-година и час:минути:секунди)

Нека експериментираме и използваме няколко различни токена:

export HISTTIMEFORMAT="%d n%m %T "

Експортирането HISTTIMEFORMAT=

Резултатът използва ден, месец и час.

Ако премахнем деня и месеца обаче, той просто ще покаже часа.

Всички промени, които направите в HISTIMEFORMAT, се прилагат към целия списък с история. Това е възможно, защото времето за всяка команда се съхранява като брой секунди от епохата на Unix. Директивата HISTTIMEFORMAT просто определя формата, използван за изобразяване на този брой секунди в четим от човека стил, като например:

export HISTTIMEFORMAT="%T "

В

Нашата продукция вече е по-управляема.

Можете също да използвате командата history за одит. Понякога прегледът на командите, които сте използвали в миналото, може да ви помогне да идентифицирате какво може да е причинило проблем.

Точно както можете в живота, в Linux можете да използвате командата history, за да преживеете отново добрите времена и да се поучите от лошите.