/blog/2022-05-09... > _
Image of Linux BASH logo and title

ისწავლეთ Linux & Bash

Shell (გარსი)

რა არის შელი? მარტივად რომ ვთქვათ, შელი არის პროგრამა, რომელიც კლავიატურიდან იღებს ბრძანებებს და მას ოპერატიულ სისტემას გადასცემს შესასრულებლად. ალბათ კომპიუტერში გინახავთ პროგრამები, სახელად “Terminal”, “Console”, “CMD”, “PowerShell”. ესენი პროგრამებია, რომლებიც შენთვის შელს ხსნიან.

რაში გვჭირდება შელი? ამის სადემონსტრაციოდ მარტივ მაგალითს მოგიყვანთ ჩემი გამოცდილებიდან. ახალი ტექნოლოგიის ვიდეო გაკვეთილები გადმოვწერე. ვიდეოები თემის მიხედვით დაყოფილი იყო ფაილებად. თითო ფაილში იქნებოდა 20-მდე ვიდეო mp4 ფორმატით, რომელსაც ასევე ახლდა .srt ფორმატის ფაილები სუბტიტრებისთვის. საქმე ისაა, რომ მე სუბტიტრები საერთოდ არ მჭირდებოდა - ის ტყუილად იკავებდა ფოლდერში სივრცეს და სასწავლი მასალაც თითქოს ორჯერ დიდი ჩანდა, ვიდრე ეს სინამდვილეში იყო. ამ სუბტიტრების ფაილების წასაშლელად ერთი მარტივი გზა ვიცი, თუმცა ბევრი თქვენგანი ალბათ შემდეგნაირად მოიქცეოდა: გახსნიდით იმ ფოლდერს (გრაფიკული აპლიკაციით) სადაც ვიდეოებია მოთავსებული, ctrl ღილაკითა და მაუსზე დაკლიკებით სათითაოდ აარჩევდით სუბტიტრების ფაილებს, შემდეგ მარჯვენა კლიკით გახსნიდით მენიუს და იქედან დააჭერდით წაშლის ღილაკს. ზოგს შეიძლება ჯერ ფოლდერი ფაილების ტიპის მიხედვით დაესორტირებინა და ასე უფრო მალე მოენიშნა სუბტიტრების ფაილები, მაგრამ წარმოიდგინეთ და ამის ათასჯერ უფრო მარტივად გაკეთება შეიძლება. ტერმინალში გავხსნით ვიდეოების ფოლდერს და დავწერთ:

rm *.srt

ეს ბრძანება მიმდინარე ფოლდერში წაშლის ყველა ფაილს, რომელიც .srt-ით ბოლოვდება.

ეს არის შელის და ზოგადად კომპიუტერის ნამდვილი ხიბლი: ის რუტინულ და მოსაწყენ სამუშაოს ჩვენ მაგივრად აკეთებს. ბევრი თანამედროვე პროგრამა, რომელიც ფართო აუდიტორიაზეა გათვლილი არათუ საშუალებას არ გვაძლევს, რომ საქმე გავიმარტივოთ, არამედ, ხშირ შემთხვევაში, საქმეს გვირთულებს კიდევაც.

შელის საშუალებით გვაქვს ულევი პოტენციალი, რომლითაც კომპიუტერს შეგვიძლია გავაკეთებინოთ ზუსტად ის, რაც ჩვენ გვინდა და არ დავჯერდეთ იმ შეზღუდული ფუნქციების რეპერტუარს, რომელსაც რომელიმე გრაფიკული აპლიკაცია გვთავაზობს. მთავარი შეზღუდვა მხოლოდ ადამიანის ცოდნა და წარმოსახვაა. მოდით, სწორედ ცოდნის ასპექტს მივხედოთ და დარწმუნებული, ვარ წარმოსახვასაც გავამდიდრებთ, როცა ნახავთ როგორი ძლევამოსილები გახდებით ამ ცოდნით.

გაითვალისწინეთ, რომ შელი ნებისმიერი ადამიანისთვის სასარგებლოა, იქნება ეს მორიგი ადამიანი, რომელსაც კომპიუტერზე ოპერაციების სწრაფად და ეფექტურად შესრულება უნდა თუ პროგრამისტი. პროგრამისტებისთვის შელი, რა თქმა უნდა, განსაკუთრებით მარგებელია, რადგან მისი გამოყენების სწავლა, ერთი მხრივ, უფრო მარტივია, ხოლო მეორე მხრივ, რადგან ისინი მნიშვნელოვან დროს უთმობენ კომპიუტერზე მუშაობას, შეძლებენ უფრო სიღრმისეულად შეისწავლონ თავიანთი ოპერატიული სისტემა და მოიაწყონ ის ზუსტად ისე, როგორც მათ მოესურვებათ.

ამ (და სავარაუდოდ მომავალ) გაკვეთილში ვისწავლით bash-ის (Bourne Again Shell) გამოყენებას, რომელიც მრავალთაგან ერთ-ერთი შელია. იგი ინტეგრირებულია თითქმის ყველა ლინუქსის დისტრიბუციაში.

შენიშვნა: ამ გაკვეთილს თავისუფლად შეგიძლიათ მიყვეთ MacOS-ის მომხმარებლებიც, სადაც შელი არის zsh (ან ძველ მოდელებში bash). ძირითადად, ბევრი რამ, რასაც bash-ზე განვიხილავთ, გავრცელდება zsh-ზეც.

ეს გაკვეთილი ეფუძნება linuxjourney.com-ზე არსებულ მასალას.

დავიწყოთ შელის განხილვა. გახსენით თქვენთვის ხელმისაწვდომი ტერმინალი. პირველი, რასაც დაინახავთ, არის პრომპტი, რომელიც კონკრეტული შელისა და ოპერატიული სისტემისთვის განსხვავებულია, თუმცა ის ერთ ფორმატს მიყვება:

მომხმარებელი@მოწყობილობა:მიმდინარე_დირექტორია

მაგალითად:

[pridon@laptop:~/Documents]$

პრომპტის ბოლოს $ დამახასიათებელია bash-ისთვის. ის პრომპტის ნაწილია და მას ჩვენ ბრძანებაში არ ვწერთ. ის დოკუმენტაციებში იმის მისანიშნებლად წერია ხოლმე, რომ მოცემული ბრძანება შელში ხორციელდება.

გავცეთ მარტივი ბრძანება echo. იგი ეკრანზე ამობეჭდავს იმ ტექსტს, რომელსაც ჩვენ არგუმენტად მივაწოდებთ.

$ echo Hello World!

pwd (მუშა დირექტორიის ამობეჭდვა)

ლინუქსში ყველაფერი ფაილია. ის ბრძანებაც კი, რომელსაც ჩვენ შელს ვაძლევთ, გადაეცემა კონკრეტულ ფაილს, სადაც ის ინერპრეტირდება: /usr/bin/bash. ამას უკეთ გავიაზრებთ მოგვიანებით, როცა ლინუქსს სიღრმისეულად განვიხილავთ. ყველა ფაილი ორგანიზებულია იერარქიულად, როგორც ხე. უპირველეს დირექტორიას ეწოდება root, იგივე ფესვი ან ფუძე. ამ დირექტორიას შიგნით აქვს მრავალი ფოლდერი და ფაილები. მაგალითისთვის, დირექტორიის ხე ასე გამოიყურება:

/
|-- bin
|   |-- file1
|   |-- file2
|-- etc
|   |-- file3
|   `-- directory1
|       |-- file4
|       `-- file5
|-- home
|-- var

ამ ფაილების ადგილმდებარეობას უწოდებენ path-ს, ბილიკს ან გზას. თუ გვაქვს ფაილი სახელად file, რომელიც მოთავსებულია home ფოლდერში, მისი path იქნება: /home/file. აქედან გამომდინარე, რომ ავაგოთ სქემიდან file5-ის ბილიკი, გამოგვივა: /etc/directory1/file5.

ფაილთა სისტემაში ნავიგაცია, ისევე როგორც ცხოვრებაში, მარტივია როცა იცი სად ხარ და საით მიდიხარ. იმის გასარკვევად, თუ სად ხარ, შეგიძლია გამოიყენო pwd ბრძანება, რომელიც ნიშნავს შემდეგს: “Print working directory” (ამობეჭდე მუშა დირექტორია/ფოლდერი). ის გიჩვენებს იმ დირექტორიას, სადაც ამჟამად იმყოფები. გაითვალისწინე, რომ გზა (path) იწყება ფესვიდან.

$ pwd

აქვე აღვნიშნავ, რომ ~, რომელიც ჩვენს პრომპტში შეიძლება ჩანდეს, მიუთითებს /home/username დირექტორიაზე, შემოკლებული ფორმით. მაშასადამე, თუ ჩემი მომხმარებლის სახელია pridon, ~/Documents სინამდვილეში არის /home/pridon/Documents (იხილეთ cd-ს თავი მეტი ინფორმაციისთვის).

cd (დირექტორიაში გადანაცვლება)

რადგან უკვე ვიცით, სად ვიმყოფებით, ვნახოთ როგორ შეგვიძლია ფაილთა სისტემაში გადაადგილება. ჩვენ გადაადგილებისთვის გზის (path) გამოყენება გვჭირდება. არსებობს ორი განსხვავებული მეთოდი, რომლითაც შეგვიძლია გზის მითითება:

  • აბსოლუტური გზა: აბსოლუტური გზით, მისამართი იწყება ფესვიდან (root). იგი ჩვეულებრივ აღინიჭნება დახრილი ხაზით. ყოველთვის, როცა path იწყება /-ით, ეს იმას ნიშნავს, რომ ვიწყებთ root დირექტორიიდან. მაგალითად /home/pridon/Pictures/cats
  • ფარდობითი გზა: ეს არის გზა, რომელიც იმ დირექტორიიდან იწყება, რომელშიც ჩვენ ამჟამად ვიმყოფებით. მაგალითად, თუ მე ვიმყოფები /home/pridon/Pictures-ში, და მინდა გადავინაცვლო ფოლდერში, სახელად cats, რომელიც Pictures ფოლდერში იმყოფება, მაშინ მე არ მჭირდება ასე მთელი მისამართის დაკონკრეტება /home/pridon/Pictures/cats მე უბრალოდ შემიძლია გადავინაცვლო ამ გზის გამოყენებით cats/.

ახლა, რადგან უკვე ვიცით როგორ მუშაობს path, უბრალოდ გვჭირდება იმ ბრძანების გამოყენება, რომელიც კონკრეტულ დირექტორიაში გადაგვიყვანს. ეს ბრძანებაა cd, იგივე “change directory” (ფოლდერის/დირექტორიის შეცვლა).

$ cd /home/pridon/Pictures

ასე, ჩვენ გადავინაცვლეთ სხვა დირექტორიაში.

თუ, მაგალითად, მე ზემოთ ნaჩვენებ დირექტორიაში მაქვს ფოლდერი სახელად cats, ფარდობითი გზის მითითებით, შემიძლია იქ გადავინაცვლო შემდეგნაირად:

$ cd cats

აქ მე უბრალოდ ფოლდერის სახელი გამოვიყენე, და არ დავწერე აბსოლუტური გზა, რადგანაც უკვე ვიმყოფებოდი /home/pridon/Pictures-ში.

აბსოლუტური და ფარდობითი გზების წერა დამღლელი იქნებოდა, მაგრამ საბედნიეროდ არსებობს ხერხები გზის შესამოკლებლად:

  • . (ამჟამინდელი დირექტორია). ეს ის დირექტორიაა, რომელშიც ამჟამად ვიმყოფებით.
  • .. (მშობელი დირექტორია). ეს გადაგვიყვანს ერთი დირექტორიით ზემოთ.
  • ~ (home დირექტორია). ეს არის დირექტორია, რომელიც ინტერპრეტირდება როგორც “home directory”, მაგალითად /home/pridon.
  • - (წინა დირექტორია). ეს გადაგვიყვანს წინა დირექტორიაში, რომელშიც ვიმყოფებოდით.
$ cd .

$ cd ..

$ cd ~

$ cd -

რჩევა: ყველაზე სწრაფად home-ზე გადასასვლელად შეგვიძლია უბრალოდ დავწეროთ cd ყოველგვარი არგუმენტის გარეშე.

ls (დირექტორიათა სია)

სისტემაში გადაადგილება ვიცით. ახლა როგორ გავიგოთ რა ფაილები და ფოლდერებია ჩვენთვის ხელმისაწვდომი? ამ ეტაპზე ჩვენ სიბნელეში დავდივართ, მაგრამ შეგვიძლია დირექტორიას ნათელი მოვფინოთ ls ბრძანებით, რომელიც ჩამოგვიწერს ფოლდერში არსებული ფოლდერებისა და ფაილებს. ჩვეულებრივ, ეს ბრძანება ჩამოგვიწერს ფაილთა სიას იმ დირექტორიაში, რომელშიც ვიმყოფებით, მაგრამ შეგვიძლია დავაზუსტოთ, კონკრეტულად რა path-ის ფოლდერები და ფაილები გვინდა რომ ვნახოთ.

$ ls

$ ls /home/pridon

ეს ბრძანება დეტალურ ინფორმაციას გვაწვდის იმ ფაილებსა და ფოლდერების შესახებ, რომლებსაც ვუყურებთ.

გასათვალისწინებელია, რომ ბრძანება დირექტორიაში ყველა ფაილს ავტომატურად არ გამოაჩენს. ის ფაილები, რომლებიც იყება .-ით, დამალულებია, მაგრამ მათი გამოჩენა შეგვიძლია ls ბრძანებით, -a ფლაგის გატარებით (a ნიშნავს all-ს, ანუ “ყველას”).

$ ls -a

კიდევ ერთი გამოსადეგი ფლაგი გვაქვს ls-ისთვის: -l რომელიც ნიშნავს გრძელს ან ვრცელს (long). ეს გვიჩვენებს ფაილის დეტალურ სიას, ვრცელი ფორმით. ეს ინფორმაცია, მარცხნიდან მარჯვნივ, არის ფაილის უფლებები, კავშირების ოდენობა, მფლობელის სახელი, მფლობელის ჯგუფი, ფაილის ზომა, შექმნის ან ბოლო მოდიფიკაციის დრო და ფაილის/ფოლდერის სახელი.

$ ls -l

<br>

[pridon@laptop:~]$ ls -l

total 80

drwxr-x--- 7 pridon devgroup   4096 Nov 20 16:37 Desktop

drwxr-x--- 2 pridon devgroup   4096 Oct 19 10:46 Documents

drwxr-x--- 4 pridon devgroup   4096 Nov 20 09:30 Downloads

drwxr-x--- 2 pridon devgroup   4096 Oct  7 13:13 Music

drwxr-x--- 2 pridon devgroup   4096 Sep 21 14:02 Pictures

drwxr-x--- 2 pridon devgroup   4096 Jul 27 12:41 Public

drwxr-x--- 2 pridon devgroup   4096 Jul 27 12:41 Templates

drwxr-x--- 2 pridon devgroup   4096 Jul 27 12:41 Videos

ბრძანებებს გააჩნიათ ე.წ ფლაგები (flags) (ან არგუმენტები, პარამეტრები), რომლებიც დამატებით ფუნქციებს წარმოადგენენ. ჩვენ ცალცალკე განვიხილეთ -a და -l ფლაგები, მაგრამ მათი გაერთიანებაც შეგვიძლია, როგორც -la. ფლაგების თანმიმდევრობა განსაზღვრავს, ფუნქციების განხორციელების თანმიმდევრობას, მაგრამ ხშირ შემთხვევაში ამას დიდი მნიშვნელობა არ აქვს. ls -al იგივენაირად იმუშავებს.

$ ls -la

touch

ვისწავლოთ ფაილების შექმნა. touch ბრძანება საშუალებას გვაძლევს შევქმნათ ცარიელი ფაილი.

$ touch myfile

ამ ბრძანებით შეიქმნება ფაილი სახელად myfile (გამოიყენეთ ls ამის შესამოწმებლად). ეს ბრძანება ასევე გამოიყენება არსებული ფაილების მოდიფიკაციის დროის შესაცვლელადაც. სცადეთ - შეხედეთ ფაილებს ls -l-ით, რომელიმე აირჩიეთ, დაიმახსოვრეთ მისი დრო და მასზე გამოიყენეთ touch.

კიდევ ბევრი გზა არსებობს ფაილების შესაქმნელად, რომლებიც მოიცავენ გადამისამართებასა და ტექსტის ედიტორებს, მაგრამ ტექსტის მანიპულაცია ცალკე დიდი თემაა, რომელზეც მოგვიანებით გესაუბრებით.

file

წინა ნაწილში ჩვენ ვისწავლეთ touch. ცოტა ხნით ამ საკითხს დავუბრუნდეთ. შეამჩნიეთ, რომ ფაილის სახელი არ ექვემდებარებოდა დასახელების სტანდარტს, რომელიც შესაძლოა სხვა ოპერატიულ სისტემებზე, მაგალითად ვინდოუსზე გენახათ? ჩვეულებრივ, მოლოდინი გვაქვს, რომ ბანანი.jpg იქნება JPEG ტიპის სურათის ფაილი.

ლინუქსში ფაილების სახელები არ არის აუცილებელი ფაილის შიგთავსის განსაზღვრისთვის. შენ შეგიძლია შექმნა ფაილი სახელად სასაცილო.gif, რომელიც სინამდვილეში არ არის GIF.

იმის გასარკვევად, თუ რანაირი ფაილია რაიმე ფაილი, ჩვენ შეგვიძლია გამოვიყენოთ file ბრძანება. ის ფაილის შიგთავსს აღგვიწერს.

$ file something.jpg

cat

ვისწავლოთ ფაილების წაკითხვა. ამ შემთხვევაში გვაქვს ერთი მარტივი ბრძანება cat, რომელიც სიტყვა concatenate-ის (შეერთება) შემოკლებული ფორმაა. მას არამხოლოდ ფაილის შიგათავსის გადმოცემა შეუძლია, არამედ სხვადასხვა ფაილების კომბინაცია და მათი შიგთავსის ერთიანად გადმოცემა.

$ cat dogfile birdfile

ეს ბრძანება იდეალური არაა დიდი ზომის ფაილების დასათვალიერებლად, იგი განკუთვნილია პატარა ფაილების წასაკითხად. ბევრი სხვა ხელსაწყო არსებობს დიდი ტექსტური ფაილების სანახავად, მათ შორისაა less.

less

თუ დიდი ფაილების წაკითხვა გვაქვს განზრახული, less ბრძანება გამოგვადგება. მისი საშუალებით ტექსტი წარმოდგენილი იქნება გვერდებად, რაც საშუალებას გვაძლევს ტექსტში გადავადგილდეთ ერთი გვერდიდან მეორეზე.

სცადეთ ფაილის შიგთავსის გახსნა ამ ბრძანებით. less-ში გადაადგილება შესაძლებელია კლავიატურით.

$ less /home/pridon/Documents/large_text

გამოიყენეთ შემდეგი ღილაკები სანავიგაციოდ:

  • q - გამოიყენება less-დან გამოსასვლელად და შელში დასაბრუნებლად.
  • Page up, Page down - ზემოთ და ქვემოთ გადასასვლელად. ასევე გამოიყენება კლავიატურის ისრები.
  • g - გადაგვიყვანს ფაილის დასაწყისში
  • G - გადაგვიყვანს ფაილის ბოლოში
  • /search - გამოიყენება კონკრეტული ტექსტის მოსაძებნად ფაილში. საძიებო სიტყვებს წინ უნდა დავურთოთ /.
  • h - ხსნის დახმარების სექციას, რათა less-ში ვნახოთ, როგორ გამოვიყენოთ პროგრამა.

history

ჩვენს შელში არის შენახული იმ ბრძანებათა ისტორია, რომელიც ჩვენ აქამდე გამოგვიყენებია. ჩვენ შეგვიძლია შევხედოთ ამ ბრძანებებს. ეს ძალიან მოხერხებული ხელსაწყოა როცა იმ ბრძანების მოძებნა და ხელახლა გაშვება გვინდა, რომელიც აქამდე გამოგვიყენებია, მისი ხელახლა დაწერის გარეშე.

$ history

ეს ბრძანება გვაჩვენებს აქამდე გამოყენებული ბრძანებების სიას.

თუ გვინდა იმავე ბრძანების გაშვება, რაც ბოლოს განვახორციელეთ, შეგვიძლია უბრალოდ დავაჭიროთ ზედა ისარს კლავიატურაზე. ეს ბრძანების ჩასაწერ ველში ხელახლა განათავსებს უწინ გაშვებულ ბრძანებას.

თუ გვინდა ბოლო ბრძანების გამეორება, ასევე შეგვიძლია გამოვიყენოთ !!. თუ, ვთქვათ შელში გავეცით ბრძანება cat file1, შეგვიძლია პირდაპირ დავწოთ !! და იგივე ბრძანება გავიმეოროთ.

კიდევ ერთი ილეთი, რაც ისტორიას ეხება, არის ღილაკების კომბინაცია ctrl-R, ესაა შებრუნებული ძებნის ბრძანება. თუ ამ ღილაკებს დავაჭერთ და ჩავწერთ სასურველი ბრძანების ნაწილს, პროგრამა ამოგვიყრის მსგავს ბრძანებებს, რომლებიც აქამდე გამოგვიყენებია. ამ ბრძანებებს შორის ნავიგაცია იმავე ღილაკით შეგვიძლია. როცა ჩვენთვის სასურველ ბრძანებას მივაგნებთ, მის გასაშვებად ვაჭერთ enter-ს.

ამ ეტაპზე ჩვენი ტერმინალი ალბათ გადავსებულია. ჩვენ მისი გაწმენდა შეგვიძლია ბრძანებით:

$ clear

ან უფრო მარტივად, ღილაკების კომბინაციით: ctrl-L.

კიდევ ერთი ძალიან მნიშვნელოვანი საკითხი არის ავტო-შევსება. თუკი ჩვენ ბრძანების ნაწილის დაწერას დავიწყებთ და დავაჭერთ tab ღილაკს, შელი ამვომატურად შეგვივსებს ველს იმის მიხედვით, თუ რას მიაგნებს ის იმ დირექტორიაში, რომელშიც შენ ასრულებ ბრძანებას, ან არსებულ ბრძანებათა სიაში. მაგალითად, თუკი ჩვენ გვაქვს აპლიკაცია firefox, ტერმინალში შეგვიძლია ჩავწეროთ fire და დავაჭიროთ tab-ს.

ფაილის მოძებნისას აუცილებელია, რომ ის ნაწილობრივი ტექსტი რაც გვიწერია ბრძანებაში, არ ემთხვეოდეს ერთზე მეტი ფაილების საწყისს სახელს. ამ შემთხვევაში შელი ამოგვიგდებს ყველა იმ ფაილსა თუ ფოლდერს, რომლის სახელიც ჩვენს ფრაგმენტებს ემთხვევა და რომლიდანაც ჩვენ უნდა ამოვარჩიოთ ერთ-ერთი.

სანიმუშოდ სცადეთ დაწეროთ ls /home/ და დააჭიროთ tabs-ს რამდენიმეჯერ.

cp (კოპირება)

მოდით ფაილის კოპირება ვცადოთ. ბრძანება ჰგავს კოპი-ფეისთის ფუნქციას სხვა ოპერატიულ სისტემებში, მაგრამ შელი ამ საქმის შესრულების უფრო მარტივ გზას გვთავაზობს.

$ cp mycoolfile /home/pridon/Documents/cooldocs

ამ ბრძანებით ჩვენ ავიღეთ mycoolfile და ის გადავაკოპირეთ /home/pridon/Documents/cooldocs ფოლდერში.

ჩვენ შეგვიძლია რამდენიმე ფაილისა და დირექტორიის ერთდროულად კოპირება, ამასთანავე, wildcard-ების გამოყენებაც. wildcard არის სიმბოლო, მნიშვნელობა, რომელიც ჩვენთვის უცნობია, მაგრამ შეიძლება არსებობდეს. wildcard-ის სიმბოლო შეგვიძლია გამოვიყენოთ იმ ფაილების მოსანიშნად, რომლებსაც საზიარო პატერნი ან რაიმე სხვა თვისება აქვთ. wildcard შეგვიძლია ნებისმიერ ბრძანებაში გამოვიყენოთ, ის ძალიან მოხერხებული ხელსაწყოა.

  • * - უმთავრესი ვაილდქარდი: იგი წარმოადგენს ნებისმიერ ერთეულს ან სტრინგს (ტექსტი)
  • ? - გამოიყენება ერთი ასოს აღსანიშნად
  • [] - გამოიყენება ფრჩხილებს შორის ნებისმიერი ერთეულის აღსანიშნად
$ cp *.jpg /home/pridon/Pictures

ეს ბრძანება გადააკოპირებს მიმდინარე დირექტორიიდან ნებისმიერ ფაილს, რომელიც .jpg-ით ბოლოვდება, Picture-ის დირექტორიაში.

ხშირად ამ ბრძანებასთან ერთად გამოგვადგება -r ფლაგი, რომელიც რეკურსულად დააკოპირებს ფაილებსა და დირექტორიებს მითითებულ დირექტორიაში (recursion-ის განმარტება).

სცადეთ cp-ს გამოყენება დირექტორიაზე, რომელიც შეიცავს რამდენიმე ფაილს და გადაიტანეთ ისინი Documents ფოლდერში. ალბათ არ გამოგივიდათ, არა? იმიტომ რომ საჭიროა დირექტორიასთან ერთად მაში არსებული ყველა სხვა ფაილის გადაკოპირებაც. სწორედ ამაზე მიუთითებს -r ფლაგი.

$ cp -r Khinklebi/ /home/pete/Documents

გასათვალისწინებელია, რომ თუ გადავაკოპირებთ ფაილს იმ დირექტორიაში, სადაც არსებობს ფაილი იმავე სახელით, პირველი ჩაანაცვლებს მეორეს. თუ შემთხვევით ეს გამოგვეპარა, შეიძლება მნიშვნელოვანი ფაილი დავკარგოთ! შეგვიძლია გამოვიყენოთ -i (interactive) ფლაგი, რომელიც ასეთ შემთხვევაში გაგვაფრთხილებს, რომ ფაილის ჩანაცვლება უწევს და ჩვენგან დასტურს დაელოდება.

$ cp -i mycoolfile /home/pridon/Pictures

mv (ფაილის გადაადგილება)

ეს ბრძანება გამოიყენება ფაილების გადასაადგილებლად და, ამასთანავე, სახელის გადასარქმევად. ფლაგებისა და ფუნქციების მიხედვით, ის cp ბრძანებას ჰგავს.

ფაილებს სახელი ასე შეგვიძლია გადავარქვათ:

$ mv oldfile newfile

ფაილების სხვა დირექტორიაში გადატანა:

$ mv file2 /home/pridon/Documents

ერთზე მეტი ფაილის გადატანა:

$ mv file_1 file_2 /somedirectory

შესაძლებელია დირექტორიის/ფოლდერის სახელის გადარქმევაც:

$ mv directory1 directory2

ისევე როგორც cp, თუ ჩვენ mv-ით ფაილს ან ფოლდერს გადაავაადგილებთ, ის ყველაფერს გადაწერს, რასაც იგივე სახელი გააჩნია. ჩვენ შეგვიძლია გამოვიყენოთ -i ფლაგი, რათა პროგრამამ ამის თაობაზე გაგვაფრთხილოს.

$ mv -i directory1 directory2

mkdir (ფოლდერის შექმნა)

ამდენ ფაილს, რომელზეც ჩვენ ვმუშაობთ, სადმე თავი უნდა მოვუყაროთ. mkdir ბრძანება (Make Directory) შექმნის დირექტორიას ჩვენი სასურველი სახელით, თუკი იმავე სახელით დირექტორია არ არსებობს მიმდინარე path-ზე. შესაძლებელია რამდენიმე დირექტორიის ერთდროულად შექმნაც.

$ mkdir books paintings

შესაძლებელია დირექტორიებთან ერთად სუბდირექტორიების შექმნაც, თუკი -p (parent flag) ფლაგს გამოვიყენებთ:

$ mkdir books/mikheil_javakhishvili/favorites

ეს ბრძანება შექმნის ფოლდერს books, რომელშიც იქნება მოთავსებული mikheil_javakhishvili, ხოლო ამ უკანასკნელში იქნება favorites ფოლდერი.

rm (წაშლა)

ამ ეტაბზე ალბათ ბევრი არასაჭირო ფაილი დაგვიგროვდა, მოდით, რამდენიმე წავშალოთ. ფაილებისა და ფოლდერების წასაშლელად ვიყენებთ rm (remove) ბრძანებას.

$ rm file1

rm ბრძანების გამოყენებისას ფრთხილად უნდა ვიყოთ, რადგან არ არსებობს რაიმე ჯადოსნური სანაგვე, რომლიდანაც წაშლილ ფაილებს დავიბრუნებთ. ამ ბრძანებით ფაილები სამუდამოდ იშლება.

საბედნიეროდ, არსებობს უსაფრთხოების ზომები, რათა ნებისმიერმა ადამიანმა არ შეძლოს მნიშვნელოვანი ფაილების წაშლა. მოდიფიკაციისგან დაცული ფაილები წაშლის მეორედ დადასტურებას მოგვთხოვენ (ხშირ შემთხვევაში მომხმარებლის ან „ადმინისტრატორის“ პაროლის ფორმით).

თუ ეს არ გვადარდებს, თავისუფლად შეგვიძლია ფაილების ერთბაშად წაშლა.

$ rm -f file1

-f ფლაგი (force) აცნობებს rm ბრძანებას, რომ წაშალოს ნებისმიერი ფაილი, მიუხედავად იმისა, დაცულია თუ არა, ყოველგვარი გაფრთხილების გარეშე (ამ დროს საჭიროა მომხმარებელს ჰქონდეს სათანადო უფლებები).

-i ფლაგი აქ, ისევე როგორც ბევრ სხვა ბრძანებაში, გვაჩვენებს დამადასტურებელ პრომპტს, მართლა გვინდა თუ არა კონკრეტული ფაილებისა თუ ფოლდერების წაშლა.

$ rm -i file

როცა იმ დირექტორიის წაშლა გვინდა, რომელსაც შიგნით გააჩნია სხვა ფაილები და სუბდირექტორიები, ჩვენ უნდა გამვიყენოთ -r ფლაგი, რაც ნიშნავს რეკურსულს (recursion-ის განმარტება). ის წაშლის მითითებულ ფოლდერს და ყველაფერს, რაც მასშია განთავსებული:

$ rm -r directory

უშუალოდ (ცარიელი) დირექტორიის წასაშლელად, შეგვიძლია გამოვიყენოთ rmdir (Remove Directory):

$ rmdir directory

find (მოძებნა)

სისტემაში ძალიან ბევრი ფაილი შეიძლება დაგვიგროვდეს. კონკრეტული ფაილის მიგნება რთული იქნებოდა, find ბრძანება რომ არ არსებობდეს.

$ find /home -name khinkali.jpg

find-ით, ჩვენ უნდა დავაზუსტოთ დირექტორია, რომელშიც ძებნას ვახორციელებთ და ფაილი, რომელსაც ჩვენ ვეძებთ. ამ შემთხვევაში ჩვენ /home დირექტორიაში ვეძებთ ფაილს, რომელსაც ჰქვია khinkali.jpg.

ჩვენ, ასევე, შეგვიძლია დავაზუსტოთ რა ტიპის ფაილს ვეძებთ:

$ find /home -type d -name MyFolder

როგოგრც ხედავთ, აქ ფაილის ტიპში მივუთითე, რომ ვეძებ დირექტორიას (d) და ისევ ვუთითებ ფაილის სახელს MyFolder.

ერთი სასარგებლო თვისება, რაც find-ს ახასიათებს არის ის, რომ იგი არ გაჩერდება იმ დირექტორიაში, რომელშიც ძებნას ახორციელებ, არამედ გააგრძელებს ძებნას ამ ჩვენი დირექტორიის სუბდირექტორიებშიც (ასეთის არსებობის შემთხვევაში).

help (დახმარება)

ლინუქსს აქვს ძალიან კარგი ინტეგრირებული ხელსაწყოები, რომლებიც გვეხმარება იმის გასარკვევად, როგორ გამოვიყენოთ ესა თუ ის ბრძანება, ან ვნახოთ რა ფლაგებია ხელმისაწვდომი კონკრეტული ბრძანებისთვის. ამ ხელსაწყოთაგან ერთ-ერთია bash-ში ინტეგრირებული help ბრძანება, რომელიც დაგვეხმარება bash-ში არსებული სხვა ბრძანებების გასაგებად.

$ help echo

ეს მოგვცემს echo-ს აღწერასა და პარამეტრებს, რომლებიც შეგვიძლია მასთან ერთად გამოვიყენოთ. სხვა პროგრამებისთვის კონვენციურად არსებობს --hep პარამეტრი (ან რამე მსგავსი).

$ echo --help

ასეთი პროგრამების შემქმნელი ყველა დეველოპერი არ მიყვება ამ სტანდარტს, მაგრამ უმეტესობა მაინც ურთავს დახმარების სექციას.

man (ინსტრუქციების კატალოგი)

ნეტავ ამ პროგრამებისთვის არსებობდეს ინსტრუქციების კატალოგი, საიდანაც უფრო დეტალურ ინფორმაციას მივიღებდით. საბედნიეროდ არსებობს ბრძანება man (manual), რომელიც კონკრეტული პროგრამისთვის/ბრძანებისთვის განკუთვნილ ინსტრუქციების კატალოგს გვაჩვენებს.

$ man ls

Man-ის გვერდები არის დეტალური ისნტრუქციები, რომელიც ჩვეულებრივ მოყვება ლინუქსის ოპერატიულ სისტემეათა უმეტესობას. ისინი უზრუნველგვყოფენ ვრცელი დოკუმენტაციებით ბრძანებებისა და სისტემის სხვა ასპექტების შესახებ.

სცადეთ სხვადასხვა ბრძანებებისთვის man-ის მოხმობა რათა მეტი გაიგოთ მათ შესახებ. ეს არის უმთავრესი ხელსაწყო, როცა გვაინტერესებს როგორ გადავჭრათ ამოცანა და რა კონკრეტული ხელსაწყო გვჭირდება ამისათვის.

შეგიძლიათ man ბრძანება გამოიყენოთ უშუალოდ bash-ზე, და ეს მოგაწვდით მთლიანი შელის უზარმაზარ დოკუმებტაციას. მანდვე არის მოვემული ცალკეული ბრძანებების დოკუმენტაციებიც.

$ man bash

whatis (რა არის)

იქნებ სანამ დეტალური ინფორმაციის გარჩევას შეუდგებით, უბრალოდ რაიმე ბრძანების ზოგადი და მოკლე აღწერა გაინტერესებთ? ამისთვის whatis ბრძანება გამოგვადგება.

$ whatis cat

აღწერა წყაროდ იყენებს პროგრამისთვის განკუთვნილი man-ის ამონარიდებს.

alias (მეტსახელი)

ზოგჯერ შეიძლება ერთი და იმავე გრძელი ბრძანების წერა მოგვიწიოს. ამ დროს გამოგვადგება ასეთი გრძელი ბრძანებისთვის მეტსახელის მოგონება. ამისათვის უნდა მოვიხმოთ alias და მოვიფიქროთ სახელი, რომელსაც შემდგომ გავუტოლებთ ბრჭყალებში მოქცეულ იმ ბრძანებას, რომელიც გვინდა ამ მეტსახელით შევინახოთ.

$ alias all="ls -la"

ახლა, ls -la-ს მაგივრად შეგვიძლია დავუძახოთ all-ს და ის იგივე ბრძანებას განახორციელებს. გასათვალისწინებელია, რომ ეს მეტსახელი კომპიუტერის გადატვირთვის შემდეგ წაიშლება. რათა სამუდამოდ შევინახოთ მეტსახელი, ის უნდა ჩავწეროთ ჩვენს ~/.bashrc-ში (ან zsh-ის შემთხვევაში ~/zshrc). ეს ის ფაილია, რომელსაც ბაში კითხულობს ყოველ ჯერზე, როცა შელი იხსნება.

ალიასების წაშლა შეგვიძლია შემდეგნაირად:

$ unalias some_alias

გაითვალისწინეთ, რომ თუ მეტსახელად გამოიყენებთ არსებული ბრძანების სახელს, ის ამ ბრძანებას ჩაანაცვლებს, სანამ ამ მეტსახელს არ წაშლით.

exit (გასვლა)

როგორც იქნა გავედით ამ გაკვეთილის ბოლოში! ახლა შელის მხოლოდ ანა-ბანა ვიცით, ლაპარაკის სწავლა ჯერ კიდევ წინ გველის, მაგრამ ამ ცოდნითაც შეგიძლიათ შთამბეჭდავი რაღაცების გაკეთება.

დროა შევისვენოთ. შელიდან გამოსასვლელად შეგვიძლია გამოვიყენოთ ბრძანება:

$ exit

ან

$ logout

თუ გრაფიკული ტერმინალის აპლიკაციას იყენებთ, რა თქმა უნდა, შეგიძლიათ უბრალოდ ეგ აპლიკაცია დახუროთ.

წარმატებები!