Linux命令之cp

用途說明

cp命令用來複制文件或者目錄,是Linux系統中最常用的命令之一。一般情況下,shell會設置一個別名,在命令行下複製文件時,如果目標文件已經存在,就會詢問是否覆蓋,不管你是否使用-i參數。但是如果是在shell腳本中執行cp時,沒有-i參數時不會詢問是否覆蓋。這說明命令行和shell腳本的執行方式有些不同。

[root@jfht ~]# type -a cp
cp is aliased to `cp -i'    <== 在命令行狀態,cp實際上是個別名
cp is /bin/cp
[root@jfht ~]#

常用參數

-i 詢問是否覆蓋。

-f 強制覆蓋,但如果有-i參數時,此參數無效。

-r 遞歸複製。

-a 遞歸複製,並且保留文件的時間、權限、屬主等屬性。

使用示例 示例一 複製單個文件

[root@jfht ~]# ls >ls0.txt
[root@jfht ~]# ls -l ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:41 ls0.txt

等待兩分鐘再操作。因爲同一分鐘看不出效果。
[root@jfht ~]# cp ls0.txt ls1.txt
[root@jfht ~]# ls -l ls0.txt ls1.txt
-rw-r--r-- 1 root root 213 10-18 20:41 ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:43 ls1.txt

在沒有帶-a參數時,兩個文件的時間是不一樣的。
[root@jfht ~]# cp -a ls0.txt ls2.txt
[root@jfht ~]# ls -l ls0.txt ls2.txt
-rw-r--r-- 1 root root 213 10-18 20:41 ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:41 ls2.txt

在帶了-a參數時,兩個文件的時間是一致的。
[root@jfht ~]# cp ls0.txt ls2.txt
cp:是否覆蓋“ls2.txt”? n

目標文件存在時,會詢問是否覆蓋。這是因爲cp是cp -i的別名。
[root@jfht ~]# cp -f ls0.txt ls2.txt
cp:是否覆蓋“ls2.txt”? n

目標文件存在時,即使加了-f標誌,也還會詢問是否覆蓋。
[root@jfht ~]# command cp ls0.txt ls2.txt

使用command命令執行cp時,就不會執行cp別名了,而是直接執行cp外部命令。
[root@jfht ~]# ls -l ls0.txt ls2.txt
-rw-r--r-- 1 root root 213 10-18 20:41 ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:48 ls2.txt

[root@jfht ~]# cp ls0.txt ls0.txt
cp: “ls0.txt” 及 “ls0.txt” 爲同一文件
[root@jfht ~]# cp -f ls0.txt ls0.txt
cp: “ls0.txt” 及 “ls0.txt” 爲同一文件

如果目標文件就是源文件,那麼無論加不加-f標誌,都是不會覆蓋的。

示例二 複製文件到目錄

[root@jfht ~]# mkdir tmp
[root@jfht ~]# cp ls0.txt tmp
[root@jfht ~]# cp -a ls1.txt tmp
[root@jfht ~]# cp -a ls1.txt ls2.txt tmp
cp:是否覆蓋“tmp/ls1.txt”? n
[root@jfht ~]# ls -l ls?.txt tmp/ls?.txt
-rw-r--r-- 1 root root 213 10-18 20:41 ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:43 ls1.txt
-rw-r--r-- 1 root root 213 10-18 20:48 ls2.txt
-rw-r--r-- 1 root root 213 10-18 21:02 tmp/ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:43 tmp/ls1.txt
-rw-r--r-- 1 root root 213 10-18 20:48 tmp/ls2.txt
[root@jfht ~]#

示例三 複製整個目錄

[root@jfht ~]# cp tmp tmp1
cp: 略過目錄 “tmp”
[root@jfht ~]# cp -a tmp tmp1
[root@jfht ~]# ls tmp tmp1
tmp:
ls0.txt  ls1.txt  ls2.txt
tmp1:
ls0.txt  ls1.txt  ls2.txt
[root@jfht ~]# ls -l tmp tmp1
tmp:
總計 24
-rw-r--r-- 1 root root 213 10-18 21:02 ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:43 ls1.txt
-rw-r--r-- 1 root root 213 10-18 20:48 ls2.txt
tmp1:
總計 24
-rw-r--r-- 1 root root 213 10-18 21:02 ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:43 ls1.txt
-rw-r--r-- 1 root root 213 10-18 20:48 ls2.txt
[root@jfht ~]#

[root@jfht ~]# cp -a tmp tmp1
[root@jfht ~]# ls -l tmp tmp1
tmp:
總計 24
-rw-r--r-- 1 root root 213 10-18 21:02 ls0.txt
-rw-r--r-- 1 root root 213 10-18 20:43 ls1.txt
-rw-r--r-- 1 root root 213 10-18 20:48 ls2.txt
tmp1:
總計 32
-rw-r--r-- 1 root root  213 10-18 21:02 ls0.txt
-rw-r--r-- 1 root root  213 10-18 20:43 ls1.txt
-rw-r--r-- 1 root root  213 10-18 20:48 ls2.txt
drwxr-xr-x 2 root root 4096 10-18 21:03 tmp
[root@jfht ~]#

注意目標目錄存在與否結果是不一樣的。目標目錄存在時,整個源目錄被複制到目標目錄裏面。

示例四 將光盤複製成光盤映像文件(iso文件)

把要複製的光盤放在光驅中,注意不需要將/dev/cdrom設備mount上來。

[root@localhost data] cp /dev/cdrom disk1.iso

[root@localhost data] ls -l disk1.iso

-rw-r-----      1    root     root      655392768      10月  18   19:48   disk1.iso

[root@localhost data]

注意:需要好幾分鐘時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章