cp:複製檔案或者目錄
用法格式:
cp [option] [source] [dest]
cp [選項] [原始檔] [目標檔案]
>用root賬戶,建立檔案,複製檔案
root@dev:/home/ghostwu/linux/cp# vim 1.txt root@dev:/home/ghostwu/linux/cp# ls -l total 4 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt root@dev:/home/ghostwu/linux/cp# cp 1.txt 2.txt root@dev:/home/ghostwu/linux/cp# ls -l total 8 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--r-- 1 root root 19 5月 6 17:48 2.txt root@dev:/home/ghostwu/linux/cp# su - ghostwu ghostwu@dev:~$ cd - -su: cd: OLDPWD not set ghostwu@dev:~$ cd linux/cp ghostwu@dev:~/linux/cp$ ls -l total 8 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--r-- 1 root root 19 5月 6 17:48 2.txt ghostwu@dev:~/linux/cp$ cp 2.txt 3.txt cp: cannot create regular file `3.txt`: Permission denied
上面,當我切換到ghostwu這個賬戶去複製的時候,許可權不允許,因為2.txt 這個檔案 的其他組只有 只讀 許可權, 而cp需要寫許可權,所以就報了一個無許可權建立複製的檔案。
方法一,用sudo提權
ghostwu@dev:~/linux/cp$ ls -l total 8 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--r-- 1 root root 19 5月 6 17:48 2.txt ghostwu@dev:~/linux/cp$ sudo cp 2.txt 3.txt [sudo] password for ghostwu: ghostwu@dev:~/linux/cp$ ls -l total 12 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--r-- 1 root root 19 5月 6 17:48 2.txt -rw-r--r-- 1 root root 19 5月 6 17:52 3.txt
方法二,用root使用者給檔案的其他組使用者 可寫許可權,同時普通使用者要對檔案所屬的目錄擁有寫許可權, 也就是要對 “cp” 這個目錄擁有寫許可權
ghostwu@dev:~/linux$ ls -l total 4 drwxr-xr-x 2 root root 4096 5月 6 17:52 cp ghostwu@dev:~/linux$ sudo chmod o+w cp ghostwu@dev:~/linux$ ls -l total 4 drwxr-xrwx 2 root root 4096 5月 6 17:52 cp ghostwu@dev:~/linux$ cd cp ghostwu@dev:~/linux/cp$ ls -l total 12 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--r-- 1 root root 19 5月 6 17:48 2.txt -rw-r--rw- 1 root root 19 5月 6 17:52 3.txt ghostwu@dev:~/linux/cp$ sudo chmod o+w 2.txt ghostwu@dev:~/linux/cp$ ls -l total 12 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--rw- 1 root root 19 5月 6 17:48 2.txt -rw-r--rw- 1 root root 19 5月 6 17:52 3.txt ghostwu@dev:~/linux/cp$ cp 2.txt 4.txt ghostwu@dev:~/linux/cp$ ls -l total 16 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--rw- 1 root root 19 5月 6 17:48 2.txt -rw-r--rw- 1 root root 19 5月 6 17:52 3.txt -rw-r--r-- 1 ghostwu ghostwu 19 5月 6 17:58 4.txt
用普通使用者去複製root賬戶建立的2.txt檔案,起一個新名字4.txt,預設情況下cp 改變了檔案的許可權和時間屬性,如果在複製的時候想保留檔案原有的許可權資訊以及時間屬性時,可以加引數 -p
ghostwu@dev:~/linux/cp$ ls -l total 16 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--rw- 1 root root 19 5月 6 17:48 2.txt -rw-r--rw- 1 root root 19 5月 6 17:52 3.txt -rw-r--r-- 1 ghostwu ghostwu 19 5月 6 17:58 4.txt ghostwu@dev:~/linux/cp$ cp -p 2.txt 5.txt ghostwu@dev:~/linux/cp$ ls -l total 20 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--rw- 1 root root 19 5月 6 17:48 2.txt -rw-r--rw- 1 root root 19 5月 6 17:52 3.txt -rw-r--r-- 1 ghostwu ghostwu 19 5月 6 17:58 4.txt -rw-r--rw- 1 ghostwu ghostwu 19 5月 6 17:48 5.txt
-i: 帶提示資訊的複製,預設情況下,cp命令會直接覆蓋
ghostwu@dev:~/linux/cp$ ls -l total 20 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--rw- 1 root root 19 5月 6 17:48 2.txt -rw-r--rw- 1 root root 19 5月 6 17:52 3.txt -rw-r--r-- 1 ghostwu ghostwu 19 5月 6 17:58 4.txt -rw-r--rw- 1 ghostwu ghostwu 19 5月 6 17:48 5.txt ghostwu@dev:~/linux/cp$ cp 2.txt 5.txt ghostwu@dev:~/linux/cp$ cp -i 2.txt 5.txt cp: overwrite `5.txt`? y
-r引數: 遞迴複製目錄以及檔案
ghostwu@dev:~/linux/cp$ ls -l total 20 -rw-r--r-- 1 root root 19 5月 6 17:47 1.txt -rw-r--rw- 1 root root 19 5月 6 17:48 2.txt -rw-r--rw- 1 root root 19 5月 6 17:52 3.txt -rw-r--r-- 1 ghostwu ghostwu 19 5月 6 17:58 4.txt -rw-r--rw- 1 ghostwu ghostwu 19 5月 6 18:04 5.txt ghostwu@dev:~/linux/cp$ mkdir -p a/b ghostwu@dev:~/linux/cp$ mv *.txt a/b/ ghostwu@dev:~/linux/cp$ tree . └── a └── b ├── 1.txt ├── 2.txt ├── 3.txt ├── 4.txt └── 5.txt 2 directories, 5 files ghostwu@dev:~/linux/cp$ cp a a2 cp: omitting directory `a` ghostwu@dev:~/linux/cp$ ls a ghostwu@dev:~/linux/cp$ cp -r a a2 ghostwu@dev:~/linux/cp$ tree . ├── a │ └── b │ ├── 1.txt │ ├── 2.txt │ ├── 3.txt │ ├── 4.txt │ └── 5.txt └── a2 └── b ├── 1.txt ├── 2.txt ├── 3.txt ├── 4.txt └── 5.txt 4 directories, 10 files ghostwu@dev:~/linux/cp$
通過alias別名,給cp命令加提示資訊
ghostwu@dev:~/linux/cp$ alias cp=`cp -i` ghostwu@dev:~/linux/cp$ ls a a2 ghostwu@dev:~/linux/cp$ touch 1.txt ghostwu@dev:~/linux/cp$ cp 1.txt 2.txt ghostwu@dev:~/linux/cp$ cp 1.txt 2.txt cp: overwrite `2.txt`? y ghostwu@dev:~/linux/cp$
使用命令的絕對路徑(全路徑),可以遮蔽別名
ghostwu@dev:~/linux/cp$ alias | grep cp alias cp=`cp -i` ghostwu@dev:~/linux/cp$ ls 1.txt 2.txt a a2 ghostwu@dev:~/linux/cp$ cp 1.txt 2.txt cp: overwrite `2.txt`? y ghostwu@dev:~/linux/cp$ which cp /bin/cp ghostwu@dev:~/linux/cp$ /bin/cp 1.txt 2.txt
使用反斜槓,也可以遮蔽系統別名
ghostwu@dev:~/linux/cp$ cp 1.txt 2.txt ghostwu@dev:~/linux/cp$ cp 2.txt 1.txt
-a引數,相當於-r -d -p三個引數的綜合作用效果
ghostwu@dev:~/linux/cp$ ls 1.txt 2.txt a a2 ghostwu@dev:~/linux/cp$ cp -a a a3 ghostwu@dev:~/linux/cp$ ls 1.txt 2.txt a a2 a3