Bash aliasok létrehozása és kezelése Linuxon

Linux 6 perc olvasás

Az alias egy saját rövidítés egy hosszabb parancsra. Ha naponta többször beírja, hogy sudo dnf upgrade --refresh vagy ss -tulpn, egy alias után elég a frissites vagy a ports. Az aliasokat a Bash, a legtöbb Linux alapértelmezett parancsértelmezője kezeli.

A példákat AlmaLinux 10.2 (Bash 5.2) rendszeren próbáltuk ki; AlmaLinux 9-en (Bash 5.1), Rocky Linuxon, Ubuntun és Debianon ugyanígy működnek, a 2. és a 3. szakaszban jelzett különbségekkel.

1. Alias létrehozása

alias ll='ls -lh'

Az egyenlőségjel körül nem lehet szóköz, a parancsot pedig aposztrófok közé írja. Ettől kezdve az ll beírása az ls -lh parancsot futtatja, és a további paraméterek a végére kerülnek: az ll /var/log valójában ls -lh /var/log.

Az aposztróf és az idézőjel itt nem ugyanaz. Idézőjelek között a Bash a változókat már az alias létrehozásakor behelyettesíti, aposztrófok között csak futtatáskor. A teszten a /home/admin könyvtárban megadott alias p1="echo $PWD" a /tmp-be lépés után is /home/admin-t írt ki (az alias tartalma echo /home/admin lett), az alias p2='echo $PWD' helyesen /tmp-t.

Lekérdezés:

alias              # az összes alias
alias ll           # egy alias tartalma
type ll            # mi fut valójában egy név mögött
ll is aliased to `ls -lh'

Törlés: unalias ll; az összes alias törlése az aktuális shellből: unalias -a.

Az így létrehozott alias csak az aktuális terminálban él: kilépés vagy új SSH-kapcsolat után eltűnik. A tartós mentést a 3. szakasz írja le.

2. Az alapértelmezett aliasok

AlmaLinuxon a rendszer már létrehoz néhány aliast. Sima felhasználóként ezek a grep és társai színezését kapcsolják be (grep='grep --color=auto'), és terminálban az ls, az ll és az l. is alias (ls --color=auto, ls -l --color=auto, ls -d .* --color=auto). Ezeket a /etc/profile.d/ könyvtár szkriptjei hozzák létre.

A root felhasználónál ezek mellett van még három, a /root/.bashrc fájlban:

alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

Az -i miatt a root minden felülírás vagy törlés előtt megerősítést kap (rm: remove regular file ...?). Ez csak emlékeztető, nem védelem: az rm -f felülírja az -i-t (a teszten az rm -i aliassal is kérdés nélkül törölt), a szkriptekben pedig az alias nem is érvényes. Sima felhasználónál a teszten ezek nem voltak beállítva, ott az rm kérdés nélkül töröl. Ubuntun és Debianon az alapértelmezett aliasok mások (Ubuntun például ll='ls -alF'), ezeket a saját ~/.bashrc fájl mutatja.

3. Tartós mentés

A saját aliasokat a saját könyvtárában lévő fájlba írja, amelyet a Bash minden interaktív indításkor beolvas.

AlmaLinux, Rocky Linux: ~/.bashrc.d

AlmaLinux 9 és 10 alapértelmezett ~/.bashrc fájlja beolvassa a ~/.bashrc.d/ könyvtár összes fájlját. Ez a legtisztább hely, mert a .bashrc-hez nem kell nyúlni:

mkdir -p ~/.bashrc.d
nano ~/.bashrc.d/aliases

Például:

alias ll='ls -lh'
alias la='ls -lAh'
alias ..='cd ..'
alias ports='ss -tulpn'
alias naplo='sudo journalctl -f'
alias frissites='sudo dnf upgrade --refresh'
alias meret='du -sh * | sort -h'

Más rendszereken: ~/.bashrc

Ha nincs ~/.bashrc.d beolvasás (Ubuntu, Debian), írja az aliasokat a ~/.bashrc fájl végére. Ubuntun a ~/.bashrc a ~/.bash_aliases fájlt is beolvassa, ha létezik.

Az új aliasok betöltése

A módosítás az új terminálokban lép életbe. A már nyitottban töltse be újra:

source ~/.bashrc

Mielőtt betölti, ellenőrizze a fájlt: a bash -n ~/.bashrc.d/aliases nem futtat semmit, csak a szintaxist nézi. A teszten egy lezáratlan idézőjelet így jelzett: unexpected EOF while looking for matching `"'. Hogy egy új shell valóban betölti-e az aliast, a bash -ic 'alias ll' mutatja meg. SSH-bejelentkezéskor a Bash a ~/.bash_profile fájlt olvassa, de AlmaLinuxon ez beolvassa a ~/.bashrc-t is, így az aliasok ott is megvannak.

Saját aliasok AlmaLinux 10 rendszeren: az alias parancs kilistázza az ll, la, .., ports, frissites és meret aliast, a la ~ színes listát ad, a type ll megmutatja, mit futtat az ll

A képen a la kimenete színes, pedig az aliasban nincs --color: a Bash az alias első szavát is megnézi, és mivel az ls maga is alias (ls --color=auto), azt is kibontja.

Minden felhasználónak

Ha egy aliast a szerver összes felhasználójának szeretne, hozzon létre egy fájlt a /etc/profile.d/ könyvtárban, .sh kiterjesztéssel (például sudo nano /etc/profile.d/sajat-aliasok.sh). Ez a következő bejelentkezéskor lép életbe.

4. Az alias megkerülése

Ha egyszer az eredeti parancs kell, alias nélkül:

\rm fajl.txt          # visszaperjellel
command rm fajl.txt   # a command paranccsal
/usr/bin/rm fajl.txt  # teljes útvonallal

A teszten egy alias ls='ls -F' mellett az ls -d /tmp kimenete /tmp/ volt (a -F jelzi a könyvtárat a végén álló perjellel), a \ls -d /tmp és a command ls -d /tmp kimenete /tmp. A visszaperjel csak az aliast kerüli meg; ha ugyanilyen nevű függvény is van, a command azt is kikerüli. Hogy egy név mögött mi minden van (alias, függvény, program), a type -a ls sorolja fel.

5. Mikor nem működik az alias?

Szkriptekben

Az aliasokat a Bash csak interaktív shellben bontja ki. Egy szkriptben a .bashrc-ben megadott alias nem létezik:

/tmp/s.sh: line 2: ll: command not found

Szkriptbe írja ki a teljes parancsot, vagy használjon függvényt. (A shopt -s expand_aliases bekapcsolja a kibontást, de a .bashrc aliasait a szkript akkor sem olvassa be; ott újra meg kellene adni őket.)

Ugyanabban a sorban

A Bash az aliast a teljes sor beolvasása előtt bontja ki. Ha egy sorban hozza létre és használja (alias x='...'; x), a második parancs még a régi jelentéssel fut. A teszten az így, egy sorban megadott és meghívott alias „command not found” hibát adott. Mindig külön sorban adja meg.

sudo után

sudo ll

A sudo után álló szót a Bash nem tekinti aliasnak, így ez „command not found” hibával áll le. Megoldás: legyen a sudo is alias, szóközzel a végén:

alias sudo='sudo '

A záró szóköz azt jelzi a Bashnek, hogy a következő szót is bontsa ki aliasként. A teszten ezzel a sudo ll -d /root rendben lefutott.

6. Paraméterek: függvény kell

Az alias csak szöveget cserél, paramétert nem tud a közepére tenni. A $1 az aliasban üres marad, a paraméter a sor végére kerül:

alias keres='grep -rn $1 /etc/hostname'
keres vps
grep: vps: No such file or directory

Ilyenkor függvényt írjon (ugyanabba a fájlba, ahol az aliasok vannak):

keres() {
    grep -rn "$1" "${2:-.}"
}

A keres vps /etc az /etc-ben, a keres vps az aktuális könyvtárban keres. Függvénynél a paraméterek bárhová kerülhetnek, és több parancs is írható egymás után.

Hasznos ötletek szerverre

alias ports='ss -tulpn'                         # figyelő portok
alias naplo='sudo journalctl -f'                # rendszernapló élőben
alias hibak='sudo journalctl -p err -b'         # hibák a legutóbbi indítás óta
alias meret='du -sh * | sort -h'                # mappák mérete (a rejtetteket kihagyja)
alias lemez='df -h -x tmpfs -x devtmpfs'        # szabad hely
alias frissites='sudo dnf upgrade --refresh'    # rendszerfrissítés

Óvatosan bánjon a meglévő parancsok felülírásával (például alias rm='rm -rf'): egy másik gépen, ahol az alias nincs meg, ugyanaz a megszokott parancs egészen mást csinál. Az alapvető parancsokról az Alapvető Linux parancsok kezdőknek, a du-ról A du parancs részletesen, a naplókról a journalctl cikk szól.

Saját aliasokat minden olyan szerveren beállíthat, ahol SSH-hozzáférése van: KVM VPS-en teljes root joggal, az SSH-t is tartalmazó cPanel tárhelycsomagokon pedig a saját fiókja ~/.bashrc fájljában.

Vissza: Linux leírások (62)