Cuprins
$LANG”
$PATH”
$HOME”
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ă |
|---|---|
|
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ă |
|---|---|
|
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 |
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 |
|---|---|
|
Nu divulgați niciodată parola de root altor persoane. |
|
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”). |
Iată câteva metode de bază pentru a obține promptul shell root utilizând parola root.
Tastați root la promptul de autentificare bazat pe
caractere.
Tastați „su -l” din orice prompt al shell-ului
utilizatorului.
Aceasta nu păstrează mediul utilizatorului curent.
Tastați „su” din orice prompt al shell-ului
utilizatorului.
Aceasta păstrează o parte din mediul utilizatorului curent.
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 |
|---|---|
|
Nu porniți niciodată administratorul de afișare/sesiune cu interfață grafică
sub contul root introducând 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 F1 — F6. 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
Tastați Ctrl-D, adică apăsați simultan tasta
Ctrl-stânga și tasta d în linia de
comandă pentru a închide activitatea shell-ului. Dacă vă aflați în consola
de caractere, veți reveni la linia de autentificare. Chiar dacă aceste
caractere de control sunt denumite «control D» cu majusculă, nu este necesar
să apăsați tasta «Shift». Expresia prescurtată, ^D, este
utilizată de asemenea pentru Ctrl-D. Alternativ, puteți
tasta „exit”.
Dacă vă aflați în x-terminal-emulator(1), puteți închide
fereastra x-terminal-emulator cu această comandă.
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”.
Când ecranul devine nebun după ce faceți unele lucruri ciudate, cum ar fi
„cat vreun-fișier-binar”, tastați
„reset” la promptul de comandă. Este posibil să nu puteți
vedea comanda introdusă pe măsură ce o tastați. De asemenea, puteți tasta
„clear” pentru a curăța ecranul.
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.
Tabel 1.1. Lista pachetelor de programe interesante în modul text
| pachet | popcon(popularitate) | dimensiune | descriere |
|---|---|---|---|
mc
|
V:43, I:183 | 1590 | Un gestionar de fișiere în modul text pe ecran complet |
sudo
|
V:732, I:863 | 6773 | Un program care permite utilizatorilor privilegii root limitate |
vim
|
V:86, I:346 | 4089 | Editorul de text Unix Vi IMproved, un editor de text pentru programatori (versiunea standard) |
vim-tiny
|
V:57, I:978 | 1877 | Editorul de text Unix Vi IMproved, un editor de text pentru programatori (versiunea compactă) |
emacs-nox
|
V:3, I:13 | 46536 | Proiectul GNU Emacs, editorul de text extensibil bazat pe Lisp |
w3m
|
V:11, I:145 | 2853 | Navigatoare web în modul text |
gpm
|
V:9, I:9 | 526 | Copierea și lipirea în stil Unix în consola text (demon, simulând un mouse) |
Ar fi o idee bună să citiți câteva documente informative.
Tabel 1.2. Lista pachetelor de documentație utilă
| pachet | popcon(popularitate) | dimensiune | descriere |
|---|---|---|---|
doc-debian
|
I:882 | 187 | Documentația proiectului Debian (Întrebări frecvente despre Debian) și alte documente |
debian-policy
|
I:8 | 5061 | Manualul de politici Debian și documentele conexe |
developers-reference
|
V:0, I:2 | 2601 | Ghiduri și informații pentru dezvoltatorii Debian |
debmake-doc
|
I:0 | 11807 | Ghid pentru responsabilii cu întreținerea pachetelor Debian |
debian-history
|
I:0 | 6251 | Istoria proiectului Debian |
debian-faq
|
I:880 | 791 | Întrebări frecvente despre Debian (FAQ) |
Puteți instala unele dintre aceste pachete urmând pașii de mai jos.
# apt-get install package_name
Dacă nu doriți să utilizați contul principal de utilizator pentru
următoarele activități de instruire, puteți crea un cont de utilizator
pentru instruire, de exemplu fish, urmând pașii de mai
jos.
# adduser fish
Răspundeți la toate întrebările.
Aceasta creează un cont nou numit fish. După ce ați
exersat, puteți șterge acest cont de utilizator și directorul său principal
urmând pașii de mai jos.
# deluser --remove-home fish
În sistemele non-Debian și Debian specializate, activitățile de mai sus
trebuie să utilizeze în schimb instrumentele de nivel inferior
useradd(8) și userdel(8).
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 |
|---|---|
|
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 |
|---|---|
|
Parola și contul Î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ă |
|---|---|
|
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 Cu o configurare mai atentă și mai grijulie, |
Acum sunteți gata să utilizați sistemul Debian fără riscuri, atâta timp cât utilizați contul de utilizator fără privilegii.
Acest lucru se datorează faptului că sistemul Debian, chiar și după instalarea implicită, este configurat cu permisiuni de fișiere adecvate, care împiedică utilizatorii fără privilegii să deterioreze sistemul. Desigur, pot exista încă unele vulnerabilități care pot fi exploatate, dar cei care sunt preocupați de aceste probleme nu ar trebui să citească această secțiune, ci ar trebui să citească Manualul de securizare Debian.
Vom învăța sistemul Debian ca un sistem de tip Unix cu ajutorul următoarelor:
Secțiune 1.2, „Sistem de fișiere de tip Unix” (conceptul de bază)
Secțiune 1.3, „Midnight Commander (MC)” (metoda de supraviețuire)
Secțiune 1.4, „Mediul de lucru de bază de tip Unix” (metoda de bază)
Secțiune 1.5, „Comanda simplă de shell” (mecanismul shell)
Secțiune 1.6, „Procesarea textului în stilul Unix” (metoda de procesare a textului)
Î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.
Numele fișierelor sunt sensibile la majuscule și
minuscule. Adică, „FIȘIERULMEU” și
„FișierulMEU” sunt fișiere diferite.
Directorul rădăcină înseamnă rădăcina
sistemului de fișiere, denumită simplu „/”. Nu
confundați acest lucru cu directorul de bază al utilizatorului rădăcină:
„/root”.
Fiecare director are un nume care poate conține orice litere sau simboluri
cu excepția „/”.
Directorul rădăcină este o excepție; numele său este „/”
(pronunțat „bară oblică” sau „directorul rădăcină”) și nu poate fi
redenumit.
Fiecare fișier sau director este desemnat printr-un nume de fișier complet calificat, nume de fișier absolut sau rută, indicând secvența de directoare care trebuie parcurse pentru a ajunge la acesta. Cei trei termeni sunt sinonimi.
Toate numele de fișiere complet
calificate încep cu directorul „/” și există o
„/” între fiecare director sau fișier din numele
fișierului. Primul „/” este directorul de nivel
superior, iar celelalte „/” separă subdirectoarele
succesive, până când ajungem la ultima intrare, care este numele fișierului
propriu-zis. Cuvintele folosite aici pot fi confuze. Luați ca exemplu
următorul nume de fișier complet
calificat: „/usr/share/keytables/us.map.gz”.
Cu toate acestea, oamenii se referă la numele său de bază
„us.map.gz” ca fiind numele fișierului.
Directorul rădăcină are o serie de ramuri, cum ar fi
„/etc/” și „/usr/”. Aceste
subdirectoare se ramifică la rândul lor în și mai multe subdirectoare, cum
ar fi „/etc/systemd/” și
„/usr/local/”. Ansamblul este denumit arborele de directoare. Puteți considera un nume
de fișier absolut ca o rută de la baza arborelui („/”)
până la capătul unei ramuri (un fișier). De asemenea, veți auzi oamenii
vorbind despre arborele de directoare ca și cum ar fi un arborele genealogic care cuprinde toți descendenții
direcți ai unei singure entități numite directorul rădăcină
(„/”): astfel, subdirectoarele au părinți, iar o rută arată ascendența completă a
unui fișier. Există, de asemenea, rute relative care încep în alt loc decât
directorul rădăcină. Trebuie să rețineți că directorul
„../” se referă la directorul părinte. Această
terminologie se aplică și altor structuri de tip director, cum ar fi
structurile de date ierarhice.
Nu există nicio componentă specială a numelui rutei de director care să
corespundă unui dispozitiv fizic, cum ar fi discul dur. Acest lucru diferă
de RT-11, CP/M,
OpenVMS, MS-DOS, AmigaOS și
Microsoft Windows, unde ruta conține
un nume de dispozitiv, cum ar fi „C:\”. (Cu toate
acestea, există intrări de director care se referă la dispozitive fizice ca
parte a sistemului de fișiere normal. Consultați Secțiune 1.2.2, „Elementele interne ale sistemului de fișiere”.)
|
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: |
|
Notă |
|---|---|
|
Cuvântul „root” poate însemna fie „utilizatorul root”, fie „directorul root”. Contextul utilizării lor ar trebui să clarifice acest lucru. |
|
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.
Tabel 1.3. Lista directoarelor cheie și descrierea utilizării acestora
| director | utilizarea directorului |
|---|---|
/ |
directorul rădăcină |
/etc/ |
fișierele de configurare la nivel de sistem |
/var/log/ |
fișierele de jurnal ale sistemului |
/home/ |
toate directoarele personale (acasă) pentru toți utilizatorii fără privilegii |
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 |
|---|---|
|
Dacă trebuie să identificați corespondența dintre arborele de fișiere și
entitatea fizică, executați |
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 screre - (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
Tabel 1.4. Lista descriptivă a primului caracter din ieșirea comenziil «ls
-l»
| caracter | semnificație |
|---|---|
- |
fișier normal |
d |
director |
l |
legătură simbolică |
c |
nod de dispozitiv de caractere |
b |
nod de dispozitiv de blocuri |
p |
conductă cu nume |
s |
soclu |
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.
Tabel 1.5. Modul numeric pentru permisiunile de fișiere în comenzile
chmod(1)
| cifra | semnificație |
|---|---|
| prima cifră (opțională) | suma dintre bitul set user ID (=4), bitul set group ID (=2) și bitul sticky (=1) |
| a doua cifră | suma permisiunilor citire (=4), scriere (=2) și executare (=1) pentru utilizator |
| a treia cifră | la fel ca a doua cifră, dar pentru grup |
| a patra cifră | la fel ca a doua cifră, dar pentru ceilalți |
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 |
|---|---|
|
Dacă trebuie să accesați informațiile afișate de „ |
Permisiunile aplicate unui fișier sau director nou creat sunt restricționate
de comanda încorporată în shell umask. Consultați
dash(1), bash(1) și
builtins(7).
(file permissions) = (requested file permissions) & ~(umask value)
Tabel 1.6. Exemple de valori pentru umask
| umask | permisiunile fișierelor create | permisiunile directoarelor create | utilizare |
|---|---|---|---|
0022 |
-rw-r--r-- |
-rwxr-xr-x |
poate fi scris numai de către utilizator |
0002 |
-rw-rw-r-- |
-rwxrwxr-x |
poate fi scris de grup |
Sistemul Debian utilizează în mod implicit o schemă de grupuri private de
utilizatori („user private group”: UPG). Un UPG este creat de fiecare dată
când un nou utilizator este adăugat în sistem. Un UPG are același nume ca
utilizatorul pentru care a fost creat, iar acel utilizator este singurul
membru al UPG. Schema UPG face ca stabilirea umask la
0002 să fie sigură, deoarece fiecare utilizator are
propriul grup privat; (în unele variante Unix, este destul de obișnuit să se
configureze toți utilizatorii normali aparținând unui singur grup users și este o idee bună să se
stabilească umask la 0022 pentru securitate în astfel de
cazuri).
|
Indicație |
|---|---|
|
Activați UPG introducând „ |
|
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ă |
|---|---|
|
Alternativ, puteți adăuga dinamic utilizatori la grupuri în timpul
procesului de autentificare, adăugând linia „ |
The hardware devices are just another kind of file on the Debian system. If you have problems accessing devices such as USB flash drive and CD-ROM from a user account, you should make that user a member of the relevant group.
Unele grupuri importante (notabile) furnizate de sistem permit membrilor lor
să acceseze anumite fișiere și dispozitive fără privilegii
root.
Tabel 1.7. Lista grupurilor notabile furnizate de sistem pentru accesul la fișiere
| grupul | descrierea fișierelor și dispozitivelor accesibile |
|---|---|
dialout |
acces complet și direct la porturile seriale
(„/dev/ttyS[0-3]”) |
dip |
acces limitat la porturile seriale pentru conexiunea Dialup IP la mașini de încredere |
cdrom |
unități CD-ROM, DVD+/-RW |
audio |
dispozitiv audio |
video |
dispozitiv video |
scanner |
scaner(e) |
adm |
jurnalele de monitorizare a sistemului |
staff |
unele directoare pentru lucrări administrative minore:
„/usr/local”, „/home” |
|
Indicație |
|---|---|
|
Trebuie să aparțineți grupului |
Unele grupuri notabile furnizate de sistem permit membrilor lor să execute
anumite comenzi fără privilegii root.
Tabel 1.8. Lista grupurilor notabile furnizate de sistem pentru executarea anumitor comenzi
| grupul | comenzi disponibile |
|---|---|
sudo |
execută orice comandă cu privilegii de superutilizator |
lpadmin |
execută comenzi pentru a adăuga, modifica și elimina imprimante din bazele de date ale imprimantelor |
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.
Tabel 1.9. Lista tipurilor de marcaje de timp
| tipul | semnificația (definiția istorică Unix) |
|---|---|
| mtime | momentul modificării fișierului (ls -l) |
| ctime | momentul modificării stării fișierului (ls -lc) |
| atime | ultima dată când a fost accesat fișierul (ls -lu) |
|
Notă |
|---|---|
|
ctime nu este ora creării fișierului. |
|
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ă |
|---|---|
|
Opțiunile de montare „ |
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 |
|---|---|
|
Consultați Secțiune 9.3.4, „Afișare personalizată a orei și datei” pentru a
personaliza ieșirea comenzii « |
Există două metode de asociere a unui fișier „foo” cu un
nume de fișier diferit „bar”.
Nume duplicat pentru un fișier existent
«ln foo bar»
Legătură simbolică sau symlink
Fișier special care indică un alt fișier după nume
«ln -s foo 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 |
|---|---|
|
Î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ă |
|---|---|
|
Î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
Soclurile sunt utilizate pe scară largă de toate comunicațiile pe Internet, bazele de date și sistemul de operare în sine. Este similar cu conducta cu nume (FIFO) și permite proceselor să schimbe informații chiar și între calculatoare diferite. Pentru soclu, aceste procese nu trebuie să ruleze în același timp și nici să ruleze ca procese secundare ale aceluiași proces ancestral. Acesta este punctul final pentru comunicarea între procese (IPC). Schimbul de informații poate avea loc prin rețea între diferite gazde. Cele mai comune două sunt soclul Internet și soclul de domeniu Unix.
|
Indicație |
|---|---|
|
« |
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ă |
|---|---|
|
Pentru accesul normal la o imprimantă, utilizați |
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).
Există câteva fișiere speciale pentru dispozitive.
Tabel 1.10. Lista fișierelor speciale de dispozitive
| fișierul de dispozitiv | acțiunea | descrierea răspunsului |
|---|---|---|
/dev/null |
citire | returnează „caracterul de sfârșit de fișier (EOF)” |
/dev/null |
scriere | nu returnează nimic (o groapă fără fund pentru stocarea datelor) |
/dev/zero |
citire | returnează „caracterul \0 (NUL)” (nu este același cu
numărul zero ASCII) |
/dev/random |
citire | returnează caractere aleatorii dintr-un generator de numere aleatorii reale, oferind entropie reală (lent) |
/dev/urandom |
citire | returnează caractere aleatorii dintr-un generator de numere pseudoaleatorii securizat criptografic |
/dev/full |
scriere | returnează eroarea de disc plin (ENOSPC) |
Acestea sunt utilizate frecvent împreună cu redirecționarea shell-ului (a se vedea Secțiune 1.5.8, „Secvențe tipice de comenzi și redirecționarea shell-ului”).
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.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”
Pentru a face ca MC să schimbe directorul de lucru la ieșire și după aceea a
executacd către director, sugerez să modificați
„~/.bashrc” pentru a include un script furnizat de
pachetul mc.
. /usr/lib/mc/mc.sh
Vedeți mc(1) (sub opțiunea „-P”)
pentru a afla motivul. Dacă nu înțelegeți exact despre ce vorbesc aici,
puteți face acest lucru mai târziu.
MC poate fi lansat astfel.
$ mc
MC se ocupă de toate operațiile cu fișiere prin intermediul meniului său, necesitând un efort minim din partea utilizatorului. Apăsați tasta F1 pentru a afișa ecranul de ajutor. Puteți utiliza MC apăsând tastele cursorului și tastele de funcții.
|
Notă |
|---|---|
|
În unele console, cum ar fi |
Dacă întâmpinați probleme de codificare a caracterelor care afișează
caractere neinteligibile, adăugarea „-a” la linia de
comandă MC poate ajuta la prevenirea problemelor.
Dacă acest lucru nu rezolvă problemele de afișare cu MC, consultați Secțiune 9.5.6, „Configurația terminalului”.
Implicit sunt două panouri de directoare care conțin liste de fișiere. Un
alt mod util este configurarea ferestrei din dreapta pe „informații” pentru
a vedea informații despre privilegiile de acces la fișiere etc. În
continuare sunt prezentate câteva comenzi esențiale. Cu demonul
gpm(8) în funcțiune, se poate utiliza mouse-ul și pe
consolele de caractere Linux. (Asigurați-vă că apăsați tasta Shift pentru a
obține comportamentul normal al funcțiilor de tăiere și lipire în MC.)
Tabel 1.11. Tastele de comenzi rapide ale MC
| tasta | comanda/funcția asociată |
|---|---|
F1 |
meniul de ajutor |
F3 |
vizorul de fișiere intern |
F4 |
editorul intern |
F9 |
activează meniul derulant |
F10 |
ieșire din Midnight Commander |
Tab |
deplasare între două ferestre |
Insert sau Ctrl-T |
marchează fișierul pentru o operație cu mai multe fișiere, cum ar fi copierea |
Del |
șterge fișierul (aveți grijă --- configurați MC în modul de ștergere sigură) |
| Tastele cursor | auto-explicative |
Comanda cd modifică directorul afișat pe ecranul
selectat.
Ctrl-Enter sau Alt-Enter copiază un
nume de fișier în linia de comandă. Utilizați această comandă împreună cu
comenzile cp(1) și mv(1) și cu
editarea liniei de comandă.
Alt-Tab afișează opțiunile de extindere a numelor de
fișiere din shell.
Se poate specifica directorul de pornire pentru ambele ferestre ca argumente
pentru MC; de exemplu, „mc /etc /root”.
Esc + n-key → Fn
(adică, Esc + 1 →
F1, etc.; Esc + 0 →
F10)
Apăsarea tastei Esc înaintea tastei are același efect ca
și apăsarea simultană a tastelor Alt și ; Adică, tastați
Esc + c pentru
Alt-C. Esc se numește meta-tastă și
uneori este notată ca „M-”.
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.
MC este un vizor foarte inteligent. Este un instrument excelent pentru
căutarea cuvintelor în documente. Îl folosesc întotdeauna pentru fișierele
din directorul „/usr/share/doc”. Este cea mai rapidă
modalitate de a răsfoi cantități mari de informații despre Linux. Acest
vizor poate fi pornit direct folosind una dintre următoarele comenzi.
$ mc -v path/to/filename_to_view
$ mcview path/to/filename_to_view
Apăsați tasta «Enter» pe un fișier, iar programul corespunzător va gestiona conținutul fișierului (consultați Secțiune 9.4.11, „Personalizarea programului care urmează să fie pornit”). Aceasta este o funcție MC foarte convenabilă.
Tabel 1.12. Reacția la apăsarea tastei «Enter» în MC
| tipul fișierului | reacția la apăsarea tastei «Enter» |
|---|---|
| fișier executabil | execută comanda |
| fișier de pagină de manual | direcționează conținutul către software-ul de vizualizare |
| fișier html | direcționează conținutul către navigatorul web |
fișiere „*.tar.gz” și „*.deb” |
răsfoiește conținutul său ca și cum ar fi un subdirector |
Pentru ca aceste funcții de vizualizare și fișiere virtuale să funcționeze,
fișierele care pot fi vizualizate nu trebuie definite ca fiind
executabile. Modificați-le starea folosind chmod(1) sau
prin meniul fișier MC.
MC poate fi utilizat pentru a accesa fișiere prin Internet. Accesați meniul
apăsând F9, „Enter” și
„h” pentru a activa sistemul de fișiere Shell.
Introduceți o adresă URL în formatul
„sh://[[utilizator@]mașină[:opțiuni]/[director-la-distanță]”,
care recuperează un director la distanță care apare ca unul local utilizând
ssh.
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”.
Tabel 1.13. Lista programelor shell
| pachet | popcon(popularitate) | dimensiune | shell POSIX | descriere |
|---|---|---|---|---|
bash
|
V:866, I:999 | 7277 | Da | Bash: GNU Bourne Again SHell (standard de facto) |
bash-completion
|
V:35, I:953 | 1952 | N/D | completare programabilă pentru shell-ul bash |
dash
|
V:906, I:998 | 207 | Da | Debian Almquist Shell, bun pentru scripturi shell |
zsh
|
V:40, I:70 | 2509 | Da | Z shell: shell-ul standard cu numeroase îmbunătățiri |
tcsh
|
V:4, I:15 | 1366 | Nu | TENEX C Shell: o versiune îmbunătățită a Berkeley csh |
mksh
|
V:5, I:8 | 7713 | Da | O versiune a Korn shell |
csh
|
V:1, I:5 | 348 | Nu | OpenBSD C Shell, o versiune a Berkeley csh |
sash
|
V:0, I:5 | 1335 | Da | Shell autonom cu comenzi încorporate
(nu este destinat pentru standardul „/usr/bin/sh”) |
ksh
|
I:8 | 65 | Da | Versiunea reală, AT&T a Korn shell |
rc
|
V:0, I:0 | 182 | Nu | Implementarea AT&T Plan 9 rc shell |
posh
|
V:0, I:0 | 187 | Da | SHell obișnuit conform cu politica (derivat din pdksh) |
|
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.
Puteți personaliza comportamentul bash(1) prin
„~/.bashrc”.
De exemplu, încercați următoarele.
# enable bash-completion
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# CD upon exiting MC
. /usr/lib/mc/mc.sh
# set CDPATH to a good one
CDPATH=.:/usr/share/doc:~:~/Desktop:~
export CDPATH
PATH="${PATH+$PATH:}/usr/sbin:/sbin"
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH="~/bin${PATH+:$PATH}"
fi
export PATH
EDITOR=vim
export EDITOR
|
Indicație |
|---|---|
|
Puteți găsi mai multe sfaturi de personalizare |
|
Indicație |
|---|---|
|
Pachetul |
În mediul de tip Unix există câteva
combinații de taste care au semnificații speciale. Rețineți că pe o consolă
Linux normală, numai tastele Ctrl și
Alt din partea stângă funcționează așa cum vă așteptați.
Iată câteva combinații de taste importante de reținut.
Tabel 1.14. Lista tastelor de comenzi rapide pentru bash
| tasta | descrierea acțiunii efectuate |
|---|---|
Ctrl-U |
șterge linia din fața cursorului |
Ctrl-H |
șterge un caracter înaintea cursorului |
Ctrl-D |
termină introducerea („ieșire din shell” dacă utilizați shell) |
Ctrl-C |
termină un program în execuție |
Ctrl-Z |
oprește temporar programul mutându-l în fundal |
Ctrl-S |
oprește afișarea pe ecran |
Ctrl-Q |
reactivează ieșirea pe ecran |
Ctrl-Alt-Del |
repornește/oprește sistemul, a se vedea inittab(5) |
Tasta Alt stânga (opțional, Tasta
Windows) |
meta-tastă pentru Emacs și interfețe similare |
Săgeată-sus |
pornește căutarea istoricului comenzilor sub bash |
Ctrl-R |
pornește căutarea incrementală în istoricul comenzilor sub
bash |
Tab |
completează introducerea numelui fișierului în linia de comandă sub
bash |
Ctrl-V Tab |
introduce Tab fără extindere în linia de comandă sub
bash |
|
Indicație |
|---|---|
|
Funcția terminalului |
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
Tabel 1.15. Lista operațiilor mouse-ului și acțiunile tastelor asociate în Debian
| acțiunea | răspunsul |
|---|---|
| Clic stânga și glisare cu mouse-ul | selectează intervalul ca selecție PRIMARĂ |
| Clic stânga | selectează începutul intervalului pentru selecția PRIMARĂ |
| Clic dreapta (tradițional) | selectează sfârșitul intervalului pentru selecția PRIMARĂ |
| Clic dreapta (modern) | meniu dependent de context (tăiere/copiere/lipire) |
Clic pe butonul din mijloc sau Shift-Ins |
inserează selecția PRIMARĂ la poziția cursorului |
Ctrl-X |
taie selecția PRIMARĂ în CLIPBOARD |
Ctrl-C (Shift-Ctrl-C în terminal) |
copiază selecția PRIMARĂ în CLIPBOARD |
Ctrl-V |
lipește conținutul CLIPBOARDULUI la poziția cursorului |
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.
Comanda less(1) este un paginator îmbunătățit (permite
navigarea prin conținutul fișierelor). Citește fișierul specificat prin
argumentul comenzii sau prin intrarea standard. Apăsați
„h” dacă aveți nevoie de ajutor în timp ce navigați cu
comanda less. Poate face mult mai mult decât
more(1) și poate fi supraalimentat prin executarea
„eval $(lesspipe)” sau „eval
$(lessfile)” în scriptul de pornire al shell-ului. Pentru mai
multe informații, consultați
„/usr/share/doc/less/LESSOPEN”. Opțiunea
„-R” permite afișarea caracterelor brute și activează
secvențele de eludare a culorilor ANSI. Consultați
less(1).
|
Indicație |
|---|---|
|
În comanda |
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ă |
|---|---|
|
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. |
Debian vine cu o serie de editori diferiți. Vă recomandăm să instalați
pachetul vim, așa cum s-a menționat mai sus.
Debian oferă acces unificat la editorul implicit al sistemului prin comanda
„/usr/bin/editor”, astfel încât alte programe (de
exemplu, reportbug(1)) să îl poată invoca. Îl puteți
modifica după cum urmează.
$ sudo update-alternatives --config editor
Alegerea „/usr/bin/vim.basic” în locul
„/usr/bin/vim.tiny” este recomandarea mea pentru
începători, deoarece oferă suport pentru evidențierea sintaxei.
|
Indicație |
|---|---|
|
Multe programe utilizează variabilele de mediu „ |
Versiunea recentă vim(1) pornește în mod implicit cu
opțiunea „nocompatible” și intră în modul
NORMAL.[1]
Tabel 1.16. Lista combinațiilor de taste de bază din Vim
| modul | combinația de taste | acțiunea |
|---|---|---|
NORMAL |
:help|only |
afișează fișierul de ajutor |
NORMAL |
:e filename.ext |
deschide un nou spațiu tampon în memorie pentru a edita
filename.ext |
NORMAL |
:w |
suprascrie fișierul original cu conținutul tamponului curent |
NORMAL |
:w filename.ext |
scrie tamponul curent în filename.ext |
NORMAL |
:q |
ieșire din vim |
NORMAL |
:q! |
forțează ieșirea din vim |
NORMAL |
:only |
închide toate celelalte ferestre deschise |
NORMAL |
:set nocompatible? |
verifică dacă vim se află în modul
nocompatible |
NORMAL |
:set nocompatible |
stabilește vim în modul de operare
nocompatible |
NORMAL |
i |
intră în modul INSERARE |
NORMAL |
R |
intră în modul ÎNLOCUIRE |
NORMAL |
v |
intră în modul VIZUAL |
NORMAL |
V |
intră în modul VIZUAL pe linii |
NORMAL |
Ctrl-V |
intrați în modul VISUAL pe blocuri |
cu excepția TERMINAL-JOB |
ESC-key |
intră în modul NORMAL |
NORMAL |
:term |
intră în modul TERMINAL-JOB |
TERMINAL-NORMAL |
i |
intră în modul TERMINAL-JOB |
TERMINAL-JOB |
Ctrl-W N (sau
Ctrl-\ Ctrl-N) |
intră în modul TERMINAL-NORMAL |
TERMINAL-JOB |
Ctrl-W : |
intră în modul Ex din modul
TERMINAL-NORMAL |
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 |
|---|---|
|
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 „ |
Pentru configurarea avansată a vim, consultați Secțiune 9.2, „Personalizarea vim”.
Rezultatul comenzii shell poate să nu mai apară pe ecran și să se piardă definitiv. Este recomandat să înregistrați activitățile shell în fișier pentru a le putea revizui ulterior. Acest tip de înregistrare este esențial atunci când efectuați orice sarcini de administrare a sistemului.
|
Indicație |
|---|---|
|
Noul Vim (versiunea>=8.2) poate fi utilizat pentru a înregistra
activitățile shell-ului în mod curat folosind modul
|
Metoda de bază pentru înregistrarea activității shell-ului este rularea
acestuia sub script(1).
De exemplu, încercați următoarele
$ script Script started, file is typescript
Executați orice comenzi shell sub script.
Apăsați Ctrl-D pentru a ieși din
script.
$ vim typescript
Consultați Secțiune 9.1.1, „Înregistrarea activităților shell în mod curat” .
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ă
| comanda | 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 nume-comandă |
afișează locația fișierului comenzii
„nume-comandă” |
which nume-comandă |
, , |
type nume-comandă |
afișează informații despre comanda
„nume-comandă” |
apropos cuvânt-cheie |
găsește comenzi legate de
„cuvânt-cheie” |
man -k cuvânt-cheie |
, , |
whatis nume-comandă |
afișează o explicație pe o singură linie privind comanda
„nume-comandă” |
man -a nume-comandă |
afișează explicația privind comanda
„nume-comandă” (stil Unix) |
info nume-comandă |
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 fișier-test |
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 fișier-test |
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 model |
găsește numele de fișiere ce coincid folosind shell-ul
„model” (mai lent) |
locate -d . model |
găsește numele de fișiere ce coincid folosind shell-ul
„model” (mai rapid folosind baza de
date generată regulat) |
grep -e "model" *.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 | paginator |
afișează informații despre toate procesele care rulează utilizând ieșirea în stil BSD |
ps -ef | paginator |
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 | paginator |
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 | paginator |
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ă |
|---|---|
|
Unix are tradiția de a ascunde numele fișierelor care încep cu
„ Pentru comanda Paginatorul implicit al sistemului Debian de bază este
„ |
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.
Atribuiri de variabile (opțional)
Numele comenzii
Argumente (opțional)
Redirecționări (opțional: > ,
>> , < ,
<< , etc.)
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ă |
|---|---|
|
Vă recomand să configurați mediul de sistem doar cu variabila
„ |
Valoarea completă a configurației regionale atribuită variabilei
„$LANG” este formată din 3 părți:
„xx_YY.ZZZZ”.
Tabel 1.18. Cele 3 părți ale valorii configurației regionale
| valoarea configurației regionale | semnificație |
|---|---|
xx |
codurile de limbă ISO 639 (cu litere mici), cum ar fi „ro” |
YY |
codurile de țară ISO 3166 (majuscule), cum ar fi „RO” |
ZZZZ |
codificarea setului de caractere, definită întotdeauna la „UTF-8” |
Tabel 1.19. Lista recomandărilor privind configurația regională
| recomandare configurație regională | limba (zona teritorială) |
|---|---|
en_US.UTF-8 |
engleză (SUA) |
en_GB.UTF-8 |
engleză (Marea Britanie) |
fr_FR.UTF-8 |
franceză (Franța) |
de_DE.UTF-8 |
germană (Germania) |
it_IT.UTF-8 |
italiană (Italia) |
es_ES.UTF-8 |
spaniolă (Spania) |
ca_ES.UTF-8 |
catalană (Spania) |
sv_SE.UTF-8 |
suedeză (Suedia) |
pt_BR.UTF-8 |
portugheză (Brazilia) |
ru_RU.UTF-8 |
rusă (Rusia) |
zh_CN.UTF-8 |
chineză (R.P. Chiina) |
zh_TW.UTF-8 |
chineză (Taiwan) |
ja_JP.UTF-8 |
japoneză (Japonia) |
ko_KR.UTF-8 |
coreeană (Republica Coreea) |
vi_VN.UTF-8 |
vietnameză (Vietnam) |
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.
Pentru prima comandă, „$LANG” este definită la valoarea
implicită a sistemului pentru configurația
regională „en_US.UTF-8”.
Pentru a doua comandă, „$LANG” este definită la valoarea
configurației regionale franceze UTF-8
„fr_FR.UTF-8”.
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 |
|---|---|
|
Când raportați o eroare, este recomandat să rulați și să verificați comanda
în configurația regională „ |
Pentru detalii precise privind configurarea parametrilor configurației regionale, consultați Secțiune 8.1, „Configurația regională”.
Când introduceți o comandă în shell, shell-ul caută comanda în lista de
directoare conținute în variabila de mediu „$PATH”.
Valoarea variabilei de mediu „$PATH” este denumită și
ruta de căutare a shell-ului.
În instalarea implicită Debian, variabila de mediu
„$PATH” a conturilor de utilizator poate să nu includă
„/usr/sbin” și „/usr/sbin”. De
exemplu, comanda ifconfig trebuie emisă cu ruta completă
„/usr/sbin/ifconfig”; (comanda similară
ip se află în „/usr/bin”).
Puteți modifica variabila de mediu „$PATH” a shell-ului
Bash prin fișierele „~/.bash_profile” sau
„~/.bashrc”.
Multe comenzi stochează configurația specifică utilizatorului în directorul
personal al acestuia și modifică comportamentul acestora în funcție de
conținutul lor. Directorul personal este identificat de variabila de mediu
„$HOME”.
Tabel 1.20. Lista valorilor variabilei „$HOME”
valoarea variabilei „$HOME” |
situația execuției programului |
|---|---|
/ |
programul este rulat de procesul init (demon) |
/root |
programul rulează din shell-ul root normal |
/home/utilizator-normal |
programul rulează din shell-ul utilizatorului normal |
/home/utilizator-normal |
programul rulează din meniul mediului grafic de birou al utilizatorului normal |
/home/utilizator-normal |
programul rulează ca root cu «sudo program» |
/root |
programul rulează ca root cu «sudo -H program» |
|
Indicație |
|---|---|
|
Shell-ul extinde „ |
Consultați Secțiune 12.1.5, „Shell environment variables” dacă
$HOME nu este disponibil pentru programul dvs.
Unele comenzi acceptă argumente. Argumentele care încep cu
„-” sau „--” sunt numite opțiuni și
controlează comportamentul comenzii.
$ date Thu 20 May 2021 01:08:08 AM JST $ date -R Thu, 20 May 2021 01:08:12 +0900
Aici, argumentul liniei de comandă „-R” modifică
comportamentul date(1) pentru a genera un șir de
caractere compatibil cu RFC2822.
Adesea, doriți ca o comandă să funcționeze cu un grup de fișiere fără a le introduce pe toate. Modelul de extindere a numelor de fișiere utilizând facilitatea glob a shell-ului (denumită uneori wildcards) facilitează această necesitate.
Tabel 1.21. Modele globale shell
| modele globale shell | descrierea regulii de potrivire |
|---|---|
* |
numele fișierului (segment) nu începe cu „.” |
.* |
numele fișierului (segment) începe cu „.” |
? |
exact un caracter |
[…] |
exact un caracter cu orice caracter între paranteze |
[a-z] |
exact un caracter cu orice caracter între „a” și
„z” |
[^…] |
exact un caracter, altul decât orice caracter inclus între paranteze (cu
excepția „^”) |
De exemplu, încercați următoarele
$ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk
A se vedea glob(7).
|
Notă |
|---|---|
|
Spre deosebire de extinderea normală a numelor de fișiere de către shell,
modelul shell „ |
|
Notă |
|---|---|
|
BASH poate fi modificat pentru a-i schimba comportamentul glob cu opțiunile
sale încorporate shopt, cum ar fi „ |
Fiecare comandă returnează starea sa de ieșire (variabila:
„$?”) ca valoare de returnare.
Tabel 1.22. Coduri de ieșire ale comenzii
| starea de ieșire a comenzii | valoare numerică returnată | valoarea logică returnată |
|---|---|---|
| succes | zero, 0 | TRUE |
| eroare | diferită de zero, -1 | FALSE |
De exemplu, încercați următoarele.
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
|
Notă |
|---|---|
|
Vă rugăm să rețineți că, în contextul logic pentru shell, succesul este tratat ca TRUE logic, care are valoarea 0 (zero). Acest lucru este oarecum neintuitiv și trebuie reamintit aici. |
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 |
|---|---|
comanda & |
execuție în fundal a
comenzii în subshell |
comanda1 | comanda2 |
redirecționează ieșirea standard a
comenzii1 către intrarea standard a
comenzii2 (execuție concomitentă) |
comanda1 2>&1 | comanda2 |
redirecționează atât ieșirea standard,
cât și eroarea standard a comenzii1 către intrarea
standard a comenzii2 (execuție concomitentă) |
comanda1 ; comanda2 |
execută comanda1 și comanda2 secvențial |
comanda1 && comanda2 |
execută comanda1; dacă are succes, execută
comanda2 secvențial
(returnează succes dacă atât comanda1 cât și comanda2 au succes) |
comanda1 || comanda2 |
execută comanda1; dacă nu are succes, execută
comanda2 secvențial
(returnează succes dacă comanda1 sau comanda2 au succes) |
comanda > foo |
redirecționează ieșirea standard a comenzii comanda către
un fișier foo (suprascrie) |
comanda 2> foo |
redirecționează ieșirea de eroare standard a comenzii
comanda către un fișier foo
(suprascrie) |
comanda >> foo |
redirecționează ieșirea standard a comenzii comanda către
un fișier foo (adăugare) |
comanda 2>> foo |
redirecționează ieșirea de eroare standard a comenzii
command către un fișier foo (adăugare) |
comanda > 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 |
comanda < foo |
redirecționează intrarea standard a comenzii comanda
către un fișier foo |
comanda << delimitator |
redirecționează intrarea standard a comenzii comanda
către următoarele linii până când se întâlnește
„delimitatorul” (aici, document) |
comanda <<- delimitator |
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.
Tabel 1.24. Descriptori de fișiere predefiniți
| dispozitiv | descriere | descriptor de fișier |
|---|---|---|
stdin |
intrarea standard | 0 |
stdout |
ieșirea standard | 1 |
stderr |
ieșirea de eroare standard | 2 |
Puteți defini un alias pentru comanda utilizată frecvent.
De exemplu, încercați următoarele
$ alias la='ls -la'
Acum, «la» funcționează ca o prescurtare pentru
«ls -la», care listează toate fișierele în formatul de
listare lungă.
Puteți lista orice alias existente prin alias (consultați
bash(1) la «COMENZILE INTERNE ALE SHELL-ului»).
$ alias ... alias la='ls -la'
Puteți identifica ruta exactă sau identitatea comenzii prin
type (consultați bash(1) la «COMENZILE
INTERNE ALE SHELL-ului»).
De exemplu, încercați următoarele
$ type ls ls is hashed (/bin/ls) $ type la la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file
Aici, «ls» a fost căutat recent, în timp ce
«file» nu a fost, astfel încât «ls»
este indexat, adică shell-ul are o înregistrare internă pentru accesul rapid
la locația comenzii «ls».
|
Indicație |
|---|---|
|
A se vedea Secțiune 9.3.6, „Comenzi colorate”. |
Î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.
Nu se utilizează nicio expresie regulată:
cat(1) concatenează fișiere și afișează întregul
conținut.
tac(1) concatenează fișierele și le afișează în ordine
inversă.
cut(1) selectează părți din linii și le afișează.
head(1) afișează prima parte a fișierelor.
tail(1) afișează ultima parte a fișierelor.
sort(1) sortează liniile din fișierele text.
uniq(1) elimină liniile duplicate dintr-un fișier sortat.
tr(1) traduce sau șterge caractere.
diff(1) compară fișierele linie cu linie.
Expresia regulată de bază („Basic regular expression”: BRE) este utilizată în mod implicit:
ed(1) este un editor de linii primitiv.
sed(1) este un editor de flux.
grep(1) potrivește textul cu modelele.
vim(1) este un editor de ecran.
emacs(1) este un editor de ecran. (oarecum extins cu
BRE)
Se utilizează expresia regulată extinsă („Extended regular expression”: ERE):
awk(1) efectuează procesarea simplă a textului.
egrep(1) potrivește textul cu modelele.
tcl(3tcl) poate efectua orice operație de procesare a
textului: consultați re_syntax(3). Se utilizează adesea
împreună cu tk(3tk).
perl(1) poate efectua orice operație de procesare a
textului imaginabilă. Consultați perlre(1).
pcre2grep(1) din pachetul pcre2-util
potrivește textul cu modelul Perl Compatible Regular Expressions
(PCRE).
python(1) cu modulul re poate efectua
orice procesare de text imaginabilă. Consultați
„/usr/share/doc/python/html/index.html”.
Dacă nu sunteți sigur ce fac exact aceste comenzi, vă rugăm să utilizați
«man comanda» pentru a afla singur.
|
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ă |
|---|---|
|
Expresiile regulate Perl( |
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, BRE și ERE, în funcție de instrumentele de text descrise mai sus.
Tabel 1.25. Metacaractere pentru BRE și ERE
| BRE | ERE | descrierea expresiei regulate |
|---|---|---|
\ . [ ] ^ $ * |
\ . [ ] ^ $ * |
metacaractere comune |
\+ \? \( \) \{ \} \| |
BRE doar metacaractere eludate
„\” |
|
+ ? ( ) { } | |
ERE doar metacaractere fără caracterul de
eludare „\” |
|
c |
c |
potrivește cu un non-metacaracter
„c” |
\c |
\c |
potrivește un caracter literal „c” chiar dacă
„c” este de fapt un metacaracter |
. |
. |
potrivește orice caracter, inclusiv cel de linie nouă |
^ |
^ |
poziția la începutul unui șir de caractere |
$ |
$ |
poziția la sfârșitul unui șir de caractere |
\< |
\< |
poziția la începutul unui cuvânt |
\> |
\> |
poziția la sfârșitul unui cuvânt |
[abc…] |
[abc…] |
potrivește orice caractere din „abc…” |
[^abc…] |
[^abc…] |
potrivește orice caractere, cu excepția celor din „abc…” |
r* |
r* |
potrivește zero sau mai multe expresii regulate identificate prin
„r” |
r\+ |
r+ |
potrivește una sau mai multe expresii regulate identificate prin
„r” |
r\? |
r? |
potrivește zero sau o expresie regulată identificată prin
„r” |
r1\|r2 |
r1|r2 |
potrivește una dintre expresiile regulate identificate prin
„r1” sau „r2” |
\(r1\|r2\) |
(r1|r2) |
potrivește una dintre expresiile regulate identificate prin
„r1” sau „r2” și o tratează ca o
expresie regulată încadrată între
paranteze |
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
|
Indicație |
|---|---|
|
A se vedea Secțiune 9.3.6, „Comenzi colorate”. |
Pentru expresia de înlocuire, unele caractere au semnificații speciale.
Tabel 1.26. Expresia de înlocuire
| expresie de înlocuire | descrierea textului care va înlocui expresia de înlocuire |
|---|---|
& |
ceea ce a fost găsit de expresia regulată (utilizați
\& în emacs) |
\n |
cu ce s-a potrivit a n-a expresie regulată între paranteze (unde „n” este un număr) |
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 |
|---|---|
|
Indicatorul „ |
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 |
|---|---|
|
Indicatorul „ |
$ 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 |
|---|---|
|
Utilizarea argumentului „ |
|
Notă |
|---|---|
|
|
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 |
|---|---|
|
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 comanda |
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 model_expresie-regulată |
extrage linii din conductă care conțin model_expresie-regulată |
| grep -v -e model_expresie-regulată |
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, „Idioms for the selection of files” ș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, „The shell script”).