linux cp命令詳解

2021-08-26 07:11:56 字數 3793 閱讀 4604

cp(複製檔案或目錄)

[root@linux~]#cp[-adfilprsu]**檔(source)目的檔(destination)

[root@linux~]#cp[options]source1source2source3….directory

引數:-a:相當於-pdr的意思;

-d:若**檔案為鏈結檔案的屬性(linkfile),則複製鏈結檔案屬性而非檔案本身;

-f:為強制(force)的意思,若有重複或其它疑問時,不會詢問使用者,而強制複製;

-i:若目的檔(destination)已經存在時,在覆蓋時會先詢問是否真的動作!

-l:進行硬式鏈結(hardlink)的鏈結檔建立,而非複製檔案本身;

-p:連同檔案的屬性一起複製過去,而非使用預設屬性;

-r:遞迴持續複製,用於目錄的複製行為;

-s:複製成為符號鏈結檔案(symboliclink),亦即『快捷方式』檔案;

-u:若destination比source舊才更新destination!

最後需要注意的,如果**檔有兩個以上,則最後乙個目的檔案一定要是『目錄』才行!

範例:範例一:將家目錄下的.bashrc複製到/tmp下,並更名為bashrc

[root@linux~]#cd/tmp

[root@linuxtmp]#cp~/.bashrcbashrc

[root@linuxtmp]#cp-i~/.bashrcbashrc

cp:overwrite`basrhc』?n

#重複作兩次動作,由於/tmp底下已經存在bashrc了,加上-i引數,

#則在覆蓋前會詢問使用者是否確定!可以按下n或者y呢!

#但是,反過來說,如果不想要詢問時,則加上-f這個引數來強制直接覆蓋!

範例二:將/var/log/wtmp複製到/tmp底下

[root@linuxtmp]#cp/var/log/wtmp.<==想要複製到目前的目錄,最後的.不要忘

[root@linuxtmp]#ls-l/var/log/wtmpwtmp

-rw-rw-r–1rootutmp71808jul1812:46/var/log/wtmp

-rw-r–r–1rootroot71808jul1821:58wtmp

#注意到了嗎?!在不加任何引數的情況下,檔案的所屬者會改變,連許可權也跟著改變了~

#這是個很重要的特性!要注意喔!還有,連檔案建立的時間也不一樣了!

#如果您想要將檔案的所有特性都一起複製過來,可以加上-a喔!

[root@linuxtmp]#cp-a/var/log/wtmpwtmp_2

[root@linuxtmp]#ls-l/var/log/wtmpwtmp_2

-rw-rw-r–1rootutmp71808jul1812:46/var/log/wtmp

-rw-rw-r–1rootutmp71808jul1812:46wtmp_2

#瞭了吧!整個資料特性完全一模一樣ㄟ!真是不賴~這就是-a的特性!

範例三:複製/etc/這個目錄下的所有內容到/tmp底下

[root@linuxtmp]#cp/etc//tmp

cp:omittingdirectory`/etc』<==如果是目錄,不能直接複製,要加上-r的引數

[root@linuxtmp]#cp-r/etc//tmp

#還是要再次的強調喔!-r是可以複製目錄,但是,檔案與目錄的許可權會被改變~

#所以,也可以利用cp-a/etc/tmp來下達指令喔!

範例四:將範例一複製的bashrc建立乙個鏈結檔(symboliclink)

[root@linuxtmp]#ls-lbashrc

-rw-r–r–1rootroot395jul1822:08bashrc

[root@linuxtmp]#cp-sbashrcbashrc_slink

[root@linuxtmp]#cp-lbashrcbashrc_hlink

[root@linuxtmp]#ls-lbashrc*

-rw-r–r–2rootroot395jul1822:08bashrc

-rw-r–r–2rootroot395jul1822:08bashrc_hlink

lrwxrwxrwx1rootroot6jul1822:31bashrc_slink->bashrc

#那個bashrc_slink是由-s的引數造成的,建立的是乙個『快捷方式』,

#所以您會看到在檔案的最右邊,會顯示這個檔案是『鏈結』到**去的!

#至於那個bashrc_hlink有趣了!建立了這個檔案之後,bashrc與bashrc_hlink

#所有的引數都一樣,只是,第二欄的link數改變成為2了~而不是原本的1喔!

#這兩種鏈結的方式的異同,我們會在下一章裡面進行介紹的!

範例五:若~/.bashrc比/tmp/bashrc新才複製過來

[root@linuxtmp]#cp-u~/.bashrc/tmp/bashrc

#這個-u的特性,是在目標檔案與**檔案有差異時,才會複製的。

#所以,比較常被用於『備份』的工作當中喔!^_^

範例六:將範例四造成的bashrc_slink複製成為bashrc_slink_2

[root@linuxtmp]#cpbashrc_slinkbashrc_slink_2

[root@linuxtmp]#ls-lbashrc_slink*

lrwxrwxrwx1rootroot6jul1822:31bashrc_slink->bashrc

-rw-r–r–1rootroot395jul1822:48bashrc_slink_2

#這個例子也是很有趣喔!原本複製的是鏈結檔,但是卻將鏈結檔的實際檔案複製過來了

#也就是說,如果沒有加上任何引數時,複製的是原始檔,而非鏈結檔案的屬性!

#若要複製鏈結檔案的屬性,就得要使用-d或者-a的引數了!

範例七:將家目錄的.bashrc及.bash_history複製到/tmp底下

[root@linuxtmp]#cp~/.bashrc~/.bash_history/tmp

#可以將多個資料一次複製到同乙個目錄去!

這個cp的功能很多,而由於我們常常在進行一些資料的複製,所以也會常常用到這個指令的。一般來說,我們如果去複製別人的資料(當然,該檔案您必須要有read的許可權才行啊!^_^)時,總是希望複製到的資料最後是我們自己的,所以,在預設的條件中,cp的**檔與目的檔的許可權是不同的,目的檔的擁有者通常會是指令操作者本身。舉例來說,上面的範例二中,由於我是root的身份,因此複製過來的檔案擁有者與群組就改變成為root所有了!這樣說,可以明白嗎?!^_^

由於具有這個特性,因此,當我們在進行備份的時候,某些需要特別注意的特殊許可權檔案,例如密碼檔案(/etc/shadow)以及一些設定檔,就不能直接以cp來複製,而必須要加上-a或者是-p等等可以完整複製檔案許可權的引數才行!另外,如果您想要複製檔案給其它的使用者,也必須要注意到檔案的許可權(包含讀、寫、執行以及檔案擁有者等等),否則,其它人還是無法針對您給予的檔案進行修訂的動作喔!注意注意!

至於上面的範例當中,第四個範例是最有趣的,使用-l及-s都會建立所謂的鏈結檔(linkfile),但是這兩種鏈結檔確有不一樣的展現情況。這是怎麼一回事啊?那個-l就是所謂的hardlink,至於-s則是symboliclink,鳥哥這裡先不介紹,因為這個涉及i-node的相關知識,我們還沒有介紹到,下一章再來討論這個link的問題喔!總之,由於cp有種種的檔案屬性與許可權的特性,所以,在複製時,您必須要清楚的了解到:

•是否需要完整的保留**檔案的資訊?

•**檔案是否為鏈結檔(symboliclinkfile)?

•**檔是否為特殊的檔案,例如fifo,socket等?

•**檔案是否為目錄?

LINUX CP命令詳解

cp 複製檔案或目錄 root linux cp adfilprsu 檔 source 目的檔 destination root linux cp options source1 source2 source3 directory 引數 a 相當於 pdr 的意思 d 若 檔案為鏈結檔案的屬性 li...

LINUX CP命令詳解

cp 複製檔案或目錄 root linux cp adfilprsu 檔 source 目的檔 destination root linux cp options source1 source2 source3 directory 引數 最後需要注意的,如果 檔有兩個以上,則最後乙個目的檔案一定要是...

LINUX CP命令詳解

cp 複製檔案或目錄 cp adfilprsu 檔 source 目的檔 destination cp options source1 source2 source3 directory 引數 a 相當於 pdr 的意思 f 為強制 force 的意思,若有重複或其它疑問時,不會詢問使用者,而強制複...