38-წუთიანი სამუშაო სესია იმ სააზროვნო მოდელზე, რომელიც Unix-ს გასაგებს ხდის: ყველაფერი ფაილია, თითოეული ინსტრუმენტი ერთ საქმეს აკეთებს, პაიპი კი მათ ნებისმიერ რამედ აწებებს. ნავიგაციიდან და უფლებებიდან პროცესებამდე, პაიპებამდე და ტექსტის ინსტრუმენტებამდე, რომლებიც სისწრაფეს გმატებთ.
გრაფიკული აპლიკაცია საშუალებას გაძლევთ, ერთ დროს ერთი ამოცანა შეასრულოთ დაწკაპუნებით. შელი კი მის ნაცვლად ამოცანების ენას გაძლევთ — რომ შეინახოთ ისინი, ხელახლა გაუშვათ და ერთმანეთს დააკავშიროთ. და ეს ყველაფერი ერთ მარტივ იდეას ეყრდნობა: ფაილები, დირექტორიები, მოწყობილობები და გაშვებული პროგრამებიც კი ერთი და იმავე პაწაწინა გზით მუშავდება.
bash ან zsh) პატარა ინტერპრეტატორია, რომელიც ამ ფანჯრის შიგნით მუშაობს — კითხულობს თქვენს ტექსტს და თქვენთვის ნამდვილ პროგრამას უშვებს.$PATH-ში ჩამოთვლილ დირექტორიებს — ეს უბრალოდ საძებნი დირექტორიების სიაა. აკრიფეთ git და ის თქვენთვის იპოვის /usr/bin/git-ს.ტერმინალი ფანჯარაა; მის შიგნით მყოფი შელი კითხულობს თქვენს ხაზს და უშვებს პროგრამას.
open, read, write, close.cat file.txt და cat /dev/null ერთნაირად — ორივე უბრალოდ ბაიტებია, რომელსაც კითხულობთ.ერთი პატარა API; ყველა რესურსი ბაიტების ნაკადად გამოიყურება.
სამივე ერთსა და იმავე ბრძანებებს უშვებს, რომლებსაც აქ ისწავლით. ისინი ძირითადად იმით განსხვავდებიან, რამდენად სასიამოვნოა მათში ყოველდღიური აკრეფა — რამდენად გეხმარებიან დასრულებაში, ისტორიასა და შემოთავაზებებში.
სტანდარტული შელი თითქმის ყველა Linux სერვერზე და ის, რასაც თითქმის ყველა გაკვეთილი და სკრიპტი გულისხმობს.
თქვენს bash ბრძანებებს თითქმის უცვლელად უშვებს, მაგრამ ამატებს ჭკვიან დასრულებას და თემებს (დანამატებით, როგორიცაა Oh My Zsh). ნაგულისხმევია macOS-ზე.
შექმნილია იმისთვის, რომ პირველივე გაშვებიდან სასიამოვნო იყოს: აკრეფისას ბრძანებებს გთავაზობთ და ხაზს ფერავს, რომ შეცდომები დაიჭიროთ — კონფიგურაცია არ სჭირდება.
როგორ ავირჩიოთ თქვენი სკრიპტები bash-ზე დაწერეთ, რომ ნებისმიერ მანქანაზე იმუშაოს. ყოველდღიური აკრეფისთვის კი zsh ან fish აირჩიეთ უკეთესი გამოცდილებისთვის — ნასწავლი ბრძანებები სამივეზე გადადის.
"Linux" სინამდვილეში მხოლოდ ბირთვია. თქვენ კი დისტრიბუციას აყენებთ — იმავე ბირთვს, შეფუთულს პაკეტების მენეჯერით, ნაგულისხმევი ინსტრუმენტებითა და რელიზების პოლიტიკით. აირჩიეთ შეფუთვა, რომელიც თქვენს გუნდს უხდება; ქვემოთ არსებული შელი ყველგან იდენტურია.
მეგობრული ნაგულისხმევი არჩევანი. უზარმაზარი საზოგადოება, პაკეტების უამრავი ნაკრები, კლდესავით მყარი. Ubuntu ამატებს კომერციულ მხარდაჭერას (Canonical) და პროგნოზირებად LTS რელიზებს — უსაფრთხო არჩევანი სერვერებისა და დესკტოპების უმეტესობისთვის.
საწარმოო შტო. RHEL გთავაზობთ ფასიან გრძელვადიან მხარდაჭერას; Rocky & Alma უფასო, ბაგ-ბაგზე გადაწყობილი ასლებია; Fedora კი სწრაფად მოძრავი წყაროა. აირჩიეთ იქ, სადაც მხარდაჭერა და სერტიფიცირებული სტაბილურობა მნიშვნელოვანია.
მინიმალური და თვითნაკეთი — სისტემას თავად აწყობთ და ის უწყვეტად ახლდება (rolling release). უახლესი და შესანიშნავად დოკუმენტირებული (Arch Wiki). შესანიშნავია კონტროლისთვის და იმის სასწავლად, როგორ ეწყობა Linux ერთმანეთს.
პაწაწინა და უსაფრთხოებაზე ორიენტირებული (~5 MB). აგებულია musl libc-სა და busybox-ზე — ფაქტობრივი საბაზისო იმიჯი კონტეინერებისთვის, სადაც ყოველი მეგაბაიტი და CVE ითვლება.
ჰგავს სხვადასხვა სასურსათო ქსელს: საკვები ერთი და იგივეა, მხოლოდ თაროები და სალარო განსხვავდება.
დისკის ასოები არ არსებობს. ყოველი დისკი, USB მეხსიერება და ქსელური მონტაჟი ერთ ხეზე ეკიდება, რომელიც /-დან იწყება. აითვისეთ რამდენიმე მოძრაობა და აღარ იფიქრებთ, რა სად არის.
/-დან იწყება (/etc/hosts); ფარდობითი გზები კი იქიდან, სადაც დგახართ — თქვენი სამუშაო დირექტორიიდან (pwd).ყველაფერი /-დან მოდის. ~ მალსახმობია თქვენს /home/<you>-ზე.
. — აქ (მიმდინარე დირექტორია)... — ერთი დონით ზემოთ.~ — თქვენი საშინაო დირექტორია.- — დირექტორია, სადაც წეღან იყავით.pwd გეუბნებათ სად ხართ, ls გაჩვენებთ რა არის აქ, cd კი გადაგაადგილებთ.
უბრალო ls დეტალებს მალავს. ფლაგები, რომლებშიც იცხოვრებთ: -l გრძელი ფორმა, -a დამალულების ჩათვლით (წერტილიანი ფაილები), -h ადამიანური ზომები, -t ახლები პირველად.
შელი *, ? და […] სიმბოლოებს შესაბამის ფაილთა სახელებად შლის მანამ, სანამ ბრძანება გაეშვება — ასე ნებისმიერი ბრძანება უფასოდ იღებს შაბლონურ ძებნას.
ყოველ ფაილს აქვს მფლობელი, ჯგუფი და უფლებების სამი ნაკრები — მფლობელისთვის, ჯგუფისთვის და ყველა დანარჩენისთვის. როცა rwxr-xr-x-ს ერთი შეხედვით წაიკითხავთ, უფლებები საშიში აღარ იქნება.
rwxr-xr-x-ში.-rwxr-xr-x = 755. რვაობითი უბრალოდ r=4, w=2, x=1-ის ჯამია თითო აუდიტორიისთვის.
დააყენეთ ბიტები რიცხობრივად (755) ან შეასწორეთ ასოებით (+x, g-w). დირექტორიებზე x ნიშნავს "შესვლის უფლებას", და არა "გაშვების უფლებას".
chown user:group ფაილს ახალ მფლობელს და/ან ჯგუფს გადასცემს. -R რეკურსიულად გადის დირექტორიის ხეს. ჩვეულებრივ sudo სჭირდება.
root უფლებების ყველა შემოწმებას გვერდს უვლის. sudo ერთ ბრძანებას უშვებს root-ის სახელით — ისესხეთ ძალა და დააბრუნეთ. ის ჯობია, ვიდრე root-ით შესვლა.
ჰგავს ოფისს: მფლობელს გასაღები აქვს (rwx), მის გუნდს ოთახში შესვლა შეუძლია (r-x), საზოგადოებას კი მხოლოდ კარზე დაკიდებული ტაბულის წაკითხვა (r--). 777 ყველა კარს ღიად ტოვებს.
გაშვებული პროგრამა არის პროცესი რიცხვითი PID-ით. პროცესებს სიგნალების — პატარა, დასახელებული შეტყობინებების — გაგზავნით მართავთ, ხოლო რამდენიმეს ერთდროულად ჯობებით ახერხებთ.
SIGTERM (გაჩერდი, თუ შეიძლება), SIGKILL (გაჩერდი ახლავე, კითხვების გარეშე), SIGINT (Ctrl-C), SIGHUP (ტერმინალი დაიხურა).SIGTERM თავაზიანად ითხოვს და პროცესს დასუფთავების საშუალებას აძლევს. SIGKILL-ის დაჭერა შეუძლებელია — მხოლოდ უკიდურეს შემთხვევაში.
ps aux — ყოველი პროცესის სურათი (მფლობელი, PID, CPU, მეხსიერება, ბრძანება).top / htop — ცოცხალი ხედი; დაალაგეთ CPU-თი ან მეხსიერებით.pgrep nginx — იპოვეთ PID-ები სახელით; pkill nginx მათ სიგნალს უგზავნის.kill -l — ჩამოთვლის ყველა სიგნალს და მის ნომერს.& ბრძანებას უკანა პლანზე უშვებს. Ctrl-Z წინა პლანზე მყოფს აჩერებს; bg/fg კი მას უკან ან წინ აგრძელებს.
ტერმინალის დახურვა მის შვილებს SIGHUP-ს უგზავნის. nohup (ან ტერმინალის მულტიპლექსორი, როგორიცაა tmux) ამოცანას ტერმინალისგან წყვეტს, რომ მან მუშაობა განაგრძოს.
ყოველ პროგრამას სამი ნაკადი აქვს: stdin, stdout და stderr. გადამისამართება ცვლის, სად მიდიან ისინი; პაიპი კი ერთი პროგრამის გამონატანს პირდაპირ მეორის შემონატანში აერთებს. ესაა Unix-ის მთელი სუპერძალა.
პაიპი აერთებს stdout → stdin-ს. გაითვალისწინეთ: stderr ნაგულისხმევად არ გადადის პაიპში — გავრცელებული ხაფანგია.
tee ნაკადს ყოფს ფაილში და შემდგომაც. xargs stdin-ს ბრძანების არგუმენტებად აქცევს — ხიდი იმ ინსტრუმენტებისთვის, რომლებიც არგუმენტებს კითხულობენ და არა stdin-ს.
grep პოულობს ხაზებს, sed არედაქტირებს ნაკადებს, awk სვეტებში მუშაობს, find კი ხეს გადის. ისწავლეთ მათი ძირითადი ფლაგები და თითქმის ნებისმიერ "სად / რა / რამდენი" კითხვას სკრიპტის დაწერის გარეშე უპასუხებთ.
-r რეკურსია, -i რეგისტრის უგულებელყოფა, -n ხაზების ნომრები, -v ინვერსია.-i ფაილებს გადაწერს — ჯერ მის გარეშე გატესტეთ ან სარეზერვო ასლი შეინახეთ (-i.bak).$0 მთელი ხაზია; $1…$n ველებია; -F გამყოფს აყენებს.-exec … ან | xargs, რომ თითო დამთხვევაზე ბრძანება გაუშვათ.uniq მხოლოდ მეზობელ დუბლიკატებს კუმშავს, ამიტომ sort ყოველთვის წინ მოდის.cat-ის ხელახლა გაშვების ნაცვლად.-f მიჰყვება ფაილს; -F ლოგის როტაციასაც გადაიტანს; გაატარეთ grep-ში, რომ მხოლოდ მნიშვნელოვანს მიჰყვეთ. გასაჩერებლად Ctrl-C.რამდენიმე ცუდი → კარგი ჩანაცვლება, რომელიც ყველას ისტორიაში გვხვდება, შემდეგ კი ხუთი წესი, რომელსაც თან წაიღებთ.
|-ით. ტექსტი მათ შორის უნივერსალური ინტერფეისია.644/755); არასდროს chmod 777.SIGTERM პროცესს დასუფთავების საშუალებას აძლევს; SIGKILL (-9) ნამდვილი გაჭედვისთვის შემოინახეთ.ყოველი სკრიპტი დაიწყეთ set -euo pipefail-ით: გამოსვლა შეცდომებზე (-e), დაუყენებელი ცვლადების შეცდომად ჩათვლა (-u) და პაიპლაინის ჩავარდნა, თუ რომელიმე საფეხური ჩავარდა (-o pipefail). ეს ჩუმ გაფუჭებას ხმამაღალ, ადრეულ გაჩერებად აქცევს.
"წერეთ პროგრამები, რომლებიც ერთ საქმეს კარგად აკეთებენ. წერეთ პროგრამები, რომლებიც ერთად მუშაობენ. აქციეთ ტექსტი უნივერსალურ ინტერფეისად."
— Doug McIlroy, Unix-ის ფილოსოფია
ხუთი სწრაფი კითხვა შელზე, უფლებებზე, პროცესებზე, პაიპებსა და ტექსტის ხელსაწყოებზე — მყისიერი უკუკავშირი, ავტორიზაციის გარეშე.
ნავიგაცია ← → ღილაკებით ან სქროლით · ბიბლიოთეკაში დაბრუნება