檔案與目錄管理


		ls 		 顯示檔案名稱、屬性等。

cp 拷貝檔案或目錄。
rm 移除檔案或目錄。
mv 檔案移動或改名。
basename 移除前導目錄及字尾,顯示檔名。
dirname 移除檔名,顯示目錄。
  1. ls (list directory contents):顯示檔案名稱、屬性等。
    [root @test /root ]# ls [-ailS] 
    參數說明: 
    -a       :全部的檔案都列出(連同隱藏檔) 
    -i       :印出 inode 的值 
    -l       :長的列出,連同檔案大小的資料等等 
    -S       :以檔案大小排序 
    --color=never     :不要顯示顏色 
    --color=always    :均顯示顏色 
    --color=auto      :由系統自行判斷 
    #範例: 
    [root@dywHome2 ~]# ls
    col.txt  drakx/  echoname*  findnewer  sed  tmp/
    [root@dywHome2 ~]# ls -a
    ./                findnewer          .kde.bak/  .tcshrc
    ../               .gconf/            .lesshst   .test.txt.swp
    .bash_completion  .gconfd/           .local/    tmp/
    .bash_history     .gstreamer-0.8/    .mc/       .viminfo
    .bash_logout      .gtk-bookmarks     .mcop/     .vimrc
    .bash_profile     .gtk_qt_engine_rc  .mcoprc    .xauth/
    .bashrc           .gtkrc*            .mplayer/  .Xdefaults
    col.txt           .gtkrc-2.0*        .qt/       .xdg_menu_cache/
    .cshrc            .gtkrc-2.0.bak*    .rpmdrake
    drakx/            .ICEauthority      sed
    echoname*         .kde/              .ssh/
    [root@dywHome2 ~]# ls -l
    total 6
    -rw-r--r-- 1 root root 2939 Feb  2  2008 col.txt
    drwx------ 2 root root 1024 Dec 27  2007 drakx/
    -rwxr-xr-x 1 root root   11 Jan 28  2008 echoname*
    -rw-r--r-- 1 root root    0 Aug 30 08:44 findnewer
    -rw-r--r-- 1 root root    0 Apr 16 09:35 sed
    drwx------ 5 root root 1024 Sep  3 19:59 tmp/
    [root@dywHome2 ~]# ls -al
    total 90
    drwx------ 17 root root  2048 Sep  3 20:33 ./
    drwxr-xr-x 21 root adm   1024 Sep  3 19:59 ../
    -rw-r--r--  1 root root   145 Aug  4  2006 .bash_completion
    -rw-------  1 root root 23796 Sep  3 17:47 .bash_history
    -rw-r--r--  1 root root    24 Aug  4  2006 .bash_logout
    -rw-r--r--  1 root root   106 Aug  4  2006 .bash_profile
    -rw-r--r--  1 root root   226 Aug  4  2006 .bashrc
    -rw-r--r--  1 root root  2939 Feb  2  2008 col.txt
    -rw-r--r--  1 root root   233 Aug  4  2006 .cshrc
    drwx------  2 root root  1024 Dec 27  2007 drakx/
    ### 中間省略 ###
    -rw-r--r--  1 root root  1479 Aug  4  2006 .Xdefaults
    drwxr-xr-x  2 root root  1024 Apr 20 10:45 .xdg_menu_cache/
    [root@dywHome2 ~]# ls -al | more
    
  2. cp (copy files and directories):拷貝檔案或目錄。
    [root@dywHome2 ~]# cp [-dLprRsufa] [來源檔] [目的檔] 
    參數說明: 
    -d        :連結檔維持其路徑之連結 
    -L        :解除連結,直接 copy 連結的檔案(預設) 
    -p        :維持檔案之屬性 
    -r, -R   :連同目錄下之所有檔案及次目錄都 copy 
    -s        :做成連結檔,而不 copy,與 ln 指令相同功能 
    -u, --update:來源檔較新才會進行 copy 的動作,常用於備份的動作 
    -f        :強制 copy,不再尋問是否覆蓋
    -a        :與 -dpR 相同
    #範例: 
    [root@dywHome2 ~]# mkdir test
    [root@dywHome2 ~]# cd test
    [root@dywHome2 test]# touch foo
    [root@dywHome2 test]# cp foo foo1
    [root@dywHome2 test]# ln -s foo lnfoo
    [root@dywHome2 test]# ll
    total 0
    -rw-r--r-- 1 root root 0 Sep  3 20:50 foo
    -rw-r--r-- 1 root root 0 Sep  3 20:50 foo1
    lrwxrwxrwx 1 root root 3 Sep  3 20:52 lnfoo -> foo
    [root@dywHome2 test]# cp lnfoo foo2
    [root@dywHome2 test]# cp -d lnfoo foo3
    [root@dywHome2 test]# ll
    total 0
    -rw-r--r-- 1 root root 0 Sep  3 21:03 foo
    -rw-r--r-- 1 root root 0 Sep  3 20:50 foo1
    -rw-r--r-- 1 root root 0 Sep  3 20:52 foo2
    lrwxrwxrwx 1 root root 3 Sep  3 21:11 foo3 -> foo
    lrwxrwxrwx 1 root root 3 Sep  3 20:52 lnfoo -> foo
    [root@dywHome2 test]# chown dywang:users foo2
    [root@dywHome2 test]# ll
    total 0
    -rw-r--r-- 1 root   root  0 Sep  3 21:03 foo
    -rw-r--r-- 1 root   root  0 Sep  3 20:50 foo1
    -rw-r--r-- 1 dywang users 0 Sep  3 20:52 foo2
    lrwxrwxrwx 1 root   root  3 Sep  3 21:11 foo3 -> foo
    lrwxrwxrwx 1 root   root  3 Sep  3 20:52 lnfoo -> foo
    [root@dywHome2 test]# cp foo2 foo4
    [root@dywHome2 test]# cp -p foo2 foo5
    [root@dywHome2 test]# ll
    total 0
    -rw-r--r-- 1 root   root  0 Sep  3 21:03 foo
    -rw-r--r-- 1 root   root  0 Sep  3 20:50 foo1
    -rw-r--r-- 1 dywang users 0 Sep  3 20:52 foo2
    lrwxrwxrwx 1 root   root  3 Sep  3 21:11 foo3 -> foo
    -rw-r--r-- 1 root   root  0 Sep  3 21:12 foo4
    -rw-r--r-- 1 dywang users 0 Sep  3 20:52 foo5
    lrwxrwxrwx 1 root   root  3 Sep  3 20:52 lnfoo -> foo
    [root@dywHome2 test]# cd ..
    [root@dywHome2 ~]# cp -a test test1
    [root@dywHome2 ~]# ll test test1
    test:
    total 0
    -rw-r--r-- 1 root   root  0 Sep  3 21:03 foo
    -rw-r--r-- 1 root   root  0 Sep  3 20:50 foo1
    -rw-r--r-- 1 dywang users 0 Sep  3 20:52 foo2
    lrwxrwxrwx 1 root   root  3 Sep  3 21:11 foo3 -> foo
    -rw-r--r-- 1 root   root  0 Sep  3 21:12 foo4
    -rw-r--r-- 1 dywang users 0 Sep  3 20:52 foo5
    lrwxrwxrwx 1 root   root  3 Sep  3 20:52 lnfoo -> foo
    
    test1:
    total 0
    -rw-r--r-- 1 root   root  0 Sep  3 21:03 foo
    -rw-r--r-- 1 root   root  0 Sep  3 20:50 foo1
    -rw-r--r-- 1 dywang users 0 Sep  3 20:52 foo2
    lrwxrwxrwx 1 root   root  3 Sep  3 21:13 foo3 -> foo
    -rw-r--r-- 1 root   root  0 Sep  3 21:12 foo4
    -rw-r--r-- 1 dywang users 0 Sep  3 20:52 foo5
    lrwxrwxrwx 1 root   root  3 Sep  3 21:13 lnfoo -> foo
    
  3. rm (remove files or directories):移除檔案或目錄。
    [root@dywHome2 ~]# rm [-fir] [檔名] 
    參數說明: 
    -i     :提供使用者確認(預設值) 
    -r,-R  :循環,含次目錄 
    -f     :忽略不存在的檔,強制移除不提示。 
    #範例: 
    [root@dywHome2 ~]# rm test/foo1
    rm: remove regular empty file `test/foo1'? y
    [root@dywHome2 ~]# rm -rf test
    
  4. mv (move (rename) files):檔案移動或改名。
    [root@dywHome2 ~]#  mv [-u] [來源檔] [目的檔] 
    參數說明: 
    -u,--updates :來源檔比目的檔新時才動作 
    #範例: 
    [root@dywHome2 ~]# mkdir test
    [root@dywHome2 ~]# cd test
    [root@dywHome2 test]# touch foo
    [root@dywHome2 test]# ll
    total 0
    -rw-r--r-- 1 root root 0 Sep  3 21:25 foo
    [root@dywHome2 test]# mv foo foo1
    [root@dywHome2 test]# ll
    total 0
    -rw-r--r-- 1 root root 0 Sep  3 21:25 foo1
    [root@dywHome2 test]# cp foo1 foo2
    [root@dywHome2 test]# ll
    total 0
    -rw-r--r-- 1 root root 0 Sep  3 21:25 foo1
    -rw-r--r-- 1 root root 0 Sep  3 21:26 foo2
    [root@dywHome2 test]# mv foo1 foo2
    mv: overwrite `foo2'? n
    [root@dywHome2 test]# mv -u foo1 foo2
    [root@dywHome2 test]# mv foo1 foo2 /tmp
    [root@dywHome2 test]# ll /tmp/foo[12]
    -rw-r--r-- 1 root root 0 Sep  3 21:25 /tmp/foo1
    -rw-r--r-- 1 root root 0 Sep  3 21:26 /tmp/foo2
    
  5. basename:移除前導目錄及字尾,顯示檔名。
    [root@dywHome2 test]#  basename NAME [字尾] 
    參數說明: 
    #範例: 
    [root@dywHome2 test]# basename /root/test/foo.sh
    foo.sh
    [root@dywHome2 test]# basename /root/test/foo.sha
    foo.sha
    [root@dywHome2 test]# basename /root/test/foo.sh .sh
    foo
    [root@dywHome2 test]# basename /root/test/foo.sh o.sh
    fo
    
  6. dirname:移除檔名,顯示目錄。
    [root @test /root ]# dirname NAME 
    參數說明: 
    #範例: 
    [root@dywHome2 test]# dirname /root/test/foo.sh
    /root/test
    [root@dywHome2 test]# dirname /root/test/
    /root
    [root@dywHome2 test]# dirname foo.sh
    .  %*<== foo.sh 沒有前導目錄,故輸出為 . 表示目前目錄。*)
    

練習題

  1. 如何列出目錄 /tmp/test 中所有檔案,連同隱藏檔一併列出?
    Sol. ls -a /tmp/test 或 ls -A /tmp/test
  2. 如何以長格式列出目錄 /tmp/test 中所有檔案,不含隱藏檔?
    Sol. ls -l /tmp/test
  3. 如果僅想要列出 /etc/ 底下以 cron 為開頭的檔案,但又不想要列出次目錄下的檔案,該如何下達指令?
    Sol. ls -d /etc/cron* (只要包含 -d 選項即可)
  4. 如何以長格式列出目錄 /tmp/test 中所有檔案,連同隱藏檔一併列出?
    Sol. ls -al /tmp/test 或 ls -Al /tmp/test
  5. 如何將 /etc/passwd 複製成為 /tmp/pwfile?
    Sol. cp /etc/passwd /tmp/pwfile
  6. 若 lnfoo 連結到 foo,則 cp lnfoo foo1,產生的檔案 foo1 為連結到 foo 的連結檔還是與 foo 相同的真實檔案?
    Sol. 與 foo 相同的真實檔案
  7. 若 lnfoo 連結到 foo,則 cp -d lnfoo foo1,產生的檔案 foo1 為連結到 foo 的連結檔還是與 foo 相同的真實檔案?
    Sol. 為連結到 foo 的連結檔
  8. 如何將 foo 拷貝至 foo1,且維持 foo 的權限屬性?
    Sol. cp -p foo foo1
  9. 如何將整個目錄 /etc,拷貝至 /tmp/etc,且維持原有連結及相關的權限屬性?
    Sol. cp -a /etc /tmp/etc 或 cp -dpR /etc /tmp/etc
  10. 如何將 /etc/crontab 這個檔案,包含完整權限複製到 /tmp?
    Sol. cp -p /etc/crontab /tmp/
  11. 如何將 /home/csie 這個目錄內所有次目錄及檔案,不詢問是否覆蓋而強制複製到 /tmp?
    Sol. cp -rf /home/csie /tmp/
  12. 如何將 /tmp/csie 這個目錄內所有次目錄及檔案,不詢問下強制除?
    Sol. rm -rf /tmp/csie
  13. 如何移除檔案 foo?
    Sol. rm foo
  14. 如何遞迴移除整個目錄 test?
    Sol. rm -r test 或 rm -R test
  15. 如何直接遞迴移除整個目錄 test,不再做確認?
    Sol. rm -rf test 或 rm -Rf test
  16. 如何將檔案 foo,改名為 foo1?
    Sol. mv foo foo1
  17. 如何將 /tmp/csie 改名為 /tmp/csie1?
    Sol. mv /tmp/csie /tmp/csie1
  18. 如何將檔案 foo1 移至 foo2,且當 foo1 較 foo2 新時才動作?
    Sol. mv -u foo1 foo2
  19. 執行 basename /root/test/foo.sh,結果為何?
    Sol. foo.sh
  20. 執行 basename /root/test/foo.sh .sh,結果為何?
    Sol. foo
  21. 執行 basename /root/test/foo.sh o.sh,結果為何?
    Sol. fo
  22. 執行 dirname /root/test/foo.sh,結果為何?
    Sol. /root/test
  23. 執行 dirname /root/test/,結果為何?
    Sol. /root
  24. 執行 dirname foo.sh,結果為何?
    Sol. .

  DYWANG_HOME