alias — prečice za komande

Ako komandu kucaš deset puta dnevno, nema razloga da je kucaš celu. Alias je sopstveno, kraće ime za komandu — sa svim opcijama koje inače dodaješ.

Uz to, alias objašnjava jednu stvar koja početnike zbunjuje: zašto ls na tvom sistemu prikazuje boje, a na tuđem serveru ne.

Oblik komande

alias [ime='komanda']
unalias ime
  • bez argumenata — ispisuje sve postojeće aliase
  • ime — kako ćeš zvati prečicu
  • komanda — šta se zapravo izvršava; obavezno u navodnicima ako sadrži razmake

Prvi alias

$ alias ll='ls -lah'
$ ll

Od sada ll radi isto što i ls -lah.

Bez razmaka oko znaka jednakosti. Sa razmakom ne radi:

$ alias ll = 'ls -lah'
-bash: alias: ll: not found

Šta već imaš

$ alias
alias egrep='egrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'

Distribucija ti je već postavila nekoliko. Tu je i odgovor na pitanje iz uvoda — ls nije sam po sebi u bojama, nego je alias na ls --color=auto. Na minimalnoj instalaciji ili u kontejneru tog aliasa nema, pa ispis izgleda drugačije.

Šta je tačno neka komanda:

$ type ls
ls is aliased to `ls --color=auto'

$ type ll
ll is aliased to `ls -l --color=auto'

$ type grep
grep is aliased to `grep --color=auto'

Ovo je prva provera kad se komanda ponaša neočekivano.

Alias ne preživi zatvaranje terminala

Ono što napraviš u terminalu važi samo u toj sesiji. Za trajno, upiši u ~/.bashrc:

$ vi ~/.bashrc
alias ll='ls -lah'
alias ..='cd ..'
alias ...='cd ../..'

Izmena važi od sledeće prijave, ili odmah ako učitaš fajl ponovo:

$ source ~/.bashrc

Isto radi i tačka:

$ . ~/.bashrc

Za sve korisnike na sistemu, alias ide u /etc/profile.d/ — napravi tamo fajl sa nastavkom .sh:

# vi /etc/profile.d/aliasi.sh

Korisni aliasi

Sigurnosni

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

Opcija -i traži potvrdu pre brisanja ili prepisivanja. Vredi je razmotriti dok učiš — ali pročitaj i upozorenje pri kraju teksta, jer ova tri aliasa imaju i lošu stranu.

Kretanje

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias -- -='cd -'

Dvostruka crtica govori bash-u da ono što sledi nije opcija.

Listanje

alias ll='ls -lah'
alias lt='ls -lt'
alias lS='ls -lSh'

Sistem

alias df='df -h'
alias free='free -h'
alias ports='ss -tulnp'
alias myip='curl -s ifconfig.me'

Uz servise

alias sc='sudo systemctl'
alias scs='sudo systemctl status'
alias jc='sudo journalctl'
alias jctail='sudo journalctl -f'

Uz systemctl i journalctl ovo štedi dosta kucanja.

Docker i Kubernetes

alias dps='docker ps'
alias dimg='docker images'
alias k='kubectl'

Ako koristiš k kao skraćenicu, dodaj i dopunjavanje tasterom Tab — objašnjeno u lekciji kubectl.

Alias sa argumentima ne postoji

Ovo je najčešće razočaranje. Alias ne prima argumente na sredini:

$ alias trazi='find . -name'
$ trazi "*.log"

Ovo slučajno radi, jer se argument nalepi na kraj. Ali ovo ne:

$ alias mkcd='mkdir $1 && cd $1'

Kad ti treba argument u sredini, potrebna ti je funkcija:

mkcd() {
    mkdir -p "$1" && cd "$1"
}

Funkcije se pišu u isti ~/.bashrc i koriste identično kao alias. Više o njima u četvrtom delu bash serije.

Praktično pravilo: alias kad menjaš samo opcije, funkcija kad ti treba logika.

Uklanjanje i zaobilaženje

$ unalias ll
$ unalias -a        ukloni sve

Češće ti neće trebati brisanje, nego jednokratno zaobilaženje. Tri načina:

$ \ls              obrnuta kosa crta ispred imena
$ command ls       eksplicitno pravi program
$ /usr/bin/ls      puna putanja

Ovo koristiš kad je alias postavljen a smeta ti. Recimo, kad je rm vezan na rm -i, a briseš pedeset fajlova i ne želiš pedeset pitanja:

$ \rm *.tmp

Dve zamke

Aliasi ne rade u skriptama

Skripta se izvršava u neinteraktivnoj sesiji, koja ne učitava ~/.bashrc. Tvoji aliasi tamo ne postoje.

To nije nedostatak nego zaštita. U skriptama uvek piši pune komande — tako rade svuda, i na tuđem sistemu i pod cron-om.

Aliasi grade lošu naviku

Ovo se retko spominje, a važno je.

Ako godinu dana kucaš ll i sc restart, na tuđem serveru ćeš zastati — tamo tvojih aliasa nema. Isto važi i za rm -i: naviknuti se na to da sistem pita, pa se zateći na sistemu koji ne pita, gore je nego da nikad nisi imao alias.

Zato: aliasi da, ali za štednju kucanja, ne kao zamena za znanje šta se zapravo izvršava. Prava komanda mora da ti bude poznata i bez prečice.

Vežba

  1. Pogledaj koje aliase ti je distribucija već postavila
  2. Proveri sa type šta je zapravo ls na tvom sistemu
  3. Napravi alias ll i probaj ga
  4. Zatvori terminal, otvori novi i vidi da alias više ne postoji
  5. Upiši ga u ~/.bashrc i učitaj sa source
  6. Napravi alias na rm -i, pa ga zaobiđi sa \rm
  7. Napravi funkciju mkcd i uporedi je sa aliasom

Sledeći korak → Džokeri i navodnici (u pripremi)

Povezano: Rad iz komandne linije · history · echo · Linux osnove

Comments