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.

zsh-kornjaca

 

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 …)
vim cheatsheet

vim cheatsheet

 

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

  1. 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
  2. o stvara novu liniju između linija i stavlja i insert mode, O stvara liniju iznad trenutačne linije i stavlja u insert mode.
  3. yy stavlja cijelu liniju u buffer
  4. cc mijenja trenutačnu liniju s novom
  5. * 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.

GNU nano

GNU nano

 

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.

Click to rate this post!
[Total: 0 Average: 0]
VN:F [1.9.22_1171]
Stari sustav ocjenjivanja
Rating: 4.8/5 (25 votes cast)
Shell wars, episode 6 - Shell strikes back, 4.8 out of 5 based on 25 ratings

You may also like...

8 komentara

  1. Nebojša napisao:

    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

  2. Jazavac napisao:

    Thx!
    Ide u bookmarkse.

  3. Saori napisao:

    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.

    • Nikola napisao:

      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.

      • Branko napisao:

        To bi bilo savršeno!
        Javi nam se na naš mail pa se možemo dogovoriti za suradnju. 😉

  4. wintermute napisao:

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

  5. b4sh napisao:

    Kao i uvjek cista petica :))

    LP b4sh

  6. Olja napisao:

    Momci, sve pohvale! Odlični postovi.