天天看點

day10-linux查找find指令 介紹

    上一次我們學習了關于linux的使用者權限方面的管理:

    在使用linux系統,有時候需要對檔案進行查找,而find指令比較全面:支援使用檔案名、檔案大小、所屬組/主、是否為空、通路時間、修改時間等:

1下面在介紹find指令前,先介紹幾個系統的查找指令:which\localte\whereis:

1.1: which:用來搜尋指令(會在PATH裡面來尋找路徑)-是以隻能查找指令類:

1

2

3

4

5

<code>[root@localhost ~]</code><code># which cp             #用which來查找cp的路徑:</code>

<code>alias</code> <code>cp</code><code>=</code><code>'cp -i'</code>

<code>        </code><code>/usr/bin/cp</code>

<code>[root@localhost ~]</code><code># echo $PATH           #會提前在生成的PATH路徑裡來查找:</code>

<code>/usr/local/sbin</code><code>:</code><code>/usr/local/bin</code><code>:</code><code>/usr/sbin</code><code>:</code><code>/usr/bin</code><code>:</code><code>/root/bin</code>

1.2 whereis:搜尋指令,會列出配置檔案的位置,輸出很模糊:

[root@localhost ~]# whereis cp                

cp: /usr/bin/cp /usr/share/man/man1/cp.1.gz 

1.3:mlocalte:用來搜尋檔案/目錄和指令,但是搜尋的結果比較模糊:

第一次使用時:會提示此指令存在:可以用mlocate來安裝:

yum    install   -y   mlocate

工作原理:locate會在事先生成的一個資料庫中去尋找(資料庫用來統計所有指令和檔案),據說會在每天淩晨4點來自動更新統計:

第一次使用則需要手動生成一下:用updatedb指令:

用法:localte查找會列出所有相關的檔案/目錄和指令等:

6

<code>[root@localhost ~]</code><code># locate ls            #會比對到很多選項:</code>

<code>/boot/grub2/i386-pc/blscfg</code><code>.mod</code>

<code>/boot/grub2/i386-pc/cbls</code><code>.mod</code>

<code>/boot/grub2/i386-pc/command</code><code>.lst</code>

<code>/boot/grub2/i386-pc/crypto</code><code>.lst</code>

<code>/boot/grub2/i386-pc/fs</code><code>.lst</code>

2、linux系統的快捷鍵使用統計:

ctrl+l(小寫L)           #清除螢幕内容,并将光标定位到第一行:

ctrl+d                  #退出目前終端,相當于exit或者logout.

ctrl+c                  #暫停目前輸入,并跳到下一行:

ctrl+u                  #删除光标前的内容:

ctrl+d                  #删除光标後的内容(一個字元一個字元的删除):

ctrl+e                  #光标移動到行尾:end

ctrl+a                  #光标移動到行首:

3、find指令介紹:具體使用格式如下:

find   路徑   條件    ====    find    /etc/     -type  d   

用法一:find基于名稱搜尋:可以支援通配符*。

<code>[root@localhost ~]</code><code># find    /etc/    -name    "ssh*"       #支援名稱來搜尋:</code>

<code>/etc/ssh</code>

<code>/etc/ssh/ssh_config</code>

<code>/etc/ssh/ssh_host_rsa_key</code>

用法二:find基于檔案類型搜尋:   find   /etc/   -type  類型

d(目錄)       f(檔案)     l(連接配接檔案)      s(socket檔案)   b(塊裝置檔案)  c(序列槽裝置檔案)

<code>[root@localhost ~]</code><code># find /etc/ -type d  -name ssh*    #查到是目錄的并且是sshd.</code>

<code>/etc/selinux/targeted/active/modules/100/ssh</code>

find支援-o選項,是或者的意思:多個參數之間要用 -o 選項來隔開:

<code>[root@localhost ~]</code><code># find /etc/ -type d  -o -name ssh*  #目錄或者是ssh檔案都會被列印出來</code>

<code>/etc/</code>

<code>/etc/grub</code><code>.d</code>

<code>/etc/pki</code>

<code>/etc/pki/rpm-gpg</code>

3.2 find的類型還有三個time:   atime     mtime      ctime

那麼我們如何檢視着三個time:    stat指令

7

8

<code>[root@localhost ~]</code><code># stat 2.txt      #用stat後加檔案名稱來檢視:</code>

<code>  </code><code>檔案:</code><code>"2.txt"</code>

<code>  </code><code>大小:0               塊:0          IO 塊:4096   普通空檔案</code>

<code>裝置:803h</code><code>/2051d</code>        <code>Inode:33574980    硬連結:1</code>

<code>權限:(0644</code><code>/-rw-r--r--</code><code>)  Uid:(    0/    root)   Gid:(    0/    root)</code>

<code>最近通路:2017-10-28 01:58:56.757868054 +0800          </code><code>#atime(aacces time)</code>

<code>modify:2017-10-28 01:58:56.757868054 +0800          </code><code>#mtime(modify time)</code>

<code>change:2017-10-28 01:58:56.757868054 +0800          </code><code>#ctime (change time)</code>

atime:通路時間:讀取和執行檔案時修改:    #ls   -lu  filename   列出檔案的atime

mtime:更改檔案内容時間,如寫入内容:       #ls   -l  filename   列出檔案的mtime

ctime:更改inode時間,(包含屬性、權限、檔案大小、連結等): #ls  -lc filename  檔案的ctime.

注意:檔案内容的改動,會同時更改mtime和ctime,因為内容的内容會造成inode資訊改變:

而ctime改變,mtime不會改變,如修改了檔案的權限,而不更改檔案的名稱:

用法一:查找出一天以内的文本: 參數: -mtime   -1

<code>[root@localhost ~]</code><code># find / -type f -mtime -1 #隻查找是檔案類型的,檔案内容更改時間在1天内的檔案:</code>

<code>/proc/fb</code>

<code>/proc/fs/xfs/xqm</code>

<code>/proc/fs/xfs/xqmstat</code>

<code>/proc/bus/pci/00/00</code><code>.0</code>

用法二:查找出一天以外的文本: 參數: -mtime  +1

[root@localhost ~]# find / -type f -mtime +1  #隻查找是檔案類型的,檔案内容更改時間在1天以外的檔案:

/boot/grub2/device.map

/boot/grub2/i386-pc/gcry_rmd160.mod

/boot/grub2/i386-pc/acpi.mod

/boot/grub2/i386-pc/gcry_rsa.mod

ctime和atime的用法也是同mtime一樣如此:

用法三:find還有有一個常用用法:查找硬連結:

分析:硬連結是根據inode号來區分,也就是我們要找到inode号相同的,即為連結檔案:

<code>[root@localhost ~]</code><code># find / -inum 33574980     #查找inode号相同的檔案:</code>

<code>/root/2</code><code>.txt</code>

<code>/tmp/2</code><code>.txt.bak</code>

用法四:find可以以分鐘為來查找檔案:mmin +1(一小時外)      mmin  -1(一小時内)

[root@localhost ~]# find /root -type f -mmin -60      #查找1小時以内的檔案:

/root/2.txt

另外find支援直接列印和列出:有以下兩種方法實作:輸出是一樣的。

方法一:通過xargs來實作:如下:

[root@localhost ~]# find /root -type f -mmin -60 |xargs ls -l

-rw-r--r-- 2 root root 6 10月 28 02:26 /root/2.txt

方法二:通過-exec來實作:如下:

[root@localhost ~]# find /root/ -type f -mmin -60 -exec ls -l {} \;

用法五:find支援直接列印後對檔案進行操作,如修改名稱和删除檔案:如下:

直接查找類型是檔案并且在150分鐘内,直接重命名為*.bak.

<code>[root@localhost ~]</code><code># find  /root/  -type f -mmin  -150 -exec mv {}  {}.bak \;</code>

<code>[root@localhost ~]</code><code># find /root/ -mmin -150</code>

<code>/root/</code>

<code>/root/yuanhh</code>

<code>/root/yuanhh/1</code><code>.bak</code>

<code>/root/2</code><code>.txt.bak</code>

<code>/root/1</code><code>.txt.bak</code>

 用法六:find支援以檔案的大小來查找:支援k,M,G

[root@localhost ~]# find /root/ -type f -size -10k -exec ls -lh {} \;

-rw-r--r--. 1 root root 18 12月 29 2013 /root/.bash_logout

-rw-r--r--. 1 root root 176 12月 29 2013 /root/.bash_profile

-10k(則表示10k)  +10M(則表示10M)

 整理:find常用指令小整理:

-name:名稱搜尋,可支援通配符,如"yum*"等.

-mtime:以時間天為機關搜尋,如“-5則表示5天内,+5則表示5天外”.

-type:類型搜尋:檔案類型:如“-type  d”表示目錄,“! type d”表示取反,除目錄之外的檔案

-size:檔案大小搜尋:如“-size +10M”表示大于10M,“-10M”則表示小于10M的。

-mmin:以分鐘為機關,如“-mmin  -60”表示60分鐘以内的檔案,"+60"表示60分鐘以外的檔案:

4.檔案名的字尾名:

 linux下的檔案/目錄的字尾名可以自定義:

但是我們為了友善區分,會寫成類似如下的字尾名稱:

  .txt: 文本文檔:

  .gz : 壓縮檔案:

  .conf : 配置檔案:

本文轉自 芬野 51CTO部落格,原文連結:http://blog.51cto.com/yuanhaohao/1976945,如需轉載請自行聯系原作者