Unix shell

Tvarkingos temos
Skelbti atsakymą
Žinutė
Autorius
Vartotojo avataras
Lioniax
ultra dalyvis
ultra dalyvis
Pranešimai:596
Užsiregistravo:2005 09 21 13:25
Unix shell

#1 Standartinė Lioniax » 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:

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 $ 
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ą:

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 $ 
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.

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 $ 
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):

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$
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.

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$   
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šą:

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$   
4. Metasimbolis "``". Pvz. naudojam komandą "rm ` ls rez[123] `". Siuo atveju interpretatorius įvykdys komandą "ls rez[123]" ir jos rezultatus perduos komandai rm:

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$    
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.

Kodas: Pasirinkti visus

lioniax@browser:~$ ls /opts && pwd
/usr/bin/ls: /opts: No such file or directory
Šiuo atveju komanda "ls" buvo įvykdyta, todėl interpretatorius vykdė ir antrąją komandą "pwd"

Kodas: Pasirinkti visus

lioniax@browser:~$ ls /opt && pwd
kde/  openoffice.org2.0/  www/
/home/lioniax
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"

Kodas: Pasirinkti visus

lioniax@browser:~$ ls /opts || pwd
/usr/bin/ls: /opts: No such file or directory
Šiuo atveju komanda "ls" buvo įvykdyta, todėl interpretatorius antrosios komandos nevykdė.

Kodas: Pasirinkti visus

lioniax@browser:~$ ls /opt || pwd
kde/  openoffice.org2.0/  www/
Mūsų darbas tamsoje -
Mes darome tai, ką mokam,
Atiduodame tai, ką mokam,
Mūsų darbas - tamsoje.
Abejonės virto aistra,
Aistra gi - ištirpo laisvėje.
Visa kita - menas
Išlikt savim beprotybėje.

Vartotojo avataras
Lioniax
ultra dalyvis
ultra dalyvis
Pranešimai:596
Užsiregistravo:2005 09 21 13:25

#2 Standartinė Lioniax » 2006 04 19 20:20

Pamaciau GODhack sugalvota zaidima, skirta unix girl, ir kilo ideja. Taigi, si karta nukrypsim nuo temos (na, ne visai, vistiek naudosim shella), ir mount'insim flash drive ant linux (slackware 10.2 distribucijos).
Kaip as mountinau flash drive:
1. pasileidau konsole, su root teisemis (naudojam "su" komanda)
2. ikisau flash drive i usb lizda
3. su "dmesg | tail" komanda issivedziau informacija apie prijungta hardware i ekrana. Stai ka pamaciau:

Kodas: Pasirinkti visus

scsi1 : SCSI emulation for USB Mass Storage devices
  Vendor:           Model:                   Rev:
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0
SCSI device sda: 503521 512-byte hdwr sectors (258 MB)
sda: Write Protect is off
 sda: sda1 sda2 sda3 sda4
WARNING: USB Mass Storage data integrity not assured
USB Mass Storage device found at 2
USB Mass Storage support registered.
Atrodo rado kazkoki usb irengini, 258 MB talpos...
4. sukuriam kataloga "mkdir /mnt/usb".
5. Mount'inam flash'a:

Kodas: Pasirinkti visus

root@browser:/# mount /dev/sda4 /mnt/usb
Patikrinam:

Kodas: Pasirinkti visus

root@browser:/# cd /mnt/usb
root@browser:/mnt/usb# ls
Access Uzduotis.pdf     GrafineSasajatask.doc  Muzonas           SQL uzduotys.doc          d            laboras2  sprendimo_pvz.pdf
AccessTeorija.pdf       IFlasha                OsLabDarbNr3.doc  Tomolab                   infla6.arj   programa  sql
Duomenubziulabdarb.mdb  KE2LAIMONAS            SQL atsakymai     U?duo?i? formuluot?s.doc  lab2_pc.zip  project1
root@browser:/mnt/usb#   
Viskas. Jei norit flash isimt:

Kodas: Pasirinkti visus

root@browser:/mnt# umount /mnt/usb
Ir tada istraukiat savo flash drive...
Mūsų darbas tamsoje -
Mes darome tai, ką mokam,
Atiduodame tai, ką mokam,
Mūsų darbas - tamsoje.
Abejonės virto aistra,
Aistra gi - ištirpo laisvėje.
Visa kita - menas
Išlikt savim beprotybėje.

brain5ide
profesionalas
profesionalas
Pranešimai:2030
Užsiregistravo:2004 12 01 19:05

#3 Standartinė brain5ide » 2006 04 19 21:20

Gaila, kad draugas GODhack yra pažadėjęs čia neužsukti...
Never argue with an idiot. They bring you down to their level and beat you with experience.

Ramex
naujokas
naujokas
Pranešimai:17
Užsiregistravo:2006 04 24 15:25

shell

#4 Standartinė Ramex » 2006 04 24 17:43

na as pabandziau, tikrai veikia ir kitas shell. bet gal paaiskintum, koks tarp ju skirtumas, ir ar verta naudot kuri kita shell nei standartini..?
na prie to pacio dar viena klausima. na as naudojau anksciau ubuntu, ir pvz jei neleisdavo tarkim redaguot kokio sisteminio failo tai naudodavau komanda sudo ir viska leisdavo. taciau ant mandriva sudo neveikia. ar yra alternatyva?

brain5ide
profesionalas
profesionalas
Pranešimai:2030
Užsiregistravo:2004 12 01 19:05

#5 Standartinė brain5ide » 2006 04 24 18:19

Skirtingi shellai turi skirtingų papildomų funkcijų. Bet kokiu atveju shellas skirtas sistemai valdyti, taigi neturėtų būti labai sunku pereiti nuo vieno prie kito.
Never argue with an idiot. They bring you down to their level and beat you with experience.

untitled
naujokas
naujokas
Pranešimai:15
Užsiregistravo:2006 03 13 12:36

Re: shell

#6 Standartinė untitled » 2006 04 24 18:20

Ramex rašė:na prie to pacio dar viena klausima. na as naudojau anksciau ubuntu, ir pvz jei neleisdavo tarkim redaguot kokio sisteminio failo tai naudodavau komanda sudo ir viska leisdavo. taciau ant mandriva sudo neveikia. ar yra alternatyva?
Rašai "su" įvedi root passw ir redaguoji failus root teisėmis. Ant Ubuntu truputi kitaip padaryta.

Ramex
naujokas
naujokas
Pranešimai:17
Užsiregistravo:2006 04 24 15:25

shell

#7 Standartinė Ramex » 2006 04 24 20:03

dekui uz atsakymus...
o dar brain5ide: kaip galima butu suzinot apie tas papildomas funkcijas, na kokios yra?

redaguota------------------------------------------------------------------------------------------------------------------
atsiprasau, pirma parasiau, paskui pagalvojau :D juk turbut visuose shell yra funkcija help... :D

brain5ide
profesionalas
profesionalas
Pranešimai:2030
Užsiregistravo:2004 12 01 19:05

#8 Standartinė brain5ide » 2006 04 24 20:27

Jo, be to yra google. Kiekvienas shell'as - tai atskiras projektas taigi google turėtų rasti jų homepage'us. Na aišku kai kurie shell'ai gali būti ir nebeplėtojami, bet info vis vien turetum rasti. Google is your friend.
Never argue with an idiot. They bring you down to their level and beat you with experience.

Skelbti atsakymą

Grįžti į

Dabar prisijungę

Vartotojai naršantys šį forumą: 0 ir 0 svečių