Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Greške
  • ubuntu shell komande. Kako automatizirati "planirane" operacije sigurnosnog kopiranja

ubuntu shell komande. Kako automatizirati "planirane" operacije sigurnosnog kopiranja

Čim dođe do Linux uređaj i manje-više profesionalnog rada sa ovim OS-om, u primjerima se odmah pojavljuje komandna linija i počinje dominirati. Iz čega je lako zaključiti da je ovo glavni (i standardni) interfejs za upravljanje sistemom u Linuxu. Isti pronicljivi čitalac će se sigurno zapitati – ko izvršava unesene komande komandna linija? Odgovor "sistem" bi bio netačan: Linux nema poseban objekat pod nazivom "sistem". Sistem je sistem koji se sastoji od brojnih komponenti koje međusobno djeluju.

Tačan odgovor je, kao i obično, složeniji. Operativni sistem je posebno potreban kako bi se programi mogli pisati bez razmišljanja o detaljima računarskog uređaja i njegovim detaljima, počevši od procesora i hard diska (recimo, na nivou „otvorenog fajla“, a ne redosledom komandi). da pomerim glavu tvrdi disk). Operativni sistem sam upravlja hardverom, a programima obezbeđuje "jezik" prilično visokog nivoa apstrakcije koji pokriva sve njihove potrebe, tzv. API. Ali takav jezik nije prikladan za korisničke komande, jer je još uvijek preniskog nivoa (da biste riješili i najjednostavniji korisnički zadatak, potrebno je izvršiti nekoliko takvih operacija), a možete ga koristiti samo pisanjem programa (najčešće na C jeziku). Postoji potreba da se za korisnika izmisli još jedan - viši nivo i pogodniji - jezik upravljanja sistemom. Sve naredbe koje se mogu unijeti u komandnu liniju formulirane su na ovom jeziku.

Iz čega je pronicljivom čitaocu to lako zaključiti ručka ove komande, prevodeći ih na jezik operativnog sistema, takođe moraju biti neke poseban program, a pomoću njega korisnik vodi dijalog dok radi sa komandnom linijom. Tako je: ovaj program se zove interpreter komandne linije ili komandna školjka("ljuska"). Zove se „ljuska“ upravo zato što svo upravljanje sistemom ide kao da „iznutra“: korisnik komunicira sa njim na jeziku koji mu odgovara (pomoću tekstualne komandne linije), a ona komunicira sa drugim delovima sistema u a povoljno njima jezik (pozivanje programiranih funkcija).

Naravno, postoji nekoliko interpretatora komandi u Linuxu. Najjednostavniji od njih, koji se pojavio u ranim verzijama UNIX-a, nazvan je sh, ili "Bourne Shell" po svom autoru, Stephenu Bourneu. Vremenom je - gdje god je to moguće - zamijenjen snažnijim, bash , "Bourne Again Shell" (2) bash nadmašuje sh u svemu, posebno u karakteristikama uređivanje komandna linija. Pored sh i bash, "The Z Shell", zsh, može biti instaliran na sistemu. većina današnji moćni tumač komandi (nije šala, 22 hiljade redova dokumentacije), ili tcsh, ažurirana i takođe vrlo moćna verzija starog C Shell-a, čija je sintaksa komandi slična programskom jeziku C.

Sintaksa komandne linije

Dakle, koji je to jezik koji je lakši za upotrebu? Najviše od svega, komunikacija na ovom jeziku liči na pisani dijalog sa sistemom – razmjenu tekstova skretanje po korak. Korisnička izjava na ovom jeziku je naredba, svaka naredba je zaseban red. Dok se ne pritisne enter, string se može uređivati, a zatim se prosljeđuje u shell. Shell rastavlja primljena naredba - prevodi je na jezik sistemskih objekata i funkcija, a zatim je šalje sistemu na izvršenje.

Rezultat izvršavanja velikog broja naredbi je i tekst koji se daje kao "odgovor" korisniku. Iako nije potrebno, tim može raditi svoj posao potpuno tiho. Osim toga, ako su se tokom izvršavanja naredbe dogodile neke posebne okolnosti (na primjer, greška), ljuska će uključiti u odgovor korisniku dijagnostičke poruke.

Komanda i opcije

Najjednostavnija naredba se sastoji od jedne "riječi", kao što je naredba cal, koja prikazuje kalendar za tekući mjesec.

$cal
juna 2008
ned pon uto srije čet pet sub
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

$

Primjer 1. cal command


A ako trebate vidjeti kalendar za sljedeći mjesec? Tako je, ne biste trebali izmišljati zasebnu naredbu za ovo, cal će dobro obaviti posao, samo njegovo ponašanje treba malo izmijeniti:

$ cal 7 2008
jul 2008
ned pon uto srije čet pet sub
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Primjer 2. cal naredba s parametrima


Ispostavilo se da se komanda cal 7 2008 sastoji od najmanje dva dijela - stvarne cal naredbe i "sve ostalo". Ovaj odmor koji slijedi nakon naredbe se poziva parametri(ili argumenti), a uvode se kako bi se promijenilo ponašanje naredbe. U većini slučajeva, prilikom raščlanjivanja komandne linije prvo riječ se smatra imenom naredbe, a ostalo su njeni parametri.

Riječi

Kada analizira komandnu liniju, ljuska koristi koncept delimiter(delimiter). Razdjelnik je znak koji razdvaja riječi; stoga je komandna linija sekvenca riječi(koje su važne) i separatori(što nije bitno). Za ljusku, graničnici su razmak, tabulator i znak novog reda. Broj separatora između dvije susjedne riječi nije bitan.

Da dobijem separator unutra riječi (i rezultirajući razgraničeni niz proslijeđen kao jedan parametar), cijeli podniz mora biti okružen jednostrukim ili dvostrukim navodnicima: $ echo Jedan Dva Tri
Jedan dva tri
$ echo jedan "dva tri"
Jedan dva tri
$ echo "Jedan
>
> Oh. Dakle, šta je sljedeće?
> Oh, zaboravio sam navodnike!"

Primjer 3. Citiranje na komandnoj liniji


Sve navedeno znači da komanda ima onoliko parametara koliko riječi sa gledišta ljuske prati ga na komandnoj liniji. Prva riječ u trojci se prosljeđuje komandi kao prvi parametar, druga kao drugi itd. U prvom slučaju je proslijeđena komanda eho tri parametri su “Jedan”, “Dva” i “Tri”. Izvela ih je, odvajajući ih razmakom. U drugom slučaju, parametri su bili dva: “Jedan” i “Dva tri”. Kao rezultat toga, ove dva parametri su takođe prikazani odvojeni razmakom. U trećem slučaju, parametar je bio samo jedan- od početnog apostrofa ""Jedan" do završnog "...zaboravio!" ". Sve vreme dok je bash kucao, uslužno je izdavao nagoveštaj “>” - znak da se kuca komandna linija, ali u režimu kucanja sadržaja navodnika.

Ključevi

Da biste riješili različite probleme, iste radnje moraju se izvesti malo drugačije. Na primjer, za sinhronizaciju rada u različite tačke svijeta, bolje je koristiti isto vrijeme za sve (srednje vrijeme po Greenwichu), te organizirati svoj radni dan - lokalno vrijeme (uzimajući u obzir pomak u vremenskoj zoni i razliku između zimskog i ljetnog računanja vremena). Komanda datuma prikazuje oba puta, samo što joj je potreban dodatni parametar "-u" (aka "--univerzalni") da bi radila u GMT.


Pon Jun 16 18:03:44 MSD 2008
$ datum -u
Pon, 16. lipnja 14:03:46 UTC 2008

Primjer 4. naredba datuma sa ključem


Takvi parametri se nazivaju modifikatori izvršenja ili ključevi(opcije) . Ključ pripada ovoj komandi i nema značenje sam po sebi, po čemu se razlikuje od drugih parametara (na primjer, imena datoteka, brojeva) koji imaju vlastiti znači nezavisno od bilo koje komande. Svaka komanda može prepoznati neki skup ključeva i u skladu s tim promijeniti svoje ponašanje. Kao rezultat toga, "isti" prekidač, na primjer, " -s " može značiti potpuno različite stvari za različite naredbe.

Ne postoji strogi standard za format ključeva, ali postoje dogovori koje je u naše vrijeme već nepristojno kršiti. Prvo, ako parametar počinje sa "-", to je - jednoslovni ključ. “-” obično prati jedan znak, najčešće slovo, koji označava akciju ili svojstvo koje ovaj prekidač daje komandi. Ovo olakšava razlikovanje ključeva od drugih parametara - kako za korisnika kada kuca komandnu liniju, tako i za programera, autora komande.

Drugo, poželjno je da naziv ključa bude smisleno- u pravilu, ovo je prvo slovo naziva akcije ili svojstva označenog ključem. Na primjer, prekidač "-a" u čovjeku i tko dolazi od riječi " A ll" (sve) i mijenja ponašanje ovih naredbi tako da počnu prikazivati ​​informacije koje se obično prešućuju. A u cal i who commands, značenje tipke "-m" je drugačije:

$ tko -m
methody tty1 20. ruj 13:56 (localhost)
$ cal -m
juna 2008
Pon Uto Srijeda Čet Pet Sub Ned
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

Primjer 5. Korištenje prekidača -m u različitim naredbama


Za koga, opcija -m znači " M e", što je "ja", i kao rezultat, ko radi slično whoami . A za cal, tipka “ -m ” je naredba za izdavanje kalendara, koji se računa kao prvi dan ponedjeljakM danas"), kao što je uobičajeno u Rusiji.

Svojstvo ključa da je, s jedne strane, izuzetno kratak, a s druge strane informativan, naziva se skraćenica. Ovo svojstvo imaju ne samo ključevi, već i nazivi najčešćih Linux naredbi.

Treće, ponekad ključ mijenja ponašanje naredbe na takav način da se mijenja i interpretacija parametra koji slijedi nakon ovog ključa na komandnoj liniji. Izgleda kao ključ sebe uzima parametar, pa se pozivaju ključevi ove vrste parametarski. Po pravilu, njihovi parametri su nazivi datoteka za različite aplikacije, numeričke karakteristike i drugo. vrijednosti da pređe na komandu. -s 00:00
datum: nije moguće postaviti datum: rad nije dozvoljen
Pon Jun 16 00:00:00 MSK 2008
$ datum
Pon Jun 16 18:30:53 MSK 2008

Primjer 6. Korištenje datuma -s


Opcija -s naredbe datum vam omogućava da postavite sistemsko vrijeme na vrijednost koja je navedena kao parametar ovog ključa. Međutim, u ovaj primjer ova operacija nije uspjela, o čemu svjedoči izlaz poruka o grešci. Za promjenu sistemskog sata potrebne su privilegije sistem administrator, a u našem primjeru ova naredba je izvršena u ime običnog korisnika. Međutim, datum je i dalje prikazivao vrijeme koje je trebalo postaviti, iako je sistemski sat ostao nepromijenjen.

Ključne skraćenice je teško zadržati kada ih tim ima. previse puno. Neka pisma latinica(na primjer, “s” ili “o”) se koriste vrlo često i mogu poslužiti kao skraćenica za nekoliko naredbi odjednom, a neke (na primjer, “z”) - rijetko, teško je smisliti smislenu ime za njih. Za ovaj slučaj postoji još jedan puna riječ format: ključ počinje sa dva Znak “-” iza kojeg slijedi kompletan naziv entiteta koji označava. Takav je, na primjer, ključ “ --help “ (analogno “ -h ”): $ glava --pomoć
Upotreba: glava [KEY]... [FILE]...
Ispisuje prvih 10 redova svake FILE na standardni izlaz.
Ako je navedeno više FILES, prvo ispisuje zaglavlje s imenom datoteke.
Ako FILE nije dat ili dat kao -, čita standardni unos.

Argumenti potrebni za duge ključeve također su potrebni za kratke.
-c, --bytes=[-]N štampa prvih N bajtova svake datoteke;
zadnji bajtovi svake datoteke
-n, --lines=[-]N štampa prvih N redova svake datoteke, a ne 10;
ako N prethodi `-", ispisati sve osim N
zadnje linije svakog fajla
-q, --quiet, --silent ne štampaju zaglavlja sa nazivima datoteka
-v, --verbose uvijek ispisuje zaglavlja s nazivima datoteka
--help prikaži ovu pomoć i izađi
--version prikaži informacije o verziji i izađi

N može imati sufiks množitelja: b 512, k 1024, m 1024*1024.

Prijavite greške na .

Primjer 7. Ključ je pomoć


Možete vidjeti da neki glavni ključevi imaju format i jedno slovo i format cijele riječi, a neki imaju samo format cijele riječi. To je obično slučaj: često korišteni ključevi imaju skraćenicu, ali rijetki ne. Vrijednosti parametarski puna dužina Uobičajeno je da se ključevi prosljeđuju ne kao sljedeći parametar komandne linije, već uz pomoć " = značenje” neposredno iza ključa.

Četvrto, postoje neki manje rigidni, ali popularni sporazumi o tome značenje ključevi. Taster “-h” (“ H elp") obično (ali, nažalost, ne uvijek) uzrokuje izdavanje naredbi kratka referenca. Konačno, možda će biti potrebno proći na komandu parametar, a ne ključ, počevši sa “-”. Da biste to učinili, trebate koristiti tipku "-": $ glava -1 -naziv-datoteke-sa-
glava: nevažeća opcija -- f
Pokušajte `head --help" za više Detaljan opis.
$ head -1 -- -filename-with-
Prvi red datoteke -ime-datoteke-sa-

Primjer 8. Parametar koji nije ključan koji počinje sa “-”


Taster “--” (prvi “-” je znak ključa, drugi je sam ključ) obično sprečava naredbu da interpretira sve naredne opcije komandne linije kao prekidače, bez obzira da li počinju sa “-” ili ne. Tek nakon " -- " glava se složila da je -filename-with- ime datoteke.

Sinopsis

Iz navedenog je jasno da svaka naredba ima svoj mali jezik - sastoji se od onih ključeva i obaveznih i opcionih parametara koje komanda prihvata i interpretira. Da biste dobili opšti pregled mogućnosti naredbe, nudi se različita dokumentacija za Linux sinopsis- sažeti popis svih mogućih parametara komande. To izgleda otprilike ovako:

Cal [-smjy13] [godina]

Primjer 9. Sinopsis za komandu cal


Sinopsis daje formalizovan opis kako koristiti objekat (sa ovaj slučaj- kako i sa kojim parametrima pokrenuti komandu cal). Parametri su navedeni istim redosledom kojim se moraju uneti na komandnoj liniji, opcioni parametri su obično dati u uglastim zagradama, obavezni parametri uopšte bez zagrada, a ključevi su skupljeni u jedan parametar radi kompaktnosti, u kojem je svako slovo poseban ključ. Gornji primjer glasi ovako: naredba cal nema potrebne parametre, postoje (opcioni) prekidači (-s, -m, itd.) i opcioni parametar godine, kojem može prethoditi opcioni mesec (ali mesec se ne može navesti bez godine).

Odakle dolaze komande?

Nakon što je završio sa čitanjem prethodnog odeljka, pronicljivi čitalac je trebao da pomisli nešto ovako: da, pa, sa komandama i parametrima (tj. gramatikom komandne linije) smo malo shvatili, naoružajte nas sada listom svih Linux komandi ( drugim riječima, rječnik), i idemo na posao. Zašto takva lista nigdje nije objavljena? Tačnije, postoji mnogo različitih lista naredbi, a sve su očigledno nekompletne i ne konvergiraju se u svemu. Odgovor na ovo pitanje ima dva dijela.

Dio 1: komande i uslužni programi

Shell, interpreter komandi, je „ljuska“ ne samo za korisnika, već i za komande: on sam skoro da ne izvršava nijednu komandu, on ih prenosi u sistem. Njegov zadatak je da raščlani komandnu liniju, izdvoji komandu i parametre iz nje, a zatim pokrene korisnost- program čije je ime isto kao i ime komande.

Ako pogledate "iznutra" interpreter komandi, onda rad sa komandnom linijom ide otprilike ovako: korisnik unese string (naredbu), ljuska ga čita, ponekad ga konvertuje u određena pravila, dijeli rezultirajući niz na naredbu i parametre, a zatim pokreće uslužni program, prosljeđujući mu ove parametre. Uslužni program, zauzvrat, analizira parametre, ističe ključeve među njima i radi ono što je traženo, istovremeno prikazujući podatke za korisnika, nakon čega se završava. Na kraju uslužnog programa se nastavlja rad "povučenog" tumača komandi, on ponovo čita komandnu liniju, analizira je, poziva komandu... Ovo se nastavlja sve dok korisnik ne komanduje ljusci doći do kraja(koristeći naredbu za odjavu ili kontrolni znak Ctrl+D).

Međutim, neke (manje) komande i dalje izvršava ljuska sama, bez pozivanja bilo kakvih pomoćnih programa. Neke od najkorisnijih naredbi ugrađene su u bash iako su dostupne kao pomoćni programi (npr. echo). Ugrađena komanda radi na isti način, ali pošto je potrebno mnogo manje vremena da se izvrši, interpretator komandi će je izabrati ako je to moguće. U bash-u, tip naredbe se može odrediti pomoću naredbe type. Pozivaju se izvorne bash komande ugrađeno(ugrađena komanda), a za pomoćne programe ispisuje put, koji sadrži naziv direktorija koji sadrži datoteku s odgovarajućim programom i naziv ovog programa. Taster “-a” (“ a ll" naravno) uzrokuje izlaz tipa sve moguće opcije za tumačenje naredbe, a prekidač " -t " - ispisuje tip komande umjesto putanje.

$type datum
info je /bin/date
$ tip echo
echo je ugrađena školjka
$ tip -a eho
echo je ugrađena školjka
echo je /bin/echo
$type -a -t eho
ugrađeno
fajl

Primjer 10. Definicija tipa naredbe


U interpretatoru komandi postoji nekoliko izvornih naredbi. U osnovi, to su operatori programskog jezika i druga sredstva za kontrolu samog tumača. Sve naredbe koje obavljaju smislen posao za korisnika su u Linuxu predstavljene kao individualne komunalije. Evo prvog dijela odgovora na pitanje o svemu Linux komande: ima ih onoliko koliko ima programa (uslužnih programa) napisanih za Linux. Njihova lista je lista uslužnih programa instaliranih u sistemu i u različiti sistemi biće drugačije.

Drugi dio: sve ima svoj vodič

Svaki objekat sistema: svi komunalne usluge, sve demoni Linux, sve funkcije jezgra i biblioteke, većinska struktura konfiguracijske datoteke Konačno, mnogi spekulativni, ali važni koncepti moraju biti popraćeni dokumentacijom koja opisuje njihovu svrhu i kako ih koristiti. Dakle, korisnik sistema nije potreban zapamtiti sve moguće interakcije sa njom. Dosta razumeti osnovne principe njegove strukture i biti u stanju pronaći referentne informacije. Ajnštajn je o ovome rekao ovo: „Zašto pamtiti ono što uvek možeš da potražiš u priručniku?“.

Većina razne korisne informacije su unutra stranice priručnika (manpages). Svaka stranica priručnika (za sažetost - samo "priručnik") je posvećena bilo kojem objektu sistema. Da biste vidjeli man stranicu, otkucajte man objekat : $ man cal
CAL(1) Priručnik za opšte naredbe BSD CAL(1)

NAME
cal - prikazuje kalendar

SINOPSIS
cal [-smjy13] [godina]

OPIS
Cal prikazuje jednostavan kalendar. Ako argumenti nisu specificirani,
prikazuje se tekući mjesec. Opcije su sljedeće:
. . .

Primjer 11. Pregledanje stranice priručnika


"Stranica sa priručnikom" obično ima više od jedne stranice ekran. Da bi olakšao čitanje, man pokreće program za prelistavanje teksta, manje . Kontrola manjeg programa je jednostavna: stranice se okreću s razmakom, a kada se umorite od čitanja, morate pritisnuti “q” (Prekini). Također možete okretati stranice pomoću tipki. Page Up / Page Down, za prebacivanje na jedan može se koristiti linija naprijed enter ili strelica dole, i jedna linija nazad - strelica gore. Prelazak na početak i kraj teksta vrši se naredbama “g” odnosno “G” (Idi). Cijela lista ono što možete učiniti s tekstom u manjem broju prikazuje se komandom “H” (Pomoć).

Man stranica se sastoji od polja- standardni dijelovi koji opisuju objekt iz različitih uglova. Prilikom prvog čitanja priručnika, vrijedi početi od NAZIVA (kratak opis objekta) i OPIS (detaljan opis objekta, dovoljan za korištenje). Jedno od najvažnijih ručnih polja nalazi se na kraju teksta. Ako, čitajući NAZIV ili OPIS, korisnik shvati da nije pronašao ono što je tražio u priručniku, možda želi vidjeti postoji li ostalo priručnike ili druge izvore informacija na istu temu. Spisak takvih izvora nalazi se u polju VIDI TAKOĐER:

$ čovjek čovjek
. . .
S.E.ALSO
apropos(1), whatis(1), less(1), groff(1), man.conf(5).
. . .

Primjer 12. VIDI TAKOĐE polje smjernica


Polje POGLEDAJ TAKOĐER sadržalo je veze do priručnika za manje , groff (priručnik za formatiranje stranica), strukturu konfiguracijski fajl for man , kao i dvije prateće komande, whatis i apropos , koje vam pomažu da pronađete priručnik koji vam je potreban. Oba rade na bazi podataka koja se sastoji od polja NAME svih stranica priručnika u sistemu. Razlika između njih je u tome što whatis pretražuje samo imena objekata (in lijevo dijelovi polja NAME), a u vezi s tim - u cijeloj bazi podataka. Kao rezultat, ono što je dobija listu kratki opisi objekata sa imena, koji uključuju traženu riječ, dok apropos ima listu u kojoj je ova riječ spomenuto.

U sistemu može postojati nekoliko objekata razno tipa, ali sa istim imenom. Često se poklapaju, na primjer, imena sistemski pozivi(funkcije jezgra) i uslužni programi koji vam omogućuju korištenje ovih funkcija iz komandne linije. Kada se pozivamo na priručnik za sistemski objekat, uobičajeno je da se broj sekcije stavi u zagrade odmah iza naziva objekta, koji sadrži priručnik za ovaj objekat: man(1) , less(1) , passwd(5) . Po ovom formatu lako je prepoznati šta se podrazumijeva pod priručnikom.

Linux ručni sistem ima devet sekcija, od kojih svaka sadrži stranice priručnika za objekte. određeni tip. Svaki odjeljak sadrži jedan priručnik pod nazivom "uvod", koji sadrži opšti pogled a primjeri govore o kakvim su objektima povezani ovaj odjeljak. Lista sekcija sa naslovima može se dobiti komandom whatis intro.

Man podrazumevano pregledava sve sekcije i prikazuje prvi put pronađen vodič sa dato ime. Da biste vidjeli priručnik za objekat iz određenog odjeljka, morate navesti broj odjeljka kao prvi parametar naredbe man, na primjer, man 8 passwd .

Drugi izvor informacija o Linuxu i programima koji ga čine je info podsistem. Stranica priručnika, uprkos obilju linkova različitih tipova, ostaje "linearni" tekst, strukturiran samo logično. Info dokument je pravi hipertekst, u kojem ima mnogo male stranice spojeno u drvo. Svaki odjeljak info dokumenta uvijek ima sadržaj iz kojeg se može direktno ići na željeni pododjeljak odakle se uvijek možete vratiti. Dodatno, info dokument se može čitati i kao kontinuirano teksta, tako da svaki pododjeljak ima veze na prethodni i sljedeći pododjeljak. Može se pretpostaviti da detaljan vodič kako se kretati između stranica u informacijama može se pristupiti pomoću naredbe info info. Info komanda, unesena bez parametara, traži od korisnika listu svih info dokumenata instaliranih na sistemu.

Ako neki sistemski objekat nema dokumentaciju u man ili info formatu, to nije dobro. U ovom slučaju, može se nadati da jeste Prateća dokumentacija, koji, nažalost, nema standardni format, a još manje veze sa priručnicima za druge objekte u sistemu. Takva dokumentacija (kao i primjeri kako se objekt koristi) obično se postavlja u /usr/share/doc/ direktorij. object_name .

Dokumentacija je većinom napisana na čistom engleskom jeziku. Ako engleski nije maternji jezik za autora dokumentacije biće samo lakše. Tradicija pisanja na engleskom jeziku potiče od značajnog doprinosa Sjedinjenih Država razvoju računarska nauka općenito i Linux posebno. Osim toga, engleski postaje jezik međunarodne komunikacije u svim oblastima, ne samo u računarstvu. Potreba za pisanjem na jeziku koji će manje-više razumjeti većina korisnika nastaje zbog stalnog razvoja Linuxa. Ne radi se o tome da se stranica priručnika ne može prevesti, već da će se morati prevesti svaki put kada se objekat koji opisuje promeni! Na primjer, izdavanje nove verzije softverskog proizvoda praćeno je promjenom njegovih mogućnosti i karakteristika rada, a samim tim i novom verzijom dokumentacije. Onda prevod ova dokumentacija se pretvara u „pokretnu metu“, sizifov zadatak.

Međutim, neki od najažurnijih vodiča još uvijek postoje u ruskom prijevodu. Najnovije verzije takvih prijevoda na ruski su prikupljene u paketu man-pages-ru - samo instalirajte ovaj paket, a oni priručnici za koje postoji prijevod bit će prikazani u man-u prema zadanim postavkama na ruskom.

Varijable okruženja

Osim parametara proslijeđenih u komandnoj liniji, u Linuxu postoji još jedan način za izmjenu ponašanja programa - da biste to učinili, koristite varijable okruženja. Da bismo objasnili kako varijable okruženja rade, trebat će nam malo uvida u to kako procesi međusobno djeluju u Linuxu.

Izvršni program se poziva u Linuxu proces. Sistem opskrbljuje svaki pokrenuti proces nekim informacijskim prostorom, koji ovaj proces ima pravo mijenjati kako želi - ovo je okruženje(u engleskom okruženju). Pravila za korištenje ovog prostora su jednostavna: u njemu možete definirati imenovana skladišta podataka ( varijable okruženja), u koje treba napisati bilo koju informaciju (dodijeliti vrijednost varijabli okruženja), a zatim pročitati ovu informaciju (zamijeniti vrijednost varijable).

Procesi su glavni akteri u sistemu. Kada korisnik izda komande na komandnoj liniji, novi procesi za izvršavanje ovih komandi (eksterni uslužni programi, itd.) se pokreću od strane drugog procesa - istog tumača komandi koji komunicira sa korisnikom i prima komande od njega.

Stvaranje jednog procesa drugim naziva se proizvod procesa i odvija se u dvije faze: prva, a tacna kopija izvor, roditeljski proces (sistemski poziv fork()), a zatim se kopija procesa zamjenjuje novom, dijete(sistemski poziv exec()). Za nas je sada važno da ova zamjena sačuva sva svojstva originalnog procesa, a posebno okoliša.

Vratimo se radu interpretatora komandi: prilikom izvršavanja naredbe, on pokreće željeni uslužni program kao podređeni proces, čeka da se njegova operacija završi (koristeći drugi sistemski poziv, čekaj (), analizira rezultat i nastavlja s radom. Pokrenuti uslužni program prima dvije vrste informacija od nadređenog procesa (ljuske): opcije komandne linije(ne u obliku u kojem ih je unio korisnik, već nakon obrade prema pravilima interpretatora komandi, u obliku sekvencijalne liste) i okruženje, odnosno sve varijable i njihove vrijednosti koje su definirane u okruženju roditeljskog procesa.

Isti uslužni program se može koristiti isto način, ali u modificiranom okruženju - i proizvesti različite rezultate. Korisnik može eksplicitno promijeniti okruženje za pokrenuti proces dodjeljivanjem neke vrijednosti varijabli okruženja na komandnoj liniji front ime komande. Interpretator komandi, videći “=” unutar prve riječi komandne linije, zaključuje da je ovo operacija dodjeljivanja, a ne ime komande, i sjeća se kako promijeniti okruženje naredbe koja slijedi.

$ datum
Pon Jun 16 06:28:30 MSK 2008
$ LC_TIME=C datum
Pon Jun 16 18:28:51 MSK 2008

Primjer 13. Uslužni program za datum koristi varijablu okruženja LC_TIME


Varijabla okruženja LC_TIME specificira korištenje određenog jezika kada se prikazuje datum i vrijeme, a vrijednost “ C ” odgovara “standardnom sistemu” jeziku (najčešće engleskom).

Varijable koje ljuska bash definiše poslije startup, ne pripadaju okruženju i, stoga, nisu naslijeđeni podređenim procesima. Za promenljivu bash bio opkoljen, mora izvoz naredba za izvoz: $ LC_TIME=C
$ datum
Mon Jun 16 06:29:17 PM MSK 2008
$ izvoz LC_TIME=C
$ datum
Pon Jun 16 18:29:38 MSK 2008

Primjer 14. Izvoz varijabli ljuske u okolinu


Tokom korisničke sesije, shell dobija prilično bogato okruženje, kojem dodaje svoja vlastita podešavanja. Većinu predefiniranih varijabli koristi ili sama ljuska ili sistemski uslužni programi, tako da njihova promjena uzrokuje da ljuska ili pomoćni programi rade malo drugačije. Pogled na okolinu u bash moguće uz pomoć postaviti komande.

Vrijednosti bilo koje varijable u bash-u može se pristupiti po imenu: umjesto da se konstruiše $ ime_varijable ljuska će zamijeniti vrijednost ove varijable. Na primjer, da bi vidio vrijednost neke varijable, korisnik može unijeti naredbu echo $ ime_varijable .

echo $PATH
/home/methody/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/usr/games

Primjer 15. Prikaz vrijednosti varijable


Varijabla okruženja PATH je prilično izvanredna. Sadrži listu direktorija odvojenih dvotočkama. Ako naredba na komandnoj liniji nije izvorna naredba ljuske (poput cd) i nije predstavljena kao način na izvršnu datoteku (poput /bin/ls ili ./script), onda će ljuska tražiti ovu naredbu među imenima izvršnih datoteka u svim PATH direktorijima, i samo u njima. Iz tog razloga, izvršni se ne mogu pokrenuti samo po imenu ako se nalaze u trenutnom direktoriju, a trenutni direktorij nije u PATH. U takvim slučajevima možete koristiti najkraći mogući put, “ ./ ” (na primjer, pozivanje skripte ./script).

Varijable okruženja koje utječu na rad drugačije komunalije, dosta. Na primjer, varijable porodice LC_ (njihova puna lista je data komandom locale) koje određuju jezik na kojem se prikazuju dijagnostičke poruke, standarde za format datuma, valutne jedinice, brojeve, metode konverzije nizova itd. Ako neki uslužni program zahtijeva uređivanje datoteke, ova datoteka se prosljeđuje programu, putanja do koje je pohranjena u varijablu EDITOR (obično /usr/bin/vi), a ako trebate otvoriti html datoteku, mnogi uslužni programi će pozvati navedeni program u varijablu BROWSER za ovo. Konačno, neke varijable poput UID, USER ili PWD jednostavno sadrže korisne informacije koje bi se mogle dobiti na druge načine.

Nestandardni skup opcija: who am i radi isto što i who -m .

  • tutorial

Zašto i za koga je članak?

U početku je ovo bio podsjetnik za studente koji počinju raditi sa sistemima sličnim unixu. Drugim riječima, članak je namijenjen onima koji nemaju prethodnog iskustva u unix komandnoj liniji, ali iz ovog ili onog razloga žele ili trebaju naučiti kako da s njom efikasno komuniciraju.

Prepričavanja mana (dokumentacije) neće biti, a članak ni na koji način ne poništava niti zamjenjuje njihovo čitanje. Umjesto toga, govorit ću o glavnim stvarima (komandama, tehnikama i principima) koje morate shvatiti od samog početka rada u unix shell da rade efikasno i prijatno.

Članak se bavi punopravnim okruženjima sličnim unix-u, sa ljuskom sa punim mogućnostima (po mogućnosti zsh ili bash) i prilično širokim spektrom standardnih programa.

Šta je školjka?

Shell (ljuska, aka “komandna linija”, aka CLI, aka “konzola”, aka “terminal”, aka “crni prozor sa bijelim slovima”) je tekstualni interfejs za komunikaciju sa operativnim sistemom (dobro, strogo rečeno program, koji pruža takav interfejs, ali sada ta razlika nije značajna).

Općenito, rad kroz shell izgleda ovako: korisnik (tj. Vi) unese komandu sa tastature, pritisne Enter, sistem izvrši komandu, upiše rezultat izvršenja na ekran i ponovo čeka sljedeću komandu da se unese.

tipičan pogled ljuska:

Ljuska je glavni način interakcije sa svim serverskim sistemima sličnim Unixu.

Gdje se nalaze sistemi komandne linije?

Gdje vas može čekati unix ljuska, popularne opcije:
  • macOS (bash);
  • daljinski pristup serveru za rad ili za lični web projekat;
  • kućni fajl server sa daljinskim pristupom;
  • Ubuntu, PC-BSD na laptopu/desktopu - sistemi slični unixu danas se lako instaliraju i koriste.

Koje je zadatke razumno rješavati s školjkom?

Prirodni zadaci za koje je školjka prikladna, korisna i neophodna:
  • interaktivni rad u terminalu:
    • kompajliranje, izvođenje poslova kroz make;
    • poređenje tekstualnih datoteka;
    • brza ad-hoc analiza podataka (broj jedinstvenih ips-ova u logu, distribucija zapisa po satima/minutama, itd.);
    • jednokratne masovne akcije (ubiti mnoge procese; ako radite sa sistemom kontrole verzija, poništite ili razriješite gomilu datoteka);
    • dijagnostika onoga što se dešava u sistemu (semafori, brave, procesi, deskriptori, prostor na disku, itd.);
  • skriptiranje:
    • setup skripte za koje se ne možete osloniti na druge tumače - nije za početnike;
    • funkcije za prilagođavanje interaktivne ljuske (utjecaj na prompt, promjena direktorija, postavljanje varijabli okruženja) - također nije baš za početnike;
    • jednokratne skripte kao što je masovno transkodiranje datoteka;
    • makefiles.

Apsolutno prvi koraci

Početak: Prijava i odjava

Uvjerite se da znate tačno kako pokrenuti shell i kako izaći iz nje.

Ako ste na mašini na kojoj je instaliran Ubuntu, moraćete da pokrenete program Terminal. Na kraju rada možete jednostavno zatvoriti prozor.

Na MacOS-u također pokrenite Terminal.

Da biste pristupili udaljenom serveru, koristite ssh (ako imate MacOS, Ubuntu ili drugi sistem sličan unix-u lokalno) ili putty (ako imate Windows).

Ko sam ja, gde sam?

Pokrenite sljedeće naredbe:
  • ime hosta - prikazuje ime mašine (servera) na kojoj se trenutno nalazite;
  • whoami - prikazuje vašu prijavu (vaše ime u sistemu);
  • drvo -d / |manje - pseudografska slika stabla direktorija na mašini; izlaz iz skrolovanja - q ;
  • pwd - prikazuje direktorij u kojem se trenutno nalazite; na komandnoj liniji ne možete biti "tek takvi", nužno ste u nekom direktoriju (=trenutni direktorij, radni direktorij). Vjerovatno je trenutni radni direktorij prikazan u vašem promptu (promptu).
  • ls - lista datoteka u trenutnom direktoriju; ls /home - lista datoteka u navedenom direktoriju;

Historija komandi (istorija)

Važno svojstvo punopravne komandne linije je istorija komandi.

Pokrenite nekoliko naredbi: ime hosta, ls, pwd, whoami. Sada pritisnite tipku za gore. Prethodna komanda se pojavila u liniji za unos. Tasteri gore i dolje se mogu koristiti za kretanje naprijed i nazad kroz istoriju. Kada skrolujete do imena hosta, pritisnite Enter - komanda će se ponovo izvršiti.

Komande iz istorije ne samo da se mogu ponovo izvršiti, već i uređivati. Skrolujte kroz istoriju do komande ls, dodajte joj ključ -l (ispostavilo se da je ls -l , postoji razmak ispred minusa, ali ne i iza). Pritisnite Enter - modifikovana komanda će biti izvršena.

Skrolovanje kroz istoriju, uređivanje i ponovno izvršavanje komandi su najtipičnije radnje kada radite u komandnoj liniji, naviknite se na to.

kopiraj zalijepi

Komandna linija je vrlo tekstualna: komande su tekst, ulazni podaci za većinu standardnih programa je tekst, rezultat rada je najčešće i tekst.

Lijepa stvar kod teksta je to što se može kopirati i zalijepiti, a to vrijedi i za komandnu liniju.

Pokušajte pokrenuti datum +"%y-%m-%d, %A"
Jeste li ga u cijelosti unijeli rukom ili kopirali iz članka? Provjerite možete li ga kopirati, zalijepiti u terminal i pokrenuti.

Nakon što naučite kako koristiti man ", uvjerite se da možete kopirati i pokrenuti primjer komandi iz pomoći. Da biste provjerili, potražite u pomoći za program datuma za odjeljak PRIMJERI, kopirajte i pokrenite prvi dati primjer (za svaki slučaj : znak dolara nije dio naredbe, ovo je uvjetna slika prompta za unos).

Kako tačno kopirati tekst s terminala i zalijepiti ga u terminal ovisi o vašem sistemu i njegovim postavkama, tako da, nažalost, neće uspjeti dati univerzalnu instrukciju. Na Ubuntu pokušajte ovo: kopiranje je samo odabir miša, lijepljenje je srednji gumb miša. Ako ne radi, ili ako imate drugačiji sistem - potražite na internetu ili pitajte iskusnije prijatelje.

Tasteri i opcije

Prilikom istraživanja istorije komandi, već ste se susreli sa činjenicom da ima komanda ls najmanje dvije opcije. Ako ga nazovete samo tako, ispisuje jednostavnu listu:

[email protected]: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
Ako dodate prekidač -l, detaljne informacije se prikazuju za svaki fajl:

[email protected]: ~/shell-survival-quide> ls -l ukupno 332 -rw-rw-r-- 1 akira akira 198 13. veljače 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 14. veljače 22:26 shell -first-steps.md -rw-rw-r-- 1 akira akira 146226 13. veljače 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 13. veljače 11:45 shell-survival -quide.md -rw-rw-r-- 1 akira akira 146203 13. veljače 11:35 shell-survival-quide.pdf
Ovo je vrlo tipična situacija: ako se pozivu komande dodaju posebni modifikatori (prekidači, opcije, parametri), ponašanje naredbe se mijenja. Uporedite: stablo / i stablo -d / , ime hosta i ime hosta -f .

Osim toga, komande mogu uzeti nazive datoteka, direktorije ili samo tekstualne nizove kao parametre. Pokušajte:

ls -ld /home ls -l /home grep root /etc/passwd

covece

man - Pomoć o komandama i programima dostupnim na vašoj mašini, kao i sistemskim pozivima i C standardnoj biblioteci.

Pokušajte: man grep , man atoi , man chdir , man man .

Pomeranje unapred i unazad se vrši pomoću dugmadi “gore”, “dole”, “PageUp”, “PageDown”, a izlazak iz prikaza pomoći se vrši pomoću dugmeta q. Traženje određenog teksta u članku pomoći: pritisnite / (kosa crta naprijed), unesite tekst za pretragu, pritisnite Enter. Prelazak na sljedeća pojavljivanja - tipka n.

Svi članci pomoći podijeljeni su u kategorije. Najvažniji:

  • 1 - izvršni programi i komande ljuske (wc , ls , pwd itd.);
  • 2 - sistemski pozivi (fork, dup2 itd.)
  • 3 - funkcije biblioteke (printf, scanf, cos, exec).
Potrebno je naznačiti iz koje kategorije treba pokazati pomoć u slučajevima podudarnosti imena. Na primjer, man 3 printf opisuje funkciju iz standardne biblioteke C, a man 1 printf opisuje konzolni program istog imena.

Možete pogledati listu svih dostupnih članaka pomoći na mašini pomoću naredbe man -k. (tačka je također dio tima).

manje

Kada ste u malom prozoru terminala, morate pogledati vrlo dugačak tekst(sadržaj fajla, dugačak čovek, itd.), koristite posebne programe "pejdžer" (od reči stranica/stranica, odnosno paging). Najpopularniji skroler je manji, i to je ono što vam omogućava skrolovanje kada čitate mans.

Pokušajte i uporedite ponašanje:

cat /etc/bash.bashrc cat /etc/bash.bashrc |less

Možete odmah prenijeti datoteku na scroller u parametrima:

Manje /etc/bash.bashrc

Pomeranje gore i dole - dugmad "gore", "dole", "PageUp", "PageDown", izlaz - dugme q. Tražite određeni tekst: pritisnite / (kosa crta), unesite traženi tekst, pritisnite Enter. Prelazak na sljedeća pojavljivanja - tipka n. (Prepoznajete li upute o čovjeku? Nije ni čudo, manje se također koristi za prikaz pomoći.)

Prava

Skup "prava" je povezan sa bilo kojom datotekom ili direktorijumom: pravo čitanja datoteke, pravo pisanja u datoteku, pravo izvršavanja datoteke. Svi korisnici su podijeljeni u tri kategorije: vlasnik fajla, grupa vlasnika fajla, svi ostali korisnici.

Dozvole za fajlove možete pogledati pomoću ls -l. Na primjer:

> ls -l Makefile -rw-r--r-- 1 akira student 198 Feb 13 11:48 Makefile
Ovaj izlaz znači da vlasnik (akira) može čitati i pisati datoteku, grupa (učenici) može samo čitati, a svi ostali u korisniku također mogu samo čitati.

Ako dobijete poruku odbijene dozvole dok radite, to znači da nemate dovoljno dozvola za objekt s kojim želite raditi.

Pročitajte više u man chmod .

STDIN, STDOUT, cjevovodi (cijevi)

Svaki izvršni program ima 3 pridružena standardni navoj podaci: ulazni tok podataka STDIN , izlazni tok podataka STDOUT , izlazni tok greške STDERR .

Pokrenite WC program, upišite Dobar dan danas, pritisnite Enter, upišite dobar dan, pritisnite Enter, pritisnite Ctrl+d. Wc program će prikazati statistiku o broju slova, riječi i redova u vašem tekstu i izaći:

> wc dobar dan danas dobar dan 2 5 24
U ovom slučaju, dali ste programu STDIN tekst u dva reda, a primili ste tri broja u STDOUT.

Sada pokrenite komandnu glavu -n3 /etc/passwd, trebalo bi izgledati otprilike ovako:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
U ovom slučaju, glavni program nije pročitao ništa iz STDIN-a, već je napisao tri reda u STDOUT.

Razmislite o tome ovako: program je cijev u koju ulazi STDIN, a izlazi STDOUT.

Najvažnije svojstvo komandne linije Unix-a je da se "pipe" programi mogu međusobno povezati: izlaz (STDOUT) jednog programa može biti proslijeđen kao ulaz (STDIN) drugom programu.

Takva konstrukcija povezanih programa na engleskom se zove pipe (pipe), na ruskom - conveyor ili pipe.

Kombinovanje programa u cjevovod vrši se simbolom | (vertikalna traka)

Pokrenite komandnu glavu -n3 /etc/passwd |wc, dobićete nešto ovako:

> glava -n3 /etc/passwd |wc 3 3 117
Evo šta se dogodilo: glavni program je izbacio tri reda teksta u STDOUT, koji je odmah ušao u ulaz wc programa, koji je zauzvrat brojao broj znakova, riječi i redova u rezultirajućem tekstu.

Možete kombinovati onoliko programa koliko želite u cjevovod. Na primjer, možete dodati još jedan wc program u prethodni cjevovod, koji će brojati koliko je riječi i slova bilo u izlazu prvog wc-a:

> glava -n3 /etc/passwd |wc |wc 1 3 24

Kompajliranje cjevovoda (pipe-ova) je vrlo uobičajena stvar kada se radi na komandnoj liniji. Za primjer kako se to radi u praksi, pogledajte odjeljak Sastavljanje jednolinijskog cjevovoda.

I/O preusmjeravanje

Izlaz (STDOUT) programa ne samo da se može proslijediti drugom programu, već jednostavno upisati u datoteku. Ovo preusmjeravanje se vrši sa > (znakom veće od):

Datum > /tmp/today.txt
Kao rezultat izvršavanja ove naredbe, datoteka /tmp/today.txt će se pojaviti na disku. Pogledajte njegov sadržaj pomoću cat /tmp/today.txt

Ako je datoteka s istim imenom već postojala, njen stari sadržaj će biti uništen. Ako datoteka nije postojala, bit će kreirana. Direktorij u kojem se kreira datoteka mora postojati prije nego što se naredba izvrši.

Ako ne želite da prepišete datoteku, ali dodate izlaz na njen kraj, koristite >> :

Datum >> /tmp/today.txt
Provjerite šta je sada zapisano u fajlu.

Osim toga, programu možete proslijediti bilo koju datoteku umjesto STDIN-a. Pokušajte:

toalet

Šta učiniti kada nešto nije jasno

Ako naiđete na ponašanje sistema koje ne razumijete, ili želite postići određeni rezultat, ali ne znate kako, savjetujem vam da postupite sljedećim redoslijedom (usput, ovo se ne odnosi samo na ljuske):
  • što jasnije formulirajte pitanje ili zadatak - nema ništa teže od rješavanja "ne znam šta";
  • zapamtite ako ste se već susreli sa istim ili sličnim problemom - u ovom slučaju vrijedi isprobati rješenje koje je uspjelo prošli put;
  • pročitajte odgovarajuće man-ove (ako razumijete koji su man-ovi prikladni za vaš slučaj) - možete pronaći odgovarajuće primjere korištenja naredbi, potrebnih opcija ili linkova na druge komande;
  • razmislite o tome: da li je moguće malo promijeniti zadatak? - možda ćete malom promenom uslova dobiti problem koji već znate kako da rešite;
  • postavite svoje dobro definirano pitanje u tražilici - možda se odgovor može naći na Stack Overflow-u ili drugim stranicama;
Ako ništa od navedenog nije pomoglo - potražite savjet učitelja, iskusnog kolege ili prijatelja. I nemojte se plašiti postavljati "glupa" pitanja - nije sramota ne znati, šteta je ne pitati.

Ako ste riješili neki težak problem (sami, koristeći internet ili druge ljude) - zapišite svoje rješenje u slučaju da vi ili vaši drugovi ponovo imate isti problem. Možete snimati u jednostavnom tekstualni fajl, u Evernoteu, dijelite na društvenim mrežama.

Metode rada

Copy-and-paste- od man-ova, iz članaka na StackOverflow-u, itd. Komandna linija se sastoji od teksta, koristite ovo: kopirajte i koristite primjere naredbi, zapišite uspješne nalaze za memoriju, objavite ih na twitteru i blogovima.

Povucite prethodnu komandu iz istorije, dodajte drugu komandu u cevovod, pokrenite, ponovite.Cm. Pogledajte također odjeljak "Kompajliranje jednolinijskog cjevovoda".

Osnovne komande

  • promjena direktorija: cd ;
  • pregled sadržaja fajlova: mačka, manje, glava, rep;
  • manipulacija datotekama: cp , mv , rm ;
  • popis direktorija: ls , ls -l , ls -lS ;
  • struktura direktorija: stablo, stablo -d (možete prenijeti direktorij kao parametar);
  • pretraga fajla: pronađi . -ime ... ;

Analitika

  • wc , wc -l ;
  • sort -k - sortiraj po navedenom polju;
  • sort -n - numeričko sortiranje;
  • diff - uporedi fajlove;
  • grep , grep -v , grep -w , grep "\ " , grep -E - traženje teksta;
  • uniq , uniq -c - jedinstveni nizovi;
  • awk - u varijanti awk "(print $1)", da bi se ostavilo samo prvo polje svake linije, $1 se može promijeniti u $2, $3, itd.;

System Diagnostics

  • ps axuww - informacije o procesima (pokrenutim programima) koji rade na mašini;
  • vrh - interaktivni pogled na procese koji zahtijevaju najviše resursa;
  • df - iskorišteni i slobodni prostor na disku;
  • du - ukupna veličina fajlova u direktorijumu (rekurzivno sa poddirektorijumima);
  • strace , ktrace - koji sistem zove proces koji pravi;
  • lsof - koje datoteke proces koristi;
  • netstat -na , netstat -nap - koji su portovi i utičnice otvoreni na sistemu.

Možda nemate neke programe, moraju se dodatno instalirati. Osim toga, neke opcije ovih programa dostupne su samo privilegiranim korisnicima (root "y").

Masovna i poluautomatska izvedba

Prvo preskočite ovaj odjeljak, trebat će vam ove komande i konstrukcije kada dođete do jednostavnih shell skriptova.
  • test - provera uslova;
  • dok čitanje - ciklus kroz redove STDIN;
  • xargs - zamjena stringova iz STDIN-a u parametre navedenog programa;
  • seq - generiranje nizova prirodnih brojeva;
  • () - kombinuje izlaz nekoliko naredbi;
  • ; - rade jedno za drugim;
  • && - izvršiti ako se prva naredba uspješno završi;
  • || - izvršiti ako prva komanda ne uspije;
  • tee - dupli izlaz programa u STDOUT i u datoteku na disku.

miscellanea

  • datum - trenutni datum;
  • curl - preuzima dokument na navedenom URL-u i upisuje rezultat u STDOUT;
  • dodir - ažuriranje datuma izmjene datoteke;
  • ubiti - poslati signal procesu;
  • true - ne radi ništa, vraća true, korisno za organiziranje vječnih petlji;
  • sudo - izvrši naredbu kao root "a.

Sastavljanje jednolinijskog cjevovoda

Pogledajmo primjer pravog zadatka: želimo ubiti sve procese servera zadataka 6 koji se pokreću u ime trenutnog korisnika.

Korak 1.
Shvatite koji program proizvodi približno potrebne podatke, čak i ako ne u čistom obliku. Za naš zadatak vrijedi dobiti listu svih procesa u sistemu: ps axuww. Trči.

Korak 2
Gledajte očima primljene podatke, smislite filter koji će izbaciti neke od nepotrebnih podataka. Često je ovo grep ili grep -v. Koristeći taster "Gore", izvucite prethodnu komandu iz istorije, dodelite joj izmišljeni filter i pokrenite je.

Ps axuww |grep `whoami`
- samo procesi trenutnog korisnika.

Korak 3
Ponovite korak 2 dok ne dobijete čiste podatke koje želite.

"
- svi procesi sa željenim imenom (plus, možda, suvišni poput vim task-6-server.c, itd.),

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim | grep -v manje
- samo procesi sa željenim imenom

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v manje |awk "(ispis $2)"

Pids potrebnih procesa, korak 3 je završen

Korak 4
Primijenite odgovarajuću završnu obradu. Pomoću tipke "Gore" izvlačimo prethodnu naredbu iz historije i dodajemo obradu koja će dovršiti rješenje problema:

  • |wc -l za brojanje procesa;
  • >pids za pisanje pidova u fajl;
  • |xargs kill -9 kill procesa.

Zadaci za obuku

Želite vježbati nove vještine? Isprobajte sljedeće zadatke:
  • dobiti listu svih datoteka i direktorija u vašem početnom direktoriju;
  • dobiti listu svih man članaka iz kategorije 2 (sistemski pozivi);
  • izbroj koliko puta se riječ grep pojavljuje na stranici za upravljanje grep;
  • izračunajte koliko procesa se trenutno izvodi kao root;
  • pronađite koja se naredba pojavljuje u maksimalnom broju kategorija pomoći (man);
  • izbroj koliko puta se riječ var pojavljuje na stranici ya.ru.
Savjet: trebat će vam find, grep -o, awk "(print $1)", regularni izrazi u grep, curl -s.

Šta dalje studirati?

Ako počnete da volite komandnu liniju, nemojte prestati, nastavite da poboljšavate svoje veštine.

Evo nekih programa koji će vam svakako dobro doći ako živite na komandnoj liniji:

  • pronađite sa složenim opcijama
  • apropos
  • locirati
  • telnet
  • netcat
  • tcpdump
  • rsync
  • ekran
  • zgrep , zless
  • visudo
  • crontab -e
  • sendmail
Takođe je vredno naučiti skriptni jezik tokom vremena, kao što je perl ili python, ili čak oboje.

Kome to treba?

Isplati li se danas naučiti komandnu liniju i shell skripte? Definitivno se isplati. Navest ću samo nekoliko primjera zahtjeva Facebooka za kandidate koji žele da se zaposle na FB.

=====================================================

LABORATORIJSKI RAD br. 1 (vrijeme za izvođenje - 3 sata)

Predmet: „Uvod uškoljka

1. Uvod u ljusku

Shell je interpreter komandi (komandni procesor) koji djeluje kao sučelje između korisnika i Unix kernela. Solaris nudi tri glavne ljuske:

    Podrazumevana Bourneova ljuska je /sbin/sh

    C ljuska -- /bin/csh

    Korn komandni procesor-- ./bin/ksh

Pored navedenih, Solaris nudi dodatne školjke:

    J shell -- /sbin/jsh

    Ograničeno Korn l -- / usr/ bin/rsh

    T-ljuska -- /usr/bin/tcsh

    GNU Bourne Opet -- /usr/bin/bash

    Z shell - usr/bin/zsh

Izbor školjke je stvar ličnih preferencija.

2. Pokrenite komande

Svaka naredba u Unixu sastoji se od imena programa koji se pokreće (komanda), opcija (prekidača) i argumenata koji se prosljeđuju programu. Razdjelnici komandne linije su razmaci ili tabulatori.

Primjer

$ /bin/ping –t 10 192.168.2.13

argument

shell prompt

Ako putanja do izvršne datoteke nije navedena pri pokretanju programa, tada OS sekvencijalno pregledava direktorije navedene u varijabli PATH. Ako u pregledanom direktoriju postoji program sa istim imenom, tada se pokreće za izvršenje. Trenutni radni direktorij se ne traži prilikom traženja programa osim ako nije postavljen u varijablu PATH.

! Iz sigurnosnih razloga, administratoru se savjetuje da ne dodaje trenutni korisnički imenik i kućni (lični) direktorij u PATH varijablu.

Primjeri

Pokretanje programa sa punom putanjom

$ / usr/ lokalni/ bin/ moj_ program

Pokretanje programa iz višeg (roditeljskog) direktorija

$ ../ lokalni/ bin/ moj_ program

Pokretanje programa iz trenutnog direktorija

$ ./ moj_ program

3. Posebni znakovi u ljusci

Neki znakovi u ljusci imaju posebna značenja.

3.1. Obrasci generiranja imena datoteka

? (upitnik) odgovara bilo kojem pojedinačnom znaku osim prve tačke;

(uglate zagrade) definirati grupu simbola (odabira se jedan simbol iz grupe);

- (znak minus") definira raspon važećih znakova;

! (Uzvičnik) odbacuje grupu znakova koji slijede;

* (simbol zvijezde) odgovara bilo kojem broju znakova osim prve tačke.

3.2. Simboli I/O preusmjeravanja

< - preusmjeravanje unosa;

>, >> - preusmjeravanje izlaza;

2>, 2>> - preusmjeravanje poruka o greškama;

| - konvejer.

3.3. Zamjenski simboli

$varijable_nameq - varijabilna zamjena;

$(naredba) ili `naredba` - zamjena komandi;

~ - zamjena tilde.

4. Pretraga

Za brzu pretragu datoteka i direktorija koristi se naredba whereis, a za dublju naredba find (traži datoteke koje ispunjavaju navedene zahtjeve;).

5. vi uređivač teksta

Vi uređivač teksta je univerzalni uređivač teksta koji se nalazi na bilo kojem Unixu. Pored uređivanja tekstualnih datoteka, vi editor se može koristiti za uređivanje komandne linije.

Vi editor ima 3 načina rada (vidi sliku).

Ulazak u vi editor

Izlaz iz vi

Znak ”~” (tilda) na prvoj poziciji označava prazne (nepostojeće) redove datoteke.

Glavni režim je komandni režim, u kome se komande unose pritiskom na određeni niz tastera (ni na koji način se ne prikazuju na ekranu).

Kretanje kroz tekst u komandnom režimu se vrši pomoću strelica i tastera (lijevo) (dolje), (gore), (nadesno).

Neke vi komande su navedene u tabeli.

Izbrišite trenutnu liniju

Kopiraj trenutni red u međuspremnik

Pokret kursora

Stavljanje znakova označenih kursorom u bafer

Umetnite novi red na dnu

Umetnite novu liniju na vrhu

Dodaj nakon kursora

Dodati nakon trenutnog reda

Zalijepi prije kursora

Umetni ispred trenutnog reda

Zamjena znaka znakom unesenim s tastature

Zalijepite tekst iz međuspremnika

. (tačka)

Ponovite posljednju izvršenu naredbu

Otkaži posljednju komandu

Poništite sve promjene u trenutnoj liniji

Izbrišite znak iznad kursora

U načinu unosa, svi znakovi upisani na tastaturi se ubacuju u tekst.

U modu zadnjeg reda, komanda koju unesete se prikazuje u posljednjem redu ekrana.

6. Pomoć

Unix ima elektronski priručnik koji sadrži opis svrhe naredbi, njihovu sintaksu, primjere upotrebe itd. Priručnik se poziva naredbom man:

7. Osnovne naredbe ljuske

SZO– prikaz informacija o aktivnim korisnicima;

echo– izlazne poruke terminalu;

banner– izlazne poruke terminalu velikim slovima;

covece– pozivanje online sistema pomoći;

datum – izlaz tekućeg datuma;

pisati– prijenos poruka na terminal drugog korisnika;

mesg– dozvola/zabrana prikazivanja poruka od drugih korisnika;

mail– slanje/prijem pošte;

vijesti- upoznavanje sa novostima sistema;

pwd– prikazati naziv apsolutne putanje trenutnog radnog direktorija;

cd– promjena radnog imenika;

ls– prikaz informacija o sadržaju imenika;

mkdir- kreiranje imenika;

rmdir– brisanje imenika;

dodir– ažuriranje vremenske oznake datoteke;

k.č– kopiranje fajlova;

mačka- spajanje i prikaz sadržaja fajlova;

više– paginacija sadržaja datoteke.

mv – premještanje ili preimenovanje datoteke;

rm– brisanje fajla;

alias– stvaranje pseudonima;

tr– transformacija karaktera;

Izlaz- završetak tekućeg školjka-a;

tee– presretanje rezultata cevovoda;

cut – izbor polja iz niza;

grep– pretraživanje po uzorku;

pr– izlaz datoteke u standardni izlaz u navedenom formatu;

sortiraj- sortiranje;

glava– izlaz prvih redova datoteke;

rep- izlaz zadnje linije datoteke;

toalet- brojanje znakova, riječi i redova;

čitaj, echo - čitanje i prikazivanje varijabilnih vrijednosti;

test- evaluacija vrijednosti izraza;

ekspr, neka- izračunavanje aritmetičkih izraza;

8. Shell-programi

Shell vam omogućava da sačuvate niz naredbi u datoteci i zatim je izvršite. Da biste pokrenuli datoteku sa shell programom za izvršenje, trebate dodati pravo izvršenja pravima pristupa:

$ chmod +x program_file_name

Grananje u shell programima je organizirano pomoću operatora:

ako-onda-drugo

Izjave petlje:

VJEŽBE

1. Koja od sljedećih naredbi će rezultirati porukom dobrodošlice koja se prikazuje na ekranu? Šta nisu? Zašto?

$ echo zdravo

$ echo zdravo

$ echo ZDRAVO, SVIJETE

$ banner zdravo

$ BANNER ZDRAVO, SVIJET

2. Odštampajte poruku iz više redova koristeći komande echo i banner.

3. Ispišite datum u dva reda: u prvom redu - dan, mjesec, godina, u drugom redu - trenutno vrijeme, dajući izlaz sa komentarom.

4. Korištenje komande pisati, pošaljite poruku na konzolu. Šaljite poruke na više terminala u isto vrijeme.

5. Korištenje komande mesg, odredite da li su poruke dozvoljene na vašem terminalu. Onemogući poruke. Kakva će biti reakcija sistema ako vam neko pokuša poslati poruku?

6. Imenujte svoje DOM-katalog.

7. Pregledajte podstablo direktorija počevši od /export/home direktorija koristeći naredbe cd, ls i pwd.

8.. Kreirajte u svom DOM-poddirektorijumi imenika u obliku:

voćno cveće

jabuka kruška grožđe ruža ljubičica maslačak

tamno zelena

9. Biti u svom DOM-directory, kreirajte sljedeće poddirektorije koristeći jednu komandnu liniju:

A B C D

10. Biti u svom DOM-direktorij, obrišite sve poddirektorije direktorija A.

11. Biti u DOM-direktorij, kreirajte datoteku Macintosh u postojećem katalogu jabuka i nekoliko fajlova u direktorijumima mračno i zeleno. Uđite u katalog fspušta. Biti u imeniku fspušta, kopirajte sve poddirektorije fruits zajedno sa datotekama koje sadrže u posebno kreirani direktorij korpa.

12. Biti u katalogu fspušta, uklonite direktorij fruits.

13. Pročitajte datoteku .profil koristeći komande mačka i više.

14. Kreirajte u DOM- tekstualna datoteka direktorija myfile iz više redova sa naredbom mačka. Kreirajte tekstualni fajl MyFile, upisivanjem istih redova u njega. Koliko ste fajlova dobili? Zašto?

15. Pregledajte sadržaj datoteke kreirane u zadatku 2.2 myfile. Kopirajte datoteku myfile da fajl mycopy. Pogledajte sadržaj oba fajla.

16. Premjestite datoteku mycopy u katalog cveće.

17. Biti u DOM-direktorij, kreirajte link myveza po fajlu mycopy nalazi u imeniku cveće. Pogledajte fajl linka.

18. Dodajte red u datoteku mojveza. Koji od fajlova mojveza, mojkopija, mojfajl promijenio? Zašto?

19. Koja se naredba može koristiti za određivanje broja veza? Odredite broj veza za datoteke mojveza, mojkopija, mojfajl.

Izbriši fajl mycopy. Šta se dogodilo sa link fajlom? Odredite broj veza za datoteke mojveza, mojfajl.

20. Kreirajte pseudonim dir An koji ispisuje sadržaj trenutnog direktorija u proširenom formatu.

21. Odjavite se i ponovo se prijavite. Radi li pseudonim? dir? Šta treba učiniti da se alias ne bi "izgubio" između sesija?

22. Kreirajte pseudonim tačka, koji ispisuje listu datoteka u radnom direktoriju čija imena počinju tačkom.

23. Korišćenje komande dodir, kreirajte datoteke u novom direktoriju s takvim imenima da u isto vrijeme:

Predložak a* podudarno 5 fajlova;

Predložak * a podudaraju se 4 fajla;

Predložak ??.? podudarna 3 fajla;

Predložak * aa* podudaraju se 2 fajla;

Šablon??? odgovara 1 fajlu.

24. Koju komandu treba uneti da bi se uradilo sledeće:

a) prikazati imena svih fajlova koji počinju sa tačkom;

b) prikazati imena svih datoteka koje se završavaju na ".poruka";

c) ispisati nazive svih datoteka koje sadrže tu riječ "moj";

25. Promijenite sva mala slova u velika u jednoj datoj datoteci, sva velika slova u mala u drugoj. Uklonite sve duple razmake iz datoteke.

26. Kreirajte datoteku pod nazivom * . Izbrišite samo ovaj fajl. Budite oprezni kada koristite znakove za generiranje imena datoteke!

27. Kreirajte datoteku sa znakom razmaka u imenu. Kako izbrisati takav fajl?

28. Korišćenje komande mačka udvostručite sadržaj datoteke dodavanjem originalnog sadržaja na kraj iste datoteke. Idi na imenik cveće. Dodaj u fajl lista lista sadržaja direktorija cveće. Pogledajte sadržaj datoteke

29. Pokušajte čitati pomoću naredbe mačka nepostojeći fajl. Kakva je reakcija sistema? Uradite isto tako što ćete preusmjeriti poruke o grešci u datoteku myerror. Šta vidite na ekranu? View File myerror.

30. Kreirajte cjevovod da ispišete samo imena i dozvole datoteka koje se trenutno nalaze u vašem radnom direktoriju.

31. Promijenite izgrađeni cjevovod tako da lista bude pohranjena u datoteci lista Tvoja je njegova DOM-direktorijum, a prikazan je samo broj fajlova na listi.

32. Prikažite sadržaj datoteke /etc/passwd, sortirano prema polju korisničkog imena.

33. Kreirajte pseudonim loggedon, koji će prikazati abecedno poređanu listu imena korisnika koji su trenutno prijavljeni na sistem.

33. Iznesite trenutni datum na ekranu velikim slovima koristeći komande datum i banner.

34. Dodijelite varijablu JA SAM Vaše registracijsko ime. Pokreni još jednu školjka. Vidite li ovu varijablu? Šta treba učiniti da se to vidi u generisanom školjka? Promijenite vrijednost varijable JA SAM u generiranoj školjka. Izlaz se pojavio školjka. Pogledajte vrijednost ove varijable u originalu školjka. Objasnite rezultat.

35. Pišite školjka-program info, koji će od korisnika tražiti da unese ime, adresu, dan, mjesec i godinu rođenja i prikaže ove informacije obrnutim redoslijedom

36. Pišite školjka- program koji će prikazati poziv za unos broja, pohraniti uneseni broj u varijablu Y i odštampajte poruku “Y je veći od 7”, ako vrijednost Y veće od 7, i “Y jene veći nego 7” inače.

37. Napišite shell program koji prikazuje sljedeće statistike:

a) vaše ime;

b) broj argumenata sa kojima se pokreće;

c) ispisuje svaki od svojih argumenata i dužinu argumenta u znakovima;

38. Pišite školjka-program koji određuje broj argumenata na komandnoj liniji i izdaje poruku o grešci ako broj argumenata nije jednak tri, ili samih argumenata ako je njihov broj jednak tri.

39. Pišite školjka- program koji će izdati poziv za unos korisničkog identifikatora, provjeriti usklađenost identifikatora sa onima koji se koriste u sistemu i prikazati puno imeDOM-direktorij ili, u slučaju nevažećeg identifikatora, izdati poruku o grešci.

40. Napišite shell program zdravo, pružajući sljedeći odgovor na argumente komandne linije:

Argument “-d”- program će izvršiti naredbu datum;

Argument “-l”- program će prikazati sadržaj trenutnog direktorija;

    ako nema argumenata ili nevažećih argumenata na komandnoj liniji, program će prikazati pomoć o svojim opcijama.

41. Napišite program riječi, što će od korisnika tražiti da unese jednu po jednu riječ dok ne unese riječ kraj. Zapamtite sve unesene riječi. Nakon unosa riječi kraj prikazati sve unete reči na ekranu.

42. Promijenite sistemski prompt da uključuje punu stazu trenutnog radnog direktorija .

43. Napišite program virus, koji kreira izvršnu kopiju sebe s drugim imenom, a zatim se briše.

44. Napišite program virus2 , koji pretražuje trenutni direktorij za programe na komandnom jeziku i dodaje njihovom tekstu naredbu za prikaz riječi inficiran!”.

45. Napišite program virus3 , koji dodaje sopstveni kod programima na komandnom jeziku koje pronađe da zarazi druge programe.

46. ​​Napišite program virus4 modifikacijom vašeg virusa tako da se zarazni kod uklanja iz programa zaraze, kada se zarazi.

47. Napišite program antivirus, koji bi pronašao sve shell programe zaražene vašim virusom.

48. Izmijeniti razvijeni program tako da ne samo da pronalazi zaražene programe u direktoriju koji je odredio, već ih i "liječi", spremajući zaraženu verziju u novu datoteku, na čije ime je kraj . vir, i uklanjanje atributa izvršavanja iz takve datoteke.

49. Napišite program virus5 , što bi:

a) bi zarazio shell programe u trenutnom direktoriju i njegovim poddirektorijumima virusom samo ako je korisnik unio naredbu ls;

b) ponašati se kao tim ls, bez davanja ništa na terminalu svog rada.

50. Napišite virus6 program na osnovu programa virus2 -virus5 , čiji zarazni kod nije mogao biti otkriven programom koji ste vi razvili antivirus, a infekcija bi se dogodila pri bilo kojoj vrijednosti varijable PUT.

51. Napišite program supervirus, čije pokretanje inficira vaše fajlove virusom razvijenim u prethodnom zadatku, a svaki put kada se prijavite na sistem, pokušava se zaraziti fajlove vaših drugova. Program supervirus briše se nakon prvog pokretanja.

52. Napišite program superantivirus, koji otkriva i potpuno "liječi" (ako je navedena odgovarajuća opcija) sve datoteke u navedenom direktoriju i njegovim poddirektorijumima od svih razvijenih virusa.

Shell komandnog jezika (u prijevodu - shell, shell) je zapravo programski jezik vrlo visokog nivoa. Na ovom jeziku korisnik kontroliše računar. Obično, nakon prijavljivanja, počinjete interakciju sa ljuskom. Znak da je ljuska (ljuska) spremna za primanje komandi je prompter koji ona izdaje ekranu. U najjednostavnijem slučaju, ovo je jedan dolar ("$"). Shell nije neophodan i jedini komandni jezik (iako je onaj koji je standardiziran unutar POSIX-a - standarda za mobilne sisteme). Na primjer, cshell jezik je prilično popularan, postoje i kshell, bashell i drugi. Štaviše, svaki korisnik može kreirati svoj vlastiti komandni jezik. Može istovremeno raditi sa različitim komandnim jezicima na jednoj instanci operativnog sistema. shell je jedna od mnogih UNIX naredbi. To jest, skup naredbi "shell" uključuje komandu "sh" - pozivanje "shell" interpretatora. Prva "ljuska" se poziva automatski kada se prijavite i prikazuje prompter. Nakon toga, možete pozvati bilo koju komandu za izvršenje, uključujući opet samu "ljusku", koja će vam kreirati novu ljusku unutar stare. Tako, na primjer, ako pripremite datoteku "file_1" u editoru:

Echo Zdravo!

tada će to biti obična tekstualna datoteka koja sadrži komandu "echo", koja će, kada se izvrši, prikazati sve što je napisano desno od nje na ekranu. Datoteku "file_1" možete učiniti izvršnom naredbom "chmod 755 file_1". Ali to se može učiniti eksplicitnim pozivanjem naredbe "sh" ("shell"):

Sh fajl_1

Sh< file1

Datoteka se također može izvršiti u trenutnoj instanci "ljuske". Za to postoji posebna komanda "." (tačka), tj.

File_1

Pošto je UNIX sistem za više korisnika, možete čak i raditi na personalnom računaru paralelno, recimo, na 12 ekrana (prebacivanje sa ekrana na ekran ALT / funkcijska tipka), sa novim (ili istim) korisnikom na svakom ekranu sa njegova komandna školjka. Takođe možete otvoriti veliki broj prozora u X-Window grafičkom modu, a svaki prozor može imati svog korisnika sa svojom komandnom ljuskom... Osnovni element jezika ljuske je komanda.

Komandne strukture:

Naredbe ljuske obično imaju sljedeći format:

<имя команды> <флаги> <аргумент(ы)>

Na primjer:

ls -ls /usr/bin

Gdje je ls naziv naredbe za izdavanje sadržaja direktorija, -ls su zastavice ("-" je znak zastavica, l je dug format, s je veličina datoteka u blokovima), /usr/bin je direktorij za koji se naredba izvršava.Ova naredba će prikazati sadržaj direktorija /usr/bin u dugom formatu, a istovremeno će dodati informacije o veličini svake datoteke u blokovima.različitost u predstavljanju argumenata .U broj komandi koje imaju egzotične formate spadaju i "pokrenute" komande kao što su cc - pozovi C kompajler, tar - rad sa arhivama, dd - kopiraj datoteku sa transformacijom, pronađi - traži datoteke i niz drugih U pravilu , prva riječ ljuske se tretira kao naredba, dakle na komandnoj liniji

prva riječ će biti dekodirana od strane ljuske kao (konkatenirana) naredba, koja će prikazati datoteku pod nazivom "cat" (druga riječ) koja se nalazi u trenutnom direktoriju. Preusmjeravanje naredbi Standardni unos (input) - "stdin" u UNIX OS-u se izvodi sa terminalske tipkovnice, a standardni izlaz (output) - "stdout" se usmjerava na ekran terminala. Postoji također standardni fajl dijagnostičke poruke - "stderr", o čemu će biti riječi malo kasnije. Naredba koja može raditi na standardnom ulazu i izlazu naziva se FILTER. Korisnik ima pogodna sredstva za preusmjeravanje ulaza i izlaza na druge datoteke (uređaje). Simboli ">" i ">>" označavaju preusmjeravanje izlaza. ls >file_1 Komanda "ls" će prikazati datoteke u trenutnom direktoriju i staviti ih u datoteku "file_1" (umjesto da je prikazuje na ekranu). Ako je datoteka "file_1" postojala ranije, ona će biti zamijenjena novom.

Pwd >>file_1

komanda pwd će formirati potpuno kvalificirano ime trenutnog direktorija i smjestiti ga na kraj datoteke "file_1", tj. ">>" se dodaje datoteci ako nije prazan. simboli "<" и "<<" обозначают перенаправление ввода.

Wc-l

će brojati i prikazati broj redova u datoteci file_1.

Ed file_2<

će kreirati datoteku "file_2" koristeći editor, direktno sa terminala. Kraj unosa je određen znakom desno "<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!". Можно сочетать перенаправления. Так

Wc-l file_4

Wc -l >fajl_4

se izvode na isti način: broj redova datoteke "file_3" se broji i rezultat se stavlja u datoteku "file_4". Postrojenje koje kombinuje standardni izlaz jedne komande sa standardnim ulazom druge se zove PIPELINE i označava se okomitom crtom "|".

Ls | wc -l

lista datoteka u trenutnom direktoriju će biti proslijeđena na ulaz naredbe "wc", koja će prikazati broj redova u direktoriju. Cjevovod također može kombinirati više od dvije naredbe, kada su sve, eventualno osim prve i posljednje, filteri:

Cat file_1 | grep -hresult | sortiraj | mačka -b > datoteka_2

Ovaj cjevovod iz datoteke "file_1" ("cat") će odabrati sve redove koji sadrže riječ "rezultat" ("grep"), sortirati ("sort") rezultirajuće linije, a zatim broj ("cat -b") i ispisati rezultat u datoteku "file_2". Budući da su UNIX uređaji predstavljeni posebnim datotekama, oni se mogu koristiti u preusmjeravanju. Posebne datoteke se nalaze u direktoriju "/dev". Na primjer, "lp" - štampanje; "konzola" - konzola; "ttyi" - i-ti terminal; "null" - lažna (prazna) datoteka (uređaj). Tada, na primjer,

Ls > /dev/lp

će ispisati sadržaj trenutnog direktorija, a file_1< /dev/null обнулит файл "file_1".

sortiraj fajl_1 | tee /dev/lp | rep -20

U tom slučaju, fajl "file_1" će biti sortiran i odštampan, a na ekranu će biti prikazano i poslednjih 20 redova. Vratimo se na izlazno preusmjeravanje. Standardni fajlovi su numerisani:

0 - stdin, 1 - stdout 2 - stderr. Ako ne želite da imate poruku o grešci na ekranu, možete je preusmjeriti sa ekrana na datoteku koju ste naveli (ili je potpuno "baciti" tako što ćete je preusmjeriti na datoteku "praznog uređaja" - /dev/null). Na primjer, prilikom izvršavanja naredbe

Mačji fajl_1 fajl_2

koji bi trebao prikazati sadržaj datoteka "file_1" i "file_2" uzastopno na ekranu, dat će vam, na primjer, sljedeće

111111 222222 cat: f2: Nema takve datoteke ili direktorija

gdje je 111111 222222 sadržaj datoteke "file_1" i nedostaje datoteka "file_2", što je prijavljeno naredbom "cat" u standardnoj dijagnostičkoj datoteci, po defaultu, kao i standardni izlaz predstavljen ekranom. Ako ne želite takvu poruku na ekranu, možete je preusmjeriti na datoteku koju ste naveli:

Cat file_1 file_2 2>f-err

poruke o grešci će biti poslane (kao što je naznačeno preusmjeravanjem "2>") u datoteku "f-err". Usput, sve informacije možete poslati u jednu "ff" datoteku, koristeći u ovom slučaju konstrukciju

Cat file_1 file_2 >>ff 2>ff

Možete odrediti ne samo koju od standardnih datoteka želite preusmjeriti, već i na koju standardnu ​​datoteku želite preusmjeriti.

Cat file_1 file_2 2>>ff 1>&2

Ovdje se prvo "stderr" preusmjerava (u načinu dodavanja) na datoteku "ff", a zatim se standardni izlaz preusmjerava na "stderr", što je do sada datoteka "ff". Odnosno, rezultat će biti sličan prethodnom. Konstrukcija "1>&2" - znači da je pored broja standardne datoteke na koju se preusmjerava potrebno staviti "&" ispred; cijela struktura je napisana bez razmaka.<- закрывает стандартный ввод. >- zatvara standardni izlaz. komandne datoteke. Da bi se tekstualni fajl koristio kao naredba, postoji nekoliko mogućnosti. Neka uređivač kreira datoteku pod nazivom "cmd" koja sadrži jedan red sljedećeg oblika:

datum; pwd; ls

Možete pozvati ljusku kao naredbu, označenu sa "sh", i proslijediti joj "cmd" datoteku, bilo kao argument ili kao preusmjereni ulaz, tj.

$ sh cmd

$sh

Bilo koja od ovih naredbi će ispisati datum, zatim ime trenutnog direktorija, a zatim sadržaj direktorija. Zanimljivija i praktičnija opcija za rad sa batch datotekom je pretvaranje u izvršnu, tj. samo napravite naredbu, što se postiže promjenom sigurnosnog koda. Da biste to učinili, morate dozvoliti izvršavanje ove datoteke. Na primjer,

Chmod 711cmd

će napraviti sigurnosni kod "rwx__x__x". Zatim jednostavan poziv

će rezultirati izvršavanjem iste tri komande. Rezultat će biti isti ako je datoteka sa sadržajem

datum; pwd; ls

je predstavljen kao: datum pwd ls jer je prijelom reda također graničnik u nizu naredbi. Dakle, izvršne datoteke mogu biti ne samo datoteke dobijene kao rezultat kompilacije i asemblera, već i datoteke napisane u jeziku ljuske. Izvršavaju se u načinu interpretacije koristeći shell interpreter.

Otklanjanje grešaka u paketnim datotekama

SHELL koristi dva mehanizma za otklanjanje grešaka u batch fajlovima. Prvi: set -v ispisuje redove batch datoteke kako se čitaju. Ovaj način se koristi kada se traže sintaksičke greške. Da biste ga koristili, ne morate mijenjati batch datoteku, na primjer: sh -v proc... gdje je proc ime batch datoteke. Prekidač -v se može koristiti zajedno sa prekidačem -n kako bi se spriječilo izvršavanje sljedećih naredbi (naredba set -n blokira terminal dok se ne unese EOF zastavica). Naredba set -x ispisuje komande kako se izvrše, pri čemu se programske linije ispisuju na terminal i njihove vrijednosti zamjenjuju varijable. Da biste onemogućili prekidače -x i -v, možete koristiti naredbu set - i za postavljanje - dodijeliti odgovarajuću vrijednost varijabli makroa. OKRUŽENJE Ljuske (VIJABLE I PARAMETRI) Možete pisati batch fajlove na jeziku ljuske i učiniti ih izvršnim pomoću naredbe "chmod". Nakon toga, one se ne razlikuju od ostalih naredbi UNIX OS-a.

Shell varijable

Ime varijable ljuske je niz slova, brojeva i donjih crta na početku slova. Vrijednost varijable ljuske je niz znakova. Činjenica da postoje samo dva tipa podataka u ljusci: niz znakova i tekstualna datoteka, s jedne strane, olakšava uključivanje krajnjih korisnika u programiranje koji nikada prije nisu programirali, a s druge strane uzrokuje interni protest među mnogim programerima koji su navikli na veću raznolikost i veću fleksibilnost jezičkih sredstava. Međutim, zanimljivo je promatrati kako programeri visoke klase, savladavši "pravila igre" ljuske, u njoj pišu programe višestruko brže nego u C-u, ali, što je posebno zanimljivo, u nekim slučajevima ti programi funkcionišu čak i brže od onih implementiranih u C. Ime varijable je slično tradicionalnom pojmu identifikatora, tj. ime može biti niz slova, brojeva i donjih crta, koji počinje slovom ili donjom crtom. Operator dodjeljivanja "=" može se koristiti za dodjelu vrijednosti varijablama.

Var_1=13 - "13" nije broj, već niz od dvije cifre. var_2="UNIX OS" - Ovdje su potrebni dvostruki navodnici (" ") jer postoji razmak u nizu.

Postoje i drugi načini za dodjelu vrijednosti varijablama ljuske. Tako, na primjer, unos

DAT=`datum`

uzrokuje da se naredba "date" izvrši prva (zadnji navodnici označavaju da se priložena naredba mora izvršiti prva), a rezultat njenog izvršenja, umjesto da bude ispisan na standardnom izlazu, dodjeljuje se kao vrijednost varijable, u ovaj slučaj "DAT". Također možete dodijeliti vrijednost varijabli pomoću naredbe "čitaj", koja omogućava da se vrijednost varijable primi sa (tastature) prikaza u dijalogu. Obično komandi "read" u batch fajlu prethodi komanda "echo", koja vam omogućava da unapred odštampate neku vrstu poruke na ekranu. Na primjer:

echo -n "Unesite trocifreni broj:" pročitajte x

Prilikom izvršavanja ovog fragmenta batch datoteke, nakon prikaza poruke

Unesite trocifreni broj:

tumač će stati i čekati da se unese vrijednost sa tastature. Ako unesete, recimo, "753" onda će to postati vrijednost varijable "x". Jedna naredba "čitaj" može čitati (dodijeliti) vrijednosti za nekoliko varijabli odjednom. Ako u "čitanom" ima više varijabli nego što je uneseno (odvojenih razmacima), preostalim se dodjeljuje prazan niz. Ako u naredbi "čitaj" ima više proslijeđenih vrijednosti nego varijabli, dodatne se zanemaruju. Kada pristupate varijabli ljuske, ispred imena morate staviti simbol "$". Dakle, komande echo $var_2 echo var_2 će biti prikazane na ekranu

UNIX OS var_2 Izbjegavanje

Pogledajmo bliže tehnike bijega koje se koriste u ljusci. Izlazni znakovi su dvostruki navodniki (" "), jednostruki navodniki (" ") i obrnute kose crte (\). Njihovo djelovanje je očito iz primjera: Možete napisati nekoliko zadataka u jednom redu.

X=22 y=33 z=$x A="$x" B="$x" C=\$x D="$x + $y + $z" E="$x + $y + $z " F=$x\ +\ $y\ +\ $z

(dodjela G=$x+$y ne bi bila izvršena zbog razmaka) Zatim

eho A = $A B = $B C = $C eho D = $D E = $E F = $F procjena eho evaluacije A = $A procjena eho evaluacije B = $B procjena eho evaluacije C = $C

Prikazuje se na ekranu

A = 22 B = $x C = $x D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22 procijenjeno A = 22 procijenjeno B = 22 procijenjeno C = 22

Navedimo još nekoliko primjera vezanih za izbjegavanje prijeloma reda. Neka se varijabli "string" dodijeli vrijednost "niz" 2x3: abc def Imajte na umu da da biste izbjegli dodjeljivanje dodatnih razmaka, drugi red niza počinje od prve pozicije sljedećeg reda: string="abc def" Zatim postoji postoje tri načina za pisanje varijable u naredbi "echo" echo $string echo "$string" echo "$string" će dati tri različita rezultata: abc def $string abc def i niz naredbi echo "str_1 str_2" > file_1 echo "str_1 str_2" > file_2 cat file_1 file_2 će dati uzastopne identične datoteke file_1 i file_2: str_1 str_2 str_1 str_2 Imajte na umu da obrnuta kosa crta (\) ne samo da izbjegava znak koji slijedi nakon nje, što vam omogućava da koristite Posebni simboli baš kao znakovi koji predstavljaju sebe (može pobjeći sam od sebe - \\ ), ali u batch datoteci, obrnuta kosa crta vam omogućava da spojite redove u jedan (pobjegne kraj reda). Na primjer, primjer komandne linije dat ranije:

Cat file_1 | grep -hresult | sortiraj | mačka -b > datoteka_2

može se napisati u batch fajlu, recimo kao

Cat file_1 | grep -h \rezultat | sortiraj | mačka -b > datoteka_2

Usput, simbol cevovoda takođe daje efekat nastavka komandne linije. U ovom slučaju to može dati ljepši rezultat, na primjer:

Cat file_1 | grep -hresult | sortiraj | mačka -b > datoteka_2

Manipuliranje varijablama ljuske Iako su varijable ljuske u opšti slučaj percipiraju se kao nizovi, tj. "35" nije broj, već niz od dva znaka "3" i "5", u nekim slučajevima se mogu različito tumačiti, na primjer, kao cijeli brojevi. Komanda "expr" ima različite mogućnosti. Ilustrirajmo neke primjerima: Izvršavanje batch datoteke:

X=7 y=2 a=`expr $x + $y`; echo a=$a a=`expr $a + 1` ; echo a=$a b=`expr $y - $x` ; echo b=$b c=`expr $x "*" $y` ; echo c=$c d=`expr $x / $y`; echo d=$d e=`expr $x % $y`; echo e=$e

će se prikazati na ekranu

A=9 a=10 b=-5 c=14 d=3 e=1

Operacija množenja ("*") mora se izbjeći, jer se u ljusci ova ikona percipira kao poseban znak, što znači da se bilo koji niz znakova može zamijeniti za ovo mjesto. Uz naredbu "expr", moguće su ne samo (cjelobrojne) aritmetičke operacije, već i operacije sa nizovima:

A=`expr "cocktail" : "cock"` ; echo $A B=`expr "koktel" : "rep"` ; echo $B C=`expr "cocktail" : "cook"` ; echo $C D=`expr "cock" : "cocktail"` ; echo $D

Na ekranu će biti prikazani brojevi koji pokazuju broj odgovarajućih znakova u nizovima (od početka). Drugi red ne može biti duži od prvog:

4 0 0 0

Izvoz varijabli UNIX ima koncept procesa. Proces se javlja kada se naredba pokrene za izvršenje. Na primjer, kada kucate "r" na tastaturi ", proces "p" je pokrenut. Zauzvrat, "p" može pokrenuti druge procese. Pretpostavimo da "p" poziva "p1" i "p2", koji sekvencijalno pokreću odgovarajuće procese. Svaki proces ima svoje okruženje - a skup varijabli koje su mu dostupne Na primjer, prije pokretanja "p" već je postojalo okruženje u kojem su neke varijable već definirane. Pokretanje "p" stvara novo okruženje, u kojem će biti "p1" i "p2". Varijable su lokalni unutar procesa u kojem su deklarirani, tj. gdje su im dodijeljene vrijednosti. Da bi bili dostupni drugim pokrenutim procesima, moraju se eksplicitno proslijediti. Za to se koristi ugrađena naredba "export". .

Parametri

Parametri se mogu prenijeti u batch datoteku. Shell koristi pozicione parametre (tj. redoslijed u kojem se pojavljuju je značajan). U komandnoj datoteci, varijable koje odgovaraju parametrima (slično varijablama ljuske) počinju sa znakom "$", nakon čega slijedi jedna od cifara od 0 do 9: Neka se "examp-1" pozove sa "cock" i "rep" parametri. Ovi parametri ulaze u novo okruženje pod standardnim nazivima "1" i "2". (Standardna) varijabla pod nazivom "0" će sadržavati ime pozvane kalkulacije. Prilikom pristupa parametrima, znak dolara "$" se stavlja ispred cifre (kao kod pristupa varijablama): $0 odgovara imenu datog batch fajla; $1 prvi parametar; $2 je drugi parametar, i tako dalje. Pošto je broj varijabli kojima se parametri mogu proslijediti ograničen na jednu cifru, tj. 9. ("0", kao što je već napomenuto ima posebno značenje), zatim za prenos više parametara, koristi se posebna naredba "shift". Komanda "set" daje poseban pristup parametrima. Na primjer, fragment

Postavite b sa eho prvi=$1 drugi=$2 treći=$3

će se prikazati na ekranu

Prvi=a Drugi=b Treći=c

one. naredba "set" postavlja vrijednosti parametara. Ovo je vrlo zgodno. Na primjer, komanda "date" prikazuje trenutni datum, recimo "Mon May 01 12:15:10 2000", koji se sastoji od pet riječi, a zatim

Postavite `datum` echo $1 $3 $5

će se prikazati na ekranu

Pon 01 2000

Naredba "set" vam također omogućava kontrolu izvršavanja programa, na primjer: set -v ispisuje linije koje ljuska može pročitati terminalu. set +v poništava prethodni način rada. set -x ispisuje komande terminalu prije izvršenja. set +x poništava prethodni način rada. Komanda "set" bez parametara ispisuje stanje softverskog okruženja na terminal.

Zamjene tumača ljuske

Prije direktnog tumačenja i izvršavanja naredbi sadržanih u batch datotekama, ljuska se izvršava različite vrste zamjene: 1. ZAMJENA REZULTATA. Sve naredbe zatvorene u navodnicima se izvršavaju i rezultat se zamjenjuje na njihovo mjesto. 2. ZAMJENA VRIJEDNOSTI PARAMETARA I Varijabli. To jest, riječi koje počinju s "$" zamjenjuju se odgovarajućim vrijednostima varijabli i parametara. 3. INTERPRETACIJA GAPS-a. Izbjegnuti razmaci se zanemaruju. 4. GENERACIJA IMENA DATOTEKA. Riječi se provjeravaju na prisustvo posebnih znakova ("*", "?", "") u njima i izvode se odgovarajuće generacije. Softversko okruženje Svaki proces ima okruženje u kojem se izvodi. Shell koristi brojne varijable okruženja. Ako upišete naredbu "set" bez parametara, na ekranu će se prikazati informacije o brojnim standardnim varijablama kreiranim prilikom prijave (i proslijeđenim na sve vaše nove procese "naslijeđem"), kao i o varijablama koje su kreirali i izvezli vaši procesi . Specifična vrsta i sadržaj datih informacija u velikoj mjeri zavisi od čega UNIX verzija koristi i kako je sistem instaliran.

Rezultat izvršavanja naredbe set bez parametara (nije dovršeno):

HOME=/root PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11: IFS= LOGNAME=sae MAIL=/var/spool/mail/sae PWD=/home/ sae/STUDY/SHELL PS1=$(PWD):" " PS2=> SHELL=/bin/bash

Hajde da prokomentarišemo vrednosti varijabli. HOME=/root je ime matičnog direktorija u kojem se korisnik nalazi nakon prijave. To jest, ako ispravno unesete korisničko ime i lozinku, bit ću u direktoriju "/root". PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - ova varijabla postavlja redoslijed datoteka koje "ljuska" traži naredbu. Nazivi datoteka su ovdje odvojeni dvotočkama. Redoslijed pretraživanja odgovara redoslijedu imena u stazi. Ali u početku se pretraga odvija među takozvanim ugrađenim komandama. Ugrađene komande uključuju najčešće korišćene komande, kao što su "echo", "cd", "pwd", "date". Nakon toga, sistem traži direktorij "/bin", koji može sadržavati komande "sh", "cp", "mv", "ls" itd. Zatim direktorij "/usr/bin" sa komandama "cat", "cc", "expr", "nroff", "man" i mnogim drugim. Nadalje, pretraga se odvija u trenutnom direktoriju ("".", ili druga oznaka "prazno", tj. ""), gdje se najvjerovatnije nalaze komande koje ste napisali. Nakon što unesete komandnu liniju i pritisnete "ljuska" (nakon što izvrši potrebne zamjene) prepoznaje ime koje odgovara komandi i traži ga u direktorijima navedenim u PATH. Ako je naredba postavljena izvan ovih direktorija, neće biti pronađena. Ako postoji više naredbi sa isto ime, tada će biti pozvan onaj koji se nalazi u direktoriju koji je prvi pregledan. PATH, kao i druge varijable, može se lako promijeniti dodavanjem, preuređivanjem ili isključivanjem direktorija. IFS= (Internal Field Separator) navodi znakove koji se koriste za razdvajanje riječi (polja). To su "space", "tab" i "line feed", tako da se ovdje ništa ne vidi lijevo od zadatka i dva reda su zauzeta. LOGNAME=root - ime za prijavu ("korisničko ime"). MAIL=/var/spool/mail/root je ime datoteke koja prima (e-mail) poštu. PWD=/root - ime trenutnog direktorija PS1=$(PWD):" " - tip promtera. U ovom slučaju, prompter će prikazati ime trenutnog direktorija, dvotočku i razmak. To jest, "/root:" će biti ovdje. PS2=> - ovaj prompter (ovdje ">") se koristi kao pozivnica za nastavak kucanja (u sljedećem redu) nedovršene komande. Na primjer, otkucajte početnu zagradu "(" i nakon pritiska v sljedeći red vidjet ćete ovaj sufler. Ako još ne znate šta dalje, upišite zagradu ")" i ona će nestati. SHELL=/bin/sh - Ova varijabla specificira ljusku koju korisnik koristi. U ovom slučaju se koristi standardna školjka ("sh"). Početno okruženje se automatski postavlja prilikom prijave koristeći datoteke kao što su "/etc/rc" i "/etc/.profile". Jedan od načina da jednostavno promijenite okruženje (npr. put za pretraživanje komandi, prikaz promptera, prikaz ljuske, boja ekrana, itd.) je postavljanje ovih informacija u vaš početni direktorij u specijaliziranu datoteku ".profile" ($(HOME)/. profil ) dodjeljivanjem željene vrijednosti varijable okruženja. Odnosno, pozovite ovu datoteku u editor i napišite šta god želite). Zatim, svaki put kada se prijavite, ova datoteka će se automatski izvršiti i postaviti novo okruženje. Ovaj fajl MORA biti lociran u vašem HOME imenik(direktorij za prijavu). Imajte na umu da imena datoteka koja počinju tačkom općenito imaju poseban status. Dakle, oni se ne prikazuju na ekranu jednostavnom komandom "ls" - ovu komandu morate pozvati sa zastavicom "-a". Usput, oni se ne uništavaju neselektivno naredbom "rm *". Sam tumač ljuske automatski dodeljuje vrednosti sledećim varijablama (parametrima): ? vrijednost vraćena posljednjom naredbom; $ broj procesa; ! broj pozadinskog procesa;

  1. broj pozicionih parametara proslijeđenih ljusci;
  • lista parametara kao jedna linija;

@ lista opcija kao kolekcija riječi; - zastave prešle na granatu. Kada pristupate ovim varijablama (to jest, kada ih koristite u batch fajlu - shell programu), trebali biste staviti "$" ispred. Važnu ulogu u kreiranju jedinstvenih datoteka igra posebna varijabla "$$", čija vrijednost odgovara broju procesa koji obavlja ovaj proračun. Svaki novi proračun koji izvrši računar pokreće jedan ili više procesa koji automatski primaju brojeve po redu. Stoga, korištenjem broja procesa kao naziva datoteke, možete biti sigurni da će svaki novi fajlće imati novo ime (neće biti upisano umjesto postojećeg). Prednost je i glavni nedostatak ovakvog načina imenovanja datoteka. Nije poznato koja će imena biti dodijeljena datotekama. A ako je u okviru ovog procesa moguće pronaći datoteku "bez traženja", tj. pozivajući se na nju koristeći $$, tada se takve datoteke mogu lako izgubiti. Ovo stvara dodatne probleme prilikom otklanjanja grešaka u programima. Pozivanje tumača Nakon što se korisnik prijavi na sistem (koristeći login naredbu), poziva se SHELL tumač jezika. Ako korisnički direktorij za prijavu sadrži .profile datoteku, onda prije nego što se barem jedna naredba primi sa terminala, tumač izvršava ovu datoteku (pretpostavlja se da datoteka .profile sadrži komande). Sljedeći prekidači se mogu specificirati tokom poziva: -c string Komande se čitaju iz navedenog niza. -s Naredbe se čitaju sa standardnog ulaza. Poruke tumača se upisuju u standardnu ​​dijagnostičku datoteku. -i Interaktivni način rada. Ako je prvi znak parametra "0" -, tada se naredbe čitaju iz .profile datoteke.

STRUKTURE PROGRAMA===

Kao iu svakom programskom jeziku, može biti komentara u tekstu na jeziku ljuske. Za to se koristi simbol "#". Sve što se nalazi u liniji (u batch fajlu) lijevo od ovog simbola interpretator percipira kao komentar. Na primjer,

# Ovo je komentar.

Kao u svakom proceduralni jezik programiranje u jeziku ljuske ima operatore. Brojni operatori vam omogućavaju da kontrolišete redosled izvršavanja naredbi. Kod ovakvih operatora često je potrebno provjeriti uvjet, koji određuje smjer nastavka proračuna.

test(") naredba

Test komanda provjerava da li je ispunjen određeni uvjet. Koristeći ovu (ugrađenu) komandu, formiraju se naredbe za odabir jezika ljuske i naredbe petlje. Dva moguća formata komandi:

test stanje

[ stanje ]

koristićemo drugu opciju, tj. umjesto da napišemo riječ "test" ispred uslova, uslov ćemo staviti u zagrade, što je programerima poznatije. U stvari, ljuska će prepoznati ovu naredbu iz početne zagrade "[" kao riječ koja odgovara komandi "test". Mora postojati razmak između zagrada i uslova sadržanih u njima. Također moraju postojati razmaci između vrijednosti i znaka za upoređivanje ili operacije. Shell koristi uslove različitih "tipova". UVJETI PROVJERE DATOTEKA: -f datoteka "fajl" je normalna datoteka; -d datoteka datoteka "datoteka" - direktorij; -c datoteka "datoteka" je posebna datoteka; -r datoteka ima dozvolu za čitanje datoteke "fajl"; -w datoteka ima dozvolu za pisanje u datoteku "fajl"; -s fajl "fajl" nije prazan.

UVJETI PROVJERE NIZA: str1 = str2 nizovi "str1" i "str2" odgovaraju; str1 != str2 stringovi "str1" i "str2" se ne podudaraju; -n str1 string "str1" postoji (nije prazan); -z str1 string "str1" ne postoji (prazan). Primjeri.

x="ko je ko"; izvoz x; [ "ko je ko" = "$x" ]; echo $? 0 x=abc ; izvoz x ; [ abc = "$x" ] ; echo $? 0 x=abc ; izvoz x ; [ -n "$x" ] ; echo $? 0 x="" ; izvoz x ; [ -n "$x" ] ; echo $? jedan

Osim toga, postoje dvije standardne vrijednosti uvjeta koje se mogu koristiti umjesto uvjeta (nema potrebe za zagradama). USLOVI KOMPOREĐENJA CIJELIH: x -eq y "x" je jednako "y", x -ne y "x" nije jednako "y", x -gt y "x" je veće od "y", x -ge y "x" je veće ili jednako "y", x -lt y "x" je manje od "y", x -le y "x" je manje ili jednako "y". SLOŽENI UVJETI: Implementirano korištenjem tipičnih logičkih operacija: ! (ne) invertira vrijednost izlaznog koda. -o (ili) odgovara logičkom "ILI". -a (i) odgovara logičkom I.

Uslovna izjava "ako".

Općenito, naredba "ako" ima strukturu

ako uslov onda lista

Ovdje je "elif" skraćenica za "else if" i može se koristiti zajedno sa punim, tj. Ugniježđenje proizvoljnog broja "if" naredbi (kao i drugih izjava) je dozvoljeno. Svakako da bi "popis" u svakom slučaju trebao biti smislen i prihvatljiv u datom kontekstu. Najviše skraćena struktura ovog operatora

Ako je uslov onda navedite fi

ako je uslov ispunjen (po pravilu je to onaj ko je primio šifru završetka "0", tada se izvršava "lista", inače se preskače. Primjeri. Neka se napiše "if-1"

Ako [ $1 -gt $2 ]

zatim pwd else echo $0: Zdravo!

Tada će poziv if-1 12 11 dati /home/sae/STUDY/SHELL i if-1 12 13 dati if-1: Zdravo!

Pozovi operatera ("slučaj")

Naredba za odabir "slučaj" ima strukturu:

Uvučena kutija

obrazac) lista komandi;; obrazac) lista komandi;; ... obrazac) lista naredbi;;

Ovdje su "case", "in" i "esac" pomoćne riječi. "String" (može biti jedan znak) se poredi sa "uzorkom". Zatim se izvršava "lista komandi" odabranog reda. Neobično gledajte na kraj linija za odabir ";;", ali ovdje napišite ";" to bi bila greška. Za svaku alternativu može se izvršiti nekoliko naredbi. Ako su ove komande napisane u jednom redu, onda se karakteriše ";" će se koristiti kao separator komandi. Tipično, zadnja linija odabira ima uzorak "*", što znači "bilo koju vrijednost" u strukturi "case". Ovaj niz se bira ako se vrijednost varijable (ovdje $z) ne poklapa ni sa jednim od prethodno napisanih obrazaca ograničenih ")" zagradama. Vrijednosti se traže redoslijedom kojim su napisane.

Naredba petlje nabrajanja ("for")

Operator petlje "for" ima strukturu:

Za ime

do lista urađenih naredbi gdje je "for" funkcijska riječ koja definira tip ciklusa, "do" i "done" su uslužne riječi koje ističu tijelo ciklusa. Neka naredba "lsort" bude predstavljena batch datotekom

Za ja u file_1 file_2 file_3 uradite proc_sort $i done

U ovom primjeru, ime "i" igra ulogu parametra petlje. Ovo ime se može smatrati varijablom ljuske, kojoj se dodjeljuju navedene vrijednosti (i=file_1, i=file_2, i=file_3) u nizu, a naredba "proc_sort" se izvršava u petlji. Često se koristi oblik "za i u *", što znači "za sve datoteke u trenutnom direktoriju". Neka "proc_sort" zauzvrat bude predstavljen batch fajlom

Mačka $1 | sortiraj | tee /dev/lp > $(1)_sorted

one. navedeni fajlovi su sekvencijalno sortirani, rezultati sortiranja se štampaju ("/dev/lp") i šalju u fajlove file_1_sorted file_2_sorted i file_3_sorted

Naredba petlje s istinitim uvjetom ("while")

Struktura "while", koja takođe obezbeđuje proračune, je poželjnija kada tačna lista vrednosti parametara nije poznata unapred ili se ova lista mora dobiti kao rezultat izračunavanja u petlji. Naredba petlje "while" ima strukturu:

dok stanje

do lista izvršenih naredbi gdje je "while" funkcijska riječ koja definira tip petlje sa istinitim uvjetom. Lista naredbi u tijelu petlje (između "do" i "done") se ponavlja sve dok uvjet nije istinit (tj. izlazni kod posljednje komande u tijelu petlje nije "0") ili dok se petlja ne prekine iz unutra posebnim komandama ("break", "continue" ili "exit"). Kada prvi put uđete u petlju, uslov mora biti ispunjen. Komanda "break [n]" vam omogućava da izađete iz petlje. Ako je "n" odsutan, onda je to ekvivalentno "prekidi 1". "n" označava broj ugniježđenih petlji za izlaz iz, na primjer, "break 3" - izlaz iz tri ugniježđene petlje. Za razliku od naredbe "break", komanda "continue [n]" samo prekida izvršenje trenutne petlje i vraća se na START petlje. Može biti i sa parametrom. Na primjer, "nastavi 2" znači izlaz na početak druge (ako se računa od dubine) ugniježđene petlje. Komanda "exit [n]" vam omogućava da potpuno izađete iz procedure s povratnim kodom "0" ili "n" (ako je naveden parametar "n"). Ova naredba se može koristiti ne samo u petljama. Čak iu linearnom nizu instrukcija, može biti korisno u otklanjanju grešaka da se zaustavi izvršenje (trenutnog) proračuna u datoj tački.

Naredba petlje s lažnim uvjetom ("do")

Operator petlje "do" ima strukturu:

do stanja

do lista izvršenih naredbi gdje je "do" funkcijska riječ koja definira tip petlje s lažnim uvjetom. Lista naredbi u tijelu petlje (između "do" i "done") se ponavlja sve dok uvjet ne bude netačan ili dok se petlja ne prekine iznutra posebnim naredbama ("break", "continue" ili "exit") . Kada prvi put uđete u petlju, uvjet ne smije biti istinit. Razlika u odnosu na operator "while" je u tome što se uvjet petlje provjerava da li je netačan (za izlazni kod koji nije nula za posljednju naredbu tijela petlje) se provjerava NAKON svakog (uključujući prvo!) izvršavanja naredbi iz petlje. tijelo petlje. Primjer.

sve dok ne radi

pročitaj x ako [ $x = 5 ] onda dovoljno eho; break else echo još malo fi

Evo programa sa beskonačna petljačeka da se unesu riječi (ponavljajući frazu "još malo" na ekranu) dok se ne unese "5". Nakon toga se izdaje "dovoljno" i naredba "break" prekida izvršavanje petlje.

Prazna izjava

Prazan izraz ima format

:

Ne radeći ništa. Vraća vrijednost "0".".

Shell funkcije

Funkcija vam omogućava da pripremite listu naredbi ljuske za naknadno izvršavanje. Opis funkcije izgleda ovako:

Ime() (lista komandi)

nakon čega dolazi do poziva funkcije po imenu. Kada se funkcija izvrši, ne kreira se novi proces. Izvodi se u okruženju odgovarajućeg procesa. Argumenti funkcije postaju njeni pozicioni parametri; ime funkcije je njen null parametar. Izvršenje funkcije možete prekinuti naredbom "return [n]", gdje je (opcionalno) "n" povratni kod.

Obrada prekida ("zamka")

Ponekad je potrebno zaštititi izvršavanje programa od prekida. Najčešći prekidi su sljedeći, koji odgovaraju signalima: 0 izlaz iz interpretatora, 1 otpuštanje (prekidanje veze udaljenog pretplatnika), 2 , 9 ubiti (nije presretnuto), 15 završiti izvršenje. Za zaštitu od prekida postoji naredba "trap" koja ima format:

Trap signale "list komandi".

Ukoliko dođe do prekida u sistemu, čiji su signali navedeni sa razmakom u "signali", tada će se izvršiti "lista komandi", nakon čega (ukoliko komanda "izlaz" nije izvršena u listi komandi) kontrola će se vratiti na tačku prekida i izvršavanje batch datoteke će se nastaviti. Na primjer, ako želite izbrisati datoteke u "/tmp" prije nego što prekinete izvršavanje neke batch datoteke, onda se to može učiniti pomoću naredbe "trap":

Trap "rm /tmp/* ; izlaz 1" 1 2 15

koji prethodi drugim komandama u datoteci. Ovdje će se, nakon brisanja fajlova, izvršiti "izlaz" iz batch fajla.

  • tutorial

Zašto i za koga je članak?

U početku je ovo bio podsjetnik za studente koji počinju raditi sa sistemima sličnim unixu. Drugim riječima, članak je namijenjen onima koji nemaju prethodnog iskustva u unix komandnoj liniji, ali iz ovog ili onog razloga žele ili trebaju naučiti kako da s njom efikasno komuniciraju.

Prepričavanja mana (dokumentacije) neće biti, a članak ni na koji način ne poništava niti zamjenjuje njihovo čitanje. Umjesto toga, govorit ću o glavnim stvarima (komandama, trikovima i principima) koje morate razumjeti od samog početka rada u unix shell-u da biste radili efikasno i ugodno.

Članak se bavi punopravnim okruženjima sličnim unix-u, sa ljuskom sa punim mogućnostima (po mogućnosti zsh ili bash) i prilično širokim spektrom standardnih programa.

Šta je školjka?

Shell (ljuska, aka “komandna linija”, aka CLI, aka “konzola”, aka “terminal”, aka “crni prozor sa bijelim slovima”) je tekstualni interfejs za komunikaciju sa operativnim sistemom (dobro, strogo rečeno program, koji pruža takav interfejs, ali sada ta razlika nije značajna).

Općenito, rad kroz shell izgleda ovako: korisnik (tj. Vi) unese komandu sa tastature, pritisne Enter, sistem izvrši komandu, upiše rezultat izvršenja na ekran i ponovo čeka sljedeću komandu da se unese.

Tipičan izgled školjke:

Ljuska je glavni način interakcije sa svim serverskim sistemima sličnim Unixu.

Gdje se nalaze sistemi komandne linije?

Gdje vas može čekati unix ljuska, popularne opcije:
  • macOS (bash);
  • daljinski pristup serveru za rad ili za lični web projekat;
  • kućni fajl server sa daljinskim pristupom;
  • Ubuntu, PC-BSD na laptopu/desktopu - Sistemi slični Unixu danas se lako instaliraju i koriste.

Koje je zadatke razumno rješavati s školjkom?

Prirodni zadaci za koje je školjka prikladna, korisna i neophodna:
  • interaktivni rad u terminalu:
    • kompajliranje, izvođenje poslova kroz make;
    • poređenje tekstualnih datoteka;
    • brza ad-hoc analiza podataka (broj jedinstvenih ips-ova u logu, distribucija zapisa po satima/minutama, itd.);
    • jednokratne masovne akcije (ubiti mnoge procese; ako radite sa sistemom kontrole verzija, poništite ili razriješite gomilu datoteka);
    • dijagnostika onoga što se dešava u sistemu (semafori, brave, procesi, deskriptori, prostor na disku, itd.);
  • skriptiranje:
    • setup skripte za koje se ne možete osloniti na druge tumače - nije za početnike;
    • funkcije za prilagođavanje interaktivne ljuske (utjecaj na prompt, promjena direktorija, postavljanje varijabli okruženja) - također nije baš za početnike;
    • jednokratne skripte kao što je masovno transkodiranje datoteka;
    • makefiles.

Apsolutno prvi koraci

Početak: Prijava i odjava

Uvjerite se da znate tačno kako pokrenuti shell i kako izaći iz nje.

Ako ste na mašini na kojoj je instaliran Ubuntu, moraćete da pokrenete program Terminal. Na kraju rada možete jednostavno zatvoriti prozor.

Na MacOS-u također pokrenite Terminal.

Da biste pristupili udaljenom serveru, koristite ssh (ako imate MacOS, Ubuntu ili drugi sistem sličan unix-u lokalno) ili putty (ako imate Windows).

Ko sam ja, gde sam?

Pokrenite sljedeće naredbe:
  • ime hosta - prikazuje ime mašine (servera) na kojoj se trenutno nalazite;
  • whoami - prikazuje vašu prijavu (vaše ime u sistemu);
  • drvo -d / |manje - pseudografska slika stabla direktorija na mašini; izlaz iz skrolovanja - q ;
  • pwd - prikazuje direktorij u kojem se trenutno nalazite; na komandnoj liniji ne možete biti "tek takvi", nužno ste u nekom direktoriju (=trenutni direktorij, radni direktorij). Vjerovatno je trenutni radni direktorij prikazan u vašem promptu (promptu).
  • ls - lista datoteka u trenutnom direktoriju; ls /home - lista datoteka u navedenom direktoriju;

Historija komandi (istorija)

Važno svojstvo punopravne komandne linije je istorija komandi.

Pokrenite nekoliko naredbi: ime hosta, ls, pwd, whoami. Sada pritisnite tipku za gore. Prethodna komanda se pojavila u liniji za unos. Tasteri gore i dolje se mogu koristiti za kretanje naprijed i nazad kroz istoriju. Kada skrolujete do imena hosta, pritisnite Enter - komanda će se ponovo izvršiti.

Komande iz istorije ne samo da se mogu ponovo izvršiti, već i uređivati. Skrolujte kroz istoriju do komande ls, dodajte joj ključ -l (ispostavilo se da je ls -l , postoji razmak ispred minusa, ali ne i iza). Pritisnite Enter - modifikovana komanda će biti izvršena.

Skrolovanje kroz istoriju, uređivanje i ponovno izvršavanje komandi su najtipičnije radnje kada radite u komandnoj liniji, naviknite se na to.

kopiraj zalijepi

Komandna linija je vrlo tekstualna: komande su tekst, ulazni podaci za većinu standardnih programa je tekst, rezultat rada je najčešće i tekst.

Lijepa stvar kod teksta je to što se može kopirati i zalijepiti, a to vrijedi i za komandnu liniju.

Pokušajte pokrenuti datum +"%y-%m-%d, %A"
Jeste li ga u cijelosti unijeli rukom ili kopirali iz članka? Provjerite možete li ga kopirati, zalijepiti u terminal i pokrenuti.

Nakon što naučite kako koristiti man ", uvjerite se da možete kopirati i pokrenuti primjer komandi iz pomoći. Da biste provjerili, potražite u pomoći za program datuma za odjeljak PRIMJERI, kopirajte i pokrenite prvi dati primjer (za svaki slučaj : znak dolara nije dio naredbe, ovo je uvjetna slika prompta za unos).

Kako tačno kopirati tekst s terminala i zalijepiti ga u terminal ovisi o vašem sistemu i njegovim postavkama, tako da, nažalost, neće uspjeti dati univerzalnu instrukciju. Na Ubuntu pokušajte ovo: kopiranje je samo odabir miša, lijepljenje je srednji gumb miša. Ako ne radi, ili ako imate drugačiji sistem - potražite na internetu ili pitajte iskusnije prijatelje.

Tasteri i opcije

Dok istražujete istoriju komandi, već ste videli da komanda ls ima najmanje dve opcije. Ako ga nazovete samo tako, ispisuje jednostavnu listu:

[email protected]: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
Ako dodate prekidač -l, detaljne informacije se prikazuju za svaki fajl:

[email protected]: ~/shell-survival-quide> ls -l ukupno 332 -rw-rw-r-- 1 akira akira 198 13. veljače 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 14. veljače 22:26 shell -first-steps.md -rw-rw-r-- 1 akira akira 146226 13. veljače 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 13. veljače 11:45 shell-survival -quide.md -rw-rw-r-- 1 akira akira 146203 13. veljače 11:35 shell-survival-quide.pdf
Ovo je vrlo tipična situacija: ako se pozivu komande dodaju posebni modifikatori (prekidači, opcije, parametri), ponašanje naredbe se mijenja. Uporedite: stablo / i stablo -d / , ime hosta i ime hosta -f .

Osim toga, komande mogu uzeti nazive datoteka, direktorije ili samo tekstualne nizove kao parametre. Pokušajte:

ls -ld /home ls -l /home grep root /etc/passwd

covece

man - Pomoć o komandama i programima dostupnim na vašoj mašini, kao i sistemskim pozivima i C standardnoj biblioteci.

Pokušajte: man grep , man atoi , man chdir , man man .

Pomeranje unapred i unazad se vrši pomoću dugmadi “gore”, “dole”, “PageUp”, “PageDown”, a izlazak iz prikaza pomoći se vrši pomoću dugmeta q. Traženje određenog teksta u članku pomoći: pritisnite / (kosa crta naprijed), unesite tekst za pretragu, pritisnite Enter. Prelazak na sljedeća pojavljivanja - tipka n.

Svi članci pomoći podijeljeni su u kategorije. Najvažniji:

  • 1 - izvršni programi i komande ljuske (wc, ls, pwd, itd.);
  • 2 - sistemski pozivi (fork, dup2 itd.)
  • 3 - funkcije biblioteke (printf, scanf, cos, exec).
Potrebno je naznačiti iz koje kategorije treba pokazati pomoć u slučajevima podudarnosti imena. Na primjer, man 3 printf opisuje funkciju iz standardne biblioteke C, a man 1 printf opisuje konzolni program istog imena.

Možete pogledati listu svih dostupnih članaka pomoći na mašini pomoću naredbe man -k. (tačka je također dio tima).

manje

Kada u malom terminalskom prozoru treba da pogledate veoma dugačak tekst (sadržaj fajla, dugog čoveka, itd.), koriste se posebni programi „pejdžer“ (od reči stranica/stranica, odnosno stranica). Najpopularniji skroler je manji, i to je ono što vam omogućava skrolovanje kada čitate mans.

Pokušajte i uporedite ponašanje:

cat /etc/bash.bashrc cat /etc/bash.bashrc |less

Možete odmah prenijeti datoteku na scroller u parametrima:

Manje /etc/bash.bashrc

Pomeranje gore i dole - dugmad "gore", "dole", "PageUp", "PageDown", izlaz - dugme q. Tražite određeni tekst: pritisnite / (kosa crta), unesite traženi tekst, pritisnite Enter. Prelazak na sljedeća pojavljivanja - tipka n. (Prepoznajete li upute o čovjeku? Nije ni čudo, manje se također koristi za prikaz pomoći.)

Prava

Skup "prava" je povezan sa bilo kojom datotekom ili direktorijumom: pravo čitanja datoteke, pravo pisanja u datoteku, pravo izvršavanja datoteke. Svi korisnici su podijeljeni u tri kategorije: vlasnik fajla, grupa vlasnika fajla, svi ostali korisnici.

Dozvole za fajlove možete pogledati pomoću ls -l. Na primjer:

> ls -l Makefile -rw-r--r-- 1 akira student 198 Feb 13 11:48 Makefile
Ovaj izlaz znači da vlasnik (akira) može čitati i pisati datoteku, grupa (učenici) može samo čitati, a svi ostali u korisniku također mogu samo čitati.

Ako dobijete poruku odbijene dozvole dok radite, to znači da nemate dovoljno dozvola za objekt s kojim želite raditi.

Pročitajte više u man chmod .

STDIN, STDOUT, cjevovodi (cijevi)

Svaki izvršni program ima 3 standardna toka podataka povezana s njim: ulazni tok STDIN, izlazni tok STDOUT, tok grešaka STDERR.

Pokrenite WC program, upišite Dobar dan danas, pritisnite Enter, upišite dobar dan, pritisnite Enter, pritisnite Ctrl+d. Wc program će prikazati statistiku o broju slova, riječi i redova u vašem tekstu i izaći:

> wc dobar dan danas dobar dan 2 5 24
U ovom slučaju, dali ste programu STDIN tekst u dva reda, a primili ste tri broja u STDOUT.

Sada pokrenite komandnu glavu -n3 /etc/passwd, trebalo bi izgledati otprilike ovako:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
U ovom slučaju, glavni program nije pročitao ništa iz STDIN-a, već je napisao tri reda u STDOUT.

Razmislite o tome ovako: program je cijev u koju ulazi STDIN, a izlazi STDOUT.

Najvažnije svojstvo komandne linije Unix-a je da se "pipe" programi mogu međusobno povezati: izlaz (STDOUT) jednog programa može biti proslijeđen kao ulaz (STDIN) drugom programu.

Takva konstrukcija povezanih programa na engleskom se zove pipe (pipe), na ruskom - conveyor ili pipe.

Kombinovanje programa u cjevovod vrši se simbolom | (vertikalna traka)

Pokrenite komandnu glavu -n3 /etc/passwd |wc, dobićete nešto ovako:

> glava -n3 /etc/passwd |wc 3 3 117
Evo šta se dogodilo: glavni program je izbacio tri reda teksta u STDOUT, koji je odmah ušao u ulaz wc programa, koji je zauzvrat brojao broj znakova, riječi i redova u rezultirajućem tekstu.

Možete kombinovati onoliko programa koliko želite u cjevovod. Na primjer, možete dodati još jedan wc program u prethodni cjevovod, koji će brojati koliko je riječi i slova bilo u izlazu prvog wc-a:

> glava -n3 /etc/passwd |wc |wc 1 3 24

Kompajliranje cjevovoda (pipe-ova) je vrlo uobičajena stvar kada se radi na komandnoj liniji. Za primjer kako se to radi u praksi, pogledajte odjeljak Sastavljanje jednolinijskog cjevovoda.

I/O preusmjeravanje

Izlaz (STDOUT) programa ne samo da se može proslijediti drugom programu, već jednostavno upisati u datoteku. Ovo preusmjeravanje se vrši sa > (znakom veće od):

Datum > /tmp/today.txt
Kao rezultat izvršavanja ove naredbe, datoteka /tmp/today.txt će se pojaviti na disku. Pogledajte njegov sadržaj pomoću cat /tmp/today.txt

Ako je datoteka s istim imenom već postojala, njen stari sadržaj će biti uništen. Ako datoteka nije postojala, bit će kreirana. Direktorij u kojem se kreira datoteka mora postojati prije nego što se naredba izvrši.

Ako ne želite da prepišete datoteku, ali dodate izlaz na njen kraj, koristite >> :

Datum >> /tmp/today.txt
Provjerite šta je sada zapisano u fajlu.

Osim toga, programu možete proslijediti bilo koju datoteku umjesto STDIN-a. Pokušajte:

toalet

Šta učiniti kada nešto nije jasno

Ako naiđete na ponašanje sistema koje ne razumijete, ili želite postići određeni rezultat, ali ne znate kako, savjetujem vam da postupite sljedećim redoslijedom (usput, ovo se ne odnosi samo na ljuske):
  • što jasnije formulirajte pitanje ili zadatak - nema ništa teže od rješavanja "ne znam šta";
  • zapamtite ako ste se već susreli sa istim ili sličnim problemom - u ovom slučaju vrijedi isprobati rješenje koje je uspjelo prošli put;
  • pročitajte odgovarajuće man-ove (ako razumijete koji su man-ovi prikladni za vaš slučaj) - možete pronaći odgovarajuće primjere korištenja naredbi, potrebnih opcija ili linkova na druge komande;
  • razmislite o tome: da li je moguće malo promijeniti zadatak? - možda ćete malom promenom uslova dobiti problem koji već znate kako da rešite;
  • postavite svoje dobro definirano pitanje u tražilici - možda se odgovor može naći na Stack Overflow-u ili drugim stranicama;
Ako ništa od navedenog nije pomoglo - potražite savjet učitelja, iskusnog kolege ili prijatelja. I nemojte se plašiti postavljati "glupa" pitanja - nije sramota ne znati, šteta je ne pitati.

Ako ste riješili neki težak problem (sami, koristeći internet ili druge ljude) - zapišite svoje rješenje u slučaju da vi ili vaši drugovi ponovo imate isti problem. Možete snimati u jednostavnom tekstualnom fajlu, u Evernoteu, objavljivati ​​na društvenim mrežama.

Metode rada

Copy-and-paste- od man-ova, iz članaka na StackOverflow-u, itd. Komandna linija se sastoji od teksta, koristite ovo: kopirajte i koristite primjere naredbi, zapišite uspješne nalaze za memoriju, objavite ih na twitteru i blogovima.

Povucite prethodnu komandu iz istorije, dodajte drugu komandu u cevovod, pokrenite, ponovite.Cm. Pogledajte također odjeljak "Kompajliranje jednolinijskog cjevovoda".

Osnovne komande

  • promjena direktorija: cd ;
  • pregled sadržaja fajlova: mačka, manje, glava, rep;
  • manipulacija datotekama: cp , mv , rm ;
  • popis direktorija: ls , ls -l , ls -lS ;
  • struktura direktorija: stablo, stablo -d (možete prenijeti direktorij kao parametar);
  • pretraga fajla: pronađi . -ime ... ;

Analitika

  • wc , wc -l ;
  • sort -k - sortiraj po navedenom polju;
  • sort -n - numeričko sortiranje;
  • diff - uporedi fajlove;
  • grep , grep -v , grep -w , grep "\ " , grep -E - traženje teksta;
  • uniq , uniq -c - jedinstveni nizovi;
  • awk - u varijanti awk "(print $1)", da bi se ostavilo samo prvo polje svake linije, $1 se može promijeniti u $2, $3, itd.;

System Diagnostics

  • ps axuww - informacije o procesima (pokrenutim programima) koji rade na mašini;
  • vrh - interaktivni pogled na procese koji zahtijevaju najviše resursa;
  • df - iskorišteni i slobodni prostor na disku;
  • du - ukupna veličina fajlova u direktorijumu (rekurzivno sa poddirektorijumima);
  • strace , ktrace - koji sistem zove proces koji pravi;
  • lsof - koje datoteke proces koristi;
  • netstat -na , netstat -nap - koji su portovi i utičnice otvoreni na sistemu.

Možda nemate neke programe, moraju se dodatno instalirati. Osim toga, neke opcije ovih programa dostupne su samo privilegiranim korisnicima (root "y").

Masovna i poluautomatska izvedba

Prvo preskočite ovaj odjeljak, trebat će vam ove komande i konstrukcije kada dođete do jednostavnih shell skriptova.
  • test - provera uslova;
  • dok čitanje - ciklus kroz redove STDIN;
  • xargs - zamjena stringova iz STDIN-a u parametre navedenog programa;
  • seq - generiranje nizova prirodnih brojeva;
  • () - kombinuje izlaz nekoliko naredbi;
  • ; - rade jedno za drugim;
  • && - izvršiti ako se prva naredba uspješno završi;
  • || - izvršiti ako prva komanda ne uspije;
  • tee - dupli izlaz programa u STDOUT i u datoteku na disku.

miscellanea

  • datum - trenutni datum;
  • curl - preuzima dokument na navedenom URL-u i upisuje rezultat u STDOUT;
  • dodir - ažuriranje datuma izmjene datoteke;
  • ubiti - poslati signal procesu;
  • true - ne radi ništa, vraća true, korisno za organiziranje vječnih petlji;
  • sudo - izvrši naredbu kao root "a.

Sastavljanje jednolinijskog cjevovoda

Pogledajmo primjer pravog zadatka: želimo ubiti sve procese servera zadataka 6 koji se pokreću u ime trenutnog korisnika.

Korak 1.
Shvatite koji program proizvodi približno potrebne podatke, čak i ako ne u čistom obliku. Za naš zadatak vrijedi dobiti listu svih procesa u sistemu: ps axuww. Trči.

Korak 2
Gledajte očima primljene podatke, smislite filter koji će izbaciti neke od nepotrebnih podataka. Često je ovo grep ili grep -v. Koristeći taster "Gore", izvucite prethodnu komandu iz istorije, dodelite joj izmišljeni filter i pokrenite je.

Ps axuww |grep `whoami`
- samo procesi trenutnog korisnika.

Korak 3
Ponovite korak 2 dok ne dobijete čiste podatke koje želite.

"
- svi procesi sa željenim imenom (plus, možda, suvišni poput vim task-6-server.c, itd.),

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim | grep -v manje
- samo procesi sa željenim imenom

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v manje |awk "(ispis $2)"

Pids potrebnih procesa, korak 3 je završen

Korak 4
Primijenite odgovarajuću završnu obradu. Pomoću tipke "Gore" izvlačimo prethodnu naredbu iz historije i dodajemo obradu koja će dovršiti rješenje problema:

  • |wc -l za brojanje procesa;
  • >pids za pisanje pidova u fajl;
  • |xargs kill -9 kill procesa.

Zadaci za obuku

Želite vježbati nove vještine? Isprobajte sljedeće zadatke:
  • dobiti listu svih datoteka i direktorija u vašem početnom direktoriju;
  • dobiti listu svih man članaka iz kategorije 2 (sistemski pozivi);
  • izbroj koliko puta se riječ grep pojavljuje na stranici za upravljanje grep;
  • izračunajte koliko procesa se trenutno izvodi kao root;
  • pronađite koja se naredba pojavljuje u maksimalnom broju kategorija pomoći (man);
  • izbroj koliko puta se riječ var pojavljuje na stranici ya.ru.
Savjet: trebat će vam find, grep -o, awk "(print $1)", regularni izrazi u grep, curl -s.

Šta dalje studirati?

Ako počnete da volite komandnu liniju, nemojte prestati, nastavite da poboljšavate svoje veštine.

Evo nekih programa koji će vam svakako dobro doći ako živite na komandnoj liniji:

  • pronađite sa složenim opcijama
  • apropos
  • locirati
  • telnet
  • netcat
  • tcpdump
  • rsync
  • ekran
  • zgrep , zless
  • visudo
  • crontab -e
  • sendmail
Takođe je vredno naučiti skriptni jezik tokom vremena, kao što je perl ili python, ili čak oboje.

Kome to treba?

Isplati li se danas naučiti komandnu liniju i shell skripte? Definitivno se isplati. Navest ću samo nekoliko primjera zahtjeva Facebooka za kandidate koji žele da se zaposle na FB.

Top Related Articles