În Ubuntu GNOME 16.04 pentru a deschide un terminal nou:
Scurtătură | Descriere |
---|---|
Ctrl+ALT+t | pentru a o nouă fereastră de terminal |
Puteți folosi următoarele scurtături în terminal:
Scurtătură | Descriere |
---|---|
Ctrl+Shift+t | pentru a deschide un nou tab |
Ctrl+PageDown | pentru a merge la tab-ul urmator |
Ctrl+PageUp | pentru a merge la tab-ul precedent |
Alt+<index> | pentru a sări direct la un tab |
Ctrl+d | pentru a închide un tab (sau comanda exit ) |
Pentru a naviga (scrolling) în cadrul unui terminal, mai ales atunci când o comandă afișează mult text, folosiți următoarele scurtături:
Scurtătură | Descriere |
---|---|
Shift+PgDown | pentru a derula în jos |
Shift+PgUp | pentru a derula în sus |
Alte scurtături utile:
Scurtătură | Descriere |
---|---|
Ctrl+Shift+c | copiere text din terminal |
Ctrl+Shift+v | lipire text în terminal |
Shift+Insert | lipire text în terminal |
Cea mai importantă formă de documentație în Linux, atunci când nu avem acces la Internet, o reprezintă paginile de manual, accesibile cu ajutorul comenzii man
.
De exemplu, pentru a afișa informații despre comanda echo
(comandă ce afișează un mesaj la ieșirea standard), vom folosi comanda:
student@uso:~$ man echo
Paginile de manual sunt adesea de mari dimensiuni și avem nevoie să le parcurgem rapid (să navigăm prin ele). Pentru aceasta, după ce deschidem pagina de manual a unei comenzi, putem folosi combinațiile de taste de mai jos pentru a nagiva în pagină:
Tastă | Scurtă descriere |
---|---|
/string_to_search | / (adică tasta slash) e folosită pentru a căuta string_to_search în pagina de manual |
n (next) | pentru a merge la următoarea apariție a cuvântului căutat cu / |
N (Shift + n) | pentru a merge la precedenta apariție a cuvântului |
q (quit) | pentru a închide pagina de manual |
Enter | pentru a derula în jos o linie |
f (forward) sau Space | pentru a derula în jos un ecran |
b (backward) | pentru a derula în sus un ecran |
d (down) | pentru a derula în jos jumătate de ecran |
u (up) | pentru a derula în sus jumătate de ecran |
Pentru a obține informații detaliate despre noțiunile și tehnicile din acest laborator, recomandăm să consultați următoarele secțiuni din cartea de suport a cursului USO:
Bash
(terminalul din Linux)Pe parcursul laboratoarelor, pentru descărcarea fișierelor necesare laboratorului, vom folosi Git.
Git este un sistem de source control management și e folosit pentru versionarea codului în proiectele software mari.
Celor interesați să aprofundeze conceptele din spatele comenzii git
, precum și utilizări avansate, le recomandăm cursul practic online de pe gitimmersion.
Pentru început, vrem să ne acomodăm cu cele mai importante comenzi din linia de comandă, în special cele care lucrează cu fișiere și directoare. Îndrumați de asistent, vom descoperi împreună cum putem folosi linia de comandă pentru a lucra cu sistemul de fișiere și pentru a face acțiuni mai rapid ca în interfața grafică.
Avem și un cheatsheet pe care îl putem folosi ca să ne reamintim cele mai frecvente comenzi.
Să începem!
Deschideți un terminal. Clonați conținutul repository-ului oficial uso folosind comanda de mai jos:
student@uso:~$ git clone https://github.com/systems-cs-pub-ro/uso
Ne propunem să lucrăm cu acele comenzi care ne ajută să parcurgem directoarele din sistemul de fișiere (adică să-l traversăm). Apoi să folosim comenzile pentru listarea conținutului unui director și pentru afișarea conținutului unui fișier.
Foarte importantă este distincția între o cale absolută (o cale către un director care pornește din directorul rădăcină, exemplu: /home/student
) și o cale relativă la directorul curent (folosind intrările speciale .
- directorul curent și ..
- directorul părinte).
Urmăriți cu atenție secvența de comenzi de mai jos. Dacă vreți să dați și voi comenzile pe stația la care lucrați, folosiți cât mai des tasta TAB
atunci când dați un parametru comenzii ls
sau cd
.
[student@uso demo]$ pwd /home/student/uso/lab02/demo [student@uso demo]$ tree . . |-- ac_dc | |-- angus | |-- bon | |-- brian | |-- chris | |-- cliff | |-- dave | |-- george | |-- malcom | |-- mark | `-- phil |-- cargo |-- hammerfall | |-- anders | |-- jesper | |-- joacim | |-- magnus | |-- oscar | |-- pontus | `-- stefan |-- iris |-- metallica |-- nightwish |-- nirvana |-- phoenix `-- slayer
Acum că am văzut structura directoarelor, haideți să navigăm prin ele:
[student@uso demo]$ cd ac_dc # aici am folosit o cale relativă la directorul curent [student@uso ac_dc]$ ls angus bon brian chris cliff dave george malcom mark phil [student@uso ac_dc]$ cd .. # Am navigat în directorul părinte directorului ac_dc, care este /home/student/uso/lab02/demo [student@uso demo]$ ls -R .: ac_dc cargo hammerfall iris metallica nightwish nirvana phoenix slayer ./ac_dc: angus bon brian chris cliff dave george malcom mark phil ./hammerfall: anders jesper joacim magnus oscar pontus stefan ./metallica: ./nirvana: [student@uso demo]$ cd /home/student/uso/lab02/demo/hammerfall # am fi putut folosi și cd hammerfall, dar am folosit cale absolută [student@uso hammerfall]$ ls anders jesper joacim magnus oscar pontus stefan
Lui ls îi putem da argument atât o cale relativă către un director sau un fișier, cât și o cale absolută:
[student@uso hammerfall]$ ls ../ac_dc angus bon brian chris cliff dave george malcom mark phil [student@uso hammerfall]$ ls -l ../ac_dc/brian -rw-r--r-- 1 student all 0 Oct 17 08:56 ../ac_dc/brian [student@uso hammerfall]$ ls -l ./anders -rw-r--r-- 1 student all 0 Oct 17 08:56 ./anders [student@uso hammerfall]$ ls -l anders -rw-r--r-- 1 student all 0 Oct 17 08:56 anders [student@uso hammerfall]$ ls -l /home/student/uso/lab02/demo/hammerfall/oscar -rw-r--r-- 1 b46099 all 0 Oct 17 08:56 /home/student/uso/lab02/demo/hammerfall/oscar
/
). O cale relativă începe, de obicei, cu un nume, cu .
sau cu ..
, în timp ce o cale absolută începe întotdeauna cu /
. De reținut faptul că și ~/uso
este tot o cale absolută, chiar dacă începe cu caracterul ~
, acest lucru fiind datorat faptului că ~
este doar un alias către directorul home
al utilizatorului curent (/home/student
).
Cum am văzut și mai sus, exemple de folosire a căilor relative sunt:
TAB
.
[student@uso demo]$ ls hammerfall # ls h<TAB> [student@uso demo]$ ls -l . [student@uso demo]$ cd ./ac_dc # cd ./a<TAB> [student@uso ac_dc]$ ls ../hammerfall # ls ../h<TAB> [student@uso ac_dc]$ ls ../../demo/iris # ls ../../d<TAB>/i<TAB>
Câteva exemple de utilizare a căilor absolute:
[student@uso demo]$ ls / [student@uso demo]$ tree /home/student/uso/lab02/demo/hammerfall # ls /h<TAB>/stu<TAB>/uso/demo/h<TAB> [student@uso demo]$ ls -l ~/uso/lab02/demo/hammerfall # ls ~/uso/lab02/d<TAB>/h<TAB> [student@uso demo]$ tree -L 1 ~
Acum să vedem câteva erori care pot să apară. Ce credeți că se întâmplă mai jos? Care este cauza erorii apărute, ce greșeală a fost făcută?
[student@uso hammerfall]$ ls -l brian ls: cannot access brian: No such file or directory [student@uso hammerfall]$ cd .. [student@uso demo]$ cd nightwish -bash: cd: nightwish: Not a directory [student@uso demo]$ cd /home/student/uso/lab02/demo/scorpions -bash: cd: /home/student/uso/lab02/demo/scorpions: No such file or directory [student@uso demo]$ cd metallica [student@uso metallica]$ cd .. [student@uso demo]$ cd /nirvana -bash: cd: /nirvana: No such file or directory
cd
ar trebui urmată de una ls
sau pwd
în scop de verificare. Cum am văzut mai sus, uneori pot apărea erori, fie directorul nu există, fie nu avem permisiuni să îl accesăm, iar comanda se poate executa fără succes, prin urmare este foarte important care orice comandă de modificare/alterare a stării curente să fie urmată de una de verificare. Câteva exemple de comenzi care fac pereche bună sunt: cd
– pwd
; touch
, mv
, rm
– ls
; echo
– cat
etc.
Folosiți tasta TAB
ori de câte ori puteți. De multe ori e suficient să tastăm doar primele 2-3 litere din numele directorului sau fișierului pe care vrem să-l accesăm. Dacă există două sau mai multe directoare/fișiere care au același prefix, putem fie adăuga mai multe litere pentru a elimina ambiguitatea, fie tasta de două ori TAB
pentru a afișa lista de hituri cu același prefix. Putem itera apoi prin lista de potriviri folosind tot tasta TAB
. Urmăriți exemplele de mai jos.
[student@uso demo]$ ls h<TAB> anders jesper joacim magnus oscar pontus stefan [student@uso demo]$ cd ac_<TAB> [student@uso ac_dc]$ ls c<TAB><TAB> chris cliff [student@uso ac_dc]$ ls ch<TAB> chris
Unul dintre utilitarele de bază este tree
, care poate lista conținutul directoarelor într-un format arborescent, fiind mai ușor de urmărit și înțeles organizarea sistemului de fișiere. De cele mai multe ori este suficientă o simplă comandă ls
, dar dacă vrem să vizualizăm și nivelurile inferioare din ierarhia de fișiere și directoare, tree
poate fi foarte util.
Utilizat fără argumente, tree
va lista toate fișiere și directoarele aflate sub directorul curent (.
).
[student@uso demo]$ tree . ├── ac_dc │ ├── angus │ ├── bon │ ├── brian │ ├── chris │ ├── cliff │ ├── dave │ ├── george │ ├── malcom │ ├── mark │ └── phil ├── cargo ├── hammerfall │ ├── anders │ ├── jesper │ ├── joacim │ ├── magnus │ ├── oscar │ ├── pontus │ └── stefan ├── iris ├── nightwish ├── phoenix └── slayer 2 directories, 22 files
tree
poate primi ca argument unul sau mai multe directoare și le va lista, independent, pe fiecare.
[student@uso demo]$ tree hammerfall ac_dc hammerfall ├── anders ├── jesper ├── joacim ├── magnus ├── oscar ├── pontus └── stefan ac_dc ├── angus ├── bon ├── brian ├── chris ├── cliff ├── dave ├── george ├── malcom ├── mark └── phil 0 directories, 17 files
În cazul în care dorim să afișăm un director care conține foarte multe fișiere și subdirectoare, putem limita nivelul până la care se face listarea folosind argumentul -L
.
[student@uso demo]$ tree -L 1 . ├── ac_dc ├── cargo ├── hammerfall ├── iris ├── nightwish ├── phoenix └── slayer 2 directories, 5 files
[student@uso demo]$ tree iris iris [error opening dir]
În Linux, probabil cea mai folosită formă de documentație o reprezintă paginile de manual. Haideți să vedem care sunt comenzile pe care le folosim pentru a ne documenta în Linux și cum găsim informația utilă.
Căutarea unei comenzi:
student@mint ~ $ apropos "remove files" student@mint ~ $ apropos "copy files"
Localizarea unei comenzi:
student@mint ~ $ which dpkg
Localizare binar, sursă, dar și fișierele de care se folosește pagina de manual:
student@mint ~ $ whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
Acum că știm să navigăm sistemul de fișiere, dorim să și creăm fișiere și directoare. Haideți să vedem cu ce comenzi putem crea, copia, muta și șterge fișiere și directoare.
Poate vi se pare că durează mult să scrieți comenzi și că ați fi folosit mai ușor interfața grafică. Ei bine, linia de comandă are caractere speciale (de tipul wildcards) cu care putem face dintr-o singură comandă o acțiune pe mai multe fișiere. Să vedem cum putem face aceste lucru.
Să se listeze conținutul tuturor fișierelor cu extensia *.conf
din /etc
:
ls /etc/*.conf
Determinarea distributiei de Linux (de obicei nu stim exact cum se numește fișiereul, dar știm sigur că acesta conține cuvântul cheie release
)
cat /etc/*release*
Dacă ne mai rămâne timp în partea de demo, hai să discutăm despre o caracteristică foarte interesantă și utilizată din linia de comandă: redirectarea în fișiere. Adică posibilitatea ca output-ul unei comenzi să fie scris într-un fișier de unde să fie inspectat mai târziu.
student@uso:~$ ls > shaorma_files student@uso:~$ cat shaorma_files
Dacă vom folosi aceasta redirectare din nou, ce se va întâmpla cu fișierul shaorma_files ?
student@uso:~$ echo "hello" > shaorma_files
Dacă nu vrem să pierdem un conținut anterior, folosim append mode:
student@uso:~$ cat /etc/passwd >> shaorma_files student@uso:~$ echo "uso rules" >> shaorma_files student@uso:~$ cat shaorma_files
Haideți să recapitulăm lucrurile pe care le-am făcut în această sesiune de demo:
cd
, pwd
, ls
, tree
.TAB
poate reduce considerabil timpul de tastare a comenzilor.mkdir
, touch
, cp
, mv
. Pentru a le șterge, am folosi rm
și rmdir
.rm
&& ls
).*
pentru a executa acțiuni simultan pe mai multe fișiere, lucru mai dificil de realizat în interfața grafică.>
, >>
și <
.
student@uso:~$ pwd
Semnificația este print working directory
Verificați că sunteți în directorul home al utilizatorului student
(adică directorul /home/student
). Investigați promptul (să conțină caracterul ~
(tildă) pentru directorul home) sau folosiți comanda pwd
:
student@uso:~$ pwd /home/student
Acum că știți că vă aflați în directorul home al utilizatorului student
, clonați conținutul repository-ului oficial uso
student@uso:~$ git clone https://github.com/systems-cs-pub-ro/uso
uso
în /home/student
. Mesajul comenzii git clone
ne informează despre acest lucru (vedeți prima linie din output):
Cloning into 'uso'... remote: Counting objects: 54, done. remote: Compressing objects: 100% (12/12), done. remote: Total 54 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (54/54), done.
Directorul uso
a fost creat relativ (folosind o cale relativă) la directorul curent (care în cazul nostru era /home/student
)
În urma comenzii de mai sus a apărut directorul uso
în directorul home al utilizatorului student
.
student@uso:~$ ls ... uso ...
Folosiți comanda cd
și schimbați directorul în directorul subdirectorul uso/lab02
. În subdirectorul uso/lab02
găsiți structura de directoare și fișierele necesare pentru rezolvarea laboratorului
Redenumiți directorul clonat /home/student/uso
în /home/student/uso-repository
din linie de comandă.
Amintiți-vă din secțiunea de demo sau din USO Cheatsheet cu ce comandă putem redenumi fișiere sau directoare.
/home/student
un director numit uso-repository
. Asigurați-vă că sunteți în directorul corect, atenție la căi relative și absolute. Când cerința spune Vă aflați în directorul X, folosiți comanda cd X
pentru a intra în acel director. X va fi în general o cale absolută
/home/student
.uso-repository/lab02
, clonat la exercițiul anterior.ls
: student@uso:~/lab02 $ ls -R
ls -R
nu este foarte ușor de urmărit pentru directoare cu multe intrări. Pentru a vizualiza structura arborescentă mai prietenos, putem folosi tree
.
tree
să nu existe în sistem. Outputul comenzii va fi, atunci:
student@uso:~/uso-repository $ tree bash: tree: command not found...
În acest caz, e nevoie să o instalăm:
student@uso:~$ sudo apt-get install tree
Ne dorim să aflăm dimensiunile fișierelor. Vă aflați în /home/student
. Intrați în directorul uso-repository/lab02
Listați conținutul detaliat al directoarelor
student@uso:~$ ls -l
Care coloană credeți că ne oferă informații despre dimensiune? Outputul comenzii oferă dimensiunea în octeți (bytes) și este mai greu de citit.
Folosiți un extra-argument al comenzii ls
pentru a avea dimensiunile în format human-readable
. Căutați în pagina de manual a comenzii ls
student@uso:~$ man ls
după cuvântul cheie human
. Folosiți argumentul descoperit în conjuncție cu -l
.
Directorul uso-repository/lab02/anul_1/programare/teme
conține foarte multe fișiere, de dimensiuni mari, e imposibil ca acesta să aibă doar 4K
dimensiune. Pentru a determina dimensiunea directoarelor, trebuie să folosim o altă comandă, du
(de la disk usage).
Iată un exemplu:
student@uso:~$ du uso-repository/lab02/anul_1/programare/teme
Exercițiu: determinați doar dimensiunea directorului uso-repository/lab02/anul_1/programare/teme
(nu și a subdirectoarelor) în format human readable. Căutați în
student@uso:~$ man du
după cuvântul cheie summarize
și identificați opțiunea (argumentul) comenzii du
care vă afișează dimensiunea directorului în format sumarizat.
Vă aflați în directorul /home/student/uso-repository
.
Ștergeți fișierul crap.txt
din directorul lab02/anul_1/uso
.
Observați că am folosit o cale relativă la directorul /home/student
. Am fi putut folosi și
rm -f /home/student/uso-repository/lab02/anul_1/uso/crap.txt
Încercați să ștergeți directorul to_delete
din uso
. De ce nu putem folosi comanda de mai jos, chiar dacă ea conține calea corectă, absolută?
rm -f /home/student/uso-repository/lab02/anul_1/uso/to_delete
Căutați în pagina de manual a rm
(man rm
) după recursive
.
Intrați în directorul lab02/anul_1/uso
. Încercați să ștergeți directorul empty_dir
. Folosiți comanda
rmdir empty_dir
De ce nu putem șterge empty_dir
prin această metodă? Intrați în directorul empty_dir
și investigați dacă acesta conține fișiere (e posibil să conțină fișiere ascunse!). Ștergeți fișierele din el, reveniți la directorul părinte și verificați dacă funcționează comanda rmdir empty_dir
.
student@uso:$ cd uso-repository student@uso:$ rm -rf lab02/anul_1/uso/empty_dir student@uso:$ rmdir lab02/anul_1/uso/empty_dir
rmdir
este capabil doar să șteargă doar directoare goale.
Verificați execuția cu succes a comenzii de ștergere folosind una de listare, de exemplu ls
.
Intrați în directorul uso-repository/lab02/anul_1/uso/filesys
Folosiți următoarea comandă:
mkdir Program Files and Accessories
Listați conținutul directorului filesys
. Câte directoare conține acesta. De ce? A fost acesta efectul dorit? Pentru a putea crea un director cu spații în numele său avem două alternative:
student@uso:$ mkdir "Program Files and Accessories" student@uso:$ mkdir Program\ Files\ and\ Accessories
"
, Ctrl+A
pentru a merge la începutul liniei, Alt+F
pentru a avansa un cuvânt și, în final, tastați din nou ”
.
Verificați că, într-adevăr, de data aceasta directorul creat are numele dorit folosind comanda ls
.
Fără a intra în directorul creat, "Program Files and Accessories"
, creați 3 fișiere cu denumirile "Open Office"
, "Mozilla Firefox"
și "Incredible long file name that contains a lot of spaces"
precum și 2 directoare cu numele "App Data"
și "Local Settings"
în "Program Files and Accessories"
. Încercați, de asemenea, să folosiți cât mai mult tasta TAB
.
Copiați primele două fișiere create anterior în directorul ../../programare/
(atenție! e o cale relativă de la directorul uso-repository/lab02/anul_1/uso/filesys
).
Scrieți un text la întâmplare în fișierul "Incredible long file name that contains a lot of spaces" folosind comanda echo
sau vim
.
student@uso:$ echo "un text" > Inc<TAB> # folosiți neapărat tasta TAB, nu tastați tot numele fișierului
Redenumiți fișierul "Incredible long file name that contains a lot of spaces"
în "Incredible long file name that contains less spaces"
. Abuzați de tasta TAB
. Încercați să folosiți cât mai puține taste.
mv
urmat de combinația Alt+.
, SPACE
și iarăși Alt+.
(combinația de taste Alt+.
este o modalitate de a itera prin ultimii parametri ai comenzilor anterioare). Tastăm apoi Alt+b
pentru a merge un cuvânt înapoi după care, folosind Alt+Backspace
, ștergem cele 3 cuvinte care nu ne mai trebuie. În final, nu rămâne decât de adăugat textul "less\ ".
Copiați întregul director filesys
în /home/student
. De ce nu funcționează comanda de mai jos?
student@uso:$ pwd /home/student/uso-repository/lab02/anul_1/uso/filesys student@uso:$ cp . /home/student
Avem nevoie de recursive
(ca la rm
). Căutați în pagina de manual a cp
(man cp
) după recursive
.
Intrați în directorul părinte lui filesys
. Mutați directorul to_move
în /tmp
. Observați că pentru mv
nu avem nevoie de parametrul -r
(pentru recursivitate).
Verificați execuția cu success a comenzii folosind o comandă ls
.
Mergeți în directorul /home/student/uso-repository/lab02/anul_1
. Folosiți cât mai mult tasta TAB
pentru a ajunge aici.
student@uso:~$ cd /home/st<TAB>/uso<TAB>/lab02/a<TAB>_1
Folosiți comanda tree
pentru a investiga structura de directoare și fișiere din directorul curent. Mergeți apoi în directorul programare/teme
folosind o cale relativă:
student@uso:~$ cd programare/teme
Verificați că vă aflați în directorul dorit folosind comanda pwd
.
Fără a schimba directorul curent, deci fără a utiliza vreo comandă cd
creați câte un fișier cu numele TODO
în folderele uso
, respectiv programare
din directorul anul_1
. Folosiți căi relative. Spre exemplu, pentru directorul programare putem proceda în felul următor:
student@uso:$ touch ../TODO
Realizați același lucru pentru directorul uso
.
Mergeți acum tot în directorul uso
folosind de data aceasta o cale absolută (trebuie să înceapă cu /
sau ~
). Editați fișierul TODO
creat anterior folosind editorul vim
astfel încât la final să conțină textul "O sa iau nota 10 la USO".
Verificați faptul că fișierul conține textul dorit folosind comanda cat
care afișează conținutul fișierului pe ecran.
Copiați fișierul TODO
din directorul uso
peste cel din directorul programare
. Încercați să folosiți cât mai puține taste și doar căi relative.
De multe ori suntem nevoiți să edităm fișiere direct în linia de comandă, fără ajutorul interfeței grafice (ex. atunci când suntem logați pe un server printr-o sesiune la distanță, așa cum vom avea la examenul practic). Unul dintre cele mai populare editoare în linia de comandă este vim
. Pe parcursul semestrului veți întâlni de multe ori în cadrul laboratorului de USO (și nu numai) mențiuni către vim
și, de asemenea, este foarte probabil ca la testele practice sau examenul final să fiți nevoiți să-l folosiți datorită lipsei unei interfețe grafice instalate.
Pentru a ușura procesul de învățare a comenzilor de bază în vim
, există vimtutor
, un tutorial foarte pe larg în linie de comandă. Porniți vimtutor
folosind comanda cu același nume
student@uso:~$ vimtutor
și parcurgeți primele 3 lecții de acolo.
vim
puteți consulta Vim Cheatsheet. În general când lucrați cu Vim, dacă vă loviți de probleme, apăsați ESC
pentru a ajunge în modul normal. Și rețineți că puteți folosi, în modul normal, comanda :q!
pentru a părăsi editorul fără a salva vreo modificare.
[1a] Intrați în directorul uso-repository/lab02/anul_1/programare/teme/tema1
. Folosind interfața grafică, creați o arhivă .zip
care conține toate fișierele cu extensia .c
, în rădăcina arhivei.
[1b] Intrați în directorul uso-repository/lab02/anul_1/programare/teme/tema2
. Folosind linia de comandă, creați o arhivă .zip
care conține toate fișierele cu extensia .c
, .h
, .md
, Makefile
, în rădăcina arhivei. Folosiți comanda zip
. Consultați această pagină pentru exemple de utilizare.
[1c] Intrați în directorul uso-repository/lab02/anul_1/programare/teme
. Folosind linia de comandă, creați o arhivă .tar.gz
care conține în rădăcina arhivei directorul tema3
. Pentru aceasta nu mai putem folosi comanda zip
, ci putem, de exemplu, utiliza comanda tar
. Spre deosebire de zip
, tar
poate lucra cu mai multe tipuri de compresie, prin urmare va trebui să-i specificați printr-un parametru că doriți o arhivă de tipul gzip
. Căutați după stringul gzip
în pagina de manual a comenzii tar
.
student@uso:~$ man tar
De asemenea, pentru a specifica faptul că dorim crearea unei arhive precum și numele acesteia, sunt necesari alți dori parametri pentru comanda tar
. Căutați în pagina de manual după strigurile create
, respectiv filename
. Consultați această pagină pentru mai multe exemple de utilizare a comenzii tar
.
Am văzut în secțiunea de Demo că putem folosi anumite caractere ce țin locul unor bucăți de text, de exemplu caracterul *
. De exemplu, dacă dorim să listăm toate fișierele din /etc
care încep cu stringul ssh
putem folosi comanda:
student@uso:~$ ls /etc/ssh*
După cum observați, caracterul *
ține loc pentru "oricâte și orice caractere". Procedați asemănător și afișați fișierele sau directoarele din /etc
cu extensia .conf
.
Realizați o arhivă de tipul zip
în directorul home
al utilizatorului student
(/home/student
) care să conțină toate fișierele și directoarele din /etc/
care conțin stringul conf
în numele lor.
zip
. Căutați în pagina de manual după stringul recursive
.
De multe ori se întâmplă să vrem să accesăm un anumit fișier sau director, dar nu cunoaștem calea exactă către el sau pur și simplu nu mai cunoaștem nici numele exact al fișierului ci numai o mică parte. Pentru a realiza o căutare foarte rapidă în tot sistemul de fișiere putem folosi comanda locate
.
stdudent@uso:~$ locate vmlinuz
Creați acum un fișier în directorul /home/student/uso-repository
cu numele uso-file
. Căutați fișierul folosind comanda locate
. Observăm că de această dată comanda locate
nu mai găsește niciun fișier, chiar dacă suntem siguri că el există. Acest lucru se datorează faptului că locate
realizează o căutare indexată pe baza unei baze de date proprii. Din cauza faptului că baza de date nu a fost actualizată recent, fișierul creat de noi nu este indexat. Căutați în pagina de manual a comenzii locate
cum putem aduce la zi baza de date. Căutați din nou fișierul uso-file
.
De notat faptul că locate acceptă și wildcards, prin urmare putem căuta, de exemplu, fișiere cărora nu le cunoaștem numele complet.
student@uso:~$ locate *linuz
cd -
. pushd
și popd
. dirs
.pushd
, popd
și dirs
sunt comenzi built-in ale shell-ului (Bash). Drept urmare, nu au propria pagină de manual. Căutați informații despre ele în man bash
.uso-repository/lab02
folosind pushd
și popd
(afișați din când în când stiva de directoare)git
.cd
. Listarea conținutului: ls
. Sistemul de fișiere în Linux are o structură arborescentă: ls -R
, tree
mv
cp
man
, apropos
, which
, whereis
.conf
din directorul etc
din rădăcină: ls /etc/*.conf
ls -l
vs. du
rm -r my_dir
, cp -R my_dir
rmdir
vs. rm
vs. rm -rf
cat file
. Semnificația cat
este de concatenare a fișierelr primite ca argument de intrare și de afișare la ieșirea standard a conținutului: cat file1 file2 file3 …
. Dacă nici un fișier nu e dat ca argument de intrare, atunci cat
va aștepta date de la intrarea standard (tastatură) până când este apăsata combinația de taste CTRL+d
.history
, sau mai eficient: reverse search, folosind combinația de taste CTRL+r
locate
vim
. Tutorial pentru vim
: comanda vimtutor
.tar
, zip