Linux的檔案和目錄管理
阿新 • • 發佈:2019-01-11
1 檢視檔案與目錄:ls
[[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)
Example:
範例一:將家目錄下的所有檔案列出來(含屬性與隱藏檔)
[[email protected] ~]# ls -al ~
total 156
drwxr-x--- 4 root root 4096 Sep 24 00:07 .
drwxr-xr-x 23 root root 4096 Sep 22 12:09 ..
-rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg
-rw------- 1 root root 955 Sep 24 00:08 .bash_history
-rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout
-rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile
-rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc
drwx------ 3 root root 4096 Sep 5 10:37 .gconf
-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log
-rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog
# 這個時候你會看到以 . 為開頭的幾個檔案,以及目錄檔 (.) (..) .gconf 等等,
# 不過,目錄檔檔名都是以深藍色顯示,有點不容易看清楚就是了。
2 複製檔案和目錄cp
-d 複製時保留原連結
-p 保留原始檔或目錄的屬性,包括所有者、所屬組、許可權與時間等等
-R 遞迴處理,將目錄下的檔案及子目錄一併處理
-a 相當於dpR的組合,將mode,group owner(若有許可權)都複製過來
-f 強行復制檔案或目錄, 不論目的檔案或目錄是否已經存在
-i 覆蓋檔案之前先詢問使用者,互動式複製
-l 進行硬連結(hard link),而非複製檔案
-s 複製成為符號連結檔案(symbolic link),也就是建立“快捷方式”
example
範例一:用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 # 可以將多個數據一次複製到同一個目錄去!最後面一定是目錄!
3 刪除檔案或目錄rm
-i 刪除前逐一詢問確認
-f 直接刪除,無需逐一確認
-r 將目錄以及子目錄均遞迴地刪除(常常使用在刪除目錄的時候)
example
範例一:將剛剛在 cp 的範例中建立的 bashrc 刪除掉! [[email protected] ~]# cd /tmp [[email protected] tmp]# rm -i bashrc rm: remove regular file `bashrc'? y # 如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名! 範例二:透過萬用位元組*的幫忙,將/tmp底下開頭為bashrc的檔名通通刪除: [[email protected] tmp]# rm -i bashrc* # 注意那個星號,代表的是 0 到無窮多個任意位元組喔!很好用的東西! 範例三:將 cp 範例中所建立的 /tmp/etc/ 這個目錄刪除掉! [[email protected] tmp]# rmdir /tmp/etc rmdir: etc: Directory not empty <== 刪不掉啊!因為這不是空的目錄! [[email protected] tmp]# rm -r /tmp/etc rm: descend into directory `/tmp/etc'? y ....(中間省略).... # 因為身份是 root ,預設已經加入了 -i 的選項,所以你要一直按 y 才會刪除! # 如果不想要繼續按 y ,可以按下『 [ctrl]-c 』來結束 rm 的工作。 # 這是一種保護的動作,如果確定要刪除掉此目錄而不要詢問,可以這樣做: [[email protected] tmp]# \rm -r /tmp/etc # 在命令前加上反斜線,可以忽略掉 alias 的指定選項喔!至於 alias 我們在bash再談! 範例四:刪除一個帶有 - 開頭的檔案 [[email protected] tmp]# touch ./-aaa- <==touch這個命令可以建立空檔案! [[email protected] tmp]# ls -l -rw-r--r-- 1 root root 0 Sep 24 15:03 -aaa- <==檔案大小為0,所以是空檔案 [[email protected] tmp]# rm -aaa- Try `rm --help' for more information. <== 因為 "-" 是選項嘛!所以系統誤判了! [[email protected] tmp]# rm ./-aaa-
4移動或者重新命名檔案
-i 互動方式操作。如果mv操作將導致對已存在的目標檔案的覆蓋,此時系統詢問是否重寫,要求使用者回答y或n,這樣可以避免誤覆蓋檔案
-f 禁止互動操作。在mv操作要覆蓋某已有的目標檔案時不給任何提示
-u 如果目標檔案已經存在,且原始檔比較新的話,才會進行更新。相當於update
example
範例一:複製一檔案,建立一目錄,將檔案移動到目錄中
[[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 <== 這樣就更名了!簡單~(因為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
# 注意到這邊,如果有多個來原始檔或目錄,則最後一個目標檔一定是『目錄!』
# 意思是說,將所有的資料移動到該目錄的意思!
5取得路徑的檔名稱與目錄名稱
[[email protected] ~]# basename /etc/sysconfig/network
network <== 很簡單!就取得最後的檔名~
[[email protected] ~]# dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的變成目錄名了!
來源:http://cjjwzs.iteye.com/blog/1035763 http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php#ls