Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Greške
  • Ubuntu shell naredbe. Kako automatizirati planirane sigurnosne kopije

Ubuntu shell naredbe. Kako automatizirati planirane sigurnosne kopije

Čim dođe do Linux uređaj i više ili manje profesionalnog rada s ovim OS-om, u primjerima se odmah pojavljuje naredbeni redak i počinje dominirati. Iz čega je lako zaključiti da je ovo glavno (i standardno) sučelje za upravljanje sustavom u Linuxu. Isti pronicljivi čitatelj vjerojatno će se zapitati - tko izvršava unesene naredbe naredbeni redak? Odgovor "sustav" bit će netočan: u Linuxu ne postoji zasebni objekt koji se zove "sustav". Sustav je sustav jer se sastoji od brojnih komponenti koje međusobno djeluju.

Točan odgovor, kao i obično, ispada složeniji. Operativni sustav je posebno potreban kako bi se programi mogli pisati bez razmišljanja o detaljima računala i njegovih dijelova, počevši od procesora i tvrdog diska (recimo, na razini "otvorene datoteke", a ne slijeda naredbi za pomaknuti glavu tvrdi disk). Operativni sustav sam upravlja hardverom, a programima daje “jezik” prilično visoke razine apstrakcije koji pokriva sve njihove potrebe, tzv. API. Ali takav jezik nije prikladan za korisničke naredbe, budući da je još uvijek preniske razine (za rješavanje i najjednostavnijeg korisničkog zadatka potrebno je izvršiti nekoliko takvih operacija), a može se koristiti samo pisanjem programa (najčešće u jezik C). Postoji potreba za izumom drugačijeg - višeg i praktičnijeg - jezika upravljanja sustavom za korisnika. Sve naredbe koje se mogu unijeti u naredbeni redak formulirane su na ovom jeziku.

Iz čega je pronicljivom čitatelju lako zaključiti da postupak te naredbe, prevodeći ih na jezik operativnog sustava, također moraju biti neke poseban program, a upravo s njime korisnik vodi dijalog pri radu s naredbenim redkom. Tako je: ovaj program se zove tumač naredbenog retka ili naredbena ljuska("ljuska"). Naziva se "ljuska" upravo zato što se sva kontrola sustava odvija kao "iznutra": korisnik komunicira s njim na jeziku koji mu odgovara (koristeći tekstualnu naredbenu liniju), a on komunicira s ostalim dijelovima sustava. sustav na prikladnom jeziku. ih jezika (pozivanjem programiranih funkcija).

Naravno, u Linuxu postoji nekoliko tumača naredbi. Najjednostavniji od njih, koji se pojavio u ranim verzijama UNIX-a, zvao se sh ili "Bourne Shell" - prema imenu svog autora, Stephena Bournea. S vremenom je - gdje god je to bilo moguće - zamijenjen snažnijim, bashom, "Bourne Again Shell" (2) bash je superiorniji od sh-a u svemu, posebno u mogućnostima uređivanje naredbeni redak. Uz sh i bash, na sustav se može instalirati “The Z Shell”, zsh. najviše moćni interpreter naredbi danas (bez šale, 22 tisuće redaka dokumentacije), ili tcsh, ažurirana i također vrlo moćna verzija starog “C Shella”, čija je sintaksa naredbi slična C programskom jeziku.

Sintaksa naredbenog retka

Pa koji je to jezik lakši za korištenje? Najviše od svega, komunikacija na ovom jeziku nalikuje pisanom dijalogu sa sustavom - razmjena tekstova jedan po jedan. Korisnička izjava u ovom jeziku je naredba, svaka naredba je zaseban redak. Još nije pritisnuto Unesi, niz se može uređivati ​​i potom proslijediti ljusci. Ljuska rastavlja primljenu naredbu - prevodi je na jezik objekata i funkcija sustava, a zatim je šalje sustavu na izvršenje.

Rezultat izvršavanja mnogih naredbi također je tekst koji se izdaje kao “odgovor” korisniku. Iako to nije potrebno, tim može svoj posao obavljati potpuno tiho. Osim toga, ako su se tijekom izvođenja naredbe dogodile neke posebne okolnosti (kao što je pogreška), ljuska će uključiti u odgovor korisniku dijagnostičke poruke.

Naredba i parametri

Najjednostavnija naredba sastoji se od jedne "riječi", na primjer, naredba cal, koja prikazuje kalendar za tekući mjesec.

$kal
lipnja 2008
Ned Pon Uto Sri Č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 naredba


Što ako trebate pogledati kalendar za sljedeći mjesec? Tako je, ne biste trebali izmišljati posebnu naredbu za ovo, cal će se prilično dobro nositi s ovim zadatkom, samo njegovo ponašanje treba malo modificirati:

$ cal 7 2008
srpnja 2008
Ned Pon Uto Sri Č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 naredba cal 7 2008 sastoji od najmanje dva dijela - same naredbe cal i "svega ostalog". Ovaj ostatak koji slijedi nakon naredbe se zove parametri(ili argumenti), a uvode se kako bi se promijenilo ponašanje naredbe. U većini slučajeva, prilikom analize naredbenog retka prvi riječ se smatra imenom naredbe, a ostalo su njeni parametri.

riječi

Prilikom raščlambe naredbenog retka, ljuska koristi koncept graničnik(razdjelnik). Razdjelnik je znak koji razdvaja riječi; tako da je redak za naredbe niz riječi(što je bitno) i separatori(što nije bitno). Za ljusku, razdjelnici su razmak, tabulator i novi redak. Broj separatora između dvije susjedne riječi nije bitan.

Da bi separator pogodio iznutra riječi (a rezultirajući razgraničeni niz proslijeđen je kao jedan parametar), cijeli traženi 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, što je sljedeće?
>Oh, zaboravio sam navodnike!"

Primjer 3. Citiranje u naredbenom retku


Sve to znači da naredba ima onoliko parametara koliko riječi s gledišta ljuske slijedi je u naredbenom retku. Prva riječ u tripleu prosljeđuje se naredbi kao prvi parametar, druga - kao drugi, itd. U prvom slučaju proslijeđena je naredba echo tri parametri - "Jedan", "Dva" i "Tri". Iznijela ih je, odvojivši ih razmakom. U drugom slučaju parametri su bili dva: “Jedan” i “Dva Tri”. Kao rezultat toga, ove dva parametri su također prikazani odvojeni razmakom. U trećem slučaju parametar je bio samo jedan- od početnog apostrofa "Jedan" do završnog apostrofa "...zaboravio!" " Sve vrijeme dok je bash tipkao, uslužno je davao “>” prompt - znak da se tipkanje naredbenog retka nastavlja, ali u načinu unosa sadržaja pod navodnicima.

Ključevi

Da bi se riješili različiti problemi, iste radnje moraju se izvesti malo drugačije. Na primjer, za sinkronizaciju rada u različite točke diljem svijeta, bolje je koristiti isto vrijeme za sve (Greenwich Mean Time), a sami organizirati svoj radni dan - lokalno vrijeme (uzimajući u obzir pomak vremenske zone i razliku između zimskog i ljetnog vremena). Oba vremena prikazana su naredbom datuma, samo da bi radilo po vremenu u Greenwichu potreban je dodatni parametar “-u” (aka “--universal”).


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

Primjer 4. naredba datuma s tipkom


Ovakvi parametri se nazivaju modifikatori izvršenja ili ključevi(opcije) . Ključ pripada ovoj specifičnoj naredbi i nema značenje sam po sebi, koliko se razlikuje od ostalih parametara (na primjer, naziva datoteka, brojeva) koji imaju vlastitišto znači neovisno o bilo kakvoj naredbi. Svaka naredba može prepoznati određeni skup tipki i promijeniti svoje ponašanje u skladu s tim. 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ča, ali postoje dogovori koje je nepristojno kršiti u naše vrijeme. Prvo, ako parametar počinje s "-", to je - ključ s jednim slovom. Nakon “-” obično slijedi jedan znak, najčešće slovo, koji označava radnju ili svojstvo koje ova tipka daje naredbi. To olakšava razlikovanje ključeva od ostalih parametara - kako za korisnika prilikom upisivanja naredbenog retka, tako i za programera, autora naredbe.

Drugo, poželjno je da naziv ključa bude smisleno- u pravilu, ovo je prvo slovo naziva radnje ili svojstva označenog ključem. Na primjer, promjena “ -a ” u man i who dolazi od riječi “ A ll" (sve) i mijenja način rada ovih naredbi tako da počnu prikazivati ​​informacije koje se obično šute. A u cal and who commands značenje prekidača "-m" je drugačije:

$ tko -m
methody tty1 20. rujna 13:56 (localhost)
$ kal -m
lipnja 2008
Pon Uto Sri Č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 prekidač “ -m ” znači “ M e", odnosno "ja", i kao rezultat toga who radi slično whoami. A za cal, tipka “-m” je naredba za prikaz kalendara, koji se računa kao prvi dan ponedjeljakM dan"), kao što je uobičajeno u Rusiji.

Svojstvo ključa da s jedne strane bude izrazito kratak, a s druge strane informativan naziva se skraćenica. Ne samo prekidači, već i nazivi najčešćih Linux naredbi imaju ovo svojstvo.

Treće, ponekad prekidač mijenja ponašanje naredbe na takav način da se tumačenje parametra koji slijedi nakon ovog prekidača na retku za naredbe također mijenja. Izgleda kao ključ sebe prima parametar, pa se pozivaju ključevi ovog tipa parametarski. U pravilu, njihovi parametri su imena datoteka za različite aplikacije, numeričke karakteristike i drugo vrijednosti, koje je potrebno prenijeti timu. -s 00:00 sati
datum: datum se ne može postaviti: operacija nije dopuštena
Pon, 16. lipnja 00:00:00 MSK 2008
$datum
Pon, 16. lipnja 18:30:53 MSK 2008

Primjer 6. Korištenje datuma -s


Opcija “-s” naredbe za datum omogućuje vam postavljanje sistemsko vrijeme na vrijednost koja je navedena kao parametar ovog ključa. Međutim, u u ovom primjeru ova operacija nije uspjela, što je vidljivo iz rezultata poruka o grešci. Za promjenu sata sustava potrebne su privilegije Administrator sustava, au našem primjeru ova je naredba izvršena kao obični korisnik. Međutim, datum je i dalje prikazivao vrijeme koje je trebalo postaviti, iako je sat sustava ostao nepromijenjen.

Skraćenicu ključeva je teško održati kada ih tim ima previše Puno. Neka slova latinica(na primjer, “s” ili “o”) koriste se vrlo često, i mogu poslužiti kao kratica za nekoliko naredbi odjednom, ali neke (na primjer, “z”) se koriste rijetko, teško ih je smisliti smisleno ime za njih. Za takav slučaj postoji još jedan cjelovečernji format: ključ počinje s dva znak “-” iza kojeg slijedi potpuna naziv entiteta koji označava. Ovo je, na primjer, prekidač “ --help ” (analogno “-h”): $ glava --pomoć
Upotreba: glava [KLJUČ]... [DATOTEKA]...
Ispisuje prvih 10 redaka svake DATOTEKE na standardni izlaz.
Ako je navedeno više DATOTEKA, prvo se ispisuje zaglavlje s nazivom datoteke.
Ako FILE nije naveden ili je naveden kao -, čita standardni unos.

Argumenti koji su potrebni za duge ključeve također su potrebni i za kratke ključeve.
-c, --bytes=[-]N ispisati prvih N bajtova svake datoteke;
zadnji bajt svake datoteke
-n, --lines=[-]N ispisati prvih N redaka svake datoteke, a ne 10;
ako ispred N stoji `-", ispišite sve osim N
zadnje linije svake datoteke
-q, --quiet, --silent ne ispisuju zaglavlja s nazivima datoteka
-v, --verbose uvijek ispisuje zaglavlja s nazivima datoteka
--help prikaži ovu pomoć i izađi
--verzija prikaži informacije o verziji i izađi

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

Molimo prijavite greške na: .

Primjer 7. Ključ–pomoć


Možete vidjeti da neki glavni ključevi imaju formate i jednog slova i pune riječi, a neki imaju samo format pune riječi. To je ono što se obično događa: često korišteni ključevi imaju kraticu, ali rijetki nemaju. Vrijednosti parametarski puna riječ Uobičajeno je proslijediti ključeve ne koristeći sljedeći parametar naredbenog retka, već koristeći " = značenje” neposredno nakon ključa.

Četvrto, postoje neki manje rigidni, ali popularni sporazumi značenje ključevi. Prebacite “-h” (“ H elp") obično (ali, nažalost, ne uvijek) uzrokuje izdavanje naredbi kratka informacija. Na kraju, možda će biti potrebno reći timu parametar, a ne ključ, počevši s "-". Da biste to učinili, morate koristiti prekidač "--": $ 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 -filename-with-

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


Prekidač “-” (prvi “-” je znak tipke, drugi je sama tipka) općenito sprječava naredbu da interpretira sve sljedeće parametre naredbenog retka kao prekidače, bez obzira na to počinju li s “-” ili ne . Tek nakon “ -- ” glava se složila da je -filename-with- naziv datoteke.

Sinopsis

Iz svega navedenog jasno je da svaka naredba ima svoj mali jezik – sastoji se od onih tipki te obaveznih i izbornih parametara koje naredba prihvaća i interpretira. Za brzi pregled mogućnosti naredbe, dostupna je različita Linux dokumentacija sinopsis- sažeti popis svih mogućih parametara naredbe. Izgleda otprilike ovako:

Cal [-smjy13] [godina]

Primjer 9. Sinopsis za naredbu cal


Sinopsis daje formalizirao opis kako koristiti predmet (sa u ovom slučaju- kako i s kojim parametrima pokrenuti naredbu cal). Parametri su navedeni istim redoslijedom kojim se moraju unijeti u naredbeni redak, izborni parametri obično se daju u uglatim zagradama, obvezni parametri se daju uopće bez zagrada, a radi kompaktnosti ključevi su skupljeni u jedan parametar, u kojem svaki slovo je zaseban ključ. Gornji primjer glasi ovako: naredba cal nema traženi parametri, postoje (neobavezni) prekidači (-s, -m, itd.) i izborni parametar godine, kojemu može prethoditi izborni mjesec (ali mjesec se ne može navesti bez godine).

Odakle dolaze naredbe?

Nakon što je završio s čitanjem prethodnog odjeljka, pronicljivi čitatelj trebao je pomisliti nešto ovako: da, dobro, sredili smo malo s naredbama i parametrima (tj. gramatikom naredbenog retka), a sada nas naoružajte popisom svih Linux naredbi (drugim riječima, rječnik), a mi Krenimo na posao. Zašto takav popis nigdje nije objavljen? Točnije, postoji mnogo različitih popisa naredbi i svi su očito nepotpuni i ne slažu se u svemu. Odgovor na ovo pitanje ima dva dijela.

Dio 1: Naredbe i uslužni programi

Shell, interpreter naredbi, je “shell” ne samo za korisnika, već i za naredbe: on sam ne izvršava gotovo nikakve naredbe, već ih prosljeđuje sustavu. Njegov zadatak je analizirati naredbeni redak, izdvojiti naredbu i parametre iz njega, a zatim pokrenuti korisnost- program čije ime odgovara nazivu naredbe.

Ako pogledate "iznutra" tumača naredbi, tada rad s naredbenim redkom ide otprilike ovako: korisnik unese redak (naredbu), ljuska ga čita, ponekad pretvara u određena pravila, dijeli rezultirajući niz u naredbu i parametre, a zatim pokreće uslužni program, prosljeđujući mu te parametre. Uslužni program zauzvrat analizira parametre, identificira ključeve među njima i radi ono što je zatraženo, istovremeno prikazujući podatke za korisnika, a zatim završava. Po završetku rada uslužnog programa, nastavlja se rad interpretatora naredbi “povučenog u pozadinu”, ponovno čita naredbeni redak, analizira ga, poziva naredbu... To se nastavlja sve dok korisnik ne da naredbu ljusci kraj sama (pomoću naredbe za odjavu ili kontrolnog znaka Ctrl+D).

Međutim, ljuska još uvijek samostalno izvršava neke (manje) naredbe, bez pozivanja pomoćnih programa. Neke od najkorisnijih naredbi ugrađene su u bash, iako su dostupne kao uslužni programi (npr. echo). Ugrađena naredba radi na isti način, ali budući da joj je potrebno znatno manje vremena za izvršenje, tumač naredbi će je odabrati ako je moguće. U bashu se tip naredbe može odrediti pomoću naredbe type. Bashove izvorne naredbe se pozivaju ugrađen(ugrađena naredba), a za pomoćne programe prikazuje staza, koji sadrži naziv direktorija u kojem se nalazi datoteka s odgovarajućim programom i naziv ovog programa. Tipka “-a” (“ a ll", naravno), uzrokuje izlaz tipa svi moguće opcije za tumačenje naredbe, a prekidač “-t” prikazat će tip naredbe umjesto putanje.

$tip datuma
info je /bin/datum
$type echo
echo je ugrađena ljuska
$ tip -a odjek
echo je ugrađena ljuska
echo je /bin/echo
$ tip -a -t odjek
ugrađen
datoteka

Primjer 10. Definiranje tipa naredbe


Postoji nekoliko izvornih naredbi u tumaču naredbi. Uglavnom, to su operatori programskog jezika i druga sredstva za kontrolu samog tumača. Sve naredbe koje obavljaju značajan posao za korisnika predstavljene su u Linuxu kao pojedinačne komunalije. Evo prvog dijela odgovora na pitanje o svima Linux naredbe: Ima ih onoliko koliko ima programa (uslužnih programa) napisanih za Linux. Njihov popis je popis uslužnih programa instaliranih na sustavu i u različitim sustavima bit će drugačije.

2. dio: za sve postoji vodič

Svaki objekt sustava: sve komunalije, Svi demoni Linux, sve funkcije jezgre I knjižnicama, većinska struktura konfiguracijske datoteke Konačno, mnogi spekulativni, ali važni koncepti moraju biti popraćeni dokumentacijom koja opisuje njihovu svrhu i metode korištenja. Stoga korisnik sustava nije potreban zapamtiti sve moguće opcije za interakciju s njim. Dovoljno razumjeti osnovne principe njegove strukture i moći pronaći referentne informacije. Einstein je rekao ovo o ovome: "Zašto pamtiti nešto što se uvijek može potražiti u referentnoj knjizi?"

Najviše razne korisne informacije sadržane u stranice priručnika (stranice priručnika). Svaka stranica priručnika (radi sažetosti, jednostavno "priručnik") posvećena je jednom objektu sustava. Za pregled stranice priručnika morate izdati naredbu man objekt : $ čovjek kal
CAL(1) BSD Priručnik s općim naredbama CAL(1)

IME
cal - prikazuje kalendar

SINOPSIS
kal [-smjy13] [godina]

OPIS
Cal prikazuje jednostavan kalendar. Ako argumenti nisu navedeni,
prikazan je trenutni mjesec. Opcije su sljedeće:
. . .

Primjer 11. Pregledavanje stranice priručnika


“Stranica priručnika” obično zauzima više od jedne stranice zaslon. Kako bi čitanje bilo praktičnije, čovjek pokreće preglednik teksta stranicu po stranicu - manje. Rukovanje programom less je jednostavno: stranice se okreću razmaknicom, a kada se umorite od čitanja, trebate pritisnuti “q” (Quit). Također možete okretati stranice pomoću tipki. Stranica gore / Stranica niže, pomicati se jedan može se koristiti prednja linija Unesi ili strelica prema dolje, i jedna linija natrag - strelica prema gore. Prijelaz na početak i kraj teksta izvodi se naredbama “g”, odnosno “G” (Go). Cijeli popisšto možete učiniti s tekstom u manje vremena prikazuje se pomoću naredbe “H” (Pomoć).

Stranica priručnika sastoji se od polja- standardni dijelovi koji opisuju objekt s različitih strana. Prilikom prvog proučavanja priručnika treba započeti s poljima NAZIV (kratak opis objekta) i OPIS (detaljan opis predmeta dovoljan za korištenje). Jedno od najvažnijih polja u priručniku nalazi se na kraju teksta. Ako, dok čita NAZIV ili OPIS, korisnik shvati da u priručniku nije pronašao ono što je tražio, možda će htjeti vidjeti postoji li drugo priručnike ili druge izvore informacija na istu temu. Popis takvih izvora nalazi se u polju VIDI TAKOĐER:

$čovjek čovjek
. . .
VIDI TAKOĐER
apropos(1), whatis(1), less(1), groff(1), man.conf(5).
. . .

Primjer 12. VIDI TAKOĐER polje priručnika


U polju VIDI TAKOĐER nalazile su se poveznice na priručnike za Less, groff (program za formatiranje stranice priručnika), strukturu konfiguracijska datoteka za čovjeka, kao i dvije popratne naredbe whatis i apropos, koje vam pomažu pronaći priručnik koji vam je potreban. Oba rade s bazom podataka koja se sastoji od polja NAME svih stranica priručnika u sustavu. Razlika između njih je u tome što whatis pretražuje samo među imenima objekata (in lijevo dijelovi polja NAME), odnosno u cijeloj bazi podataka. Kao rezultat toga, whatis ima popis kratki opisi objekti sa imena, uključujući traženu riječ, a apropos ima popis u kojem se ta riječ nalazi spomenuti.

U sustavu može postojati nekoliko objekata razno tipa, ali s istim nazivom. Imena se često podudaraju, npr sistemske pozive(funkcije jezgre) i pomoćne programe koji vam omogućuju korištenje ovih funkcija iz naredbenog retka. Kada se govori o priručniku za objekt sustava, uobičajeno je da se odmah nakon naziva objekta u zagradama stavi broj odjeljka koji sadrži priručnik za ovaj objekt: man(1) , less(1) , passwd(5 ) . Ovaj format olakšava prepoznavanje da se radi o priručniku.

Ručni sustav Linuxa ima devet odjeljaka, od kojih svaki sadrži stranice priručnika za objekte određena vrsta. Svi odjeljci sadrže jedan priručnik pod nazivom "uvod", u kojem opći pogled a primjeri pokazuju s kakvim se predmetima odnose ovaj odjeljak. Popis sekcija s nazivima može se dobiti naredbom whatis intro.

Standardno, čovjek prolazi kroz sve rubrike i pokazuje prvo pronađeno upravljanje sa dati ime. Za pregled priručnika za objekt iz određenog odjeljka, morate navesti broj odjeljka kao prvi parametar naredbe man, na primjer, man 8 passwd .

Drugi izvor informacija o Linuxu i njegovim sastavnim programima je podsustav info help. Stranica priručnika, unatoč obilju poveznica raznih vrsta, ostaje "linearni" tekst, strukturiran samo logično. Info dokument je pravi hipertekst, u kojem ima mnogo male stranice spojeni u stablo. Svaka sekcija info-dokumenta uvijek ima tablicu sadržaja, iz koje možete otići direktno na željenu podsekciju, odakle se uvijek možete vratiti natrag. Osim toga, info dokument se može čitati kao stalan teksta, tako da svaki pododjeljak ima veze na prethodni i sljedeće pododjeljke. To možete pogoditi detaljan vodič Kako se kretati između stranica u informacijama možete saznati pomoću naredbe info info. Naredba info, unesena bez parametara, nudi korisniku popis svih info dokumenata instaliranih na sustavu.

Ako neki sistemski objekt nema dokumentaciju ni u man ni u info formatu, to nije dobro. U ovom slučaju, može se nadati da jest Popratna dokumentacija, koji, nažalost, nema standardni format, a kamoli veze na priručnike za druge objekte sustava. Takva dokumentacija (kao i primjeri korištenja objekta) obično se nalazi u direktoriju /usr/share/doc/ naziv_objekta .

Dokumentacija je uglavnom napisana na jednostavnom engleskom jeziku. Ako engleski nije materinji jezik za autora dokumentacije bit će samo jednostavnije. Tradicija pisanja na engleskom dolazi od značajnog doprinosa Sjedinjenih Država razvoju informatika općenito, a posebno Linux. Osim toga, engleski jezik postaje jezik međunarodne komunikacije u svim područjima, ne samo u računalima. Potreba za pisanjem na jeziku koji će biti više ili manje razumljiv većini korisnika objašnjava se stalnim razvojem Linuxa. Nije da se stranica priručnika ne može prevesti, ali morat će se prevesti svaki put, kada se promijeni objekt koji opisuje! Na primjer, izdavanje nove verzije softverskog proizvoda prati promjena u njegovim mogućnostima i radnim značajkama, a posljedično i nova verzija dokumentacije. Zatim prijevod Ta se dokumentacija pretvara u “pokretnu metu”, sizifov zadatak.

Međutim, neki od najnovijih priručnika još uvijek postoje u ruskom prijevodu. Najnovije verzije takvih prijevoda na ruski prikupljene su u paketu man-pages-ru - samo instalirajte ovaj paket, i one priručnike za koje postoji prijevod prikazat će man prema zadanim postavkama na ruskom.

Varijable okoline

Osim parametara proslijeđenih u naredbenom retku, u Linuxu postoji još jedan način za modificiranje ponašanja programa - za ovo koristite varijable okoline. Kako bismo objasnili princip rada varijabli okoline, potreban je kratki izlet u mehanizam interakcije između procesa u Linuxu.

Pokrenuti program se poziva u Linuxu postupak. Sustav daje svakom pokrenutom procesu određeni informacijski prostor, koji ovaj proces ima pravo mijenjati kako želi - to je okoliš(u engleskom okruženju). Pravila za korištenje ovog prostora su jednostavna: u njemu možete definirati imenovane pohrane podataka ( varijable okoline), u koji možete upisati bilo koju informaciju koju želite (dodijeliti vrijednost varijabli okruženja), a zatim pročitati te informacije (zamijeniti vrijednost varijable).

Procesi su glavni akteri u sustavu. Kada korisnik izdaje naredbe na naredbenom retku, novi procesi za izvršavanje tih naredbi (vanjski uslužni programi, itd.) se pokreću pomoću drugog procesa - istog tumača naredbi koji komunicira s korisnikom i prima naredbe od njega.

Stvaranje jednog procesa pomoću drugog naziva se generiranje procesa a javlja se u dvije faze: prvo se stvara točna kopija izvornik, roditeljski proces (fork() sistemski poziv), a zatim se kopija procesa zamjenjuje novom, podružnice(sistemski poziv exec()). Ono što je za nas sada važno jest da se tijekom ove zamjene očuvaju sva svojstva izvornog procesa, a posebno okoliša.

Vratimo se na rad tumača naredbi: prilikom izvršavanja naredbe, on pokreće željeni uslužni program kao podređeni proces, čeka njegov završetak (pomoću drugog sistemskog poziva, wait()), analizira rezultat i nastavlja s radom. Pokrenuti uslužni program prima dvije vrste informacija od nadređenog procesa (prevoditelj naredbi): opcije naredbenog retka(ne u obliku u kojem ih je korisnik unio, već nakon obrade prema pravilima interpretatora naredbi, u obliku sekvencijalnog popisa) i okoliš, odnosno sve varijable i njihove vrijednosti koje su definirane u okruženju nadređenog procesa.

Može se koristiti isti uslužni program ista stvar način, ali u promijenjenom okruženju - i proizvesti drugačije rezultate. Korisnik može eksplicitno promijeniti okruženje za pokrenuti proces dodjeljivanjem neke vrijednosti varijabli okruženja u naredbenom retku prije ime tima. Interpretator naredbi, vidjevši “=” unutar prve riječi naredbenog retka, zaključuje da je ovo operacija dodjele, a ne naziv naredbe, i sjeća se kako promijeniti okruženje naredbe koja slijedi.

$datum
Pon, 16. lipnja 18:28:30 MSK 2008
$ LC_TIME=C datum
Pon, 16. lipnja 18:28:51 MSK 2008

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


Varijabla okruženja LC_TIME specificira korištenje određenog jezika pri prikazu datuma i vremena, a vrijednost “C” odgovara jeziku “standardnog sustava” (najčešće engleski).

Varijable koje ljuska udarac definira nakon pokretanja, ne pripadaju okolini i stoga ih ne nasljeđuju podređeni procesi. Na varijablu udarac dobila okruženje, ona treba izvoz naredba za izvoz: $LC_TIME=C
$datum
Pon, 16. lipnja 18:29:17 MSK 2008
$ izvoz LC_TIME=C
$datum
Pon, 16. lipnja 18:29:38 MSK 2008

Primjer 14. Izvoz varijabli ljuske u okolinu


Tijekom korisničke sesije, tumač naredbi dobiva prilično bogato okruženje, kojemu dodaje vlastite postavke. Većinu unaprijed definiranih varijabli koristi ili sama ljuska ili pomoćni programi sustava, tako da njihova promjena uzrokuje malo drugačije ponašanje ljuske ili pomoćnih programa. Pogledajte okruženje u udarac moguće korištenje postaviti naredbe.

Vrijednosti bilo koje varijable u bashu može se pristupiti imenom: umjesto konstrukcije $ naziv_varijable Ljuska će zamijeniti vrijednost ove varijable. Na primjer, za pregled vrijednosti određene varijable korisnik može unijeti naredbu echo $ naziv_varijable .

Echo $PATH
/home/methody/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/usr/igre

Primjer 15. Prikaz vrijednosti varijable


Varijabla okoline PATH prilično je značajna. Sadrži popis direktorija čiji su elementi odvojeni dvotočkama. Ako naredba u naredbenom retku nije izvorna naredba ljuske (poput cd) i nije predstavljena kao načine u izvršnu datoteku (kao što je /bin/ls ili ./script), ljuska će tražiti ovu naredbu među imenima izvršnih datoteka u svim PATH direktorijima i samo u njima. Iz tog razloga, izvršne datoteke ne mogu se pokrenuti samo po imenu ako se nalaze u trenutnom direktoriju, a trenutni direktorij nije uključen 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 performanse drugačiji Ima dosta uslužnih programa. Na primjer, varijable obitelji LC_ (njihov potpuni popis daje naredba locale), koje određuju jezik na kojem se prikazuju dijagnostičke poruke, standarde za format datuma, valute, brojeve, metode za pretvaranje nizova itd. . Ako neki uslužni program zahtijeva uređivanje datoteke, ta se datoteka prosljeđuje programu, čiji je put pohranjen u varijabli EDITOR (obično /usr/bin/vi), a ako trebate otvoriti html datoteku, mnogi uslužni programi će to učiniti. pozovite program naveden u varijabli BROWSER da to učinite. Konačno, neke varijable kao što su UID, USER ili PWD jednostavno sadrže korisne informacije koje se mogu dobiti na druge načine.

Nestandardni skup opcija: who am i čini 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 sustavima sličnim Unixu. Drugim riječima, članak je namijenjen onima koji nemaju prethodnog iskustva u radu s Unix naredbenim redkom, ali iz ovog ili onog razloga žele ili trebaju naučiti kako učinkovito komunicirati s njim.

Neće biti prepričavanja mana (dokumentacije), a članak ni na koji način ne poništava niti zamjenjuje njihovo čitanje. Umjesto toga, govorit ću o glavnim stvarima (naredbama, tehnikama i principima) koje trebate razumjeti od samog početka rada u unix ljuska tako da se posao odvija učinkovito i ugodno.

Članak se odnosi na potpuna okruženja slična unixu, s potpuno funkcionalnom ljuskom (po mogućnosti zsh ili bash) i prilično širokim rasponom standardnih programa.

Što je školjka

Shell (shell, poznat i kao "naredbeni redak", poznatiji kao CLI, poznatiji kao "konzola", poznatiji kao "terminal", poznatiji kao "crni prozor s bijelim slovima") je tekstualno sučelje za komunikaciju s operativnim sustavom (dobro, strogo mislim na ovo je program, koji pruža takvo sučelje, ali sada je ta razlika beznačajna).

Općenito, rad kroz ljusku izgleda ovako: korisnik (tj. vi) unesete naredbu s tipkovnice, pritisnete Enter, sustav izvrši naredbu, ispiše rezultat izvršenja na ekran i ponovno čeka sljedeću naredbu. biti upisan.

Tipičan pogled shella:

Ljuska je primarni način interakcije sa svim poslužiteljskim sustavima sličnim Unixu.

Gdje se nalaze sustavi naredbenog retka?

Gdje bi vas mogla čekati unix ljuska, popularne opcije:
  • MacOS (bash);
  • udaljeni pristup poslužitelju za posao ili za osobni web projekt;
  • kućni datotečni poslužitelj s udaljenim pristupom;
  • Ubuntu, PC-BSD na prijenosnom/stolnom računalu - sustavi slični unixu danas se jednostavno instaliraju i koriste.

Koje je probleme razumno riješiti školjkom?

Prirodni zadaci za koje je školjka pogodna, korisna i nezamjenjiva:
  • interaktivni rad u terminalu:
    • izvođenje kompilacije, pokretanje poslova putem make;
    • usporedba tekstualnih datoteka;
    • brza ad-hoc analiza podataka (broj jedinstvenih IP-ova u zapisniku, distribucija zapisa po satima/minutama itd.);
    • jednokratne masovne radnje (ubijte mnogo procesa; ako radite sa sustavom kontrole verzija, obrnite ili razriješite hrpu datoteka);
    • dijagnostika onoga što se događa u sustavu (semafori, brave, procesi, deskriptori, prostor na disku itd.);
  • skriptiranje:
    • instalacijske skripte, za koje se ne možete osloniti na prisutnost drugih tumača - ovo nije za početnike;
    • funkcije za prilagodbu interaktivne ljuske (utjecaj na pozivnicu, promjena direktorija, postavljanje varijabli okruženja) također nisu baš za početnike;
    • jednokratne skripte kao što je masovno kodiranje datoteka;
    • makefiles.

Apsolutno prvi koraci

Počnimo: prijavite se i odjavite

Provjerite znate li točno kako pokrenuti ljusku i kako izaći iz nje.

Ako radite na računalu s instaliranim Ubuntuom, trebate pokrenuti program Terminal. Kada završite, možete jednostavno zatvoriti prozor.

Na MacOS-u - također pokrenite Terminal.

Za pristup udaljenom poslužitelju koristite ssh (ako imate MacOS, Ubuntu ili neki drugi sustav sličan unixu lokalno) ili putty (ako imate Windows).

Tko sam ja, gdje sam?

Pokrenite sljedeće naredbe:
  • ime hosta - prikazuje naziv stroja (poslužitelja) na kojem se trenutno nalazite;
  • whoami - prikazuje vašu prijavu (vaše ime u sustavu);
  • stablo -d / |less - pseudo-grafički prikaz stabla imenika na stroju; izlaz iz skrolanja - q ;
  • pwd - prikazuje imenik u kojem se trenutno nalazite; na naredbenom retku ne možete biti “tek tako”, morate biti u nekom direktoriju (=trenutni direktorij, radni direktorij). Trenutačni radni direktorij vjerojatno je prikazan u vašem upitu.
  • ls - popis datoteka u trenutnom direktoriju; ls /home - popis datoteka u navedenom direktoriju;

Povijest naredbi (povijest)

Važno svojstvo punopravnog naredbenog retka je povijest naredbi.

Pokrenite nekoliko naredbi: ime hosta, ls, pwd, whoami. Sada pritisnite tipku gore. Prethodna naredba pojavljuje se u redu za unos. Možete koristiti tipke gore i dolje za kretanje naprijed i nazad kroz povijest. Kada dođete do hostname pritisnite Enter - naredba će se ponovno izvršiti.

Naredbe iz povijesti ne samo da se mogu više puta izvršavati, već i uređivati. Pomičite se kroz povijest do naredbe ls, dodajte joj prekidač -l (ispada da je ls -l , postoji razmak prije minusa, ali ne i nakon). Pritisnite Enter - izmijenjena naredba će se izvršiti.

Listanje kroz povijest, uređivanje i ponovno izvršavanje naredbi najčešće su radnje pri radu na naredbenom retku, stoga se naviknite.

Kopiraj-zalijepi

Naredbeni redak je vrlo usmjeren na tekst: naredbe su tekst, ulazni podaci za većinu standardnih programa su tekst, a izlaz je najčešće tekst.

Sjajna stvar kod teksta je da se može kopirati i zalijepiti, a to vrijedi i za naredbeni redak.

Pokušajte s naredbom datum +"%y-%m-%d, %A"
Jeste li ga unijeli u cijelosti ručno ili ste ga prepisali iz članka? Provjerite možete li ga kopirati, zalijepiti u terminal i izvršiti.

Nakon što ste naučili koristiti man, provjerite možete li kopirati i pokrenuti primjere naredbi iz pomoći. Za provjeru potražite odjeljak PRIMJERI u pomoći programa za datume, kopirajte i pokrenite prvi navedeni primjer (za svaki slučaj: znak dolara nije dio naredbe, ovo je simbolična slika odzivnika za unos).

Kako točno kopirati tekst s terminala i zalijepiti ga u terminal ovisi o vašem sustavu i njegovim postavkama, tako da, nažalost, neće biti moguće dati univerzalne upute. U Ubuntuu pokušajte ovo: kopirajte - samo odaberite mišem, zalijepite - srednjom tipkom miša. Ako ne radi ili imate neki drugi sustav, potražite na internetu ili pitajte iskusnije prijatelje.

Ključevi i opcije

Istražujući povijest naredbi, već ste se susreli s činjenicom da naredba ls ima barem dvije mogućnosti. Ako ga nazovete samo tako, ispisuje jednostavan popis:

Akira@latitude-e7240: ~/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 svaku datoteku:

Akira@latitude-e7240: ~/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 velj 14 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 pozivu naredbe dodate posebne modifikatore (ključeve, opcije, parametre), ponašanje naredbe se mijenja. Usporedite: stablo / i stablo -d / , ime računala i ime računala -f .

Osim toga, naredbe mogu uzeti nazive datoteka, nazive direktorija ili jednostavno tekstualne nizove kao parametre. Probati:

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

čovjek

man - Pomoć s naredbama i programima dostupnim na vašem računalu, kao i sistemskim pozivima i standardnom C bibliotekom.

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

Pomicanje naprijed i natrag vrši se tipkama “gore”, “dolje”, “PageUp”, “PageDown”, a izlazak iz prikaza pomoći vrši se tipkom q. Potražite određeni tekst u članku pomoći: pritisnite / (kosa crta), unesite tekst za pretraživanje, pritisnite Enter. Prelazak na sljedeća pojavljivanja - tipka n.

Svi referentni članci podijeljeni su u kategorije. Najvažnije:

  • 1 - izvršni programi i naredbe ljuske (wc, ls, pwd, itd.);
  • 2 - sistemski pozivi (fork, dup2, itd.)
  • 3 - funkcije knjižnice (printf, scanf, cos, exec).
Potrebno je naznačiti iz koje kategorije treba pokazati potvrdu u slučaju podudarnosti imena. Na primjer, man 3 printf opisuje funkciju iz C standardne biblioteke, a man 1 printf opisuje konzolni program s istim imenom.

Možete pogledati popis svih članaka pomoći dostupnih na vašem računalu koristeći man -k naredbu. (točka je također dio komada).

manje

Kada ste u malom prozoru terminala, trebate vidjeti vrlo dugačak tekst(sadržaj neke datoteke, dugi čovjek i sl.), koriste posebne programe “pager” (od riječi stranica, odnosno listači stranica). Najpopularniji scroller je manje, i to je ono što vam omogućuje pomicanje kada čitate man stranice.

Pokušajte i usporedite ponašanje:

Cat /etc/bash.bashrc cat /etc/bash.bashrc |manje

Datoteku možete prenijeti na dojavljivač izravno u parametrima:

Manje /etc/bash.bashrc

Pomicanje gore i dolje - gumbi "gore", "dolje", "PageUp", "PageDown", izlaz - gumb q. Traženje određenog teksta: pritisnite / (kosa crta), unesite tekst za pretraživanje, 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

Svaka datoteka ili direktorij ima skup "prava" povezanih s njom: pravo čitanja datoteke, pravo pisanja u datoteku, pravo izvršavanja datoteke. Svi korisnici podijeljeni su u tri kategorije: vlasnik datoteke, grupa vlasnika datoteke, svi ostali korisnici.

Dozvole za datoteke možete vidjeti koristeći ls -l . Na primjer:

> ls -l Makefile -rw-r--r-- 1 akira studenti 198 13. veljače 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 korisnici također mogu samo čitati.

Ako tijekom rada primite poruku da je dopuštenje odbijeno, to znači da nemate dovoljna prava na objekt s kojim želite raditi.

Pročitajte više u man chmod.

STDIN, STDOUT, transporteri (cijevi)

Uz svaki pokrenuti program povezana su 3 standardni protok podaci: ulazni tok podataka STDIN, izlazni tok podataka STDOUT, izlazni tok greške STDERR.

Pokrenite wc program, unesite tekst Dobar dan danas, pritisnite Enter, unesite tekst dobar dan, pritisnite Enter, pritisnite Ctrl+d. Program wc će prikazati statistiku o broju slova, riječi i redaka u vašem tekstu i kraju:

> wc dobar dan danas dobar dan 2 5 24
U ovom ste slučaju dostavili tekst u dva retka STDIN-u programa i primili tri broja u STDOUT-u.

Sada pokrenite naredbu head -n3 /etc/passwd, trebala bi izgledati otprilike ovako:

> glava -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 retka u STDOUT.

Možete to zamisliti ovako: program je cijev u koju teče STDIN, a izlazi STDOUT.

Najvažnije svojstvo Unix naredbenog retka je da se "cijevni" programi mogu povezati jedan s drugim: izlaz (STDOUT) jednog programa može se proslijediti kao ulazni podatak (STDIN) drugom programu.

Takva konstrukcija povezanih programa na engleskom se zove cijev, odnosno transportna traka ili cijev na ruskom.

Kombiniranje programa u cjevovod se vrši simbolom | (okomita crta)

Pokrenite naredbu head -n3 /etc/passwd |wc, izgledat će otprilike ovako:

> glava -n3 /etc/passwd |wc 3 3 117
Evo što se dogodilo: glavni program ispisao je tri retka teksta u STDOUT-u, koji su odmah otišli na ulaz wc programa, koji je zauzvrat prebrojao broj znakova, riječi i redaka u rezultirajućem tekstu.

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

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

Stvaranje cjevovoda (cijevi) vrlo je čest zadatak pri radu na naredbenom retku. Za primjer kako se to radi u praksi, pročitajte odjeljak "Stvaranje jednolinijskog cjevovoda."

I/O preusmjeravanje

Izlaz (STDOUT) programa ne samo da se može prenijeti u drugi program putem cjevovoda, već i jednostavno zapisati u datoteku. Ovo preusmjeravanje se vrši pomoću > (znak veće od):

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

Ako je datoteka s istim nazivom već postojala, njezin će stari sadržaj 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 prebrisati datoteku, već dodati izlaz na njen kraj, koristite >> :

Datum >> /tmp/today.txt
Provjerite što je sada zapisano u datoteci.

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

Zahod

Što učiniti kada nešto nije jasno

Ako naiđete na ponašanje sustava koje ne razumijete ili želite postići određeni rezultat, ali ne znate točno kako, savjetujem vam da nastavite sljedećim redoslijedom (usput, ovo se ne odnosi samo na ljuske):
  • Što je jasnije moguće, formulirajte pitanje ili zadatak - nema ništa teže od rješavanja "nečega što ne znam što";
  • zapamtite jeste li se već susreli s istim ili sličnim problemom - u ovom slučaju vrijedi isprobati rješenje koje je radilo prošli put;
  • pročitajte odgovarajuće stranice priručnika (ako razumijete koje su stranice priručnika prikladne u vašem slučaju) - možda ćete pronaći odgovarajuće primjere korištenja naredbi, potrebne opcije ili poveznice na druge naredbe;
  • razmislite: je li moguće malo promijeniti zadatak? - možda ćete malom promjenom uvjeta dobiti problem koji već znate riješiti;
  • postavite svoje jasno formulirano pitanje u tražilici - možda se odgovor može pronaći na Stack Overflowu ili drugim stranicama;
Ako ništa od navedenog ne pomaže, potražite savjet od učitelja, iskusnog kolege ili prijatelja. I ne bojte se postavljati "glupa" pitanja - nije sramota ne znati, sramota je ne pitati.

Ako riješite teži problem (sami, uz pomoć interneta ili drugih ljudi), zapišite svoje rješenje u slučaju da se isti problem ponovno pojavi vama ili vašim prijateljima. Možete snimati na jednostavan način tekstualna datoteka, u Evernoteu, objaviti na društvenim mrežama.

Metode rada

Kopiranje i lijepljenje- sa stranica priručnika, iz članaka na StackOverflowu itd. Naredbeni redak sastoji se od teksta, iskoristite ovo: kopirajte i koristite primjere naredbi, zapišite uspješna otkrića za uspomenu, objavite ih na Twitteru i blogovima.

Povucite prethodnu naredbu iz povijesti, dodajte drugu naredbu u cjevovod, pokrenite, ponovite.Cm. Također pogledajte odjeljak "Stvaranje jednolinijskog cjevovoda."

Osnovne naredbe

  • promijeniti u drugi direktorij: cd ;
  • pregled sadržaja datoteka: mačka, manje, glava, rep;
  • manipulacija datotekama: cp, mv, rm;
  • pregled sadržaja imenika: ls , ls -l , ls -lS ;
  • struktura direktorija: stablo , stablo -d (možete proslijediti imenik kao parametar);
  • traženje datoteka: pronađi . -Ime ... ;

Analitika

  • wc, wc -l;
  • sort -k - sortiraj po navedenom polju;
  • sort -n - numeričko sortiranje;
  • diff - usporedba datoteka;
  • grep, grep -v, grep -w, grep "\ " , grep -E - traženje teksta;
  • uniq , uniq -c - jedinstvenost niza;
  • awk - u awk "(print $1)" opciji, ostaviti samo prvo polje iz svakog retka, $1 se može promijeniti u $2, $3, itd.;

Dijagnostika sustava

  • ps axuww - informacije o procesima (pokrenutim programima) koji se izvode na stroju;
  • vrh - interaktivni pregled procesa koji zahtijevaju najviše resursa;
  • df - iskorišteni i slobodni prostor na disku;
  • du - ukupna veličina datoteka u imeniku (rekurzivno s podimenicima);
  • strace , ktrace - koje sistemske pozive proces čini;
  • lsof - koje datoteke proces koristi;
  • netstat -na, netstat -nap - koji su portovi i utičnice otvoreni u sustavu.

Možda nemate neke programe; potrebno ih je dodatno instalirati. Osim toga, neke opcije ovih programa dostupne su samo povlaštenim korisnicima (root).

Skupna i poluautomatska izvedba

U početku preskočite ove naredbe i konstrukcije kada dođete do jednostavnog skriptiranja ljuske.
  • test - uvjeti provjere;
  • while read - petlja red po red STDIN ;
  • xargs - zamjena nizova iz STDIN-a u parametre navedenog programa;
  • seq - generiranje nizova prirodnih brojeva;
  • () - kombinirati izlaz nekoliko naredbi;
  • ; - raditi jednu stvar za drugom;
  • && - izvrši ako se prva naredba uspješno završi;
  • || - izvršiti ako prva naredba ne uspije;
  • tee - duplicirati izlaz programa u STDOUT i u datoteku na disku.

Razno

  • datum - trenutni datum;
  • curl - preuzima dokument s navedenog url-a i zapisuje 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.

Stvaranje jednolinijskog cjevovoda

Pogledajmo primjer pravog zadatka: moramo ubiti sve procese poslužitelja task-6 koji se izvode kao trenutni korisnik.

Korak 1.
Razumjeti koji program proizvodi približno potrebne podatke, čak i ako ne u svom čistom obliku. Za naš zadatak vrijedi dobiti popis svih procesa u sustavu: ps axuww. Pokreni.

Korak 2.
Pogledajte primljene podatke svojim očima, osmislite filtar koji će izbaciti dio nepotrebnih podataka. Često je to grep ili grep -v. Pomoću tipke "Gore" izvucite prethodnu naredbu iz povijesti, dodijelite joj izmišljeni filtar i pokrenite je.

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

3. korak
Ponavljajte korak 2 dok ne dobijete čiste podatke koji su vam potrebni.

"
- svi procesi sa traženim nazivom (plus, možda, dodatni 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 traženim imenom

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less |awk "(ispiši $2)"

Pidovi potrebnih procesa, korak 3 dovršen

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

  • |wc -l za brojanje procesa;
  • >pids za pisanje pids-ova u datoteku;
  • |xargs kill -9 procesa za uništavanje.

Zadaci obuke

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

Što dalje studirati?

Ako vam se počne sviđati naredbeni redak, nemojte stati, nastavite poboljšavati svoje vještine.

Evo nekoliko programa koji će vam svakako dobro doći ako živite na naredbenom retku:

  • pronaći sa složenim opcijama
  • odnosno
  • pronaći
  • telnet
  • netcat
  • tcpdump
  • rsync
  • zaslon
  • zgrep, zless
  • visudo
  • crontab -e
  • poslati mail
Osim toga, s vremenom vrijedi savladati neku vrstu skriptnog jezika, poput perla ili pythona, ili čak oba.

Kome ovo treba?

Isplati li se danas uopće učiti naredbeni redak i skriptiranje ljuske? Definitivno vrijedi. Navest ću samo nekoliko primjera zahtjeva Facebooka za kandidate koji žele dobiti posao na FB-u.

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

LABORATORIJSKI RAD br. 1 (vrijeme izvedbe - 3 sata)

Tema: „Uvod uljuska

1. Uvod u školjku

Shell je interpreter naredbi (procesor naredbi) koji djeluje kao sučelje između korisnika i Unix kernela. Solaris nudi tri glavna procesora naredbi:

    Zadana Bourneova ljuska je /sbin/sh

    C procesor naredbi -- /bin/csh

    Korn školjka-- ./bin/ksh

Osim navedenih, Solaris nudi dodatne ljuske:

    J ljuska -- /sbin/jsh

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

    T-ljuska -- /usr/bin/tcsh

    Opet GNU Bourne -- /usr/bin/bash

    Z-ljuska – usr/bin/zsh

Izbor naredbenog procesora stvar je osobnih preferencija.

2. Pokretanje naredbi

Svaka naredba u Unixu sastoji se od naziva programa koji se pokreće (naredba), opcija (ključeva) i argumenata proslijeđenih programu. Naredbeni redak je odijeljen razmacima ili tabulatorima.

Primjer

$ /bin/ping –t 10 192.168.2.13

argument

školjkasta pozivnica

Ako put do izvršne datoteke nije naveden prilikom pokretanja programa, OS sekvencijalno pregledava direktorije navedene u varijabli PATH. Ako postoji program s istim imenom u direktoriju koji se pregledava, tada se pokreće za izvršenje. Trenutačni radni direktorij se ne traži za programe osim ako nije navedeno u varijabli PATH.

! Iz sigurnosnih razloga, preporučuje se da administrator ne dodaje korisnikov trenutni direktorij i kućne (osobne) direktorije u PATH varijablu.

Primjeri

Pokrenite program koji navodi punu stazu

$ / usr/ lokalni/ kanta za smeće/ moj_ program

Pokretanje programa iz višeg (roditeljskog) direktorija

$ ../ lokalni/ kanta za smeće/ moj_ program

Pokretanje programa iz trenutnog direktorija

$ ./ moj_ program

3. Posebni znakovi u ljusci

Neki znakovi školjke imaju posebno značenje.

3.1. Predlošci za generiranje naziva datoteke

? (upitnik) odgovara bilo kojem znaku osim prve točke;

(uglate zagrade) definirati grupu znakova (odabire se jedan znak iz grupe);

- (znak minus") definira raspon valjanih znakova;

! (uskličnik) odbacuje sljedeću grupu znakova;

* (simbol zvjezdice) odgovara bilo kojem broju znakova osim prve točke.

3.2. I/O simboli preusmjeravanja

< - preusmjeravanje unosa;

>, >> - preusmjeravanje izlaza;

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

| - pokretna traka.

3.3. Zamjena znakova

$name_varijablaq - varijabilna supstitucija;

$(naredba) ili 'tim' - zamjena naredbi;

~ - zamjena tilde.

4. Pretraživanje

Za brzo pretraživanje datoteka i direktorija upotrijebite naredbu whereis; za dublju pretragu upotrijebite naredbu find (tražite datoteke koje zadovoljavaju navedene zahtjeve;).

5. Uređivač teksta vi

Uređivač teksta vi je univerzalni uređivač prisutan u svakom Unixu. Osim za uređivanje tekstualnih datoteka, vi editor se može koristiti za uređivanje naredbenog retka.

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

Ulazak u uređivač vi

Izlaz vi

Znak “~” (tilda) na prvom mjestu označava prazne (nepostojeće) retke datoteke.

Glavni način rada je naredbeni način, u kojem se naredbe unose pritiskom određenog niza tipki (ni na koji način se ne prikazuju na ekranu).

Kretanje kroz tekst u naredbenom načinu rada vrši se pomoću strelica i tipki (lijevo), (dolje), (gore), (nadesno).

Neke vi naredbe navedene su u tablici.

Brisanje trenutnog retka

Kopiranje trenutne linije u međuspremnik

Kretanje kursora

Unos znakova označenih kursorom u međuspremnik

Umetnite novi redak na dnu

Umetanje novog retka na vrhu

Dodavanje iza kursora

Dodaj nakon trenutnog retka

Umetni ispred kursora

Umetni prije trenutnog retka

Zamjena znaka znakom unesenim s tipkovnice

Lijepljenje teksta iz međuspremnika

. (točka)

Ponovite zadnju izvršenu naredbu

Otkaži posljednju naredbu

Poništavanje svih promjena na trenutnom retku

Brisanje znaka iznad kursora

U načinu unosa svi znakovi upisani na tipkovnici umetnuti su u tekst.

U načinu zadnjeg retka, naredba koju unesete pojavljuje se u zadnjem retku zaslona.

6. Pomoć

Unix ima elektronički imenik koji sadrži opis svrhe naredbi, njihovu sintaksu, primjere korištenja itd. Imenik se poziva naredbom man:

7. Osnovne naredbe ljuske

WHO– prikaz informacija o aktivnim korisnicima;

jeka– izlazne poruke na terminal;

transparent– slanje poruka na terminal velikim slovima;

čovjek– pozivanje online sustava pomoći;

datum – ispis tekućeg datuma;

pisati– prijenos poruka na terminal drugog korisnika;

poruka– dopuštanje/zabrana prikaza poruka drugih korisnika;

pošta– slanje/primanje pošte;

vijesti– upoznavanje s novostima sustava;

pwd– prikaz apsolutnog naziva rute trenutnog radnog direktorija;

CD– promjena radnog imenika;

ls– prikaz podataka o sadržaju imenika;

mkdir– izrada kataloga;

rmdir– brisanje imenika;

dodir– ažuriranje vremenske oznake datoteke;

cp– kopiranje datoteka;

mačka– kombiniranje i prikaz sadržaja datoteka;

više– pregled sadržaja datoteke stranicu po stranicu.

mv – premještanje ili preimenovanje datoteke;

rm– brisanje datoteke;

alias– stvaranje pseudonima;

tr– pretvorba znakova;

Izlaz– završetak tekućeg ljuska-A;

tee– presretanje rezultata cjevovoda;

izrezati – odabir polja iz niza;

grep– pretraživanje po predlošku;

pr– ispisati datoteku na standardni izlaz u određenom formatu;

vrsta– sortiranje;

glava– ispis prvih redaka datoteke;

rep– ispis zadnjih redaka datoteke;

zahod– brojanje znakova, riječi i redaka;

čitati, jeka - čitanje i ispisivanje varijabilnih vrijednosti;

test- vrednovanje značenja izraza;

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

8. Ljuska-programi

Shell vam omogućuje da slijed naredbi spremite u datoteku i zatim je izvršite. Da biste pokrenuli datoteku s programom ljuske za izvođenje, morate dodati pravo na izvršavanje pravima pristupa:

$ chmod +x naziv_programske_datoteke

Grananje u programima ljuske organizirano je pomoću sljedećih operatora:

ako-onda-drugače

Operatori petlje:

VJEŽBE

1. Koja će od sljedećih naredbi rezultirati prikazivanjem poruke dobrodošlice na zaslonu? Koje nisu? Zašto?

$echo zdravo

$ echo zdravo

$ echo ZDRAVO, SVIJETE

$ transparent zdravo

$ BANNER ZDRAVO, SVIJET

2. Ispišite poruku u više redaka pomoću naredbi jeka I transparent.

3. Ispišite datum u dva retka: u prvom retku dan, mjesec, godina, u drugom retku trenutno vrijeme, dajući izlaz s komentarom.

4. Pomoću naredbe pisati, pošaljite poruku konzoli. Šaljite poruke na više terminala istovremeno.

5. Korištenje naredbe poruka, odredite jesu li poruke dopuštene na vašem terminalu. Zabraniti poruke. Kakva će biti reakcija sustava ako vam netko pokuša poslati poruku?

6. Odredite svoje ime DOM- katalog.

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

8.. Stvorite u svom DOM- imenik s podimenicima oblika:

voće cvijeće

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

tamnozelene

9. Biti u svom DOM-direktorij, kreirajte sljedeće poddirektorije pomoću jedne naredbene linije:

A/B/C/D

10. Biti u svom DOM-imenik, brisanje svih poddirektorija u imeniku A.

11. Dok je u DOM-direktorij, kreirajte datoteku Macintosh u postojećem katalogu jabuka i nekoliko datoteka u imenicima mračno I zelena. Prijavite se u imenik fsnižava. Dok je u imeniku fsnižava, kopirati sve poddirektorije fruits zajedno s datotekama sadržanim u njima u posebno kreirani direktorij košara.

12. Dok je u imeniku fsnižava, izbrišite imenik fruits.

13. Pročitajte datoteku .profil pomoću naredbi mačka I više.

14. Stvorite u DOM-tekstualna datoteka imenika moja datoteka iz više redaka pomoću naredbe mačka. Stvorite tekstualnu datoteku MgFile, upisujući u njega iste retke. Koliko ste datoteka dobili? Zašto?

15. Pregledajte sadržaj datoteke kreirane u zadatku 2.2 moja datoteka. Kopirajte datoteku moja datoteka podnijeti mikopija. Pogledajte sadržaj obiju datoteka.

16. Premjestite datoteku mikopija u katalog cvijeće.

17. Dok je u DOM-katalog, napravite link mgveza po datoteci mikopija koji se nalazi u imeniku cvijeće. Pogledajte datoteku veze.

18. Dodajte redak u datoteku mojveza. Koji od fajlova mojveza,mojkopirati,mojdatoteka promijenio? Zašto?

19. Pomoću koje naredbe možete odrediti broj veza? Odredite broj veza za datoteke mojveza,mojkopirati,mojdatoteka.

Izbriši datoteku mikopija. Što se dogodilo s datotekom veze? Odredite broj veza za datoteke mojveza,mojdatoteka.

20. Stvorite alias red, koji ispisuje sadržaj trenutnog direktorija u proširenom formatu.

21. Odjavite se i ponovno prijavite. Radi li alias? red? Što treba učiniti da se nadimak ne izgubi između sesija?

22. Stvorite alias točka, koji ispisuje popis datoteka u radnom direktoriju čija imena počinju s točkom.

23. Korištenje naredbe dodir, kreirajte datoteke u novom direktoriju s takvim imenima da u isto vrijeme:

Predložak a* 5 podudarnih datoteka;

Predložak * a odgovarao 4 datoteke;

Predložak ??.? podudaranje 3 datoteke;

Predložak * aa* odgovarao 2 datoteke;

Predložak??? odgovara 1 datoteci.

24. Koju naredbu trebate unijeti da učinite sljedeće:

a) prikazati nazive svih datoteka koje počinju s točkom;

b) prikazati nazive svih datoteka koje završavaju sa “.txt”;

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

25. Zamijenite sva mala slova u jednoj datoteci velikima, a u drugoj sva velika slova malim. Uklonite sve duplicirane razmake iz datoteke.

26. Kreirajte datoteku pod nazivom * . Izbriši samo ovu datoteku. Budite oprezni kada koristite znakove za generiranje naziva datoteke!

27. Napravite datoteku koja ima razmak u nazivu. Kako izbrisati takvu datoteku?

28. Korištenje naredbe mačka udvostručiti sadržaj datoteke dodavanjem izvornog sadržaja na kraj iste datoteke. Idite u imenik cvijeće. Dodaj u datoteku spisok popis sadržaja imenika cvijeće. Pogledajte sadržaj datoteke

29. Pokušajte čitati pomoću naredbe mačka nepostojeća datoteka. Kakav je odgovor sustava? Učinite istu stvar preusmjeravanjem poruka o pogrešci u datoteku moja pogreška. Što vidite na ekranu? Pogledaj datoteku moja pogreška.

30. Napravite cjevovod za popis samo imena i dopuštenja datoteka koje se trenutno nalaze u vašem radnom direktoriju.

31. Promijenite izgrađeni cjevovod tako da se popis spremi u datoteku spisok Tvoj njegov DOM-direktorij, a na ekranu je prikazan samo broj datoteka na popisu.

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

33. Stvorite alias prijavljenina, koji će prikazati abecedni popis imena korisnika koji rade na sustavu.

33. Izlaz trenutni datum na ekranu velikim slovima pomoću naredbi datum I transparent.

34. Dodijelite varijabli JA SAM Vaše ime za registraciju. Započni još jedan ljuska. Vidite li ovu varijablu? Što trebate učiniti da biste ga vidjeli u generiranom ljuska? Promjena vrijednosti varijable JA SAM u generiranom ljuska. Izađi iz rođenog ljuska. Pogledajte vrijednost ove varijable u izvoru ljuska. Objasnite rezultat.

35. Napiši ljuska-program info, koji će od korisnika tražiti da unese ime, adresu, dan, mjesec i godinu rođenja te prikazati te podatke obrnutim redoslijedom unesenog

36. Napiši ljuska- program koji će prikazati upit za unos broja i pohraniti uneseni broj u varijablu Y i ispišite poruku "Y je veće od 7", ako vrijednost Y više od 7, i “Y jene veća od 7” inače.

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

a) Vaše ime;

b) broj argumenata s kojima se pokreće;

c) ispisuje svaki svoj argument i duljinu argumenta u znakovima;

38. Napiši ljuska- program koji određuje broj argumenata na naredbenom retku i prikazuje poruku o pogrešci ako broj argumenata nije tri, odnosno same argumente ako je njihov broj tri.

39. Napiši ljuska- program koji će od vas zatražiti unos korisničkog identifikatora, provjeriti usklađenost identifikatora s onima koji se koriste u sustavu i prikazati puno imeDOM-imenik ili, u slučaju nevažećeg identifikatora, prikazati poruku o pogrešci.

40. Napišite program ljuske zdravo, koji daje sljedeći odgovor na argumente naredbenog retka:

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

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

    Ako u naredbenom retku nema argumenata ili su nevažeći, program će ispisati pomoć o svojim opcijama.

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

42. Promijenite odzivnik sustava tako da sadrži puni naziv staze trenutnog radnog direktorija .

43. Napišite program virus, koji stvara svoju izvršnu kopiju s drugim imenom i zatim se briše.

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

45. Napišite program virus3 , koji dodaje vlastiti kod programima na naredbenom jeziku za koje nađe da zaraze druge programe.

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

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

48. Modificirajte razvijeni program tako da ne samo da pronalazi zaražene programe u direktoriju koji mu je naveden, već ih i "liječi" spremanjem zaražene verzije u novu datoteku s završetkom dodanim u ime . vir, i uklanjanje atributa izvršenja iz takve datoteke.

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

a) zarazio bi programe ljuske u trenutnom direktoriju i njegovim poddirektorijima virusom samo ako bi korisnik unio naredbu ls;

b) ponašali bi se kao tim ls, ne otkrivajući ništa o svom radu na terminalu.

50. Na temelju programa napišite virus6 program virus2 -virus5 , čiji zarazni kod nije mogao otkriti program koji ste razvili antivirusni, a infekcija bi se dogodila za bilo koju vrijednost varijable STAZA.

51. Napišite program supervirus, čijim se pokretanjem vaše datoteke inficiraju virusom razvijenim u prethodnom zadatku, a svaki put kada se prijavite u sustav pokušavaju se zaraziti datoteke vaših prijatelja. Program supervirus briše se nakon prvog pokretanja.

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

Ljuska naredbenog jezika (u prijevodu školjka, ljuska) zapravo je programski jezik vrlo visoke razine. U ovom jeziku korisnik upravlja računalom. Obično nakon prijave počinjete komunicirati s naredbenom ljuskom. Znak da je ljuska spremna za primanje naredbi je prompter koji prikazuje na ekranu. U najjednostavnijem slučaju to je jedan dolar ("$"). Shell nije nužan i jedini je naredbeni jezik (iako je on standardiziran u okviru POSIX-a, standarda mobilnih sustava). Na primjer, jezik cshell je prilično popularan; tu su i kshell, bashell i drugi. Štoviše, svaki korisnik može kreirati vlastiti jezik naredbi. Može istovremeno raditi s različitim jezicima naredbi na jednoj instanci operativnog sustava. shell je jedna od mnogih UNIX naredbi. To jest, skup naredbi "shell" uključuje naredbu "sh" - pozivanje tumača "shell". Prva "ljuska" poziva se automatski kada se prijavite i prikazuje programator. Nakon toga možete pozvati bilo koju naredbu za izvršenje, uključujući i samu "ljusku", koja će za vas stvoriti novu ljusku unutar stare. Na primjer, ako pripremite datoteku "file_1" u editoru:

Echo Pozdrav!

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

Sh datoteka_1

Sh< file1

Datoteka se također može izvršiti u trenutnoj instanci ljuske. Postoji posebna naredba za ovaj "." (točka), tj.

Datoteka_1

Budući da je UNIX višekorisnički sustav, možete čak raditi na osobnom računalu paralelno na, recimo, 12 ekrana (promjena sa ekrana na ekran ALT/funkcijska tipka), imajući na svakom ekranu novog (ili istog) korisnika s vlastitu naredbenu ljusku. Također možete otvoriti velik broj prozora u X-Window grafičkom načinu rada, a svaki prozor može imati vlastitog korisnika s vlastitom komandnom ljuskom... Temeljni element jezika ljuske je naredba.

Zapovjedne strukture:

Naredbe u ljusci obično imaju sljedeći format:

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

Na primjer:

Ls -ls /usr/bin

Gdje je ls naziv naredbe za izlaz sadržaja direktorija, -ls su zastavice ("-" je znak zastavica, l je dugi format, s je volumen datoteka u blokovima), /usr/ bin je direktorij za koji se izvršava naredba. Ova naredba će prikazati sadržaj direktorija /usr/bin u dugom formatu i dodati informacije o veličini svake datoteke u blokovima. Nažalost, ova struktura naredbe se ne poštuje uvijek znakom minus, a zastavice nisu uvijek varijante jedne riječi u predstavljanju argumenata. Naredbe s egzotičnim formatima uključuju naredbe kao što su cc - pozivanje prevoditelja jezika C, tar - rad s arhivama. file with conversion, find - search for files i niz drugih U pravilu, ljuska percipira prvu riječ kao naredbu.

prvu riječ će dekriptirati ljuska kao naredbu (ulančavanje), 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 provodi se s terminalske tipkovnice, a standardni izlaz (output) - "stdout" se usmjerava na zaslon terminala. Postoji također standardna datoteka dijagnostičke poruke - "stderr", o čemu će biti riječi nešto kasnije. Naredba koja može raditi na standardnom ulazu i izlazu zove se FILTER. Korisnik ima praktične načine preusmjeravanja ulaza i izlaza na druge datoteke (uređaje). Simboli ">" i ">>" označavaju preusmjeravanje izlaza. ls >file_1 Naredba "ls" će generirati popis datoteka u trenutnom direktoriju i smjestiti ga u datoteku "file_1" (umjesto ispisivanja na ekran). Ako je datoteka "file_1" postojala prije, bit će prebrisana novom.

Pwd >>datoteka_1

naredba pwd formirat će puni naziv trenutnog direktorija i smjestiti ga na kraj datoteke "file_1", tj. ">>" se dodaje datoteci ako nije prazna. simboli "<" и "<<" обозначают перенаправление ввода.

Wc -l

prebrojat će i prikazati broj redaka u datoteci file_1.

Ed file_2<

kreirat će datoteku "file_2" pomoću uređivača, izravno s terminala. Kraj unosa određen je znakom s desne strane "<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!". Можно сочетать перенаправления. Так

Wc -l datoteka_4

Wc -l >datoteka_4

izvode se na isti način: broji se broj redaka u datoteci "file_3" i rezultat se stavlja u datoteku "file_4". Sredstvo koje kombinira standardni izlaz jedne naredbe sa standardnim ulazom druge naziva se PIPELINE i označeno je okomitom crtom "|".

ls | wc -l

popis datoteka u trenutnom direktoriju bit će poslan na ulaz naredbe "wc", koja će prikazati broj redaka u direktoriju. Cjevovod također može kombinirati više od dvije naredbe, kada su sve, eventualno osim prve i zadnje, filteri:

Mačja datoteka_1 | grep -h rezultat | sortirati | mačka -b > datoteka_2

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

Ls > /dev/lp

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

Poredaj file_1 | tee /dev/lp | rep -20

U tom slučaju, datoteka "file_1" će biti sortirana i ispisana, a zadnjih 20 redaka također će biti ispisano na ekranu. Vratimo se na preusmjeravanje izlaza. Standardne datoteke su numerirane:

0 - stdin, 1 - stdout 2 - stderr. Ako ne želite imati poruku o pogrešci na ekranu, možete je preusmjeriti sa ekrana na datoteku koju navedete (ili je potpuno izbaciti preusmjeravanjem na datoteku "prazan uređaj" - /dev/null). Na primjer, prilikom izvršavanja naredbe

Mačja datoteka_1 datoteka_2

koji bi trebao prikazati sadržaj datoteka "file_1" i "file_2" redom 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", a datoteka "file_2" nedostaje, što je naredba "cat" prijavila standardnoj dijagnostičkoj datoteci, prema zadanim postavkama, kao i standardni izlaz prikazan na ekranu. Ako ne želite takvu poruku na ekranu, možete je preusmjeriti na datoteku koju navedete:

Cat file_1 file_2 2>f-err

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

Mačja datoteka_1 datoteka_2 >>ff 2>ff

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

Cat file_1 file_2 2>>ff 1>&2

Ovdje se prvo "stderr" preusmjerava (u načinu dodavanja) u datoteku "ff", a zatim se standardni izlaz preusmjerava na "stderr", što je u ovom trenutku datoteka "ff". To jest, rezultat će biti sličan prethodnom. Konstrukcija "1>&2" znači da osim broja standardne datoteke na koju želite preusmjeriti, morate staviti "&" ispred; cijela struktura je napisana bez razmaka.<- закрывает стандартный ввод. >- zatvara standardni izlaz. Naredbene datoteke. Postoji nekoliko opcija za dopuštanje tekstualne datoteke da se koristi kao naredba. Upotrijebimo uređivač za stvaranje datoteke pod nazivom "cmd" koja sadrži jedan red poput ovog:

Datum; pwd; ls

Ljusku možete pozvati kao naredbu, označenu kao "sh", i proslijediti joj "cmd" datoteku kao argument ili kao preusmjereni unos, tj.

$ sh cmd

$sh

Rezultat izvršavanja bilo koje od ovih naredbi bit će datum, zatim naziv trenutnog direktorija, a potom i sadržaj direktorija. Zanimljivija i praktičnija opcija za rad s batch datotekom je pretvoriti je u izvršnu datoteku, tj. samo napravite naredbu, što se postiže promjenom sigurnosnog koda. Da biste to učinili, morate dopustiti izvođenje ove datoteke. Na primjer,

Chmod 711 cmd

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

će izvršiti iste tri naredbe. Rezultat će biti isti ako datoteka sa sadržajem

Datum; pwd; ls

predstavlja se u obliku: date pwd ls budući da je prijelaz u drugu liniju također separator u nizu naredbi. Dakle, izvršne datoteke mogu biti ne samo datoteke dobivene kao rezultat kompilacije i asemblera, već i datoteke napisane u jeziku ljuske. Izvode se u načinu tumačenja pomoću tumača ljuske

Skupne datoteke za otklanjanje pogrešaka

SHELL koristi dva mehanizma za otklanjanje pogrešaka u batch datotekama. Prvi je: set -v ispisuje retke naredbene datoteke dok se čitaju. Ovaj se način rada koristi pri traženju sintaktičkih pogrešaka. Da biste ga koristili, ne morate mijenjati naredbenu datoteku, na primjer: sh -v proc... ovdje je proc naziv naredbene datoteke. Prekidač -v može se koristiti u kombinaciji s preklopnikom -n, koji sprječava izvođenje sljedećih naredbi (naredba set -n blokira terminal dok se ne unese EOF oznaka). Naredba set -x prikazuje naredbe dok se izvršavaju, a programske linije izlaze na terminal i njihove vrijednosti zamjenjuju se umjesto varijabli. Za poništavanje prekidača -x i -v možete koristiti naredbu set - a za instalaciju dodijelite odgovarajuću vrijednost makro varijabli. SHELL OKRUŽENJE (VARIJABLE I PARAMETRI) U jeziku ljuske možete pisati batch datoteke i koristiti naredbu "chmod" da ih učinite izvršnim. Nakon ovoga, one se ne razlikuju od ostalih UNIX OS naredbi.

Varijable ljuske

Naziv varijable ljuske je niz slova, brojeva i podvlaka koji počinju slovom. Vrijednost varijable ljuske je niz znakova. Činjenica da u ljusci postoje samo dvije vrste podataka: niz znakova i tekstualna datoteka, s jedne strane, olakšava uključivanje krajnjih korisnika u programiranje koji nikada prije nisu programirali, as druge strane, izaziva određeni unutarnji protest kod mnogih programera koji su navikli na znatno veću raznolikost i veću fleksibilnost jezičnih sredstava. No, zanimljivo je promatrati kako visokokvalificirani programeri, nakon što su se upoznali s „pravilima 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 rade čak i brže od onih implementiranih u C-u. Ime varijable je slično tradicionalnoj ideji identifikatora, tj. naziv može biti niz slova, brojeva i podvlaka, počevši od slova ili podvlake. Operator dodjele "=" može se koristiti za dodjelu vrijednosti varijablama.

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

Mogući su i drugi načini dodjele vrijednosti varijablama ljuske. Na primjer, snimanje

DAT=`datum`

uzrokuje da se prvo izvrši naredba "datum" (povratne oznake označavaju da se priložena naredba mora izvršiti prva), a rezultat njezina izvođenja, umjesto da bude ispisan standardnom izlazu, dodjeljuje se kao vrijednost varijable, u ovaj slučaj " DAT". Također možete dodijeliti vrijednost varijabli pomoću naredbe "read", koja osigurava da se vrijednost varijable primi sa zaslona (tipkovnice) u dijaloškom načinu. Obično naredbi "read" u batch datoteci prethodi naredba "echo", koja vam omogućuje da unaprijed prikažete neku poruku na ekranu. Na primjer:

Echo -n "Unesite troznamenkasti broj:" pročitajte x

Prilikom izvođenja ovog dijela naredbene datoteke, nakon što se prikaže poruka

Unesite troznamenkasti broj:

tumač će stati i čekati da se vrijednost unese s tipkovnice. Ako ste unijeli, recimo, "753" tada će to postati vrijednost varijable "x". Jedna naredba "read" može čitati (dodijeliti) vrijednosti za nekoliko varijabli odjednom. Ako u "read" ima više varijabli nego što je uneseno (odvojenih razmacima), preostalim se dodjeljuje prazan niz. Ako postoji više prenesenih vrijednosti nego varijabli u naredbi "čitanje", tada se dodatne zanemaruju. Kada pristupate varijabli ljuske, ispred naziva morate staviti simbol "$". Tako će se na zaslonu prikazati naredbe echo $var_2 echo var_2

UNIX OS var_2 Izbjegavanje

Pogledajmo pobliže tehnike bijega koje se koriste u ljusci. Dvostruki navodnici (" "), jednostruki navodnici (" ") i obrnute kose crte (\) koriste se kao uređaji za izlaz. Njihovo djelovanje je očito iz primjera: Možete napisati nekoliko zadataka u jednom retku.

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 uspjela zbog razmaka) Zatim

Odjek A = $A B = $B C = $C odjek D = $D E = $E F = $F vrijedan odjek evaluiran A = $A vrijedan odjek evaluiran B = $B vrijedan odjek evaluiran C = $C

Prikazat će se na zaslonu

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

Navedimo još neke primjere koji se odnose na izbjegavanje prelaska redaka. Neka varijabli "string" bude dodijeljena vrijednost 2x3 "array": abc def Imajte na umu da kako biste izbjegli dodjeljivanje dodatnih razmaka, drugi redak niza počinje od prve pozicije sljedećeg retka: string="abc def" Zatim postoje tri opcije za pisanje varijable u "echo" echo naredba $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 sekvencijalno identične datoteke file_1 i file_2: str_1 str_2 str_1 str_2 Također imajte na umu da obrnuta kosa crta (\) ne samo da izbjegava znak koji slijedi, što vam omogućuje korištenje Posebni simboli samo kao znakovi koji predstavljaju sami sebe (također se može izbjeći - \\), ali u naredbenoj datoteci, obrnuta kosa crta vam omogućuje spajanje redaka u jedan (na primjer, primjer naredbenog retka dat ranije:

Mačja datoteka_1 | grep -h rezultat | sortirati | mačka -b > datoteka_2

može se napisati u batch datoteci, recimo kao

Mačja datoteka_1 | grep -h\rezultat | sortirati | mačka -b > datoteka_2

Usput, simbol pokretne trake također pruža učinak nastavka naredbenog retka. U ovom slučaju može dati bolji rezultat, ovako:

Mačja datoteka_1 | grep -h rezultat | sortirati | mačka -b > datoteka_2

Manipuliranje varijablama ljuske Iako su varijable ljuske opći slučaj percipiraju se kao nizovi, tj. "35" nije broj, već niz od dva znaka "3" i "5", u nizu slučajeva mogu se tumačiti drugačije, na primjer, kao cijeli brojevi. Naredba "expr" ima niz 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` ; odjek 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, budući da se u ljusci ova ikona percipira kao poseban znak, što znači da se bilo koji niz znakova može zamijeniti na ovom mjestu. Uz naredbu "expr" moguće su ne samo (cjelobrojne) aritmetičke operacije, već i nizovi:

A=`izraz "koktel" : "pijetao"` ; echo $A B=`expr "koktel" : "rep"` ; echo $B C=`expr "koktel" : "kuhaj"` ; echo $C D=`izraz "pijetao" : "koktel"` ; odjek $D

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

4 0 0 0

Izvoz varijabli UNIX OS ima koncept procesa. Proces se događa kada se naredba izvrši. Na primjer, kada tipkate "p" na tipkovnici "proces "p" je iznjedrio. Zauzvrat, "p" može iznjedriti druge procese. Pretpostavimo da "p" poziva "p1" i "p2", koji uzastopno iznjedre odgovarajuće procese. Svaki proces ima svoje okruženje - skup varijabli koji su mu dostupni Na primjer, prije pokretanja "p" već je postojalo okruženje u kojem su neke varijable već bile definirane; "p1" i "p2" će već biti generirani u njemu. Varijable su lokalne u odnosu na proces u kojem su deklarirane, tj. tamo gdje su im dodijeljene vrijednosti koristi se.

Mogućnosti

Parametri se mogu proslijediti u naredbenu datoteku. Ljuska koristi položajne parametre (odnosno redoslijed kojim se pojavljuju je važan). U naredbenoj datoteci, varijable koje odgovaraju parametrima (slično varijablama ljuske) počinju simbolom "$", iza kojeg slijedi jedan od brojeva od 0 do 9: Neka se "examp-1" pozove s parametrima "cock" i "rep". Ovi parametri idu u novo okruženje pod standardnim imenima "1" i "2". (Standardna) varijabla pod nazivom "0" će pohraniti naziv pozvanog izračuna. Kada se pristupa parametrima, ispred broja stoji simbol dolara "$" (kao kada se pristupa varijablama): $0 odgovara nazivu ove naredbene datoteke; $1 je prvi parametar po redu; $2 drugi parametar, itd. Budući da je broj varijabli kojima se mogu proslijediti parametri ograničen na jednu znamenku, tj. 9. (“0”, kao što je već navedeno, ima posebno značenje), zatim za prijenos više parametara, koristi se posebna naredba "shift". Naredba "set" pruža jedinstveni pristup parametrima. Na primjer, fragment

Postavite a b s echo first=$1 second=$2 third=$3

će se prikazati na ekranu

Prvi=a drugi=b treći=c

oni. naredba "set" postavlja vrijednosti parametara. Ovo može biti vrlo zgodno. Na primjer, naredba "datum" 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" također vam omogućuje kontrolu izvršavanja programa, na primjer: redovi set -v izlaze na terminal, čita ih ljuska. set +v poništava prethodni način. set -x ispisuje naredbe na terminal prije izvršenja. set +x poništava prethodni način. Naredba "set" bez parametara prikazuje terminalu stanje softverskog okruženja.

Zamjene ljuske

Prije izravnog tumačenja i izvršavanja naredbi sadržanih u batch datotekama, ljuska se izvršava različite vrste zamjene: 1. ZAMJENA REZULTATA. Sve naredbe unutar navodnika 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. PRAZNINE U TUMAČENJU. Izbjegnuti razmaci se zanemaruju. 4. GENERACIJA NAZIVA DATOTEKA. Riječi se provjeravaju na prisutnost posebnih znakova ("*", "?","") i izvode se odgovarajuće generacije. Softversko okruženje Svaki proces ima okruženje u kojem se izvodi. Shell koristi niz ovih varijabli okoline. Ako upišete naredbu "set" bez parametara, zaslon će prikazati informacije o nizu standardnih varijabli stvorenih prilikom prijave (i zatim proslijeđenih svim vašim novim procesima "naslijeđenih"), kao i varijabli koje su kreirali i izvezli vaši procesi . Konkretna vrsta i sadržaj pruženih informacija u velikoj mjeri ovisi o vrsti informacija UNIX verzija koristi i kako je sustav instaliran.

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

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

Komentirajmo vrijednosti varijabli. HOME=/root je naziv matičnog direktorija u koji korisnik završi nakon prijave. Odnosno, nakon ispravnog unosa imena i lozinke, naći ću se u direktoriju “/root”. PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - ova varijabla specificira slijed datoteka koje ljuska traži u potrazi za naredbom. Nazivi datoteka ovdje su odvojeni dvotočkama. Redoslijed gledanja odgovara redoslijedu imena u stazi. Ali u početku se pretraga odvija među takozvanim ugrađenim naredbama. Ugrađene naredbe uključuju najčešće korištene naredbe, kao što su "echo", "cd", "pwd", "date". Nakon toga sustav pregledava direktorij “/bin” koji može sadržavati naredbe “sh”, “cp”, “mv”, “ls” itd. Zatim direktorij "/usr/bin" s naredbama "cat", "ss", "expr", "nroff", "man" i mnoge druge. Zatim se pretraga odvija u trenutnom direktoriju (".", ili druga oznaka "prazno", tj. ""), gdje se najvjerojatnije nalaze naredbe koje ste napisali. Nakon što upišete naredbeni redak i pritisnete "shell" (nakon izvođenja potrebnih zamjena) prepoznaje ime koje odgovara naredbi i traži ga u direktorijima navedenima u PATH. Ako je naredba postavljena izvan ovih direktorija, neće biti pronađena. Ako postoji nekoliko naredbi sa isto ime, tada će biti pozvan onaj koji se nalazi u imeniku koji se prvi gleda. PATH, kao i druge varijable, može se lako promijeniti dodavanjem, preuređivanjem ili brisanjem direktorija. IFS= (Internal Field Separator) ispisuje znakove koji služe za razdvajanje riječi (polja). To su “space”, “tab” i “line feed”, tako da se ovdje ništa ne vidi lijevo od dodjele i dva retka su zauzeta. LOGNAME=root - ime za prijavu (“korisničko ime”). MAIL=/var/spool/mail/root - naziv datoteke u koju se prima (e-mail) pošta. PWD=/root - naziv trenutnog direktorija PS1=$(PWD): " " - tip direktorija. U tom slučaju, prompter će prikazati naziv trenutnog direktorija iza kojeg slijede dvotočka i razmak. To jest, bit će "/root: ". PS2=> - ovaj upit (ovdje ">") koristi se kao poziv za nastavak unosa (u sljedećem redu) nedovršene naredbe. Na primjer, upišite uvodnu zagradu "(" i nakon pritiska V sljedeći redak vidjet ćete ovaj sufler. Ako ne znate što učiniti sljedeće, upišite zagradu ")" i ona će nestati. SHELL=/bin/sh - Ova varijabla specificira ljusku koju korisnik koristi. U ovom slučaju koristi se standardna ljuska ("sh"). Početno okruženje instalira se automatski nakon prijave pomoću datoteka poput "/etc/rc" i "/etc/.profile". Jedan od načina da jednostavno promijenite okruženje (na primjer, stazu pretraživanja naredbi, vrstu programa, vrstu ljuske, boju zaslona, ​​itd.) je postavljanjem ovih informacija u vaš matični direktorij u specijaliziranoj ".profile" datoteci ($(HOME)/ . profil), dodjeljivanje tražene vrijednosti varijable okoline. Odnosno, pozovite ovu datoteku u editor i napišite što god želite). Zatim, svaki put kada se prijavite, ova datoteka će se automatski pokrenuti i instalirati novo okruženje. Ova datoteka MORA biti smještena u vaš POČETNI imenik(ulazni imenici). Treba imati na umu da nazivi datoteka koji počinju s točkom općenito imaju poseban status. Stoga se ne prikazuju na ekranu jednostavnom naredbom "ls" - ovu naredbu morate pozvati s oznakom "-a". Usput, oni se ne uništavaju bez razlike naredbom “rm *”. Sam tumač ljuske automatski dodjeljuje vrijednosti sljedećim varijablama (parametrima): ? vrijednost vraćena zadnjom naredbom; $ broj procesa; ! broj pozadinskog procesa;

  1. broj pozicijskih parametara proslijeđenih ljusci;
  • popis parametara kao jedan redak;

@ popis parametara, kao skup riječi; - zastavice su prešle do školjke. Kada pristupate ovim varijablama (odnosno kada ih koristite u naredbenoj datoteci - shell programu), trebali biste staviti "$" ispred. Važnu ulogu u stvaranju jedinstvenih datoteka igra posebna varijabla "$$", čija vrijednost odgovara broju procesa koji izvodi ovaj izračun. Svaki novi izračun koji izvodi računalo 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 svaki nova datoteka imat će novi naziv (neće biti upisan umjesto postojećeg). Prednost je ujedno i glavni nedostatak ovog načina imenovanja datoteka. Nije poznato koja će imena biti dodijeljena datotekama. I, ako u okviru ovog procesa možete pronaći datoteku "bez gledanja", odnosno pristupom preko $$, onda se takve datoteke lako mogu izgubiti. To stvara dodatne probleme prilikom otklanjanja pogrešaka programa. Pozivanje tumača Nakon registracije korisnika u sustav (naredbom za prijavu), poziva se prevoditelj jezika SHELL. Ako registracijski direktorij korisnika sadrži datoteku .profile, tada prije nego što se primi barem jedna naredba s terminala, tumač izvršava ovu datoteku (pretpostavlja se da datoteka .profile sadrži naredbe). Prilikom pozivanja mogu se specificirati sljedeći ključevi: -c string Naredbe se čitaju iz zadanog stringa. -s Naredbe se čitaju iz standardnog ulaza. Poruke tumača zapisuju se u standardnu ​​dijagnostičku datoteku. -i Interaktivni način rada. Ako je prvi znak parametra "0" znak -, tada se naredbe čitaju iz datoteke .profile.

STRUKTURE PROGRAMA===

Kao u bilo kojem programskom jeziku, tekst ljuske može sadržavati komentare. Za to se koristi simbol "#". Sve što se nalazi u retku (u naredbenoj datoteci) lijevo od ovog znaka tumač percipira kao komentar. Na primjer,

# Ovo je komentar.

Kao i u svakoj proceduralni jezik Shell programski jezik ima operatore. Brojni operatori omogućuju vam kontrolu redoslijeda izvršavanja naredbi. Kod takvih operatora često je potrebno provjeriti uvjet, koji određuje smjer u kojem se nastavljaju izračuni.

Test("") naredba

Naredba test provjerava je li ispunjen određeni uvjet. Odabir jezika ljuske i izjave petlje generiraju se pomoću ove (ugrađene) naredbe. Dva moguća formata naredbi:

Uvjet ispitivanja

[ stanje ]

mi ćemo koristiti drugu opciju, tj. Umjesto da ispred uvjeta napišemo riječ “test”, uvjet ćemo staviti u zagrade, što je uobičajenije za programere. Zapravo, ljuska će prepoznati ovu naredbu po otvarajućoj zagradi "[" kao riječi koja odgovara naredbi "test". Mora postojati razmak između zagrada i stanja koje sadrže. Također moraju postojati razmaci između vrijednosti i simbola za radnju različitih "tipova". UVJETI PROVJERE DATOTEKE: -f datoteka datoteka "datoteka" je obična datoteka; -d datoteka datoteka "datoteka" - direktorij; -s datoteka datoteka "datoteka" je posebna datoteka; -r datoteka ima dopuštenje za čitanje datoteke "datoteka"; -w datoteka ima dozvolu pisanja u datoteku "file"; -s datoteka datoteka "datoteka" nije prazna.

UVJETI ZA TESTIRANJE NIZOVA: str1 = str2 nizovi "str1" i "str2" se podudaraju; str1 != str2 nizovi "str1" i "str2" nisu isti; -n str1 niz "str1" postoji (nije prazan); -z str1 niz "str1" ne postoji (prazan). Primjeri.

X="tko je tko"; izvoz x; [ "tko je tko" = "$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 $? 1

Osim toga, postoje dvije standardne vrijednosti uvjeta koje se mogu koristiti umjesto uvjeta (za ovo nisu potrebne zagrade). UVJETI ZA USPOREĐIVANJE CIJELIH BROJEVA: 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ći ili jednak "y", x -lt y "x" manji od "y", x -le y "x" manji ili jednak "y". SLOŽENI UVJETI: Implementirano pomoću standardnih logičkih operacija: ! (ne) poništava vrijednost izlaznog koda. -o (ili) odgovara logičkom "ILI". -a (i) odgovara logičkom "I".

Uvjetna izjava "ako"

Općenito, izjava "if" ima strukturu

Ako je uvjet onda popis

Ovdje se "elif" može koristiti skraćena verzija "else if" zajedno s punom, tj. dopušteno je ugniježđivanje proizvoljnog broja "if" naredbi (kao i drugih naredbi). Naravno, “popis” u svakom slučaju mora biti smislen i prihvatljiv u danom kontekstu. Najskraćenija struktura ovog operatora

Ako je uvjet onda lista fi

ako je uvjet ispunjen (obično se ovdje prima kod završetka "0"), tada se "list" izvršava, inače se preskače. Primjeri: Neka se napiše "if-1".

Ako [ $1 -gt $2 ]

then pwd else echo $0: Pozdrav!

Tada će pozivanje if-1 12 11 proizvesti /home/sae/STUDY/SHELL, a if-1 12 13 će proizvesti if-1: Pozdrav!

Poziv operatera ("slučaj")

Operator odabira "case" ima strukturu:

Niz velikih i malih slova

predložak) popis naredbi;; predložak) popis naredbi;; ... predložak) popis naredbi;;

Ovdje su "slučaj", "u" i "esac" funkcijske riječi. "Niz" (ovo može biti jedan znak) uspoređuje se s "uzorkom". Zatim se izvršava "popis naredbi" odabrane linije. Znak ";;" na kraju redaka za odabir izgleda neobično, ali ovdje napišite ";". bila bi to greška. Za svaku alternativu može se izvršiti više naredbi. Ako su ove naredbe napisane u jednom retku, simbol ";" koristit će se kao razdjelnik naredbi. Tipično zadnji redak odabira ima uzorak "*", što u strukturi "case" znači "bilo koja vrijednost". Ovaj je redak odabran ako vrijednost varijable (ovdje $z) ne odgovara niti jednom od prethodno napisanih uzoraka omeđenih zagradom ")". Vrijednosti se prikazuju redoslijedom kojim su zapisane.

Operator numerirane petlje ("za")

Operator petlje "for" ima strukturu:

Za ime

do popis izvršenih naredbi gdje je "for" pomoćna riječ koja određuje vrstu petlje, "do" i "done" su pomoćne riječi koje ističu tijelo petlje. Neka naredba "lsort" bude predstavljena batch datotekom

Za i u file_1 file_2 file_3 napravite proc_sort $i gotovo

U ovom primjeru naziv "i" djeluje kao parametar petlje. Ovo ime se može smatrati varijablom ljuske kojoj se navedene vrijednosti sekvencijalno dodjeljuju (i=file_1, i=file_2, i=file_3), 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 datotekom

Mačka $1 | sortirati | tee /dev/lp > $(1)_sortirano

oni. navedene datoteke se sortiraju sekvencijalno, rezultati sortiranja se ispisuju ("/dev/lp") i šalju u datoteke file_1_sorted file_2_sorted i file_3_sorted

Izjava petlje s istinitim uvjetom ("while")

Struktura "while", koja također izvodi izračune, poželjna je kada je točan popis vrijednosti parametara unaprijed nepoznat ili se taj popis mora dobiti kao rezultat izračuna u petlji. Naredba "while" petlje ima strukturu:

Dok stanje

do popis izvršenih naredbi gdje je "while" pomoćna riječ koja određuje vrstu petlje s pravim uvjetom. Popis naredbi u tijelu petlje (između "do" i "done") ponavlja se sve dok uvjet ne ostane istinit (tj. kod završetka posljednje naredbe u tijelu petlje je "0") ili dok se petlja ne prekine iznutra posebnim naredbama ("prekid", "nastavi" ili "izlaz"). Kada prvi put uđete u petlju, uvjet mora biti istinit. Naredba "break [n]" omogućuje izlazak iz petlje. Ako "n" nedostaje, onda je to ekvivalentno "break 1". "n" označava broj ugniježđenih petlji iz kojih treba izaći, na primjer, "break 3" - izlaz iz tri ugniježđene petlje. Za razliku od naredbe "break", naredba "continue [n]" samo zaustavlja izvođenje trenutne petlje i vraća se na POČETAK petlje. Može i s parametrom. Na primjer, "nastavak 2" znači izlaz na početak druge (brojeći od dubine) ugniježđene petlje. Naredba "exit [n]" omogućuje vam potpuni izlazak iz procedure s povratnim kodom "0" ili "n" (ako je naveden parametar "n"). Ova se naredba može koristiti u više od petlji. Čak iu linearnom nizu naredbi, može biti korisno u otklanjanju pogrešaka zaustaviti (trenutni) izračun na danoj točki.

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

Operator petlje "do" ima strukturu:

Do stanja

do popis izvršenih naredbi gdje je "do" pomoćna riječ koja određuje vrstu petlje s lažnim uvjetom. Popis naredbi u tijelu petlje (između "do" i "done") ponavlja se sve dok uvjet ne ostane lažan ili se petlja iznutra prekine posebnim naredbama ("break", "continue" ili "exit" ). Prvi put kada uđete u petlju, uvjet ne bi trebao biti istinit. Razlika od operatora "while" je u tome što se uvjet petlje provjerava na netočnost (za izlazni kod koji nije nula posljednje naredbe tijela petlje) i provjerava se NAKON svakog (uključujući prvo!) izvršavanja naredbi u tijelo petlje. Primjer.

Do lažnog do

pročitajte x if [ $x = 5 ] onda dovoljno echo ; break else echo some more fi

Ovdje je program sa beskrajna petljačeka na unos riječi (ponavljajući izraz "još malo" na ekranu) dok se ne unese "5". Nakon toga se izdaje "dosta" i naredba "break" zaustavlja izvođenje petlje.

Prazan operator

Prazna izjava ima format

:

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

Funkcije u ljusci

Funkcija vam omogućuje da pripremite popis naredbi ljuske za naknadno izvršenje. Opis funkcije izgleda ovako:

Name() (popis naredbi)

nakon čega se funkcija poziva imenom. Kada se funkcija izvrši, ne stvara se novi proces. Izvodi se u okruženju odgovarajućeg procesa. Argumenti funkcije postaju njezini pozicijski parametri; naziv funkcije je njen nulti parametar. Možete prekinuti izvršenje funkcije pomoću operatora "return [n]", gdje je (neobavezno) "n" povratni kod.

Rukovanje prekidom ("zamka")

Možda će biti potrebno zaštititi izvođenje programa od prekida. Najčešće se susrećete sa sljedećim prekidima koji odgovaraju signalima: 0 izlaz od tumača, 1 prekid veze (prekid veze udaljenog pretplatnika), 2 prekid od , 9 uništenje (nije presretnuto), 15 kraj izvršenja. Za zaštitu od prekida postoji naredba "trap" koja ima format:

Trap signale "popisa naredbi".

Ako se u sustavu pojave prekidi, čiji su signali navedeni odvojeni razmakom u “signalima”, tada će se izvršiti “lista naredbi” nakon čega (ako naredba “izlaz” nije bila izvršena u listi naredbi) kontrola će povratak na točku prekida i izvođenje naredbene datoteke će se nastaviti. Na primjer, ako je prije prekidanja izvršavanja naredbene datoteke potrebno obrisati datoteke u “/tmp”, onda se to može učiniti naredbom “trap”:

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

koja prethodi ostalim naredbama u datoteci. Ovdje će se nakon brisanja datoteka zatvoriti naredbena datoteka.

  • Tutorial

Zašto i za koga je članak?

U početku je ovo bio podsjetnik za studente koji počinju raditi sa sustavima sličnim Unixu. Drugim riječima, članak je namijenjen onima koji nemaju prethodnog iskustva u radu s Unix naredbenim redkom, ali iz ovog ili onog razloga žele ili trebaju naučiti kako učinkovito komunicirati s njim.

Neće biti prepričavanja mana (dokumentacije), a članak ni na koji način ne poništava niti zamjenjuje njihovo čitanje. Umjesto toga, govorit ću o glavnim stvarima (naredbama, tehnikama i principima) koje morate razumjeti od samog početka rada u unix ljusci kako bi rad bio učinkovit i ugodan.

Članak se odnosi na potpuna okruženja slična unixu, s potpuno funkcionalnom ljuskom (po mogućnosti zsh ili bash) i prilično širokim rasponom standardnih programa.

Što je školjka

Shell (shell, poznat i kao "naredbeni redak", poznatiji kao CLI, poznatiji kao "konzola", poznatiji kao "terminal", poznatiji kao "crni prozor s bijelim slovima") je tekstualno sučelje za komunikaciju s operativnim sustavom (dobro, strogo mislim na ovo je program, koji pruža takvo sučelje, ali sada je ta razlika beznačajna).

Općenito, rad kroz ljusku izgleda ovako: korisnik (tj. vi) unesete naredbu s tipkovnice, pritisnete Enter, sustav izvrši naredbu, ispiše rezultat izvršenja na ekran i ponovno čeka sljedeću naredbu. biti upisan.

Tipična vrsta školjke:

Ljuska je primarni način interakcije sa svim poslužiteljskim sustavima sličnim Unixu.

Gdje se nalaze sustavi naredbenog retka?

Gdje bi vas mogla čekati unix ljuska, popularne opcije:
  • MacOS (bash);
  • udaljeni pristup poslužitelju za posao ili za osobni web projekt;
  • kućni datotečni poslužitelj s udaljenim pristupom;
  • Ubuntu, PC-BSD na prijenosnom/stolnom računalu - sustavi slični unixu danas se lako instaliraju i koriste.

Koje je probleme razumno riješiti školjkom?

Prirodni zadaci za koje je školjka pogodna, korisna i nezamjenjiva:
  • interaktivni rad u terminalu:
    • izvođenje kompilacije, pokretanje poslova putem make;
    • usporedba tekstualnih datoteka;
    • brza ad-hoc analiza podataka (broj jedinstvenih IP-ova u zapisniku, distribucija zapisa po satima/minutama itd.);
    • jednokratne masovne radnje (ubijte mnogo procesa; ako radite sa sustavom kontrole verzija, obrnite ili razriješite hrpu datoteka);
    • dijagnostika onoga što se događa u sustavu (semafori, brave, procesi, deskriptori, prostor na disku itd.);
  • skriptiranje:
    • instalacijske skripte, za koje se ne možete osloniti na prisutnost drugih tumača - ovo nije za početnike;
    • funkcije za prilagodbu interaktivne ljuske (utjecaj na pozivnicu, promjena direktorija, postavljanje varijabli okruženja) također nisu baš za početnike;
    • jednokratne skripte kao što je masovno kodiranje datoteka;
    • makefiles.

Apsolutno prvi koraci

Počnimo: prijavite se i odjavite

Provjerite znate li točno kako pokrenuti ljusku i kako izaći iz nje.

Ako radite na računalu s instaliranim Ubuntuom, trebate pokrenuti program Terminal. Kada završite, možete jednostavno zatvoriti prozor.

Na MacOS-u - također pokrenite Terminal.

Za pristup udaljenom poslužitelju koristite ssh (ako imate MacOS, Ubuntu ili neki drugi sustav sličan unixu lokalno) ili putty (ako imate Windows).

Tko sam ja, gdje sam?

Pokrenite sljedeće naredbe:
  • ime hosta - prikazuje naziv stroja (poslužitelja) na kojem se trenutno nalazite;
  • whoami - prikazuje vašu prijavu (vaše ime u sustavu);
  • stablo -d / |less - pseudo-grafički prikaz stabla imenika na stroju; izlaz iz skrolanja - q ;
  • pwd - prikazuje imenik u kojem se trenutno nalazite; na naredbenom retku ne možete biti “tek tako”, morate biti u nekom direktoriju (=trenutni direktorij, radni direktorij). Trenutačni radni direktorij vjerojatno je prikazan u vašem upitu.
  • ls - popis datoteka u trenutnom direktoriju; ls /home - popis datoteka u navedenom direktoriju;

Povijest naredbi (povijest)

Važno svojstvo punopravnog naredbenog retka je povijest naredbi.

Pokrenite nekoliko naredbi: ime hosta, ls, pwd, whoami. Sada pritisnite tipku gore. Prethodna naredba pojavljuje se u redu za unos. Možete koristiti tipke gore i dolje za kretanje naprijed i nazad kroz povijest. Kada dođete do hostname pritisnite Enter - naredba će se ponovno izvršiti.

Naredbe iz povijesti ne samo da se mogu više puta izvršavati, već i uređivati. Pomičite se kroz povijest do naredbe ls, dodajte joj prekidač -l (ispada da je ls -l , postoji razmak prije minusa, ali ne i nakon). Pritisnite Enter - izmijenjena naredba će se izvršiti.

Listanje kroz povijest, uređivanje i ponovno izvršavanje naredbi najčešće su radnje pri radu na naredbenom retku, stoga se naviknite.

Kopiraj-zalijepi

Naredbeni redak je vrlo usmjeren na tekst: naredbe su tekst, ulazni podaci za većinu standardnih programa su tekst, a izlaz je najčešće tekst.

Sjajna stvar kod teksta je da se može kopirati i zalijepiti, a to vrijedi i za naredbeni redak.

Pokušajte s naredbom datum +"%y-%m-%d, %A"
Jeste li ga unijeli u cijelosti ručno ili ste ga prepisali iz članka? Provjerite možete li ga kopirati, zalijepiti u terminal i izvršiti.

Nakon što ste naučili koristiti man, provjerite možete li kopirati i pokrenuti primjere naredbi iz pomoći. Za provjeru potražite odjeljak PRIMJERI u pomoći programa za datume, kopirajte i pokrenite prvi navedeni primjer (za svaki slučaj: znak dolara nije dio naredbe, ovo je simbolična slika odzivnika za unos).

Kako točno kopirati tekst s terminala i zalijepiti ga u terminal ovisi o vašem sustavu i njegovim postavkama, tako da, nažalost, neće biti moguće dati univerzalne upute. U Ubuntuu pokušajte ovo: kopirajte - samo odaberite mišem, zalijepite - srednjom tipkom miša. Ako ne radi ili imate neki drugi sustav, potražite na internetu ili pitajte iskusnije prijatelje.

Ključevi i opcije

Dok ste istraživali povijest naredbi, već ste se susreli da naredba ls ima najmanje dvije opcije. Ako ga nazovete samo tako, ispisuje jednostavan popis:

Akira@latitude-e7240: ~/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 svaku datoteku:

Akira@latitude-e7240: ~/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 velj 14 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 pozivu naredbe dodate posebne modifikatore (ključeve, opcije, parametre), ponašanje naredbe se mijenja. Usporedite: stablo / i stablo -d / , ime računala i ime računala -f .

Osim toga, naredbe mogu uzeti nazive datoteka, nazive direktorija ili jednostavno tekstualne nizove kao parametre. Probati:

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

čovjek

man - Pomoć s naredbama i programima dostupnim na vašem računalu, kao i sistemskim pozivima i standardnom C bibliotekom.

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

Pomicanje naprijed i natrag vrši se tipkama “gore”, “dolje”, “PageUp”, “PageDown”, a izlazak iz prikaza pomoći vrši se tipkom q. Potražite određeni tekst u članku pomoći: pritisnite / (kosa crta), unesite tekst za pretraživanje, pritisnite Enter. Prelazak na sljedeća pojavljivanja - tipka n.

Svi referentni članci podijeljeni su u kategorije. Najvažnije:

  • 1 - izvršni programi i naredbe ljuske (wc, ls, pwd, itd.);
  • 2 - sistemski pozivi (fork, dup2, itd.)
  • 3 - funkcije knjižnice (printf, scanf, cos, exec).
Potrebno je naznačiti iz koje kategorije treba pokazati potvrdu u slučaju podudarnosti imena. Na primjer, man 3 printf opisuje funkciju iz C standardne biblioteke, a man 1 printf opisuje konzolni program s istim imenom.

Možete pogledati popis svih članaka pomoći dostupnih na vašem računalu koristeći man -k naredbu. (točka je također dio komada).

manje

Kada u malom prozoru terminala treba pregledati jako dugačak tekst (sadržaj datoteke, dugog čovjeka i sl.), koriste se posebni programi “pager” (od riječi stranica, odnosno, page flippers). Najpopularniji scroller je manje, i to je ono što vam omogućuje pomicanje kada čitate man stranice.

Pokušajte i usporedite ponašanje:

Cat /etc/bash.bashrc cat /etc/bash.bashrc |manje

Datoteku možete prenijeti na dojavljivač izravno u parametrima:

Manje /etc/bash.bashrc

Pomicanje gore i dolje - gumbi "gore", "dolje", "PageUp", "PageDown", izlaz - gumb q. Traženje određenog teksta: pritisnite / (kosa crta), unesite tekst za pretraživanje, 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

Svaka datoteka ili direktorij ima skup "prava" povezanih s njom: pravo čitanja datoteke, pravo pisanja u datoteku, pravo izvršavanja datoteke. Svi korisnici podijeljeni su u tri kategorije: vlasnik datoteke, grupa vlasnika datoteke, svi ostali korisnici.

Dozvole za datoteke možete vidjeti koristeći ls -l . Na primjer:

> ls -l Makefile -rw-r--r-- 1 akira studenti 198 13. veljače 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 korisnici također mogu samo čitati.

Ako tijekom rada primite poruku da je dopuštenje odbijeno, to znači da nemate dovoljna prava na objekt s kojim želite raditi.

Pročitajte više u man chmod.

STDIN, STDOUT, transporteri (cijevi)

Postoje 3 standardna toka podataka povezana sa svakim programom koji se izvršava: tok ulaznih podataka STDIN, tok izlaznih podataka STDOUT, tok izlaznih podataka pogreške STDERR.

Pokrenite wc program, unesite tekst Dobar dan danas, pritisnite Enter, unesite tekst dobar dan, pritisnite Enter, pritisnite Ctrl+d. Program wc će prikazati statistiku o broju slova, riječi i redaka u vašem tekstu i kraju:

> wc dobar dan danas dobar dan 2 5 24
U ovom ste slučaju dostavili tekst u dva retka STDIN-u programa i primili tri broja u STDOUT-u.

Sada pokrenite naredbu head -n3 /etc/passwd, trebala bi izgledati otprilike ovako:

> glava -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 retka u STDOUT.

Možete to zamisliti ovako: program je cijev u koju teče STDIN, a izlazi STDOUT.

Najvažnije svojstvo Unix naredbenog retka je da se "cijevni" programi mogu povezati jedan s drugim: izlaz (STDOUT) jednog programa može se proslijediti kao ulazni podatak (STDIN) drugom programu.

Takva konstrukcija povezanih programa na engleskom se zove cijev, odnosno transportna traka ili cijev na ruskom.

Kombiniranje programa u cjevovod se vrši simbolom | (okomita crta)

Pokrenite naredbu head -n3 /etc/passwd |wc, izgledat će otprilike ovako:

> glava -n3 /etc/passwd |wc 3 3 117
Evo što se dogodilo: glavni program ispisao je tri retka teksta u STDOUT-u, koji su odmah otišli na ulaz wc programa, koji je zauzvrat prebrojao broj znakova, riječi i redaka u rezultirajućem tekstu.

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

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

Stvaranje cjevovoda (cijevi) vrlo je čest zadatak pri radu na naredbenom retku. Za primjer kako se to radi u praksi, pročitajte odjeljak "Stvaranje jednolinijskog cjevovoda."

I/O preusmjeravanje

Izlaz (STDOUT) programa ne samo da se može prenijeti u drugi program putem cjevovoda, već i jednostavno zapisati u datoteku. Ovo preusmjeravanje se vrši pomoću > (znak veće od):

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

Ako je datoteka s istim nazivom već postojala, njezin će stari sadržaj 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 prebrisati datoteku, već dodati izlaz na njen kraj, koristite >> :

Datum >> /tmp/today.txt
Provjerite što je sada zapisano u datoteci.

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

Zahod

Što učiniti kada nešto nije jasno

Ako naiđete na ponašanje sustava koje ne razumijete ili želite postići određeni rezultat, ali ne znate točno kako, savjetujem vam da nastavite sljedećim redoslijedom (usput, ovo se ne odnosi samo na ljuske):
  • Što je jasnije moguće, formulirajte pitanje ili zadatak - nema ništa teže od rješavanja "nečega što ne znam što";
  • zapamtite jeste li se već susreli s istim ili sličnim problemom - u ovom slučaju vrijedi isprobati rješenje koje je radilo prošli put;
  • pročitajte odgovarajuće stranice priručnika (ako razumijete koje su stranice priručnika prikladne u vašem slučaju) - možda ćete pronaći odgovarajuće primjere korištenja naredbi, potrebne opcije ili poveznice na druge naredbe;
  • razmislite: je li moguće malo promijeniti zadatak? - možda ćete malom promjenom uvjeta dobiti problem koji već znate riješiti;
  • postavite svoje jasno formulirano pitanje u tražilici - možda se odgovor može pronaći na Stack Overflowu ili drugim stranicama;
Ako ništa od navedenog ne pomaže, potražite savjet od učitelja, iskusnog kolege ili prijatelja. I ne bojte se postavljati "glupa" pitanja - nije sramota ne znati, sramota je ne pitati.

Ako riješite teži problem (sami, uz pomoć interneta ili drugih ljudi), zapišite svoje rješenje u slučaju da se isti problem ponovno pojavi vama ili vašim prijateljima. Možete ga snimiti u jednostavnu tekstualnu datoteku, u Evernoteu ili objaviti na društvenim mrežama.

Metode rada

Kopiranje i lijepljenje- sa stranica priručnika, iz članaka na StackOverflowu itd. Naredbeni redak sastoji se od teksta, iskoristite ovo: kopirajte i koristite primjere naredbi, zapišite uspješna otkrića za uspomenu, objavite ih na Twitteru i blogovima.

Povucite prethodnu naredbu iz povijesti, dodajte drugu naredbu u cjevovod, pokrenite, ponovite.Cm. Također pogledajte odjeljak "Stvaranje jednolinijskog cjevovoda."

Osnovne naredbe

  • promijeniti u drugi direktorij: cd ;
  • pregled sadržaja datoteka: mačka, manje, glava, rep;
  • manipulacija datotekama: cp, mv, rm;
  • pregled sadržaja imenika: ls , ls -l , ls -lS ;
  • struktura direktorija: stablo , stablo -d (možete proslijediti imenik kao parametar);
  • traženje datoteka: pronađi . -Ime ... ;

Analitika

  • wc, wc -l;
  • sort -k - sortiraj po navedenom polju;
  • sort -n - numeričko sortiranje;
  • diff - usporedba datoteka;
  • grep, grep -v, grep -w, grep "\ " , grep -E - traženje teksta;
  • uniq , uniq -c - jedinstvenost niza;
  • awk - u awk "(print $1)" opciji, ostaviti samo prvo polje iz svakog retka, $1 se može promijeniti u $2, $3, itd.;

Dijagnostika sustava

  • ps axuww - informacije o procesima (pokrenutim programima) koji se izvode na stroju;
  • vrh - interaktivni pregled procesa koji zahtijevaju najviše resursa;
  • df - iskorišteni i slobodni prostor na disku;
  • du - ukupna veličina datoteka u imeniku (rekurzivno s podimenicima);
  • strace , ktrace - koje sistemske pozive proces čini;
  • lsof - koje datoteke proces koristi;
  • netstat -na, netstat -nap - koji su portovi i utičnice otvoreni u sustavu.

Možda nemate neke programe; potrebno ih je dodatno instalirati. Osim toga, neke opcije ovih programa dostupne su samo povlaštenim korisnicima (root).

Skupna i poluautomatska izvedba

U početku preskočite ove naredbe i konstrukcije kada dođete do jednostavnog skriptiranja ljuske.
  • test - uvjeti provjere;
  • while read - petlja red po red STDIN ;
  • xargs - zamjena nizova iz STDIN-a u parametre navedenog programa;
  • seq - generiranje nizova prirodnih brojeva;
  • () - kombinirati izlaz nekoliko naredbi;
  • ; - raditi jednu stvar za drugom;
  • && - izvrši ako se prva naredba uspješno završi;
  • || - izvršiti ako prva naredba ne uspije;
  • tee - duplicirati izlaz programa u STDOUT i u datoteku na disku.

Razno

  • datum - trenutni datum;
  • curl - preuzima dokument s navedenog url-a i zapisuje 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.

Stvaranje jednolinijskog cjevovoda

Pogledajmo primjer pravog zadatka: moramo ubiti sve procese poslužitelja task-6 koji se izvode kao trenutni korisnik.

Korak 1.
Razumjeti koji program proizvodi približno potrebne podatke, čak i ako ne u svom čistom obliku. Za naš zadatak vrijedi dobiti popis svih procesa u sustavu: ps axuww. Pokreni.

Korak 2.
Pogledajte primljene podatke svojim očima, osmislite filtar koji će izbaciti dio nepotrebnih podataka. Često je to grep ili grep -v. Pomoću tipke "Gore" izvucite prethodnu naredbu iz povijesti, dodijelite joj izmišljeni filtar i pokrenite je.

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

3. korak
Ponavljajte korak 2 dok ne dobijete čiste podatke koji su vam potrebni.

"
- svi procesi sa traženim nazivom (plus, možda, dodatni 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 traženim imenom

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less |awk "(ispiši $2)"

Pidovi potrebnih procesa, korak 3 dovršen

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

  • |wc -l za brojanje procesa;
  • >pids za pisanje pids-ova u datoteku;
  • |xargs kill -9 procesa za uništavanje.

Zadaci obuke

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

Što dalje studirati?

Ako vam se počne sviđati naredbeni redak, nemojte stati, nastavite poboljšavati svoje vještine.

Evo nekoliko programa koji će vam svakako dobro doći ako živite na naredbenom retku:

  • pronaći sa složenim opcijama
  • odnosno
  • pronaći
  • telnet
  • netcat
  • tcpdump
  • rsync
  • zaslon
  • zgrep, zless
  • visudo
  • crontab -e
  • poslati mail
Osim toga, s vremenom vrijedi savladati neku vrstu skriptnog jezika, poput perla ili pythona, ili čak oba.

Kome ovo treba?

Isplati li se danas uopće učiti naredbeni redak i skriptiranje ljuske? Definitivno vrijedi. Navest ću samo nekoliko primjera zahtjeva Facebooka za kandidate koji žele dobiti posao na FB-u.

Najbolji članci na temu