მოკლე: ამ ადვილად მისაყოლებელი სახელმძღვანელოში განვიხილავთ cp ბრძანების რამდენიმე პრაქტიკულ მაგალითს. ამ სახელმძღვანელოს შემდეგ, მომხმარებლებს შეეძლებათ ფაილების და დირექტორიების მარტივად კოპირება Linux-ში ბრძანების ხაზის ინტერფეისის გამოყენებით.
როგორც Linux-ის მომხმარებლები, ჩვენ ვურთიერთობთ ფაილები და დირექტორიები დროდადრო. ერთი ჩვეულებრივი ოპერაცია, რომელსაც მომხმარებლები ასრულებენ არის ფაილების და დირექტორიების კოპირება. რა თქმა უნდა, ჩვენ შეგვიძლია გამოვიყენოთ გრაფიკული ფაილ მენეჯერი კოპირების ოპერაციის შესასრულებლად. თუმცა, Linux-ის მომხმარებელთა უმეტესობა ურჩევნია გამოიყენოს იგი cp ბრძანება მისი სიმარტივისა და მდიდარი ფუნქციონირების გამო.
დამწყებთათვის ამ სახელმძღვანელოში ჩვენ გავეცნობით cp ბრძანება. როგორც სახელი გვთავაზობს, cp ბრძანება გამოიყენება ფაილების და დირექტორიების კოპირებისთვის მოცემულ გზაზე.
ამ სახელმძღვანელოს განმავლობაში ჩვენ გავიგებთ გამოყენების შესახებ cp ბრძანება პრაქტიკული მაგალითების გამოყენებით, რომლებიც შეიძლება გამოყენებულ იქნას ყოველდღიურად.
ასე რომ, დავიწყოთ.
Სარჩევი
სინტაქსის cp ბრძანება იდენტურია სხვა Linux ბრძანებების. მაღალ დონეზე, იგი იყოფა ორ ნაწილად - პარამეტრები და არგუმენტები:
$ cp [OPTIONS]$ cp [OPTIONS] ...
ზემოთ მოცემულ სინტაქსში კვადრატული ფრჩხილები ([])
წარმოადგენს არასავალდებულო არგუმენტებს, ხოლო კუთხოვანი ფრჩხილები (<>)
წარმოადგენს სავალდებულო არგუმენტებს.
ერთ-ერთი ძირითადი გამოყენება cp ბრძანება არის ფაილის კოპირება მიმდინარე დირექტორიაში. უმეტეს შემთხვევაში, მომხმარებლები ასრულებენ ამ ოპერაციას მნიშვნელოვანი კონფიგურაციის სარეზერვო ასლის მისაღებად.
მაგალითად, ჩვენ ხშირად ვქმნით სარეზერვო ასლს /etc/ssh/sshd_config ფაილი SSH კონფიგურაციის განახლებამდე.
გამოყენების გასაგებად, შევქმნათ მარტივი ფაილი:
$ touch ფაილი-1.txt.
შემდეგი, შექმენით ფაილის ასლი შემდეგი ბრძანების გამოყენებით:
$ cp ფაილი-1.txt ფაილი-2.txt.
წინა მაგალითში ჩვენ გამოვიყენეთ ls ბრძანება იმის დასადასტურებლად, წარმატებით დასრულდა თუ არა ფაილის კოპირება. თუმცა, აზრი არ აქვს კიდევ ერთი ბრძანების გამოყენებას მხოლოდ წინა ბრძანებების შედეგის შესამოწმებლად.
ასეთ შემთხვევებში, ჩვენ შეგვიძლია გავააქტიუროთ სიტყვიერი რეჟიმი -ვ
ვარიანტი, რომელიც უზრუნველყოფს ყველა დამუშავებული ფაილის დიაგნოზს.
მოდით გავაკეთოთ ასლი ფაილი-1.txt ფაილი შემდეგი ბრძანების გამოყენებით:
$ cp -v ფაილი-1.txt ფაილი-3.txt.
ზემოთ მოცემულ გამოსავალში ისარი წარმოადგენს ფაილს, რომელიც კოპირებულია. მარცხენა მხარის არგუმენტი არის საწყისი ფაილი, ხოლო მარჯვენა მხარის არგუმენტი არის დანიშნულების ფაილი.
აქამდე ჩვენ ვმუშაობდით ერთი ფაილით და მხოლოდ მიმდინარე სამუშაო დირექტორია. თუმცა რეალურ საწარმოო გარემოში გვიწევს მუშაობა ა ფაილების დიდი რაოდენობა. ერთ-ერთი გავრცელებული შემთხვევა ასეთ გარემოში არის მრავალი ფაილის კოპირება ერთ დირექტორიაში.
ცხადია, ჩვენ შეგვიძლია შევასრულოთ cp ბრძანება რამდენჯერმე მის მისაღწევად, მაგრამ ეს არ იქნება ყველაზე ეფექტური გზა. ასეთი ოპერაციის ეფექტურად შესასრულებლად შეგვიძლია გამოვიყენოთ cp ბრძანების ალტერნატიული სინტაქსი.
ასე რომ, ჯერ შექმენით ახალი დირექტორია სახელთან ერთად dir-1:
$ mkdir dir-1.
ახლა, მოდით დავაკოპიროთ სამივე ფაილი მასში dir-1 დირექტორია ერთი ბრძანების გამოყენებით:
$ cp -v ფაილი-1.txt ფაილი-2.txt ფაილი-3.txt dir-1.
ზემოთ გამომავალი გვიჩვენებს, რომ ყველა ფაილი დაკოპირებულია dir-1 დირექტორია. ასევე, მნიშვნელოვანია აღინიშნოს, რომ ამ ალტერნატიული სინტაქსის გამოსაყენებლად დირექტორია უკვე უნდა იყოს წარმოდგენილი და ის უნდა იყოს ბრძანების ბოლო არგუმენტი.
ნაგულისხმევად, cp ბრძანება ცვლის დანიშნულების ფაილს, რაც ნიშნავს, რომ ის გადაწერს ფაილს, თუ ის არსებობს დანიშნულების ადგილზე იმავე სახელით. თუმცა, ჩვენ შეგვიძლია გამორთოთ ეს ნაგულისხმევი ქცევა, გამოყენებით -ნ
ვარიანტი.
ამის გასაგებად, შევეცადოთ არსებული ფაილის გადაწერა:
$ cp -n -v ფაილი-1.txt ფაილი-2.txt.
ამ მაგალითში ჩვენ გამოვიყენეთ -ვ
ვარიანტი იმის საილუსტრაციოდ, რომ ფაილი-2.txt ფაილი არ არის გადაწერილი.
წინა მაგალითში ჩვენ ვნახეთ, თუ როგორ ავიცილოთ თავიდან დანიშნულების ფაილის გადაწერა. თუმცა, ზოგჯერ გვსურს ფაილის დანიშნულების გადაწერა უფრო უსაფრთხო გზით.
ასეთ შემთხვევებში შეგვიძლია გამოვიყენოთ -მე
ბრძანების ვარიანტი ასლის ოპერაციის ინტერაქტიული გახადოს. ეს პარამეტრი აჩვენებს გამაფრთხილებელ შეტყობინებას და ელოდება მომხმარებლის დადასტურებას ფაილის გადაწერამდე.
ამის საილუსტრაციოდ, ვცადოთ არსებული ფაილის გადაწერა:
$ cp -i ფაილი-1.txt ფაილი-2.txt cp: გადაწეროთ 'file-2.txt'?
როგორც ვხედავთ, ბრძანება ელოდება დადასტურებას. ისევე როგორც სხვა Linux ბრძანებები, ჩვენ შეგვიძლია გამოვიყენოთ "შენ"
გააგრძელოს ან 'n'
ოპერაციის შეწყვეტა.
ეს ნაგულისხმევი არაინტერაქტიული ქცევა cp ბრძანება არ არის ძალიან უსაფრთხო. არსებობს შანსი, რომ მომხმარებელმა შეცდომით გადაწეროს მნიშვნელოვანი კონფიგურაცია. ამიტომ Linux-ის ზოგიერთი დისტრიბუცია ახორციელებს ინტერაქტიულ ქცევას ნაგულისხმევად გამოყენებით მეტსახელის ბრძანება:
$ მეტსახელი cp='cp -i'
წინა მაგალითში ვნახეთ, თუ როგორ გამოვიყენოთ ინტერაქტიული რეჟიმი. თუმცა, ზოგჯერ მომხმარებელმა შეიძლება უნებურად გადაწეროს ახალი ფაილი.
ასეთი შეცდომებისადმი მიდრეკილი შემთხვევების თავიდან ასაცილებლად, ჩვენ შეგვიძლია გამოვიყენოთ -უ
ვარიანტი, რომელიც ცდილობს კოპირების მოქმედებას მხოლოდ იმ შემთხვევაში, თუ წყარო უფრო ახალია, ვიდრე დანიშნულება, ან თუ ფაილი არ არის დანიშნულების ადგილზე.
პირველ რიგში, განაახლეთ წყაროს ფაილის დროის შტამპი:
$ touch -t 10101010 file-1.txt. $ ls -l ფაილი-1.txt.
ზემოთ მოყვანილ მაგალითში ჩვენ გამოვიყენეთ -ტ
-ის ვარიანტი შეხების ბრძანება ფაილის დროის ანაბეჭდის დასაყენებლად 10-ოქტ-2010წ.
შემდეგი, მოდით განვაახლოთ დანიშნულების ფაილის დროის შტამპი მიმდინარე დროზე:
$ touch ფაილი-2.txt.
ახლა, მოდით, შევეცადოთ შევასრულოთ ასლის ოპერაცია -უ
ვარიანტი:
$ cp -u -v ფაილი-1.txt ფაილი-2.txt.
აქ ჩვენ ვხედავთ, რომ კოპირების ოპერაცია არ განხორციელებულა, რადგან დანიშნულების ფაილი უფრო ახალია, ვიდრე წყარო.
და ბოლოს, მოდით შევცვალოთ წყაროსა და დანიშნულების არგუმენტები და შევასრულოთ კოპირების ოპერაცია:
$ cp -u -v ფაილი-2.txt ფაილი-1.txt.
ზემოაღნიშნულ გამომავალში შეგვიძლია დავაკვირდეთ, რომ კოპირების ოპერაცია წარმატებულია, რადგან წყარო ფაილი უფრო ახალია, ვიდრე დანიშნულება.
ჩვენ შეგვიძლია დავავალოთ cp დანიშნულების ფაილის სარეზერვო ასლის აღების ბრძანება მის გადაწერამდე. ამის მისაღწევად შეგვიძლია გამოვიყენოთ -- სარეზერვო
ვარიანტი, რომელიც ასრულებს ავტომატურ სარეზერვო ასლებს.
$ cp -- სარეზერვო = დანომრილი -v ფაილი-1.txt ფაილი-2.txt.
ამ მაგალითში ჩვენ გამოვიყენეთ დანომრილი სარეზერვო პოლიტიკა. ეს პოლიტიკა იყენებს დამატებით რიცხვებს სარეზერვო ფაილების სახელებში.
ამის გასაგებად, მოდით შევასრულოთ ერთი და იგივე ბრძანება რამდენჯერმე და დავაკვირდეთ გამომავალს:
$ cp -- სარეზერვო = დანომრილი -v ფაილი-1.txt ფაილი-2.txt. $ cp -- სარეზერვო = დანომრილი -v ფაილი-1.txt ფაილი-2.txt. $ cp -- სარეზერვო = დანომრილი -v ფაილი-1.txt ფაილი-2.txt.
წინა რამდენიმე მაგალითში ჩვენ ვნახეთ, თუ როგორ გადავწეროთ ფაილი უსაფრთხო გზით. თუმცა, ზოგიერთ იშვიათ შემთხვევებში, მოთხოვნაა ფაილის გადაწერა. თუმცა, არ არსებობს გარანტია, რომ ოპერაცია ყოველ ჯერზე წარმატებული იქნება.
მაგალითად, კოპირების ოპერაცია ჩაიშლება, თუ დანიშნულების ფაილს არ აქვს ჩაწერის ნებართვა. მოდით ეს მაგალითით ავხსნათ.
პირველ რიგში, შეცვალეთ დანიშნულების ფაილის ნებართვები:
$ chmod 444 ფაილი-2.txt. $ ls -l ფაილი-2.txt.
ახლა, მოდით ვცადოთ გადაწერა ფაილი-2.txt ფაილი:
$ cp ფაილი-1.txt ფაილი-2.txt.
ზემოთ მოცემულ გამომავალში ჩვენ ვხედავთ, რომ ბრძანება ვერ მოხერხდა ნებართვის უარყოფის შეცდომით.
ამ შეზღუდვის დასაძლევად შეგვიძლია გამოვიყენოთ -ვ
ოფცია, რომელიც შლის დანიშნულების ფაილებს და ცდილობს კოპირების ოპერაციას, თუ დანიშნულების ფაილის გახსნა შეუძლებელია.
ახლა, გამოვიყენოთ -ვ
ფაილის იძულებით გადაწერის ვარიანტი:
$ cp -f -v ფაილი-1.txt ფაილი-2.txt.
წინა მაგალითში ჩვენ ვნახეთ, თუ როგორ უნდა წაშალოთ დანიშნულების ფაილი, თუ მისი მუშაობისას მოხდა შეცდომა. თუმცა, ზოგჯერ მოთხოვნაა ჯერ დანიშნულების ფაილის ამოღება და შემდეგ კოპირების ოპერაციის შესრულება.
ასეთი მოთხოვნის შესასრულებლად, ჩვენ შეგვიძლია გამოვიყენოთ -- ამოღება-დანიშნულება
ვარიანტი.
$ cp --remove-destination -v file-1.txt file-2.txt.
ზემოთ მოყვანილ გამოსავალში ვხედავთ, რომ cp ბრძანება ჯერ შლის დანიშნულების ფაილს და შემდეგ ასრულებს კოპირების ოპერაციას.
ჩვენ შეგვიძლია შევქმნათ მყარი ბმული წყაროს ფაილის ახალი ასლის შექმნის ნაცვლად. ეს პარამეტრი მნიშვნელოვან როლს ასრულებს დისკზე ადგილის სიმცირის დროს.
ასე რომ, გამოვიყენოთ -ლ
მყარი ბმულის შექმნის ვარიანტი:
$ cp -l -v ფაილი-1.txt ფაილი-4.txt.
ახლა, მოდით შევამოწმოთ ორივე ფაილის ინოდური ნომრები მყარი ბმულების შესამოწმებლად:
$ ls -i1 ფაილი-1.txt ფაილი-4.txt.
ზემოაღნიშნულ გამომავალში, პირველი სვეტის რიცხვები წარმოადგენს ინოდურ რიცხვებს.
ანალოგიურად, ჩვენ შეგვიძლია შევქმნათ რბილი ბმული ახალი ასლის შექმნის ნაცვლად -ს
ვარიანტი, როგორც ნაჩვენებია ქვემოთ:
$ cp -s -v ფაილი-1.txt ფაილი-5.txt.
ახლა, მოდით გადავამოწმოთ, რომ სიმბოლური ბმული შეიქმნა სწორად:
$ ls -l ფაილი-5.txt.
ზემოთ მოცემულ გამოსავალში, ბოლო სვეტები წარმოადგენს სიმბოლურ ბმულს.
ფაილთან დაკავშირებულია სხვადასხვა ატრიბუტები, როგორიცაა მისი წვდომის დრო, მოდიფიკაციის დრო, ნებართვები და ა.შ. ნაგულისხმევად, ეს ატრიბუტები არ არის დაცული ფაილის კოპირებისას. ამ ნაგულისხმევი ქცევის გასაუქმებლად შეგვიძლია გამოვიყენოთ -გვ
ვარიანტი.
ამის გასაგებად, პირველ რიგში, განაახლეთ დროის ანაბეჭდი ფაილი-1.txt:
$ touch -t 10101010 file-1.txt.
ახლა, მოდით შევქმნათ ამ ფაილის ასლი მისი ყველა ატრიბუტის შენარჩუნებით:
$ cp -p -v ფაილი-1.txt ფაილი-6.txt.
და ბოლოს, გადაამოწმეთ დროის ანაბეჭდი ფაილი-6.txt ფაილი:
$ ls -l ფაილი-6.txt.
აქამდე ჩვენ ვნახეთ, თუ როგორ უნდა დააკოპიროთ ერთი ფაილი. თუმცა, ხშირად ჩვენ გვიწევს კონკრეტული დირექტორიას ყველა ფაილის და ქვეცნობარის კოპირება.
ასეთ შემთხვევებში, ჩვენ შეგვიძლია გამოვიყენოთ რეკურსიული რეჟიმი ან გამოყენებით -რ
ან -რ
ვარიანტი.
მაშ ასე, შევქმნათ დირექტორია და დავამატოთ რამდენიმე ფაილი და ქვეკატეგორიები მის ქვეშ:
$ mkdir -p dir-1/dir-2. $ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt.
შემდეგი, დარწმუნდით, რომ დირექტორია სტრუქტურა სწორად არის შექმნილი:
$ ხე dir-1.
ახლა მოდით დავაკოპიროთ დირექტორია dir-1 რეკურსიულად შემდეგი ბრძანების გამოყენებით:
$ cp -r -v dir-1 dir-3.
დაბოლოს, შეამოწმეთ, რომ ყველა ფაილი და ქვეცნობარი წარმატებით იქნა კოპირებული:
$ ხე დირ-3.
ფაილების მსგავსად, ჩვენ შეგვიძლია დავაკოპიროთ მრავალი დირექტორია რეკურსიული ერთი ბრძანების გამოყენებით. თუმცა, ამის მისაღწევად დანიშნულების დირექტორია უკვე უნდა იყოს წარმოდგენილი და ის უნდა იყოს ბოლო არგუმენტი ბრძანებაში. მოდით გავიგოთ ეს მაგალითით.
პირველი, შექმენით დირექტორია ახალი დირექტორია:
$ mkdir dir-4.
ახლა, მოდით დავაკოპიროთ dir-1 და dir-3 დირექტორიები შევიდა რეჟი-4 დირექტორია ქვემოთ მოცემული ბრძანების გამოყენებით:
$ cp -r -v dir-1 dir-3 dir-4.
ანალოგიურად, ჩვენ შეგვიძლია გამოვიყენოთ -ტ
ბრძანების ვარიანტი იგივე შედეგის მისაღწევად. ეს პარამეტრი საშუალებას გვაძლევს მიუთითოთ დანიშნულების დირექტორია. ასე რომ, ჩვენ შეგვიძლია გამოვიყენოთ ის, როგორც პირველი არგუმენტი:
$ cp -t dir-4 -r -v dir-1 dir-3.
ამ სტატიაში ჩვენ განვიხილეთ, თუ როგორ უნდა დააკოპიროთ ფაილები და დირექტორიები გამოყენებით cp ბრძანება. დამწყებთათვის შეგიძლიათ მიმართონ ამ მაგალითებს ყოველდღიურ ცხოვრებაში Linux სისტემებთან მუშაობისას.
Თქვენ შეიძლება ასევე მოგეწონოთ:
იცით cp ბრძანების სხვა საუკეთესო მაგალითი Linux-ში? გაგვაგებინე შენი შეხედულებები ქვემოთ მოცემულ კომენტარებში.