[phpBB Debug] PHP Warning: in file [ROOT]/viewtopic.php on line 22: include(./includes/bbcode.php): failed to open stream: No such file or directory
[phpBB Debug] PHP Warning: in file [ROOT]/viewtopic.php on line 22: include(): Failed opening './includes/bbcode.php' for inclusion (include_path='.:/opt/alt/php74/usr/share/pear')
Straipsniai.lt •Unix shell
Puslapis 11

Unix shell

Parašytas: 2006 04 08 15:56
Lioniax
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/

Parašytas: 2006 04 19 20:20
Lioniax
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...

Parašytas: 2006 04 19 21:20
brain5ide
Gaila, kad draugas GODhack yra pažadėjęs čia neužsukti...

shell

Parašytas: 2006 04 24 17:43
Ramex
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?

Parašytas: 2006 04 24 18:19
brain5ide
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.

Re: shell

Parašytas: 2006 04 24 18:20
untitled
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.

shell

Parašytas: 2006 04 24 20:03
Ramex
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

Parašytas: 2006 04 24 20:27
brain5ide
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.