Unix shell
Parašytas: 2006 04 08 15:56
Shell versijos nustatymas
Shell’as yra komandų interpretatorius, kuris priima kiekvieną jūsų komandą ir perduoda ją įvykdymui operacinės sistemos branduoliui. Po komandos įvykdymo, shell’as išveda komandos rezultatus arba pranešimus apie klaidas į ekraną ir laukia sekančios komandos.
UNIX sistemose galima naudoti kelias shell’o versijas. Registruojant vartotoją sistemos administratorius nustato, koks shell’o procesas pagal nutylėjimą aptarnaus vartotoją (failas /etc/passwd)
Dažniausiai naudojami shell:
Bourne shell –sh; C shell – csh; TC Shell –tcsh; Korn shell – ksh; Bourne Again Shell – bash
Shello versijos nustatymas: echo $SHELL
Noredami pereiti į kitą shellą, surinkite atitinkamą komandą: sh, tcsh, ksh, bash
Grįžimas prie buvusio shell'o:exit
Atsijungimas nuo pradinio shell'o: logout
Įvedimo/išvedimo perskirstymas (srautai)
UNIX sistemoje shell’o interpretuojamose komandose leidžiama perskirstyti įvedimo, išvedimo arba klaidų srautą naudojant šiuos simbolius:
> - stdout perskirstymas.
>> - stdout perskirstymas (prirašymas failo gale - append)
< - stdin perskirstymas
Pavyzdžiai:
1. > simbolis. Juo galima nukreipt visą į ekraną išvedamų simbolių srautą į failą. Jei nurodytas failas yra sukurtas, jis perrašomas, jei failo nėra, jis sukuriamas:
kas atsitiko: komandos pagalba "ls" peržiūrėjome katalogo turinį, kuris buvo išvestas tiesiai į ekraną. Surinkus "ls -l > failo_vardas" komandą, buvo sukrtas failas "failo_vardas" ir į jį įrašyti visi komandos "ls -l" rezultatai. ar komanda suveikė, įsitikinau išvesdamas failo turinį į ekraną "cat" komandos pagalba.
2. >> simbolis. Juo galima nukreipt visą į ekraną išvedamų simbolių srautą į failą. Jei nurodyto failo nėra, jis sukuriamas, jei yra, srautas rašomas į failo pabaigą:
Kas atsitiko: dabar jau turime failą "failo_vardas" su tokiu turiniu:
"Siame faile bus irasytas katalogo ~/public_html/lab turinys:"
Komandos "ls -l >> failo_vardas" surašėme į failo"failo_vardas" galą.
"Vamzdžio" mechanizmas
“Vamzdžio” (pipe) mechanizmas yra naudojamas shell’e tikslu perduoti vienos komandos stdout failą tiesiai kaip stdin failą kitai komandai.
Komandos sintaksė yra tokia:
command1 [arguments] | command2 [arguments]
Pavyzdžiai:
1.
Kas atsitiko: pirmiausia buvo vykdoma komanda "ls -l", po to komanda "grep" dirbo su komandos "ls -l" rezultatais. Komanda "grep" naudojam simbolių srauto filtravimui. Šiuo atveju ji pateikė eilutes, kuriose rado žodį "failo".
Metasimboliai
Vartotojui įvedus komandą shell'as tikrina ją ir pradžioje specialiai apdoroja rastus metasimbolius, o po to vykdo suformuotą komandą. Paminėsiu keletą metasimbolių, kuriuos aš dažniausiai naudoju:
1. Metasimbolis "*". Manuale aiškinama, kad šis metasimbolis vaizduoja bet kokių simbolių grupę. Bet pavyzdys paaiškina daug geriau:
Tarkim naudojam komandą: "ls boruv*". Komanda atvaizduos tuos kataloge esančius failus bei katalogus, kurie prasideda raidėmis "boruv". Toliau esančių simbolių skaičius nėra apribotas (sąlyginai):
2. Metasimbolis "?" naudojamas bet kokio vieno simbolio žymėjimui. Pvz. jei naudosime komandą "ls rez?", bus atvaizduoti tik tie failai ir katalogai, kurių pavadinimas prasideda "rez" ir yra 4 simbolių ilgio. 4-as simbolis gali būti bet koks.
3. Metasimbolis "[]" žymi bet kokį simbolių masyvą arba simbolių intervalą. Pvz. komanda "ls rez[123]". Išves į ekraną visų failų ir katalogų, kurie prasideda "rez" ir baigiasi vienu iš laužtiniuose skliaustuose esančių simbolių, sąrašą:
4. Metasimbolis "``". Pvz. naudojam komandą "rm ` ls rez[123] `". Siuo atveju interpretatorius įvykdys komandą "ls rez[123]" ir jos rezultatus perduos komandai rm:
5. "&&" - naudojamas kontroliuoti kelių komandų veikimą. Pvz.
Šuo atveju katalogas /opts neegzistuoja, todėl "ls" komanda gražino klaidos pranešimą, o "pwd" komanda nebuvo vykdoma.
Šiuo atveju komanda "ls" buvo įvykdyta, todėl interpretatorius vykdė ir antrąją komandą "pwd"
6. || - interpretuojamas priešingai nei "&&", kitaip tarinat reiškia arba. Pvz.
Šuo atveju katalogas /opts neegzistuoja, todėl "ls" komanda gražino klaidos pranešimą, ir buvo vykdoma komanda "pwd"
Šiuo atveju komanda "ls" buvo įvykdyta, todėl interpretatorius antrosios komandos nevykdė.
Shell’as yra komandų interpretatorius, kuris priima kiekvieną jūsų komandą ir perduoda ją įvykdymui operacinės sistemos branduoliui. Po komandos įvykdymo, shell’as išveda komandos rezultatus arba pranešimus apie klaidas į ekraną ir laukia sekančios komandos.
UNIX sistemose galima naudoti kelias shell’o versijas. Registruojant vartotoją sistemos administratorius nustato, koks shell’o procesas pagal nutylėjimą aptarnaus vartotoją (failas /etc/passwd)
Dažniausiai naudojami shell:
Bourne shell –sh; C shell – csh; TC Shell –tcsh; Korn shell – ksh; Bourne Again Shell – bash
Shello versijos nustatymas: echo $SHELL
Noredami pereiti į kitą shellą, surinkite atitinkamą komandą: sh, tcsh, ksh, bash
Grįžimas prie buvusio shell'o:exit
Atsijungimas nuo pradinio shell'o: logout
Įvedimo/išvedimo perskirstymas (srautai)
UNIX sistemoje shell’o interpretuojamose komandose leidžiama perskirstyti įvedimo, išvedimo arba klaidų srautą naudojant šiuos simbolius:
> - stdout perskirstymas.
>> - stdout perskirstymas (prirašymas failo gale - append)
< - stdin perskirstymas
Pavyzdžiai:
1. > simbolis. Juo galima nukreipt visą į ekraną išvedamų simbolių srautą į failą. Jei nurodytas failas yra sukurtas, jis perrašomas, jei failo nėra, jis sukuriamas:
Kodas: Pasirinkti visus
lioniax@browser ~/public_html/lab $ ls -l
total 28
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 cpp
-rw-r--r-- 1 cetras users 11212 Kov 21 12:04 cpp.tar.gz
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 java
-rw-r--r-- 1 cetras users 5498 Kov 21 12:04 java.tar.gz
lioniax@browser ~/public_html/lab $ ls -l > failo_vardas
lioniax@browser ~/public_html/lab $ ls -l
total 32
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 cpp
-rw-r--r-- 1 cetras users 11212 Kov 21 12:04 cpp.tar.gz
-rw-r--r-- 1 cetras users 284 Bal 8 15:35 failo_vardas
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 java
-rw-r--r-- 1 cetras users 5498 Kov 21 12:04 java.tar.gz
lioniax@browser ~/public_html/lab $ cat failo_vardas
total 28
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 cpp
-rw-r--r-- 1 cetras users 11212 Kov 21 12:04 cpp.tar.gz
-rw-r--r-- 1 cetras users 0 Bal 8 15:35 failo_vardas
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 java
-rw-r--r-- 1 cetras users 5498 Kov 21 12:04 java.tar.gz
lioniax@browser ~/public_html/lab $
2. >> simbolis. Juo galima nukreipt visą į ekraną išvedamų simbolių srautą į failą. Jei nurodyto failo nėra, jis sukuriamas, jei yra, srautas rašomas į failo pabaigą:
Kodas: Pasirinkti visus
lioniax@browser ~/public_html/lab $ ls -l
total 32
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 cpp
-rw-r--r-- 1 cetras users 11212 Kov 21 12:04 cpp.tar.gz
-rw-r--r-- 1 cetras users 62 Bal 8 15:44 failo_vardas
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 java
-rw-r--r-- 1 cetras users 5498 Kov 21 12:04 java.tar.gz
lioniax@browser ~/public_html/lab $ cat failo_vardas
Siame faile bus irasytas katalogo ~/public_html/lab turinys:
lioniax@browser ~/public_html/lab $ ls -l >> failo_vardas
lioniax@browser ~/public_html/lab $ cat failo_vardas
Siame faile bus irasytas katalogo ~/public_html/lab turinys:
total 32
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 cpp
-rw-r--r-- 1 cetras users 11212 Kov 21 12:04 cpp.tar.gz
-rw-r--r-- 1 cetras users 62 Bal 8 15:44 failo_vardas
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 java
-rw-r--r-- 1 cetras users 5498 Kov 21 12:04 java.tar.gz
lioniax@browser ~/public_html/lab $
"Siame faile bus irasytas katalogo ~/public_html/lab turinys:"
Komandos "ls -l >> failo_vardas" surašėme į failo"failo_vardas" galą.
"Vamzdžio" mechanizmas
“Vamzdžio” (pipe) mechanizmas yra naudojamas shell’e tikslu perduoti vienos komandos stdout failą tiesiai kaip stdin failą kitai komandai.
Komandos sintaksė yra tokia:
command1 [arguments] | command2 [arguments]
Pavyzdžiai:
1.
Kodas: Pasirinkti visus
lioniax@browser ~/public_html/lab $ ls -l
total 32
-rw-r--r-- 1 cetras users 0 Bal 8 15:53 a
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 cpp
-rw-r--r-- 1 cetras users 11212 Kov 21 12:04 cpp.tar.gz
-rw-r--r-- 1 cetras users 346 Bal 8 15:45 failo_vardas
drwxr-xr-x 2 cetras users 4096 Kov 21 12:03 java
-rw-r--r-- 1 cetras users 5498 Kov 21 12:04 java.tar.gz
lioniax@browser ~/public_html/lab $ ls -l | grep "failo"
-rw-r--r-- 1 cetras users 346 Bal 8 15:45 failo_vardas
lioniax@browser ~/public_html/lab $
Metasimboliai
Vartotojui įvedus komandą shell'as tikrina ją ir pradžioje specialiai apdoroja rastus metasimbolius, o po to vykdo suformuotą komandą. Paminėsiu keletą metasimbolių, kuriuos aš dažniausiai naudoju:
1. Metasimbolis "*". Manuale aiškinama, kad šis metasimbolis vaizduoja bet kokių simbolių grupę. Bet pavyzdys paaiškina daug geriau:
Tarkim naudojam komandą: "ls boruv*". Komanda atvaizduos tuos kataloge esančius failus bei katalogus, kurie prasideda raidėmis "boruv". Toliau esančių simbolių skaičius nėra apribotas (sąlyginai):
Kodas: Pasirinkti visus
lioniax@browser:~/programavimas/java/gui$ ls
About$Photo.class Langas2$Piesti.class SvorisWindow.class boruvka.java
About.class Langas2$UpdateButton.class Taskas.class boruvka.java~
Author.png Langas2$VertexButton.class boruvka$Dialogas.class duomenys.txt*
Briauna.class Langas2.class boruvka$DialogasRez.class rez.txt
Langas2$DeleteButton.class Metodai$PiestiGrafa.class boruvka$Exit.class rez2.txt
Langas2$EdgeButton.class Metodai.class boruvka$FormuotiAbout.class
Langas2$Pele.class PiestiGrafa$Piesti.class boruvka$FormuotiLanga2.class
Langas2$Piesti$Pele.class PiestiGrafa.class boruvka.class
lioniax@browser:~/programavimas/java/gui$ ls boruv*
boruvka$Dialogas.class boruvka$Exit.class boruvka$FormuotiLanga2.class boruvka.java
boruvka$DialogasRez.class boruvka$FormuotiAbout.class boruvka.class boruvka.java~
lioniax@browser:~/programavimas/java/gui$
Kodas: Pasirinkti visus
lioniax@browser:~/programavimas/java/gui$ ls
About$Photo.class Langas2$Piesti$Pele.class PiestiGrafa$Piesti.class boruvka$FormuotiAbout.class rez2
About.class Langas2$Piesti.class PiestiGrafa.class boruvka$FormuotiLanga2.class rez2.txt
Author.png Langas2$UpdateButton.class SvorisWindow.class boruvka.class rez3
Briauna.class Langas2$VertexButton.class Taskas.class boruvka.java rez4
Langas2$DeleteButton.class Langas2.class boruvka$Dialogas.class boruvka.java~ rez41
Langas2$EdgeButton.class Metodai$PiestiGrafa.class boruvka$DialogasRez.class duomenys.txt* rez412
Langas2$Pele.class Metodai.class boruvka$Exit.class rez1 rez43
lioniax@browser:~/programavimas/java/gui$ ls rez?
rez1 rez2 rez3 rez4
lioniax@browser:~/programavimas/java/gui$ Kodas: Pasirinkti visus
lioniax@browser:~/temp/t$ ls
rez rez1 rez2 rez3 rez4 rez5 rez51 rez52 rez53 rez57 rez58
lioniax@browser:~/temp/t$ ls rez[123]
rez1 rez2 rez3
lioniax@browser:~/temp/t$ Kodas: Pasirinkti visus
lioniax@browser:~/temp/t$ ls
rez rez1 rez2 rez3 rez4 rez5 rez51 rez52 rez53 rez57 rez58
lioniax@browser:~/temp/t$ rm ` ls rez[123] `
lioniax@browser:~/temp/t$ ls
rez rez4 rez5 rez51 rez52 rez53 rez57 rez58
lioniax@browser:~/temp/t$ Šuo atveju katalogas /opts neegzistuoja, todėl "ls" komanda gražino klaidos pranešimą, o "pwd" komanda nebuvo vykdoma.
Kodas: Pasirinkti visus
lioniax@browser:~$ ls /opts && pwd
/usr/bin/ls: /opts: No such file or directory
Kodas: Pasirinkti visus
lioniax@browser:~$ ls /opt && pwd
kde/ openoffice.org2.0/ www/
/home/lioniaxŠuo atveju katalogas /opts neegzistuoja, todėl "ls" komanda gražino klaidos pranešimą, ir buvo vykdoma komanda "pwd"
Kodas: Pasirinkti visus
lioniax@browser:~$ ls /opts || pwd
/usr/bin/ls: /opts: No such file or directory
Kodas: Pasirinkti visus
lioniax@browser:~$ ls /opt || pwd
kde/ openoffice.org2.0/ www/