Învățarea comenzilor bash în sistemul de operare Linux. Lista detaliată a directoarelor. Bash Shell: Introducere

Pe majoritatea sistemelor de operare Linux, bash este interpretul implicit de linie de comandă. Pentru a determina interpretul curent, introduceți următoarea comandă:

$ echo $SHELL
/bin/bash

Acest exemplu foloseșteinterpret de linie de comandă bash. Există mulți alți interpreți de comandă. Pentru a activa un alt interpret, puteți introduce numele acestuia la linia de comandă (ksh, tcsh, csh, sh, bash etc.).

Cele mai multe sisteme de operare Linux cu funcții complete oferă toți interpreții de comenzi descriși aici. Dar pe sistemele de operare mai mici pot fi furnizați unul sau doi interpreți.

Verificarea disponibilității articolului care vă intereseazăinterpretLinie de comanda

Cel mai într-un mod simplu Pentru a verifica disponibilitatea interpretului de comandă de interes, introduceți numele acestuia pe linia de comandă. Dacă interpretul a început, acesta este disponibil.

Există mai multe motive pentru a alege shell-uri alternative.

  • Experiență de lucru pe sisteme UNIX System V (multe dintre ele folosesc ksh în mod implicit) sau Sun Microsystems și alte sisteme Berkeley UNIX (care folosesc adesea csh). În acest caz, utilizarea acestor interprețiLinie de comandava fi mai convenabil.
  • Necesitatea de a rula scripturi care au fost create pentru un anumit interpret de comandă.
  • Capacitățile unui shell alternativ pot fi de preferat. De exemplu, un membru al grupului de utilizatori Linux preferă să folosească ksh deoarece nu este mulțumit de modul în care bash creează aliasuri.

Deși majoritatea utilizatorilor preferă să lucreze într-un singur shell, abilitățile dobândite îi ajută să învețe să lucreze în altele.interpreți Linie de comanda , ocazional cercetând ghid de referință(de exemplu, folosind comanda manbash). Majoritatea oamenilor folosesc bash pentru că nu există niciun motiv pentru a trece la alt interpret.

Folosind Bash și ch

Numele bash este un acronim pentru Bourne Again SHell. Această abreviere indică faptul că bash moștenește interpretul Bourneshell (comanda sh), creat de Steve Bourne de la AT&TBell Labs. Brian Fox de la Free Software Foundation a creat bash ca parte a proiectului GNU. Ulterior, dezvoltarea a trecut în mâinile lui Chet Ramey de la Case Western Reserve University.

Interpretul bash conține caracteristici care au fost dezvoltate pentru interpreții sh și ksh în versiunile timpurii ale UNIX, precum și o serie de caracteristici ale interpretului csh.

Vă puteți aștepta ca majoritatea sistemelor Linux, altele decât cele specializate (cum ar fi cele care sunt încorporate sau pornite din unitate externă), bash este interpretul implicit. În sistemele specializate, poate fi necesar un interpret de comandă mai mic, ceea ce implică și capacități limitate.

Majoritatea exemplelor din aceastaarticolconceput pentru utilizare în bash.

Interpretul bash poate rula diverse moduri compatibilitate prin imitarea comportamentului altor shell-uri. Poate imita comportamentul shell-ului Bourne (sh) sau al unui shell compatibil cu standardele POSK (bash -posix).

Ca rezultat, bash este mai probabil să poată citi cu succes fișierele de configurare și să ruleze scripturi scrise special pentru alte shell-uri.

Toate sistemele de operare Linux furnizate folosesc interpretul bash în mod implicit, cu excepția sistemelor de operare pornite de pe medii amovibile, care utilizează interpretul ash în mod implicit.

Folosind tcsh (și interpretul csh anterior)

Interpretul de comandă tcsh este o implementare open source a interpretului Cshell (csh). Interpretul csh a fost creat de Bill Joy și este folosit implicit pe aproape toate sistemele Berkeley UNIX (astfel de sisteme au fost distribuite de Sun Microsystems).

Multe dintre caracteristicile csh, cum ar fi editarea liniei de comandă și metodele de gestionare a istoricului comenzilor, au fost implementate în tcsh și alte shell-uri. Așa cum comanda sh rulează interpretul bash în modul compatibil sh, comanda csh rulează interpretul tcsh în modul compatibil cu csh.

Folosind interpretul de cenușă

Interpretul Ash este o versiune ușoară a interpretului Berkeley UNIX sh. Nu conține multe caracteristici de bază și nu oferă caracteristici precum istoricul comenzilor.

Interpretul de cenușă este potrivit pentru utilizarea în sisteme încorporate cu limitate resursele sistemului. ÎN sistem de operare Interpretul ash al FedoraCore 4 este cu un ordin de mărime mai mic decât interpretul bash.

Folosind zsh

Interpretul zsh este o altă clonă a interpretului sh. Îndeplinește cerințele Standardul POSIX(cum ar fi bash), dar are alte caracteristici, inclusiv verificarea ortografică și o abordare diferită a editării liniei de comandă. Interpretul zsh a fost implicit în primele sisteme de operare. sisteme MacOS X, dar în sisteme moderne Interpretul implicit este bash.

Această foaie de cheat acoperă următoarele subiecte: introducere în shell, navigare, comenzi de bază, variabile de mediu, conectori, conducte, redirecționare I/O, permisiuni și comenzi rapide de la tastatură.

Bash Shell: Introducere

Un shell, sau shell, este un program, în cazul nostru numit „bash”, care este prescurtarea de la Bourne Again Shell. Shell acceptă comenzile dvs. și le transmite sistemului de operare. Pentru a interacționa cu sistemul, se folosesc terminale, cum ar fi gnome-terminal, eterm, nxterm etc.

Navigare

În Linux, fișierele și directoarele sunt organizate ierarhic, ceea ce înseamnă că există un director de pornire numit director rădăcină. Conține fișiere și subdirectoare, care la rândul lor conțin fișiere și propriile subdirectoare.

pwd

Comanda pwd, prescurtare de la tipăriți directorul de lucru, afișează locatia curentaîn structura directoarelor.

CD

Comanda cd vă permite să accesați catalog nou.

mkdir

Comanda mkdir creează un director nou în directorul curent.

Comenzi de bază

om

Comanda man afișează manuale de comandă. De exemplu, următoarea comandă va afișa toate informațiile despre comanda cat:

$ om cat

pisică

Comanda cat citește fișierul transmis ca argument și tipărește conținutul acestuia canal standard ieșire. Trecerea mai multor fișiere ca argument va imprima conținutul concatenat al tuturor fișierelor.

ecou

Comanda echo își imprimă argumentele la ieșirea standard.

$ echo Hello World Hello World

Dacă apelați echo fără argumente, va fi imprimat un șir gol.

cap

Comanda head citește primele 10 rânduri ale oricărui text transmis și le trimite la conducta standard. Numărul de linii afișate poate fi modificat:

$head -50 test.txt

coadă

Comanda tail funcționează similar cu comanda head, dar citește linii de la sfârșit:

$ coada -50 test.txt

De asemenea, puteți vizualiza liniile adăugate într-un fișier în timp real, folosind steag-ul -f:

$ tail -f test.txt

Mai puțin

Comanda less vă permite să navigați printr-un fișier transferat sau o bucată de text, în ambele direcții.

$ mai puțin test.txt $ ps aux | Mai puțin

Aflați mai multe despre scopul simbolului | va fi acoperit mai jos în secțiunea de istorie a comenzii.

Comenzi rapide comune de la tastaturăDescriere
GSe mută la sfârșitul fișierului
gSe mută la începutul fișierului
:50 Se mută la rândul 50 al fișierului
qIeșiți mai puțin
/termen de căutareCăutați mai jos un șir care se potrivește cu „termenul de căutare”. linia curentă
/
?termen de căutareGăsirea unei linii care să se potrivească cu „termenul de căutare” deasupra liniei curente
? Trece la următorul rezultat al căutării care se potrivește
susSe deplasează cu o linie în sus
josSe deplasează cu o linie în jos
pagină susSe mută cu o pagină în sus
in josul paginiiMută ​​o pagină în jos

Adevărat

Comanda adevărată returnează întotdeauna zero ca stare de ieșire pentru a indica succesul.

fals

Comanda falsă returnează întotdeauna diferit de zero ca stare de ieșire pentru a indica eșecul.

$?

$? este o variabilă care conține starea de ieșire a ultimei comenzi executate. Starea se referă de obicei la codul de returnare al programului. 0 înseamnă executarea cu succes a programului, orice valoare mai mare decât 0 reflectă faptul că unele erori au apărut în timpul execuției. Apropo, acesta este motivul pentru care în bash 0 este considerat adevărat și tot ceea ce nu este 0 este fals:

$adevărat$eco$? 0 $ fals $ echo $? 1

grep

Comanda grep caută șirul transmis în fișierul specificat:

$ cat users.txt user:student parola:123 user:profesor parola:321 $ grep "student` file1.txt user:student parola:123

grep poate accepta, de asemenea, mai multe fișiere și expresii regulate pentru a rafina formatul textului.

istorie

Comanda history afișează istoricul liniei de comandă. Este de obicei folosit împreună cu comanda grep pentru a căuta o anumită comandă. De exemplu, următorul cod va găsi toate comenzile care conțin șirul g++:

$istorie | grep g++ 155 g++ fișier1.txt 159 g++ fișier2.txt

Simbolul | este folosit și aici. - acesta este așa-numitul transportor (conveior). Datorită acesteia, puteți redirecționa ieșirea unei comenzi către intrarea alteia - astfel, în exemplul de mai sus, tot istoricul care ar fi scos în mod normal de comanda istoric direct către ieșirea terminalului va fi redirecționat către grep ca intrare. Nu vom vedea rezultatul comenzii history, dar vom vedea ieșirea comenzii grep.

Acest lucru poate fi destul de dificil de înțeles fără practică, așa că experimentați pe cont propriu cu comenzile ls , history , ps (descrise mai jos) redirecționând rezultatul lor către grep , sed sau mai puțin, de exemplu.

export

Comanda de export setează variabilele de mediu pentru a le transmite proceselor secundare. De exemplu, iată cum puteți trece o variabilă de nume cu valoarea student:

$ export nume=student

ps

Comanda ps afișează informații despre procesele care rulează.

$ ps PID TTY TIME CMD 35346 puncte/2 00:00:00 bash

Sunt ieșite patru elemente:

  • ID proces (PID),
  • tip terminal (TTY),
  • timpul de funcționare a procesului (TIME),
  • numele comenzii care a început procesul (CMD).

awk

Comanda awk găsește și înlocuiește textul din fișiere folosind un model dat: awk "pattern (action)" test.txt

wget

Comanda wget descarcă fișiere de pe Internet și le plasează în directorul curent.

$ wget https://github.com/mikeizbicki/ucr-cs100

nc

ping

Comanda ping testează o conexiune la rețea.

$ ping google.com PING google.com (74.125.224.34) 56(84) octeți de date. 64 de octeți de la lax17s01-in-f2.1e100.net (74.125.224.34): icmp_req=1 ttl=57 time=7,82 ms --- statistici ping google.com --- 1 pachet transmis, 1 primit, 0% pierdere de pachete , timp 8ms rtt min/avg/max/mdev = 7.794/8.422/10.792/0.699 ms

Statisticile de la sfârșit arată numărul de conexiuni făcute înainte de finalizarea comenzii și timpul necesar pentru a le finaliza.

git

variabile de mediu

Variabilele de mediu sunt denumite variabile care conțin valori utilizate de una sau mai multe aplicații.

Variabila PATH conține o listă de directoare în care sistemul caută fișiere executabile.

Variabila HOME conține calea către directorul principal al utilizatorului curent.

Conectori

Conectorii vă permit să rulați mai multe comenzi simultan.

$ true && echo Bună ziua Salut $ false || echo Bună ziua $ echo Bună ziua ; ls Salut test.txt file1.txt file2.txt

Transportoare

Transportoarele sau conductele vă permit să conectați canalele de intrare și ieșire diverse echipe. În exemplul următor, ieșirea comenzii ls va fi transmisă la cap și numai primele 10 elemente vor fi tipărite ca rezultat.

$ ls -l | cap

Redirecționare I/O

Redirecționarea ieșirii

Simbolurile > și >> sunt folosite pentru redirecționarea standard a ieșirii.

De exemplu, acest cod va canaliza ieșirea ls către un fișier, mai degrabă decât către ecran:

$ ls > files.txt $ cat files.txt file1.cpp sample.txt

Dacă fișierul nu există, este creat, iar dacă există, este suprascris. Pentru a evita suprascrierea, ar trebui să utilizați comanda >> - aceasta adaugă date la sfârșitul fișierului.

Redirecționare de intrare

Pentru redirecționarea standard a ieșirii, utilizați simbolul< . В следующем примере sort берет входные данные из файла, а не с клавиатуры:

$ cat fisiere.txt c b $ sortare< files.txt b c

Comanda sortare imprimă conținutul fișierului pe ecran deoarece nu am redirecționat rezultatul. Acest lucru se poate face astfel:

$sort< files.txt >files_sorted.txt

Redirecționare avansată

Adăugarea & la > determină redirecționarea atât a ieșirii standard, cât și a erorii. De exemplu, fișierul test.cpp va scoate linia stdout la cout și linia stderr la cerr .

$ g++ test.cpp $ ./a.out >& test.txt $ cat test.txt stdout stderr

Dacă doriți să scoateți un anumit descriptor de fișier, puteți atribui numărul acestuia la > .

NumeDescriptorDescriere
stdin0 Intrare standard
stdout1 Ieșire standard
stderr2 Ieșire eroare standard

De exemplu, pentru redirecționează stderrîn test.txt trebuie să faceți următoarele:

$ g++ test.cpp $ ./a.out 2> test.txt stdout $ cat test.txt stderr

Drepturi de acces

Comanda ls -l afișează o mulțime de informații despre permisiunile fiecărui fișier:

chmod

Comanda chmod modifică permisiunile unui fișier. Iată combinații tipice de steaguri pentru modificarea drepturilor anumitor utilizatori:

Puteți apela chmod cu o descriere a ceea ce trebuie să faceți fisier specific. Simbolul - înseamnă eliminarea drepturilor, simbolul + înseamnă adăugare. Următorul exemplu va face fișierul lizibil și scris de către proprietar și grup:

$ chmod ug+rw test.txt $ ls -l test.txt -rw-rw---- 1 grup de utilizatori 1097374 26 ianuarie 2:48 test.txt

În plus, chmod poate fi folosit cu numere octale, unde 1 este prezența drepturilor și 0 este absența:

Rwx = 111 = 7 rw- = 110 = 6 r-x = 101 = 5 r-- = 100 = 4

Următoarea comandă va funcționa la fel ca cea anterioară.

Bash este un interpret de limbaj de comandă pentru sisteme compatibile UNIX. Execută comenzi de la intrare standard (cum ar fi o fereastră de terminal) sau dintr-un fișier. Bash include, de asemenea, extensii utile Korn și C shell (comenzile ksh și, respectiv, csh)

Sintaxă

bash [Opțiuni]

Opțiuni

-c şir Dacă acest parametru este prezent, atunci comanda va fi citită din linie şir. Dacă comanda transmisă are argumente suplimentare, acestea sunt considerate poziționale și încep de la $0. (Capitol Argumente )
-i Munca interactivă a interpretului
-l Urmăriți INVOCARE mai jos
-r Limitări în funcționarea carcasei. Urmărește SHELL RESTRICȚIONAT
-s Dacă acest parametru este specificat și lipsesc toate argumentele necesare, acestea sunt citite din intrarea standard
-D O listă cu toate șirurile cuprinse între ghilimele duble cu un $ înainte este tipărită la rezultatul standard. Necesar pentru a finaliza traducerea. Nu vor fi executate comenzi
[-+]0[shopt_option]

shopt_option - opțiuni suplimentare de shell. Citiți subsecțiunea COMANDĂ ÎN SHELL BUILTIN. Dacă acest parametru este prezent6 atunci se setează -0 în fața lui parametrul specificat, iar +0 îl anulează. Dacă parametrul shopt_option nu este specificat, atunci +0 afișează o listă setați parametri la ieșire standard într-un format care permite reutilizarea ca intrare.

-- Semnalizează sfârşitul setării parametrilor. Orice parametri după acesta sunt tratați ca nume de fișiere și argumente pentru script. Opțiunea „-” este echivalentă cu „--”.

Bash permite, de asemenea, opțiuni cu mai multe caractere. Ele trebuie descrise înaintea celor cu un singur caracter pentru a putea fi recunoscute corect.

--depanator Pornește un profil de depanare înainte de a rula scriptul. Activează modul avansat de depanare (mai multe detalii în descriere extdebug) și rulează funcția de urmărire
(vezi descrierea parametrilor -o).
--dump-po-string Echivalent cu -D, dar rezultatul este în format de fișier localizations.po
--dump-strings Complet similar cu -D
--Ajutor Cheie
--init-file fişier
--rcfile fişier Dacă interpretul este lansat în modul interactiv, acesta execută comenzile de inițializare ale fișierului specificat fişier, nu de la fișier standard initializare ~/.bashrc.
--log in La fel ca -l
--noeditare
--noprofile Nu citiți fișierele de configurare la nivelul întregului sistem când porniți shell-ul interpretorului /etc/profile și orice fișiere de setări locale, cum ar fi ~/.bash_profile, ~/.bash_login sau ~/.profil . În mod implicit, bash le folosește atunci când rulează în modul de conectare (mai multe detalii în parametrul INVOCATION).
--norc Nu citiți și nu executați fișierul de setări personale ~/.bashrc atunci când rulați interactiv. În mod implicit, acest parametru este setat atunci când shell-ul este pornit cu comanda SH.
--posix Schimbați comportamentul implicit al lui bash atunci când întâlniți o comandă non-POSIX (pentru a asigura compatibilitatea)
--restricționat Acțiunile Shell sunt limitate (citiți mai jos despre parametrul RESTRICTED SHELL)
--verbos La fel ca -v (ieșire verbală)
--versiune Imprimați informații despre versiunea curentă a interpretului la rezultatul standard

Argumente

Dacă, după procesarea parametrilor, mai există argumente care nu sunt asociate parametrilor -c sau -s, atunci primul argument este considerat a fi numele fișierului care conține scriptul cu comenzile. $0 este numele fișierului, iar argumentele rămase sunt scrise pozițional. Bash citește comenzile scriptului, le execută și apoi iese. Starea de ieșire va fi egală cu starea de ieșire a ultimei comenzi de script executată. Dacă nu a fost executată nicio comandă, valoarea returnată va fi „0”. În primul rând, se încearcă deschiderea scriptului de la dosarul curent, dacă nu este acolo, fișierul specificat va fi căutat conform variabila PATH pentru scenarii.

apel bash

log in coajă- dacă primul caracter după -- este 0 sau lansarea a fost efectuată cu parametrul -login.

interactiv coajă -muncă interactivă. Dacă este lansat fără argumente și fără parametrul -c cu dispozitivul standard de intrare/ieșire în forma terminal.app sau lansat cu parametrul -i.

Procesarea fișierelor de inițializare. Dacă oricare dintre fișierele cu parametrii de inițializare există, dar nu poate fi citit, bash pe Mac raportează o eroare.

Când bash este pornit în modul interactiv sau de conectare, comenzile din fișier sunt citite și executate mai întâi /etc/profile (dacă este disponibil), atunci se verifică prezența fișierelor ~/.bash_profile , ~/.bash_login , și ~/.profil iar dacă sunt disponibile și accesibile, atunci comenzile de la acestea sunt executate în aceeași ordine în care sunt listate. Pentru a sări peste procesarea fișierelor de mai sus, puteți utiliza parametrul --noprofile

Dacă bash a fost pornit în modul de conectare, fișierul este verificat și, dacă este prezent, executat ~/.bash_logout .

Dacă este lansat în modul interactiv, fără modul de conectare, atunci în timpul pornirii fișierul este executat suplimentar~/.bashrc . A opri acest fișier este utilizat parametrul --norc sau --rcfile fişier pentru a înlocui fișierul executabil cu altul ( fişier).

Când bash este pornit normal, de exemplu pentru a executa un script, se uită la variabila de mediu globală BASH_ENV și își folosește valoarea pentru a găsi fișierul executabil.

Când bash este apelat de comandă SH el încearcă să folosească cel mai mult versiune veche pentru a asigura compatibilitatea cu standardul POSIX. Când sunt apelate în modul interactiv sau în modul --login, fișierele sunt citite și executate mai întâi secvenţial/etc/profile Și ~/.profil , pentru a interzice utilizarea acestor fișiere, utilizați parametrul --noprofile. De asemenea, citește în mod interactiv valoarea variabilei ENV pentru a o utiliza ca cale pentru a găsi fișierul executabil. Când rulați cu sh, opțiunea de pornire --rcfile este ignorată și nu poate fi utilizată. Când este lansat în modul standard, nu sunt utilizate fișiere de configurare; interpretul funcționează în modul POSIX.

Când bash rulează în modul posix folosind o opțiune de linie de comandă --posix interpretul va adera la standardul POSIX pentru fișierele de inițializare. În acest caz, modul interactiv folosește valoarea variabilei ENV, care trebuie să conțină numele fișierului de inițializare; nu vor fi executate alte fișiere de inițializare.

Această secțiune acoperă următoarele subiecte:

  • Interacțiunea cu shell-uri și comenzi
  • Comenzi și secvențe de comenzi
  • Definirea, utilizarea și exportul variabilelor de mediu
  • Istoricul comenzilor și instrumente de editare
  • Rularea comenzilor în și în afara variabilei de mediu PATH
  • Utilizarea înlocuirii comenzilor
  • Aplicarea comenzilor recursiv la un arbore de directoare
  • Utilizarea paginilor de manual (ajutor) pentru a găsi informații despre comenzi

Această secțiune descrie câteva dintre caracteristicile de bază ale shell-ului bash. Un accent deosebit este pus pe capacitățile necesare pentru certificare. Cochilia este un mediu bogat și salutăm dezvoltarea sa continuă. auto-studiu. Multe cărți au fost scrise pe interprete de comenzi UNIX și Linux, și în special bash.

interpret de comandă bash

Interpret bash unul dintre câțiva interpreți disponibile pe Linux. Numit si B al nostru- A câştig SH ell, după Stephen Bourne, creatorul unei versiuni timpurii a interpretului ( /bin/sh).Bash este în esență compatibil cu sh, dar introduce multe îmbunătățiri, atât în ​​ceea ce privește funcționalitatea, cât și capacitățile de programare. Include capabilitățile interpreților Korn (ksh) și C (csh) și este conceput pentru a fi un interpret compatibil cu POSIX.

Înainte de a începe să învățăm bash, să ne amintim asta interpret este un program care primește și execută comenzi. De asemenea, acceptă capabilități de programare, permițându-vă să compuneți modele complexe din comenzi obișnuite. Aceste structuri complexe sau scenarii pot fi salvate în fișiere, care la rândul lor sunt ele însele comenzi noi. Mai mult, multe comenzi pe un sistem Linux tipic sunt implementate ca scripturi shell.

Interpreții conțin incorporat comenzi precum cd, break și exec. Alte comenzi sunt extern.

Interpreții folosesc și trei standarde curgere I/O:

  • stdin Acest intrare standard, care oferă intrare pentru comenzi.
  • stdout Acest ieșire standard, care afișează rezultatele unei comenzi într-o fereastră de terminal.
  • stderr Acest fluxul de erori standard, care afișează erorile care apar la executarea comenzilor.

Fluxurile de intrare oferă intrare pentru programe, de obicei asociate cu o tastatură terminală. Se imprimă fluxuri de ieșire caractere text, de obicei la terminal. Terminalul a fost inițial o mașină de scris sau un terminal video ASCII, dar acum este adesea o fereastră pe un desktop grafic. Restul acestei secțiuni se va concentra pe redirecționarea la nivel înalt.

Dacă utilizați un sistem Linux fără GUI sau ați deschis o fereastră de terminal în modul grafic, veți vedea un prompt de comandă similar cu Lista 1.

Listare 1. Exemple de solicitări tipice ale utilizatorului

$
ian@lyrebird:~>
$

Dacă sunteți conectat ca root (sau superutilizator), solicitarea dvs. ar putea arăta ca Lista 2.

Listare 2. Exemple de solicitări pentru root sau superutilizator

#
pasăre liră:~ #
#

Utilizatorul root are o putere semnificativă, așa că utilizați-l cu precauție. Dacă aveți privilegii de rădăcină, majoritatea solicitărilor încep cu semnul lire sterline (#). Solicitarea unui utilizator obișnuit începe de obicei cu un alt caracter, de obicei un semn dolar ($). Invitația dvs. poate diferi de exemplele din acest ghid. Solicitarea dvs. poate include numele dvs. de utilizator, numele mașinii, directorul curent, data sau ora la care a fost tipărită promptul și așa mai departe.

Unele convenții ale acestui manual

Ghidurile de examen developerWorks LPI 101 și 102 includ cod eșantion de la sisteme Linux reale, folosind solicitările implicite pentru acele sisteme. În cazul nostru, promptul utilizatorului root începe cu #, așa că îl puteți distinge de solicitările utilizatorului obișnuit, care încep cu semnul $. Această convenție este aceeași cu cea folosită în cărțile pe această temă. Priviți cu atenție promptul shell din fiecare exemplu.

Comenzi și secvențe

Sunteți în interpretul de comenzi, să vedem ce puteți face acum. Funcția principală a interpretoarelor de comenzi este aceea că vă execută comenzile prin care interacționați cu sistemul Linux. Pe sistemele Linux (și UNIX), comenzile constau dintr-un nume de comandă, opțiuni și parametri. Unele comenzi nu au nici opțiuni și nici parametri, altele au opțiuni, dar nu au parametri, în timp ce altele nu au nici opțiuni, nici parametri.

Dacă o linie conține caracterul #, atunci toate caracterele ulterioare din ea sunt ignorate. Astfel, simbolul # poate însemna fie începutul unui comentariu, fie o invitație către un utilizator. Interpretarea ulterioară va fi evidentă din context.

Echipa Echo

Comanda echo tipărește o listă a argumentelor sale către terminal, așa cum se arată în Lista 3.

Lista 3. Exemple ale comenzii echo

$ echo Word
Cuvânt
$ echo Și propoziție
Și o propunere
$ echo Unde s-au dus spațiile?
Unde s-au dus spatiile?
$ echo "Uite spațiile." # și comentați
Și aici sunt spațiile.

În al treilea exemplu din Lista 3, toate spațiile dintre cuvintele din ieșirea comenzii au devenit de aceeași dimensiune, un spațiu. Pentru a evita acest lucru, va trebui să includeți șirul între ghilimele, folosind fie ghilimele duble (“) fie ghilimele simple (‘). Bash folosește caractere delimitare precum spații, tab-uri și simboluri linie nouă pentru a împărți șirul de intrare în jetoane, care sunt apoi transmise echipei dvs. Închiderea unui șir între ghilimele suprimă divizarea acestuia și, prin urmare, este un singur simbol. În exemplul de mai sus, fiecare jeton după numele comenzii este un parametru, deci avem 1, 2, 4 și respectiv 1 parametri.

Comanda echo are mai multe opțiuni. În mod obișnuit, echo adaugă un caracter de linie nouă după ieșire. Utilizați opțiunea -n pentru a nu adăuga un caracter de linie nouă. Utilizați opțiunea -e pentru ca comanda să interpreteze secvențele de escape.

Secvențe de evadare și întreruperi de linie

Există o mică problemă când utilizați backslash în bash. Când caracterul backslash (\) nu este citat, el însuși servește ca o secvență de evadare pentru bash, păstrând semnificația următorului caracter. Acest lucru este necesar pentru metacaracterele speciale, pe care le vom analiza puțin mai târziu. Există o excepție de la această regulă: o bară oblică inversă urmată de o linie nouă face ca bash să înghită ambele caractere și să trateze secvența ca pe o cerere de continuare a liniei. Acest lucru poate fi util atunci când împărțiți linii lungi, în special în scripturi.

Pentru ca secvențele descrise mai sus să fie procesate corect de comanda echo sau de una dintre multele alte comenzi care folosesc caractere de control de escape similare, trebuie să citați secvențele de escape sau să le includeți într-un șir între ghilimele sau să utilizați o altă bară oblică inversă pentru a obține este corect.interpretarea simbolurilor. Lista 4 conține exemple de diferite utilizări ale lui \.

Lista 4. Exemple de utilizare a ecoului

$ echo -n Fără linie nouă
Fără linie nouă$ echo -e „Fără linie nouă\c”
Nicio linie nouă$ echo „Linia pe care ați făcut clic
> Tasta Enter"
Linia în care ați făcut clic
Introduce cheia
$ echo -e „Linie cu caracter de escape de linie nouă”
Șir cu caracter de escape
linie nouă
$ echo „Linie cu caracter de escape de linie nouă, dar fără opțiune -e”
Un șir cu un caracter de escape newline, dar fără opțiunea -e
$ echo -e Metacaractere cu dublu\\n\\tbackslash
Metacaractere cu dublu
backslash
$ echo Backslash \
> urmat de Enter \
> servește drept cerere de continuare a liniei.
O bară oblică inversă urmată de Enter servește ca o solicitare pentru a continua linia.

Rețineți că bash afișează un prompt special (>) atunci când introduceți un șir cu ghilimele neterminate. Linia de intrare se încadrează la a doua linie și include un caracter de linie nouă.

Metacaracterele Bash și instrucțiunile de control

Bash include mai multe caractere care, atunci când nu sunt ghilimele, servesc și la împărțirea șirului de intrare în cuvinte. Pe lângă spațiu, astfel de simboluri sunt ‘|’, ‘&’, ‘;’, ‘(‘, ‘)’, ‘<’, и ‘>’. Vom discuta unele dintre aceste simboluri mai detaliat în alte secțiuni ale acestui ghid. Deocamdată, rețineți că, dacă doriți să includeți un metacaracter ca parte a textului dvs., acesta trebuie să fie cuprins între ghilimele sau precedat de o bară oblică inversă (\), ca în Lista 4.

Linia nouă și metacaracterele corespunzătoare sau perechile de metacaractere servesc, de asemenea, ca instrucțiuni de control. Astfel de simboluri sunt ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘|’ '(', Și ')'. Unele dintre aceste instrucțiuni de control vă permit să creați secvențe sau liste de comenzi.

Cea mai simplă secvență de comenzi constă din două comenzi separate prin punct și virgulă (;). Fiecare comandă următoare este executată după cea anterioară. În orice mediu de programare, comenzile returnează un cod care indică dacă programul s-a finalizat normal sau a eșuat; Comenzile Linux returnează de obicei 0 dacă au succes și diferit de zero dacă nu reușesc. Puteți efectua procesarea condiționată folosind operatorii de control && și ||. Dacă separați două comenzi cu operatorul de control &&, a doua comandă va fi executată numai dacă prima a returnat zero. Dacă separați comenzile cu ||, atunci a doua comandă va fi executată numai dacă prima returnează o valoare diferită de zero. Lista 5 conține câteva secvențe de comenzi care folosesc comanda echo. Aceste exemple nu sunt foarte interesante, deoarece echo returnează 0, dar ne vom uita la mai multe exemple după ce vom învăța cum să folosim mai multe comenzi.

Lista 5. Secvențe de comenzi

$ linia ecou 1;linia ecou 2; ecou linia 3
linia 1
randul 2
linia 3
$ ecou linia 1&&echo linia 2&&echo linia 3
linia 1
randul 2
linia 3
$ linia ecou 1||linia ecou 2; ecou linia 3
linia 1
linia 3

Puteți ieși din shell folosind comanda exit. În plus, puteți specifica un cod de ieșire ca parametru. Dacă lucrați cu interpretul de comenzi într-o fereastră de terminal în modul grafic, atunci în acest caz se va închide pur și simplu. De asemenea, dacă sunteți conectat la un sistem la distanță folosind ssh sau telnet (de exemplu), conexiunea va eșua. În interpretul bash, puteți apăsa și Ctrl și d pentru a ieși.

Să ne uităm la o altă declarație de control. Dacă includeți o comandă sau o listă de comenzi între paranteze, comanda sau secvența de comenzi va fi executată în copia sa a shell-ului, astfel încât comanda de ieșire iese din copia shell-ului și nu din shell-ul în care rulați. acest moment. Lista 6 conține exemple simpleîmpreună cu && și ||.

Lista 6. Shell-uri și secvențe de comandă

$ (echo Într-o copie a interpretului; ieșire 0) && echo OK || echo Ieșire greșită
Într-o copie a interpretului
Bine
$ (echo Într-o copie a interpretului; ieșirea 4) && echo OK || echo Ieșire greșită
Într-o copie a interpretului
Ieșire proastă

Rămâneți la curent pentru mai multe comenzi în acest ghid.

variabile de mediu

Când rulați bash, sunteți înconjurat de o colecție de setări care formează mediul dvs., cum ar fi formatul promptului dvs., numele directorului dvs. de acasă, directorul dvs. de lucru, numele interpretului dvs., fișierele pe care le aveți deschise, funcțiile pe care le-ați definit și așa mai departe. Mediul tău include multe variabile pe care atât tu, cât și bash le poți seta. Bash vă permite, de asemenea, să creați variabile shell pe care le puteți exporta în mediul dvs. pentru a fi utilizate de către alte procese care rulează în interpretor sau de către alți interpreți pe care îi puteți lansa din interpretul curent.

Atât variabilele de mediu, cât și variabilele shell au un nume. Vă puteți referi la valoarea unei variabile prin plasarea unui semn „$” în fața numelui variabilei. Unele dintre cele mai comune variabile de mediu bash sunt enumerate în Tabelul 4.

  • UTILIZATOR Nume de utilizator autentificat
  • UID ID-ul digital al utilizatorului conectat
  • ACASĂ Directorul principal al utilizatorului
  • P.W.D. Director de lucru curent
  • COAJĂ Numele cochiliei
  • $ ID-ul procesului (sau PID) al unui proces bash (sau altul).
  • PPID ID-ul procesului care a apărut acest proces(adică ID-ul procesului părinte)
  • ? Ultimul cod de ieșire al comenzii

În Lista 7 puteți vedea câteva variabile bash.

Lista 7. Variabile de mediu și shell

$ echo $USER $UID
ian 500
$ echo $SHELL $HOME $PWD
/bin/bash /home/ian /home/ian
$ (ieșire 0);echo $?;(ieșire 4);echo $?
0
4
$ echo $$ $PPID
30576 30575

Puteți crea sau seta o variabilă shell tastând un semn egal (=) imediat după numele variabilei. Variabilele sunt sensibile la majuscule și minuscule, deci var1 și VAR1 sunt două variabile diferite. Prin convenție, variabilele, în special variabilele exportate, sunt scrise cu litere mari, dar aceasta nu este o cerință. Formal, $$ și $? sunt parametri shell, nu variabile. Puteți să le faceți referire, dar nu să atribuiți valori.

Când creați o variabilă shell, veți dori adesea să o exportați în mediu, astfel încât să fie disponibilă pentru alte procese pe care le lansați din shell. Variabilele pe care le exportați nu sunt disponibile pentru interpreții părinți. Pentru a exporta o variabilă, utilizați comanda de export. Pentru comoditate, puteți aloca o valoare și puteți exporta o variabilă într-un singur pas.

Pentru a ilustra atribuirea și exportul, să creăm un alt bash din interpretul bash curent și apoi să lansăm interpretul Korn din bash-ul creat (ksh). Vom folosi comanda ps pentru a afișa informații despre procesele care rulează. Vom afla mai multe despre comanda ps când vom explora conceptul de stare a procesului mai târziu în acest tutorial.

Nu folosești bash?

Bash este interpretul implicit pe multe distribuții Linux. Dacă nu sunteți un utilizator bash, puteți lua în considerare următoarele modalități de a practica utilizarea bash.

  • Utilizați comanda
    chsh -s /bin/bash
    pentru a schimba interpretul implicit. Modificările vor intra în vigoare data viitoare când vă conectați.
  • Echipă
    su – $USER -s /bin/bash
    va crea un alt proces care va fi un copil al interpretului dvs. actual. Noul proces va începe procesul de conectare cu shell-ul bash.
  • Creați un utilizator bash pentru a se pregăti pentru examenul LPI.

Lista 8. Variabile de mediu și shell

$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -bash
$bash

PID PPID CMD
16353 30576 bash
$ VAR1=var1
$VAR2=var2
$export VAR2
$ export VAR3=var3
$VAR2 $VAR3
var1 var2 var3
$ echo $VAR1 $VAR2 $VAR3 $SHELL
var1 var2 var3 /bin/bash
$ksh
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
16448 16353 ksh
$ export VAR4=var4
$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var2 var3 var4 /bin/bash
$ ieșire
$ $ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var1 var2 var3 /bin/bash
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
16353 30576 bash
$ ieșire
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -bash
$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
/bin/bash

Notă:

  1. La începutul acestei secvențe, interpretul bash avea un PID de 30576.
  2. Al doilea interpret bash are un PID de 16353, iar PID-ul său părinte este 30576, adică bash-ul original.
  3. Am creat variabilele VAR1, VAR2 și VAR3 în a doua instanță a bash, dar am exportat doar VAR2 și VAR3.
  4. În interpretul Korn, am creat VAR4. Comanda echo afișează numai valorile VAR2, VAR3 și VAR4 și a confirmat că VAR1 nu a fost exportat. Nu ai fost surprins când valoarea variabilei SHELL nu s-a schimbat chiar dacă promptul s-a schimbat? Nu vă puteți baza întotdeauna pe SHELL pentru a vă spune în ce interpret rulați, dar comanda ps vă va informa exact ce este. Rețineți că ps pune o cratimă (-) în fața primei instanțe de bash pentru a ne anunța ce este shell sursă.
  5. În a doua instanță de bash putem vizualiza VAR1, VAR2 și VAR3.
  6. În cele din urmă, când ne întoarcem la interpretul original, nu există o singură variabilă în el.

Mai devreme am discutat despre posibilitatea de a folosi atât ghilimele simple, cât și cele duble. Există o diferență semnificativă între ele. Interpretul efectuează înlocuirea variabilelor shell între ghilimele duble ($), dar nu efectuează înlocuirea dacă sunt folosite ghilimele simple (‘). În exemplul anterior, am creat o nouă instanță de interpret din altul și am primit nou identificator proces. Folosind opțiunea -c puteți transmite comanda unui alt interpret, care va executa comanda și va reveni. Dacă treceți un șir ca comandă între ghilimele simple, atunci a doua instanță a interpretului le va elimina și procesa șirul. Când se utilizează ghilimele duble, are loc înlocuirea variabilelor inainte de asta cum este trecut șirul, astfel încât rezultatele pot diferi de ceea ce vă așteptați. Interpretul și comanda vor genera un proces care va avea propriul PID. Lista 9 ilustrează aceste concepte. PID-ul interpretului bash original este într-un font diferit.

Lista 9. Citate și variabile shell

$ echo „$SHELL” „$SHELL” „$$” „$$”
/bin/bash $SHELL 19244 $$
$ bash -c "echo Expand în părinte $$ $PPID"
Extindeți în părintele 19244 19243
$ bash -c "echo Expand în copil $$ $PPID"
Expand în copil 19297 19244

Până acum, toate variabilele noastre se terminau cu un spațiu, așa că era clar unde se termină numele variabilei. De fapt, un nume de variabilă poate consta doar din litere, cifre sau un caracter de subliniere. Interpretul știe că un nume de variabilă se termină de îndată ce este întâlnit un alt caracter. Uneori este necesar să se utilizeze variabile în expresii în care sensul lor poate fi ambiguu. În astfel de cazuri, puteți folosi acolade pentru a separa numele variabilei, așa cum se arată în Lista 10.

Lista 10. Utilizarea acoladelor cu nume de variabile

$ echo "-$HOME/abc-"
-/home/ian/abc-
$ echo „-$HOME_abc-”
--
$ echo "-$(HOME)_abc-"
-/home/ian_abc-

comanda env

Comanda env, fără opțiuni sau parametri, afișează variabilele de mediu curente. De asemenea, îl puteți folosi pentru a rula o comandă într-un mediu predefinit. Opțiunea -i (sau pur și simplu -) șterge mediul curent înainte de a executa comanda, în timp ce opțiunea -u șterge variabilele de mediu pe care nu doriți să le transmiteți.

Lista 11 conține ieșirea parțială a comenzii env fără niciun parametru, urmată de trei exemple care rulează interpreți diferiți fără un mediu părinte. Vă rugăm să le revizuiți cu atenție înainte de a le discuta.

Lista 11. comanda env

$env
HOSTNAME=echidna
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=9.27.89.137 4339 22
SSH_TTY=/dev/pts/2
USER=ian
...
_=/bin/env
OLDPWD=/usr/src
$ env -i bash -c "echo $SHELL; env"
/bin/bash
PWD=/acasă/ian
SHLVL=1
_=/bin/env
$ env -i ksh -c "echo $SHELL; env"
_=/bin/env
PATH=/bin:/usr/bin
$ env -i tcsh -c "echo $SHELL; env"
SHELL: Variabilă nedefinită.

Rețineți că bash a stabilit variabila SHELL, dar nu a exportat-o ​​în mediu, chiar dacă bash a creat alte trei variabile în mediu. În exemplul ksh, avem două variabile de mediu, dar încercarea noastră de a afișa valoarea variabilei SHELL are ca rezultat o linie goală. În cele din urmă, tcsh nu a creat nicio variabilă de mediu și a dat o eroare când am încercat să obținem valoarea variabilei SHELL.

Setarea și resetarea variabilelor

Lista 11 a arătat cum se comportă interpreții atunci când procesează variabile și medii. Deși acest ghid se concentrează pe bash, ar trebui să știți că nu toți interpreții se comportă la fel. Mai mult, interpreții se comportă diferit în funcție de faptul că sunt sau nu shell-ul original. Pentru moment, vom spune doar că shell-ul inițial este shell-ul pe care îl obțineți când vă conectați; puteți rula alte shell-uri astfel încât acestea să se comporte ca cel original dacă doriți. Cei trei interpreți din exemplul de mai sus, lansati cu comanda env -i, nu sunt interpreții originali. Încercați să treceți opțiunea -l pentru a vedea diferența atunci când rulați shell-ul original.

Să ne uităm la încercarea noastră de a afișa valoarea variabilei SHELL în aceste shell-uri:

  • Când a pornit bash, a setat variabila SHELL, dar nu a exportat-o ​​automat în mediu.
  • Când a pornit ksh, nu a setat variabila SHELL. Cu toate acestea, o referire la o variabilă de mediu nedefinită este echivalentă cu o referire la o valoare goală.
  • Când a pornit tcsh, nu a setat valoarea variabilei SHELL. În acest caz, comportamentul implicit este diferit de ksh (și bash) și a dus la generarea unei erori atunci când am încercat să accesăm variabila.

Puteți folosi comanda unset pentru a șterge o variabilă și a o elimina din lista de variabile shell. Dacă o variabilă a fost exportată în mediu, aceasta va fi, de asemenea, ștearsă din mediu. Puteți folosi comanda set pentru a controla comportamentul bash (sau al altor interpreți). Set este o comandă încorporată în interpret, deci opțiunile depind de interpretul respectiv. În bash, opțiunea -u îi spune lui bash să nu genereze o eroare atunci când se referă la variabile nedefinite, ci să le trateze ca și cum ar fi valori goale. Puteți adăuga diverse opțiuni pentru a seta cu – și le puteți dezactiva cu +. Puteți afișa lista curentă de opțiuni setate cu echo $-.

Lista 12. Dezactivați și setați

$echo$-
elBH
$ echo $VAR1
$set -u;echo$-
himuBH
$ echo $VAR1
bash: VAR1: variabilă nelegată
$VAR1=v1
$VAR1=v1;echo $VAR1
v1
$unset VAR1;echo $VAR1
bash: VAR1: variabilă nelegată
$ set +u;echo $VAR1;echo $-
elBH

Puteți utiliza comanda set fără opțiuni, care va afișa toate variabilele dvs. de shell și valorile acestora (dacă există). Există și o altă comandă, declare, cu care puteți crea, exporta și afișa valorile variabilelor shell. Puteți afla despre alte opțiuni pentru comenzile de set și declarare din paginile de manual. Ne vom uita la paginile de manual mai târziu în această secțiune.

comanda exec

Ultima comandă la care ne vom uita în această secțiune este exec. Puteți folosi comanda exec pentru a rula o altă comandă care va înlocui interpretul curent. Lista 13 generează o instanță bash și apoi folosește exec pentru a o înlocui cu interpretul Korn. După ce părăsiți interpretul Korn, veți reveni la interpretul bash original (PID 22985 în acest exemplu).

Lista 13. Utilizarea exec

$ echo $$
22985
$bash
$ echo $$
25063
$ exec ksh
$ echo $$
25063
$ ieșire
$ echo $$
22985

Istoricul echipei

Dacă ați tastat comenzi în timp ce citiți manualul, este posibil să fi observat că aproape aceleași comenzi sunt folosite frecvent. Vești bune este că bash poate stoca un istoric al comenzilor tale. În mod implicit, istoricul este activat. Îl puteți dezactiva cu comanda set +o history și îl puteți activa cu comanda set -o history. Variabila de mediu HISTSIZE îi spune lui bash câte rânduri să stocheze. Un set de alte proprietăți determină comportamentul și funcționarea poveștii. Consultați paginile de manual bash pentru detalii.

Dacă ați tastat comenzi în timp ce citiți manualul, este posibil să fi observat că aproape aceleași comenzi sunt folosite des. Vestea bună este că bash poate stoca un istoric al comenzilor tale. În mod implicit, istoricul este activat. Îl puteți dezactiva cu comanda set +o history și îl puteți activa cu comanda set -o history. Variabila de mediu HISTSIZE îi spune lui bash câte rânduri să stocheze. Un set de alte proprietăți determină comportamentul și funcționarea poveștii. Consultați paginile de manual bash pentru detalii.

Iată câteva comenzi pe care le puteți folosi pentru a lucra cu istoricul:

istorie
Afișează întregul istoric
istorieN
Afișează ultimele N linii din istoricul dvs
istorie -dN
Elimină linia N din istoricul dvs.; aceasta poate fi folosită dacă, de exemplu, doriți să eliminați o linie care conține o parolă
!!
Ultima ta comandă a fost introdusă
!N
A noua echipă de istorie
!-N
O comandă care este la N pași de cea actuală din istorie (echivalent!-1!!)
!#
Comanda curentă pe care o tastați
!şir
Cea mai recentă comandă care începe cu șir
!?şir?
Cea mai recentă comandă care conține șir

Puteți folosi două puncte (:) urmate de valoare specifică pentru a accesa sau modifica o comandă din istoric. Lista 14 arată câteva dintre posibilitățile istorice.

Lista 14. Managementul istoriei

$ echo $$
22985
$ env -i bash -c "echo $$"
1542
$ !!
env -i bash -c "echo $$"
1555
$!ec
eco $$
22985
$ !en:s/$$/$PPID/
env -i bash -c "echo $PPID"
22985
$istorie 6
1097 ecou $$
1098 env -i bash -c "echo $$"
1099 env -i bash -c "echo $$"
1100 ecou $$
1101 env -i bash -c "echo $PPID"
1102 istorie 6
$istorie -d1100

Comenzile din Lista 14 fac următoarele:

1. Ieșiți PID-ul interpretului curent
2. Rulați comanda echo într-o nouă instanță a interpretului și imprimați PID-ul acestuia
3. Rulați ultima comandă
4. Reluați comanda începând cu „ec”; prima comandă din acest exemplu va rula
5. Rulați ultima comandă începând cu „en”, dar înlocuiți „$PPID” cu „$$”, astfel încât PID-ul părinte să fie afișat efectiv
6. Afișați ultimele 6 comenzi istorice
7. Ștergeți numărul de comandă 1100, ultima comandă ecou

Puteți edita poveștile în mod interactiv. Interpretul bash folosește biblioteca readline pentru a gestiona comenzile și editarea istoricului. În mod implicit, tastele și combinațiile de taste folosite pentru a naviga prin istoric sau pentru a edita liniile sunt aceleași cu cele utilizate în editorul GNU Emacs. În Emacs, combinațiile de taste sunt de obicei scrise ca C-x sau M-x, unde x este o cheie obișnuită și C și M sunt tastele Control și, respectiv, Meta. Pe un computer tipic, tasta Ctrl corespunde tastei Emacs Control, iar tasta Alt corespunde tastei Meta. Caracteristici suplimentare, precum și capacitatea de a configura opțiuni folosind un fișier de inițializare readline (de obicei inputrc în directorul dvs. de acasă), pot fi găsite în paginile de manual.

Dacă preferați să controlați istoricul în modul vi, utilizați comanda set -o vi pentru a comuta în modul vi. Puteți reveni la modul emacs folosind comanda set -o emacs. Când extrageți o comandă în modul vi, sunteți inițial în modul de inserare vi.

Cărări

Unele comenzi bash sunt încorporate, în timp ce altele sunt externe. Să ne uităm acum la comenzile externe și la cum să le rulăm, precum și la cum să distingem o comandă internă.

Unde caută interpretul comenzile?

Comenzile externe reprezintă fișiere din sistemul de fișiere. Secțiunea Easy File Management din acest ghid și tutorialul Topic 104 intră în mai multe detalii. Pe sistemele Linux și UNIX, toate fișierele fac parte dintr-un arbore imens a cărui rădăcină este /. În exemplele de mai sus, directorul nostru curent era directorul principal al utilizatorului. Pentru utilizatorii obișnuiți, directoarele de acasă sunt situate în directorul /home, adică /home/ian, în cazul meu. Directorul principal al rădăcinii este /root. După ce tastați o comandă, bash o caută în lista implicită de directoare de căutare, care este o listă de directoare separate prin puncte, stocate în variabila de mediu PATH.

Dacă vrei să știi ce comandă va fi executată dacă tastați șir specific, apoi utilizați comanda which sau type. Lista 15 arată calea mea implicită, precum și locația mai multor comenzi.

Lista 15. Găsirea locațiilor de comandă

$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/ian/bin
$ care bash env zip xclock echo set ls
alias ls="ls --color=tty"
/bin/ls
/bin/bash
/bin/env
/usr/bin/zip
/usr/X11R6/bin/xclock
/bin/echo
/usr/bin/which: nu se setează în (/usr/local/bin:/bin:/usr/bin:/usr/X11R6/b
în:/home/ian/bin)
$ type bash env zip xclock echo set ls
bash este /bin/bash
env este /bin/env
zip este /usr/bin/zip
xclock este /usr/X11R6/bin/xclock
echo este un shell încorporat
setul este un shell încorporat
ls este alias cu `ls --color=tty"

Rețineți că toate directoarele din cale se termină în /bin. Aceasta este o convenție comună, dar nu o cerință. Comanda which ne-a raportat că comanda ls era un alias și că comanda set nu a putut fi găsită. În acest caz, se poate interpreta că comanda fie nu există, fie este încorporată. Comanda type ne-a spus că comanda ls este de fapt un alias și, de asemenea, a determinat că comanda set este o comandă încorporată a interpretorului; Ea a mai spus că există o comandă echo încorporată și există și una în /bin, pe care am găsit-o folosind comanda which. Cele două comenzi își produc ieșirea în mod diferit.

Am văzut că comanda ls folosită pentru a vizualiza conținutul directoarelor este de fapt un alias. Aliasurile oferă o modalitate convenabilă de a utiliza comenzi cu seturi diferite de opțiuni sau pur și simplu ca un nume alternativ pentru o comandă. În exemplul nostru, opțiunea –color=tty face ca lista de fișiere directoare să fie evidențiată în funcție de tipul de fișiere și directoare. Încercați să rulați dircolors –print-database pentru a vedea codurile de culoare, precum și ce culori sunt folosite pentru un anumit tip de fișier.

Fiecare dintre aceste comenzi are opțiuni suplimentare. În funcție de cerințele dvs., puteți utiliza una sau alta comandă. Prefer să îl folosesc atunci când sunt sigur că voi găsi executabilul și am nevoie doar de calea sa completă. Comanda de tip îmi oferă mai mult decât informatii exacte, de care am nevoie uneori în scripturi.

Rularea altor comenzi

În Lista 15, am văzut că calea completă fișiere executabileîncepe din directorul rădăcină /. De exemplu, programul xclock este de fapt /usr/X11R6/bin/xclock, un fișier aflat în directorul /usr/X11R6/bin. Dacă programul nu se află în variabila PATH, atunci îl puteți rula specificând calea completă către program și programul în sine. Există două tipuri de căi pe care le puteți folosi:

  • Căi absolute care încep cu /, așa cum am văzut în Lista 15 (/bin/bash, /bin/env și așa mai departe).
  • Căile relative sunt căi legate de directorul de lucru curent, al căror nume poate fi obținut folosind comanda pwd. Astfel de comenzi nu încep cu /, dar conțin cel puțin un caracter /.

Puteți folosi căi absolute, indiferent de directorul de lucru curent, dar poate doriți să utilizați căi relative atunci când comanda este aproape de directorul curent. Să presupunem că vă dezvoltați versiune noua programul clasic „Hello World!” în subdirectorul mytestbin al directorului dvs. de acasă. Poate doriți să utilizați o cale relativă și să rulați comanda ca mytestbin/hello. Există două nume speciale pe care le puteți folosi într-o cale; un singur punct (.) se referă la directorul curent și o pereche de puncte (..) care se referă la directorul părinte al directorului curent. Deoarece directorul dvs. de domiciliu nu se află în variabila de mediu PATH (și nu ar trebui să fie), va trebui să furnizați o cale explicită către fișierul pe care doriți să-l rulați din directorul dvs. de acasă. De exemplu, dacă aveți o copie a programului hello în directorul dvs. de acasă, puteți utiliza pur și simplu comanda ./hello pentru a-l rula. Puteți folosi ambele. și.. ca parte a unei căi absolute, deși singur, nu este foarte util în acest caz. Puteți folosi tilde (~) pentru a vă referi la directorul dvs. de domiciliu și ~username pentru a face referire la directorul principal al numelui de utilizator. Vezi Lista 16 pentru câteva exemple.

Lista 16. Căi absolute și relative

$ /bin/echo Folosiți comanda echo mai degrabă decât încorporată
Folosiți comanda echo mai degrabă decât încorporată
$ /usr/../bin/echo Includeți directorul părinte în cale
Includeți directorul părinte în cale
$ /bin/././echo Adăugați câteva componente de cale inutile
Adăugați câteva componente de cale inutile
$ pwd # Vezi unde suntem
/acasă/ian
$ ../../bin/echo Utilizați o cale relativă către echo
Utilizați o cale relativă la ecou
$ myprogs/hello # Utilizați o cale relativă fără puncte
-bash: myprogs/hello: Nu există un astfel de fișier sau director
$ mytestbin/hello # Utilizați o cale relativă fără puncte
Salut Lume!
$ ./hello # Rulați programul în directorul curent
Salut Lume!
$ ~/mytestbin/hello # rulați hello folosind ~
Salut Lume!
$ ../hello # Încercați să rulați salut de la părinte
-bash: ../hello: Nu există un astfel de fișier sau director

Schimbarea directorului de lucru

Așa cum puteți executa programe din diferite directoare, puteți schimba directorul de lucru curent folosind comanda cd. Argumentul către cd trebuie să fie o cale absolută sau relativă către un director. Într-o comandă, puteți utiliza, de asemenea, ., .., ~ și ~username atunci când specificați căile. Dacă tastați cd fără parametri, veți merge în directorul dvs. de acasă. A trece un singur (-) ca parametru înseamnă a merge la directorul de lucru anterior. Directorul principal este stocat în variabila de mediu HOME, iar directorul anterior este stocat în variabila de mediu OLDPWD, deci cd este echivalent cu cd $HOME și cd este echivalent cu cd $OLDPWD. De obicei vorbim pe scurt despre schimbarea directorului în loc să schimbăm complet directorul de lucru curent.

În ceea ce privește comenzile, există o variabilă de mediu CDPATH care conține o listă de directoare separate prin două puncte care ar trebui căutate (în plus față de directorul de lucru curent), atunci când este permis căi relative. Dacă soluția folosește o cale de la CDPATH, atunci cd va tipări calea completă a directorului găsit ca rezultat. De obicei, o schimbare reușită a directorului este însoțită de apariția unei noi invitații sau a unei invitații ușor modificate. Câteva exemple sunt prezentate în Lista 17.

Lista 17. Schimbarea directoarelor

$ cd /;pwd
$ cd /usr/X11R6;pwd
/usr/X11R6
$cd ;pwd
/acasă/ian
$ cd -;pwd
/usr/X11R6
/usr/X11R6
$ cd ~ian/..;pwd
/Acasă
$ cd ~;pwd
/acasă/ian
$ export CDPATH=~
$ cd /;pwd
$ cd mytestbin
/home/ian/mytestbin

Utilizarea comenzilor în mod recursiv

Multe comenzi Linux pot fi aplicate recursiv tuturor fișierelor dintr-un arbore de directoare. De exemplu, comanda ls are o opțiune -R pentru a lista directoare recursiv, iar comenzile cp, mv, rm și diff au o opțiune -r pentru a o aplica recursiv.

Înlocuirea comenzii

Bash are o capacitate extrem de puternică de a transmite rezultatul unui program ca intrare a altuia; aceasta se numește substituție de comandă. Puteți face acest lucru înconjurând comanda ale cărei rezultate doriți cu apostrofe (`). Când utilizați mai multe comenzi imbricate, puteți include comanda între $(și).

În tutorialul anterior „LPI 101: Linux Installation and Package Management” am văzut că comanda rpm poate spune ce pachet deține ce comandă; A fost convenabil să folosiți înlocuirea comenzii aici. Acum știi că am făcut-o cu adevărat.

Înlocuirea comenzilor este un instrument de neprețuit atunci când scrieți scripturi, precum și atunci când este utilizată pe linia de comandă. Lista 18 arată un exemplu despre cum să obțineți cale absolută director dintr-unul relativ, cum să găsiți pachetul care oferă comanda /bin/echo și cum (ca root) să vizualizați etichetele a trei partiții de pe hard disk. Acesta din urmă folosește comanda seq pentru a crea o secvență de numere întregi.

Lista 18. Înlocuirea comenzilor

$ echo „../../usr/bin” dir este $(cd ../../usr/bin;pwd)
../../usr/bin dir este /usr/bin
$care ecou
/bin/echo
$ rpm -qf `care ecou`
sh-utils-2.0.12-3
$su -
Parola:
# pentru n în $(sev 7 9); face echo p$n `e2label /dev/hda$n`;terminat
p7 RH73
p8 SUSE81
p9 IMAGINI

Pagini de manual

ÎN ultimul subiect secțiunea acestui ghid, vom analiza cum să obținem ajutor echipe Linux folosind pagini de manual și alte tipuri de documentație.

Pagini de manual și secțiuni

Sursa principală (și tradițională) de documentare sunt paginile de manual, care pot fi accesate folosind comanda man. Figura 1 prezintă pagina de manual pentru comanda man. Utilizați comanda man man pentru a obține aceste informații.

Figura 1 prezintă câteva elemente tipice ale paginii de manual:

* Antet cu numele comenzii urmat de numărul secțiunii dintre paranteze
* Numele comenzii și alte comenzi similare care sunt discutate în această pagină de manual
* Lista de opțiuni și parametri aplicabili comenzii
* Scurtă descriere a echipei
* Descriere detaliată a fiecărei opțiuni

De asemenea, puteți găsi secțiuni despre utilizare, cum să raportați erori, informații despre autor și o listă de alte comenzi. De exemplu, pagina de manual pentru man afirmă că există comenzi suplimentare(și manualele lor):

apropos(1), whatis(1), less(1), groff(1) și man.conf(5).

De obicei, paginile de manual au 8 secțiuni în comun. Cele mai multe pagini sunt de obicei instalate atunci când un pachet este instalat, așa că dacă un pachet nu este instalat, aproape sigur veți pierde paginile sale de manual. În plus, unele secțiuni ale paginilor pot fi goale sau aproape goale. Cele mai comune secțiuni ale paginilor de manual sunt:

1. Comenzi de utilizator (env, ls, echo, mkdir, tty)
2. Apeluri de sistem sau funcții kernel (link, sethostname, mkdir)
3. Funcții de bibliotecă (acosh, asctime, btree, locale, XML::Parser)
4. Informații despre echipament (isdn_audio, mouse, tty, zero)
5. Descrierea formatului de fișier (keymaps, motd, wvdial.conf)
6. Jocuri (rețineți că multe jocuri rulează acum în modul grafic, deci pot avea propriul sistem de ajutor, mai degrabă decât pagini de manual)
7. Diverse (arp, boot, regex, unix utf8)
8. Administrarea sistemului(debugfs, fdisk, fsck, mount, renice, rpm)

Alte secțiuni ar putea include 9 pentru documentația kernel-ului Linux, n pentru documentația nouă, o pentru documentația veche și l pentru documentația locală.

Unele intrări pot apărea în mai multe secțiuni. Exemplele noastre au arătat că mkdir este conținut în secțiunile 1 și 2, iar tty în secțiunile 1 și 4. Puteți defini o anumită secțiune, cum ar fi man 4 tty sau man 2 mkdir, sau puteți utiliza opțiunea -a pentru a lista toate man secțiuni -pagini.

Vei observa în imagine că bărbatul are o mulțime de opțiuni pe care le poți privi singur. Deocamdată, să aruncăm o privire rapidă la secțiunea „Vezi și” a comenzilor legate de om.

Vezi si

Cele mai importante două comenzi legate de om sunt whatis și apropos. Comanda whatis caută în paginile de manual numele pe care îl specificați și afișează informații despre nume din paginile de manual corespunzătoare. Comanda apropos caută cuvinte cheie în paginile de manual și returnează cele care conțin cuvântul dvs. Lista 19 arată aceste comenzi.

Lista 19. Exemple de comenzi whatis și apropos

$ce omul
man (1) - formatează și afișează paginile de manual on-line
man (7) - macrocomenzi pentru formatarea paginilor de manual
man (1) - formatează și afișează paginile de manual on-line
man.conf (5) - date de configurare pentru man
$whatis mkdir
mkdir (1) - face directoare

$ apropos de mkdir
mkdir (1) - face directoare
mkdir(2) - creează un director
mkdirhier (1x) - face o ierarhie de directoare

Apropo, dacă nu găsiți pagina de manual pentru man.conf, încercați să rulați man man.conf ig .

Comanda man este afișată pe ecran printr-un program special de paginare. Pe majoritatea sistemelor Linux, acest program va fi mai puțin. O altă opțiune ar putea fi programul mai vechi. Dacă doriți să imprimați pagina, atunci specificați opțiunea -t pentru a formata pagina și a imprima folosind programul groff sau troff.

Programul cu mai puține rezultate are mai multe comenzi care facilitează găsirea șirurilor de caractere în textul afișat. Folosiți man less pentru a afla mai multe despre / (căutare înainte), ? (căutare înapoi) și n (pentru ultima căutare efectuată), precum și despre multe alte comenzi.

Alte surse de documentare

Pe lângă paginile de manual accesibile din linia de comandă, Free Software Foundation a creat număr mare fișierele info care sunt procesate de programul info. Are capabilități excelente de navigare, inclusiv abilitatea de a trece la o altă secțiune. Introduceți informații despre om sau informații despre informații pentru mai multe informații. Nu toate comenzile sunt documentate în informații, așa că puteți utiliza atât paginile de manual, cât și informațiile.

Există mai multe interfețe grafice pentru paginile de manual, cum ar fi xman (din proiectul XFree86) și yelp (browserul de ajutor Gnome 2.0).

Dacă nu găsiți ajutor pentru o comandă, încercați să rulați comanda cu opțiunea –help. În acest fel, puteți afla ce doriți sau puteți obține un indiciu unde mai puteți căuta.

Următoarea secțiune este despre procesarea fluxurilor de text folosind filtre.