Unix shell
Unix shell _ ბრძანებების ინტერპრეტატორი ( command-line interpreter[1] იგივე CLI ), ესაა პროგრამა, რომელიც მომხმარებლის მიერ აკრეფილ ბრძანებას განმარტავს ოპერაციული სისტემისთვის გასაგებ ენაზე და გადასცემს მას შესასრულებლად.
მისი მეშვეობით მომხმარებელს შეუძლია ბირთვთან (kernel) მუშაობა, ბირთვი კი თავის მხრივ, კომპიუტერის პროგრამული მხარის (software) ფიზიკურ მოწყობილობებთან (hardware) დამაკავშირებელი პროგრამაა. მასზე პირდაპირი წვდომის საშუალება, shell_ის გვერდის ავლით, მომხარებელს არ აქვს.
ბრძანებების ნებისმიერი ინტერპრეტატორი მუშაობისას საბოლოო ჯამში იყენებს ერთ მარტივ ალგორითმს:
# აჩვენებს მოკლე ტექსტურ გზავნილს ბრძანებათა ხაზის დასაწყისში, რაც ნიშნავს, რომ იგი მზადაა ბრძანების მისაღებად (prompt)
# კითხულობს მომხმარებლის მიერ აკრეფილ მიმდინარე ბრძანებას
# ეშვება მითითებული ბრძანება
გრაფიკული და არაგრაფიკული გარემო
shell_ის გამოყენება შესაძლებელია როგორც არაგრაფიკულ, ასევე გრაფიკულ გარემოში.
- პირველ შემხვევაში გამოიყენება ვირტუალური ტერმინალი. მის გასახსნელად საჭიროა
ctrl+alt+F1
კლავიშების კომბინაცია, დასახურად კიctrl+alt+F2
ანctrl+alt+F7
.
- მეორე შემთხვევაში კი გამოიყენება ტერმინალის ემულატორი, ეს აპლიკაცია გრაფიკულ რეჟიმში მუშაობს shell_თან. როგორც წესი, თავიდანვე დაყენებულია Xterm, Gnome Shell ან Konsole, თუმცა მომხმარებელთა გემოვნებიდან და მოთხოვნებიდან გამომდინარე პოპულარულია[2] guake, Terminator, tilda და სხვ. ისინი განსხვავდებიან დიზაინითა და შესალებლობებით.
ინტერაქტიულობა
shell_თან შესაძლებელია ინტერაქტიულად მუშაობა, იგი კითხულობს ბრძანებებს სტანდარტული შესასვლელიდან, აბრუნებს შედეგს და ელოდება ახალ ბრძანებას. ასევე თუ Mv , cp, rm და სხვ. ბრძანებებთან -i ( --interactive ) პარამეტრის გამოყენებისას shell_ი სვამს კითხვას, ნამდვილად სურს თუ არა მომხმარებელს ბრძანების შესრულება და მხოლოდ დასტურის მიღების შემთხვევაში განაგრძობს მუშაობას.
user ~>> rm -i file.txt
rm: remove regular empty file 'file.txt'? Yes
არაინტერაქტიულ რეჟიმში მუშაობისას კი შესაძლებელია სკირიპტის[3] გამოყენება, რაც არაფერია თუ არა ერთ ფაილში მოქცეული ბრძანებების ერთობლიობა. არაინტერაქტიულობის მაგალითია დირექტორია resume.d_ში არსებული სკრიპტები, რომლებიც ავტომატურად ეშვებიან ოპერაციული სისტემის გამორთვისას და არანაირ გამაფრთხილებელ შეტყობინებას არ აგზავნიან. ამ რეჟიმში გაშვებულია ფონური პროცესებიც, რომლებიც მომხმარებელთა ჩარევას არ საჭიროებენ და არანაირი ინტერაქცია არ აქვთ მათთან.
login shell და non-login shell
მომხმარებლის გარემოს ქმნის გარკვეულ ფაილებში ჩაწერილი მონაცემები, ინტერპრეტატორების მიხედვით მათი დასახელება განსხვავებულია, მაგრამ მსგავსია დანიშნულება. ამ ფაილების დახმარებით თითოეულ მომხმარებელს უნდა შეეძლოს თავისზე მორგებული, კომფორტული გარემოს შექმნა. როცა კონკრეტული მომხმარებელი შედის სისტემაში თავისი სახელითა და პაროლით, იკითხება მისთვის განკუთვნილ ფაილში ჩაწერილი ინსტრუქციები. ისინი განსაზღვრავენ როგორი უნდა იყოს მოსაწვევი ფრაზა, მის მიერ შექმნილ ფაილებზე წვდომის ატრიბუტები (umask) და აშ.
თუ სისტემაში შესასვლელად გამოყენებულია მომხმარებლის სახელი და პაროლი (login shell), მაშინ ინტერაქტიული შელისთვის Bourne_თან თავსებადი ინტერპრეტატორები წაიკითხავენ /etc/profile და ~/.profile.
აქედან ~/.profile_ში ცლილებების შეტანა მომხმარებელს თავად შეუძლია, რადგან ისაა მისი მფლობელი, ხოლო /etc/profile_ში კი მხოლოდ root_ს.
😜user ~>> ls -l /etc/profile ~/.profile
-rw-r--r-- 1 root root 575 Oct 22 2015 /etc/profile
-rw-r--r-- 1 user user 655 Aug 5 14:11 /home/user/.profile
თუ მომხმარებელი, პირობითად user1 შეიყვანს თავის საიდენტიფიკაციო მონაცემებს, მაშინ მის პირად დირექტორიაში განთავსებული /home/user1/.profile წაიკითხება, ხოლო თუ user2, მაშინ ცხადია /home/user2/.profile . ფაილების დასახელებები იდენტურია, თუმცა ისინი სხვდასხვა დირექტორიებშია გადანაწილებული და განსხვავებული შიგთავსიც აქვთ, ამიტომაცაა მომხმარებლებისთვის შესაძლებელი ინდივიდუალური გარემოს შექმნა.
ზემოთ განხილულია login shell_ი, მაგრამ თუ იდენტიფიკაციის გარეშე შევდივართ (non-login shell) , ვთქვათ გრაფიკულ გარემოში, ცხადია, ასეთი გარემო საერთო გამოყენებისთვის იქნება განკუთვინილი, ამიტომ საჭიროა სხვა ფაილების წაკითხვა, Bourne_თან თავსებადი ინტერპრეტატორებისთვის ესენი იქნებიან /etc/bashrc და ~/.bashrc.
ინტერპრეტატორები
პირველი shell
1917 წელს კენ ტომპსონმა (Ken Thompson ) Bell Labs_ში შექნა პირველი ინტერპრეტატორი სახელწოდებით Thompson shell[4]. მას გააჩნდა ისეთი მახასიათებლები, რომლებიც მოგვიანებით საერთო გახდა UNIX-ის მსგავსი ოპერაციული სისტემებისთვის. მათ შორის მილი (pipeline), if და goto, ასევე ფაილების დასახელებებზე არა სრული, არამედ ცალკეული სიმბოლოებით მანიპულირების შესაძლებლობა, მაგალითად
😜 user ~>> touch test_file{1..10}.html.txt
ls test_file*.html.txt
test_file10.html.txt test_file2.html.txt test_file4.html.txt test_file6.html.txt test_file8.html.txt
test_file1.html.txt test_file3.html.txt test_file5.html.txt test_file7.html.txt test_file9.html.txt
Bash
Bash _ Bourne shell[5]_ის მოდელზე დაფუძნებული დისტრიბუტივია, რომელმაც მისი შესაძლებლობები მნიშვნელოვნად გააუმჯობესა. იგი თავისუფალი პროგრამაა GNU General Public License_ით.
ბრაიან ფოქსმა ის 1988 წელს პირველად გამოაქვეყნა Free Software Foundation_ის სახელით და მაშინვე ფართო აღიარება მოიპოვა. Bash_ის ბოლო სტაბილური ვერსია 5.0 გამოვიდა 2019 წლის 7 იანვარს.
Bash თავისთავად დაყენებულია UNIX_ის სისტემებზე, განსაკუთრებით ხშირად კი GNU/Linux_ზე, ასევე Mac OS X_ზე. გამოყენებულია Microsoft Windows_ზეც, Cygwin_ის პროექტის ფარგლებში.
სახელწოდება Bash Bourne-Again shell_ის აბრევიატურაა , ეს სიტყვების თამაშია და ითარგმნება როგორც << ისევ Bourne >>, მაგრამ ინგლისურად წარმოთქმისას ძალიან ჰგავს << born again >> რაც თავიდან დაბადებას, რეინკარნაციას ნიშნავს.
Bash_ის მიერ შემოთავაზებული გაუმჯობესებული მახასიათებლებია:
- ბრძანებების ხაზის რედაქტირება
- ბრძანებების ისტორიის ფაილის შეუზღუდავი ზომა
- shell_ის ფუნქციები და Alias
- ინდექსიანი მასივების შეუზღუდავი ზომა
- ინტეგრალური გამოთვლა ნებისმიერ ბაზაში 2-დან 64-მდე
სხვა ინტერპრეტატორები
ყველაზე გავლენიანი და გავრცელებული ინტერპრეტატორები არიან C shell და Bourne shell. ისინი გახდნენ მოდელები სხვა მრავალი shell_ისთვის, როგორებიცაა
- Debian Almquist shell (dash)_ash_ის თანამედროვე ჩანაცვლება Debian_სა და Ubuntu_ში
- Korn shell (ksh)_ დეივიდ კორნის მიერ დაწერილი ინტერპრეტატორი Bourne_ის ბაზაზე
- Public domain Korn shell (pdksh)
- MirBSD Korn shell (mksh)_ OpenBSD /bin/ksh_ისა და pdksh_ის მემკვიდრე
- Z shell (zsh)_ შედარებით ახალი shell_ი , რომელიც არაა თავსებადი bash_თან
ბრძანებების ინტერპრეტატორები, რომლებიც არ ეყრდნობიან C shell_ის და Bourne shell _ის მოდელებს[6]:
- es – A functional programming rc_ 90-იანი წლების შუა ხანებში დაწერილი ინტერპრეტატორი
- Friendly interactive shell (fish) – პირველად გამოვიდა 2005 წელს.
- PowerShell– An object-oriented shell.
- A Scheme Shell (scsh)
- wish – A windowing shell for Tcl/Tk.
კონფიგურაციის ფაილები
ცხრილში ნაჩვენებია ცნობილი ინტერპრეტატორები და მათი კონფიგურაციის ფაილები.
sh | ksh | csh | tcsh | bash | zsh | |
---|---|---|---|---|---|---|
/etc/.login | login | login | ||||
/etc/csh.cshrc | yes | yes | ||||
/etc/csh.login | login | login | ||||
~/.tcshrc | yes | |||||
~/.cshrc | yes | yes | ||||
~/etc/ksh.kshrc | int. | |||||
/etc/sh.shrc | int. | |||||
~/.kshrc[7] | int.[8] | int. | int. | |||
~/.login | login | login | ||||
~/.logout | login | login | ||||
/etc/profile | login | login | login | login | ||
~/.profile | login | login | login | login | ||
~/.bash_profile | login | |||||
~/.bash_login | login | |||||
~/.bash_logout | login | |||||
~/.bashrc | int.+n/login | |||||
/etc/zshenv | yes | |||||
/etc/zprofile | login | |||||
/etc/zshrc | int. | |||||
/etc/zlogin | login | |||||
/etc/zlogout | login | |||||
~/.zshenv | yes | |||||
~/.zprofile | login | |||||
~/.zshrc | int. | |||||
~/.zlogin | login |
განმარტება:
- ცარიელი უჯრა ნიშნავს, რომ ინტერპრეტატორი არ კითხულობს მითითებულ ფაილს
- yes _ ფაილი ყოველთვის წაიკითხება ინტერპრეტატორის მიერ
- login _ ფაილი წაიკითხება თუ ინტერპრეტატორი login shell_ია
- n/login _ ფაილი წაიკითხება თუ ინტერპრეტატორი non-login shell_ია
- int. _ ფაილი წაიკითხება თუ ინტერპრეტატორი ინტერაქტიულია
სქოლიო
- ↑ Unix and Multics Tom Van Vleck (1995-02-05)
- ↑ Terminal emulator
- ↑ "The Unix Shell" Bourne, Stephen R. (October 1983)
- ↑ "Introduction to the Unix Shell history" Nikolai Bezroukov (2015-08-13)
- ↑ "Bourne shell, or sh" Interview with Steve Bourne
- ↑ "FreeBSD Ports: Shells" Freebsd.org. 2014-03-30
- ↑ Harley Hahn's Guide to Unix and Linux Harley Hahn
- ↑ Shell Command Language