文件目录管理操作
文章目录
一、grep
- 作用
- 按条件过滤文件内容
- 使用格式
- grep [option] “PATTERN” 文件名称
- option:可有可无
- PATTERN:条件,
- 由普通字符和正则表达式
1、grep基本使用
[root@localhost ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
- grep的默认行为,某一行中带有符合条件的内容,整行都会显示
2、正则表达式
- 由一类特殊字符【元字符】组成的表达式,可以去匹配一类具有相同特征的文本
1、匹配单个字符的元字符
-
任意单个字符
**a.b:**akb aib amb
[root@localhost ~]# grep "a..b" /etc/passwd tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin lijianhua:x:1000:1000:LIJIanHua:/home/lijianhua:/bin/bash
-
[ab]:匹配方括号中任意一个都可以
[root@localhost ~]# grep "a[kt]b" /etc/passwd
-
[a-z]:- 表示连续的字符,匹配出任意一个小写字母
[root@localhost ~]# grep "a[a-z]b" /etc/passwd [root@localhost ~]# grep "a[a-zA-Z]b" /etc/passwd //任意一个字母,不区分大小写
-
[0-9]:任意一个数字
[root@localhost ~]# grep "a[0-9]b" /etc/passwd
-
[a-zA-Z0-9]:任意一个字母或者数字
[root@localhost ~]# grep "a[0-9a-zA-Z]b" /etc/passwd
-
[^abc]:取出除了abc字符以外的
[root@localhost ~]# grep "a[^abc]b" /etc/passwd
-
\:转义字符
[root@localhost ~]# grep "a\.b"/etc/passwd
-
2、匹配字符出现的次数
-
*:前一个字符出现任意次
- .*:任意字符出现任意次
-
\?:前一个字符最多出现一次,最少0次,即可有可无
[root@localhost ~]# grep "ak\?b" /opt/data/test.txt
-
+:前一个字符至少出现一次
[root@localhost ~]# grep "a[0-9]\+b" /opt/data/test.tx
-
\{3\}:前一个字符精确出现三次
root@localhost ~]# grep "ak\{3\}b" /opt/data/test.txt [root@localhost ~]# grep "a[0-9]\{3\}b" /opt/data/test.txt
-
\{2,5\}:前一个字符出现次数最少2次,最多5次
[root@localhost ~]# grep "a[0-9]\{2,5\}b" /opt/data/test.txt
-
\{2,\}:前一个字符最少出现2次,最多不限
[root@localhost ~]# grep "a[0-9]\{2,\}b" /opt/data/test.txt
-
a(ab){2,}b:ab这个整体在a和b中出现的次数
[root@localhost ~]# grep "a\(ab\)\{2,\}b" /opt/data/test.txt
3、匹配字符出现的位置
-
^root:匹配以root开头的行
[root@localhost ~]# grep "^root" /etc/passwd
-
bash$:匹配以bash结尾的行
[root@localhost ~]# grep "bash$" /etc/passwd
-
^$:空行
[root@localhost ~]# grep "^$" /etc/passwd | wc -l
- 常用选项
- -i:忽略大小写
- -C n:将匹配到的结果上下n行显示出来
- -o:只显示符合条件的内容
- -v:反向过滤
- -e:实现多条件过滤
- -e 条件1 -e 条件1 -e条件1
- -n:显示符合条件的行的行号
- -E:支持扩展正则表达式
- 基本正则表达式:. * []
- 扩展正则表达式:(){} + ?
二、find查找
1、find命令查找格式
find 目录名称 条件
find命令也会查找该目录下所有子目录,挨个查一遍,不会只查一层目录,可使用参数 -maxdepth
find /etc/ -maxdepth 2 -name “*.conf”
2、按文件名称查找
[root@localhost etc]# find /etc/ -name "*.conf"
3、按文件大小查找
[root@localhost etc]# find /etc/ -size +20k
4、 按文件类型查找
[root@localhost etc]# find /etc/ -type f
- -type:f - l b
5、按文件的修改时间
-
-mtime +2 -2
-
[root@localhost etc]# find /etc/ -mtime +2 //2天前修改的文件
-
[root@localhost etc]# find /etc/ -mtime -2 //2天内修改的文件
-
6、按文件的创建时间
-
-ctime
-
[root@localhost etc]# find /etc/ -ctime +2 //2天前创建的文件
-
[root@localhost etc]# find /etc/ -ctime -2 //2天内创建的文件
-
7、按多个条件同时查找
-
-a:and
[root@localhost etc]# find /etc/ -name "*.conf" -a -type f
-
-o:or
[root@localhost etc]# find /etc/ -name "*.conf" -o -type f
7、对查找的文件及进行操作
[root@localhost etc]# find /etc/ -name "*.conf" -exec cp -a {} /tmp/ \;
三、tar 文件归档
- 两种压缩方式压缩比不一样
1、gzip
-
压缩文件
[root@localhost ~]# gzip /opt/data/test2.txt [root@localhost ~]# file /opt/data/test2.txt.gz /opt/data/test2.txt.gz: gzip compressed data, was "test2.txt", from Unix, last modified: Tue Dec 21 22:23:52 2021
-
解压缩
[root@localhost ~]# gzip -d /opt/data/test2.txt.gz
2、bzip2
-
压缩文件
[root@localhost ~]# bzip2 /opt/data/test2.txt [root@localhost ~]# file /opt/data/test2.txt.bz2 /opt/data/test2.txt.gz: gzip compressed data, was "test2.txt", from Unix, last modified: Tue Dec 21 22:23:52 2021
-
解压缩
[root@localhost ~]# bzip2 -d /opt/data/test2.txt.bz2
3、tar 文件归档
-
创建归档文件
- tar cf 归档文件.tar 源文件
- c:创建
- f:指定归档文件名称
-
将/etc/目录下所有文件打包,存入/opt,名称test1.tar
tar cvf /opt/test1.tar /etc/ //备份
-
tar命令本身没有任何压缩功能,但是支持调用gzip和bzip2
- 调用gzip压缩
tar zcvf /opt/test1.tar.gz 源文件 //z选项:调用gzip压缩
- 调用bzip2压缩
tar jcvf /opt/test1.tar.bz2 源文件 //j选项:调用bzip2压缩 du sh
-
gzip,bzip2,.tar.gzip,.tar.bz2解压缩
tar -xvf /opt/test1.tar.gz tar -xvf /opt/test1.tar.bz2 -C /tmp/ //解压到指定路径
四、uniq 去重
编辑文件
aaaaaaa
aaaaaaa
aaaaaaa
bbbbbbb
bbbbbbb
bbbbbbb
uniq /opt/file1
aaaaaaa
bbbbbbb
五、sort 排序
- 对文件中的数据进行排序
编辑文件
123
2333
1233
31323
[root@bogon ~]#sort /opt/file1
//计算机默认排序,按照ACSII码表进行第一位排序,相同则看下一位
1133
123
2333
31323
- -n:number 按数字排序
- -r:倒叙
sort -n /opt/file1 //按数字排序
123
1133
2333
31323
- -k n:按每行的第n列进行排序
sort -n -k 2 /opt/file1 //按每行的第2列进行排序,默认按照空白分列
- -t:指定分隔符
aroot@bogon ~]# cat /etc/passwd | sort -n -k 3 -t: | head -1
admin:x:0:4005::/home/admin:/bin/bash
六、alias 别名
- alias 别名=‘命令’ //临时修改,重启会失效
[root@bogon ~]# alias ld='ls -ldh'
- 别名alias永久生效
- /etc/bashrc //针对机器里的所有用户生效,重启机器
- source /etc/bashec //重新加载配置文件信息
- ~/.bashrc //只针对当前用户生效
- source /etc/bashec //重新加载配置文件信息
- /etc/bashrc //针对机器里的所有用户生效,重启机器
- 删除别名
- unalias ld
七、$ 命令引用+date显示时间
- $ ()
[root@bogon ~]# mkdir /tmp/$(date +%Y_%m_%d_%T) //以时间命名文件夹名字
- date +%F_%T
[root@bogon ~]# date +%F_%T
- 备份文件要调用时间
[root@bogon ~]# tar -zcf /tmp/data_$(date +%Y_%m_%d_%T).tar.gz /etc/
七、例题
1、过滤ip地址
[root@localhost ~]# grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" /opt/data/test2.txt
2、过滤邮箱
[root@localhost ~]# grep -E "[0-9a-zA-Z]{1,}@[0-9a-z]{1,}\.[a-z]{1,}" /opt/data/test2.txt
ux
[root@bogon ~]# date +%F_%T
* 备份文件要调用时间
```linux
[root@bogon ~]# tar -zcf /tmp/data_$(date +%Y_%m_%d_%T).tar.gz /etc/
七、例题
1、过滤ip地址
[root@localhost ~]# grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" /opt/data/test2.txt
2、过滤邮箱
[root@localhost ~]# grep -E "[0-9a-zA-Z]{1,}@[0-9a-z]{1,}\.[a-z]{1,}" /opt/data/test2.txt