本文爲按部就班學運維繫列的基礎命令篇,文章已收錄gitee. 在Gitee上,點擊直達 有運維技術的所有技術棧和文檔,免費學習。 打造運維行業最全的知識體系,歡迎starnode
點贊再看,注意收藏,習慣養成,決勝將來mysql
Linux操做系統中關於查找的命令有不少,今天咱們着重討論如下幾個命令的使用:linux
which 查看可執行文件的位置
whereis 查看可執行文件的位置及相關文件
locate 配合數據庫緩存,快速查看文件位置
grep 過濾匹配,它是一個文件搜索工具
find 查找相關文件git
關於which和whereis的用法是最簡單的,主要是用來查找可執行文件位置及相關文件-咱們來看下案例:面試
[root@zmgaosh ~]# which cd/usr/bin/cd[root@zmgaosh ~]# whereis cdcd: /usr/bin/cd /usr/share/man/man1/cd.1.gz[root@zmgaosh ~]# whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
locate命令和find -name 功能差很少,是它的另一種寫法,可是這個要比find搜索快的多,由於find命令查找的是具體目錄文件,而locate搜索的是一個數據庫/var/lib/mlocate/mlocate.db,這個數據庫中存有本地全部的文件信息;正則表達式
這個數據庫是Linux自動建立並天天自動更新維護。sql
/usr/bin/updatedb 主要用來更新數據庫,經過crontab自動完成的 /usr/bin/locate 查詢文件位置 /etc/updatedb.conf updatedb的配置文件 /var/lib/mlocate/mlocate.db 存放文件信息的文件
-b, --basename match only the base name of path names -c, --count 只輸出找到的數量 -d, --database DBPATH 使用DBPATH指定的數據庫,而不是默認數據庫 /var/lib/mlocate/mlocate.db -e, --existing only print entries for currently existing files -L, --follow follow trailing symbolic links when checking file existence (default) -h, --help 顯示幫助 -i, --ignore-case 忽略大小寫 -l, --limit, -n LIMIT limit output (or counting) to LIMIT entries -m, --mmap ignored, for backward compatibility -P, --nofollow, -H don't follow trailing symbolic links when checking file existence -0, --null separate entries with NUL on output -S, --statistics don't search for entries, print statistics about eachused database -q, --quiet 安靜模式,不會顯示任何錯誤訊息 -r, --regexp REGEXP 使用基本正則表達式 --regex 使用擴展正則表達式 -s, --stdio ignored, for backward compatibility -V, --version 顯示版本信息 -w, --wholename match whole path name (default)
[root@zmgaosh ~]# yum install mlocate && updatedb[root@zmgaosh ~]# ls 查看本地目錄,有zmedu.txt文件a.sh a.txt file test zmedu.txt[root@zmgaosh ~]# locate zmedu.txt #查找zmedu.txt文件/root/zmedu.txt[root@zmgaosh ~]# touch zmeduv2.txt #建立zmeduv2.txt[root@zmgaosh ~]# locate zmeduv2.txt #查找v2但沒法找到[root@zmgaosh ~]# updatedb #更新[root@zmgaosh ~]# locate zmeduv2.txt #能夠看到已經找到了/root/zmeduv2.txt[root@zmgaosh ~]#
由上面的案例充分說明, 新增的文件沒法locate,只有使用update後纔可以快速查到。數據庫
咱們來查看下updatedb的配置文件vim
[root@zmgaosh ~]# cat /etc/updatedb.conf PRUNE_BIND_MOUNTS = "yes" #是否限制搜索PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph" #對哪些後綴的文件排除檢索PRUNENAMES = ".git .hg .svn"PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph" #檢索的路徑,即列出的路徑下的文件和子文件夾均跳過不進行檢索
過濾,它可以使用正則表達式來搜索文本,並把結果打印出來緩存
-v 取反 -i 忽略大小寫 ^# 以#開頭#$ 以#結尾^$ 空行 -n 對過濾的內容加上行號| 或者的意思
[root@zmgaosh ~]# ps -aux |grep sshd |grep -v greproot 4700 0.2 0.1 157640 6348 ? Ss 13:55 0:51 sshd: root@pts/0,pts/1 root 9315 0.0 0.1 112920 4312 ? Ss 6月17 0:00 /usr/sbin/sshd -D
這裏的 grep -v grep ,就是指的不顯示grep的查詢語句。
若是不用grep -v grep的結果以下:
[root@zmgaosh ~]# ps -aux |grep sshd root 4700 0.2 0.1 157640 6348 ? Ss 13:55 0:51 sshd: root@pts/0,pts/1 root 9146 0.0 0.0 112732 968 pts/0 S+ 21:03 0:00 grep --color=auto sshd root 9315 0.0 0.1 112920 4312 ? Ss 6月17 0:00 /usr/sbin/sshd -D
通常狀況下運維排查目前是否有後門帳號的時候可使用grep
[root@zmgaosh ~]# grep /bin/bash /etc/passwdroot:x:0:0:root:/root:/bin/bash
咱們要查詢目前的nologin用戶一共有多少的時候
[root@zmgaosh ~]# grep "nologin" /etc/passwd |wc -l
格式:find pathname -options [-print]
命令字 路徑名稱 選項 輸出
find命令選項: -name 按照文件名查找文件。 「名稱」 -perm 按照文件權限來查找文件。 -user 按照文件屬主來查找文件 -group 按照文件所屬的組來查找文件 -mtime -n / +n 按照文件的更改時間來查找文件, - n 表示文件更改時間距如今n天之內 + n 表示文件更改時間距如今n天之前 -type 查找某一類型的文件 b - 塊設備文件 d - 目錄 c - 字符設備文件 p - 管道文件 l- 符號連接文件 f - 普通文件 -size n 查找符合指定的文件大小的文件 -exec 對匹配的文件執行該參數所給出的其餘linux命令, 相應命令的形式爲' 命令 {} \;,注意{ }和 \;之間的空格,{}表明查到的內容
[root@zmgaosh ~]# find . -name "*.txt"./zmedu.txt ./a.txt ./zmeduv2.txt
mtime: 文件最後一次修改的時間
atime: 最後一次訪問時間
ctime: 文件的最後一次變化時間,也就是修改時間
舉例: 查找root目錄下更改時間在1天以內的且被修改過的文件
[root@zmgaosh ~]# find /root/ -mtime -1/root/ /root/.viminfo /root/a.sh /root/zmedu.txt /root/.mysql_history /root/a.txt /root/test /root/.bash_history /root/zmeduv2.txt /root/file[root@zmgaosh ~]#
使用exec選項
[root@zmgaosh ~]# touch {1,2,3}.bak #建立三個文件[root@zmgaosh ~]# ls1.bak 3.bak a.txt test zmeduv2.txt 2.bak a.sh file zmedu.txt[root@zmgaosh ~]# find . -name "*.bak" -exec rm {} \; #查找以.bak結尾的文件並刪除[root@zmgaosh ~]# lsa.sh a.txt file test zmedu.txt zmeduv2.txt
[root@zmgaosh ~]# lsa.sh a.txt file test zmedu.txt zmeduv2.txt[root@zmgaosh ~]# find . -name "*.txt" -exec cp {} /opt \;[root@zmgaosh ~]# ls /opt/a.txt zmedu.txt zmeduv2.txt
比較符的使用: -a and 而且 -o or 或者 + 超過 - 低於
[root@zmgaosh ~]# find /etc -size +20k -a -size -50k |wc -l17
按權限查找 -perm
[root@zmgaosh ~]# find /etc -perm 755 |wc -l232
查找命令中,find和grep是用的最多的命令,在面試中也常常出現
後面我會單獨寫一篇文章,主要筆試題常常出現的find和grep試題