Cap. 1. Tutoriale GNU/Linux

Cuprins

1.1. Noțiuni de bază despre consolă
1.1.1. Promptul shell
1.1.2. Promptul shell în GUI
1.1.3. Contul root
1.1.4. Promptul shell-ului root
1.1.5. Instrumente grafice de administrare a sistemului
1.1.6. Console virtuale
1.1.7. Cum să ieșiți din promptul liniei de comandă
1.1.8. Cum să opriți sistemul
1.1.9. Recuperarea unei console funcționale
1.1.10. Sugestii de pachete suplimentare pentru începători
1.1.11. Un cont de utilizator suplimentar
1.1.12. Configurarea «sudo»
1.1.13. Ora de joacă
1.2. Sistem de fișiere de tip Unix
1.2.1. Noțiuni de bază despre fișierele Unix
1.2.2. Elementele interne ale sistemului de fișiere
1.2.3. Permisiuni ale sistemului de fișiere
1.2.4. Controlul permisiunilor pentru fișierele nou create: umask
1.2.5. Permisiuni pentru grupuri de utilizatori (grup)
1.2.6. Marcaje de timp
1.2.7. Legături
1.2.8. Conducte cu nume (FIFO)
1.2.9. Socluri
1.2.10. Fișiere de dispozitive
1.2.11. Fișiere de dispozitive speciale
1.2.12. procfs și sysfs
1.2.13. tmpfs
1.3. Midnight Commander (MC)
1.3.1. Personalizarea MC
1.3.2. Lansarea MC
1.3.3. Gestionarul de fișiere din MC
1.3.4. Trucuri din linia de comandă în MC
1.3.5. Editorul intern din MC
1.3.6. Vizorul intern din MC
1.3.7. Funcții de pornire automată ale MC
1.3.8. Sistemul de fișiere virtual al MC
1.4. Mediul de lucru de bază de tip Unix
1.4.1. Shell-ul de autentificare
1.4.2. Personalizarea bash
1.4.3. Combinații speciale de taste
1.4.4. Operații cu mouse-ul
1.4.5. Paginatorul
1.4.6. Editorul de text
1.4.7. Definirea unui editor de text implicit
1.4.8. Utilizarea editorului vim
1.4.9. Înregistrarea activităților shell-ului
1.4.10. Comenzi Unix de bază
1.5. Comanda simplă de shell
1.5.1. Executarea comenzilor și variabilele de mediu
1.5.2. Variabila „$LANG
1.5.3. Variabila „$PATH
1.5.4. Variabila „$HOME
1.5.5. Opțiuni în linia de comandă
1.5.6. Facilitatea glob a shell-ului
1.5.7. Valoarea returnată de comandă
1.5.8. Secvențe tipice de comenzi și redirecționarea shell-ului
1.5.9. Alias de comandă
1.6. Procesarea textului în stilul Unix
1.6.1. Instrumente pentru text în Unix
1.6.2. Expresii regulate
1.6.3. Expresii de înlocuire
1.6.4. Înlocuire globală cu expresii regulate
1.6.5. Extragerea datelor din tabelul fișierului text
1.6.6. Fragmente de script pentru comenzi de direcționare

Cred că învățarea unui sistem informatic este similară cu învățarea unei limbi străine. Deși manualele și documentația sunt utile, trebuie să exersați singur. Pentru a vă ajuta să începeți fără probleme, voi detalia câteva puncte de bază.

Construcția robustă a Debian GNU/Linux provine din sistemul de operare Unix, adică un sistem de operare multi-utilizator și multi-sarcină. Trebuie să învățați să profitați de forța acestor caracteristici și similitudini între Unix și GNU/Linux.

Nu vă feriti de textele orientate spre Unix și nu vă bazați exclusiv pe textele GNU/Linux, deoarece astfel veți pierde multe informații utile.

[Notă] Notă

Dacă utilizați de ceva timp un sistem de tip Unix cu instrumente de linie de comandă, probabil că știți deja tot ce explic aici. Vă rugăm să utilizați acest articol ca o verificare a realității și o reîmprospătare a cunoștințelor.

La pornirea sistemului, vi se afișează ecranul de autentificare bazat pe caractere dacă nu ați instalat niciun mediu GUI precum GNOME sau KDE. Să presupunem că numele gazdei dvs. este foo, promptul de autentificare arată astfel.

Dacă ați instalat un mediu GUI, puteți accesa în continuare promptul de autentificare bazat pe caractere apăsând «Ctrl-Alt-F3» și puteți reveni la mediul GUI apăsând «Ctrl-Alt-F2» (pentru mai multe informații, a se vedea Secțiune 1.1.6, „Console virtuale” mai jos).

foo login:

La solicitarea de autentificare, introduceți numele de utilizator, de exemplu penguin, și apăsați tasta «Enter», apoi introduceți parola și apăsați din nou tasta «Enter».

[Notă] Notă

Conform tradiției Unix, numele de utilizator și parola sistemului Debian sunt sensibile la majuscule și minuscule. Numele de utilizator este ales de obicei numai din litere mici. Primul cont de utilizator este creat de obicei în timpul instalării. Conturi de utilizator suplimentare pot fi create cu adduser(8) de către root.

Sistemul pornește cu mesajul de salut stocat în „/etc/motd” („Message Of The Day” - Mesajul zilei) și afișează o linie de comandă.

Debian GNU/Linux 12 foo tty3

foo login: penguin
Password:

Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Last login: Wed Dec 20 09:39:00 JST 2023 on tty3
foo:~$

Acum vă aflați în shell. Shell-ul interpretează comenzile dvs.

Dacă ați instalat un mediu GUI în timpul instalării, la pornirea sistemului vi se va afișa ecranul grafic de autentificare. Introduceți numele de utilizator și parola pentru a vă autentifica în contul de utilizator fără privilegii. Utilizați tasta «Tab» pentru a naviga între numele de utilizator și parolă sau utilizați butonul principal al mouse-ului.

Puteți accesa promptul shell în mediul GUI pornind un program x-terminal-emulator precum gnome-terminal(1), rxvt(1) sau xterm(1). În mediul grafic de birou GNOME, apăsați tasta «SUPER» (tasta «Windows») și tastați „terminal” în câmpul de căutare.

În cazul altor sisteme grafice de birou (cum ar fi fluxbox), este posibil să nu existe un punct de pornire evident pentru meniu. Dacă se întâmplă acest lucru, încercați să faceți clic (dreapta) pe fundalul imaginii de birou și așteptați să apară un meniu.

Contul root este denumit și super-utilizator sau utilizator privilegiat. Din acest cont, puteți efectua următoarele sarcini de administrare a sistemului.

  • Citește, scrie și elimină orice fișiere din sistem, indiferent de permisiunile acestor fișiere.

  • Stabilește drepturile de proprietate și permisiunile pentru orice fișier din sistem

  • Stabilește parola pentru orice utilizator fără privilegii din sistem

  • Se conectează la orice cont fără a introduce parola

Această putere nelimitată a contului root necesită să fiți atent și responsabil atunci când îl utilizați.

[Avertisment] Avertisment

Nu divulgați niciodată parola de root altor persoane.

[Notă] Notă

Permisiunile unui fișier (inclusiv dispozitive hardware precum CD-ROM etc., care sunt doar un alt fișier pentru sistemul Debian) pot face ca acesta să fie inutilizabil sau inaccesibil pentru utilizatorii care nu sunt root. Deși utilizarea contului root este o modalitate rapidă de a testa acest tip de situație, rezolvarea acesteia trebuie făcută prin stabilirea corespunzătoare a permisiunilor fișierului și a apartenenței utilizatorului la grup (a se vedea Secțiune 1.2.3, „Permisiuni ale sistemului de fișiere”).

Când meniul mediului grafic de birou nu pornește automat instrumentele de administrare a sistemului GUI cu privilegiile corespunzătoare, le puteți porni din promptul shell-ului root al emulatorului de terminal, cum ar fi gnome-terminal(1), rxvt(1) sau xterm(1). Consultați Secțiune 1.1.4, „Promptul shell-ului root” și Secțiune 7.9, „Conexiune la serverul X”.

[Avertisment] Avertisment

Nu porniți niciodată administratorul de afișare/sesiune cu interfață grafică sub contul root introducând root la promptul administratorului de afișare, cum ar fi gdm3(1).

Nu rulați niciodată programe cu interfață grafică la distanță care nu sunt de încredere sub X Window atunci când sunt afișate informații critice, deoarece acestea pot intercepta ecranul X.

În sistemul Debian implicit, există șase console de caractere comutabile de tip VT100 disponibile pentru a porni shell-ul de comandă direct pe gazda Linux. Cu excepția cazului în care vă aflați într-un mediu cu interfață grafică, puteți comuta între consolele virtuale apăsând simultan tasta Alt-stânga și una dintre tastele F1F6. Fiecare consolă de caractere permite conectarea independentă la cont și oferă un mediu multiutilizator. Acest mediu multiutilizator este o caracteristică excelentă a Unix și foarte captivantă.

Dacă vă aflați în mediul cu interfață grafică, puteți accesa consola de caractere 3 apăsând tastele Ctrl-Alt-F3, adică apăsând simultan tasta Ctrl-stânga, tasta Alt-stânga și tasta F3. Puteți reveni la mediul cu interfață grafică, care rulează în mod normal pe consola virtuală 2, apăsând Alt-F2.

Alternativ, puteți trece la o altă consolă virtuală, de exemplu la consola 3, din linia de comandă.

# chvt 3

La fel ca orice alt sistem de operare modern în care operațiile cu fișiere implică stocarea datelor în memoria cache pentru o performanță îmbunătățită, sistemul Debian necesită o procedură de oprire corespunzătoare înainte ca alimentarea să poată fi oprită în siguranță. Acest lucru are scopul de a menține integritatea fișierelor, forțând toate modificările din memorie să fie scrise pe disc. Dacă este disponibilă funcția de control al alimentării software, procedura de oprire oprește automat alimentarea sistemului. (În caz contrar, poate fi necesar să apăsați butonul de alimentare timp de câteva secunde după procedura de oprire.)

Puteți opri sistemul în modul multiutilizator normal din linia de comandă.

# shutdown -h now

Puteți opri sistemul în modul utilizator unic din linia de comandă.

# poweroff -i -f

Consultați Secțiune 6.3.8, „Cum să opriți sistemul de la distanță pe SSH”.

Deși chiar și instalarea minimă a sistemului Debian fără niciun mediu grafic de birou oferă funcționalitatea de bază Unix, este o idee bună să instalați câteva pachete suplimentare pentru terminalul caracter bazat pe linia de comandă și curses, cum ar fi mc și vim cu apt-get(8) pentru începători, pentru a începe cu următoarele.

# apt-get update
 ...
# apt-get install mc vim sudo aptitude
 ...

Dacă aveți deja aceste pachete instalate, nu se instalează pachete noi.


Ar fi o idee bună să citiți câteva documente informative.


Puteți instala unele dintre aceste pachete urmând pașii de mai jos.

# apt-get install package_name

Pentru stațiile de lucru tipice cu un singur utilizator, cum ar fi sistemul Debian cu mediu grafic de birou pe laptop, este obișnuit să se implementeze o configurație simplă a sudo(8) după cum urmează, pentru a permite utilizatorului fără privilegii, de exemplu penguin, să obțină privilegii administrative doar cu parola sa de utilizator, fără a fi nevoie de parola root.

# echo "penguin  ALL=(ALL) ALL" >> /etc/sudoers

Alternativ, este de asemenea obișnuit să se procedeze după cum urmează pentru a permite utilizatorului fără privilegii, de exemplu penguin, să obțină privilegii administrative fără nicio parolă.

# echo "penguin  ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

Această truc ar trebui folosit numai pentru stația de lucru cu un singur utilizator pe care o administrați și unde sunteți singurul utilizator.

[Avertisment] Avertisment

Nu configurați conturi de utilizatori obișnuiți pe stații de lucru multiutilizator de acest tip, deoarece acest lucru ar afecta grav securitatea sistemului.

[Atenție] Atenție

Parola și contul penguin din exemplul de mai sus necesită aceeași protecție ca și parola root și contul root.

În acest context, privilegiul administrativ aparține unei persoane autorizate să îndeplinească sarcini de administrare a sistemului pe stația de lucru. Nu acordați niciodată un astfel de privilegiu unui responsabil din departamentul administrativ al companiei dvs. sau șefului dvs., cu excepția cazului în care aceștia sunt autorizați și capabili să îndeplinească astfel de sarcini.

[Notă] Notă

Pentru a acorda privilegii de acces la dispozitive și fișiere limitate, ar trebui să luați în considerare utilizarea grupului pentru a acorda acces limitat, în loc să utilizați privilegiul root prin intermediul sudo(8).

Cu o configurare mai atentă și mai grijulie, sudo(8) poate acorda privilegii administrative limitate altor utilizatori dintr-un sistem partajat, fără a partaja parola root. Acest lucru poate ajuta la asigurarea responsabilității în cazul gazdelor cu mai mulți administratori, astfel încât să puteți ști cine a făcut ce. Pe de altă parte, este posibil să nu doriți ca altcineva să aibă astfel de privilegii.

În GNU/Linux și alte sisteme de operare de tip Unix, fișierele sunt organizate în directoare. Toate fișierele și directoarele sunt aranjate într-o singură structură arborescentă cu rădăcina în „/”. Se numește structură arborescentă deoarece, dacă desenezi sistemul de fișiere, acesta arată ca un arbore, dar cu rădăcina în sus.

Aceste fișiere și directoare pot fi distribuite pe mai multe dispozitive. mount(8) servește la atașarea sistemului de fișiere găsit pe un dispozitiv la arborele de fișiere mare. În schimb, umount(8) îl detașează din nou. Pe nucleele Linux recente, mount(8) cu anumite opțiuni poate lega o parte a arborelui de fișiere în altă parte sau poate monta sistemul de fișiere ca fiind partajat, privat, secundar sau nelegat. Opțiunile de montare acceptate pentru fiecare sistem de fișiere sunt disponibile în „/usr/share/doc/linux-doc-*/Documentation/filesystems/”.

Directoarele din sistemele Unix sunt denumite dosare în alte sisteme. De asemenea, rețineți că nu există conceptul de unitate precum „A:” pe niciun sistem Unix. Există un singur sistem de fișiere și totul este inclus. Acesta este un avantaj enorm în comparație cu Windows.

Iată câteva noțiuni de bază despre fișierele Unix.

[Notă] Notă

Deși puteți utiliza aproape orice litere sau simboluri într-un nume de fișier, în practică nu este recomandat să faceți acest lucru. Este mai bine să evitați orice caractere care au adesea semnificații speciale în linia de comandă, inclusiv spații, tabulatoare, linii noi și alte caractere speciale: { } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $. Dacă doriți să separați cuvintele dintr-un nume, alegeri bune sunt punctul, cratima și linia de subliniere. De asemenea, puteți scrie fiecare cuvânt cu majusculă la început, „CaAcesta”. Utilizatorii experimentați de Linux tind să evite spațiile în numele fișierelor.

[Notă] Notă

Cuvântul „root” poate însemna fie „utilizatorul root”, fie „directorul root”. Contextul utilizării lor ar trebui să clarifice acest lucru.

[Notă] Notă

Cuvântul rută (path) este folosit nu doar pentru nume de fișier complet calificat, așa cum s-a menționat mai sus, ci și pentru ruta de căutare a comenzii. Semnificația intenționată este de obicei clară din context.

Cele mai bune practici detaliate pentru ierarhia fișierelor sunt descrise în Filesystem Hierarchy Standard -- Standardul de ierarhie a sistemului de fișiere („/usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz” și hier(7)). Ar trebui să rețineți următoarele aspecte ca punct de plecare.


Urmând tradiția Unix, sistemul Debian GNU/Linux oferă sistemul de fișiere în care se află datele fizice de pe discurile dure și alte dispozitive de stocare, iar interacțiunea cu dispozitivele hardware, cum ar fi ecranele consolei și consolele seriale la distanță, este reprezentată într-o manieră unificată sub „/dev/”.

Fiecare fișier, director, conductă cu nume (o modalitate prin care două programe pot partaja date) sau dispozitiv fizic dintr-un sistem Debian GNU/Linux are o structură de date numită nod-i care descrie atributele asociate, cum ar fi utilizatorul care îl deține (proprietarul), grupul căruia îi aparține, ora ultimei accesări etc. Ideea de a reprezenta aproape totul în sistemul de fișiere a fost o inovație Unix, iar nucleele Linux moderne au dezvoltat această idee și mai mult. Acum, chiar și informațiile despre procesele care rulează în calculator pot fi găsite în sistemul de fișiere.

Această reprezentare abstractă și unificată a entităților fizice și a proceselor interne este foarte puternică, deoarece ne permite să folosim aceeași comandă pentru același tip de operație pe multe dispozitive total diferite. Este chiar posibil să se modifice modul de funcționare al nucleului prin scrierea de date în fișiere speciale care sunt legate de procesele în execuție.

[Indicație] Indicație

Dacă trebuie să identificați corespondența dintre arborele de fișiere și entitatea fizică, executați mount(8) fără argumente.

Permisiunile sistemului de fișiere ale unui sistem precum Unix sunt definite pentru trei categorii de utilizatori afectați.

  • Utilizatorul care deține fișierul (u)

  • Alți utilizatori din grupul căruia aparține fișierul (g)

  • Toți ceilalți utilizatori (o), denumiți și „lumea” și „toată lumea”

Pentru fișier, fiecare permisiune corespunzătoare permite următoarele acțiuni.

  • Permisiunea de citire - (read) (r) permite proprietarului să examineze conținutul fișierului.

  • Permisiunea de scriere - (write) (w) permite proprietarului să modifice fișierul.

  • Permisiunea de executare - (execute) (x) permite proprietarului să execute fișierul ca o comandă.

Pentru director, fiecare permisiune corespunzătoare permite următoarele acțiuni.

  • Permisiunea de citire - (read) (r) permite proprietarului să afișeze conținutul directorului.

  • Permisiunea de scriere - (write) (w) permite proprietarului să adauge sau să elimine fișiere din director.

  • Permisiunea de executare - (execute) (x) permite proprietarului să acceseze fișierele din director.

Aici, permisiunea de executare - (execute) asupra unui director înseamnă nu numai să permită citirea fișierelor din acel director, ci și să permită vizualizarea atributelor acestora, cum ar fi dimensiunea și data modificării.

Instrumentul ls(1) este utilizat pentru a afișa informații privind permisiunile (și altele) pentru fișiere și directoare. Când este invocat cu opțiunea „-l”, afișează următoarele informații în ordinea indicată.

  • Tipul fișierului (primul caracter)

  • Permisiunea de acces la fișier (nouă caractere, compuse din câte trei caractere pentru utilizator, grup și altele, în această ordine)

  • Numărul de legături dure către fișier

  • Numele utilizatorului care deține fișierul

  • Numele grupului căruia îi aparține fișierul

  • Dimensiunea fișierului în caractere (octeți)

  • Data și ora fișierului (mtime)

  • Numele fișierului


chown(1) este utilizat din contul root pentru a schimba proprietarul fișierului. chgrp(1) este utilizat din contul proprietarului fișierului sau din contul root pentru a schimba grupul fișierului. chmod(1) este utilizat din contul proprietarului fișierului sau din contul root pentru a schimba permisiunile de acces la fișiere și directoare. Sintaxa de bază pentru manipularea unui fișier foo este următoarea.

# chown newowner foo
# chgrp newgroup foo
# chmod  [ugoa][+-=][rwxXst][,...] foo

De exemplu, puteți crea o structură de directoare care să aparțină utilizatorului foo și să fie partajată de grupul bar folosind următoarea comandă.

# cd /some/location/
# chown -R foo:bar .
# chmod -R ug+rwX,o=rX .

Există încă trei biți de permisiune specială.

  • Bit-ul set user ID (s sau S în loc de x al utilizatorului)

  • Bit-ul set group ID (s sau S în loc de x al grupului)

  • Bit-ul sticky (t sau T în loc de x al celorlalți)

Aici, rezultatul comenzii „ls -l” pentru acești biți este cu majuscule dacă biții de execuție ascunși de aceste rezultate sunt neactivați .

Activarea bitului set user ID pe un fișier executabil permite utilizatorului să execute fișierul executabil cu ID-ul proprietarului fișierului (de exemplu root). În mod similar, activarea bitului set group ID pentru un fișier executabil permite utilizatorului să execute fișierul executabil cu ID-ul de grup al fișierului (de exemplu, root). Deoarece activările acestor biți pot genera riscuri de securitate, activarea lor necesită o atenție sporită.

Activarea bitului set group ID pentru un director activează schema de creare a fișierelor tip BSD în care toate fișierele create în director aparțin grupului directorului.

Activarea bitului sticky pe un director împiedică ștergerea unui fișier din director de către un utilizator care nu este proprietarul fișierului. Pentru a securiza conținutul unui fișier din directoare care pot fi scrise de toată lumea, cum ar fi „/tmp” sau din directoare care pot fi scrise de grup, nu trebuie doar să redefiniți permisiunea de scriere pentru fișier, ci și să activați bitul sticky pe director. În caz contrar, fișierul poate fi șters și poate fi creat un fișier nou cu același nume de către orice utilizator care are acces de scriere la director.

Iată câteva exemple interesante de permisiuni pentru fișiere.

$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4
crw------T 1 root root   108, 0 Oct 16 20:57 /dev/ppp
-rw-r--r-- 1 root root     2761 Aug 30 10:38 /etc/passwd
-rw-r----- 1 root shadow   1695 Aug 30 10:38 /etc/shadow
-rwsr-xr-x 1 root root   973824 Sep 23 20:04 /usr/sbin/exim4
$ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
drwxrwxrwt 14 root root  20480 Oct 16 21:25 /tmp
drwxrwsr-x 10 root staff  4096 Sep 29 22:50 /usr/local
drwxr-xr-x 10 root root   4096 Oct 11 00:28 /usr/src
drwxrwsr-x  2 root mail   4096 Oct 15 21:40 /var/mail
drwxrwxrwt  3 root root   4096 Oct 16 21:20 /var/tmp

Există un mod numeric alternativ pentru a descrie permisiunile fișierelor cu chmod(1). Acest mod numeric utilizează numere octale (în bază=8) cu 3 până la 4 cifre.


Sună complicat, dar de fapt este destul de simplu. Dacă vă uitați la primele câteva coloane (2-10) din „ls -l” și le citiți ca o reprezentare binară (bază=2) a permisiunilor de fișier („-” fiind „0” și „rwx” fiind „1”), ultimele 3 cifre ale valorii numerice ale modului ar trebui să aibă sens ca o reprezentare octală (bază=8) a permisiunilor de fișier.

De exemplu, încercați următoarele

$ touch foo bar
$ chmod u=rw,go=r foo
$ chmod 644 bar
$ ls -l foo bar
-rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar
-rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo
[Indicație] Indicație

Dacă trebuie să accesați informațiile afișate de „ls -l” într-un script shell, trebuie să utilizați comenzi relevante, cum ar fi test(1), stat(1) și readlink(1). Se pot utiliza și comenzi încorporate în shell, cum ar fi „[” sau „test”.

[Avertisment] Avertisment

Asigurați-vă că salvați modificările nesalvate înainte de a reporni sau de a efectua acțiuni similare.

Puteți adăuga un utilizator penguin la un grup bird în doi pași:

  • Modificați configurația grupului utilizând una dintre următoarele opțiuni:

    • Executați «sudo usermod -aG bird penguin».

    • Executați «sudo adduser penguin bird» (numai pe sistemele Debian tipice)

    • Executați «sudo vigr» pentru /etc/group și «sudo vigr -s» pentru /etc/gshadow pentru a adăuga penguin în linia pentru bird.

  • Aplicați configurația utilizând una dintre următoarele opțiuni:

    • Reporniți sistemul și conectați-vă (cea mai bună opțiune)

    • Ieșire din sesiune prin intermediul meniului interfeței grafice și autentificare; (acest lucru poate să nu funcționeze în mediul grafic de birou modern).

Puteți elimina un utilizator penguin dintr-un grup bird în doi pași:

  • Modificați configurația grupului utilizând una dintre următoarele opțiuni:

    • Executați «sudo usermod -rG bird penguin».

    • Executați «sudo deluser penguin bird» (numai pe sistemele Debian tipice)

    • Executați «sudo vigr» pentru /etc/group și «sudo vigr -s» pentru /etc/gshadow pentru a elimina penguin din linia pentru bird.

  • Aplicați configurația utilizând una dintre următoarele opțiuni:

    • Reporniți sistemul și conectați-vă (cea mai bună opțiune)

    • Executați «kill -TERM -1» și efectuați câteva acțiuni de remediere, cum ar fi «systemctl restart NetworkManager.service».

    • Deconectarea prin meniul interfeței grafice nu este o opțiune pentru mediul grafic de birou Gnome.

Orice încercare de repornire la cald este o înlocuire fragilă a repornirii la rece reale în cadrul sistemului de birou modern.

[Notă] Notă

Alternativ, puteți adăuga dinamic utilizatori la grupuri în timpul procesului de autentificare, adăugând linia „auth optional pam_group.so” la „/etc/pam.d/common-auth” și configurând „/etc/security/group.conf”; (consultați Cap. 4, Autentificare și controale de acces).

Dispozitivele fizice sunt doar un alt tip de fișier în sistemul Debian. Dacă aveți probleme cu accesarea dispozitivelor precum unitatea flash USB și unitatea CD-ROM dintr-un cont de utilizator, ar trebui să adăugați utilizatorul respectiv ca membru al grupului relevant.

Unele grupuri importante (notabile) furnizate de sistem permit membrilor lor să acceseze anumite fișiere și dispozitive fără privilegii root.


[Indicație] Indicație

Trebuie să aparțineți grupului dialout pentru a reconfigura modemul, a forma orice număr etc. Dar dacă root creează fișiere de configurare predefinite pentru partenerii (mașinile) de încredere în „/etc/ppp/peers/ ”, trebuie doar să aparțineți grupului dip pentru a crea o conexiune Dialup IP la acele mașini de încredere folosind comenzile pppd(8), pon(1) și poff(1).

Unele grupuri notabile furnizate de sistem permit membrilor lor să execute anumite comenzi fără privilegii root.


Pentru lista completă a utilizatorilor și grupurilor furnizate de sistem, consultați versiunea recentă a documentului „Utilizatori și grupuri” din „/usr/share/doc/base-passwd/users-and-groups.html” furnizat de pachetul base-passwd.

Consultați passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8) și pam_group(8) pentru comenzile de gestionare a utilizatorilor și grupurilor din sistem.

Există trei tipuri de marcaje de timp pentru un fișier GNU/Linux.


[Notă] Notă

ctime nu este ora creării fișierului.

[Notă] Notă

Valoarea reală a atime pe sistemul GNU/Linux poate fi diferită de cea din definiția istorică Unix.

  • Suprascrierea unui fișier modifică toate atributele mtime, ctime și atime ale fișierului.

  • Schimbarea proprietarului sau a permisiunilor unui fișier modifică atributele ctime și atime ale fișierului.

  • Citirea unui fișier modifică atributul atime al fișierului în sistemul Unix clasic.

  • Citirea unui fișier modifică atributul atime al fișierului pe sistemul GNU/Linux dacă sistemul său de fișiere este montat cu „strictatime”.

  • Citirea unui fișier pentru prima dată sau după o zi modifică atributul atime al fișierului pe sistemul GNU/Linux dacă sistemul său de fișiere este montat cu „relatime”; comportamentul implicit începând cu Linux 2.6.30).

  • Citirea unui fișier nu modifică atributul atime al fișierului pe sistemul GNU/Linux dacă sistemul său de fișiere este montat cu „noatime”.

[Notă] Notă

Opțiunile de montare „noatime” și „relatime” sunt introduse pentru a îmbunătăți performanța de citire a sistemului de fișiere în condiții normale de utilizare. Operația simplă de citire a fișierelor în cadrul opțiunii „strictatime” însoțește operația de scriere care consumă mult timp pentru a actualiza atributul atime. Dar atributul atime este rar utilizat, cu excepția fișierului mbox(5). Consultați mount(8).

Utilizați comanda touch(1) pentru a modifica marcajele temporale ale fișierelor existente.

Pentru marcajele temporale, comanda ls afișează șiruri traduse în limbi diferite de engleză („fr_FR.UTF-8”).

$ LANG=C  ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=en_US.UTF-8  ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=fr_FR.UTF-8  ls -l foo
-rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo
[Indicație] Indicație

Consultați Secțiune 9.3.4, „Afișare personalizată a orei și datei” pentru a personaliza ieșirea comenzii «ls -l».

Există două metode de asociere a unui fișier „foo” cu un nume de fișier diferit „bar”.

A se vedea exemplul următor pentru modificările numărului de legături și diferențele subtile în rezultatul comenzii «rm».

$ umask 002
$ echo "Original Content" > foo
$ ls -li foo
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
$ ln foo bar     # hard link
$ ln -s foo baz  # symlink
$ ls -li foo bar baz
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
$ rm foo
$ echo "New Content" > foo
$ ls -li foo bar baz
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
$ cat bar
Original Content
$ cat baz
New Content

Legătura dură poate fi creată în cadrul aceluiași sistem de fișiere și are același număr de nod-i, pe care îl afișează opțiunea „-i” cu ls(1) .

Legătura simbolică are întotdeauna permisiuni nominale de acces la fișiere de tipul „rwxrwxrwx”, așa cum se arată în exemplul de mai sus, permisiunile efective de acces fiind dictate de permisiunile fișierului către care face trimitere.

[Atenție] Atenție

În general, este o idee bună să nu creați legături simbolice sau legături dure complicate, cu excepția cazului în care aveți un motiv foarte bun. Acest lucru poate provoca probleme în care combinația logică a legăturilor simbolice duce la bucle în sistemul de fișiere.

[Notă] Notă

În general, este preferabil să utilizați legături simbolice în locul legăturilor dure, cu excepția cazului în care aveți un motiv întemeiat pentru a utiliza o legătură dură.

Directorul „.” conține legături către directorul în care apare, astfel încât numărul de legături ale oricărui director nou începe de la 2. Directorul „..” conține legături către directorul părinte, astfel încât numărul de legături ale directorului crește odată cu adăugarea de noi subdirectoare.

Dacă tocmai treceți de la Windows la Linux, veți observa rapid cât de bine concepută este legarea fișierelor în Unix, în comparație cu echivalentul Windows al „scurtăturilor”. Deoarece este implementată în sistemul de fișiere, aplicațiile nu pot vedea nicio diferență între un fișier legat și original. În cazul legăturilor dure, nu există nicio diferență.

O conductă cu nume este un fișier care funcționează ca o conductă. Introduceți ceva în fișier și acesta iese la celălalt capăt. De aceea se numește FIFO, sau First-In-First-Out (primul intrat, primul ieșit): primul lucru pe care îl introduceți în conductă este primul lucru care iese la celălalt capăt.

Dacă scrieți într-o conductă cu nume, procesul care scrie în conductă nu se termină până când informațiile scrise nu sunt citite din conductă. Dacă citiți dintr-o conductă cu nume, procesul de citire așteaptă până când nu mai este nimic de citit înainte de a se termina. Dimensiunea conductei este întotdeauna zero --- nu stochează date, ci doar leagă două procese, similar funcționalității oferite de sintaxa shell „|”. Cu toate acestea, deoarece această conductă are un nume, cele două procese nu trebuie să se afle pe aceeași linie de comandă și nici măcar să fie rulate de același utilizator. Conductele au reprezentat o inovație foarte influentă a sistemului Unix.

De exemplu, încercați următoarele

$ cd; mkfifo mypipe
$ echo "hello" >mypipe & # put into background
[1] 8022
$ ls -l mypipe
prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe
$ cat mypipe
hello
[1]+  Done                    echo "hello" >mypipe
$ ls mypipe
mypipe
$ rm mypipe

Fișierele de dispozitive se referă la dispozitivele fizice sau virtuale din sistemul dvs., cum ar fi discul dur, placa video, ecranul sau tastatura. Un exemplu de dispozitiv virtual este consola, reprezentată de „/dev/console”.

Există 2 tipuri de fișiere de dispozitiv.

  • Dispozitiv de caractere

    • accesat de câte un caracter pe rând

    • 1 caracter = 1 octet

    • De exemplu, tastatura, portul serial, …

  • Dispozitiv de blocuri

    • accesat în unități mai mari numite blocuri

    • 1 bloc > 1 octet

    • De exemplu, discul dur, …

Puteți citi și scrie fișiere de dispozitiv, deși fișierul poate conține date binare care pot fi incomprehensibile pentru oameni. Scrierea datelor direct în aceste fișiere este uneori utilă pentru depanarea conexiunilor hardware. De exemplu, puteți descărca un fișier text pe dispozitivul de imprimare „/dev/lp0” sau puteți trimite comenzi modem către portul serial corespunzător „/dev/ttyS0”. Dar, dacă nu se face cu atenție, acest lucru poate provoca o catastrofă majoră. Așadar, fiți precauți.

[Notă] Notă

Pentru accesul normal la o imprimantă, utilizați lp(1).

Numărul nodului dispozitivului este afișat prin executarea comenzii ls(1), după cum urmează.

$ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero
brw-rw---T  1 root disk     8,  0 Oct 16 20:57 /dev/sda
brw-rw---T+ 1 root cdrom   11,  0 Oct 16 21:53 /dev/sr0
crw-rw---T  1 root dialout  4, 64 Oct 16 20:57 /dev/ttyS0
crw-rw-rw-  1 root root     1,  5 Oct 16 20:57 /dev/zero
  • /dev/sda” are numărul major al dispozitivului 8 și numărul minor al dispozitivului 0. Acesta este accesibil în mod citire/scriere pentru utilizatorii care aparțin grupului disk.

  • /dev/sr0” are numărul major al dispozitivului 11 și numărul minor al dispozitivului 0. Acesta este accesibil în mod citire/scriere pentru utilizatorii care aparțin grupului cdrom.

  • /dev/ttyS0” are numărul major al dispozitivului 4 și numărul minor al dispozitivului 64. Acesta este accesibil în mod citire/scriere pentru utilizatorii care aparțin grupului dialout.

  • /dev/zero” are numărul major al dispozitivului 1 și numărul minor al dispozitivului 5. Acesta poate fi citit/scris de către oricine.

În sistemul Linux modern, sistemul de fișiere din „/dev/” este completat automat de mecanismul udev(7).

procfs și sysfs montate pe „/proc” și „/sys” sunt pseudo-sisteme de fișiere și expun structurile de date interne ale nucleului către spațiul utilizatorului. Cu alte cuvinte, aceste intrări sunt virtuale, ceea ce înseamnă că acționează ca o fereastră convenabilă către funcționarea sistemului de operare.

Directorul „/proc” conține (printre altele) un subdirector pentru fiecare proces care rulează în sistem, numit după ID-ul procesului (PID). Utilitarele de sistem care accesează informații despre procese, cum ar fi ps(1), obțin informațiile din această structură de directoare.

Directoarele din „/proc/sys/” conțin interfețe pentru modificarea anumitor parametri ai nucleului în timpul rulări; (puteți face același lucru prin comanda specializată sysctl(8) sau prin fișierul său de preîncărcare/configurare „/etc/sysctl.d/*.conf”).

Oamenii intră adesea în panică când observă un anumit fișier - „/proc/kcore” - care este, în general, foarte mare. Acesta este (mai mult sau mai puțin) o copie a conținutului memoriei calculatorului dvs. Este utilizat pentru depanarea nucleului. Este un fișier virtual care indică memoria calculatorului, așa că nu vă faceți griji în privința dimensiunii sale.

Directoarele din „/sys” conține structuri de date exportate ale nucleului, atributele acestora și legăturile dintre ele. De asemenea, conține interfețe pentru modificarea anumitor parametri ai nucleului în timpul rulării.

A se vedea „proc.txt(.gz)”, „sysfs.txt(.gz)” și alte documente conexe din documentația nucleului Linux („/usr/share/doc/linux-doc-*/Documentation/filesystems/*”) furnizate de pachetul linux-doc-*.

tmpfs este un sistem de fișiere temporar care păstrează toate fișierele în memoria virtuală. Datele din tmpfs din cache-ul paginii din memorie pot fi transferate în spațiul de interschimb (swap) de pe disc, după cum este necesar.

Directorul „/run” este montat ca tmpfs în procesul de pornire inițială. Acest lucru permite scrierea în el chiar și atunci când directorul „/” este montat ca fiind numai pentru citire. Aceasta este noua locație pentru stocarea fișierelor de stare tranzitorie și înlocuiește mai multe locații descrise în Filesystem Hierarchy Standard versiunea 2.3:

  • /var/run” → „/run

  • /var/lock” → „/run/lock

  • "/dev/shm" → "/run/shm"

A se vedea „tmpfs.txt(.gz)” în documentația nucleului Linux („/usr/share/doc/linux-doc-*/Documentation/filesystems/*”) furnizată de pachetul linux-doc-*.

Midnight Commander (MC) este un „briceag elvețian” GNU pentru consola Linux și alte medii terminale. Acesta oferă începătorilor o experiență de consolă bazată pe meniuri, mult mai ușor de învățat decât comenzile standard Unix.

Este posibil să fie necesar să instalați pachetul Midnight Commander, denumit „mc”, urmând pașii de mai jos.

$ sudo apt-get install mc

Utilizați comanda mc(1) pentru a explora sistemul Debian. Acesta este cel mai bun mod de a învăța. Explorați câteva locații interesante folosind tastele săgeții și tasta Enter.

  • /etc” și subdirectoarele acestuia

  • /var/log” și subdirectoarele acestuia

  • /usr/share/doc” și subdirectoarele acestuia

  • /usr/sbin” și „/usr/bin

Editorul intern are o schemă interesantă de copiere și lipire. Apăsarea tastei F3 marchează începutul unei selecții, o a doua apăsare a tastei F3 marchează sfârșitul selecției și evidențiază selecția. Apoi puteți muta cursorul. Dacă apăsați tasta «F6», zona selectată este mutată la locația cursorului. Dacă apăsați tasta «F5», zona selectată este copiată și inserată la locația cursorului. F2 salvează fișierul. F10 vă scoate din program. Majoritatea tastelor cursorului funcționează intuitiv.

Acest editor poate fi pornit direct pe un fișier folosind una dintre următoarele comenzi.

$ mc -e filename_to_edit
$ mcedit filename_to_edit

Acesta nu este un editor cu ferestre multiple, dar se pot utiliza mai multe console Linux pentru a obține același efect. Pentru a copia între ferestre, utilizați tastele Alt-Fn pentru a comuta între consolele virtuale și utilizați „File→Insert file” (Fișier→Inserați fișier) sau „File→Copy to file” (Fișier→Copiați în fișier) pentru a muta o parte dintr-un fișier într-un alt fișier.

Acest editor intern poate fi înlocuit cu orice editor extern la alegere.

De asemenea, multe programe utilizează variabilele de mediu „$EDITOR” sau „$VISUAL” pentru a decide ce editor să utilizeze. Dacă nu vă simțiți confortabil cu vim(1) sau nano(1) la început, puteți defini aceste variabile ca „mcedit” adăugând următoarele linii în „~/.bashrc”.

export EDITOR=mcedit
export VISUAL=mcedit

Recomand să le definiți ca „vim”, dacă este posibil.

Dacă nu vă simțiți confortabil cu vim(1), puteți continua să utilizați mcedit(1) pentru majoritatea sarcinilor de întreținere a sistemului.

Deși MC vă permite să faceți aproape totul, este foarte important să învățați cum să utilizați instrumentele liniei de comandă invocate din promptul shell și să vă familiarizați cu mediul de lucru de tip Unix.

Deoarece shell-ul de autentificare poate fi utilizat de unele programe de inițializare a sistemului, este prudent să îl păstrați ca bash(1) și să evitați schimbarea shell-ului de autentificare cu chsh(1).

Dacă doriți să utilizați un prompt interactiv diferit, definiți-l din configurația emulatorului de terminal cu interfață grafică sau porniți-l din ~/.bashrc, de exemplu, introducând „exec /usr/bin/zsh -i -l” sau „exec /usr/bin/fish -i -l”.


[Indicație] Indicație

Deși shell-urile de tip POSIX au aceeași sintaxă de bază, ele pot diferi în ceea ce privește comportamentul în aspecte fundamentale, precum variabilele shell și expansiunile globale (cu caractere joker). Vă rugăm să consultați documentația acestora pentru detalii.

În acest capitol al tutorialului, shell-ul interactiv înseamnă întotdeauna bash.

Operațiile cu mouse-ul pentru text în sistemul Debian combină două stiluri cu câteva modificări:

  • Operații tradiționale ale mouse-ului în stil Unix:

    • utilizează 3 butoane (clic)

    • utilizare PRIMARĂ

    • utilizată de aplicații X precum xterm și aplicații text în consola Linux

  • Operații moderne cu mouse-ul în stil de interfață grafică:

    • utilizează 2 butoane (glisare + clic)

    • utilizare PRIMARĂ și CLIPBOARD

    • utilizată în aplicații cu interfață grafică modernă, cum ar fi gnome-terminal


Aici, selecția PRIMARĂ este intervalul de text evidențiat. În cadrul programului de terminal, se utilizează în schimb Shift-Ctrl-C pentru a evita închiderea unui program în execuție.

Rotița centrală a mouse-ului modern cu rotiță este considerată butonul din mijloc al mouse-ului și poate fi utilizată pentru clic-mijloc. Apăsarea simultană a butoanelor stânga și dreapta ale mouse-ului servește ca clic-mijloc în cazul unui mouse cu 2 butoane.

Pentru a utiliza un mouse în consolele de caractere Linux, trebuie să aveți gpm(8) rulând ca demon.

Ar trebui să deveniți expert într-una dintre variantele programelor Vim sau Emacs, care sunt populare în sistemele de tip Unix.

Cred că este bine să vă obișnuiți cu comenzile Vim, deoarece editorul Vi este mereu prezent în lumea Linux/Unix; (de fapt, programele originale vi sau noul nvi se găsesc peste tot. Am ales Vim pentru începători, deoarece oferă ajutor prin tasta F1, fiind suficient de similar și mai avansat).

Dacă ați ales Emacs sau XEmacs ca editor, aceasta este o altă alegere bună, în special pentru programare. Emacs are o mulțime de alte caracteristici, inclusiv funcționarea ca cititor de știri, editor de directoare, program de poștă electronică etc. Când este utilizat pentru programare sau editarea scripturilor shell, recunoaște în mod inteligent formatul asupra căruia lucrați și încearcă să vă ofere asistență. Unii oameni susțin că singurul program de care au nevoie pe Linux este Emacs. Zece minute de învățare a Emacs acum pot economisi ore mai târziu. Este foarte recomandat să aveți manualul GNU Emacs ca referință atunci când învățați Emacs.

Toate aceste programe vin de obicei cu un program de tutoriat pentru a le învăța prin practică. Porniți Vim tastând „vim” și apăsați tasta F1. Ar trebui să citiți cel puțin primele 35 de linii. Apoi urmați cursul de formare pe internet mutând cursorul la „|tutor|” și apăsând Ctrl-].

[Notă] Notă

Editorii buni, precum Vim și Emacs, pot gestiona corect textele codificate în UTF-8 și alte codificări exotice. Este o idee bună să utilizați mediul de interfață grafică cu configurația regională pentru text, UTF-8 și să instalați programele și fonturile necesare în acesta. Editorii au opțiuni pentru a configura codificarea fișierelor independent de mediul de interfață grafică. Vă rugăm să consultați documentația acestora referitoare la textul multi-octet.

Versiunea recentă vim(1) pornește în mod implicit cu opțiunea „nocompatible” și intră în modul NORMAL.[1]


Vă rugăm să utilizați programul „vimtutor” pentru a învăța vim printr-un curs tutorial interactiv.

Programul vim își modifică comportamentul în funcție de tastele apăsate, pe baza modului. Tastarea în tampon se face în principal în modul INSERARE și în modul ÎNLOCUIRE. Deplasarea cursorului se face în principal în modul NORMAL. Selecția interactivă se face în modul VIZUAL . Tastarea „:” în modul NORMAL schimbă modul în modul Ex . Modul Ex acceptă comenzi.

[Indicație] Indicație

Vim vine cu pachetul Netrw. Netrw permite citirea și scrierea fișierelor, navigarea în directoare prin rețea și navigarea locală! Încercați Netrw cu „vim .” (un punct ca argument) și citiți manualul său la „:help netrw”.

Pentru configurarea avansată a vim, consultați Secțiune 9.2, „Personalizarea vim”.

Să învățăm comenzile de bază ale Unix. Aici folosesc „Unix” în sensul său generic. Orice sistem de operare clonă Unix oferă de obicei comenzi echivalente. Sistemul Debian nu face excepție. Nu vă faceți griji dacă unele comenzi nu funcționează așa cum doriți acum. Dacă alias este utilizat în shell, ieșirile corespunzătoare ale comenzii sunt diferite. Aceste exemple nu sunt menite să fie executate în această ordine.

Încercați toate comenzile următoare din contul de utilizator fără privilegii.

Tabel 1.17. Lista comenzilor Unix de bază

comandă descriere
pwd afișează numele directorului curent/de lucru
whoami afișează numele utilizatorului curent
id afișează identitatea utilizatorului curent (nume, uid, gid și grupurile asociate)
file foo afișează tipul de fișier pentru fișierul „foo
type -p commandname afișează locația fișierului comenzii „nume-comandă
which commandname , ,
type commandname afișează informații despre comanda „nume-comandă
apropos key-word găsește comenzi legate de „cuvânt-cheie
man -k key-word , ,
whatis commandname afișează o explicație pe o singură linie privind comanda „nume-comandă
man -a commandname afișează explicația privind comanda „nume-comandă” (stil Unix)
info commandname afișează o explicație destul de lungă privind comanda „nume-comandă” (stil GNU)
ls listează conținutul directorului (fișiere și directoare fără punct)
ls -a listează conținutul directorului (toate fișierele și directoarele)
ls -A listează conținutul directorului (aproape toate fișierele și directoarele, adică omite „..” și „.”)
ls -la listează tot conținutul directorului cu informații detaliate
ls -lai listează tot conținutul directorului cu numărul de nod-i și informații detaliate
ls -d listează toate directoarele din directorul curent
tree afișează conținutul arborelui de fișiere
lsof foo afișează starea deschisă a fișierului „foo
lsof -p pid listează fișierele deschise de ID-ul procesului: „pid
mkdir foo creează un nou director „foo” în directorul curent
rmdir foo elimină directorul „foo” din directorul curent
cd foo schimbă directorul în directorul „foo” din directorul curent sau din directorul listat în variabila „$CDPATH
cd / schimbă directorul la directorul rădăcină
cd schimbă directorul la directorul personal al utilizatorului curent
cd /foo schimbă directorul la directorul cu ruta absolută „/foo
cd .. schimbă directorul la directorul părinte
cd ~foo schimbă directorul la directorul personal al utilizatorului „foo
cd - schimbă directorul la directorul anterior
</etc/motd pager afișează conținutul fișierului „/etc/motd” folosind paginatorul implicit
touch junkfile creați un fișier gol „fișier-test
cp foo bar copiază un fișier existent „foo” într-un fișier nou „bar
rm junkfile elimină fișierul „fișier-test
mv foo bar redenumește un fișier existent „foo” într-un nou nume „bar” („bar” nu trebuie să existe)
mv foo bar mută un fișier existent „foo” într-o nouă locație „bar/foo” (directorul „bar” trebuie să existe)
mv foo bar/baz mută un fișier existent „foo” într-o nouă locație cu un nou nume „bar/baz” (directorul „bar” trebuie să existe, dar directorul „bar/baz” nu trebuie să existe)
chmod 600 foo face ca un fișier existent „foo” să fie necitibil și neinscriptibil de către alte persoane (neexecutabil pentru toți)
chmod 644 foo face ca un fișier existent „foo” să fie citibil, dar neinscriptibil de către alte persoane (neexecutabil pentru toți)
chmod 755 foo faceți ca un fișier existent „foo” să fie citibil, dar neinscriptibil de către alte persoane (executabil pentru toți)
find . -name pattern găsește numele de fișiere ce coincid folosind shell-ul „model” (mai lent)
locate -d . pattern găsește numele de fișiere ce coincid folosind shell-ul „model” (mai rapid folosind baza de date generată regulat)
grep -e "pattern" *.html găsește un „model” în toate fișierele care se termină cu „.html” din directorul curent și le afișează pe toate
top afișează informații despre proces pe ecran complet, tastați „q” pentru a ieși
ps aux | pager afișează informații despre toate procesele care rulează utilizând ieșirea în stil BSD
ps -ef | pager afișează informații despre toate procesele care rulează utilizând ieșirea în stilul Unix system-V
ps aux | grep -e "[e]xim4*" afișează toate procesele care rulează „exim” și „exim4
ps axf | pager afișează informații despre toate procesele care rulează cu ieșire grafică ASCII
kill 1234 omoară un proces identificat prin ID-ul procesului: „1234
gzip foo comprimă „foo” pentru a crea „foo.gz” folosind algoritmul de codificare Lempel-Ziv (LZ77)
gunzip foo.gz decomprimă „foo.gz” pentru a crea „foo
bzip2 foo comprimă „foo” pentru a crea „foo.bz2” folosind algoritmul de comprimare a textului Burrows-Wheeler și codificarea Huffman (comprimare mai bună decât gzip)
bunzip2 foo.bz2 decomprimă „foo.bz2” pentru a crea „foo
xz foo comprimă „foo” pentru a crea „foo.xz” folosind algoritmul lanțului Lempel–Ziv–Markov (comprimare mai bună decât bzip2)
unxz foo.xz decomprimă „foo.xz” pentru a crea „foo
tar -xvf foo.tar extrage fișierele din arhiva „foo.tar
tar -xvzf foo.tar.gz extrage fișierele din arhiva comprimată gzip „foo.tar.gz
tar -xvjf foo.tar.bz2 extrage fișierele din arhiva „foo.tar.bz2
tar -xvJf foo.tar.xz extrage fișierele din arhiva „foo.tar.xz
tar -cvf foo.tar bar/ conținutul arhivei din dosarul „bar/” în arhiva „foo.tar
tar -cvzf foo.tar.gz bar/ conținutul arhivei din dosarul „bar/” în arhiva comprimată „foo.tar.gz
tar -cvjf foo.tar.bz2 bar/ conținutul arhivei din dosarul „bar/” în arhiva „foo.tar.bz2
tar -cvJf foo.tar.xz bar/ conținutul arhivei din dosarul „bar/” în arhiva „foo.tar.xz
zcat README.gz | pager afișează conținutul fișierului comprimat „README.gz” utilizând paginatorul implicit
zcat README.gz > foo creează un fișier „foo” cu conținutul decomprimat al „README.gz
zcat README.gz >> foo adaugă conținutul decomprimat al „README.gz” la sfârșitul fișierului „foo” (dacă acesta nu există, mai întâi îl creează)

[Notă] Notă

Unix are tradiția de a ascunde numele fișierelor care încep cu „.”. Acestea sunt, de obicei, fișiere care conțin informații de configurare și preferințele utilizatorului.

Pentru comanda cd, consultați builtins(7).

Paginatorul implicit al sistemului Debian de bază este more(1), care nu permite derularea înapoi. Prin instalarea pachetului less folosind linia de comandă „apt-get install less”, less(1) devine paginatorul implicit și puteți derula înapoi cu tastele cursorului.

[” și „]” din expresia regulată a comenzii „ps aux | grep -e „[e]xim4*”” de mai sus permit grep să evite potrivirea cu sine însuși. „4*” din expresia regulată înseamnă 0 sau mai multe repetări ale caracterului „4”, permițând astfel lui grep să potrivească atât cu „exim”, cât și cu „exim4”. Deși „*” este utilizat în globalizarea numelui de fișier shell și în expresia regulată, semnificațiile lor sunt diferite. Aflați mai multe despre expresia regulată din grep(1).

Vă rugăm să parcurgeți directoarele și să aruncați o privire în sistem folosind comenzile de mai sus ca exercițiu. Dacă aveți întrebări cu privire la oricare dintre comenzile consolei, vă rugăm să citiți pagina manualului.

De exemplu, încercați următoarele

$ man man
$ man bash
$ man builtins
$ man grep
$ man ls

Stilul paginilor de manual poate fi puțin dificil de asimilat, deoarece acestea sunt destul de concise, în special cele mai vechi, foarte tradiționale. Dar, odată ce vă obișnuiți cu ele, veți aprecia concisitatea lor.

Rețineți că multe comenzi de tip Unix, inclusiv cele din GNU și BSD, afișează informații succinte de ajutor dacă le invocați într-unul din următoarele moduri (sau fără argumente, în unele cazuri).

$ commandname --help
$ commandname -h

Acum aveți o idee despre cum se utilizează sistemul Debian. Să analizăm în detaliu mecanismul de execuție a comenzilor în sistemul Debian. Aici, am simplificat realitatea pentru începători. Consultați bash(1) pentru explicații exacte.

O comandă simplă este o secvență de componente.

  1. Atribuiri de variabile (opțional)

  2. Numele comenzii

  3. Argumente (opțional)

  4. Redirecționări (opțional: > , >> , < , << , etc.)

  5. Operator de control (opțional: && , || , newline , ; , & , ( , ) )

Valorile unor variabile de mediu modifică comportamentul unor comenzi Unix.

Valorile implicite ale variabilelor de mediu sunt stabilite inițial de sistemul PAM, iar unele dintre ele pot fi reajustate de anumite programe aplicaționale.

  • Sistemul PAM, cum ar fi pam_env, poate defini variabile de mediu prin /etc/pam.conf„, ”/etc/environment„ și ”/etc/default/locale".

  • Administratorul de afișare, cum ar fi gdm3, poate redefini variabilele de mediu pentru sesiunea de interfață grafică prin „~/.profile”.

  • Inițializarea programului specific utilizatorului poate redefini variabilele de mediu prin „~/.profile”, „~/.bash_profile” și „~/.bashrc”.

Configurația regională implicită este definită în variabila de mediu „$LANG” și este configurată ca „LANG=xx_YY.UTF-8” de către programul de instalare sau de către configurația ulterioară a interfeței grafice, de exemplu, „Configurări” → „Regiune și limbă” → „Limbă” / „Formate” pentru GNOME.

[Notă] Notă

Vă recomand să configurați mediul de sistem doar cu variabila „$LANG” pentru moment și să evitați variabilele „$LC_*”, cu excepția cazului în care este absolut necesar.

Valoarea completă a configurației regionale atribuită variabilei „$LANG” este formată din 3 părți: „xx_YY.ZZZZ”.



Executarea tipică a comenzii utilizează o secvență de linii shell, după cum urmează.

$ echo $LANG
en_US.UTF-8
$ date -u
Wed 19 May 2021 03:18:43 PM UTC
$ LANG=fr_FR.UTF-8 date -u
mer. 19 mai 2021 15:19:02 UTC

Aici, programul date(1) este executat cu valori de configurație regională diferite.

Majoritatea execuțiilor de comenzi nu au, de obicei, o definiție a variabilei de mediu precedentă. Pentru exemplul de mai sus, puteți executa alternativ următoarele.

$ LANG=fr_FR.UTF-8
$ date -u
mer. 19 mai 2021 15:19:24 UTC
[Indicație] Indicație

Când raportați o eroare, este recomandat să rulați și să verificați comanda în configurația regională „en_US.UTF-8” dacă utilizați un mediu non-englez.

Pentru detalii precise privind configurarea parametrilor configurației regionale, consultați Secțiune 8.1, „Configurația regională”.

Să încercăm să reținem următoarele expresii ale comenzii shell tastate într-o singură linie ca parte a comenzii shell.

Tabel 1.23. Expresii idiomatice ale comenzii shell

expresia idiomatică a comenzii descriere
command & execuție în fundal a comenzii în subshell
command1 | command2 redirecționează ieșirea standard a comenzii1 către intrarea standard a comenzii2 (execuție concomitentă)
command1 2>&1 | command2 redirecționează atât ieșirea standard, cât și eroarea standard a comenzii1 către intrarea standard a comenzii2 (execuție concomitentă)
command1 ; command2 execută comanda1 și comanda2 secvențial
command1 && command2 execută comanda1; dacă are succes, execută comanda2 secvențial (returnează succes dacă atât comanda1 cât și comanda2 au succes)
command1 || command2 execută comanda1; dacă nu are succes, execută comanda2 secvențial (returnează succes dacă comanda1 sau comanda2 au succes)
command > foo redirecționează ieșirea standard a comenzii comanda către un fișier foo (suprascrie)
command 2> foo redirecționează ieșirea de eroare standard a comenzii comanda către un fișier foo (suprascrie)
command >> foo redirecționează ieșirea standard a comenzii comanda către un fișier foo (adăugare)
command 2>> foo redirecționează ieșirea de eroare standard a comenzii command către un fișier foo (adăugare)
command > foo 2>&1 redirecționează atât ieșirea standard, cât și ieșirea de eroare standard a comenzii comanda către un fișier foo
command < foo redirecționează intrarea standard a comenzii comanda către un fișier foo
command << delimiter redirecționează intrarea standard a comenzii comanda către următoarele linii până când se întâlnește „delimitatorul” (aici, document)
command <<- delimiter redirecționează intrarea standard a comenzii comanda către următoarele linii până când se întâlnește „delimitatorul” (aici document, caracterele de tabulare din fața liniilor de intrare sunt eliminate)

Sistemul Debian este un sistem multi-sarcini. Sarcinile de fundal permit utilizatorilor să ruleze mai multe programe într-un singur shell. Gestionarea proceselor în fundal implică utilizarea comenzilor încorporate ale shell-ului: jobs, fg, bg și kill. Vă rugăm să citiți secțiunile din bash(1) sub „SEMNALE” și „CONTROLUL SARCINILOR” și builtins(1).

De exemplu, încercați următoarele

$ </etc/motd pager
$ pager </etc/motd
$ pager /etc/motd
$ cat /etc/motd | pager

Deși toate cele 4 exemple de redirecționări shell afișează același lucru, ultimul exemplu execută o comandă suplimentară cat și irosește resurse fără niciun motiv.

Shell-ul vă permite să deschideți fișiere folosind comanda internă exec cu un descriptor de fișier arbitrar.

$ echo Hello >foo
$ exec 3<foo 4>bar  # open files
$ cat <&3 >&4       # redirect stdin to 3, stdout to 4
$ exec 3<&- 4>&-    # close files
$ cat bar
Hello

Descriptorii de fișiere 0-2 sunt predefiniți.


În mediul de lucru de tip Unix, procesarea textului se realizează prin transferul textului prin intermediul unor lanțuri de instrumente standard de procesare a textului. Aceasta a fost o altă inovație crucială a sistemului Unix.

Există câteva instrumente standard de procesare a textului care sunt utilizate foarte des în sistemele de tip Unix.

Dacă nu sunteți sigur ce fac exact aceste comenzi, vă rugăm să utilizați «man comanda» pentru a afla singur.

[Notă] Notă

Ordinea de sortare și expresia intervalului depind de configurația regională. Dacă doriți să obțineți comportamentul tradițional pentru o comandă, utilizați parametrul de configurare regională C sau C.UTF-8 în locul celor normale UTF-8 (consultați Secțiune 8.1, „Configurația regională”).

[Notă] Notă

Expresiile regulate Perl(perlre(1)), Expresii regulate compatibile cu Perl („Perl Compatible Regular Expressions”: PCRE) și expresiile regulate Python oferite de modulul re au multe extensii comune cu ERE normal.

Expresiile regulate sunt utilizate în multe instrumente de procesare a textului. Acestea sunt similare cu modelele globale din shell, dar sunt mai complicate și mai puternice.

Expresia regulată descrie modelul de potrivire și este alcătuită din caractere text și metacaractere.

Un metacaracter este doar un caracter cu o semnificație specială. Există două stiluri principale, „Basic Regular Expressions”: BRE (expresii regulate de bază) și „Extended Regular Expressions”: ERE (expresii regulate extinse), în funcție de instrumentele de text descrise mai sus.


Expresia regulată emacs este în esență BRE, dar a fost extinsă pentru a trata „+” și „?” ca metacaractere ca în ERE. Astfel, nu este necesar să le eludați cu „\” în expresia regulată a emacs.

grep(1) poate fi utilizat pentru a efectua căutarea textului folosind o expresie regulată.

De exemplu, încercați următoarele

$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
Yoyodyne, Inc., hereby disclaims all copyright interest in the program

Pentru expresia de înlocuire, unele caractere au semnificații speciale.


Pentru înlocuirea șirurilor în Perl, se utilizează „$&” în loc de „&” și „$n” în loc de „\n”.

De exemplu, încercați următoarele

$ echo zzz1abc2efg3hij4 | \
sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
zzzefg3hij4===1abc
$ echo zzz1abc2efg3hij4 | \
sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/'
zzzefg3hij4===1abc
$ echo zzz1abc2efg3hij4 | \
perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
zzzefg3hij4===1abc

Aici, vă rugăm să acordați o atenție deosebită stilului expresiei regulate în paranteze și modului în care șirurile potrivite sunt utilizate în procesul de înlocuire a textului în diferite instrumente.

Aceste expresii regulate pot fi utilizate și pentru mișcările cursorului și acțiunile de înlocuire a textului în unele editoare.

Bară oblică inversă „\” la sfârșitul liniei în linia de comandă a shell-ului eludează caracterul de linie nouă ca caracter spațiu alb și continuă introducerea liniei de comandă a shell-ului în linia următoare.

Vă rugăm să citiți toate paginile de manual aferente pentru a învăța aceste comenzi.

Comanda ed(1) poate înlocui toate aparițiile „FROM_REGEX” cu „TO_TEXT” în „file”.

$ ed file <<EOF
,s/FROM_REGEX/TO_TEXT/g
w
q
EOF

Comanda sed(1) poate înlocui toate aparițiile „FROM_REGEX” cu „TO_TEXT” în „file”.

$ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file

Comanda vim(1) poate înlocui toate aparițiile „FROM_REGEX” cu „TO_TEXT” în „file” folosind comenzi ex(1).

$ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+update' '+q' file
[Indicație] Indicație

Indicatorul „c” din exemplul de mai sus asigură confirmarea interactivă pentru fiecare substituție.

Mai multe fișiere („file1”, „file2” și „file3”) pot fi procesate cu expresii regulate în mod similar cu vim(1) sau perl(1).

$ vim '+argdo %s/FROM_REGEX/TO_TEXT/gce|update' '+q' file1 file2 file3
[Indicație] Indicație

Indicatorul „e” din exemplul de mai sus împiedică eroarea „No match” (fără corespondență) să întrerupă o căutare.

$ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' file1 file2 file3

În exemplul perl(1), „-i” este pentru editarea pe loc (fără folosirea unui tampon/fișier temporal pentru aceasta) a fiecărui fișier țintă, iar „-p” este pentru bucla implicită peste toate fișierele date.

[Indicație] Indicație

Utilizarea argumentului „-i.bak” în locul „-i” păstrează fiecare fișier original prin adăugarea „.bak” la numele fișierului. Acest lucru facilitează recuperarea în cazul erorilor pentru substituții complexe.

[Notă] Notă

ed(1) și vim(1) sunt BRE; perl(1) este ERE.

Să luăm în considerare un fișier text numit „DPL” în care sunt enumerate numele unor lideri ai proiectului Debian dinainte de 2004 și data inițierii lor, într-un format separat prin spații.

Ian     Murdock   August  1993
Bruce   Perens    April   1996
Ian     Jackson   January 1998
Wichert Akkerman  January 1999
Ben     Collins   April   2001
Bdale   Garbee    April   2002
Martin  Michlmayr March   2003
[Indicație] Indicație

Consultați „O scurtă istorie a Debian” pentru cea mai recentă istorie a conducerii Debian.

Awk este frecvent utilizat pentru extragerea datelor din aceste tipuri de fișiere.

De exemplu, încercați următoarele

$ awk '{ print $3 }' <DPL                   # month started
August
April
January
January
April
April
March
$ awk '($1=="Ian") { print }' <DPL          # DPL called Ian
Ian     Murdock   August  1993
Ian     Jackson   January 1998
$ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started
April 1996

Shell-uri precum Bash pot fi, de asemenea, utilizate pentru a analiza acest tip de fișiere.

De exemplu, încercați următoarele

$ while read first last month year; do
    echo $month
  done <DPL
... same output as the first Awk example

Aici, comanda internă read utilizează caracterele din „$IFS” („internal field separators” - separatoare interne de câmpuri) pentru a împărți liniile în cuvinte.

Dacă schimbați „$IFS” cu „:”, puteți analiza „/etc/passwd” cu shell-ul fără probleme.

$ oldIFS="$IFS"   # save old value
$ IFS=':'
$ while read user password uid gid rest_of_line; do
    if [ "$user" = "bozo" ]; then
      echo "$user's ID is $uid"
    fi
  done < /etc/passwd
bozo's ID is 1000
$ IFS="$oldIFS"   # restore old value

(Dacă se utilizează Awk pentru a face același lucru, utilizați „FS=':'” pentru a defini separatorul de câmpuri.)

IFS este utilizat și de shell pentru a împărți rezultatele expansiunii parametrilor, substituției comenzilor și expansiunii aritmetice. Acestea nu apar în cuvintele între ghilimele duble sau simple. Valoarea implicită a IFS este spațiu, tabulator și linie nouă combinate.

Aveți grijă când utilizați aceste trucuri IFS ale shell-ului. Pot apărea lucruri ciudate atunci când shell-ul interpretează anumite părți ale scriptului ca fiind intrare.

$ IFS=":,"                        # use ":" and "," as IFS
$ echo IFS=$IFS,   IFS="$IFS"     # echo is a Bash builtin
IFS=  , IFS=:,
$ date -R                         # just a command output
Sat, 23 Aug 2003 08:30:15 +0200
$ echo $(date -R)                 # sub shell --> input to main shell
Sat  23 Aug 2003 08 30 36 +0200
$ unset IFS                       # reset IFS to the default
$ echo $(date -R)
Sat, 23 Aug 2003 08:30:50 +0200

Următoarele scripturi fac lucruri interesante ca parte a unei conducte (direcționări).

Tabel 1.27. Lista fragmentelor de script pentru comenzi de direcționare

fragment de script (introduceți într-o singură linie) efectul comenzii
find /usr -print găsește toate fișierele din „/usr
seq 1 100 imprimă numere de la 1 până la 100
| xargs -n 1 command rulează comanda în mod repetat cu fiecare element din conductă ca argument al său
| xargs -n 1 echo împarte elementele separate prin spații albe din conductă în linii
| xargs echo fuzionează toate liniile din conductă într-o singură linie
| grep -e regex_pattern extrage linii din conductă care conțin model_expresie-regulată
| grep -v -e regex_pattern extrage liniile din conductă care nu conțin model_expresie-regulată
| cut -d: -f3 - extrage al treilea câmp din conductă separat prin „:” (fișier passwd etc.)
| awk '{ print $3 }' extrage al treilea câmp din șirul separat prin spații
| awk -F'\t' '{ print $3 }' extrage al treilea câmp din șirul separat prin tabulator
| col -bx elimină „backspace” (retururile de cărucior) și transformă tabulatoarele în spații
| expand - transformă tabulatoarele în spații
| sort| uniq sortează și elimină duplicatele
| tr 'A-Z' 'a-z' convertește majusculele în minuscule
| tr -d '\n' concatenează liniile într-o singură linie
| tr -d '\r' elimină CR (retururile de cărucior)
| sed 's/^/# /' adaugă „#” la începutul fiecărei linii
| sed 's/\.ext//g' elimină „.ext
| sed -n -e 2p imprimă a doua linie
| head -n 2 - imprimă primele 2 linii
| tail -n 2 - imprimă ultimele 2 linii

Un script shell de o singură linie poate parcurge mai multe fișiere folosind find(1) și xargs(1) pentru a efectua sarcini destul de complicate. Vedeți Secțiune 10.1.5, „Expresii idiomatice pentru selectarea fișierelor” și Secțiune 9.4.9, „Repetarea unei comenzi care parcurge fișierele”.

Când utilizarea modului interactiv al shell-ului devine prea complicată, luați în considerare scrierea unui script shell (consultați Secțiune 12.1, „Scriptul Shell”).



[1] Chiar și versiunea mai veche vim poate porni în modul „nocompatible” prin opțiunea „-N”.