Az előzmények parancs használata Linuxon

A Linux shell elmenti a futtatott parancsok előzményeit, és kereshet benne, hogy megismételje a korábban futtatott parancsokat. Ha megértette a Linux történelem parancsot és annak használatát, az jelentősen növelheti a termelékenységet.

A történelem manipulálása

Mint George Santayana híresen mondta„Azok, akik nem tudnak emlékezni a múltra, arra vannak ítélve, hogy megismételjék.” Sajnos Linuxon, ha nem emlékszel a múltra, akkor sem tudod megismételni, még ha akarod sem.

Ilyenkor jön jól a Linux történelem parancs. Lehetővé teszi a korábbi parancsok áttekintését és megismétlését. Ennek nem csak a lustaság bátorítása vagy időmegtakarítás a célja – a hatékonyság (és a pontosság) tényezője is szerepet játszik. Minél hosszabb és bonyolultabb egy parancs, annál nehezebb megjegyezni és begépelni hiba nélkül. Kétféle hiba létezik: az egyik megakadályozza a parancs működését, és a másik, amely lehetővé teszi a parancs működését, de valami váratlan végrehajtásra készteti.

A történelem parancs kiküszöböli ezeket a problémákat. Mint a legtöbb Linux parancs, többről van szó, mint gondolnád. Ha azonban megtanulja a történelem parancs használatát, az minden egyes nap javíthatja a Linux parancssor használatát. Ez egy jó befektetés az idejében. Sokkal jobb módszerek is vannak a történelem parancs használatára, mint a felfelé mutató nyíl ismételt leütése.

A történelem parancsnoksága

A legegyszerűbb formában a történelem parancsot a nevének beírásával használhatja:

history

A

A korábban használt parancsok listája ezután a terminálablakba kerül.

Példa a kimenetre a

A parancsok számozottak, a lista végén a legutóbb használtak (a legtöbb számmal rendelkezők).

Ha bizonyos számú parancsot szeretne látni, átadhat egy számot az előzményeknek a parancssorban. Például az utolsó 10 használt parancs megtekintéséhez írja be a következőt:

history 10

A

Ugyanezt az eredményt érheti el, ha átvezeti a történelmet a farok parancs. Ehhez írja be a következőt:

history | tail -n 10

A

Parancsok ismétlése

Ha újra szeretne használni egy parancsot az előzmények listájából, írjon be egy felkiáltójelet (!), és a parancs számát szóközök nélkül.

Például a 37-es számú parancs megismétléséhez írja be a következő parancsot:

!37

An

Az utolsó parancs megismétléséhez írjon be ismét két felkiáltójelet szóközök nélkül:

!!

An

Ez akkor lehet hasznos, ha kiad egy parancsot, és elfelejti használni a sudo-t. Írja be a sudo, egy szóköz, a dupla felkiáltójelet, majd nyomja meg az Enter billentyűt.

A következő példában olyan parancsot írtunk be, amelyhez sudo szükséges. A teljes sor újragépelése helyett elmenthetünk egy csomó billentyűleütést, és egyszerűen begépelhetjük a sudo !! parancsot, az alábbiak szerint:

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

An

Tehát beírhatja a megfelelő számot a listából a parancs megismétléséhez, vagy a dupla felkiáltójelekkel megismételheti az utoljára használt parancsot. De mi van akkor, ha meg akarja ismételni az ötödik vagy nyolcadik parancsot?

  Hogyan készüljünk fel a Halloweenre az Animal Crossing: New Horizons című filmben

Használhat egy felkiáltójelet, egy kötőjelet (-) és az előző parancs számát (ismét szóköz nélkül).

Az előző 13. parancs megismétléséhez írja be a következőt:

!-13

An

Parancsok keresése karakterlánc szerint

Egy adott karakterlánccal kezdődő utolsó parancs megismétléséhez írjon be egy felkiáltójelet, majd a karakterláncot szóközök nélkül, majd nyomja meg az Enter billentyűt.

Például a sudo-val kezdődő utolsó parancs megismétléséhez írja be ezt a parancsot:

!sudo

An

Ebben azonban van egy veszély eleme. Ha az utolsó sudo parancs nem az, amit gondoltál, akkor rossz parancsot fogsz indítani.

Biztonsági háló biztosításához használhatja a :p (print) módosítót, az alábbiak szerint:

!sudo:p

An

Ez arra utasítja az előzményeket, hogy a parancs végrehajtása helyett a terminálablakba nyomtassák ki. Ez lehetővé teszi a parancs megtekintését használat előtt. Ha ez a kívánt parancs, nyomja meg a felfelé mutató nyilat, majd nyomja meg az Enter billentyűt a használatához.

Ha olyan parancsot szeretne találni, amely egy adott karakterláncot tartalmaz, használhat felkiáltójelet és kérdőjelet.

Például az első „aliases” szót tartalmazó egyező parancs megkereséséhez és végrehajtásához ezt a parancsot kell begépelnie:

!?aliases

An

Ez minden olyan parancsot megtalál, amely az „aliases” karakterláncot tartalmazza, függetlenül attól, hogy az a karakterláncban hol található.

Interaktív keresés

Az interaktív keresés lehetővé teszi, hogy átugorjon a megfelelő parancsok listáján, és megismételje a kívánt parancsot.

Csak nyomja meg a Ctrl+r billentyűkombinációt a keresés elindításához.

Egy terminál ablak után

Ahogy beírja a keresési nyomot, megjelenik az első egyező parancs. A beírt betűk a hátlap (`) és az aposztróf (‘) között jelennek meg. A megfelelő parancsok az egyes betűk beírásával frissülnek.

A

Valahányszor megnyomja a Ctrl+r billentyűkombinációt, visszafelé keresi a következő megfelelő parancsot, amely megjelenik a terminálablakban.

A

Ha megnyomja az Enter billentyűt, a megjelenített parancs végrehajtásra kerül.

A

A parancs végrehajtása előtti szerkesztéséhez nyomja meg a bal vagy a jobb nyílbillentyűt.

A

A parancs megjelenik a parancssorban, és szerkesztheti.

Más Linux-eszközökkel kereshet az előzmények listájában. Például, hogy a történelemből a kimenetet a grep és a grepbe vezesse keresse meg a karakterláncot tartalmazó parancsokat „álnevek” ezt a parancsot használhatja:

history | grep aliases

A

Az utolsó parancs módosítása

Ha ki kell javítania egy elírást, majd meg kell ismételnie a parancsot, a caret (^) segítségével módosíthatja azt. Ez egy nagyszerű trükk, ha hibásan ír le egy parancsot, vagy egy másik parancssori opcióval vagy paraméterrel szeretne újra futtatni.

Használatához írjon be (szóközök nélkül) egy beosztást, a lecserélni kívánt szöveget, egy másikat, a lecserélni kívánt szöveget, egy másik mutatót, majd nyomja meg az Enter billentyűt.

Tegyük fel például, hogy beírja a következő parancsot, és véletlenül az „sshd” helyett az „shhd” szót írja be:

sudo systemctl start shhd

Ezt egyszerűen kijavíthatja a következő beírásával:

^shhd^sshd^

A

A parancs végrehajtása az „shhd” „sshd”-re javítva.

Parancsok törlése az előzmények listájából

A parancsokat az előzmények listájából is törölheti a -d (delete) kapcsolóval. Nincs ok arra, hogy a hibásan írt parancsot az előzmények listájában tartsa.

  Gyors szavazás létrehozása a Microsoft Teamsben

A grep segítségével megtalálhatja, átadhatja a számát az előzményeknek a -d kapcsolóval a törléshez, majd újra kereshet, hogy megbizonyosodjon arról, hogy eltűnt:

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

A

A -d kapcsolónak egy sor parancsot is átadhat. Az összes 22 és 32 közötti listabejegyzés törléséhez írja be ezt a parancsot:

history -d 22 32

Ha csak az utolsó öt parancsot szeretné törölni, írjon be egy negatív számot, például:

history -d -5

Az előzmények fájl manuális frissítése

Amikor bejelentkezik vagy megnyit egy terminálmunkamenetet, a rendszer beolvassa az előzmények listáját az előzményfájlból. A Bashban az alapértelmezett előzményfájl a .bash_history.

Az aktuális terminálablak-munkamenetben végrehajtott módosítások csak a terminálablak bezárásakor vagy kijelentkezéskor kerülnek az előzményfájlba.

Tegyük fel, hogy egy másik terminálablakot szeretne megnyitni, hogy hozzáférjen a teljes előzménylistához, beleértve az első terminálablakba beírt parancsokat is. Az -a (all) opció lehetővé teszi ezt az első terminálablakban, mielőtt megnyitná a másodikat.

Használatához írja be a következőt:

history -a

A

A parancsok csendben íródnak az előzményfájlba.

Ha az előzménylista minden módosítását az előzményfájlba szeretné írni (ha például törölt néhány régi parancsot), használhatja a -w (írás) kapcsolót, például:

history -w

A

Az előzmények listájának törlése

Az összes parancs törléséhez az előzmények listájából, használja a -c (clear) kapcsolót az alábbiak szerint:

history -c

Ha ezen túlmenően ezeket a változtatásokat az előzményfájlban szeretné végrehajtani, használja a -w kapcsolót, például:

history -w

Biztonság és az előzmények fájl

Ha olyan alkalmazást használ, amely megköveteli, hogy érzékeny információkat (például jelszavakat) írjon be a parancssorba, ne feledje, hogy ez is el lesz mentve az előzményfájlba. Ha nem szeretne bizonyos információkat menteni, a következő parancsstruktúrával azonnal törölheti azokat az előzmények listájából:

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

A

Ez a szerkezet két, pontosvesszővel (;) elválasztott parancsot tartalmaz. Bontsuk fel ezt:

speciális alkalmazás: Az általunk használt program neve.
my-secret-password: A titkos jelszó, amelyet meg kell adnunk az alkalmazáshoz a parancssorban. Ez az első parancs vége.
history -d: A második parancsban a történelem -d (delete) opcióját hívjuk meg. Amit törölni fogunk, az a parancs következő részében található.
$(1. előzmény): Ez parancshelyettesítést használ. A parancs $()-ban lévő része egy alhéjban kerül végrehajtásra. A végrehajtás eredménye szövegként jelenik meg az eredeti parancsban. A történelem 1 parancs az előző parancsot adja vissza. Tehát a második parancsot a történelem -d „utolsó parancs itt” néven képzelheti el.

A History 5 paranccsal ellenőrizheti, hogy a jelszót tartalmazó parancsot eltávolították-e az előzmények listájáról.

Ennek azonban van egy még egyszerűbb módja is. Mivel a Bash alapértelmezés szerint figyelmen kívül hagyja a szóközzel kezdődő sorokat, csak írjon be egy szóközt a sor elejére, az alábbiak szerint:

 special-app another-password
history 5

A

A jelszót tartalmazó parancs nem kerül hozzáadásra az előzmények listájához. A trükk működésének oka a .bashrc fájlban található.

  Fókuszálás széles rekesznyílású objektívekkel

A .bashrc fájl

A .bashrc fájl minden bejelentkezéskor vagy terminálablak megnyitásakor lefut. Tartalmaz néhány értéket is, amelyek szabályozzák a történelem parancs viselkedését. Szerkesszük ezt a fájlt a gedit segítségével.

Írja be a következőket:

gedit .bashrc

A

A fájl tetején két bejegyzés látható:

HISTSIZE: A bejegyzések maximális száma, amelyeket az előzmények listája tartalmazhat.
HISTFILESIZE: Az előzményfájlban található sorok számának korlátja.

Ez a két érték a következő módokon működik együtt:

Amikor bejelentkezik vagy elindít egy terminálablak-munkamenetet, az előzmények listája a .bash_history fájlból kerül feltöltésre.
Amikor bezár egy terminálablakot, a HISTSIZE paraméterben beállított maximális számú parancs elmentődik a .bash_history fájlba.
Ha a histappend shell opció engedélyezve van, a parancsok hozzáfűződnek a .bash_history fájlhoz. Ha a histappend nincs beállítva, a .bash_history felülíródik.
Miután elmentette a parancsokat az előzmények listájából a .bash_history fájlba, az előzményfájlt a rendszer úgy csonkolja, hogy legfeljebb HISTFILESIZE sort tartalmazzon.

Szintén a fájl tetején látható a HISTCONTROL érték bejegyzése.

A

Ezt az értéket a következők bármelyikére állíthatja be:

ignorespaces: A szóközzel kezdődő sorok nem kerülnek fel az előzmények listájára.
ignoredups: A duplikált parancsok nem adódnak hozzá az előzményfájlhoz.
ignoreboth: Engedélyezi a fenti mindkettőt.

Felsorolhat olyan parancsokat is, amelyeket nem szeretne hozzáadni az előzmények listájához. Ezeket kettősponttal (:) válassza el, és tegye idézőjelbe („…”).

Ezt a struktúrát követve adjon hozzá egy sort a .bashrc fájlhoz, és helyettesítse be a figyelmen kívül hagyni kívánt parancsokat:

export HISTIGNORE="ls:history"

An

Időbélyegek használata

Ha időbélyegzőket szeretne hozzáadni az előzmények listájához, használhatja a HISTIMEFORMAT beállítást. Ehhez csak a következőhöz hasonló sort kell hozzáadnia a .bashrc fájlhoz:

export HISTTIMEFORMAT="%c "

Vegye figyelembe, hogy a záró idézőjelek előtt szóköz van. Ez megakadályozza, hogy az időbélyeg a parancslistában lévő parancsokhoz kerüljön.

An

Most, amikor futtatja a történelem parancsot, dátum- és időbélyegzőket lát. Vegye figyelembe, hogy minden olyan parancs, amely az időbélyegek hozzáadása előtt szerepelt az előzmények listájában, az időbélyegzőt kapó első parancs dátumával és időpontjával lesz megjelölve. Az alábbi példában ez a 118-as parancs volt.

Ez egy nagyon elhúzódó időbélyeg. Azonban a %c-től eltérő tokeneket is használhat a finomításhoz. A többi használható tokenek a következők:

%d: nap
%m: Hónap
%y: Év
%H: Óra
%M: Percek
%S: Másodpercek
%F: Teljes dátum (év-hónap-dátum formátum)
%T: Idő (óra:perc:másodperc formátum)
%c: Teljes dátum- és időbélyeg (nap-dátum-hónap-év és óra:perc:másodperc formátumban)

Kísérletezzünk, és használjunk néhány különböző tokent:

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

Az exportálás HISTTIMEFORMAT=

A kimenet a napot, a hónapot és az időt használja.

Ha eltávolítjuk a napot és a hónapot, akkor csak az időt mutatja.

A HISTIMEFORMAT-on végrehajtott módosítások a teljes előzménylistára vonatkoznak. Ez azért lehetséges, mert az egyes parancsok ideje a másodpercek száma a Unix korszakból. A HISTTIMEFORMATdirektíva egyszerűen meghatározza azt a formátumot, amellyel ezt a másodpercszámot ember által olvasható stílusban rendereli, például:

export HISTTIMEFORMAT="%T "

A

A teljesítményünk most jobban kezelhető.

A történelem parancsot is használhatja az ellenőrzéshez. Néha a korábban használt parancsok áttekintése segíthet azonosítani, mi okozhatta a problémát.

Csakúgy, mint az életben, Linuxon is használhatja a történelem parancsot, hogy újraélje a jó időket, és tanuljon a rosszból.