Linux-da cp əmrindən necə effektiv istifadə etmək olar [14 Nümunə]
Qısa: Bu asan izlənilən bələdçidə biz cp əmrinin bəzi praktik nümunələrini müzakirə edəcəyik. Bu təlimata əməl etdikdən sonra istifadəçilər komanda xətti interfeysindən istifadə edərək Linux-da faylları və kataloqları asanlıqla kopyalaya biləcəklər.
Linux istifadəçiləri olaraq biz faylların və qovluqların surətini çıxarmaqla qarşılıqlı əlaqədə oluruq. Şübhəsiz ki, kopyalama əməliyyatını yerinə yetirmək üçün qrafik fayl menecerindən istifadə edə bilərik. Bununla belə, əksər Linux istifadəçiləri sadəliyi və zəngin funksionallığına görə cp əmrindən istifadə etməyi üstün tuturlar.
Başlayanlar üçün uyğun olan bu təlimatda biz cp əmri haqqında öyrənəcəyik. Adından göründüyü kimi, cp əmri faylları və qovluqları müəyyən bir yolda köçürmək üçün istifadə olunur.
Bu təlimatda biz gündəlik olaraq istifadə oluna bilən praktiki nümunələrdən istifadə edərək cp əmrinin istifadəsini başa düşəcəyik.
Beləliklə, başlayaq.
Cp Komanda Sintaksisi
cp əmrinin sintaksisi digər Linux əmrləri ilə eynidir. Yüksək səviyyədə iki hissəyə bölünür - variantlar və arqumentlər:
$ cp [OPTIONS] <SOURCE> <DEST>
$ cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>
Yuxarıdakı sintaksisdə kvadrat mötərizələr ([]) isteğe bağlı arqumentləri, bucaq mötərizələri isə (<>) məcburi arqumentləri təmsil edir.
1. Linux-da faylı necə kopyalamaq olar
cp əmrinin əsas istifadələrindən biri faylı cari qovluğa köçürməkdir. Çox vaxt istifadəçilər mühüm konfiqurasiyanın ehtiyat nüsxəsini çıxarmaq üçün bu əməliyyatı yerinə yetirirlər.
Məsələn, biz tez-tez SSH konfiqurasiyasını yeniləməzdən əvvəl /etc/ssh/sshd_config faylının ehtiyat nüsxəsini yaradırıq.
İstifadəsini başa düşmək üçün sadə bir fayl yaradaq:
$ touch file-1.txt
Sonra, aşağıdakı əmrdən istifadə edərək faylın surətini yaradın:
$ cp file-1.txt file-2.txt

2. Kopyalama əmrinin gedişatını göstərin
Əvvəlki misalda biz faylın kopyalanması əməliyyatının uğurlu olub-olmadığını yoxlamaq üçün ls əmrindən istifadə etdik. Ancaq əvvəlki əmrlərin nəticəsini yoxlamaq üçün daha bir əmrdən istifadə etməyin mənası yoxdur.
Belə hallarda biz hər bir işlənmiş fayl üçün diaqnostikanı təmin edən -v seçimindən istifadə edərək ətraflı rejimi aktivləşdirə bilərik.
Aşağıdakı əmrdən istifadə edərək file-1.txt faylının surətini çıxaraq:
$ cp -v file-1.txt file-3.txt

Yuxarıdakı çıxışda ox kopyalanan faylı təmsil edir. Sol tərəfdəki arqument mənbə faylıdır, sağ tərəfdəki arqument isə təyinat faylıdır.
3. Bir neçə faylı kataloqa necə kopyalamaq olar
İndiyə qədər biz tək bir fayl və yalnız cari iş kataloqu ilə işləmişik. Bununla belə, real istehsal mühitində çoxlu sayda faylla işləmək məcburiyyətindəyik. Belə mühitlərdə ümumi istifadə hallarından biri birdən çox faylı bir kataloqa köçürməkdir.
Aydındır ki, buna nail olmaq üçün cp əmrini dəfələrlə yerinə yetirə bilərik, lakin bu, ən təsirli yol olmayacaq. Belə bir əməliyyatı effektiv yerinə yetirmək üçün cp əmrinin alternativ sintaksisindən istifadə edə bilərik.
Beləliklə, əvvəlcə dir-1 adı ilə yeni bir kataloq yaradın:
$ mkdir dir-1
İndi tək əmrdən istifadə edərək hər üç faylı dir-1 qovluğuna köçürək:
$ cp -v file-1.txt file-2.txt file-3.txt dir-1

Yuxarıdakı çıxış bütün faylların dir-1 qovluğuna kopyalandığını göstərir. Həmçinin qeyd etmək lazımdır ki, bu alternativ sintaksisi istifadə etmək üçün kataloq artıq mövcud olmalıdır və o, komandanın son arqumenti olmalıdır.
4. Faylın üzərinə yazmaqdan necə qaçınmaq olar
Varsayılan olaraq, cp əmri təyinat faylını əvəz edir, yəni təyinat yerində eyni adda varsa, faylın üzərinə yazılacaq. Bununla belə, biz bu defolt davranışı -n seçimindən istifadə edərək söndürə bilərik.
Bunu başa düşmək üçün mövcud faylın üzərinə yazmağa çalışaq:
$ cp -n -v file-1.txt file-2.txt
Bu nümunədə biz fayl-2.txt faylının üzərinə yazılmadığını göstərmək üçün -v seçimindən istifadə etdik.
5. Təsdiqlə faylın üzərinə necə yazmaq olar
Əvvəlki misalda təyinat faylının üzərinə yazılmasının qarşısını necə alacağımızı gördük. Bununla belə, bəzən biz fayl təyinatını daha təhlükəsiz şəkildə üzərinə yazmaq istəyirik.
Belə hallarda biz surət əməliyyatını interaktiv etmək üçün komandanın -i variantından istifadə edə bilərik. Bu seçim xəbərdarlıq mesajını göstərir və faylın üzərinə yazmadan əvvəl istifadəçinin təsdiqini gözləyir.
Bunu göstərmək üçün mövcud faylın üzərinə yazmağa çalışaq:
$ cp -i file-1.txt file-2.txt
cp: overwrite 'file-2.txt'?
Gördüyümüz kimi, əmr təsdiqini gözləyir. Digər Linux əmrləri kimi, davam etmək üçün y və ya əməliyyatı dayandırmaq üçün n istifadə edə bilərik.
cp əmrinin bu standart qeyri-interaktiv davranışı çox təhlükəsiz deyil. İstifadəçinin səhvən vacib konfiqurasiyanın üzərinə yaza bilməsi ehtimalı var. Beləliklə, bəzi Linux paylamaları ləqəb əmrindən istifadə edərək defolt olaraq interaktiv davranışı tətbiq edir:
$ alias cp='cp -i'
6. Yalnız Mənbə Daha Yenidirsə Faylın üzərinə yazın
Əvvəlki nümunədə interaktiv rejimin necə istifadə olunacağını gördük. Bununla belə, bəzən istifadəçi səhvən yeni faylın üzərinə yaza bilər.
Bu cür səhvlərə meyilli halların qarşısını almaq üçün biz yalnız mənbə təyinat yerindən daha yeni olduqda və ya fayl təyinat yerində olmadıqda kopyalama əməliyyatına cəhd edən -u seçimindən istifadə edə bilərik.
Əvvəlcə mənbə faylın vaxt damğasını yeniləyin:
$ touch -t 10101010 file-1.txt
$ ls -l file-1.txt
Yuxarıdakı misalda biz faylın vaxt damğasını 10-Oktyabr 2010-cu ilə təyin etmək üçün toxunma əmrinin -t variantından istifadə etdik.
Sonra, təyinat faylının vaxt möhürünü cari vaxta yeniləyək:
$ touch file-2.txt
İndi gəlin -u seçimindən istifadə edərək kopyalama əməliyyatını yerinə yetirməyə çalışaq:
$ cp -u -v file-1.txt file-2.txt
Burada görə bilərik ki, təyinat faylı mənbədən daha yenidir, çünki kopyalama əməliyyatına cəhd edilməyib.
Nəhayət, mənbə və təyinat arqumentlərini dəyişdirək və kopyalama əməliyyatını yerinə yetirək:
$ cp -u -v file-2.txt file-1.txt
Yuxarıdakı çıxışda mənbə faylı təyinat yerindən daha yeni olduğu üçün kopyalama əməliyyatının uğurlu olduğunu müşahidə edə bilərik.

7. Üzərinə yazmadan əvvəl faylın ehtiyat nüsxəsini necə çıxarmaq olar
Biz cp əmrinə təyinat faylının üzərinə yazmadan əvvəl onun ehtiyat nüsxəsini çıxarmağı tapşıra bilərik. Buna nail olmaq üçün biz avtomatlaşdırılmış ehtiyat nüsxələri həyata keçirən --backup seçimindən istifadə edə bilərik.
$ cp --backup=numbered -v file-1.txt file-2.txt
Bu nümunədə biz nömrələnmiş ehtiyat siyasətindən istifadə etdik. Bu siyasət ehtiyat fayl adlarında artımlı nömrələrdən istifadə edir.
Bunu başa düşmək üçün eyni əmri bir neçə dəfə yerinə yetirək və nəticəni müşahidə edək:
$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt

8. Kopyalamanı Faylın üzərinə yazmağa necə məcbur etmək olar
Əvvəlki bir neçə nümunədə faylın daha təhlükəsiz şəkildə üzərinə necə yazılacağını gördük. Bununla belə, bəzi nadir hallarda tələb faylın üzərinə yazmaqdır. Bununla belə, əməliyyatın hər dəfə uğurlu olacağına zəmanət yoxdur.
Məsələn, təyinat faylının yazma icazələri yoxdursa, kopyalama əməliyyatı uğursuz olacaq. Bunu bir misalla izah edək.
Əvvəlcə təyinat faylının icazələrini dəyişdirin:
$ chmod 444 file-2.txt
$ ls -l file-2.txt
İndi fayl-2.txt faylının üzərinə yazmağa çalışaq:
$ cp file-1.txt file-2.txt
Yuxarıdakı çıxışda əmrin icazənin rədd edilməsi xətası ilə uğursuz olduğunu görə bilərik.
Bu məhdudiyyəti aradan qaldırmaq üçün təyinat fayllarını silən və təyinat faylı açıla bilmədiyi halda kopyalama əməliyyatına cəhd edən -f seçimindən istifadə edə bilərik.
İndi gəlin faylın üstünə yazmaq üçün -f seçimindən istifadə edək:
$ cp -f -v file-1.txt file-2.txt

9. Kopyalamadan əvvəl təyinat faylını necə silmək olar
Əvvəlki nümunədə, təyinat faylını işləyərkən xəta olarsa, onu necə siləcəyimizi gördük. Bununla belə, bəzən tələb ilk olaraq təyinat faylını silmək və sonra kopyalama əməliyyatını yerinə yetirməkdir.
Belə bir tələbi yerinə yetirmək üçün biz --remove-destination seçimindən istifadə edə bilərik.
$ cp --remove-destination -v file-1.txt file-2.txt

Yuxarıdakı çıxışda görə bilərik ki, cp əmri əvvəlcə təyinat faylını silir, sonra isə kopyalama əməliyyatını yerinə yetirir.
10. Kopyalamaq əvəzinə Hard Link Faylı Necə Yaratmaq olar
Mənbə faylının yeni nüsxəsini yaratmaq əvəzinə sərt keçid yarada bilərik. Bu seçim disk sahəsi çatışmazlığı olduqda mühüm rol oynayır.
Beləliklə, sərt keçid yaratmaq üçün -l seçimindən istifadə edək:
$ cp -l -v file-1.txt file-4.txt
İndi sərt bağlantıları yoxlamaq üçün hər iki faylın inode nömrələrini yoxlayaq:
$ ls -i1 file-1.txt file-4.txt

Yuxarıdakı çıxışda birinci sütundakı rəqəmlər inode nömrələrini təmsil edir.
11. Kopyalamaq əvəzinə Yumşaq Bağlantı Faylını Necə Yaratmaq olar
Oxşar şəkildə, aşağıda göstərildiyi kimi -s seçimindən istifadə edərək yeni nüsxə yaratmaq əvəzinə yumşaq keçid yarada bilərik:
$ cp -s -v file-1.txt file-5.txt
İndi simvolik əlaqənin düzgün yaradıldığını yoxlayaq:
$ ls -l file-5.txt

Yuxarıdakı çıxışda sonuncu sütunlar simvolik əlaqə əlaqəsini təmsil edir.
12. Kopyalama zamanı fayl atributlarını necə qorumaq olar
Faylla əlaqəli müxtəlif atributlar var, məsələn, onun daxil olma vaxtı, dəyişdirmə vaxtı, icazələr və s. Varsayılan olaraq, faylın kopyalanması zamanı bu atributlar qorunmur. Bu standart davranışı ləğv etmək üçün biz -p seçimindən istifadə edə bilərik.
Bunu başa düşmək üçün əvvəlcə-1.txt faylının vaxt damğasını yeniləyin:
$ touch -t 10101010 file-1.txt
İndi gəlin bütün atributlarını saxlayaraq bu faylın surətini yaradaq:
$ cp -p -v file-1.txt file-6.txt
Nəhayət, file-6.txt faylının vaxt damğasını yoxlayın:
$ ls -l file-6.txt

13. Kopyalama əməliyyatını rekursiv şəkildə necə yerinə yetirmək olar
İndiyə qədər bir faylın necə kopyalanacağını gördük. Bununla belə, çox vaxt biz müəyyən kataloqun bütün fayllarını və alt qovluqlarını köçürməli oluruq.
Belə hallarda biz ya -r, ya da -R seçimindən istifadə edərək rekursiv rejimdən istifadə edə bilərik.
Beləliklə, bir kataloq yaradaq və onun altına bir neçə fayl və alt qovluq əlavə edək:
$ mkdir -p dir-1/dir-2
$ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt
Sonra, kataloq strukturunun düzgün yaradıldığını yoxlayın:
$ tree dir-1
İndi aşağıdakı əmrdən istifadə edərək dir-1 qovluğunu rekursiv surətdə köçürək:
$ cp -r -v dir-1 dir-3
Nəhayət, bütün faylların və alt qovluqların uğurla kopyalandığını yoxlayın:
$ tree dir-3

14. Birdən çox kataloqu necə kopyalamaq olar
Fayllara bənzər, biz bir əmrdən istifadə edərək bir neçə rekursiv qovluğu kopyalaya bilərik. Bununla belə, buna nail olmaq üçün təyinat kataloqu artıq mövcud olmalıdır və bu, komandanın son arqumenti olmalıdır. Bunu bir nümunə ilə başa düşək.
Əvvəlcə yeni bir kataloq yaradın:
$ mkdir dir-4
İndi dir-1 və dir-3 qovluqlarını aşağıdakı əmrdən istifadə edərək dir-4 qovluğuna köçürək:
$ cp -r -v dir-1 dir-3 dir-4
Oxşar şəkildə eyni nəticəni əldə etmək üçün komandanın -t variantından istifadə edə bilərik. Bu seçim bizə təyinat kataloqunu təyin etməyə imkan verir. Beləliklə, biz onu ilk arqument kimi də istifadə edə bilərik:
$ cp -t dir-4 -r -v dir-1 dir-3

Bu yazıda cp əmrindən istifadə edərək faylları və qovluqları necə köçürməyi müzakirə etdik. Başlayanlar Linux sistemləri ilə işləyərkən gündəlik həyatda bu nümunələrə müraciət edə bilərlər.
Siz də bəyənə bilərsiniz:
- Tərəqqi – (cp, mv, dd, tar) Komandalar üçün Kopyalanan Məlumatların Faizini Göstərin
- pv əmrindən istifadə edərək verilənlərin gedişatını izləyin (kopyalayın/yedekləyin/sıxın
- Qabaqcıl Kopyalama Komandası – Linux-da böyük faylları/qovluqları kopyalayarkən tərəqqi panelini göstərir
Linux-da cp əmrinin başqa ən yaxşı nümunəsini bilirsinizmi? Aşağıdakı şərhlərdə fikirlərinizi bizə bildirin.