GNU/Linux >> Znalost Linux >  >> Linux

15 příkladů rozšíření historie Linuxu Bash, které byste měli vědět

Historie bashu je velmi silná. Pokud pochopíte, jak efektivně používat rozšíření historie bash, budete extrémně produktivní na příkazovém řádku Linuxu.

Tento článek vysvětluje 15 příkladů, které používají následující funkce rozšíření historie bash:

  • Designátory událostí – odkazuje na konkrétní příkaz v historii. Začíná to na !
  • Značky slov – odkazuje na konkrétní slovo v záznamu historie. Obvykle se to kombinuje se sudým označením. Dokonce i označení a označení slova jsou oddělena dvojtečkou
  • Modifikátory – Upravuje výsledek substituce provedené pomocí označení události nebo slova

Tento článek je součástí naší probíhající série výukových programů Bash.

Jak již víte, k zobrazení všech záznamů historie použijte příkaz history. Zobrazí se všechny příkazy, které byly provedeny dříve, spolu s číslem tohoto příkazu v tabulce historie.

$ history
1 tar cvf etc.tar /etc/
2 cp /etc/passwd /backup
3 ps -ef | grep http
4 service sshd restart
5 /usr/local/apache2/bin/apachectl restart

Historie událostí Bash

1. Spusťte konkrétní příkaz z historie pomocí !n

Pokud jste příkaz provedli dříve, místo jeho opětovného psaní jej můžete rychle provést pomocí odpovídajícího čísla příkazu v historii.

Chcete-li například provést příkaz #4, proveďte následující. Tím se zobrazí příkaz #4 z historie a okamžitě jej provedete.

$ !4
service sshd restart

Chcete-li provést příkaz, který byl zadán o 2 příkazy zpět, proveďte následující.

$ !-2

Chcete-li provést předchozí příkaz, proveďte jednu z následujících akcí:

$ !!

$ !-1

Můžete také stisknout -P (pokud jste ve výchozím režimu emacs), abyste se dostali k předchozímu příkazu.

Pokud jste povolili úpravy stylu vi pro příkazový řádek pomocí příkazu „set -o vi“, přejděte k předchozímu příkazu pomocí -k.

2. Proveďte příkaz s klíčovými slovy pomocí !string a !?string

K provedení příkazu z historie můžete také použít klíčová slova.

Následující příklad vyhledá předchozí příkaz, který ZAČÍNÁ klíčovým slovem „ps“ a spusťte jej. V tomto příkladu přebírá předchozí příkaz „ps -ef | grep http“ a spustí jej.

$ !ps
ps -ef | grep http

Následující příklad vyhledá předchozí příkaz, který OBSAHUJE klíčové slovo „apache“ a spusťte jej. V tomto příkladu převezme předchozí příkaz „/usr/local/apache2/bin/apachectl restart“ a provede jej.

$ !?apache
/usr/local/apache2/bin/apachectl restart

3. Nahraďte řetězec z předchozího příkazu pomocí ^str1^str2^

V následujícím příkladu jsme nejprve provedli příkaz ls k ověření souboru. Později jsme si uvědomili, že chceme zobrazit obsah souboru. Místo toho, abychom znovu zadávali celý název souboru, můžeme jednoduše nahradit „ls“ v předchozím příkazu „cat“, jak je znázorněno níže.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

Poznámka:Další tipy pro historii bash najdete v 15 příkladech, jak zvládnout historii příkazového řádku Linuxu. Toto vysvětluje, jak zobrazit časové razítko v historii a jak používat různé proměnné prostředí související s historií, včetně HISTTIMEFORMAT, HISTSIZE, HISTFILE, HISTCONTROL a HISTIGNORE

Historie slov Bash

Označení slov jsou velmi užitečné, když chcete zadat nový příkaz, ale použijte argument z jednoho z příkazů, které byly provedeny dříve. Některé z příkladů jsou uvedeny níže.

4. Získejte 1. argument příkazu pomocí :^

V následujícím příkladu bylo „!cp:^“ zadáno jako argument příkazu „ls -l“. „!cp:^“ vyhledá předchozí příkaz v historii začínající „cp“ a získá 1. argument tohoto příkazu.

$ cp /etc/passwd /backup

$ ls -l !cp:^
ls -l /etc/passwd

Následující příklad získá 1. argument z předchozího příkazu.

$ ls -l !!:^

5. Získejte poslední argument příkazu pomocí :$

V následujícím příkladu bylo „!cp:$“ zadáno jako argument příkazu „ls -l“. „!cp:$“ vyhledá předchozí příkaz v historii, který začíná „cp“ a získá poslední argument tohoto příkazu.

$ cp /etc/passwd /backup

$ ls -l !cp:$
ls -l /backup

Následující příklad získá poslední argument z předchozího příkazu.

$ls -l !!:$

6. Získejte n-tý argument příkazu pomocí :n

V následujícím příkladu bylo "!tar:2" dáno jako argument příkazu "ls -l". „!tar:2“ vyhledá předchozí příkaz v historii, který začíná „tar“ a získá 2. argument tohoto příkazu.

$ tar cvfz /backup/home-dir-backup.tar.gz /home

$ ls -l !tar:2
ls -l /backup/home-dir-backup.tar.gz

7. Získejte všechny argumenty z příkazu pomocí :*

V následujícím příkladu bylo „!cp:*“ zadáno jako argument příkazu „ls -l“. „!cp:*“ vyhledá předchozí příkaz v historii, který začíná „cp“ a získá všechny jeho argumenty.

$ cp /etc/passwd /backup

$ ls -l !cp:*
ls -l /etc/passwd /backup

8. Podívejte se na nedávno hledané slovo pomocí !%

Jak jsme vysvětlili výše, „!?apache“ vyhledá předchozí příkaz historie, který OBSAHUJE klíčové slovo „apache“ a provede jej.

$ /usr/local/apache2/bin/apachectl restart

$ !?apache
/usr/local/apache2/bin/apachectl restart

!% bude odkazovat na celé slovo, které bylo shodné s předchozím „?“ hledat.

Pokud jste například dříve hledali „?apache“, „!%“ bude odpovídat celému slovu „/usr/local/apache2/bin/apachectl“. Všimněte si, že „/“ je v tomto kontextu považováno za součást jednoho slova.

V tomto případě tedy můžete apache zastavit provedením následujícího.

$ !% stop
/usr/local/apache2/bin/apachectl stop

9. Získejte rozsah argumentů z příkazu pomocí x-y

V následujícím příkladu bylo „!tar:3-5“ zadáno jako argument příkazu „ls -l“. „!tar:3-5“ vyhledá předchozí příkaz v historii, který začíná „tar“ a získá argumenty od 3 do 5.

$ tar cvf home-dir.tar john jason ramesh rita

$ ls -l !tar:3-5
ls -l john jason ramesh

Následující získává všechny argumenty z 2.

$ ls -l !tar:2-$

Vezměte prosím na vědomí následující:

  • !!:* Získá všechny argumenty z předchozího příkazu
  • !!:2* Získá všechny argumenty počínaje 2. argumentem.
  • !!:2-$ Stejné jako výše. Získá všechny argumenty počínaje 2. argumentem.
  • !!:2- Získá všechny argumenty počínaje 2. argumentem (kromě posledního argumentu).

Modifikátory historie Bash

Modifikátory jsou uvedeny po označení slov, jak je vysvětleno v příkladech níže.

10. Odstraňte koncový název cesty ze slova pomocí :h

V následujícím příkladu „!!:$:h“ převezme poslední argument předchozího příkazu a odstraní název koncové cesty. V tomto případě odstraní název souboru a získá pouze úplnou cestu.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:h
ls -l /very/long/path/name

11. Odstraňte všechny úvodní názvy cesty ze slova pomocí :t

Toto je přesný opak předchozího příkladu.

V následujícím příkladu „!!:$:t“ převezme poslední argument předchozího příkazu a odstraní všechny úvodní názvy cest. V tomto případě získá pouze název souboru.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:t
ls -l file-name.txt

12. Odstraňte příponu názvu souboru ze slova pomocí :r

V následujícím příkladu „!!:$:r“ přebírá poslední argument předchozího příkazu a odstraňuje pouze „.suffix“ (což je zde přípona názvu souboru). V tomto případě odstranil .txt

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:r
ls -l /very/long/path/name/file-name

13. Sed like Substitution v historii bash pomocí :s/str1/str2/

Místo použití „^original^replacement^“, jak jsme diskutovali dříve, můžeme také použít substituci podobnou sed v historii bash, jak je znázorněno v příkladu níže. To by se mohlo snadno zapamatovat. !! je zavolat předchozí příkaz, „:s/original-string/replacement-string/“ je syntaxe podobná sed pro nahrazení řetězce.

$ !!:s/ls -l/cat/

Můžete také použít příznak g (spolu s příznakem s) k provedení globální substituce, jak je znázorněno níže. To je užitečné, když jste zadali chybně více slov a chtěli byste je změnit všechna najednou a provést příkaz znovu.

V následujícím příkladu jsem omylem zadal „password“ dvakrát (místo passwd).

$ cp /etc/password /backup/password.bak

Chcete-li to opravit, proveďte následující substituci globální historie.

$ !!:gs/password/passwd/
cp /etc/passwd /backup/passwd.bak

14. Rychle opakujte substituci pomocí :&

Pokud jste již provedli substituci historie bash úspěšně, jak je uvedeno výše, můžete stejnou substituci rychle zopakovat znovu pomocí :&.

Omylem jsem v jiném příkazu znovu napsal „password“ místo „passwd“.

$ tar cvf password.tar /etc/password

Nyní místo přepisování příkazu nebo provádění příkazu „gs/password/passwd“ mohu použít pouze „:&“, které znovu použije poslední nahrazení. Použijte „:g&“ pro opětovné použití posledního nahrazení globálně.

$ !!:g&
tar cvf passwd.tar /etc/passwd

15. Vytiskněte příkaz bez jeho provedení pomocí :p

To je velmi užitečné, když provádíte komplexní nahrazování historie a chcete si prohlédnout konečný příkaz před jeho provedením.

V následujícím příkladu „!tar:3-:p“ příkaz ve skutečnosti neprovede.

Protože jsme zde dali „:p“, provede pouze nahrazení a zobrazí nový příkaz. Jakmile ověříte rozšíření historie bash a pokud si myslíte, že toto je příkaz, který jste chtěli spustit, odstraňte „:p“ a spusťte jej znovu.

$ tar cvf home-dir.tar john jason ramesh rita

$ tar cvfz new-file.tar !tar:3-:p
tar cvfz new-file.tar john jason ramesh

Linux
  1. 15 Příklady pro zvládnutí historie příkazového řádku Linuxu

  2. 7 Příklady příkazů Linux df

  3. 8 Příklady příkazů Linux TR

  1. Příklady příkazů rm v Linuxu

  2. Příklady příkazů ps v Linuxu

  3. w Příklady příkazů v Linuxu

  1. 10 příkazů, které by měl znát každý uživatel Linuxu

  2. Jak vymazat historii příkazového řádku BASH v Linuxu

  3. Jak vymazat historii Bash na Linuxu