查看命令本身
- which
-whereis
查看文件內容
- cat
- more
- less
- head
- tail
過濾匹配
- grep
查找文件
- locate
- find
查看命令本身
which
用於查找命令的位置
[root@meditation ~]# which cd
/usr/bin/cd
whereis
輸出命令相關的目錄和配置文件
[root@meditation ~]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz
查看文件內容
[root@VM_0_15_centos ~]# ls /etc/ > /root/123.txt
cat
從第一行開始顯示所有內容輸出到屏幕上
- -n 顯示行數
[root@VM_0_15_centos ~]# cat -n /root/123.txt
...
187 trusted-key.key
188 tuned
189 udev
190 updatedb.conf
191 usb_modeswitch.conf
192 uuid
193 vconsole.conf
194 vimrc
195 virc
196 wgetrc
197 wpa_supplicant
198 X11
199 xdg
200 xinetd.d
201 yum
202 yum.conf
203 yum.repos.d
more
從第一行開始,輸出文件內容,當一頁無法全部輸出時,回車翻行,空格翻頁,q退出
常配合管道符使用
[root@VM_0_15_centos ~]# ll /etc/ | more
drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.monthly
-rw-r--r--. 1 root root 451 Jun 10 2014 crontab
drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.weekly
-rw-------. 1 root root 0 Mar 7 14:38 crypttab
-rw-r--r--. 1 root root 1620 Oct 31 2018 csh.cshrc
-rw-r--r--. 1 root root 866 Oct 31 2018 csh.login
drwxr-xr-x. 4 root root 4096 Jul 2 15:03 dbus-1
drwxr-xr-x. 2 root root 4096 Jul 2 15:03 default
drwxr-xr-x. 2 root root 4096 Mar 7 14:39 depmod.d
drwxr-x---. 4 root root 4096 Mar 7 14:39 dhcp
--More--
less
和more命令相似,但是支持向前查看,還可以通過/passwd來查找passwd字符串
[root@VM_0_15_centos ~]# ll /etc/ | less
total 1456
drwxr-xr-x. 3 root root 4096 Mar 7 14:39 abrt
drwxr-xr-x. 4 root root 4096 Mar 7 14:39 acpi
-rw-r--r--. 1 root root 16 Mar 7 14:42 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r-- 1 root root 12288 Mar 7 14:44 aliases.db
drwxr-xr-x. 2 root root 4096 Jul 2 15:03 alternatives
-rw------- 1 root root 541 Nov 20 2018 anacrontab
...
head
顯示文件的開始部分
-n 指定顯示文件開始部分的行數,默認10行
[root@VM_0_15_centos ~]# head -n 2 /root/123.txt
abrt
acpi
tail
顯示文件的結束部分
-n 指定顯示文件結束部分的行數,默認10行
-f 監視文件是否有增加變化
[root@VM_0_15_centos ~]# tail -n 2 /root/123.txt
yum.conf
yum.repos.d
過濾匹配
locate
根據文件名查找
優點速度快,從數據庫中查找
[root@meditation ~]# touch /home/sunlizhao/abc123.txt
[root@meditation ~]# locate abc123.txt
[root@meditation ~]#
- 默認數據庫24個小時更新.
- 當我們在用戶目錄下新建一個文件, 直接locate是查找不到的
- 這時就要更新一下數據庫updatedb
[root@meditation ~]# updatedb
[root@meditation ~]# locate abc123.txt
/home/sunlizhao/abc123.txt
grep
用於查找文件中的內容
在文件當中匹配符合條件的字符串
語法
grep [選項] 字符串 文件名
選項
-
-i ---- 忽略大小寫
-
-v ---- 排除指定字符串(取反)
- -n ---- 顯示行號
-
-r ---- 遞歸
- ^# ---- 以#開頭
-
$ ---- 以#結尾
- ^$ ---- 空行
- -n ---- 對過濾的內容加上行號
- | ---- 或者的意思
1匹配
1.1匹配一個詞
[root@meditation ~]# grep root /home/sunlizhao/abc123.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
1.2將文件中沒有nologin的那行取出來,並顯示行號
[root@meditation ~]# grep -nv nologin /home/sunlizhao/abc123.txt
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
25:syslog:x:996:994::/home/syslog:/bin/false
27:jfedu1:x:1000:1000::/home/jfedu1:/bin/bash
28:jfedu2:x:1001:1001::/home/jfedu2:/bin/bash
29:sunlizhao:x:1002:1002::/home/sunlizhao:/bin/bash
30:sunlizhao31:x:1003:1003::/home/sunlizhao31:/bin/bash
1.3從多個文件中匹配,並顯示行號
[root@meditation ~]# grep -n root /home/sunlizhao/abc123.txt /etc/passwd
/home/sunlizhao/abc123.txt:1:root:x:0:0:root:/root:/bin/bash
/home/sunlizhao/abc123.txt:10:operator:x:11:0:operator:/root:/sbin/nologin
/etc/passwd:1:root:x:0:0:root:/root:/bin/bash
/etc/passwd:10:operator:x:11:0:operator:/root:/sbin/nologin
1.4搜索運行中的sshd進程,並過濾掉grep命令本身
[root@VM_0_15_centos ~]# ps aux | grep sshd | grep -v grep
root 1209 0.0 0.5 156744 5440 ? Ss 22:43 0:00 sshd: root@pts/1
root 1323 0.0 0.5 156744 5436 ? Ss 22:44 0:00 sshd: root@pts/2
root 3081 0.0 0.4 112864 4304 ? Ss Aug13 0:52 /usr/sbin/sshd -D
root 7396 0.0 0.4 112864 4244 ? Ss 23:35 0:00 sshd: [accepted]
root 7969 0.0 0.5 156744 5436 ? Ss 14:12 0:00 sshd: root@pts/0
1.5統計檢索出的指定內容有多少行
[root@VM_0_15_centos ~]# egrep "nologin|root" /etc/passwd | wc -l
21
2比較
2.1比較兩個文件中共同存在的行,並顯示行號
[root@meditation ~]# grep -nxf /home/sunlizhao/abc123.txt /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2.2比較abc123.txt文件比passwd文件多的部分
添加數據
[root@meditation ~]# echo "hhhhh" >> /home/sunlizhao/abc123.txt
[root@meditation ~]# grep -vxf /etc/passwd /home/sunlizhao/abc123.txt
hhhhh
3查找
查找abc123.txt文件中以root開頭的行
[root@meditation ~]# grep ^root /home/sunlizhao/abc123.txt
root:x:0:0:root:/root:/bin/bash
查找abc123.txt文件中以bash結尾的行
[root@meditation ~]# grep bash$ /home/sunlizhao/abc123.txt
root:x:0:0:root:/root:/bin/bash
jfedu1:x:1000:1000::/home/jfedu1:/bin/bash
jfedu2:x:1001:1001::/home/jfedu2:/bin/bash
sunlizhao:x:1002:1002::/home/sunlizhao:/bin/bash
4遞歸查詢
**查找/sunlizhao/目錄下包含"root"的文件
[root@meditation ~]# echo "root" > /home/sunlizhao/abc.txt
[root@meditation ~]# grep -r root /home/sunlizhao/
/home/sunlizhao/abc.txt:root
/home/sunlizhao/abc123.txt:root:x:0:0:root:/root:/bin/bash
/home/sunlizhao/abc123.txt:operator:x:11:0:operator:/root:/sbin/nologin
find
注意,使用find時要避免大范圍搜索,會非常耗費系統資源
1,名稱
1.1name和iname
選項
- -name 根據文件名稱進行檢索
- -iname 根據文件名進行檢索時忽略大小寫
[root@VM_0_15_centos ~]# find / -name "passwd"
/etc/passwd
/etc/pam.d/passwd
/usr/share/bash-completion/completions/passwd
/usr/bin/passwd
1.2path和ipath
如果需要在搜索時匹配某個文件或目錄的完整路徑,而不僅僅是匹配文件名
可以使用-path或-ipath
- -path 指定要匹配文件的父目錄
- -ipath 指定要匹配的文件的父目錄,忽略大小寫
查找/目錄下的以passwd開頭的文件,父目錄必須是/etc
發現有兩個文件,passwd-是passwd的自動備份文件
[root@VM_0_15_centos /]# find / -path "/etc/passwd*"
/etc/passwd
/etc/passwd-
2,類型
- -type
- f 文件
- d 目錄
- | 符號鏈接
查看root目錄下后綴名是.sh的文件
[root@VM_0_15_centos ~]# find /root -type f -name "*.sh"
/root/eof.sh
/root/ping.sh
/root/useradd1.sh
/root/packups.sh
3,空文件
- -empty 檢索為空的文件或者目錄
檢索用戶主目錄下所有的空目錄
[root@VM_0_15_centos ~]# find ~ -type d -empty
/root/DES_DIR
/root/.config/abrt
5,反義匹配
對當前匹配條件進行“反義”類似於邏輯非操作
檢索出/root下所有文件, 但是后綴不能是.sh
[root@VM_0_15_centos ~]# find /root -type f ! -name "*.sh"
/root/cpu.txt
/root/.lesshst
/root/.cshrc
/root/.bashrc
/root/.viminfo
檢索出/root下所有不為空的文件
[root@VM_0_15_centos ~]# find /root/ -type f ! -empty
/root/eof.sh
/root/cpu.txt
/root/.lesshst
/root/ping.sh
/root/.cshrc
/root/useradd1.sh
5,文件的所屬權檢索
- -user 檢索歸屬於特定用戶的文件或者目錄
- -group 根據文件或者目錄的屬組進行檢索
查看/root目錄下,是否有不屬於root的文件
[root@VM_0_15_centos ~]# find /root/ -type f ! -user root
[root@VM_0_15_centos ~]#
**檢索/root目錄下
6,根據時間日期進行檢索
需要根據文件被修改的時間進行檢索
選項/天 | 選項/分鍾 | 描述 |
---|---|---|
-mtime | -mmin | 修改時間:最后一次文件內容有過更改的時間點 |
-atime | -amin | 訪問時間:最后一次文件有被讀取過的時間點 |
-ctime | -cmin | 變更時間: 最后一次文件有被變更過的時間點(如內容被修改,權限被修改) |
常見寫法 | 描述 |
---|---|
-mtime 2 | 該文件2天前被修改過 |
-mtime -2 | 該文件2天以內被修改過 |
-mtime +2 | 該文件距離上次修改已經超過2天時間 |
檢索/root目錄下,五天內被修改的文件,並去掉隱藏文件
[root@VM_0_15_centos ~]# find /root/ -type f -mtime -5 ! -name ".*"
/root/.cache/abrt/lastnotification
/root/123.txt
7,根據文件大小檢索
- -size 選項允許用戶通過文件大小進行搜索(只適合於文件)
表示大小的單位
- c(小寫):字節
- k(小寫):KB
- M(大寫):MB
- G(大寫):GB
另外,還可以使用+或者-表示大於或小於當前條件
[root@VM_0_15_centos ~]# find /root -type f -size +1k
/root/.viminfo
/root/.bash_history
/root/.packup.swp
/root/123.txt
/root/c.txt
8,根據文件權限檢索
- -perm選項以文件權限為依據進行搜索
8.1使用符號形勢
find /usr -perm u=rwx,g=rx,o=x
如果要匹配的文件的權限為- r-xr-xr-x,即u,g,o的權限是相同的
可以使用
[root@VM_0_15_centos ~]# find /root/ -perm u=rw,g=r,o=r
/root/eof.sh
/root/cpu.txt
/root/ping.sh
8.2使用數字形勢
[root@VM_0_15_centos ~]# find /root/ -perm 644
/root/eof.sh
/root/cpu.txt
/root/ping.sh
9,限制遍歷的層數
find命令默認是以遞歸方式檢索項目的,但這種方式會導致得到的結果數量非常大
使用-maxdepth限制find命令遞歸的層數
[root@VM_0_15_centos ~]# find /etc/ -name "passwd"
/etc/passwd
/etc/pam.d/passwd
[root@VM_0_15_centos ~]# find /etc/ -maxdepth 1 -name "passwd"
/etc/passwd
10,邏輯組合
-
在之前的例子中有出現多個搜索天劍的組合以及對某個搜索條件的反轉
-
實際上find命令支持and和or兩種邏輯運算,對應的命令選項分別為-a和-o
-
此外還可以通過小括號對搜索條件進行分組
但是要注意,命令鍾的小括號常需要用單引號包裹起來,因為小括號在shell中有特殊含義
檢索/etc下名為ssh的目錄
[root@VM_0_15_centos ~]# find /etc/ -type d -name "ssh"
/etc/ssh
/etc/selinux/targeted/active/modules/100/ssh
等同於
[root@VM_0_15_centos ~]# find /etc/ -type d -a -name "ssh"
/etc/ssh
/etc/selinux/targeted/active/modules/100/ssh