Linux系統是由文件組成的,因此搜索文件的功能也十分強大。node
用#which查看#rm命令可見,rm命令其實是alias命令設置的帶有-i選項的別名,#rm的絕對路徑是/usr/bin/rm。linux
若是沒有加選項,命令和絕對路徑效果是同樣的。數據庫
命令其實就是絕對路徑的可執行文件,不過是命令加上了一些選項(可執行文件執行時會執行的一些參數)。想要執行命令,就要找到命令在什麼路徑,而系統會在環境變量的幾個目錄中尋找有沒有輸入的命令;centos
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命令用來定位 指令的二進制程序、源代碼文件和man手冊頁等相關文件的路徑。 模糊查找。
whereis命令只能用於程序名的搜索,並且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。若是省略參數,則返回全部信息。
和find相比,whereis查找的速度更快。由於linux系統會將系統內的全部文件都記錄在一個數據庫文件中,whereis和locate命令,只從數據庫中查找數據。
find命令,經過遍歷硬盤來查找,效率較低。
可是該數據庫文件並非實時更新,默認狀況下時一星期更新一次,所以,咱們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛創建文件,卻沒法查找到,緣由就是由於數據庫文件沒有被更新。
語法: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命令相似於whereis沒命令,經過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪,後面直接跟文件名。
不論是目錄仍是文件,只要包含要搜索的關鍵詞都會列出來,因此也是模糊查找,locate命令使用的也很少。
若是沒有locate命令,須要安裝mlocate包;
#yum install -y mlocate
# locate ls
locate: 沒法執行 stat () `/var/lib/mlocate/mlocate.db': 沒有那個文件或目錄
初次運行locate命令會報錯,由於系統尚未生成文件列表庫。
若是有mlocate.db文件有,就能夠查詢,這個文件天天會自動定時更新;也能夠手動更新;
updatedb命令能夠更新文件列表庫。若是服務器正在執行重要業務,最好不要執行updatedb命令,由於一旦運行,服務器壓力貴增大。這個數據庫默認每週更新一次。
同whereis同樣,若是搜索的文件正好是在兩次更新的時間段內建立,那確定搜索不到結果。
/etc/update.conf文件中能夠配置這個數據庫的更新規則。
語法:locate [-d <數據庫文件>][要查找的]
補充:locate指令用於查找符合條件的文件,它會去保存文件與目錄名稱的數據庫內,查找合乎範本樣式條件的文件或目錄。
參數:
-d<數據庫文件>或--database=<數據庫文件> 設置locate指令使用的數據庫。locate指令預設的數據庫位於/var/lib/mlocate目錄裏,文件名爲mlocate.db,可以使用這個參數另行指定。
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 路徑 -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
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
find [目錄] -type f -name 文件名 (只搜索文件)
[root@colinlinux ~]# find /etc/ -type f -name "sshd*" /etc/ssh/sshd_config /etc/sysconfig/sshd /etc/pam.d/sshd
文件類型及符號對應表
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: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命令的輸出信息比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 {} \;
[root@colinlinux ~]# echo $LANG//查看當前環境的語言變量 zh_CN.UTF-8
功 能:顯示當前環境不一樣位置的語言類型。
語 法: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個字符。