Linux 檔案與目錄管理
本文已不再維護,更新文章請參考 這裡 取得!
最近更新日期:2004/03/15
目錄與路徑相對路徑與絕對路徑, cd, pwd, mkdir, rmdir, 環境變數PATH,
檔案與目錄管理ls, cp, rm, mv, basename, dirname,
觀看檔案內容cat, tac, more, less, head, tail, nl, od,
檔案與目錄權限chown, chmod, umask, chattr, lsattr,
搜尋檔案或目錄which, whereis, locate, find,
SetUID, SetGID, Sticky bit 與 file 指令
本章習題練習

目錄與路徑:
由前一章節『Linux 的檔案權限與目錄配置』中約略瞭解到 Linux 的『樹狀目錄』概念之後,接下來就得要實際的來搞定一些基本的路徑問題了!這些問題當中,最重要的莫過於『絕對路徑』與『相對路徑』的意義啦!趕緊來瞭解一下!

檔案與目錄管理:
談了談目錄與路徑之後,再來討論一下關於檔案的一些基本管理吧!檔案與目錄的管理上,不外乎『顯示屬性』、『拷貝』、『刪除檔案』及『移動檔案或目錄』等等,由於檔案與目錄的管理在 Linux 當中是很重要的!尤其是每個人自己家目錄的資料也都需要注意管理!由於我們在執行程式的時後,系統預設有一個搜尋的路徑順序,如果有兩個以上相同檔名的執行檔分別在不同的路徑時,呵呵,就需要特別留意囉!這裡我們來談一談有關檔案與目錄的一些基礎管理部分吧!
ls 顯示檔案名稱、屬性等
cp 拷貝檔案或目錄
rm 刪除檔案或目錄
mv 移動檔案或目錄
 

  • ls

  • 語法
    [root @test /root ]# ls [-ailS]
    參數說明:
    -a       :全部的檔案都列出(連同隱藏檔)
    -i       :印出 inode 的值
    -l       :長的列出,連同檔案大小的資料等等
    -S       :以檔案大小排序
    --color=never     :不要顯示顏色
    --color=always    :均顯示顏色
    --color=auto      :由系統自行判斷!
    範例:
    [root @test /root]# ls -al
    total 48
    drwxr-x---    4 root     root         4096 Mar 10 00:37 .
    drwxr-xr-x   21 root     root         4096 Mar 10 20:16 ..
    -rw-------    1 root     root          524 Mar 10 00:40 .bash_history
    -rw-r--r--    1 root     root           24 Jun 11  2000 .bash_logout
    -rw-r--r--    1 root     root          266 Jun 11  2000 .bash_profile
    -rw-r--r--    1 root     root          249 Mar  6 20:50 .bashrc
    -rw-r--r--    1 root     root          210 Jun 11  2000 .cshrc
    drwx------    2 root     root         4096 Mar  9 11:06 .gnupg
    -rw-------    1 root     root          524 Jan 16 14:37 .mysql_history
    drwx------    2 root     root         4096 Mar  9 11:06 .ssh
    -rw-r--r--    1 root     root          196 Jul 11  2000 .tcshrc
    -rw-r--r--    1 root     root         1126 Aug 24  1995 .Xresources
    [root @test /]# ls
    bin   dev    etc   lib         misc  opt   root  tftpboot  usr
    boot  disk1  home  lost+found  mnt   proc  sbin  tmp       var
    [root @test /]# ls --color=never
    bin   dev    etc   lib         misc  opt   root  tftpboot  usr
    boot  disk1  home  lost+found  mnt   proc  sbin  tmp       var
    [root @test /]# ls -al|more
    說明
    還記得我們在解釋檔案的一些屬性與目錄的結構的那一章嗎?!對啦!我們使用的第一支指令就是 ls 啦!通常我們都需要知道這個檔案名稱『目錄』還是『檔案』?所以,我都喜歡使用『 ll』這個指令,其實那就是ls -l 的意思啦!不論如何,你都可以嘗試著執行這之指令來視察你的檔案!
     
    請注意呦!不要忘記你的資料的主要咚咚!尤其是前面幾個主要的屬性呦!另外,你有沒有發現如果在遠端以 telnet 或者是 putty 的連線程式登入主機的時後,由於 Linux 預設使用有顏色的方式顯示方式,但是像上表一樣,藍色的字樣根本就是很難看到!這個時候通常我都是使用『ls --color=never 』來丟掉顏色!那如果想讓 ls 預設沒有顏色的話,可以在 /root/.bashrc 或者是你的家目錄的 .bashrc 這個檔案中加入下面這一行:
    alias ls='ls --color=never'
    這樣就可以把顏色去到了!至於 alias 是在幹嘛的?我們到了 bash 這個 shell 的時候再來談吧!
     

  • cp

  • 語法
    [root @test /root ]# cp [-drsu] [來源檔] [目的檔]
    參數說明:
    -d     :在進行 copy 的時候,如果是 copy 到 link 檔案,若不加任何參數,則預設情況中會將 link 到的原始檔案
           copy 到目的地,若加 -d 時,則 link 檔案可原封不動的將 link 這個捷徑其拷貝到目的地!
    -r     :可以進行目錄的 copy 呦!
    -s          :做成連結檔,而不 copy 之意!與 ln 指令相同功能!
    -u, --update:如果來源檔比較新,或者是沒有目的檔,那麼才會進行 copy 的動作!可用於備份的動作中!
    範例:
    [root @test /root]# cp    .bashrc bashrc      <==將 .bashrc 拷貝成 bashrc 這個檔案!
    [root @test /root]# cp -r /bin /tmp/bin        <==這個功能就好玩啦!這是用來 copy 整個目錄的參數!
    [root @test /root]# cp -s .bashrc bashrc         <==將 .bashrc 建立一個連結檔,檔名為 bashrc
    [root @test /root]# cp -u /home/.bashrc .bashrc  <==先檢查 /home/.bashrc 是否與 .bashrc 不同,如果不同的話就開始 copy 一份!如果相同則不做任何動作!
    說明
    這個指令會常用到的呦!因為我們得常常需要 copy 資料呀!所以需要瞭解一下喔!如果你有些很大檔案的需要備份,偏偏這個檔案的更新率很低,那麼每次備份都需要在 copy 一份嗎?看來是不需要了!你可以使用『cp -u 來源檔 目的檔』來備份呦!如此一來,當檔案被改變過後,才會進行 copy 的動作!
     

  • rm

  • 語法
    [root @test /root ]# rm [-fir] [檔名]
    參數說明:
    -i     :提供使用者確認(這是預設值)
    -r     :循環,就是一直殺掉,直到沒有東西為止的意思
    -f     :force ,就是強力殺掉啦!
    範例:
    [root @test /root]# cp .bashrc bashrc<==建立一個新檔案, bashrc
    [root @test /root]# rm bashrc           <==會顯示如下的提示:
    rm: remove `bashrc'?
    [root @test /root]# mkdir testing
    [root @test /root]# cp .bashrc testing
    [root @test /root]# rmdir testing
    rmdir: `testing': Directory not empty   <==由於 testing 裡面有 .bashrc ,所以砍不掉!
    [root @test /root]# rm -rf testing      <==持續刪除該目錄下的所有檔案與目錄
    說明
    這是移除的指令,相當於 dos 下的 del 指令!這裡要注意的是,通常在 Linux 系統下,為了怕檔案被誤殺,所以都已經有 -i 這個參數, -i 是指每個檔案被殺掉之前都會讓使用者確認一次,以預防誤殺檔案!而如果要連目錄下的東西都一起殺掉的話,例如子目錄裡面還有子目錄時,那就要使用 -rf 這個參數了!不過,使用『 rm -rf 』這個指令之前,請千萬注意了,因為,該目錄或檔案『肯定』會被 root 殺掉!因為系統不會再次詢問你是否要砍掉呦! 所以那是個超級嚴重的指令下達呦!得特別注意!不過,如果你確定該目錄不要了,那麼使用 rm -rf 來循環殺掉是不錯的方式!
     

  • mv

  • 語法
    [root @test /root ]# mv [-u] [來源檔] [目的檔]
    參數說明:
    -u   :同樣的,為 update 的簡寫,當來源檔比目的檔還新的時後才會動作!
    範例:
    [root @test /root]# cp .bashrc bashrc
    [root @test /root]# mv bashrc bashrc.old
    [root @test /root]# mv bashrc bashrc2 /tmp<==將 bashrc 與 bashrc2 移動到 /tmp 這個目錄下!請注意,最後一個才是最終的目標,其他的都是 SOURCE
    說明
    這是搬移的意思!當你要移動檔案或目錄的時後,呵呵!這個指令就很重要啦!同樣的,你也可以使用 -u ( update )來測試新舊檔案,看看是否需要搬移囉!另外一個用途就是『變更檔名!』,我們可以很輕易的使用 mv 來變更一個檔案的檔名呢!
     

  • basename

  • 語法
    [root @test /root ]# basename [目錄]
    參數說明:
    範例:
    [root @test /root]# basename /usr/local/etc
    etc
    這個指令會將後面的[目錄]僅擷取出最後面的那個目錄或檔案,
    以上面的例子來看, /usr/local/etc 不論 etc 是目錄或檔案,
    他都會被擷取出來,因為他是最後一個出現的咚咚!
    說明
    這個指令頗有點意思∼他可以將一個目錄或檔案的最後一個咚咚秀出來!所以,未來如果你有要使用變數,並且取出最後一個資料(不論是檔案還是目錄),那麼使用這個玩意兒就對啦! ^_^
     

  • dirname

  • 語法
    [root @test /root ]# dirname [目錄]
    參數說明:
    範例:
    [root @test /root]# dirname /usr/local/etc
    /usr/local
    恰恰與 basename 相反,他僅是秀出來前面的『目錄』部分喔!
    說明
    這個指令恰恰與 basename 相反的啦!呵呵!很好玩吧!這部份也最常用在我們第三部分要講的 Shell 的學習中喔!用最多的地方應該是 scripts 啦!用這兩個寶貝蛋來擷取部分資料的內容!有用的很!

    觀看檔案內容cat, tac, more, less, head, tail, nl,
    剛剛我們提到的都只是在於顯示檔案的外觀,或者是移動與複製一個檔案或目錄而已,那麼如果我們要視察一個檔案的內容時,該如何是好呢?!這裡有相當多有趣的指令可以來分享一下:最常使用的顯示檔案內容的指令可以說是 cat 與 more 及 less 了!此外,如果我們要查看一個很大型的檔案(好幾百MB時),但是我們只需要後端的幾行字而已,那麼該如何是好?呵呵!用 tail 呀,此外, tac 這個指令也可以達到!好了,說說各個指令的用途吧!
    cat  由第一行開始顯示檔案內容
    tac  從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!
    more 一頁一頁的顯示檔案內容
    less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!
    head 只看頭幾行
    tail 只看尾巴幾行
    nl   顯示的時候,順道輸出 行號!
    od   以二進位的方式讀取檔案內容!
    底下我們來談一談每個指令的基本用法吧!

  • cat

  • 語法
    [root @test /root ]# cat [-nAE]
    參數說明:
    -n:   顯示時,連行號印出螢幕上。
    -A:   將 DOS 下的 <tab> 與斷行字符都列出來!
    -E:   將 DOS 編輯的文件中,僅列出 斷行字符出來!
    範例:
    [root @test /root]# cat ~/.bashrc         <==顯示 .bashrc 這個檔案
    # .bashrc

    # User specific aliases and functions
    PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH"
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    alias ll='ls -l --color=never'

    [root @test /root]# cat ~/.bashrc -n      <==顯示 .bashrc 並且加上行號!
         1  # .bashrc
         2
         3  # User specific aliases and functions
         4  PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH"
         6  alias rm='rm -i'
         7  alias cp='cp -i'
         8  alias mv='mv -i'
         9  alias ll='ls -l --color=never'

    [root @test /root]# cat -A regexp.txt
    This is a cat, however, I need a dog.^M$
    I want to "Happy" and <Happy> and /Happy/ here.^M$
    OK! ^Ieverythins is OK^M$
    Now, I will eat my food^M$
    are you ^Ifinished your work^M$
    what do you 123 goto where^M$
    顯示出 DOS 檔案的幾個特殊符號,以上面檔案為例,
    可發現 ^M 為斷行符號,而每行的 $ 為行尾符號,
    至於 ^I 則是 <tab> 按鍵啦! 

    說明
    嘿嘿! Linux 裡面有『貓』?!喔!不是的, cat 是 Concatenate (連續)的簡寫,主要的功能是將一個檔案的內容連續的印出在螢幕上面!例如上面的例子中,我們將重要的參數檔 .bashrc 印出來!如果加上 -n 的話,則每一行前面還會加上行號呦!cat 比較少用!畢竟當你的檔案內容的行數超過 40 行以上,嘿嘿!根本來不及看!所以,配合 more 或者是 |more 來執行比較好!此外,如果是一般的 DOS 檔案時,就需要特別留意一些奇奇怪怪的符號了,例如斷行與<tab>等,要顯示出來,就得加入 -A 之類的參數了!。
     

  • tac

  • 語法
    [root @test /root ]# tac [檔名]
    參數說明:
    範例:
    [root @test /root]# tac ~/.bashrc <==發現了沒?反向印出呦!
    fi
            . /etc/bashrc
    if [ -f /etc/bashrc ]; then
    # Source global definitions

    alias h='history'
    alias lm='ls -al|more'
    alias ll='ls -l'
    # alias ll='ls -l --color=never'
    alias mv='mv -i'
    alias cp='cp -i'
    alias rm='rm -i'

    export PATH
    PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH"
    # User specific aliases and functions

    # .bashrc

    說明
    tac 這個好玩了!怎麼說呢?詳細的看一下, cat 與 tac ,有沒有發現呀!對啦! tac 剛好是將 cat 反寫過來,所以他的功能就跟 cat 相反啦, cat 是由『第一行到最後一行連續顯示在螢幕上』,而 tac 則是『由最後一行到第一行反向在螢幕上顯示出來』,很好玩吧!
     

  • more

  • 語法
    [root @test /root ]# more [檔名]
    參數說明:
    範例:
    [root @test /root]# more ~/.bashrc  <==一頁一頁的顯示檔案內容
    [root @test /]# ls -al | more <==一頁一頁的將 ls 的內容顯示出來
    說明
    more 真是個很有用的指令!我好喜歡呦!當你的檔案太大的時後,那麼使用 cat 將沒有辦法看清楚!這個時候你可以使用 more 來做動作!more 也可以用來做為管線的同時執行之用!例如你在執行 find 這個尋找的指令時,可以同時使用 |more ,則搜尋結果可以一頁一頁的列出呦!關於管線( pipe )的用法我們在 bash shell 的地方再來談!
     

  • less

  • 語法
    [root @test /root ]# less [檔名] 
    參數說明: 
    範例: 
    [root @test /root]# less ~/.bashrc 
    說明
    less 的用法比起 more 又更加的有彈性,怎麼說呢?在 more 的時候,我們並沒有辦法向前面翻,只能往後面看,但若使用了 less 時,呵呵!就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往後翻看文件,您瞧,是不是更容易使用來觀看一個檔案的內容了呢!?
     
    more 與 less 的用途與用法真的是很廣啦!首先,你可以在 more 與 less 的畫面中進行『搜尋』的工作!如何進行呢?我們以 less 來說明好了,如果你想要知道 /etc/man.config 這個檔案裡面有沒有一個叫做 GER 的大寫字眼,那麼可以:
     
    [root @test /root ]# less /etc/man.config 
    按鍵說明:
    /word:在 /etc/man.config 這個檔案中搜尋 word 這個字串的所在
    q    :離開 less 的畫面
     
    然後在輸入 / 之後,游標會移動到最左下角等待輸入,這個時候您只要輸入你的字串之後,就會自動的幫你找出來該關鍵字囉!
     

  • head

  • 語法
    [root @test /root ]# head [-n number] [檔名]
    參數說明:
    -n :顯示 number 行
    範例:
    [root @test /root]# head ~/.bashrc  <==預設情況下,顯示頭十行
    [root @test /root]# head -n 20 ~/.bashrc<==顯示頭二十行!
    說明
    head 的英文意思就是『頭』啦,那麼這個東西的用法自然就是顯示出一個檔案的前幾行囉!沒錯!就是這樣!若沒有加上 -n 這個參數時,預設只顯示十行,若只要一行呢?那就加入『 head -n 1 filename 』即可!
     

  • tail

  • 語法
    [root @test /root ]# tail [-n number] [檔名]
    參數說明:
    -n :顯示 number 行
    範例:
    [root @test /root]# tail ~/.bashrc
    [root @test /root]# tail -n 5 ~/.bashrc <==只顯示最後面五行!
    說明
    那麼有 head 自然就有 tail ( 尾巴 ) 囉!沒錯!這個 tail 的用法跟 head 的用法差不多類似,只是顯示的是後面幾行就是了!預設也是顯示十行,若要顯示非十行,就加 -n number 的參數!
     
    例題一:假如我想要顯示 ~/.bashrc 的第 11 到第 20 行呢?
    答:
    這個應該不算難,想一想,在第 11 到第 20 行,那麼我取前 20 行,再取後十行,所以結果就是:『 head –n 20 ~/.bashrc | tail –n 10 』,這樣就可以得到第 11 到第 20 行之間的內容了!但是裡面涉及到管線命令,需要在第三篇的時候才講的到!
     

  • nl

  • 語法
    [root @test /root ]# nl [檔名]
    參數說明:
    範例:
    [root @test /root]# nl ~/.bashrc
    說明
    那麼 nl 又是什麼?這也沒什麼,這個指令的用法跟 cat -n 的用法類似,也就是『可以印出行號』的指令來查看檔案啦!也是挺好用的!
     

  • od

  • 語法
    [root @test /root ]# od [檔名]
    參數說明:
    範例:
    [root @test /root]# od ~/.bashrc
    0000000 020043 061056 071541 071150 005143 021412 052440 062563
    0000020 020162 070163 061545 063151 061551 060440 064554 071541
    0000040 071545 060440 062156 063040 067165 072143 067551 071556
    0000060 050012 052101 036510 027442 064542 035156 071457 064542
    0000100 035156 072457 071163 071457 064542 035156 072457 071163
    0000120 061057 067151 027472 071565 027562 067554 060543 027554
    0000140 061163 067151 027472 071565 027562 067554 060543 027554
    0000160 064542 035156 050044 052101 021110 062412 070170 071157
    0000200 020164 040520 044124 005012 066141 060551 020163 066562
    0000220 023475 066562 026440 023551 060412 064554 071541 061440
    0000240 036560 061447 020160 064455 005047 066141 060551 020163
    0000260 073155 023475 073155 026440 023551 021412 060440 064554
    0000300 071541 066040 036554 066047 020163 066055 026440 061455
    0000320 066157 071157 067075 073145 071145 005047 066141 060551
    0000340 020163 066154 023475 071554 026440 023554 060412 064554
    0000360 071541 066040 036555 066047 020163 060455 076154 067555
    0000400 062562 005047 066141 060551 020163 036550 064047 071551
    0000420 067564 074562 005047 021412 051440 072557 061562 020145
    0000440 066147 061157 066141 062040 063145 067151 072151 067551
    0000460 071556 064412 020146 020133 063055 027440 072145 027543
    0000500 060542 064163 061562 056440 020073 064164 067145 004412
    0000520 020056 062457 061564 061057 071541 071150 005143 064546
    0000540 000012
    0000541
    說明
    好了,那麼如果有一個非 ASCII 的資料檔案呢?例如那個 binary 的檔案!使用 vi 根本就是看不著∼這個時候看來只有使用將整個資料以數值方法讀出來啦!那就是 od 這個指令來讀出來呦!這個東西可以用來輸出該資料為十進位、16進位等等的資料格式!不過這個東西對於工程師可能比較有用啦!因為印出來的東西都是數字或記憶體當中的資料∼∼

    檔案與目錄權限:
    Linux 檔案屬性 的內容我們可以知道一個檔案有若干個屬性,包括 ( r, w, x ) 等基本屬性,及是否為目錄 (d) 與檔案 (-) 或者是連結檔 (l) 等等的屬性!那麼要修改屬性的方法在前面也約略提過了,這裡再加強補充一下!此外,由於 Linux 還可以設定其他的系統安全屬性,使用 chattr 來設定,而以 lsattr 來查看,最重要的屬性就是可以設定其不可修改的特性!讓連檔案的擁有者都不能進行修改!這個屬性可是相當重要的,尤其是在安全機制上面( security )!
    chown 改變檔案的擁有人
    chgrp 改變檔案的所屬群組
    chmod 改變檔案的可寫、可讀、可執行等屬性
    umask 改變預設的建立檔案或目錄時的屬性
    chattr 改變檔案的特殊屬性
    lsattr 顯示檔案的特殊屬性!

    搜尋檔案或目錄:
    檔案的搜尋可就厲害了!因為我們常常需要知道那個檔案放在哪裡,所以來談一談怎麼搜尋吧!在 Linux 底下也有相當優異的搜尋系統呦!通常 find 不很常用的!因為速度慢之外,也很操硬碟!通常我們都是先使用 whereis 或者是 locate 來檢查,如果真的找不到了,才以 find 來搜尋呦!為什麼呢?因為 whereis 與 locate 是利用資料庫來搜尋資料,所以相當的快速,而且並沒有實際的搜尋硬碟,比較省時間啦!
    which   查看可執行檔案的位置
    whereis 查看檔案的位置
    locate  配合資料庫查看檔案位置
    find    實際搜尋硬碟去查詢檔案名稱

  • which

  • 語法
    [root @test /root ]# which  [檔案名稱]
    參數說明:
    範例:
    [root @test /root]# which passwd
    /usr/bin/passwd
    說明
    which 的基本功能是『藉由 PATH 這個環境變數的內容,去該路徑內尋找可執行檔』,所以基本的功能在於『尋找執行檔』囉!
     

  • whereis

  • 語法
    [root @test /root ]# whereis [-bmsu] [目錄名稱]
    參數說明:
    -b    :只找 binary 的檔案
    -m    :只找在說明檔 manual 路徑下的檔案
    -s    :只找 source 來源檔案
    -u    :沒有說明檔的檔案!
    範例:
    [root @test /root]# whereis passwd
    passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.bz2
    將 passwd 相關字眼的檔案或目錄都列出來!

    [root @test /root]# whereis -b passwd
    passwd: /usr/bin/passwd /etc/passwd
    僅列出binary 檔案!

    [root @test /root]# whereis -m passwd
    passwd: /usr/share/man/man1/passwd.1.bz2
    僅搜尋 man page 所在的目錄!

    說明
    如果使用 find 太麻煩,而且時間花用的很大!(因為如果你的硬碟比較老舊的話,嘿嘿!有的等的!)這個時候 whereis 就相當的好用了!另外, whereis 可以加入參數來找尋相關的資料,例如如果你是要找可執行檔( binary )那麼加上 -b 就可以啦!例如上面的範例針對 passwd 這支程式來說明!如果不加任何參數的話,那麼就將所有的資料列出來囉!那麼 whereis 到底是使用什麼咚咚呢?為何搜尋的速度會比 find 快這麼多?!其實那也沒有什麼!這是因為 Linux 系統會將系統內的所有檔案都記錄在一個資料庫檔案裡面,而當使用 whereis 或者是底下要說的 locate 時,都會以此資料庫檔案的內容為準,因此,有的時後你還會發現使用這兩個執行檔時,會找到已經被殺掉的檔案!這就是因為他是一個『資料庫』檔案呀!另外,基本上 Linux 每天會針對 Linux 主機進行 updatedb (就是那一個資料庫檔案囉!)的動作,你可以在 /etc/cron.weekly/slocate.cron 這個檔案找到相關的機制呦!當然,也可以直接使用 /usr/bin/updatedb 來更新資料庫檔案呢!
     

  • locate

  • 語法
    [root @test /root ]# locate [目錄名稱]
    參數說明:
    範例:
    [root @test /root]# locate root
    ……一大堆跟 root 有關字眼的檔案都出來了 @_@

    [root @test /root]# updatedb        <==立刻更新資料庫

    說明
    locate 的使用方式就更簡單了!直接鍵入你要找的檔名即可!但是,這個東西還是有使用上的限制呦!為什麼呢?您會發現使用 locate 來尋找資料的時候特別的快,這是因為 locate 尋找的資料是由『已建立的資料庫 /var/lib/slocate』裡面的資料所搜尋到的,所以不用直接在去硬碟當中存取資料,呵呵!當然是很快速囉!那麼有什麼限制呢?就是因為他是經由資料庫來搜尋的,而資料庫的建立預設是在每個禮拜執行一次,所以當您新建立起來的檔案,卻還在資料庫更新之前搜尋該檔案,那麼 locate 會告訴您『找不到!』呵呵!因為必須要更新資料庫呀!
     
    那麼我到底要建立哪些資料庫呢?是否全部都要建立?似乎不需要,這個時候,你可以自己選擇需要建立檔案資料庫的目錄呢!在 /etc/updatedb.conf 這個內即可設定了!
     
    [root @test root]# more /etc/updatedb.conf
    ## Linux-Mandrake configuration.
    # 由何處開始查詢資料,當然是由根目錄啦!所以填入 / 即可
    FROM="/"

    # 哪些目錄不想要建立檔案搜尋資料,呵呵!就是那些不要的資料嘛!
    # 忘記的話,記得回上一章去看看內容,就知道為何如此設定了!
    PRUNEPATHS="/proc,/tmp,/var/tmp,/usr/tmp,/net,/afs,/mnt"

    # 安全等級
    #   0 代表關閉安全檢驗,速度上面較快速,但較不安全;
    #   1 啟動安全簡易,這是系統的預設值;
    SECURITY="1"

    # 查詢的時候是否要由螢幕輸出?當然不要,否則多麻煩?
    VERBOSE="NO"

    # 資料庫所在處!這是預設值,不要隨意移動,否則會找不到!
    DATABASE="/var/lib/slocate/slocate.db"

    # 哪些檔案系統我們也不搜尋建立?就是光碟啦、非 Linux 的檔案格式啦,
    # 我們都不要進行搜尋資訊的建立啦!
    PRUNEFS="nfs,smbfs,ncpfs,proc,devpts,supermount,vfat,iso9660,udf,usbdevfs,devfs"

     

  • find

  • 語法
    [root @test /root ]# find [路徑] [參數]
    參數說明:
    1. 時間:
       -atime n    :在 n*24 小時之前的一天內被 access 即存取過的檔案列出來!
       -ctime n    :在 n*24 小時之前的一天內被 changed 即改變、新增的檔案或目錄印出
       -mtime n    :在 n*24 小時之前的一天內被 modified 即修改過的檔案印出
       -newer file :比 file 還要新的檔案就列出來!
    2. 使用名稱:
       -gid n      :尋找 群組 ID 為 n 的檔案
       -group name :尋找群組名稱為 name 的檔案
       -uid n      :尋找擁有者 ID 為 n 的檔案
       -user name  :尋找使用者名稱為 name 的檔案
       -name file  :尋找檔名為 file 的檔案名稱(可以使用萬用字元)
       -type type  :尋找檔案屬性為 type 的檔案,type 包含了 b, c, d, p, l, s,
                    這些與前一章的屬性相同!例如 l 為 Link 而 d 為路徑之意!
    範例:
    [root @test /root]# find / -name testing            <==尋找檔名為 testing 
    [root @test /root]# find / -name 'test*'       <==尋找檔名包含 test 的!
    [root @test /root]# find . -ctime 1                 <==尋找目前目錄下一天前新增的目錄或檔案
    [root @test /root]# find /home/test -newer .bashrc  <==尋找 /home/test 目錄下比 .bashrc 還要新的檔案
    [root @test /root]# find /home -user test       <==尋找 /home 底下擁有者為 test 的檔案
    [root @test /root]# find /dev -type b               <==尋找 /dev 這個目錄下,檔案屬性為 b 的檔案
    說明
    如果你要尋找一個檔案的話,那麼使用 find 會是一個不錯的主意!他可以根據不同的參數來給予檔案的搜尋功能!例如你要尋找一個檔名為 httpd.conf 的檔案,你知道他應該是在 /etc 底下,那麼就可以使用『 find /etc -name httpd.conf 』嚕!那如果你記得有一個檔案檔名包含了 httpd ,但是不知道全名怎辦?!呵呵,就用萬用字元 * 吧,如上以:『 find /etc -name '*httpd*' 』就可將檔名含有 httpd 的檔案都列出來囉!不過,由於 find 在尋找資料的時後相當的耗硬碟!所以沒事情不要使用 find 啦!有更棒的指令可以取代呦!那就是 whereislocate 囉!!

    SetUID, SetGID, Sticky bit 與 file 指令
    本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
    2002/06/26:第一次完成
    2003/02/06:重新編排與加入 FAQ
    2003/02/07:加入 basenamedirname 的說明
    2004/03/15:將連結檔的內容移動至下一章節:Linux 磁碟與硬體管理