本章内容:
使用locate命令
使用find命令
压缩和解压缩工具
文件查找:
在文件系统上查找符合条件的文件
文件查找:locate,find
非实时查找(数据库查找):locate
实时查找:find
locate:
查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于事先构建的索引
索引的构建是在系统较为空闲是自动进行(周期性任务),管理员手动更新数据库
updatedb
索引构建过程需要便利整个根文件系统,极消耗资源
工作特点:
查找速度快
模糊查找
非实时查找
搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
(比如普通用户不能搜索/root下的文件)
locate命令:
locate KEY1 KEY2...
搜索文件,默认全路径匹配,且key1 key2之间是或关系
-i 忽略大小写
-n N 只列举前N个匹配项目
-r 使用正则表达式
-b 只匹配文件名
-c 只打印匹配条数,不显示搜索到的文件
-A key1 key2 搜索同时满足所有关键词的文件且关系
-e 只显示目前存在的文件
-S 不搜索文件,显示数据库信息
实例:
locate -c net conf
搜索路径或文件名中带有net或conf 的文件,仅显示匹配的数量
[root@sentos7 ~]$locate -c net conf
9616
locate -A -c net conf
搜索路径或文件名中带有net和conf 的文件,仅显示匹配的数量
[root@sentos7 ~]$locate -A -c net conf
238
搜索.conf或者.net结尾的文件
[root@sentos7 ~]$locate -c -r '\(\.conf$\)\|\(\.net$\)'
2439
[root@sentos7 ~]$locate -c -r '\(\.net$\)'
6
[root@sentos7 ~]$locate -c -r '\(\.conf$\)'
2433
PS:使用正则表达式(regex)的时候,key只能有一个,不能多个
find:
实时查找工具,通过遍历指定路径完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
可能只搜索用户具备读取和执行权限的目录
语法:
find [option]..[查找路径][查找条件][处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名,大小,类型,权限等标准进行
默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
查找条件:
指定搜索层级:
-maxdepth level 最大搜索目录深度,指定目录为第1级
-mindepth level 最小搜索目录深度
根据文件名和inode查找:
-name "文件名称": 支持使用glob
*,?,[],[^]
-iname "文件名称": 不区分字母大小写
-inum n 按照inode号查找
-samefile name 相同inode号的文件
-links n 链接数为n的文件
-regex "pattern": 以pattern匹配整个文件路径字符串,而不仅仅是文件名称
例:
find /etc/ -maxdepth 2 -name passwd
find / -name f12*
find / -regex .*f123.*
find / -maxdepth 5 -mindepth 5 -links 4
find / -inum 68645312
根据属主、属组查找:
-user username 查找属主为指定用户(UID)的文件
-group groupname 查找属组为指定(GID)的文件
-uid UserID 查找属主为指定的UID号的文件
-gid GroupID 查找属主为指定的GID号的文佳
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
根据文件类型查找:
-type TYPE:
f 普通文件
d 目录文件
l 符号链接文件
s 套接字文件
b 块设备文件
c 字符设备文件
p 管道文件
空文件或目录
-empty
find / -type d -empty
组合条件:
与: -a
或: -o
非: -not,!
德·摩根定律
(非a)或(非b)=非(a且b)
(非a)且(非b)=非(a或b)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
示例:
find / -name snow
find / -inmae Snow
find / -name *.txt
find /var -name *.log* -a -regex ".*log$"
find -user joe -group joe
fing / -user joe -o -group joe
find -not \( -user joe -o -user jane \)
find -not -user joe -not -user jane
find / -user joe -o -uid 500
找出/目录下,属主不是root,且文件名不以f开头的文件
find / -not -user root -name "[^f]*" |wc -l
563
find / \( -not -user root -a -not -name "f*" \)|wc -l
563
find / -not \( -user root -o -name "f*" \)|wc -l
563
排除目录
示例:
查找/etc下,除/etc/sane.d目录的其他所有.conf后缀的文件
find /etc -path "/etc/same" -a -prune -o -name *.conf
查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件
find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -name *.conf
根据文件大小来查找:
-size [+|-]#unit
常用单位:k M G c(byte)
#UNIT:(#-1,#]
如:6k表示(5k,6k]
-#UNIT:(0,#-1]
如:-6k 表示[0,5k]
+#UNIT: (#,以上]
如:+6k 表示(6k,以上)
根据时间戳:
以“天”为单位;
-atime[+|-]#,
#:[#,#+1) find / -atime 5 表示5-6天
+#:[#+1,以上] +5 6天以内
-#:[0,#) -5 5天以上
-mtime
-ctime
以”分钟“为单位
-amin find / -amin 5 5-6分钟
-mmin -5 5分钟以内
-cmin +5 6分钟以上
根据权限查找:
-perm[/|-]mode
mode 精确权限匹配
/mode 任何一类(u,g,o)对象的权限中只要能有一位匹配即可,或关系
-mode 每一类对象都必须同时拥有指定权限,与关系
find -perm -222
要转换成010 010 010 ugo必须要都写权限才符合
find -perm /421
100 010 001 u+r g+w o+x 只需要有一位满足就行了
0表示不关注
find -perm 002 只要o 有 w 权限就匹配 不关注ug位
处理动作:
-print 默认的处理动作,显示至屏幕
-ls 类似于对查找到的文件执行ls -l 命令
-delete 删除查找到的文件
-fls file 查找到的所有文件的长格式信息保存至指定文件中
-ok command {} \; 找到的每个文件执行由command指定的命令,对于
每个文件执行命令之前,都会交互式要求用户确认
find /root -name "f*" -ok cp {} /data {}.org \;
-exec command {} \;
对查找到的每个文件执行由COMMAND指定的命令,不需要确认
{}:用于引用查找到的文件名称本身
find 传递查找到的文件至后面指定的命令是,查找到所有符合条件的文件一次
性传递给后面的命令
xargs:参数替换
由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所有就有了
xargs命令
xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符
或回车符将stdin的数据分隔成为 arguments
注意:文件名或者是其他意义的名词内含有空格符的情况
有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决
示例:
ls f* |xargs rm
ls -R /data |xargs rm -rf
find / -perm +666|ls -l 这个是个错误的,ls不支持stdin
fing / -perm 666| xargs ls -l 用xargs 传递参数
echo f{1..1000000} |xargs -n1 touch
ls | xargs rm -f
find 示例:
备份配置文件,添加.orig这个扩展名
find /etc -name "*.conf" -exec cp -v {} {},orig \;
注意,如果更换目录备份,比如备份到/data下
find -name "*.conf" -exec cp {} /data/{},orig \;
这是个错误命令,会提示目录不存在
/data//etc/mcelog/mcelog.conf,orig’: No such file or directory
提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +2 -user joe -ok rm {} \;
在主目录中寻找可被其他用户写入的文件
find ~ -perm -002
查找/data下的权限为644 后缀为sh的普通文件,增加执行权限
find /data -type f -perm 644 -name "*.sh" exec chmod +x {} \;
查看/home的目录
find /home -type d -ls
Gnome 搜索工具
位置-->搜索文件。。
图形化搜索工具,可搜索
命令、内容、用户、组群、大小、修改时间
压缩、解压缩及归档工具
file-roller
compress/uncompress: .Z
gzip/gunzip: .gz
bzip2/bunzip2 .bz
xz/unxz .xz
zip/unzip
tar
cpoi
compress/uncompress
compress [-dfvcVr] [-b maxbits] [file..]
-d 解压缩,相当于uncompress
-c > file.Z 压缩和解压缩结果输出至标准输出,不删除源文件
-v 显示详情
-r 如果对目录使用compress -r dir 会将目录内的文件分别进行压缩
uncompress: 解压缩
zcat file.Z >file 类似compress -c 利用重定向解压 不删除压缩文件
PS:
压缩比不高,且太小的文件不支持压缩
gzip/gunzip
gzip []option]... file...
-d 解压缩,相当于gunzip
-c 将压缩或解压缩的结果输出至标准输出
-# 指定压缩比,1-9
zcat:m.gz > m 不解压的情况下查看内容,可以重定向解压
bzip2/bunzip2/bzcat
bzip2 [option].. file..
-k 保留原文件
-d 解压缩
-# 压缩比,1-9,默认为9
bzcat:不解压的情况下查看文本文件内容
xz/unxz/xzcat
xz [option]..file..
-k 保留原文件
-d 解压缩
-# 压缩比1-9 默认6
xzcat:不显示解压缩的前提查看文本文件内容
zip/unzip
zip -r file dir1
将dir1 打包压缩到file.zip
解包解压缩:
unzipfile file.zip
man bash | zip man -
接受输入且打包为man.zip(如果直接解压出来,文件名为 - )
unzip -p man.zip > man 将文本解压写入文件
tar:
tar -cpvf /pash/file.tar /dir|file...
将/dir或者file... 打包放到/pash/file.tar
-c 指定文件file.tar
-p 保留文件属性
-v 可视
-f 后面(必须)跟文件 不可写成-cfpv之类的
tar -tvf file.tar
预览打包中的文件列表
tar -xvf fiel.tar
解包到当前文件
tar -xvf file.tar -C /dir
解包到目录/dir
打包的同时可以压缩:
tar -zcvpf file.tar.gz /dir 打包同时压缩成gz文件 .tgz
tar -jcvpf file.tar.bz /dir 打包同时压缩成bz文件 .tbz
tar -Jcvpf file.tar.xz /dir 打包同时压缩成xz文件 .txz
解包不需要特殊处理,-xvf 可以全部解包解压缩
-T 选项指定输入文件(目录)
-X 选项指定包含要排除的文件列表
tar zcvf file.tgz -T list.txt -X exlist.txt
split :分割大的tar文件为多份小文件
split -b 10M -d file.tar a.tar
-b size
-d 指定后缀名为数字
将file.tar 按照10M大小分割,且文件名为数字后缀 a.tar(00,01,..)
如不加-d 默认为字母后缀(a,b,c...)
合并
cat a.tar* > file.tar
cpio:
功能:复制文件或归档
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,他可以
解压以".cpio"或者".tar"结尾的文件
cpio >|< 文件或者设备名
选项:
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称。
-d 解包生成目录,在cpio还原时,自动的建立目录
-c 一种较新的存储方式
示例:
find /etc -print | cpio -ov > etc.cpio ;rm -rf /etc
将/etc目录备份;然后删除/etc目录
cpio -tv < etc.cpio
预览文件
cpio -idv < etc.cpio
恢复/etc目录
笔记整理完成时间:2018年4月15日17:52:26
原文地址:http://blog.51cto.com/13683480/2104097