一、本文主要內容
本文主要介紹在linux下的搜索命令,著重對find命令進行詳細介紹!
二、搜索命令的基本介紹
搜索文件的用處很大,因為我們常常需要知道某個文件放在哪裡。在linux中,相當優秀的搜索命令有:find、which、whereis、locate。Whereis和locate的搜索機制是根據數據庫來進行搜索數據,所以相當快,並沒有搜索實際的硬盤,比較省時。
三、各個命令的介紹
1、Which:對可執行文件進行搜索的命令,主要是個根據PATH環境變量所規范的路徑,來搜索執行文件的文件名。若後跟-a參數,可以列出所有可以找到的同名執行文件!
格式: which 可執行的文件名
which -a 可執行的文件名
Fg:列出ls命令的文件位置
[root@chris ~]# which -a ls
alias ls='ls --color=tty'
/bin/ls
2、whereis : 尋找特定文件,主要利用linux系統內的數據庫文件。linux系統會將系統內的所有文件都記錄在一個數據庫文件內,當執行locate時,都會以此數據庫文件內的內容為准,linux每天會針對系統上的所有文件的位置進行搜索數據庫的更新,更新的程序就是updatedb,也可以直接使用/uer/bin/updatedb來更新數據庫文件。
格式:whereis [-bmsu] 文件或目錄名稱
-b:只查找二進制文件
-m:只查找在幫助文件mannul路徑下的文件
-s:只查找源文件
-u:找沒有幫助文件的文件
Fg:查找含有passwd的文件
3、Locate:和whereis一樣,也是利用linux內的數據庫文件來進行搜索的,顯示的信息只是數據庫內已經同步的信息,所有並不是實時的搜索結果。
搜索數據庫:此文件可以在/etc/updatedb.conf下進行配置,並設定需要備份那些文件。
格式:locate 文件名或文件部分名稱
Fg:查找含有chris的文件
4、Find:實時、精確、遍歷指定目錄中的所有文件完成查找,速度慢,但是支持眾多的查找標准。
格式: find 查找路徑 查找標准 查找到以後的處理運作
支持路徑:默認為當前所在的目錄
查找標准:默認為指定路徑下的所有文件
處理運作:默認為顯示到屏幕
匹配標准:
-name ‘FILENAME’:對文件名進行精確查找
Fg:查找當前文件下install.log文件
-iname ‘FILENAME’:文件名匹配不區分大小寫
Fg:查找I/install.log文件
-user USERNAME:基於文件所屬主進行匹配查找
-group GROUPNAME:基於文件所屬組進行查找
-gid GID:基於文件的dig進行查找
Fg:查找gid為2012的文件
Find /tmp -gid 2012
-uid UID:基於文件的uid進行查找
-nouser:查找沒有屬主的文件h
-nogroup:查找沒有屬組的文件
-type [f,d,p,s,l]:根據文件的類型查找
f:普通文件
d:目錄
P:管道
Fg:查找tmp下文目錄的所有文件
-size :指定文件的大小進行查找
[+|-]#K:大於或小於多少k的文件
#M:
#G:
組合查找條件:
-a:與(默認兩個條件的關系)
-o:或
-not:非
其中:-not的優先級最高,其次是-a,然後是-o
Fg:1、查找tmp下的非目錄文件
find /tmp -not -type d
2、tmp下不是目錄,也不是套接字的文件
find /tmp -not -type d -a -not -type s=find /tmp -not \( -type d -o -type s \)
時間戳查找:
單位為天(如果為分鐘則為:a/c/tmin)
-mtime:修改時間
-atime:訪問時間
-ctime:改變時間
支持[+|-]#:
#:#那一天的時間
-#:#天之內
+#:至少#天
文件權限查找:
-perm mode:精確查找
Fg:在查找權限為755的文件
-perm /mode:三位匹配以為即可
Fg:查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;
-perm -mode:文件權限能完全包括此mode才可以顯示
執行動作命令:
-print:默認的,顯示到屏幕
-ls:類似於ls -l的形式,顯示匹配到的每個文件的詳細信息。
-ok COMMAND {} \;每個操作需要用戶確認執行命令,必須以\;結尾。{}代表匹配到的文件。
-exec COMMAND {} \;不需要確認,執行命令,必須以\;結尾。{}代表匹配到的文件。
Fg:查找權屬組有寫權限並把匹配到文件改為原文件名後加.new的名稱。
find ./ -perm -020 -exec mv {} {}.new \;
四、腳本練習
寫一個腳本,顯示當前系統上shell為-s指定類型的用戶,並統計其用戶總數。-s選項後面跟的參數必須是/etc/shells文件中存在的shell類型,否則不執行此腳本。另外,此腳本還可以接受--help選項,以顯示幫助信息。腳本執行形如:
./showshells.sh -s bash
顯示結果形如:
BASH,3users,they are:
root,redhat,gentoo
答案:
#!/bin/bash
#
if [ $1 == '-s' ]; then
! grep "${2}$" /etc/shells &> /dev/null && echo "Invalid shell." && exit 7
elif [ $1 == '--help' ];then
echo "Usage: showshells.sh -s SHELL | --help"
exit 0
else
echo "Unknown Options."
exit 8
fi
NUMOFUSER=`grep "${2}$" /etc/passwd | wc -l`
SHELLUSERS=`grep "${2}$" /etc/passwd | cut -d: -f1`
SHELLUSERS=`echo $SHELLUSERS | sed 's@[[:space:]]@,@g'`
echo -e "$2, $NUMOFUSER users, they are: \n$SHELLUSERS
本文出自 “Chris—on the way” 博客,請務必保留此出處http://chrinux.blog.51cto.com/6466723/1153802