生活随笔
收集整理的這篇文章主要介紹了
复制、移动和删除:cp, rm, mv
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
要復制文件,請使用cp(copy)命令。不過,cp命令的用途很多。除了單純的復制之外,還可以建立連接文件(就是快捷方式),比較兩個文件的新舊而予以更新,以及復制整個目錄等等。至于移動目錄與文件,則使用mv(move),這個命令也可以直接用來重命名(rename)。刪除使用rm(remove)命令。下面我們就來看一看。
cp(復制文件或目錄)
[root@linux ~]# cp [-adfilprsu] 來源文件(source) 目標文件(destination) [root@linux ~]# cp [options] source1 source2 source3 .... directory 參數: -a : 相當于 -pdr 的意思。 -d : 若來源文件為連接文件的屬性(link file),則復制連接文件屬性而非文件本身。 -f : 強制(force)的意思,若有重復或其他疑問時,不會詢問用戶,而強制復制。 -i : 若目標文件(destination)已經存在,在覆蓋時會先詢問是否真的操作。 -l : 建立硬連接(hard link)的連接文件,而非復制文件本身。 -p : 連同文件的屬性一起復制,而非使用默認屬性。 -r : 遞歸持續復制,用于目錄的復制行為。 -s : 復制成為符號連接文件(symbolic link),即“快捷方式”文件。 -u : 若目標文件比來源文件舊,才更新目標文件。 最后,需要注意,如果來源文件有兩個以上,則最后一個目的文件一定是“目錄”。 范例: 范例一:將家目錄下的 .bashrc復制到 /tmp下,并重命名為bashrc。 [root@linux ~]# cd /tmp [root@linux tmp]# cp ~/.bashrc bashrc [root@linux tmp]# cp -i ~/.bashrc bashrc cp: overwrite `basrhc'? n # 重復做兩次動作,由于 /tmp下面已經存在bashrc了,加上 -i參數, # 在覆蓋前會讓用戶確認。可以按下n或者y。 # 但是,反過來說,如果不想詢問,則加上 -f參數來強制直接覆蓋。 范例二:將 /var/log/wtmp復制到 /tmp下。 [root@linux tmp]# cp /var/log/wtmp . <==想要復制到當前目錄,最后的 . 不要忘 [root@linux tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r--? 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp -rw-r--r--? 1 root root 71808 Jul 18 21:58 wtmp # 注意到了嗎?在不加任何參數的情況下,文件的擁有者會改變,連權限也跟著改變了。 # 這是個很重要的特性。要注意。還有,文件建立時間也不一樣了。 # 如果想要將文件的所有屬性都一起復制,可以加上 -a。 [root@linux tmp]# cp -a /var/log/wtmp wtmp_2 [root@linux tmp]# ls -l /var/log/wtmp wtmp_2 -rw-rw-r--? 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp -rw-rw-r--? 1 root utmp 71808 Jul 18 12:46 wtmp_2 # 整個屬性完全一模一樣。這就是 -a的作用。 范例三:將 /etc/ 目錄下的所有內容復制到 /tmp。 [root@linux tmp]# cp /etc/ /tmp cp: omitting directory `/etc'?? <== 如果是目錄,不能直接復制,要加上 -r參數 [root@linux tmp]# cp -r /etc/ /tmp # 再次強調。-r可以復制目錄,但是,文件與目錄的權限會被改變。 # 所以,也可以利用cp -a /etc /tmp來執行命令。 范例四:將范例一復制的bashrc建立一個符號連接文件(symbolic link) [root@linux tmp]# ls -l bashrc -rw-r--r--? 1 root root 395 Jul 18 22:08 bashrc [root@linux tmp]# cp -s bashrc bashrc_slink [root@linux tmp]# cp -l bashrc bashrc_hlink [root@linux tmp]# ls -l bashrc* -rw-r--r--? 2 root root 395 Jul 18 22:08 bashrc -rw-r--r--? 2 root root 395 Jul 18 22:08 bashrc_hlink lrwxrwxrwx? 1 root root?? 6 Jul 18 22:31 bashrc_slink -> bashrc # bashrc_slink是由 -s的參數造成的,建立的是一個“快捷方式”, # 所以會看到在文件的最右邊,會顯示這個文件是“連接”到哪里的。 # 至于bashrc_hlink。建立了這個文件之后,bashrc與bashrc_hlink # 所有的參數都一樣,只是,第二列的link數改變成為2了。而不是原本的1。 # 這兩種連接方式的異同,我們會在下一章介紹。 范例五:若 ~/.bashrc比 /tmp/bashrc新,則復制。 [root@linux tmp]# cp -u ~/.bashrc /tmp/bashrc # -u的作用是,在目標文件與來源文件有差異時,才會復制。 # 所以,比較常用于“備份”。 范例6:將范例四生成的bashrc_slink復制成為bashrc_slink_2。 [root@linux tmp]# cp bashrc_slink bashrc_slink_2 [root@linux tmp]# ls -l bashrc_slink* lrwxrwxrwx? 1 root root?? 6 Jul 18 22:31 bashrc_slink -> bashrc -rw-r--r--? 1 root root 395 Jul 18 22:48 bashrc_slink_2 # 這個例子也很有趣。原本復制的是連接文件,卻將連接文件的實際文件復制過來了。 # 也就是說,如果沒有加上任何參數,復制的是來源文件,而非連接文件的屬性。 # 若要復制連接文件的屬性,就要使用 -d或者 -a參數。 范例7:將家目錄的 .bashrc及 .bash_history復制到 /tmp下面。 [root@linux tmp]# cp ~/.bashrc ~/.bash_history /tmp # 將多個數據一次復制到同一個目錄。 |
cp的功能很多,由于我們常常進行一些數據的復制,所以也會常常用到這個命令。一般來說,如果去復制別人的數據(當然,該文件必須要有read的權限),總是希望復制到的數據最后是我們自己的,所以,在默認條件中,cp的來源文件與目標文件的權限是不同的,目標文件的擁有者通常會是命令操作者本身。舉例來說,范例二中,由于我是root身份,因此復制過來的文件擁有者與用戶組就改變成為root所有了。
由于具有這個特性,在進行備份的時候,某些需要特別注意的特殊權限文件,例如密碼文件(/etc/shadow)以及一些設置文件,就不能直接以cp來復制,而必須要加上 -a或者是 -p,這些可以完整復制文件權限的參數。另外,如果想要復制文件給其他用戶,也必須要注意文件的權限(包含讀、寫、執行以及文件擁有者),否則,其他人還是無法對你給的文件進行修改。特別要注意。
上面的第4個范例最有趣,使用 -l及 -s都會建立所謂的連接文件(link file),但是這兩種連接文件有不一樣的顯示。這是怎么一回事? -l就是所謂的硬連接(hard link), -s則是符號連接(symbolic link),筆者這里先不介紹,因為這涉及i-node的相關知識,我們還沒有介紹到,下一章再討論這個連接的問題。總之,由于cp有種種文件屬性與權限,所以,在復制時,必須要清楚地了解到:
??是否需要完整地保留來源文件的信息?
??來源文件是否為符號連接文件(symbolic link file)?
??來源文件是否為特殊的文件,例如FIFO、套接字等?
??來源文件是否為目錄?
rm(刪除文件或目錄)
[root@linux ~]# rm [-fir] 文件或目錄 參數: -f :就是 force 的意思,強制刪除。 -i :交互模式,在刪除前會詢問用戶是否動作 -r :遞歸刪除。常用在目錄的刪除 范例: 范例一:建立一個文件后予以刪除 [root@linux ~]# cd /tmp [root@linux tmp]# cp ~/.bashrc bashrc [root@linux tmp]# rm -i bashrc rm: remove regular file `bashrc'? y # 如果加上 -i參數就會主動詢問。如果不需要詢問就加 -f參數。 范例二:刪除一個不為空的目錄。 [root@linux tmp]# mkdir test [root@linux tmp]# cp ~/.bashrc test/ <== 將文件復制到此目錄去,就不是空的目錄了 [root@linux tmp]# rmdir test rmdir: `test': Directory not empty <== 刪不掉。因為這不是空的目錄。 [root@linux tmp]# rm -rf test |
刪除命令(remove)相當于DOS下的del命令。這里要注意的是,通常,在Linux系統中,為了怕文件被誤刪,很多版本默認有 -i參數,-i指每個文件被刪除之前都會讓用戶確認一次,以防誤刪文件。如果要連目錄下的內容都一起刪除,例如子目錄里面還有子目錄,就要使用 -rf參數。不過,使用“rm -rf”命令之前,請千萬注意,因為該目錄或文件“肯定”會被root刪除。因為系統不會再次詢問是否要刪除。所以這是非常重要的命令,需要特別注意。不過,如果確定該目錄不要了,使用rm -rf來循環刪除是不錯的方式。
mv(移動文件與目錄,或重命名) [root@linux ~]# mv [-fiv] source destination [root@linux ~]# mv [options] source1 source2 source3 .... directory 參數: -f :force,強制的意思,強制直接移動而不詢問。 -i :若目標文件(destination)已經存在,就會詢問是否覆蓋。 -u :若目標文件已經存在,且來源文件比較新,才會更新(update) 范例: 范例一:復制一個文件,建立一個目錄,將文件移動到目錄中。 [root@linux ~]# cd /tmp [root@linux tmp]# cp ~/.bashrc bashrc [root@linux tmp]# mkdir mvtest [root@linux tmp]# mv bashrc mvtest # 將某個文件移動到某個目錄去,就是這樣做。 范例二:將剛剛的目錄名重命名為 mvtest2。 [root@linux tmp]# mv mvtest mvtest2 <== 這樣就重命名了。 # 其實,在Linux下還有個有趣的命令,名為rename, # 該命令專門進行文件的重命名。用途不少。可以參閱man rename。 范例三:再建立兩個文件,再全部移動到 /tmp/mvtest2中。 [root@linux tmp]# cp ~/.bashrc bashrc1 [root@linux tmp]# cp ~/.bashrc bashrc2 [root@linux tmp]# mv bashrc1 bashrc2 mvtest2 # 注意,如果有多個來源文件或目錄,則最后一個目標文件一定是“目錄”。 # 意思是,將所有數據移動到該目錄。 |
這是移動(move)的意思。要移動文件或目錄,這個命令就很重要。同樣,也可以使用 -u(update)來測試新舊文件,看看是否需要移動。另外一個用途就是“更改文件名”。我們可以很輕松地使用mv來更改文件名。不過,Linux的rename命令,可以用來更改大量文件的文件名,你可以利用man rename查看一下。
轉載于:https://www.cnblogs.com/benio/archive/2010/07/27/1785929.html
總結
以上是生活随笔為你收集整理的复制、移动和删除:cp, rm, mv的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。