歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux之cp命令詳解

Linux之cp命令詳解

日期:2017/2/28 13:53:56   编辑:Linux教程

Copy Files And Directory
文件的復制和移動對於大多數計算機愛好者來說是耳熟能詳的,在windows下直接鼠標右鍵復制粘貼,重命名等等,看著是那麼簡單,但是步驟也不少,但是在Linux中文件的復制與移動也僅僅就是一句命令就可以實現,下面我們就來看看文件中的復制命令把..
Name:
cp(copy files and directory)復制文件和目錄
命令格式:

cp [選項]... SOURCE... DESC

"..."表示源文件可以有多個因此我們可以從上面得到這樣的結論:
cp只能把一個文件復制成另一個文件

cp可以把多個文件復制到一個目錄裡

3.如果cp後面有很多文件,那麼最後一個一定是一個目錄

下面我們通過代碼詳細了解一下cp的實際用法:
[linuxidc@mylab ~]$ cp /etc/man_db.conf /tmp/test
[linuxidc@mylab ~]$ ls /tmp/
anaconda.log storage.log
hsperfdata_root systemd-private-3E1wlM
ifcfg.log systemd-private-cxUWsv
ks-script-5GePg3 systemd-private-StjRUY
packaging.log test
program.log vmware-root
ssh-x1RDJKuGNlHn yum.log
[linuxidc@mylab ~]$

這句命令是把man_db.conf復制到/tmp/下面並且把文件改名為test
如果目標目錄下存在目標文件,那麼源文件的內容就會覆蓋目標文件
[linuxidc@mylab tmp]$ cp /etc/man_db.conf /tmp/test
[linuxidc@mylab tmp]$ cp /etc/locale.conf /tmp/test
cp:是否覆蓋"/tmp/test"?

這樣是不是很清楚明白呢?大家注意這裡cp的交互是因為在alias中定義了一個alias cp='cp -i'的原因,i是cp的一個選項,實現人機交互的作用,這裡的覆蓋其實相當於把原來的test文件刪除,然後把源文件復制到/tmp/下並且改名為test,這一點我們要理解

可是,如果test在/tmp/下是一個目呢?
[linuxidc@mylab tmp]$ cp /etc/man_db.conf /tmp/test
[linuxidc@mylab tmp]$ ls /tmp/test
man_db.conf
[linuxidc@mylab tmp]$

這樣一看就明白了,把源文件復制到test目錄下,源文件的名稱不變
下面我們看這樣一段代碼
[linuxidc@mylab tmp]$ cp /etc/init.d/ /tmp/
cp: 略過目錄"/etc/init.d/"
[linuxidc@mylab tmp]$

這是什麼意思呢,原因很簡單,cp默認機制是復制文件的,不會復制目錄,可是我們想復制目錄改如何實現呢?

-r:[遞歸選項]復制一個目錄及其目錄下的所有文件
[linuxidc@mylab tmp]$ cp -r /etc/init.d/ /tmp/home
[linuxidc@mylab tmp]$ ls /tmp/home
functions netconsole network README
[linuxidc@mylab tmp]$

這樣大家是不是看明白了呢? -r會把一個目錄以及目錄下的所有的文件遞歸復制出來到目標目錄中,大家仔細看,/tmp下是沒有home目錄的,這樣的執行會直接創建一個home目錄並且home目錄裡面有源目錄的內容,大家理解了嗎
我們假如home是一個文件,看一看什麼情況
[linuxidc@mylab tmp]$ cp -r /etc/init.d/ /tmp/1
cp: 無法以目錄"/etc/init.d/" 來覆蓋非目錄"/tmp/1"
[linuxidc@mylab tmp]$

會提示你cp: 無法以目錄"/etc/init.d/" 來覆蓋非目錄"/tmp/1",但是在有些系統的版本中是可以執行的,執行的結果就是會覆蓋文件的內容,並且創建成一個沒有源文件的錯誤的鏈接,好這裡大家注意一下就可以了
下面我們看一下cp的一些其它選項
-f:表示強行復制
如果目標文件存在,不進行人機交互,直接覆蓋文件內容,是不是很霸道呢?
[linuxidc@mylab tmp]$ cp -f /etc/man_db.conf /tmp/1
[linuxidc@mylab tmp]$

-i:進行人際交互,前面我們講過了
-p:保留文件的屬主,屬組,時間戳
1234 [linuxidc@mylab tmp]$ cp -p ./storage.log ./storage.log1
[linuxidc@mylab tmp]$ ll
-rw-r--r--. 1 root root 0 3月 9 23:36 storage.log
-rw-r--r--. 1 linuxidc jason 0 3月 9 23:36 storage.log1

-L:復制的是鏈接,實際上復制的是鏈接指向的文件(默認的是-L)
[linuxidc@mylab etc]$ ll
lrwxrwxrwx. 1 root root 13 3月 10 07:19 rc.local -> rc.d/rc.local
[linuxidc@mylab etc]$ cp -L /etc/rc.local /tmp/
[linuxidc@mylab etc]$ ll /tmp
-rw-r--r--. 1 linuxidc jason 473 3月 10 16:59 rc.local

看明白是什麼意思了麼?復制過來後顯示的是一個文件,文件的內容是rc.d/rc.local的內容,而不是鏈接
-P:保持鏈接自身
[linuxidc@mylab etc]$ cp -P /etc/rc.local /tmp/rc12.local
[linuxidc@mylab etc]ll /tmp
lrwxrwxrwx. 1 linuxidc jason 13 3月 10 17:04 rc12.local -> rc.d/rc.local

原來的是鏈接,復制過來的還是鏈接
-d:與-P一樣,復制鏈接自身

-R:與-r一樣,遞歸
-a:same as -dR,猜猜什麼意思j_0006.gif,"歸檔",就是不改變文件的所有屬性,備份存放
好了,演示到這,cp這個命令我想你一定會是熟記於心了,在回頭鞏固鞏固。

Copyright © Linux教程網 All Rights Reserved