Linux系统——文件查找过滤
一、查找文件
# find 目录 查找条件
1. 条件的写法
- 按文件名称
[root@martin-host ~]# find /etc/ -name "*.conf"
[root@martin-host ~]# find /etc/ -name "*.conf" | wc -l
465
-iname, 忽略大小写
[root@martin-host ~]# find /dev/ -iname "*sd*"
- 按文件大小查找
[root@martin-host ~]# find /etc/ -size +2000k
[root@martin-host ~]# find /etc/ -size +5M
- 按文件类型
f: 文件 d:目录 b:块设备文件 c:字符设备文件 l:软链接
[root@martin-host ~]# find /boot/ -type f
[root@martin-host ~]# find /dev/ -type b
[root@martin-host ~]# find /etc/ -type l | wc -l
- 按文件修改时间
// 一周内
[root@martin-host ~]# find /etc/ -mtime -7
// 一个月前
[root@martin-host ~]# find /boot/ -mtime +30
- 按文件创建时间
[root@martin-host ~]# find /opt/ -ctime -7
- 多条件查找
[root@martin-host ~]# find /etc/ -type f -a -name "*.conf" -a -size +30k
[root@martin-host ~]# find /var/log/ -name "*.log" -a -ctime -7
2. 执行操作
# find 目录 查找条件 -exec 命令 \;
[root@martin-host ~]# find /opt/ -name "*.sql" -exec rm -rf {} \;
[root@martin-host ~]# find /boot/ -size +20M -exec ls -lh {} \;
[root@martin-host ~]# find /boot/ -size +20M -exec du -h {} \;
[root@martin-host ~]# find /boot/ -size +20M -exec cp {} /tmp/ \;
二、文本排序、去重
1. 去重
# uniq 文件
[root@martin-host ~]# uniq /opt/file01
aaaa
bbbb
// -c 按行计数
[root@martin-host ~]# uniq -c /opt/file01
3 aaaa
2 bbbb
2、排序
# sort [选项] 文件
[root@martin-host ~]# sort /opt/file01 | uniq
aaaa
bbbb
// -n 按自然数大小排序
[root@martin-host ~]# sort -n /opt/file02
// -r 倒序,默认为升序
[root@martin-host ~]# sort -n -r /opt/file02
// -k2 按每行第2列排序
[root@martin-host ~]# sort -k2 -n /opt/file02
// -t 指定行分隔符,默认为空白
[root@martin-host ~]# sort -t, -k2 -n /opt/file02
// -h, 按照计算机K,M, G单位排序
[root@martin-host ~]# sort -h /opt/file02
三、grep 文本过滤
使用格式:
# grep [选项] "PATTERN" 文件名称 文件名称
PATTERN:条件
默认行为: 会显示一整行内容
1、条件的写法
[root@martin-host ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@martin-host ~]# ifconfig ens33 | grep "netmask" | awk '{print $2}'
192.168.140.135
[root@martin-host ~]# netstat -antp | grep "tcp"
- [0-9] [a-z] [A-Z] [a-zA-Z] [0-9a-zA-Z] [rmt] 任意单个
[root@martin-host ~]# grep "[0-9]" /etc/fstab
[root@martin-host ~]# grep "[A-Z]" /etc/fstab
- ^string, 以string开头
[root@martin-host ~]# grep "^#" /etc/fstab
[root@martin-host ~]# free -h | grep "^Mem"
[root@martin-host ~]# grep "^[rmk]" /etc/passwd
- string$ 以string结尾
[root@martin-host ~]# grep "bash$" /etc/passwd
- ^$ 空行
[root@martin-host ~]# grep "^$" /etc/fstab | wc -l
2、grep常用选项
- -i 忽略大小写
[root@martin-host ~]# grep -i "error" /var/log/messages
- -v 反向过滤,取反
[root@martin-host ~]# grep -v "^#" /etc/fstab
-e 多条件过滤
[root@martin-host ~]# grep -e "^$" -e "^/" /etc/fstab
[root@martin-host ~]# netstat -tunlp | grep -e "^tcp" -e "^udp"
- -n 显示行号
[root@martin-host ~]# grep -n "^[rmk]" /etc/passwd