### 文件查找
- #### locate
非实时查找,也叫数据库查找基于(/var/lib/locatedb)
> 默认大概每天更新一次,如果想用locate实时查找,可以用命令updatedb升级数据库
备注:如果在白天线上服务器比较忙最好不要用updatadb 命令。(索引构建过程需要历遍整个根文件消耗资源比较大,会耗费时间)
> 优点:速度快,不占用内存
> 缺点:常更新的文件不一定会搜索得到
语法:lacate KEYWORD
会显示所有带KEYWORD的文件或者目录(包括路径中带有KEYRORD的)
示例
```
[root@zhangxiao data]# locate /root/87*
/root/87_a
/root/87_jitu
/root/87scp.sh
[root@zhangxiao data]#
```
find
实时查找
优点:比较准确
缺点:速度略慢会占用内存
语法:find [查找路径] [查找条件] [处理动作]
查找路径:指定具体的目录路径,默认为当前路径
查找条件:指定查找的标准,可以以文件名、大小、类型、权限等
处理动作:对符合条件的文件做什么操作;默认输出至屏幕
默认递归 查看文件夹中的文件
1.-name “FILENAME”,支持使用通配符
```
示例
[root@zhangxiao etc]# find /root/ -name "87*"
/root/87_a
/root/87scp.sh
/root/87_jitu
[root@zhangxiao etc]#
```
2.-iname "FILENAME"查找文件名称不区分大小写
```
示例
[root@zhangxiao ~]# touch IiIiU
[root@zhangxiao ~]# find /root -iname ii*
/root/IiIiU
[root@zhangxiao ~]#
```
3.regex "PATTERN" 以PATTERN匹配整个文件路径查找字符串而不仅仅是文件名
```
示例
[root@zhangxiao etc]# find /etc -regex "/etc/i.*"
/etc/inittab
/etc/init.conf
/etc/idmapd.conf
/etc/inputrc
/etc/init/tty.conf
/etc/init/ck-log-system-start.conf
/etc/init/rcS.conf
/etc/init/splash-manager.conf
/etc/init/prefdm.conf
/etc/init/control-alt-delete.conf
/etc/init/start-ttys.conf
/etc/init.d
[root@zhangxiao etc]#
```
根据属主属组查找
1. -user USERNAME以属主为username的文件
```
示例
[root@zhangxiao data]# find /data -user "zhangxiao"
/data/dir11
/data/dir11/fa1
/data/dir11/passwd
/data/ff2
/data/dd23
/data/23
[root@zhangxiao data]#
```
2. -group GROUPNAME 以属组为指定组的文件
```
示例
[root@zhangxiao data]# find /data -group xiaoxiao
/data/fa1
/data/23
[root@zhangxiao data]#
```
3. -uid:查找属主为指定UID的文件
```
示例
[root@zhangxiao data]# find /data -uid "0"
/data
/data/testdir1
/data/testdir1/fa1
/data/testdir1/passwd
/data/testdi1
/data/lost+found
/data/passwd
/data/test1
/data/test1/passwd
[root@zhangxiao data]#
```
4. -gid:查找属组为指定GID的文件
```
示例
[root@zhangxiao data]# find /data -gid "500"
/data/dir11
/data/dir11/fa1
/data/dir11/passwd
/data/ff2
/data/dd23
[root@zhangxiao data]
```
5. -nouser: 查找没有属主的文件
```
[root@zhangxiao xiaoxiao]# find /data -nouser
/data/f33
/data/f30
/data/f32
/data/f31
[root@zhangxiao xiaoxiao]#
```
6. -nogroup:查找没有属组的文件
```
根据文件类型查找
```
1. -type
f:文件
d:目录
```
示例
[zhangxiao@zhangxiao ~]$find /data -type "d"
/data
/data/dir11
/data/testdir1
/data/testdi1
/data/lost+found
find: `/data/lost+found': Permission denied
/data/test1
[zhangxiao@zhangxiao ~]$
```
l:符号链接
s:套接字文件
b:块设备文件
c:字符设备文件
p:管道文件
```
组合条件
```
-a :与
```
[root@zhangxiao zhangxiao]# find /data -name "f*" -a -user "zhangxiao"
/data/dir11/fa1
/data/fa1
/data/ff2
[root@zhangxiao zhangxiao]#
```
-o :或
-not,-! :非
!A -a !B= !(A -o B)
!A -o !B= !(A -a B)
```
示例
[root@zhangxiao firmware]# find /etc -size "+1M" -type "f"
/etc/selinux/targeted/policy/policy.24
/etc/selinux/targeted/modules/active/policy.kern
/etc/gconf/gconf.xml.defaults/%gconf-tree.xml
[root@zhangxiao firmware]#
```
根据文件大小查找
```
1. -size [+|-]
常用单位:K、M、G
(-size 3k:是指大于等于2K到3K的文件)
(-size -3k:0-2K的文件)
(-size +3k:大于3K的文件)
```
以时间戳为单位
以天为单位的
```
-atime
-ctime
-mtime
(-atime 3大于等于3天不到4天 )
(-atime +3 四天之前)
(-atime -3 不到三天
```
)
以分钟为单位
```
-amin
-cmin
-mmin
```
按权限查找
```
-perm 222精确匹配222
-perm 【+|-】mode
在此种情况下0表示不关心,7包括1、2、4.
-perm +222 (加号表示或者的关系)
-perm -222
(减号表示每一类对象都需要有这个权限)
```
-maxdepth:查找的最大层级
-mindepth:查找的最小层级
示例
```
[root@zhangxiao zhangxiao]# find /data -maxdepth "1" -size "2k" -ls
12 4 -rw-r--r-- 1 root root 1682 Mar 31 11:18 /data/passwd
[root@zhangxiao zhangxiao]#
```
处理动作:
```
-print:默认的处理动作。输出到屏幕
-ls:对查到的文件执行ll命令
-delete:删除查找到的文件
-fls:查找到的文件信息以长格式保存在指定的目录中
-ok CMD {}\;:对查找到的每一个文件执行CMD,执行前交互式要求用户确认
-exec CMD {}\;:批量执行前面的CMD不需要确认
```
find传递查找到的文件至后边指定的命令是有些命令不能接受这么多参数此时 执行命令就会失败,我们可以用一个方法解决
```
find | xargs CMD
指的是一条一条命令传给CMD
```
find常配合cpio使用
cpio
```
功能:复制文件从或到归档
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称。
-d 解包生成目录,在cpio还原时,自动的建立目录
-c 一种较新的存储方式
```
压缩,归档工具
1.gzip:只能压缩文件不能压缩目录
gzip filename :压缩文件
```
示例
[root@zhangxiao zhangxiao]# gzip PAAA
[root@zhangxiao zhangxiao]# ls PAAA.gz
PAAA.gz
[root@zhangxiao zhangxiao]#
```
-d:代表解压缩,和unzip效果一样
```
示例
[root@zhangxiao zhangxiao]# gzip -d PAAA.gz
[root@zhangxiao zhangxiao]# ls
a.out Downloads hello.sh MUSIC per.sh pwa1 test1
Desktop excyte.sh helloword PAAA Pictures script.log txt.txt
Documents haha Music paBB Public Templates Videos
[root@zhangxiao zhangxiao]#
```
-c:filename > filename.gz 保留源文件
-9:以9倍压缩比压缩(1-9)都可以
gungzip filename:解压缩文件
zxat:不解压直接查看文本文件内容
2.bz2:只能压缩文件不能压缩目录
bzip filemane :压缩文件
-d:解压缩
-k:压缩直接保留文件
```
示例
[root@zhangxiao zhangxiao]# bzip2 -k paBB
[root@zhangxiao zhangxiao]# ls
a.out Downloads hello.sh MUSIC paBB.bz2 Public Templates Videos
Desktop excyte.sh helloword PAAA per.sh pwa1 test1
Documents haha Music paBB Pictures script.log txt.txt
[root@zhangxiao zhangxiao]#
```
-q:静默过程
-9:(1-9)几倍压缩比
bunzip2 :解压缩
bzcat:不解压直接查看文件
3.xz:压缩文件
xz filename 压缩文件
-d:代表解压缩,和unzip效果一样
-k:保留源文件
-9:以9倍压缩比压缩(1-9)都可以
xzcat:不解压直接查看文件
#### tar
归档文件
```
1.创建归档
tar -c -f /PATH/TO/SOMEFILE.tar file...
2.查看归档文件中的列表
tar -t -f PATH/TO/SOMEFILE.tar
3.展开归档
tar -x -f PATH/TO/SOMEFILE.tar
tar -x -f PATH/TO/SOMEFILE.tar -C \PATH/TO/DIR(归档到指定文件)
```
归档的同时压缩
-J:xz -j:bzip2 -z:gzip
## sed
sed:行编辑器,逐行处理
语法:sed:[option]... 'script' inputfile
sed /地址定界/命令 文件
常用选项
```
-n :静默模式,不输出模式中的内容弄到屏幕
-e :多点编辑功能
-f :/PATH/TO/SCRIPT_FILE从指定文件中读取编辑脚本
-r :扩展正则表达式
-i:修改原文件
```
地址定界
```
(1):不给地址:对全文进行处理
(2):单地址
#:第几行
/PATTERN/:此模式匹配的每一行
(3)地址范围
#,#:第几行到第几行
#,+#:第几行到加几行
/PATTERN1/,/PATTERN2/:匹配的行到匹配的行
#,/PATTERN/
```
编辑命令
```
d:删除地址范围的内容
p:输出到屏幕上
a \'内容':在每一个符合条件的行后加入内容
i \‘内容':每一行前面插入内容
c \’内容‘:替换所在的行为内容
w /PATH/FILENAME:匹配的内容另存为文件为指定路径文件
r /PATH/FILENAME:把指定文件中的内容读取到匹配的后面
=:为模式空间中的行打印行号
!:取反条件
s:查找替换,支持使用其他分隔符如s@@@\s###
替换标记
g:行内全局替换
p:显示替换的行
w /PATH/TO/SOMEFILE将替换成功的结果保存到文件中-
```
sed用法:匹配root用户到shutdown用户之间所有行并对带有nologin的行进行删除
sed -n '/^root/,/^shutdown/ {/nologin/!p}' /etc/passwd
- #### locate
非实时查找,也叫数据库查找基于(/var/lib/locatedb)
> 默认大概每天更新一次,如果想用locate实时查找,可以用命令updatedb升级数据库
备注:如果在白天线上服务器比较忙最好不要用updatadb 命令。(索引构建过程需要历遍整个根文件消耗资源比较大,会耗费时间)
> 优点:速度快,不占用内存
> 缺点:常更新的文件不一定会搜索得到
语法:lacate KEYWORD
会显示所有带KEYWORD的文件或者目录(包括路径中带有KEYRORD的)
示例
```
[root@zhangxiao data]# locate /root/87*
/root/87_a
/root/87_jitu
/root/87scp.sh
[root@zhangxiao data]#
```
find
实时查找
优点:比较准确
缺点:速度略慢会占用内存
语法:find [查找路径] [查找条件] [处理动作]
查找路径:指定具体的目录路径,默认为当前路径
查找条件:指定查找的标准,可以以文件名、大小、类型、权限等
处理动作:对符合条件的文件做什么操作;默认输出至屏幕
默认递归 查看文件夹中的文件
1.-name “FILENAME”,支持使用通配符
```
示例
[root@zhangxiao etc]# find /root/ -name "87*"
/root/87_a
/root/87scp.sh
/root/87_jitu
[root@zhangxiao etc]#
```
2.-iname "FILENAME"查找文件名称不区分大小写
```
示例
[root@zhangxiao ~]# touch IiIiU
[root@zhangxiao ~]# find /root -iname ii*
/root/IiIiU
[root@zhangxiao ~]#
```
3.regex "PATTERN" 以PATTERN匹配整个文件路径查找字符串而不仅仅是文件名
```
示例
[root@zhangxiao etc]# find /etc -regex "/etc/i.*"
/etc/inittab
/etc/init.conf
/etc/idmapd.conf
/etc/inputrc
/etc/init/tty.conf
/etc/init/ck-log-system-start.conf
/etc/init/rcS.conf
/etc/init/splash-manager.conf
/etc/init/prefdm.conf
/etc/init/control-alt-delete.conf
/etc/init/start-ttys.conf
/etc/init.d
[root@zhangxiao etc]#
```
根据属主属组查找
1. -user USERNAME以属主为username的文件
```
示例
[root@zhangxiao data]# find /data -user "zhangxiao"
/data/dir11
/data/dir11/fa1
/data/dir11/passwd
/data/ff2
/data/dd23
/data/23
[root@zhangxiao data]#
```
2. -group GROUPNAME 以属组为指定组的文件
```
示例
[root@zhangxiao data]# find /data -group xiaoxiao
/data/fa1
/data/23
[root@zhangxiao data]#
```
3. -uid:查找属主为指定UID的文件
```
示例
[root@zhangxiao data]# find /data -uid "0"
/data
/data/testdir1
/data/testdir1/fa1
/data/testdir1/passwd
/data/testdi1
/data/lost+found
/data/passwd
/data/test1
/data/test1/passwd
[root@zhangxiao data]#
```
4. -gid:查找属组为指定GID的文件
```
示例
[root@zhangxiao data]# find /data -gid "500"
/data/dir11
/data/dir11/fa1
/data/dir11/passwd
/data/ff2
/data/dd23
[root@zhangxiao data]
```
5. -nouser: 查找没有属主的文件
```
[root@zhangxiao xiaoxiao]# find /data -nouser
/data/f33
/data/f30
/data/f32
/data/f31
[root@zhangxiao xiaoxiao]#
```
6. -nogroup:查找没有属组的文件
```
根据文件类型查找
```
1. -type
f:文件
d:目录
```
示例
[zhangxiao@zhangxiao ~]$find /data -type "d"
/data
/data/dir11
/data/testdir1
/data/testdi1
/data/lost+found
find: `/data/lost+found': Permission denied
/data/test1
[zhangxiao@zhangxiao ~]$
```
l:符号链接
s:套接字文件
b:块设备文件
c:字符设备文件
p:管道文件
```
组合条件
```
-a :与
```
[root@zhangxiao zhangxiao]# find /data -name "f*" -a -user "zhangxiao"
/data/dir11/fa1
/data/fa1
/data/ff2
[root@zhangxiao zhangxiao]#
```
-o :或
-not,-! :非
!A -a !B= !(A -o B)
!A -o !B= !(A -a B)
```
示例
[root@zhangxiao firmware]# find /etc -size "+1M" -type "f"
/etc/selinux/targeted/policy/policy.24
/etc/selinux/targeted/modules/active/policy.kern
/etc/gconf/gconf.xml.defaults/%gconf-tree.xml
[root@zhangxiao firmware]#
```
根据文件大小查找
```
1. -size [+|-]
常用单位:K、M、G
(-size 3k:是指大于等于2K到3K的文件)
(-size -3k:0-2K的文件)
(-size +3k:大于3K的文件)
```
以时间戳为单位
以天为单位的
```
-atime
-ctime
-mtime
(-atime 3大于等于3天不到4天 )
(-atime +3 四天之前)
(-atime -3 不到三天
```
)
以分钟为单位
```
-amin
-cmin
-mmin
```
按权限查找
```
-perm 222精确匹配222
-perm 【+|-】mode
在此种情况下0表示不关心,7包括1、2、4.
-perm +222 (加号表示或者的关系)
-perm -222
(减号表示每一类对象都需要有这个权限)
```
-maxdepth:查找的最大层级
-mindepth:查找的最小层级
示例
```
[root@zhangxiao zhangxiao]# find /data -maxdepth "1" -size "2k" -ls
12 4 -rw-r--r-- 1 root root 1682 Mar 31 11:18 /data/passwd
[root@zhangxiao zhangxiao]#
```
处理动作:
```
-print:默认的处理动作。输出到屏幕
-ls:对查到的文件执行ll命令
-delete:删除查找到的文件
-fls:查找到的文件信息以长格式保存在指定的目录中
-ok CMD {}\;:对查找到的每一个文件执行CMD,执行前交互式要求用户确认
-exec CMD {}\;:批量执行前面的CMD不需要确认
```
find传递查找到的文件至后边指定的命令是有些命令不能接受这么多参数此时 执行命令就会失败,我们可以用一个方法解决
```
find | xargs CMD
指的是一条一条命令传给CMD
```
find常配合cpio使用
cpio
```
功能:复制文件从或到归档
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称。
-d 解包生成目录,在cpio还原时,自动的建立目录
-c 一种较新的存储方式
```
压缩,归档工具
1.gzip:只能压缩文件不能压缩目录
gzip filename :压缩文件
```
示例
[root@zhangxiao zhangxiao]# gzip PAAA
[root@zhangxiao zhangxiao]# ls PAAA.gz
PAAA.gz
[root@zhangxiao zhangxiao]#
```
-d:代表解压缩,和unzip效果一样
```
示例
[root@zhangxiao zhangxiao]# gzip -d PAAA.gz
[root@zhangxiao zhangxiao]# ls
a.out Downloads hello.sh MUSIC per.sh pwa1 test1
Desktop excyte.sh helloword PAAA Pictures script.log txt.txt
Documents haha Music paBB Public Templates Videos
[root@zhangxiao zhangxiao]#
```
-c:filename > filename.gz 保留源文件
-9:以9倍压缩比压缩(1-9)都可以
gungzip filename:解压缩文件
zxat:不解压直接查看文本文件内容
2.bz2:只能压缩文件不能压缩目录
bzip filemane :压缩文件
-d:解压缩
-k:压缩直接保留文件
```
示例
[root@zhangxiao zhangxiao]# bzip2 -k paBB
[root@zhangxiao zhangxiao]# ls
a.out Downloads hello.sh MUSIC paBB.bz2 Public Templates Videos
Desktop excyte.sh helloword PAAA per.sh pwa1 test1
Documents haha Music paBB Pictures script.log txt.txt
[root@zhangxiao zhangxiao]#
```
-q:静默过程
-9:(1-9)几倍压缩比
bunzip2 :解压缩
bzcat:不解压直接查看文件
3.xz:压缩文件
xz filename 压缩文件
-d:代表解压缩,和unzip效果一样
-k:保留源文件
-9:以9倍压缩比压缩(1-9)都可以
xzcat:不解压直接查看文件
#### tar
归档文件
```
1.创建归档
tar -c -f /PATH/TO/SOMEFILE.tar file...
2.查看归档文件中的列表
tar -t -f PATH/TO/SOMEFILE.tar
3.展开归档
tar -x -f PATH/TO/SOMEFILE.tar
tar -x -f PATH/TO/SOMEFILE.tar -C \PATH/TO/DIR(归档到指定文件)
```
归档的同时压缩
-J:xz -j:bzip2 -z:gzip
## sed
sed:行编辑器,逐行处理
语法:sed:[option]... 'script' inputfile
sed /地址定界/命令 文件
常用选项
```
-n :静默模式,不输出模式中的内容弄到屏幕
-e :多点编辑功能
-f :/PATH/TO/SCRIPT_FILE从指定文件中读取编辑脚本
-r :扩展正则表达式
-i:修改原文件
```
地址定界
```
(1):不给地址:对全文进行处理
(2):单地址
#:第几行
/PATTERN/:此模式匹配的每一行
(3)地址范围
#,#:第几行到第几行
#,+#:第几行到加几行
/PATTERN1/,/PATTERN2/:匹配的行到匹配的行
#,/PATTERN/
```
编辑命令
```
d:删除地址范围的内容
p:输出到屏幕上
a \'内容':在每一个符合条件的行后加入内容
i \‘内容':每一行前面插入内容
c \’内容‘:替换所在的行为内容
w /PATH/FILENAME:匹配的内容另存为文件为指定路径文件
r /PATH/FILENAME:把指定文件中的内容读取到匹配的后面
=:为模式空间中的行打印行号
!:取反条件
s:查找替换,支持使用其他分隔符如s@@@\s###
替换标记
g:行内全局替换
p:显示替换的行
w /PATH/TO/SOMEFILE将替换成功的结果保存到文件中-
```
sed用法:匹配root用户到shutdown用户之间所有行并对带有nologin的行进行删除
sed -n '/^root/,/^shutdown/ {/nologin/!p}' /etc/passwd