cp命令詳解ide
cp命令的老九門ui
咱們先看第一種狀況:spa
一、源是一個文件,目標是不存在的orm
使用 cp aa /testdir/dir1他會建立一個dir1的目標文件,而且將源的內容放到建立的dir目標文件中blog
二、源是一個文件,目標存在且爲文件(上述命令執行後,dir1的文件就會被建立了),而後再次執行cp aa /testdir/dir1,會提示你是否覆蓋dir1這個文件,選擇y後,再次查看aa和dir1文件的屬性,發現dir1的mtime發生了改變說明該文件是被修改了,的確完成了複製。遞歸
可是使用普通用戶登陸一個終端使用一樣一個命令執行,就不會出現上述交互式的提醒,說明root用戶定義了一個別名,利用了cp命令的-i選項,這時咱們查看別名的定義的確找到這個別名。get
此時在root用戶下,我不想有交互式的提示,能夠經過執行命令自己,能夠有三種方式it
一、\cp 反斜線cp
io
二、‘cp’ 單引號cp
class
三、/usr/bin/cp 使用絕對路徑
-f選項的使用
如今root用戶下將/testdir/aa複製到andy用戶的家目錄下而且以dd命名
這時咱們從新開一個終端,使用andy用戶登陸,查看家目錄下面的文件
發現dd文件的屬主和屬組都是root用戶的,這個咱們不會奇怪,會保持本來的屬性
這時使用cp aa dd 命令看是否能夠將dd文件覆蓋了,發現是權限不夠的
這時使用cp -f aa dd 實現的是將dd文件先給刪了,而後在從新以andy用戶建立一個dd的文件,而且將aa文件的內容寫到dd裏面(爲何說將原來的dd文件刪了呢?咱們看新的dd文件的屬主和屬組就知道了,若果是沒有刪除dd文件,簡單的執行覆蓋操做,其dd本來的屬主和屬組屬性是不會變的)經過查man幫助也是同一個意思
三、源是一個文件,目標存在且爲目錄
使用cp aa /home/命令(注意目錄的寫法),在目標/home/目錄下會建立一個和aa同名的一個文件,並將源文件的內容寫到home目錄下建立的文件中
四、源是多個文件,目標是文件且不存在
此時會報錯執行不了
錯誤提醒你/home/xxxxxxx不是一個目錄,由於cp命令要求的若是是多個源文件,其目標必須是目錄文件,能夠經過man幫助查看
五、源是多個文件,目標是文件且存在
一樣的道理,根據man幫助,目標必須是目錄文件,所以也一樣是報錯的
六、源是多個文件,目標是目錄文件且存在
注意目錄的寫法,這個很好理解由於/home目錄下面存在aa文件,所以執行cp aa bb cc /home/操做時會提醒下是否覆蓋,選擇覆蓋後,而後到/home目錄下的確能夠看到有aa bb cc 文件,這個很容易理解。
七、源是目錄文件,目標是不存在的(複製目錄文件必須使用-r 選項實現遞歸的做用)
目標不存在,無論是文件仍是目錄,都會建立指定的/aa/目錄或者/bb文件,複製源目錄下面的全部文件內容到目標文件或者目錄,經過ls查看,的確是給複製過來了。
八、源是目錄文件,目標已經存在且爲文件
若是源是目錄文件,目標是存在的文件,執行cp -r /etc/sysconfig/ /gg 則會報錯,意思說目錄不能覆蓋文件
九、源是目錄文件,目標已經存在且爲目錄
首先/gg文件不存在,第一次執行cp -r /etc/sysconfig/ /gg 會按照第7種狀況,會把sysconfig目錄下的內容複製到/gg文件內,此時/gg就爲目錄了,而後再次執行cp -r /etc/sysconfig/ /gg,此時會在目標/gg下新建一個sysconfig的目錄,而且把目錄的內容放置在新建的sysconfig裏面,這時ls /gg 會發現裏面多了一個sysconfig的目錄,若是再次執行cp -r /etc/sysconfig/ /gg 就會出現是否覆蓋的提醒,若不需提醒是使用命令自己,而不是使用咱們理解的-f選項(表面意思是強制,實際是把原文件刪了,再從新建一個)