Shell wars, episode 6 – Shell strikes back
Mračno je doba za pobunjene korisničke snage. Iako je shell bio hakiran, snažan imperij rastjerao je korisničke snage po sustavu. U želji da savlada drevne snage ljuske, pobunjenička grupa korisnika na čelu s Lukeom Terminal-Walkerom uspostavila je novu bazu iz koje planira udarac na imperij.
Dobro došli u novi nastavak našega druženja. Ovdje ćemo se upoznati s alternativnom ljuskom, Z shellom, te s uređivačima teksta — Vimom i GNU nanom.
-
Z shell
Z shell ili zsh je vrlo moćna ljuska (shell) koja radi i kao interaktivna ljuska i kao skriptni interpreter. Nativno, nije kompatabilan s Bashem (treba upotrijebiti „emulate sh“), no, kad se jednom uspostavi kompitabilnost, pruža mnoge prednosti kao:
- brzina
- poboljšana dopuna kratica
- bolji globbing
- poboljšano rukovanje nizovima
- krajnje prilagodljiv korisniku i njegovim potrebama
Zsh-ov FAQ nudi više razloga zašto upotrebljavati Zsh kao shell.
Instalacija
Prije nego započnete instalaciju bilo bi zgodno da provjerite kojim se shellom uopće koristite
echo $SHELL
Zsh se nalazi unutar repozitorija svih distribucija te ga je potrebno odatle povući. Slackware, pak, dolazi ss Zsh-om, pa ga je potrebno odabrati kao korisničku ljusku prilikom prvoga boota nakon instalacije, te konfiguriranja sustava i kreiranja korisnika (u protivnom će Slackware rabiti bash).
Inicijalna konfiguracija
Provjerite je li Zsh uspješno instaliran
% zsh
Vidjet ćete zsh-newuser-install koji će vas voditi kroz neke osnovne konfiguracijske korake. Ako Zsh ne želite konfigurirati pomoću skripte, pritisnite q.
Postavljanje Zsh-a kao nativne ljuske
Ako je ljuska unesena u /etc/shells promjenu nativne ljuske vršite s chsha. (Ako ste Zsh povukli s repozitorija, onda već je unesen u /etc/shells .)
chsh -s $(which zsh)
Kako biste mogli upotrebljavati Zsh, potrebno je odjaviti se i ponovo prijaviti (na nekim distribucijama je potrebno ponovo pokrenuti računao). Kad se ponovo prijavite i pokrenete terminal, vidjet ćete da Zsh izgleda drukčije nego Bash. Da ne biste pomislili kako je neka zla magija napala vaše računalo, unesite u terminal echo $SHELL i uvjerite se da zaista upotrebljavate Zsh.
Opaska: ako bash zamjenjujete Zsh-om, bilo bi pametno da nešto koda iz ~/bashrc prenesete u ~/zshrc te s ~/.bash_profile u ~/.zprofile .
Konfiguracijske datoteke
- /etc/profile
- ~/.zshenv
- ~/.zprofile
- ~/.zshrc
- ~/.zlogin
- ~/.zlogout
Postavke ~/.zshrc datoteke
Iako je Zsh kao i Bash iskoristiv out of the box, odmah nakon instalacije, potrebno ga je podrediti svojim potrebama i zahtjevima. Zsh je iznimno bogat mogućnostima te može postati prava zaraza kao i igranje s Conkyjevim skriptama ili uređivanje radne površine. Ovdje ćemo prikazati jednu osnovnu i jednostavnu ~/.zshrc konfiguraciju. Jedna od prednosti koje pruža Zsh jest da nakon odrađenih izmjena u samoj ~/.zshrc skripti ne morate ponosno pokretati terminal kako bi promjene bile vidljive, već u terminal unesete
source ~/.zshrc
Jednostavna ~/.zshrc datoteka
autoload -U compinit promptinit
compinit
promptinit # This will set the default prompt to the walters theme
prompt walters
-
Automatsko završavanje naredba
ovo je možda najzanimljivija i najkorisnija značajka Zsh-a. Prije ili kasnije željet ćete omogućiti automatsko završavanje naredba u svom ~/.zshrc a to ćete učiniti unosom ovih linija u vaš ~/.zshrc
autoload -U compinit
compinit
- Gornja konfiguracija uključuje automatski ssh/scp/sftp hostove, no da bi radila normalno potrebno je spriječiti ssh od hashinga imena hostova u ~/.ssh/known_hosts (Upozorenje! Imajte na umu da ta radnja čini vaše računalo osjetljivim na Island-hopping napade). S tom mišlju potrebno je unutar /etc/ssh/ssh_config zakomentirati sljedeću liniju
#HashKnownHosts yes
te vrijednost postaviti na no. Također, premjestite ~/.ssh/known_hosts negdje drugdje kako bi ssh mogao napraviti novu listu.
Završavanje strelicama
Ako želite završavati da naredba završava strelicama u ~/.zshrc treba dodati
zstyle ‘:completion:*’ menu select
- Dok za završavanje naredba putem aliasa treba unjeti
setopt completealiases
Zsh ne upotrebljava readline. Umjesto toga ima svoj mnogo moćniji zle. Ne čita /etc/inputrc ni ~/.inputrc, zle ima Emacs i VI modove. Nativno nema nijedne, nego pomoću varijable $EDITOR pokušava odrediti koji upotrebljavate te se njemu prilagođava. Ako je varijabla prazna postavlja Emacs. Kako biste dobili dodatne tipke u vaš ~/.zshrc unesite
bindkey “\e[1~” beginning-of-line # Home
bindkey “\e[4~” end-of-line # End
bindkey “\e[5~” beginning-of-history # PageUp
bindkey “\e[6~” end-of-history # PageDown
bindkey “\e[2~” quoted-insert # Ins
bindkey “\e[3~” delete-char # Del
bindkey “\e[5C” forward-word
bindkey “\eOc” emacs-forward-word
bindkey “\e[5D” backward-word
bindkey “\eOd” emacs-backward-word
bindkey “\e\e[C” forward-word
bindkey “\e\e[D” backward-word
bindkey “\e[Z” reverse-menu-complete # Shift+Tab
# for rxvt
bindkey “\e[7~” beginning-of-line # Home
bindkey “\e[8~” end-of-line # End
# for non RH/Debian xterm, can’t hurt for RH/Debian xterm
bindkey “\eOH” beginning-of-line
bindkey “\eOF” end-of-line
# for freebsd console
bindkey “\e[H” beginning-of-line
bindkey “\e[F” end-of-line
Pretraživanje povijesti
Dodajte ove dvije linije u vaš ~/.zshrc
bindkey “^[[A” history-search-backward
bindkey “^[[B” history-search-forward
Promptovi
U Zsh-u je vrlo jednostavno konfigurirati prompt u boji. Provjerite imte li u ~/.zshrc
autoload -U promptinit
promptinit
Ako nemate, ubacite. Dostupne promptove vidjet će te ako pokrenete naredbu
prompt -l
Isprobajte ih i odlučite se za onaj koji vam najviše odgovara.
Napredna ~/.zshrc datoteka
Za kraj evo jedne napredne ~/.zshrc datoteke. Riječ je o datoteci Archova developera, Robbyja Russela, koja je forkana nešto više od 900 puta.
###########################################################
# Options for Zshexport HISTFILE=~/.zsh_history
export HISTSIZE=50000
export SAVEHIST=50000
eval `dircolors -b`autoload -U compinit compinit
setopt autopushd pushdminus pushdsilent pushdtohome
setopt autocd
setopt cdablevars
setopt ignoreeof
-
Vim
Vim (skraćeno od Vi IMproved) je napredan (programerski) uređivač teksta koji radi jednako kao Unixov editor Vi uz mnogo dodatnih značajka i naprednih mogućnosti. Vim nije jednostavan uređivač kao nano ili pico, pa je potrebno više vremena da se nauči njime koristiti, a još više da se svladaju napredne mogućnosti.
Vim radi u tekstualnom sučelju, no postoji i inačica za grafičko sučelje koja se naziva gvim.
Značajke
- jednostavan no opet robustan
- napredne mogućnosti uređivanja koda (npr. uporaba regularnih izraza za pretraživanje teksta i zamjenjivanje dijelova teksta)
- brojni načini konfiguriranja
- označivanje sintakse uređenoga teksta
- provjera pravopisa
- brojni dodatci (plugins) kojima se dodaju nove funkcionalnosti (dodatci su obično napravljeni u obliku složenih skripata pisanih u Vimovu internom jeziku vimscript, a podržani su i drugi skriptni jezici kao što su Lua, Perl, Python, Racket, Ruby i Tcl)
Instalacija
Arch Linux
pacman -S vim
ili
pacman -S gvim
Debian
apt-get install vim vim-rt
Gentoo
emerge vim
Fedora
yum install vim-X11 vim-common vim-enhanced vim-minimal
OpenSuse
zypper install vim
Ubuntu
apt-get install vim-gnome
Upotreba
Ovo je kratak pregled kako upotrebljavati Vim. Alternativno, možete pozvati program vimtutor koji daje uvodni tečaj (na engleskom) za upotrebu Vima.
Vim ima sljedeće načine rada:
- Normalni način (ili Command mode): tipkovničke kratice se interepretiraju kao naredbe
- Insert mode: uređivanje teksta
- Replace mode: uređivanje teksta pri kojem se novi tekst piše preko postojećega teksta
- Vizualni način (ili Visual mode): uz pomoć tipkovničkih kratica dijelovi se teksta označuju, režu ili kopiraju
- Ex mode: unos niza naredaba koje počinju znakom : (npr. za spremanje, zamjenu teksta …)
Osnovno uređivanje
Ako pokrenete Vim s vim nekadatoteka.txt, vidjet ćete da se otvorio prazan crni terminal koji kaže kako ta datoteka ne postoji, a ako postoji vidjet ćete što se u njoj nalazi. Tu datoteku nećete moći odmah uređivati jer se nalazite u naredbenom načinu, pa Vim očekuje da mu se naredbe zadaju tipkovnicom. Naredbe se mogu sastojati od jednog znaka/tipke, kombinacije tipaka (npr. ctrl-f) ili niza znakova/tipkâ. Jedna od naredaba je ona za ulaz u insert mode, tipka I. Za izlaz iz insert modea nazad u naredbeni način upotrebljava se tipka esc. Da bi se tekst spremio, potrebno je prvo doći u naredbeni način tipkom esc a zatim unijeti
:w! ~/nekadatoteka.txt
i pritisnuti enter da se test spremi u datoteku čija je putanja navedena (ovdje se može uočiti da se naredbe koje počinju s : pojavljuju u zadnjem retku na dnu zaslona). Zatim se može izaći iz programa tako da unesemo
:q
i pritisnemo tipku enter.
Kretanje dokumentom
Postoji nekoliko načina pomicanja pokazivača u Vimu.
- Mišem
U Vimu možete, slično kao i u terminalu, mišem postaviti pokazivač na željeno mjesto, kao i obavljati jednostavnije radnje poput obilježavanja teksta. U .vimrc postavite
set mouse=a
Snimite i ponovo pokrenite Vim. Ako nemate .vimrc, kreirajte ga u svom korisničkom folderu.
- Tipkama
Kretati se dokumentom možete i tipkama, točnije strelicama. No to nije Vim-način pa krenimo na Vim-način. U Vimu se prema dolje krećete sa j, prema gore idete sa k, h je lijevo, a l (L) je desno. Znak ^ stavlja pokazivač na početak retka, dok ga & stavlja na kraj reda. Za riječ naprijed rabi se w, a za povratak je b. Veći skokovi su mogući s { i }. { miče na početak paragrafa dok je } za pomak na kraj paragrafa. H se rabi za pomak na zaglavlje dokumenta, M za pomak na sredinu, L za zadnji dio, dok gg ide na samo početak dokumenta, a G na sam kraj. Control-D omogućuje listanje dokumenta po stranama.
Brisanje
Naredba x briše jedan znak, dok X briše jednu riječ. 6x briše 6 znakova, 3x 3 znaka 9X briše 9 riječi. Naredba . ponavlja prethodnu naredbu, d kaže Vimu da želite nešto obrisati, pa je potrebno pošto pritisnete d i definirati akciju, npr. dW ili d^ ako želite obrisati liniju. Naredba cw trenutno briše riječ na kojoj je pokazivač, te automatski ulazi u insert mode kako bi ju mogli zamijeniti. Za zamjenu jednoga znaka upotrebljava se r.
Undo i redo
Vim ima svojevrstan clipboard (buffer) pa je u za undone i Ctrl+r redo.
Vizualni način
Pritiskom na v ulazite u vizualni način rada. Ovdje se možete slobodno kretati tekstom, pritiskom na y baciti komad teksta u buffer ili upotrijebiti c za naredbu rezanja i p za naredbu lijepljenja nakon kursora i P za lijepljenje ispred pokazivača. V je vizualni način za liniju u kojoj se trenutno nalazite, a ctrl+v za odlomak.
Naredbe za pretraživanje i zamjenu teksta
Za traženje riječi ili znakova unutar teksta upotrebljava se tipka / iza koje treba unijeti uzorak teksta koji se traži, npr. /linux što će pokrenuti traženje riječi „linux“ od trenutačnoga mjesta u tekstu prema kraju teksta. Tipkom n traži se sljedeći takav uzorak teksta, a tipkom ? mijenja se smjer pretraživanja. Važno je znati da Vim normalno gleda zadani uzorak teksta kao regularni izraz što znači da neki znakovi (npr. . * [ ] / \ ^ $) imaju posebno značenje a ne doslovno.
Kad pretraživanje teksta dosegne kraj teksta, ono će se nastaviti na početku teksta ako je postavljena sljedeća opcija:
:set wrapscan
Za traženje i zamjenu teksta upotrebljava se naredba :s (substitute) sa sljedećom sintaksom:
:[raspon] s/uzorak1/uzorak2/[opcije]
što će u zadanom rasponu redaka tražiti uzorak1 i zamijeniti ga s uzorak2. Ako se raspon ne zada, onda se zamjena odnosi samo na trenutačni redak teksta.
Primjeri:
pretraži sve retke teksta (od prvog do zadnjeg) i zamijeni uzorak1 s uzorak2 koliko god puta se pojavi u jednom retku
:1,$ s/uzorak1/uzorak2/g
kao gore, ali još pitaj za potvrdu prije zamjene
:1,$ s/uzorak1/uzorak2/gc
pretraži od prvoga do petoga retka i zamijeni uzorak1 s uzorak2 ali samo prvu pojavu u retku
:1,5 s/uzorak1/uzorak2/
u redcima od marketa a do marketa b dodaj “# ” na početku retka
:’a,’b s/^/# /
pretraži sve retke teksta i ukloni praznine na kraju retka
:1,$ s/ \+$//
:g/ \+$/s///
ukloni sve retke koji počinju s #
:g/^#/d
ukloni sve retke koji su prazni
:g/^$/d
Spremanje i izlazak.
Za spremanje i/ili izlazak iz dokumenta koristite se tzv. naredbom Ex. Njihova karakteristika je što se ispred njih nalazi: . Za spremanje dokumenta upotrebljava se :w odnosno iza :w se doda ime ako taj dokument još ne postoji :w nekadatoteka.txt. Za izlazak se upotrebljava :q ili :q! ako želite spremiti promjene.
Postoji još jedna naredba za spremanje i potom izlazak iz dokumenta <shift>zz .
Dodatne naredbe
- Pritisak na s obrisat će znak pod pokazivačem, te vas baciti u insert mode. S briše cijelu liniju i baca u insert mode
- o stvara novu liniju između linija i stavlja i insert mode, O stvara liniju iznad trenutačne linije i stavlja u insert mode.
- yy stavlja cijelu liniju u buffer
- cc mijenja trenutačnu liniju s novom
- * pomiče trenutačnu riječ, a n ju traži
Konfiguracija
Vimova konfiguracijska datoteka smještena je u korisnikovu direktoriju, u ~/.vimrc. Napredni korisnici nastoje imati pregledan i uređen ~/.vimrc. Globalna konfiguracijska datoteka je /etc/vimrc, dok su fallback varijable definirane u /usr/share/vim/ .
Backupiranje datoteka
Vim nativno stvara za svaki editirani dokument backup u istom direktoriju u kojem se nalazi datoteka te ga nazove filename~. Kako biste spriječili da ne dođe do brkanja, potrebno je definirati backup direktorij za Vim:
set backupdir=~/.vim/backup,/tmp
No također je moguće backup i isključiti:
set nobackup
set nowritebackup
set noswapfile! (additionally disable swap files)
Provjera pravopisa
set spell
Nakon ovoga će Vim provjeravati pravopis uređenoga teksta (doduše površno, ali još uvijek kvalitetnije nego MS Office spell checker). Kada pronađe pogrešno napisanu riječ, na nju će automatski baciti pokazivač te je potrebno pritisnuti z= kako bi se pokazale predloženi ispravci. Početno dolazi s provjerom za engleski jezik. Za ostale jezike potrebno je skinuti rječnike te ih instalirati. Oni se mogu naći u arhivu. Nakon skidanja potrebnog rječnika, primjerice hr_HR.diff main.aap potrebno ga je prebaciti u ~/.vim/spell te pokrenuti
:setlocal spell spelllang=LL
Dodatne upute
Uz spomenuti uvodni vodič Vim sadrži i opširniji korisnički priručnik (na engleskom) koji se može čitati ako se u Vimu zada naredba
:help user-manual
Naredba help može se općenito upotrebljavati da se dobije pomoć o nekoj naredbi ili pojmu, npr.
:help spell
:help regexp
Uspoređivanje dokumenata
Vim ima ugrađen diff-uređivač (program koji prepoznaje razlike između dva dokumenta). Upotreba počinje s vimdiff file1 file2 ; te se dalje upotrebljava nešto od navedenoga
]c: – sljedeća razlika
[c: – prethodna razlika
Ctrl+w +w – promjena prozora
do – diff obtain
dp – diff put
zo – otvara preklopljen text
zc – zatvara preklopljen text
:diffupdate – reskeniranje razlika
-
GNU nano
GNU nano ili samo nano je uređivač teksta kojemu je cilj pružiti jednostavno sučelje za obradbu teksta iz konzole. Nano je nativan uređivač u većini distribucija te podržava bojenje koda, provjeru pravopisa i UTF-8 enkodiranje. Jedna od odlika ovoga alata jest mala potrošnja resursa, posebice radne memorije.
Konfiguracija
Uređivač se konfigurira unutar .nanorc datoteke koja se nalazi u korisničkom direktoriju (korisnička konfiguracija) ili u /etc direktoriju (sistemska konfiguracija).
Sistemska konfiguracija je nativna, dok se korisnička mora izraditi. Najjednostavniji način je sljedeći
cd ~
touch .nanorc
ili
cp /etc/nanorc ~/.nanorc
Bojenje koda
GNU nano također podržava i bojenje koda. To se, također, određuje u konfiguracijskoj datoteci.
Evo i primjer za osnovno bojanje koda:
# commands
color red “\<(cd|echo|enable|exec|export|kill|popd|pushd|read|source|touch|type)\>”
color brightblack “\<(case|cat|chmod|chown|cp|diff|do|done|elif|else|esac|exit|fi|find|for|ftp|function|grep|gzip|if|in)\>”
color brightblack “\<(install|ln|local|make|mv|patch|return|rm|sed|select|shift|sleep|tar|then|time|until|while|yes)\>”
# ${*}
icolor blue “\$\{?[0-9A-Z_!@#$*?-]+\}?”
# numerics
color blue “\ [0-9]*”
color blue “\.[0-9]*”
color blue “\-[0-9]*”
color blue “=[0-9]”
# spaces
color ,green “[[:space:]]+$”
# strings; multilines are not supported
color brightred “”(\\.|[^”])*”” “‘(\\.|[^’])*'”
# comments
color brightblack “#.*$”
Upotreba
Kontrolna tipka je tipka ctrl a na nju se nadovezuju funkcije. Oznaka za nadovezivanje je ^ .
Osnovne funkcije GNU nano editora su:
- ^G Get Help (F1)
naredba za traženje pomoći - ^O WriteOut (F3)
sprema trenutačni buffer u neki dokument na disku - ^R Read File (F5)
ubacuje novu dokument - ^Y Prev Page (F7)
ispisuje prethodno upotrebljani buffer - ^K Cut Text (F9)
izrezuje označen dio teksta - ^C Cur Pos (F11)
ispisuje liniju i poziciju znaka ispod kurzora - ^X Exit (F2)
zatvara dokument te izlazi iz uređivača - ^J Justify (F4)
poravnava tekst prema geometriji trenutačnoga terminalnog prozora - ^W Where (F6)
pretraživanje neosjetljivo na velika i mala slova - ^V Next Page (F8)
ispisuje sljedeću stranicu - ^U UnCut Text (F10)
služi za lijepljenje teksta - ^T To Spell (F12)
upotrebljava se za provjeru pravopisa
S ovime smo došli do kraja našega druženja. Naučili smo osnove služenja ljuskom, upoznali se s uređivačima teksta pa i prošetali kroz povijest i naučili nešto iz razvoja .
Iako filmska saga Star Wars završava sa sedmim nastavkom, Return of the Jedi, naše druženje završit će s epizodom šestom. Epizodu sedmu prepuštam svakome od vas da ju sam proživi na svoj način. Epizodom šestom ujedno i završavamo naša druženja. Kojim god putem krenuli, sretno vam bilo.
Ako koristite zsh oh-my-zsh je odličan framework koji će vam pomoći da budete produktivniji https://github.com/robbyrussell/oh-my-zsh
Thx!
Ide u bookmarkse.
Odlično! Puno hvala.
Ako može pitanje, jel imate u planu i nešto za python, pearl, ruby možda neki ekzotičan jezik kao scala ili erlang? Ovakve stvari su korisne.
Pozdrav,
evo, ja imam određena znanja iz Pythona, ne velika, ali mislim da bih mogao napraviti tutoriale za python; od osnova varijabli, kroz iteracije, selekcije,, liste, rijecnike, baratanje datotekama, tekstom, koristenje funkcija… i sl. bih mogao predstaviti Python.
To bi bilo savršeno!
Javi nam se na naš mail pa se možemo dogovoriti za suradnju. 😉
hvala!!
btw, star wars (zasada) zavrsava sestom epizodom.. sedma ce biti ova u pripremi, disney/ jj abrams.. nu..
the force is strong with this one, regardless..
Kao i uvjek cista petica :))
LP b4sh
Momci, sve pohvale! Odlični postovi.