Linux中的cp命令&老九門


cp命令詳解ide

     wKioL1edjenimOL6AADtBqoIns0201.jpg


cp命令的老九門ui


wKioL1edjenCIGF5AAGL-lXHY28795.png


咱們先看第一種狀況:spa

一、源是一個文件,目標是不存在的orm

     使用 cp aa /testdir/dir1他會建立一個dir1的目標文件,而且將源的內容放到建立的dir目標文件中blog

wKiom1edjenQYk4DAABCfEF5Ck4595.png


  二、源是一個文件,目標存在且爲文件(上述命令執行後,dir1的文件就會被建立了),而後再次執行cp aa /testdir/dir1,會提示你是否覆蓋dir1這個文件,選擇y後,再次查看aa和dir1文件的屬性,發現dir1的mtime發生了改變說明該文件是被修改了,的確完成了複製。遞歸

wKiom1edjemSG7oLAABJBnlkXTc633.png

    可是使用普通用戶登陸一個終端使用一樣一個命令執行,就不會出現上述交互式的提醒,說明root用戶定義了一個別名,利用了cp命令的-i選項,這時咱們查看別名的定義的確找到這個別名。get

wKioL1edjeqCo-rvAAArsGqFCX4947.png

wKioL1edjeryczIZAAA5Ae0a6AM750.png

此時在root用戶下,我不想有交互式的提示,能夠經過執行命令自己,能夠有三種方式it

    一、\cp   反斜線cp
io

    二、‘cp’  單引號cp
class

    三、/usr/bin/cp  使用絕對路徑


-f選項的使用

    如今root用戶下將/testdir/aa複製到andy用戶的家目錄下而且以dd命名

wKiom1edjerxUWk0AAANfLG0sqQ301.png

    這時咱們從新開一個終端,使用andy用戶登陸,查看家目錄下面的文件

wKioL1edjeqi7wQ-AAAqmpFe2YA749.png

    發現dd文件的屬主和屬組都是root用戶的,這個咱們不會奇怪,會保持本來的屬性

這時使用cp aa dd 命令看是否能夠將dd文件覆蓋了,發現是權限不夠的

wKiom1edjerQKuy_AAAVW1EcOkU586.png

    這時使用cp -f aa dd 實現的是將dd文件先給刪了,而後在從新以andy用戶建立一個dd的文件,而且將aa文件的內容寫到dd裏面(爲何說將原來的dd文件刪了呢?咱們看新的dd文件的屬主和屬組就知道了,若果是沒有刪除dd文件,簡單的執行覆蓋操做,其dd本來的屬主和屬組屬性是不會變的)經過查man幫助也是同一個意思

wKioL1edjevhcKdVAAAZu0HWZpA843.png

wKiom1edjeuTeDLRAACT8AqrZh8539.png


三、源是一個文件,目標存在且爲目錄

wKiom1edjeuSsp_IAAAmdvZIEBc481.png

    使用cp aa /home/命令(注意目錄的寫法),在目標/home/目錄下會建立一個和aa同名的一個文件,並將源文件的內容寫到home目錄下建立的文件中


四、源是多個文件,目標是文件且不存在

    此時會報錯執行不了

wKioL1edjeui5WlIAAAn1MdGc-M857.png

    錯誤提醒你/home/xxxxxxx不是一個目錄,由於cp命令要求的若是是多個源文件,其目標必須是目錄文件,能夠經過man幫助查看

wKiom1edjevTo8DhAAAc2d34GYc695.png


五、源是多個文件,目標是文件且存在

    一樣的道理,根據man幫助,目標必須是目錄文件,所以也一樣是報錯的

wKioL1edjeyzO4YCAAAy-iwA064968.png


六、源是多個文件,目標是目錄文件且存在

    注意目錄的寫法,這個很好理解由於/home目錄下面存在aa文件,所以執行cp aa bb cc /home/操做時會提醒下是否覆蓋,選擇覆蓋後,而後到/home目錄下的確能夠看到有aa bb cc 文件,這個很容易理解。

wKioL1edjezBECwgAABNMm9YZ6M760.png


七、源是目錄文件,目標是不存在的(複製目錄文件必須使用-r 選項實現遞歸的做用)

wKiom1edjeyBtSivAAEARygFuwA107.png

    目標不存在,無論是文件仍是目錄,都會建立指定的/aa/目錄或者/bb文件,複製源目錄下面的全部文件內容到目標文件或者目錄,經過ls查看,的確是給複製過來了。


八、源是目錄文件,目標已經存在且爲文件

    若是源是目錄文件,目標是存在的文件,執行cp -r /etc/sysconfig/ /gg 則會報錯,意思說目錄不能覆蓋文件

wKiom1edjezTqTaQAABmMKQra4g269.png


九、源是目錄文件,目標已經存在且爲目錄

    首先/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選項(表面意思是強制,實際是把原文件刪了,再從新建一個)

wKioL1edje2ghj6nAAE881b0R60710.png

相關文章
相關標籤/搜索