Linux下搜索文件、文件名後綴

Linux下搜索文件

Linux系統是由文件組成的,因此搜索文件的功能也十分強大。node

which查找命令可執行文件的絕對路徑

一、which xx查看命令路徑

用#which查看#rm命令可見,rm命令其實是alias命令設置的帶有-i選項的別名,#rm的絕對路徑是/usr/bin/rm。linux

若是沒有加選項,命令和絕對路徑效果是同樣的。數據庫

命令其實就是絕對路徑的可執行文件,不過是命令加上了一些選項(可執行文件執行時會執行的一些參數)。想要執行命令,就要找到命令在什麼路徑,而系統會在環境變量的幾個目錄中尋找有沒有輸入的命令;centos

二、which查找的原理

which查找的原理是查環境變量中的文件是否有所查找的命令;bash

隨便輸入一個沒有的命令,由於環境變量的路徑中沒有找到這個命令,因此會顯示未找到命令;服務器

咱們把/usr/bin/ls文件複製一份到/tmp/ls2,而後執行/tmp/ls2,結果和/usr/bin/ls效果同樣,可是若是咱們直接用ls2命令,會告訴咱們沒有找到命令,用which查看會顯示ssh

/usr/bin/which: no ls2 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)socket

意思是/usr/bin/which查詢結果是在 (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)中沒有找到ls2,而括號裏面的一串絕對路徑就是環境變量$PATH。在這裏也能夠知道which查詢路徑的時候是在環境變量PAHT的一堆路徑變量裏查詢的。編碼

因此也就是說若是想要用ls2命令,而不是用/tmp/ls2,就須要把ls2的路徑也添加進環境變量PATH才行。centos7

                                                                                                                                                                

whereis查找文件

一、whereis命令的做用

whereis命令用來定位    指令的二進制程序、源代碼文件和man手冊頁等相關文件的路徑。 模糊查找。

whereis命令只能用於程序名的搜索,並且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。若是省略參數,則返回全部信息。

和find相比,whereis查找的速度更快。由於linux系統會將系統內的全部文件都記錄在一個數據庫文件中,whereis和locate命令,只從數據庫中查找數據。

find命令,經過遍歷硬盤來查找,效率較低。

可是該數據庫文件並非實時更新,默認狀況下時一星期更新一次,所以,咱們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛創建文件,卻沒法查找到,緣由就是由於數據庫文件沒有被更新。
 

二、whereis用法

語法:whereis [-bfmsu][文件名稱]

補充:whereis指令會在特定目錄中查找符合條件的文件。這些文件的屬性應屬於sourc files(源碼),binary files(二進制文件),manual files(幫助文件)。

經常使用參數:

            -b  只查找二進制文件。

            -m  只查找說明文件(man目錄下的文件)。

            -s  只查找原代碼文件。

其餘參數:

 -u  查找不包含指定類型的文件。

 -f  不顯示文件名前的路徑名稱。

 -B<目錄>  只在設置的目錄下查找二進制文件。

 -M<目錄>  只在設置的目錄下查找說明文件。

 -S<目錄>  只在設置的目錄下查找原始代碼文件。

 

三、使用案例:

隨便找一個本身建立的文件是找不到的,由於系統數據庫沒有把這個文件更新進去;

 

# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
whereis 命令相似於模糊查找,只要文件名包含這個"ls"字符就會列出來。whereis命令使用比較少。

                                                                                                                                                            

locate命令查找文件

一、locate命令的做用

locate命令相似於whereis沒命令,經過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪,後面直接跟文件名。

不論是目錄仍是文件,只要包含要搜索的關鍵詞都會列出來,因此也是模糊查找,locate命令使用的也很少

二、安裝locate命令包

若是沒有locate命令,須要安裝mlocate包;

#yum install -y mlocate

三、update命令更新文件列表庫

# locate ls
locate: 沒法執行 stat () `/var/lib/mlocate/mlocate.db': 沒有那個文件或目錄

初次運行locate命令會報錯,由於系統尚未生成文件列表庫。

若是有mlocate.db文件有,就能夠查詢,這個文件天天會自動定時更新;也能夠手動更新;

updatedb命令能夠更新文件列表庫。若是服務器正在執行重要業務,最好不要執行updatedb命令,由於一旦運行,服務器壓力貴增大。這個數據庫默認每週更新一次。

同whereis同樣,若是搜索的文件正好是在兩次更新的時間段內建立,那確定搜索不到結果。

/etc/update.conf文件中能夠配置這個數據庫的更新規則。

四、locate命令用法

語法:locate [-d <數據庫文件>][要查找的]

補充:locate指令用於查找符合條件的文件,它會去保存文件與目錄名稱的數據庫內,查找合乎範本樣式條件的文件或目錄。

參數:

 -d<數據庫文件>或--database=<數據庫文件> 設置locate指令使用的數據庫。locate指令預設的數據庫位於/var/lib/mlocate目錄裏,文件名爲mlocate.db,可以使用這個參數另行指定。

                                                                                                                                                               

find

一、find命令說明

find命令用來在指定目錄下查找文件。任何位於參數以前的字符串都將被視爲欲查找的目錄名。若是使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。而且將查找到的子目錄和文件所有進行顯示。

二、find命令用法

語 法:find [路徑] [參數]

find [路徑] [-type df-lsb] [-name <範本樣式>] (目錄d,文件f,二進制文件 -,軟鏈接文件l,socket文件s,塊設備文件b,串行端口設備文件c)

find [路徑] [-type df-lsb][-atime/mtime/ctime -<n天數>] [-name <範本樣式>]

find [路徑] [-type df-lsb][-atime/mtime/ctime +<n天數>] [-name <範本樣式>]

find [路徑] [-type df-lsb][-atime/mtime/ctime <n天數>] [-name <範本樣式>]

(n指的是24hour*n, +n、-n、n分別表示:+n: 大於n;-n: 小於n;n:等於n)

find [目錄]] [-type df-lsb] [-o] [-atime/mtime/ctime <n天數>] [-name <範本樣式>]

(-o 表示把條件選項由邏輯與改成邏輯或)

find [目錄] [-type df-lsb][-amin/mmin/cmin -<n分鐘數>] [-name <範本樣式>]

find [目錄] [-type df-lsb][-amin/mmin/cmin +<n分鐘數>] [-name <範本樣式>]

find [目錄] [-type df-lsb][-amin/mmin/cmin <n分鐘數>] [-name <範本樣式>]

(n指的是1min*n, +n、-n、n分別表示:+n: 大於n;-n: 小於n;n:等於n)

find [目錄] [-type df-lsb] [-amin/mmin/cmin <n分鐘數>] -exec ls -l {} \;

(把查找到的符合條件的文件列表中的文件的屬性一併顯示出來,末尾的;分號不可少,{}花括號表示列表中的每一個文件)

find [目錄] [-type df-lsb] [-amin/mmin/cmin <n分鐘數>] -exec mv {} {}.xxx \;

(把查到到的目錄符合條件的列表中的文件更名字,文件名後面加上.xxx,-exec後面的mv {} {}.xxx就是操做一行,\繼續向下執行,直到最後。)

 

find [目錄] [-inum <inode號>] (查找經過inode號查找文件,如硬鏈接)

find [目錄] [-type df-lsb] [-size <n文件大小>]

find [目錄] [-type df-lsb] [-size -<n文件大小>]

find [目錄] [-type df-lsb] [-size +<n文件大小>]

(n指的是大小,能夠是k、M, +n、-n、n分別表示:

+n: 大於n

-n: 小於n

n:等於n)

補 充:find指令用於查找符合條件的文件。任何位於參數以前的字符串都將被視爲欲查找的目錄。

 

三、find命令使用案例

3.一、按名稱搜索

find 路徑 -name filename(全稱或者模糊名稱)

# find /etc/ -name "sshd*"
/etc/ssh/sshd_config
/etc/systemd/system/multi-user.target.wants/sshd.service
/etc/sysconfig/sshd
/etc/pam.d/sshd

 

3.二、只搜索目錄

find [目錄] -type d -name 文件名 (只搜索目錄)

[root@colinlinux ~]# find /etc/ -type d -name "ss*"
/etc/ssl
/etc/selinux/targeted/active/modules/100/ssh
/etc/selinux/targeted/active/modules/100/sssd
/etc/ssh

3.三、只搜索文件

find [目錄] -type f -name 文件名 (只搜索文件)

[root@colinlinux ~]# find /etc/ -type f -name "sshd*"
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/etc/pam.d/sshd

 

3.四、按文件類型搜索

文件類型及符號對應表

f l d c b s p
普通文件 符號鏈接文件 目錄文件 字符設備文件 塊設備文件 套接字文件 FIFO文件

find 目錄 -type c (只搜索串行端口設備c文件)

[root@colinlinux ~]# find /dev/ -type c
/dev/dmmidi
/dev/midi
/dev/vsock
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
/dev/vcs5
/dev/vcsa4

 

atime ctime mtime

atime:access time,訪問時間,

mtime:modefy time,修改時間,修改內容纔會改變;

ctime:change time,改動狀態時間,指文件的inode結點被修改的時間,如經過chmod修改文件權限,改文件名,改文件內容,改了建立時間等等,ctime就會被修改。

chmod修改文件權限ctime變化;

修改文件內容後mtime變化,ctime也變化;

只是訪問讀取文件,只有atime變化;

# find /etc/ -type f -mtime -1

查找當前目錄在一天之內修改過的文件;

# find /etc/ -type f -o -mtime -1 -o -name ".conf"

-o表示邏輯或,這裏因爲文件太多隻截取了末尾。

find [目錄] [-inum <inode號>] (查找經過inode號查找文件,如硬鏈接)

# ln 1.txt /tmp/1_hardlink.txt 建立一個硬連級文件到同分區的其餘目錄;

# ls -l 1.txt 查看一下1.txt的信息發現有3個文件使用了相同的inode號;

# ls -i 1.txt 查詢一下1.txt的節點號;

# find / -inum 35653405 找到inode號爲35653405的文件所在,共3處;

 

stat

stat命令用於顯示文件的狀態信息。stat命令的輸出信息比ls命令的輸出信息要更詳細。

語法:stat [選項] [參數]

選項:基本不用選項;

參數:文件名或目錄;

補充:stat以文字的格式來顯示inode的內容。

# find /root/ -type f -mmin -120 查找/root/中修改時間在200分鐘之內的文件;

find [目錄] [-type df-lsb] [-amin/mmin/cmin <n分鐘數>] -exec ls -l {} \;

雖然命令稍長,可是在查找出來的文件數量較多的時候很實用;

# find /root/ -type f -mmin -120 -exec ls -l {} \;

find [目錄] [-type df-lsb] [-amin/mmin/cmin <n分鐘數>] -exec mv {} {}.xxx \;

# find /root/ -type f -mmin -70 -exec mv {} {}.bak \;

find [目錄] [-type df-lsb] [-size <文件大小>]

這樣找到了文件大小符合條件的咱們就能夠對齊作一些操做了。

# find /root/ -type f -size -10k -exec ls -lh {} \;

 

LANG修改系統語言

一、echo $LANG查看當前語言

[root@colinlinux ~]# echo $LANG//查看當前環境的語言變量
zh_CN.UTF-8

二、locale命令

功 能:顯示當前環境不一樣位置的語言類型。

語 法:locale

補 充: LC_COLLATE,定義該環境的排序和比較規則

LC_CTYPE,用於字符分類和字符串處理,控制全部字符的處理方式,包括字符編碼,字符是單字節仍是多字節,如何打印等。是最重要的一個環境變量。 LC_MONETARY,貨幣格式

LC_NUMERIC,非貨幣的數字顯示格式

LC_TIME,時間和日期格式

LC_MESSAGES,提示信息的語言。

#locale

三、修改系統語言類型

LANG=[語言類型]

功 能:設置語言類型;

語 法:LANG=[語言類型]

補 充:這裏只是臨時修改,永久修改要改配置文件,centos7中修改語言的配置文件在/etc/locale.conf

參 數:zh_CN.UTF-8

en_US

文件名後綴

.txt,.zip等在window中被叫作「後綴名」,雖然這些後「後綴名」在linux中也有出現,可是linux中他們並無任何意義,只不過是人爲習慣性的加上去的,方便人爲操做,linux中的後綴名能夠隨便取,也能夠沒有,系統根本無論這些。

人爲習慣上.sh表示腳本,.tar.gz表示壓縮包,.cnf表示配置文件等,這只是人爲習慣,也能夠沒必要遵循。

目前linux文件名最長能夠容許225個字符。

 

 

 

 

 

 

文件名後綴

相關文章
相關標籤/搜索