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.
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.
