GNU/Linux >> Znalost Linux >  >> Linux

Příkaz historie v Linuxu Vysvětleno do hloubky

Když často používáte příkazový řádek Linuxu, efektivní používání příkazu historie může výrazně zvýšit produktivitu.

V Linuxu existuje velmi užitečný příkaz, který vám ukáže všechny poslední příkazy, které byly nedávno použity. Příkaz se jednoduše nazývá history .

Zobrazit časové razítko

Obvykle, když zadáte history v příkazovém řádku se ve výchozím nastavení zobrazuje číslo následované příkazy, které jste nedávno použili. Pro účely auditu může být užitečné zobrazit časové razítko spolu s příkazem, jak je uvedeno níže.

Chcete-li povolit časové razítko v history výstup příkazu, musíte nakonfigurovat HISTTIMEFORMAT Bash proměnná.

export HISTTIMEFORMAT="%F %T "
history | more
1  2020-06-25 19:02:39 systemctl restart network
2  2020-06-25 19:02:43 exit
3  2020-06-25 19:02:47 id
4  2020-06-25 19:02:56 cat /etc/hosts

Prohledávání historie příkazů

Toto může být vaše nejčastěji používaná funkce history příkaz . Když jste již provedli velmi dlouhý příkaz, můžete jednoduše prohledat historii pomocí klíčového slova a znovu spustit stejný příkaz, aniž byste jej museli zadávat celý.

  1. Stiskněte Control+R a zadejte klíčové slovo.
  2. Když uvidíte svůj příkaz, stiskněte klávesu Enter, která provede příkaz z historie.

V následujícím příkladu jsem hledal host , který zobrazil předchozí příkaz cat /etc/hosts v historii, která obsahovala slovo host .

(reverse-i-search)`host': cat /etc/hosts
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

Někdy chcete upravit příkaz z historie před jeho provedením. Můžete například vyhledat systemctl , který zobrazí systemctl restart network z historie příkazů vyberte tento příkaz (stisknutím ESC klíč) a změňte restart stop .

Poté jej spusťte znovu pouhým stisknutím Enter .

(reverse-i-search)`systemctl': systemctl stop network
systemctl stop network

Opakování posledního provedeného příkazu

Někdy můžete z různých důvodů zopakovat předchozí příkazy. Níže jsou uvedeny 4 různé způsoby opakování posledního provedeného příkazu.

  1. Použijte up arrow zobrazíte předchozí příkaz a stisknutím klávesy Enter jej provedete.
  2. Zadejte !! a z příkazového řádku stiskněte enter
  3. Zadejte !-1 a z příkazového řádku stiskněte enter.
  4. Stiskněte Control+P zobrazí předchozí příkaz, stisknutím klávesy Enter jej provedete.

Spustit konkrétní příkaz

V následujícím příkladu, pokud chcete zopakovat příkaz #4, můžete provést !4 jak je uvedeno níže.

history | more
systemctl restart network
exit
id
cat /etc/hosts
!4
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

Spustit předchozí příkaz, který začíná konkrétním slovem

Zadejte ! následovaných několika počátečními písmeny příkazu, který chcete znovu spustit. V následujícím příkladu zadejte !ps a enter, provede se předchozí příkaz začínající ps , což je ps aux | grep yp .

!ps
ps aux | grep yp
root     16947  0.0  0.1  36516  1264 ?        Sl   13:10   0:00 ypbind
root     17503  0.0  0.0   4124   740 pts/0    S+   19:19   0:00 grep yp

Omezit počet položek historie

Toto je řízeno HISTSIZE a HISTFILESIZE vestavěné proměnné prostředí Bash. Připojte následující dva řádky ke svému ~/.bashrc soubor a odhlaste se a poté se znovu přihlaste.

HISTSIZE=1500
HISTFILESIZE=1500

V důsledku toho nyní history je nastaven na uložení 1500 příkazů.

Změna názvu souboru historie

Ve výchozím nastavení history je uložen v ~/.bash_history soubor.

Přidejte následující řádek do .bash_profile soubor a znovu se přihlaste do prostředí Bash, abyste uložili příkaz history do .my_commandline namísto .bash_history soubor.

HISTFILE=/root/.my_commandline

To se používá, když chcete sledovat příkazy prováděné z různých terminálů pomocí různých názvů souboru historie.

Odstranění nepřetržitého opakovaného záznamu z historie

V následujícím příkladu pwd bylo zadáno třikrát, když děláte historii, můžete vidět všechny 3 její výskyty. Chcete-li odstranit duplicity, nastavte HISTCONTROL k ignoredups jak je uvedeno níže.

history | tail -4
44  pwd
45  pwd
46  pwd
47  history | tail -4
export HISTCONTROL=ignoredups
history | tail -3
56  export HISTCONTROL=ignoredups
57  pwd
58  history | tail -4

Vymazat duplikáty v celé historii

ignoredups zobrazené výše odstraní duplikáty pouze v případě, že se jedná o po sobě jdoucí příkazy. Chcete-li odstranit duplikáty v celé historii, nastavte HISTCONTROL na erasedups jak je uvedeno níže.

export HISTCONTROL=erasedups
pwd
systemctl restart network
history | tail -3
38  pwd
39  systemctl restart network
40  history | tail -3
ls -l
systemctl restart network
history | tail -6
35  export HISTCONTROL=erasedups
36  pwd
37  history | tail -3
38  ls -l
39  systemctl restart network
40  history | tail -6

Vynutit historii, aby si nepamatovala konkrétní příkaz

Když spustíte příkaz, můžete zadat history příkaz ignorovat nastavením HISTCONTROL ignorespace a zadáním mezery před příkaz, jak je znázorněno níže.

Vidím spoustu mladších systémových administrátorů, kteří jsou z toho nadšení, protože dokážou skrýt příkaz z historie. Je dobré pochopit, jak ignorespace funguje. Ale jako osvědčený postup před historií nic záměrně neschovávejte.

export HISTCONTROL=ignorespace
ls -ltr
pwd
 systemctl restart network #Note that there is a space at the beginning of service, to ignore this command from history
history | tail -3
67  ls -l
68  pwd
69  history | tail -3

Vymazat celou předchozí historii

Někdy možná budete chtít vymazat celou předchozí history , ale chcete, aby se historie posouvala dopředu.

history -c

Nahradit slova z příkazů historie

Když prohledáváte history , možná budete chtít provést jiný příkaz, ale použijte stejný parametr z příkazu, který jste právě hledali.

V příkladu níže !!:$ vedle vi příkaz získá argument z předchozího příkazu do aktuálního příkazu.

ls nginx.conf
nginx.conf
vi !!:$
vi nginx.conf

V níže uvedeném příkladu !^ vedle příkazu vi získá první argument z předchozího příkazu (tj. cp příkaz) na aktuální příkaz (tj. vi příkaz).

cp nginx.conf nginx.conf.bak
vi  !^
vi nginx.conf

Nahrazení konkrétního příkazu konkrétním argumentem

V níže uvedeném příkladu !cp:2 hledá předchozí příkaz v historii, který začíná cp a přebírá druhý argument cp a nahradí jej příkazem ls -l, jak je ukázáno níže.

cp ~/longname.txt /really/a/very/long/path/long-filename.txt
ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

V níže uvedeném příkladu !cp:$ hledá předchozí příkaz v historii, který začíná cp a přebírá poslední argument (v tomto případě je to také druhý argument, jak je ukázáno výše) cp a nahradí jej příkazem ls -l, jak je ukázáno níže.

ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

Zakázat používání historie

Pokud chcete deaktivovat history vše dohromady a nechcete, aby si Bash Shell pamatoval zadané příkazy, nastavte HISTSIZE na 0, jak je uvedeno níže.

export HISTSIZE=0

Ignorovat konkrétní příkazy z historie

Někdy možná nebudete chtít zahlcovat svou historii základními příkazy, jako je pwd a ls . Použijte HISTIGNORE zadejte všechny příkazy, které chcete v historii ignorovat.

Vezměte prosím na vědomí, že přidání ls do HISTIGNORE ignoruje pouze ls a ne ls -l . Musíte tedy zadat přesný příkaz, který chcete v historii ignorovat.

export HISTIGNORE="pwd:ls:ls -ltr:"
pwd
ls
ls -l
systemctl restart network
history | tail -3
79  export HISTIGNORE="pwd:ls:ls -l:"
80  systemctl restart network
81  history
[Note that history did not record pwd, ls and ls -l]

Další informace o history příkaz v systému Linux, podívejte se na stránku jeho příručky.


Linux
  1. Jak používat příkaz historie v Linuxu

  2. Linuxový příkaz mv

  3. Linux du command

  1. Linuxový ip příkaz

  2. Linux cd příkaz

  3. Příkaz historie Linuxu

  1. Příkaz historie v Linuxu (Bash History)

  2. W Command v Linuxu

  3. Příkaz ls v Linuxu:17 vysvětlení užitečných příkladů