歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux下find命令詳細解釋

Linux下find命令詳細解釋

日期:2017/3/3 16:26:59   编辑:關於Linux

一、本文主要內容

本文主要介紹在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

Copyright © Linux教程網 All Rights Reserved