首頁 > 軟體

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

2020-06-16 17:56:39

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

[root@linuxidc ~]# ls [-aAdfFhilnrRSt] 目錄名稱
[root@linuxidc ~]# ls [--color={never,auto,always}] 目錄名稱
[root@linuxidc ~]# 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)

[root@linuxidc ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)
[root@linuxidc ~]# 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
[root@linuxidc ~]# cp ~/.bashrc /tmp/bashrc
[root@linuxidc ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆蓋,y為覆蓋
# 重複作兩次動作,由於 /tmp 底下已經存在 bashrc 了,加上 -i 選項後,
# 則在覆蓋前會詢問使用者是否確定!可以按下 n 或者 y 來二次確認呢!

範例二:變換目錄到/tmp,並將/var/log/wtmp複製到/tmp且觀察屬性:
[root@linuxidc ~]# cd /tmp
[root@linuxidc tmp]# cp /var/log/wtmp . <==想要複製到目前的目錄,最後的 . 不要忘
[root@linuxidc 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 喔!如下所示:

[root@linuxidc tmp]# cp -a /var/log/wtmp wtmp_2
[root@linuxidc 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 底下
[root@linuxidc tmp]# cp /etc/ /tmp
cp: omitting directory `/etc'  <== 如果是目錄則不能直接複製,要加上 -r 的選項
[root@linuxidc tmp]# cp -r /etc/ /tmp
# 還是要再次的強調喔! -r 是可以複製目錄,但是,檔案與目錄的許可權可能會被改變
# 所以,也可以利用『 cp -a /etc /tmp 』來下達命令喔!尤其是在備份的情況下!

範例四:將範例一複製的 bashrc 建立一個連結檔 (symbolic link)
[root@linuxidc tmp]# ls -l bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc  <==先觀察一下檔案情況
[root@linuxidc tmp]# cp -s bashrc bashrc_slink
[root@linuxidc tmp]# cp -l bashrc bashrc_hlink
[root@linuxidc 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 新才複製過來
[root@linuxidc tmp]# cp -u ~/.bashrc /tmp/bashrc
# 這個 -u 的特性,是在目標檔案與來原始檔有差異時,才會複製的。
# 所以,比較常被用於『備份』的工作當中喔! ^_^

範例六:將範例四造成的 bashrc_slink 複製成為 bashrc_slink_1 與bashrc_slink_2
[root@linuxidc tmp]# cp bashrc_slink bashrc_slink_1
[root@linuxidc tmp]# cp -d bashrc_slink bashrc_slink_2
[root@linuxidc 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 底下
[root@linuxidc tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以將多個資料一次複製到同一個目錄去!最後面一定是目錄!

 

範例五:若 ~/.bashrc 比 /tmp/bashrc 新才複製過來
[root@linuxidc tmp]# cp -u ~/.bashrc /tmp/bashrc
# 這個 -u 的特性,是在目標檔案與來原始檔有差異時,才會複製的。
# 所以,比較常被用於『備份』的工作當中喔! ^_^

範例六:將範例四造成的 bashrc_slink 複製成為 bashrc_slink_1 與bashrc_slink_2
[root@linuxidc tmp]# cp bashrc_slink bashrc_slink_1
[root@linuxidc tmp]# cp -d bashrc_slink bashrc_slink_2
[root@linuxidc 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 底下
[root@linuxidc tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以將多個資料一次複製到同一個目錄去!最後面一定是目錄!

[root@linuxidc ~]# mv [-fiu] source destination
[root@linuxidc ~]# mv [options] source1 source2 source3 .... directory
選項與引數:
-f  :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋;
-i  :若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋!
-u  :若目標檔案已經存在,且 source 比較新,才會升級 (update)

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

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

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

ls 命令:15個Linux面試級問題--第一集  http://www.linuxidc.com/Linux/2015-03/114895.htm

ls 命令:十條麵試級問題--第二集  http://www.linuxidc.com/Linux/2015-04/115732.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-08/120971.htm


IT145.com E-mail:sddin#qq.com