天天看點

Linux檔案與目錄管理 - ls, cp, mv

[[email protected] ~]# ls [-aAdfFhilnrRSt] 目錄名稱
[[email protected] ~]# ls [--color={never,auto,always}] 目錄名稱
[[email protected] ~]# ls [--full-time] 目錄名稱
選項與參數:
-a  :全部的檔案,連同隐藏檔( 開頭為 . 的檔案) 一起列出來(常用)
-A  :全部的檔案,連同隐藏檔,但不包括 . 與 .. 這兩個目錄
-d  :僅列出目錄本身,而不是列出目錄内的檔案資料(常用)
-f  :直接列出結果,而不進行排序 (ls 預設會以檔名排序!)
-F  :根據檔案、目錄等資訊,給予附加資料結構,例如:
      *:代表可運作檔; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 檔案;
-h  :将檔案容量以人類較易讀的方式(例如 GB, KB 等等)列出來;
-i  :列出 inode 号碼,inode 的意義下一章将會介紹;
-l  :長資料串列出,包含檔案的屬性與權限等等資料;(常用)
-n  :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在帳号管理提到!)
-r  :将排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小;
-R  :連同子目錄内容一起列出來,等於該目錄下的所有檔案都會顯示出來;
-S  :以檔案容量大小排序,而不是用檔名排序;
-t  :依時間排序,而不是用檔名。
--color=never  :不要依據檔案特性給予顔色顯示;
--color=always :顯示顔色
--color=auto   :讓系統自行依據配置來判斷是否給予顔色
--full-time    :以完整時間模式 (包含年、月、日、時、分) 輸出
--time={atime,ctime} :輸出 access 時間或改變權限屬性時間 (ctime) 
                       而非内容變更時間 (modification time)      
[[email protected] ~]# cp [-adfilprsu] 來源檔(source) 目标檔(destination)
[[email protected] ~]# cp [options] source1 source2 source3 .... directory
選項與參數:
-a  :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
-d  :若來源檔為連結檔的屬性(link file),則複制連結檔屬性而非檔案本身;
-f  :為強制(force)的意思,若目标檔案已經存在且無法開啟,則移除後再嘗試一次;
-i  :若目标檔(destination)已經存在時,在覆寫時會先詢問動作的進行(常用)
-l  :進行硬式連結(hard link)的連結檔建立,而非複制檔案本身;
-p  :連同檔案的屬性一起複制過去,而非使用預設屬性(備份常用);
-r  :遞回持續複制,用於目錄的複制行為;(常用)
-s  :複制成為符号連結檔 (symbolic link),亦即『捷徑』檔案;
-u  :若 destination 比 source 舊才更新 destination !
最後需要注意的,如果來源檔有兩個以上,則最後一個目的檔一定要是『目錄』才行!      
範例一:用root身份,将家目錄下的 .bashrc 複制到 /tmp 下,并更名為 bashrc
[[email protected] ~]# cp ~/.bashrc /tmp/bashrc
[[email protected] ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆寫,y為覆寫
# 重複作兩次動作,由於 /tmp 底下已經存在 bashrc 了,加上 -i 選項後,
# 則在覆寫前會詢問使用者是否确定!可以按下 n 或者 y 來二次确認呢!

範例二:變換目錄到/tmp,并将/var/log/wtmp複制到/tmp且觀察屬性:
[[email protected] ~]# cd /tmp
[[email protected] tmp]# cp /var/log/wtmp . <==想要複制到目前的目錄,最後的 . 不要忘
[[email protected] tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp
-rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp
# 注意上面的特殊字型,在不加任何選項的情況下,檔案的某些屬性/權限會改變;
# 這是個很重要的特性!要注意喔!還有,連檔案建立的時間也不一樣了!
# 那如果你想要将檔案的所有特性都一起複制過來該怎辦?可以加上 -a 喔!如下所示:

[[email protected] tmp]# cp -a /var/log/wtmp wtmp_2
[[email protected] tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2
# 了了吧!整個資料特性完全一模一樣ㄟ!真是不賴~這就是 -a 的特性!      
範例三:複制 /etc/ 這個目錄下的所有内容到 /tmp 底下
[[email protected] tmp]# cp /etc/ /tmp
cp: omitting directory `/etc'   <== 如果是目錄則不能直接複制,要加上 -r 的選項
[[email protected] tmp]# cp -r /etc/ /tmp
# 還是要再次的強調喔! -r 是可以複制目錄,但是,檔案與目錄的權限可能會被改變
# 是以,也可以利用『 cp -a /etc /tmp 』來下達指令喔!尤其是在備份的情況下!

範例四:将範例一複制的 bashrc 建立一個連結檔 (symbolic link)
[[email protected] tmp]# ls -l bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc  <==先觀察一下檔案情況
[[email protected] tmp]# cp -s bashrc bashrc_slink
[[email protected] tmp]# cp -l bashrc bashrc_hlink
[[email protected] tmp]# ls -l bashrc*
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc  <==與原始檔案不太一樣了!
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlink
lrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc      
範例五:若 ~/.bashrc 比 /tmp/bashrc 新才複制過來
[[email protected] tmp]# cp -u ~/.bashrc /tmp/bashrc
# 這個 -u 的特性,是在目标檔案與來源檔案有差異時,才會複制的。
# 是以,比較常被用於『備份』的工作當中喔! ^_^

範例六:将範例四造成的 bashrc_slink 複制成為 bashrc_slink_1 與bashrc_slink_2
[[email protected] tmp]# cp bashrc_slink bashrc_slink_1
[[email protected] tmp]# cp -d bashrc_slink bashrc_slink_2
[[email protected] tmp]# ls -l bashrc bashrc_slink*
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc
lrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1       <==與原始檔案相同
lrwxrwxrwx 1 root root   6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是連結檔!
# 這個例子也是很有趣喔!原本複制的是連結檔,但是卻将連結檔的實際檔案複制過來了
# 也就是說,如果沒有加上任何選項時,cp複制的是原始檔案,而非連結檔的屬性!
# 若要複制連結檔的屬性,就得要使用 -d 的選項了!如 bashrc_slink_2 所示。

範例七:将家目錄的 .bashrc 及 .bash_history 複制到 /tmp 底下
[[email protected] tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多個資料一次複制到同一個目錄去!最後面一定是目錄!      
範例五:若 ~/.bashrc 比 /tmp/bashrc 新才複制過來
[[email protected] tmp]# cp -u ~/.bashrc /tmp/bashrc
# 這個 -u 的特性,是在目标檔案與來源檔案有差異時,才會複制的。
# 是以,比較常被用於『備份』的工作當中喔! ^_^

範例六:将範例四造成的 bashrc_slink 複制成為 bashrc_slink_1 與bashrc_slink_2
[[email protected] tmp]# cp bashrc_slink bashrc_slink_1
[[email protected] tmp]# cp -d bashrc_slink bashrc_slink_2
[[email protected] tmp]# ls -l bashrc bashrc_slink*
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc
lrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1       <==與原始檔案相同
lrwxrwxrwx 1 root root   6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是連結檔!
# 這個例子也是很有趣喔!原本複制的是連結檔,但是卻将連結檔的實際檔案複制過來了
# 也就是說,如果沒有加上任何選項時,cp複制的是原始檔案,而非連結檔的屬性!
# 若要複制連結檔的屬性,就得要使用 -d 的選項了!如 bashrc_slink_2 所示。

範例七:将家目錄的 .bashrc 及 .bash_history 複制到 /tmp 底下
[[email protected] tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多個資料一次複制到同一個目錄去!最後面一定是目錄!      
[[email protected] ~]# mv [-fiu] source destination
[[email protected] ~]# mv [options] source1 source2 source3 .... directory
選項與參數:
-f  :force 強制的意思,如果目标檔案已經存在,不會詢問而直接覆寫;
-i  :若目标檔案 (destination) 已經存在時,就會詢問是否覆寫!
-u  :若目标檔案已經存在,且 source 比較新,才會更新 (update)

範例一:複制一檔案,建立一目錄,将檔案移動到目錄中
[[email protected] ~]# cd /tmp
[[email protected] tmp]# cp ~/.bashrc bashrc
[[email protected] tmp]# mkdir mvtest
[[email protected] tmp]# mv bashrc mvtest
# 将某個檔案移動到某個目錄去,就是這樣做!

範例二:将剛剛的目錄名稱更名為 mvtest2
[[email protected] tmp]# mv mvtest mvtest2 <== 這樣就更名了!簡單~
# 其實在 Linux 底下還有個有趣的指令,名稱為 rename ,
# 該指令專職進行多個檔名的同時更名,并非針對單一檔名變更,與mv不同。請man rename。

範例三:再建立兩個檔案,再全部移動到 /tmp/mvtest2 當中
[[email protected] tmp]# cp ~/.bashrc bashrc1
[[email protected] tmp]# cp ~/.bashrc bashrc2
[[email protected] tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到這邊,如果有多個來源檔案或目錄,則最後一個目标檔一定是『目錄!』
# 意思是說,将所有的資料移動到該目錄的意思!      

繼續閱讀