User Tools

Site Tools


unixmix:capitole:capitol-07

Interpretorul bash

Tutorial

Completare automată

  • Aflați toate comenzile care încep cu “who”.
    • Tastați “who<TAB><TAB>”.
  • Rulati comanda whoami tastând un număr minim de taste.
    • Tastați “whoa<TAB><ENTER>”.
  • Intrați în directorul rădăcină a sistemului de fișiere. Întorceți-vă, apoi, în directorul vostru home.
    • Rulați cd /.
    • Rulați, apoi, fie cd (fără argumente), fie cd ~.
  • Întorceți-vă iar în directorul rădăcină (directorul în care erați înainte) apoi iar în directorul vostru home.
    • Rulați cd - și apoi pwd să verificați unde sunteți.
    • Ruați încă o dată cd - și verificați că ați ajuns în directoul home.
  • Intrați în directorul Documents din directorul home, folosind un număr minim de caractere.
    • Tastați “cd Do<TAB>”.
    • Nu este suficient? Mai tastați un <TAB> să vedeți opținile pe care le aveți.
    • Mai adăugați o literă ('c') și tastați <TAB> pentru a completa cu numele directorului.
  • Creți în directorul curent (~/Documents) o ierarhie de directoare ~/Documents/These/are/not/the/droids/you/are/looking/for/.
    • Rulăti comanda mkdir These/are/not/the/droids/you/are/looking/for/.
    • Nu merge? De ce? Căutați în pagina de manual al lui mkdir (mkdir) informații despre parametrul -p.
    • Rulați comanda mkdir -p These/are/not/the/droids/you/are/looking/for/.
  • Intrați în cel mai adânc director din ierarhia nou creată (directorul 'for').
    • Fiți eficienți!
    • Sper că nu ați pus mâna pe mouse să dați copy/paste la cale.
    • Tastați “cd ~/Documents/T<TAB><TAB><TAB><TAB><TAB><TAB><TAB><TAB><TAB><TAB>”
  • Reveniți în directorul precedent.
    • Hint: -.
  • Creați ierarhia de directoare ~/Documents/May/the/Force/by/with/you/.
    • Aduceți-vă aminte de parametrul -p.
  • Intrați în cel mai adânc director din ierarhie fără să scrieți, efectiv, calea.
    • Folosiți-vă de ultimul argument al comenzii precedente, care a fost fix calea.
    • Tastați “cd <Atl+.>”.
  • Reveniți în directorul vostru home.
  • Intrați iar în directorul ~/Documents/These/are/not/the/droids/you/are/looking/for/.
    • Vă aduceți aminte că ați mai făcut asta odată? Refolosiți comanda precedentă!
    • Tastați Ctrl-r și apoi un cuvânt cheie cum ar fi “droids”.
  • Vizualizați ce comenzi ați dat până acum.
    • Rulați comanda history.
  • Sțergeți directoarele noi create.
    • Aduceți-vă aminte laboratoarele trecute.

Scurtături la tastatură

Este posibil să fie nevoie de următoarea modificare în terminal pentru ca exercițiile să meargă:

  • Din meniul gnome-terminal accesați Edit → Keyboard shortcuts.
  • Dezactivați cele două opțiuni din ferastra nouă.
  • Tastați în prompt mesajul “Ana are mere”.
  • Oups… am greșit comanda. Voiam să fie afișat acel mesaj.
    • Rulați 'echo !!'.
    • Ce făcea ”!!” ?
  • Folosiți reverse search (Ctrl-r) pentru a rescrie la prompt comanda echo Ana are mere, dar fără a o rula.
    • Verificați că promptul conține “echo Ana are mere”.
  • Transformați mesajul în “Maria are pere”.
    • Mergeți la începutul comenzi cu Ctrl-a.
    • Deplasați-vă un cuvânt înainte cu Alt-f și încă un caracter înainte cu Ctrl-f.
    • Sțergeți cuvântul “Ana” cu Alt-d și înlocuiți-l cu “Maria”
    • Mai deplasați-vă un cuvânt înainte cu Alt-f și încă un caracter înainte cu Ctrl-f (ar trebui să fiți la începutul cuvântului “mere”).
    • Ștergeti primul caracter cu Ctrl-d și înlocuiți-l cu caracterul 'p'.
    • Ruați comanda rezultată.

Comenzi interne

  • Încercați să găsiți executabilul pentru comanda alias.
    • Hint: which.
    • De ce nu găsiți nimic?
  • Folosiți comanda (internă) help pentru afla informații despre comanda (internă) alias.
  • Creați un alias în bash, astfel încât când rulați comanda ll, să ruleze ls -l.
    • Rulați alias ll=“ls -l”.
    • Verificați cu type ll că aliasul a fost creat și rulați ll pentru a vedea efectul.
  • Deschideți un nou terminal și încercați să rulați 'll'.
    • Merge?
    • Rulați comanda alias pentru a lista alias-urile setate în shell-ul curent.

Operatori

Un proces se poate termina cu succes (status 0) sau cu eroare (status diferit de 0).

Statusul ultimului proces se poate vedea cu ajutorul comenzii:

echo $?

true și false sunt două programe care întotdeauna se termină cu succes, respectiv cu eroare.

true
echo $?
0
false
echo $?
1

Folosind operatorii && și ||, putem rula un al doilea proces doar dacă primul proces a avut succes, respectiv eroare.

Testați următoarele comenzi și observați dacă se execută sau nu procesul echo:

true && echo "Success"
false && echo "Success"
true || echo "Fail"
false || echo "Fail"

Variabile

  • Setați două variabile, a și b la “Alice” și “Bob”.
a=Alice
b=Bob
  • Afișați mesajul “Alice and Bob”, folosind variabilele.
    • Expandarea unei variabile se face cu ajutorul operatorului $.
echo "$a and $b" 

Aveți grijă la ghilimele!

alexj@hathor ~ $ echo "$a and $b"
alice and bob
alexj@hathor ~ $ echo '$a and $b'
$a and $b
alexj@hathor ~ $ echo `$a and $b`
The program 'alice' is currently not installed.  You can install it by typing:
sudo apt-get install alice

Variabile de mediu

  • Intrați în directorul /.
  • Printați valoarea variabilei OLDPWD.
    • Hint: echo, $.
  • Rulați comanda cd -.
    • Ce face variabila ODLPWD?
  • Modificați variabila OLDPWD în /tmp și rulati comanda cd -.
    • Observați efectul modificării variabilei de mediu.

Expandare aritmetică

  • Rulați comenzile de mai jos și observați output-ul.
    • Nu dați doar copy paste, ci scrieți comenzile pentru a observa ce se întâmplă.

A=42
B=28
echo "A=$A and B=$B"
echo "A+B=$(($A+$B))"
A=$(($A+1))
B=$(($B*10))
echo "A=$A and B=$B"

Expandarea comenzilor

  • Salvați în variabila OUTPUT ieșirea de la rularea comenzii ls.
    • Rulați OUTPUT=$(ls).
  • Vizualizați conținutul variabilei OUTPUT.
    • Hint: echo, $.
  • Aflați dimensiunea executabilului comenzii ls.
    • Salvați într-o variabilă output-ul comenzii which ls.
    • Rulați ls -lh asupra variabilei respective.
OUTPUT=$(which ls)
ls -lah $OUTPUT

Recapitulare

  1. Afișați fișierele din directorul /bin sortat în ordinea dimensiunii fișierelor. Folosiți-vă de comanda stat și de opțiunea de formatare a acesteia (-c sau --format).
  2. Afișați linie sub linie directoarele conținute de variabila de mediu PATH.
  3. Afișați fișierele din ierarhia /usr/include în ordinea numărului de apariții ale cuvântului FILE. Folosiți grep cu opțiunile aferente și apoi sort. Indicație: Căutați în pagina de manual a lui grep după, respectiv, recursive, count și word.
  4. Afișați interfețele și adresele IP ale sistemului în formatul eth0,141.85.37.225, linie sub linie. Soluție și exemplu de rulare:
    razvan@einherjar:~$ /sbin/ifconfig | awk -F '[ :]+' '/Link encap/ {printf "%s,", $1;} /inet addr/ {printf "%s\n", $4;}' 
    docker0,172.17.42.1
    eth0,172.16.14.167
    lo,127.0.0.1
    vboxnet0,virbr0,192.168.122.1

Afișare caractere speciale

Inițializați variabila text la un șir de caractere.

Afișați la ieșirea standard mesajul “Variabila text are valoarea '”…'”. Valorea poate fi actualizata.”. În mesaj, toate caracterele ghilimele () și apostrof (') se vor afișa întocmai.

Afișare fișiere localizate

Folosiți comanda locate pentru a afișa fișierele din sistem care au extensia .conf.

Pentru fișierele de mai sus afișați directoarele din care fac parte. Eliminați duplicatele.

Folosiți comanda dirname pentru extragerea directoarelor.

Pentru directoarele de mai sus afișați numele directorului și inode-ul, separate prin virgulă (,).

Folosiți comanda stat.

Sortați directoarele de mai sus în ordinea inode-ului. Afișați numele directorului și inode-ul (separate prin virgulă (,)).

Afișare fișiere executabile pentru procese

Afișați procesele al căror proces părinte este init, procesul cu PID-ul 1.

Pentru procesele de mai sus afișați doar comanda completă.

Filtrați doar acele comenzi care încep cu / (adică este calea completă către executabil).

Selectați doar calea către executabil, fără argumente către acesta.

Pentru executabilele de mai sus afișați numele și timpul ultimei schimbării (change time), separate prin virgulă (,).

Folosiți comanda stat.

Sortați executabilele de mai sus în ordinea timpului ultimei schimbări.

Sortarea poate fi simplă, nu este nevoie de sortare numerică. Formatul datei afișat de stat permite sortare de orice fel.

Creare fișiere

Creați 100 de fișiere cu numele “myfile-XY.txt”, unde XY este indexul fișierului între 00 și 99.

Folosiți comenzile seq și touch.

Ca model folosiți-vă de comanda

seq -f "%02g" 1 100

unixmix/capitole/capitol-07.txt · Last modified: 2014/09/12 10:09 by razvan