locate
文件系统查找
数据库查找/var/lib/mlocate/mlocate.db
依赖事先构建的索引
updatedb 手动更新数据库,才可以找到新建文件
查找时,遍历整个根文件系统,耗资源
查找速度快,模糊查找,非实时查找
搜索文件的全路径
locate + 关键词
locate -i 不区分大小写的搜索
locate -n N 列举前N个匹配
locate conf 搜索名称或路径中带有"conf"的文件
locate -r '\.conf$' 使用正则表达式来搜索".conf"结尾的文件
find
实时查找
遍历指定路径,查找文件
查找速度略慢,精确查找,实时查找
可能只搜索用户具备读取和执行权限的目录
查找路径:默认是当前目录
查找条件:指定查找标准,默认是找出指定路径的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
-maxdepth level 最大搜索目录深度,指定目录为第一级
-mindepth level
-name "文件名称" 支持使用glob. * ? [] [^]
-iname "文件名称" 不区分字母大小写
-inum n 按inode号查找
-samefile name 相同inode号的文件
-links n 链接数为n的文件
-regex "pattern" 以pattern匹配整个文件路径的字符串,而不仅仅是文件名称
-user 用户名 查找属主是此用户的文件
-group 组名 查找属组是此组名的文件
-uid uid号 查找是此uid号的文件
-gid gid号 查找是此gid号的文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
-type 类型(b块设备 c字符设备 d目录 f普通文件 S套接字 h/L符号链接文件)
-size +6k (6k,+∞)
-size -6k (0,5k]
-atime/-amin +6 查看(读取)时间大于或等于7天/分钟
-atime/-amin -6 小于6天/分钟
-mtime/-mmin +6 修改时间大于或等于7天/分钟
-mtime/-mmin -6 修改时间小于6天/分钟
-ctime/-cmin 修改时间
-perm mode 精确匹配权限
-perm /mode 任何一类对象(u,g,o)的权限中只要有一位匹配 或 (centos7版本之前需要加mode前要加/)
-perm -mode 每一类对象都必须同时拥有指定权限 且
-perm 002 属主,属组有无权限不关心,other有w权限即可
find -perm 755 权限755文件
find -perm /222 任意人有w权限即可
find -perm -222 每个人都有w权限,才匹配
find -perm -002 other有w权限即可
find /etc -mmin -1 1分钟内被修改的文件
组合条件
-a 与
-o 或
-not,! 非
(非A)或(非B)=非(A且B) !A -o !B = !(A -a B)
(非A)且(非B)=非(A或B) !A -a !B = !(A -o B)
find -not \(-user joe -o -user jone\)
-ls
-delete 找到后删除
-fls file 找到的长格式信息保存到文件中
-ok cmd {}\; 找到的文件执行cmd命令,执行前会交互式要求用户确认,{}表示找到的文件名称本身
-exec cmd {}\; 找到的文件执行cmd命令,无需确认
xargs 解决"命令不支持管道|来传递参数"的问题,产生某个命令的参数,读入stdin的数据,空格符或者回车符将stdin的数据分割成为args,解决某些命令不能接受过多参数且执行失败的问题
find | xargs cmd
ls f* | xargs rm
find /sbin -perm +700 |xargs ls -l
find -name "*.conf" -exec cp {} {}.org \; 备份配置文件,添加.org扩展名
find /tmp -ctime +3 -user joe -ok rm {} \; 删除存在时间超过3天以上的joe的临时文件
find ~ -perm -002 -exec chmod o-w {} \; 在主目录中寻找可以被其他用户写入的文件
find /data -type f -perm 644 -name ".sh" -exec chmod 755 {}\;
find /home -type d -ls
./bin/f.sh 二级目录
./bin/f1/f2/f3/f4.sh 五级目录
find -maxdepth 5 -mindepth 3 -name f1.sh 只能搜到f4.sh
find /tmp -not \( -user root -o -name "f*" \) -ls /tmp目录下属主不是root,文件名不以f开头的文件
非>与>或
find -name "*.log" -o -name "*.sh" *.log和*.sh文件都显示
find -name "*.log" -o -not -name "*.sh" -ls *.log和*.sh文件都不显示,其他都显示
prune 剪切
find /etc -path '/etc/sane.d' -a -prune -o -name "*.conf" 查找/etc下,除了/etc/sane.d目录的其它所有.conf后缀的文件 -path用单引号
find /etc \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a prune -o name "*.conf" 查找/etc下,除了/etc/sane.d和/etc/fonts目录的其它所有.conf后缀的文件
练习
find /root -name "*.sh" -exec cp -a {} /app/{}.bak \; app下如果无/root/bin文件夹,会出错,app下,mkdir -p root/bin 即可
find /var/ -user root -group mail
find /var/ -not \( -user root -o -user lp -o -user gdm \)
find /var/ -mtime -7 -not \( -user root -o -user postfix \) 最近一周被修改过的文件
find / -nouser -o -nogroup -atime -7
find /etc/ -not -perm /222 都无读权限的文件
find /etc/ -not -perm /111 都无执行权限的文件
find /etc/init.d/ -perm -113 严格匹配
压缩
file-roller 图形界面的压缩
compress/uncompress .Z 压缩文件
gzip/gunzip .gz 压缩文件
bzip/bunzip .bz2 压缩文件
xz/unxz .xz 压缩文件 压缩比大,解压缩的时间就长
zip/unzip 无后缀要求 压缩目录
compress file file——>file.Z,file文件不存在了,名字变红
compress -d file.Z file.Z——>file,file.Z不存在了
compress -c file 压缩内容输出至屏幕,原文件存在
compress -c file > file.Z 压缩内容输出至文件,原文件存在
compress -dc file.Z > file 解压缩内容输出至文件,原文件存在
zcat file.Z 解压缩输出至屏幕,原文件存在
zcat file.z > file 解压缩内容输出至文件,原文件存在
gzip file 压缩文件
gzip -d file.gz 解压缩
gzip -c file 压缩内容输出至屏幕
gzip -dc file.gz > file 解压缩内容输出至文件
gzip -9 file 最大的压缩比压缩文件
zcat file.gz > file 解压缩输出至文件
gzip file1 file2 压缩file1和file2,互不影响
bzip2 file
bzip2 -d file.bz2 = bunzip
bzip2 -k file 压缩文件,原文件存在
bzcat file.bz2 > file
xz file 压缩文件
xz -d file.xz = unxz 解压缩文件
xz -k file 压缩文件
xz -9 file 压缩
xzcat file.xz > file 解压缩文件
zip -r /testdir/sysconfig /etc/sysconfig 打包压缩 递归 新文件名称/testdir/sysconfig 原文件名称/etc/sysconfig
unzip sysconfig.zip
cat /var/log/messages|zip messages - 压缩文件名称message 被压缩文件夹-
unzip -p message > message
后缀无要求zip
后缀有要求compress/gzip/bzip/xz/tar
tar -cvf etc.tar /etc/ 创建归档,c创建打包文件,v过程,f指定新的打包文件名称etc.tar,必须写后缀名称
tar -rvf etc.tar /app/m 追加文件至归档,不支持压缩文件追加内容
tar -tvf etc.tar 查看归档文件中的文件列表
tar -xvf etc.tar 展开归档,默认解包至当前目录
tar -xvf etc.tar -C /tmp 指定解包至哪个地方 C大写
归档+压缩
tar zcvf etc.tar.gz /etc gzip
tar jcvf etc.tar.bz2 /etc bzip2
tar Jcvf etc.tar.xz /etc xz
tar xvf etc.tar.xz -C /root xvf此处加/不加对应字母都行 .tar.xz=.txz
/boot/initramfs-...img 此文件是gzip压缩,解压缩需要加后缀.img.gz
cp /boot/initramfs-...img /app
mv initramfs-...img initramfs-...img.gz
gzip -d init...img.gz
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist T指定输入的文件 X指定删除的文件
split
split -b 空间大小 -d 被分割文件 prename(指明前缀,切割后形成的)
-d文件后缀为数字
默认文件后缀是字母
split -b 1M etc.tar.bz2 etcsplit 形成的文件名称:etcsplitaa etcsplitab etcsplitac 默认文件后缀是字母
split -d -b 1M etc.tar.bz2 etcsplit 形成的文件名称:etcsplit00 etcsplit01 etcsplit02 -d文件后缀为数字
合并多个小文件
cat etcsplit* > etc2.tar.bz2
分割后,大文件仍存在
合并后,小文件仍存在
cpio -o 打包
cpio -i 解包
cpio -d 解包生成目录
cpio -t 预览
cpio -v 过程
find ./etc -print | cpio -ov > etc.cpio 备份etc目录
cpio -tv < etc.cpio 内容预览
cpio -idv < etc.cpio 解包文件
重定向方式将文件打包备份,还原恢复
解压以".cpio"或".tar"结尾的文件
cpio [选项] > 文件名
cpio [选项] < 文件名
网友评论