Ustvarjanje in upravljanje vzdevkov Bash v Linuxu

Linux Branje: 5 min

Vzdevek (alias) je lastna okrajšava za daljši ukaz. Če večkrat na dan vpišeš sudo dnf upgrade --refresh ali ss -tulpn, po nastavitvi vzdevka zadošča frissites ali ports. Vzdevke obravnava Bash, privzeti ukazni tolmač večine distribucij Linux.

Primere smo preizkusili v sistemu AlmaLinux 10.2 (Bash 5.2); v AlmaLinux 9 (Bash 5.1), Rocky Linux, Ubuntuju in Debianu delujejo enako, z razlikami, navedenimi v 2. in 3. razdelku.

1. Ustvarjanje vzdevka

alias ll='ls -lh'

Okoli enačaja ne sme biti presledkov, ukaz pa zapiši med enojne narekovaje. Od tedaj vnos ll zažene ukaz ls -lh, dodatni parametri pa se dodajo na konec: ll /var/log je v resnici ls -lh /var/log.

Enojni in dvojni narekovaj tu nista enaka. Med dvojnimi narekovaji Bash spremenljivke nadomesti že ob ustvarjanju vzdevka, med enojnimi pa šele ob zagonu. V preizkusu je alias p1="echo $PWD", nastavljen v imeniku /home/admin, tudi po premiku v /tmp izpisal /home/admin (vsebina vzdevka je postala echo /home/admin), alias p2='echo $PWD' pa pravilno /tmp.

Poizvedba:

alias              # vsi vzdevki
alias ll           # vsebina vzdevka
type ll            # kaj dejansko teče za imenom
ll is aliased to `ls -lh'

Brisanje: unalias ll; brisanje vseh vzdevkov iz trenutne lupine: unalias -a.

Tako ustvarjeni vzdevek živi le v trenutnem terminalu: po izhodu ali novi povezavi SSH izgine. Trajno shranjevanje opisuje 3. razdelek.

2. Privzeti vzdevki

V AlmaLinuxu sistem že ustvari nekaj vzdevkov. Kot navaden uporabnik ti vklopijo barvanje izpisa grep in podobnih (grep='grep --color=auto'), v terminalu pa so vzdevki tudi ls, ll in l. (ls --color=auto, ls -l --color=auto, ls -d .* --color=auto). Ustvarijo jih skripte v imeniku /etc/profile.d/.

Uporabnik root ima poleg teh še tri, v datoteki /root/.bashrc:

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

Zaradi -i root pred vsakim prepisom ali brisanjem dobi zahtevo za potrditev (rm: remove regular file ...?). To je le opomnik, ne zaščita: rm -f preglasi -i (v preizkusu je tudi z vzdevkom rm -i brisal brez vprašanja), v skriptah pa vzdevek sploh ne velja. Pri navadnem uporabniku v preizkusu ti niso bili nastavljeni, tam rm briše brez vprašanja. V Ubuntuju in Debianu so privzeti vzdevki drugačni (v Ubuntuju na primer ll='ls -alF'), pokaže jih lastna datoteka ~/.bashrc.

3. Trajno shranjevanje

Lastne vzdevke zapiši v datoteko v svojem imeniku, ki jo Bash prebere ob vsakem interaktivnem zagonu.

AlmaLinux, Rocky Linux: ~/.bashrc.d

Privzeta datoteka ~/.bashrc v AlmaLinux 9 in 10 prebere vse datoteke v imeniku ~/.bashrc.d/. To je najčistejše mesto, saj se datoteke .bashrc ni treba dotikati:

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

Na primer:

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'

V drugih sistemih: ~/.bashrc

Če branja ~/.bashrc.d ni (Ubuntu, Debian), vzdevke zapiši na konec datoteke ~/.bashrc. V Ubuntuju ~/.bashrc prebere tudi datoteko ~/.bash_aliases, če obstaja.

Nalaganje novih vzdevkov

Sprememba začne veljati v novih terminalih. V že odprtem jo znova naloži:

source ~/.bashrc

Preden jo naložiš, preveri datoteko: bash -n ~/.bashrc.d/aliases ne zažene ničesar, le preveri sintakso. V preizkusu je nezaprt narekovaj javil takole: unexpected EOF while looking for matching `"'. Ali nova lupina res naloži vzdevek, pokaže bash -ic 'alias ll'. Ob prijavi SSH Bash bere datoteko ~/.bash_profile, vendar ta v AlmaLinuxu prebere tudi ~/.bashrc, zato so vzdevki na voljo tudi tam.

Lastni vzdevki v sistemu AlmaLinux 10: ukaz alias navede vzdevke ll, la, .., ports, frissites in meret, la ~ da barven seznam, type ll pa pokaže, kaj zažene ll

Na sliki je izpis la barven, čeprav v vzdevku ni --color: Bash preveri tudi prvo besedo vzdevka, in ker je ls sam vzdevek (ls --color=auto), razširi tudi tega.

Za vse uporabnike

Če želiš vzdevek za vse uporabnike strežnika, ustvari datoteko v imeniku /etc/profile.d/ s končnico .sh (na primer sudo nano /etc/profile.d/sajat-aliasok.sh). Ta začne veljati ob naslednji prijavi.

4. Obhod vzdevka

Če enkrat potrebuješ izvirni ukaz, brez vzdevka:

\rm fajl.txt          # z levo poševnico
command rm fajl.txt   # z vgrajenim ukazom command
/usr/bin/rm fajl.txt  # s polno potjo

V preizkusu je bil ob alias ls='ls -F' izpis ls -d /tmp /tmp/ (-F imenik označi s poševnico na koncu), izpis \ls -d /tmp in command ls -d /tmp pa /tmp. Poševnica nazaj obide le vzdevek; če obstaja tudi funkcija z istim imenom, command obide tudi to. Kaj vse je za imenom (vzdevek, funkcija, program), našteje type -a ls.

5. Kdaj vzdevek ne deluje?

V skriptah

Vzdevke Bash razširja le v interaktivni lupini. V skripti vzdevek, naveden v .bashrc, ne obstaja:

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

V skripto zapiši celoten ukaz ali uporabi funkcijo. (shopt -s expand_aliases vklopi razširjanje, vendar skripta vzdevkov iz .bashrc tudi takrat ne prebere; tam bi jih bilo treba navesti znova.)

V isti vrstici

Bash vzdevek razširi pred branjem celotne vrstice. Če ga ustvariš in uporabiš v eni vrstici (alias x='...'; x), drugi ukaz teče še s starim pomenom. V preizkusu je vzdevek, tako nastavljen in poklican v eni vrstici, vrnil napako „command not found”. Vedno ga navedi v ločeni vrstici.

Po sudo

sudo ll

Besede za sudo Bash ne šteje za vzdevek, zato se to ustavi z napako „command not found”. Rešitev: naj bo tudi sudo vzdevek, s presledkom na koncu:

alias sudo='sudo '

Zaključni presledek Bashu pove, naj tudi naslednjo besedo razširi kot vzdevek. V preizkusu se je s tem sudo ll -d /root izvedel brez težav.

6. Parametri: potrebna je funkcija

Vzdevek le zamenja besedilo, parametra ne zna postaviti na sredino. $1 v vzdevku ostane prazen, parameter pa pride na konec vrstice:

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

V tem primeru napiši funkcijo (v isto datoteko, kjer so vzdevki):

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

keres vps /etc išče v /etc, keres vps pa v trenutnem imeniku. Pri funkciji so lahko parametri kjer koli, napišeš pa lahko tudi več ukazov zaporedoma.

Uporabne zamisli za strežnik

alias ports='ss -tulpn'                         # vrata, ki poslušajo
alias naplo='sudo journalctl -f'                # sistemski dnevnik v živo
alias hibak='sudo journalctl -p err -b'         # napake od zadnjega zagona
alias meret='du -sh * | sort -h'                # velikost map (skrite izpusti)
alias lemez='df -h -x tmpfs -x devtmpfs'        # szabad hely
alias frissites='sudo dnf upgrade --refresh'    # posodobitev sistema

Bodi previden pri prepisovanju obstoječih ukazov (na primer alias rm='rm -rf'): na drugem računalniku, kjer vzdevka ni, isti običajni ukaz naredi nekaj povsem drugega. O osnovnih ukazih govori Osnovni ukazi Linux za začetnike, o du članek Ukaz du podrobno, o dnevnikih pa članek o journalctl.

Lastne vzdevke lahko nastaviš na vsakem strežniku, kjer imaš dostop SSH: na KVM VPS s polnimi pravicami root, na paketih gostovanja cPanel, ki vključujejo SSH, pa v datoteki ~/.bashrc svojega računa.

Nazaj: Linux – članki (76)