posts - 262,  comments - 221,  trackbacks - 0

          【1.which命令】


          which命令用于在系統(tǒng)變量PATH下所指定的路徑中查找文件,因?yàn)镻ATH下一般存放的是可執(zhí)行文件(二進(jìn)制文件),所以which命令通常用來(lái)查找可執(zhí)行文件。

          由于不同的用戶其PATH變量的設(shè)置不同,所以不同的用戶執(zhí)行同樣的which命令,得到的結(jié)果有可能不同。

          Example 1:以root用戶身份執(zhí)行which ifconfig
          [root@localhost ~]# which ifconfig
          /sbin/ifconfig
          [root@localhost ~]
          # echo $PATH
          /usr/sbin:/u01/app/oracle/product/
          10.2.0/db_1/bin:/u01/app/oracle/product/10.2.0/db_1/bin:/u01/app/oracle/product/10.2.0
          /db_1/Apache/Apache/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

          Example 2:以paul用戶身份執(zhí)行which ifconfig
          [paul@localhost ~]$ which ifconfig
          /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/paul/bin)
          [paul@localhost ~]$ echo $PATH
          /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/paul/bin
          [paul@localhost ~]$

          可以看到,由于root用戶和paul用戶的PATH變量的設(shè)置不同,而ifconfig命令由僅存在于sbin目錄下,所以paul用戶執(zhí)行which ifconfig時(shí)找不到該命令

          【2.whereis和locate命令】

          和which命令不同,whereis和locate命令可以搜索除了PATH變量指定路徑下的其它目錄和文件。先看下面的例子:

          Example 1:使用root用戶身份查找名為mount的文件
          [root@localhost ~]# whereis mount
          mount: /bin/mount /sbin/mount.cifs /sbin/mount.vmhgfs /sbin/mount.smbfs /sbin/mount.smb /usr/share/man/man8/mount
          .8.gz /usr/share/man/man2/mount.2
          .gz
          You have new mail in /var/spool/mail/root
          [root@localhost ~]
          # whereis -b mount
          mount: /bin/mount /sbin/mount.cifs /sbin/mount.vmhgfs /sbin/mount.smbfs /sbin/mount.smb
          [root@localhost ~]#

          Example 2:使用paul用戶身份查找名為mount的文件
          [paul@localhost ~]$ whereis mount
          mount: /bin/mount /sbin/mount.cifs /sbin/mount.vmhgfs /sbin/mount.smbfs /sbin/mount.smb /usr/share/man/man8/mount
          .8.gz /usr/share/man/man2/mount.2
          .gz
          [paul@localhost ~]
          $ whereis -b mount
          mount: /bin/mount /sbin/mount.cifs /sbin/mount.vmhgfs /sbin/mount.smbfs /sbin/mount.smb
          [paul@localhost ~]$

          我們看到,不論是以root身份還是以paul身份,whereis命令都可以找到名為mount的命令,而且搜索的結(jié)果中既包含了位于PATH變量指定的路徑下,也包含了其它不在PATH變量中指定路徑下的文件。

          其次我們看到如果加上-b參數(shù),搜索結(jié)果會(huì)不一樣。這是因?yàn)?b參數(shù)是用于搜索二進(jìn)制文件的(即可執(zhí)行文件)。所以我們也可以用-b參數(shù)來(lái)縮小搜索結(jié)果范圍

          Example 3:使用locate命令來(lái)查找mount文件
          [root@localhost~]#locate mount
          warning: locate: could not open database: /var/lib/slocate/slocate.db: No such file or directory
          warning: You need to run the 'updatedb' command (as root) to create the database.
          Please have a look at /etc/updatedb.conf to enable the daily cron job.

          很奇怪,系統(tǒng)居然提升我們找不到一個(gè)名為/var/lib/slocate/slocate.db的東東,而且要我們先執(zhí)行一個(gè)updatedb的命令!這是為什么?

          原因是因?yàn)閘ocate命令的查找機(jī)制不是直接從硬盤中逐個(gè)搜索,比較文件。而是去搜索一個(gè)類似于“目錄索引”的文件,該文件就像書的目錄一樣指向硬盤上的各個(gè)文件。

          那么該索引文件又是哪里來(lái)的?答案就是通過(guò)updatedb創(chuàng)建,該命令會(huì)讀取/etc/updatedb.conf文件,確定該索引文件的創(chuàng)建,更新機(jī)制。見(jiàn)下圖
          [root@localhost ~]# cat /etc/updatedb.conf
          # To enable the updatedb in cron
          , set DAILY_UPDATE to yes
          DAILY_UPDATE=no

          如果我們把no改成yes,那么Linux就會(huì)每天更新一次該索引文件(其實(shí)就是前面提到的那個(gè)db文件)。如果我們不更新呢?那么會(huì)出現(xiàn)下面兩種可能
           ①已刪除的過(guò)時(shí)文件會(huì)被搜索到
           ②新創(chuàng)建的文件不能被搜索到

          這一切都是因?yàn)樗饕募^(guò)時(shí)導(dǎo)致的,所以我們可以設(shè)置DAILY_UPDATE=yes

          【3.find命令】


          find命令和wheris命令以及l(fā)ocate命令,它是老老實(shí)實(shí)地去硬盤上找文件,所以速度比起前兩者來(lái)說(shuō)慢了很多。不過(guò)find命令有很多非常好用的參數(shù)。下面列出來(lái):

           ①-mtime n:  列出在n天之前的“一天之內(nèi)”被更動(dòng)過(guò)的文件
           ②-mtime +n:列出在n天之前(不含n天本身)被更動(dòng)過(guò)的文件
           ③-mtime -n:列出n天之內(nèi)(含n天本身)被更動(dòng)過(guò)的文件
           ④-newer file:列出比文件file還要新的文件名
           ⑤-user name:列出屬于該用戶的文件
           ⑥-group name:列出屬于該用戶組的文件
           ⑦-nouser:列出不屬于/etc/passwd中定義的用戶的文件
           ⑧-nogroup:列出不屬于/etc/group中定義的用戶組的文件
           ⑨-name filename:列出文件名為指定名稱的所有文件
           ⑩-size +/- size:搜索比指定size還要大/小的文件。c表示byte,K表示Kb
           ⑾-type type:搜索指定類型文件。普通文件(f),配置文件(b,c),目錄(d),鏈接文件(l),socket(s),管道(p)
           ⑿-exec command:在搜索的結(jié)果上執(zhí)行指定的命令
           ⒀-print:將搜索的結(jié)果顯示在屏幕上

          <-----(+n)--------n-----(-n)-----當(dāng)前時(shí)間

          如我們想找出24小說(shuō)被改動(dòng)過(guò)的文件
          [root@localhost ~]# find / -mtime 0

          參數(shù)0是什么意思呢?其實(shí)0表示當(dāng)前時(shí)間,那么命令的意思就是當(dāng)前時(shí)間的24小時(shí)內(nèi)。

          Example 1:找出3天內(nèi)被更動(dòng)過(guò)的文件
          [root@localhost ~]# find -mtime -3

          我們看到find命令可以不用指定路徑,而僅僅指定搜索的時(shí)間起始點(diǎn)。我們同樣也可以指定查找的路徑

          Example 2:找出paul用戶home目錄下4天前被更動(dòng)的文件
          [root@localhost ~]# find /home/paul -mtime +4
          /home/paul/.bash_profile
          /home/paul/.gtkrc
          /home/paul/.emacs
          /home/paul/.zshrc
          /home/paul/.bash_logout
          /home/paul/.bashrc

          Example 3:找出/home目錄下屬于paul用戶的文件
          [root@localhost ~]# find /home -user paul
          /home/paul
          /home/paul/.bash_profile
          /home/paul/.gtkrc
          /home/paul/.emacs
          /home/paul/.zshrc
          /home/paul/.bash_logout
          /home/paul/.bash_history
          /home/paul/.bashrc
          [root@localhost ~]#

          通過(guò)該命令我們可以輕松地找出所有我們想要的某個(gè)特定用戶創(chuàng)建或擁有的文件。如果我們對(duì)某些文件比較懷疑(不明用戶的文件),我們可以使用-nouser/-nogroup參數(shù)來(lái)搜索這些可疑文件
          [root@localhost ~]# find / -nouser
          find: /proc/
          4369/task/4369/fd/4: 沒(méi)有那個(gè)文件或目錄
          [root@localhost ~]#

          Example 4:找出名為passwd的文件
          [root@localhost ~]# find / -name passwd
          /etc/pam.d/passwd
          /etc/passwd

          Example 5:找出大于1M的文件
          [root@localhost ~]# find / -size +1000k
          /sbin/lvm.static
          /etc/gconf/schemas/metacity.schemas
          /etc/gconf/schemas/apps_nautilus_preferences.schemas
          /etc/gconf/schemas/gnome-terminal.schemas
          /usr/sbin/winbindd
          /usr/X11R6/lib/X11/doc/PostScript/XKBlib.ps
          /usr/X11R6/lib/X11/doc/PostScript/dtprint_fspec.ps
          /usr/X11R6/lib/libOSMesa.so
          .4.0

          Example 6:找出類型為socket的文件
          [root@localhost ~]# find /var -type s
          /var/run/iiim/.iiimp-unix/
          9010
          /var/run/dbus/system_bus_socket
          /var/run/acpid.socket
          /var/tmp/.oracle/sEXTPROC1
          /var/tmp/.oracle/s#
          6145.2
          /var/tmp/.oracle/s#
          6145.1
          [root@localhost ~]#

          Example 7:找出/home目錄下用戶paul的文件并顯示詳細(xì)屬性
          [root@localhost ~]# find /home -user paul -exec ls -l {} \;
          總用量 0
          -rw-r--r--  
          1 paul paul 191 11月 22 23:19 /home/paul/.bash_profile
          -rw-r--r--  
          1 paul paul 120 11月 22 23:19 /home/paul/.gtkrc
          -rw-r--r--  
          1 paul paul 383 11月 22 23:19 /home/paul/.emacs
          -rw-r--r--  
          1 paul paul 658 11月 22 23:19 /home/paul/.zshrc
          -rw-r--r--  
          1 paul paul 304 11月 22 23:19 /home/paul/.bash_logout
          -rw-------  
          1 paul paul 300 12月 23 23:37 /home/paul/.bash_history
          -rw-r--r--  
          1 paul paul 124 11月 22 23:19 /home/paul/.bashrc
          [root@localhost ~]#

          上面的例子中,我們使用-exec參數(shù),將搜索的結(jié)果放到{}中(其實(shí)這個(gè)位置就是平時(shí)我們使用ls命令的目錄參數(shù)的位置嘛),至于\;則是轉(zhuǎn)義字符,用來(lái)表示命令已經(jīng)結(jié)束。由于;有特殊意義所以需要加斜杠來(lái)轉(zhuǎn)義。

          Example 8:使用通配符查找所有包含config的文件
          [root@localhost ~]# find / -name *config -exec ls -l {} \;
          -rwxr-xr-x  1 root root 9824 2004-09-27  /sbin/vconfig
          -rwxr-xr-x  
          1 root root 570048 2004-12-20  /sbin/ldconfig
          -rwxr-xr-x  
          1 root root 56204 2004-09-30  /sbin/ifconfig
          -rwxr-xr-x  
          1 root root 23600 2004-11-30  /sbin/iwconfig
          -rwxr-xr-x  
          1 root root 41136 2004-10-29  /sbin/chkconfig
          -rwxr-xr-x  
          1 root root 6608 2004-09-30  /sbin/plipconfig
          -rw-r--r--  
          1 root root 1196 2004-10-21  /etc/X11/xdm/xdm-config
          總用量 
          0


          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2008-12-22 22:12 Paul Lin 閱讀(815) 評(píng)論(0)  編輯  收藏 所屬分類: Unix / Linux
          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點(diǎn)博客

          好友博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 阳朔县| 阳信县| 化州市| 和平区| 固始县| 阜阳市| 兴海县| 嘉义县| 溆浦县| 堆龙德庆县| 长乐市| 双峰县| 屯门区| 保定市| 沁水县| 大理市| 都安| 澄城县| 宜昌市| 延吉市| 诸城市| 乐平市| 巴东县| 舒兰市| 定州市| 美姑县| 松滋市| 疏附县| 广昌县| 台南市| 泗水县| 申扎县| 西乌珠穆沁旗| 湖北省| 金坛市| 沁阳市| 宜都市| 清镇市| 华阴市| 兴仁县| 玉门市|