1. 程式人生 > >find命令和文件後綴名

find命令和文件後綴名

out systemd 裏的 ice 輸入 其他 target 多個 swp

find是搜索文件的命令,後面可以接參數,-type d是目錄名,-type f是文件名,-type l是軟連接文件。linux中還有其他的搜索命令,比如which,他是子PATH變量中搜索命令的絕對路徑的命令,還有就是whereis和locate,但是搜索不全,它是在一個庫中搜索文件,但是這個庫要更新,如果不更新,文件是搜索不到的。所以這個命令不常用。
find的常用語法,find+路徑+具體條件(-yupe)+文件類型(d:是目錄名,f是文件名,l是軟連接文件,c是字符串設備比如鍵盤,鼠標等,b是塊設備文件)

find可以通過名字搜索,比如我們要搜索sshd_config這個文件,但是我們不知道路徑,那麽我們就可以這樣搜索

find /etc/ -name "sshd_config"
/etc/ssh/sshd_config
這樣我們就可以得到這個文件的絕對路徑了。

我們也可以模糊索索,比如我們記不清楚文件的全名了,但是只記住前面幾個字符,那麽我們就可以進行模糊搜索
[root@localhost ~]# find /etc/ -name "sshd*"
/etc/ssh/sshd_config
/etc/systemd/system/multi-user.target.wants/sshd.service
/etc/sysconfig/sshd
/etc/pam.d/sshd
這樣他就把所有名字帶有sshd的文件名或者目錄全部列出來了。

除了上面我們講到的參數,還有其他的常用參數,比如atime、ctime、mtime。
其中atime是最近訪問時間。
mtime是最近更改時間,這裏面是更改內容的時間,。
ctime是最近改動時間,這裏面是更改權限的時間,如果更改內容,所以ctime肯定會變。

如果我們要查詢一下一天以內更改過的文件,我們可以這樣做
[root@localhost ~]# find -type f -mtime -1 其中-1為一天以內,如果是+1,則是一天以上。
./.bash_history
./12.txt
./cp/1.log
./a.out
其中這些文件就是一天以內更改過的文件。
我們也可以在後面加多個判斷條件
比如[root@localhost ~]# find -type f -mtime -1 -name “.conf”,這是並且的意思。

我麽也可以改成或者的意思,只要我們在後面加參數-o,o表示or的意思。
find /etc/ -type f -o -ctime +1 -o -name "
.conf",這是或者的意思。

find也可以用inode號查找文件,後面加參數-inum就可以實現
[root@localhost ~]# find / -inum 33583036
/root/1.txt
/root/11.txt
從這裏我們可以看出,這兩個文件公用一個inode號,他們就互為硬鏈接文件。

find也可以按照小時來查找文件,在條件後面接參數-mmin
[root@localhost ~]# find / -type f -mmin -60
/cp/1.txt~
得出的結果就是在1小時內所改動的文件名。
如果我想得出的結果直接以ll查詢的格式列出呢,那麽我們就要在時間後面接選項-exec ll {} \;
[root@localhost ~]# find /root/ -type f -mmin -60 -exec ls -l {} \;
-rwxrwxrwx. 1 root root 137 1月 12 23:48 /root/12.txt
-rw-r--r--. 1 root root 423 1月 13 00:02 /root/cp/1.txt
其中{}表示你列取出來的文件,後面要加一個;,還要加一個\來轉義一下。
我們也可以給文件加擴展名或者改名
先查詢源文件
[root@localhost ~]# find /root/ -type f -mmin -100 -exec ls -l {} \;
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/11.txt
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/456.txt
然後輸入命令
[root@localhost ~]# find /root/ -type f -mmin -100 -exec mv {} {}.bak \;
最後查詢一下
[root@localhost ~]# find /root/ -type f -mmin -100 -exec ls -l {} \;
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/11.txt.bak
-rwxr--r--. 2 root root 575 1月 14 21:26 /root/456.txt.bak
這樣我們就發現每個文件名後面的擴展名就增加了bak這個擴展名。

還可以通過文件的大小來搜索文件,後面加參數size,比如我們要搜索大於10k的文件
[root@localhost ~]# find /root/ -type f -size +10k -exec ls -lh {} \;
-rw-------. 1 root root 14K 1月 13 22:49 /root/.bash_history
-rw-r--r--. 1 root root 12K 1月 7 22:09 /root/111/12_txt.swp
這樣就可以了,我們也可以將後面的單位改為M,這裏的M一定要是大寫的,如果寫小寫會報錯
[root@localhost ~]# find /root/ -type f -size +10m -exec ls -lh {} \;
find: 無效的 -size 類型“m”。

總結一下,find常用的參數有-type(條件)、-mtime(修改時間)、-name(按姓名查找)、size(按大小查找)、-o(或者)、-mmin(按分鐘查找)、
-exec(用於調用並執行指令的命令)

常用快捷鍵:ctrl+l定位到首行
                    ctrl+d退出
                    ctrl+c終止命令
                    ctrl+u把前面的字符全部刪除
                    ctrl+e把光標挪到最後
                    ctrl+a把光標挪到最前頭

我們在使用linux中可以現,/root/2.txt、/root/111/12.txt、/root/12.txt、/root/cp/1.log、/root/cp/1.txt中有的是.txt,有的是.log。這說明linux中是有後綴名的,但是在linux中,這個後綴名並不代表這個文件的格式,比如說命令ls,我們也可以把它拷貝成.txt,那我們能用記事本打開它嗎?後者說我們touch一個後綴名是doc的文件,那我們就能在windows中打開它嗎?答案是不可以。所以zailinux中後綴名並不能代表這個文件的類型,我們可以自定義文件名,只是我們習慣把普通的文本文檔的後綴名寫成txt、log。有的文件後面還跟著gz,這是壓縮衣文件,但是我們也可以把文件的後綴名寫成gz,那我們能說這就是一個壓縮文件嗎?只不過我們習慣把相同類型的文件定義成相同的後綴名,方面我們去去分辨,這僅僅十個小約定而已。

find命令和文件後綴名