文件查找和压缩

文件查找

locate

基于/var/lib/mlocate.db数据库查找,更新方式updatedb,查找速度快,模糊查找,非实时查找,搜索的是文件的全路径,不仅仅是文件名,可能只搜索用户具备读取和执行权限的目录,常用选项:

  • -i:不区分大小写搜索
  • -n #:只列举前#个匹配项目
  • -r:使用正则表达式
[root@centos6 ~]# locate conf
[root@centos6 ~]# locate -r "\.conf"

find

查找速度慢,精确查找,实时查找,可能只搜索用户具备读取和执行权限的目录

语法:find [options] [查找路径] [查找条件] [处理动作]

  • 查找路径:指定具体目标路径,默认为当前目录
  • 查找条件:指定查找标准,可以文件名,大小,类型,权限等标准进行,默认为查找目标路径下的所有文件
  • 处理动作:对符合条件的文件做操作,默认输出至终端

查找条件

指定搜索层级
  • -maxdepth level:指定最大搜索目录深度,指定目录为第一级
  • -mindepth level:指定最小搜索目录深度
[root@centos6 app]# tree
.
└── c
    └── 2
        └── 3
            └── 4
                └── 5

5 directories, 0 files
[root@centos6 app]# find -maxdepth 5
.
./.a.sh.swp
./c
./c/2
./c/2/3
./c/2/3/4
./c/2/3/4/5
[root@centos6 app]# find -mindepth 5
./c/2/3/4/5
指定文件名和inode
  • -name "filename":支持使用文件通配符
  • -iname "filename":不区分字母大小写
  • -inum #:按inode号查找
  • -samefile filename:相同inode号的文件
  • -links #:链接数为#的文件
  • -regextype posix-extended -regex "pattern":以pattern匹配整个文件路径字符串,不仅仅是文件名称,注意和正则匹配进行区分(-regextype posix-extended表示指正则表达式类型为扩展正则)
[root@centos6 app]# find /etc/ -regextype posix-basic -regex "\.conf$"
[root@centos6 app]# find /etc/ -regextype posix-basic -regex ".*\.conf$"
/etc/libreport/report_event.conf
......
/etc/java/java.conf
指定属主、属组
  • -user username:查找属主为指定用户的文件
  • -group grpname:查找属组为指定组名的文件
  • -uid UID:查找属主为指定UID号的文件
  • gid GID:查找属组为指定GID号的文件
  • -nouser:查找没有属主的文件
  • -nogroup:查找没有属组的文件

有些文件是以指定属主和属组创建的,当删除属主的用户或者属组的组时,这些文件就没有属主或者属组了,这时就需要用到上面的-nouser/-nogroup

指定文件类型
  • -type f:普通文件
  • -type d:目录文件
  • -type l:符号链接文件
  • -type b:块设备文件
  • -type c:字符设备文件
  • -type p:管道文件
  • -type s:套接字文件
指定组合条件
  • -a:and 且
  • -o:or 或
  • !/-not:非

德·摩根定律

(非A) 或 (非B) = 非(A且B)
(非A) 且 (非B) = 非(A或B)

指定两个查找条件未添加指定组合关系时,默认为-a

[root@centos6 app]# ll
total 4
-rw-r--r--. 1 fanjie root      0 May 30 20:30 1
-rw-r--r--. 1 root   fanjie    0 May 30 20:30 2
-rw-r--r--. 1 fanjie fanjie    0 May 30 20:30 3
[root@centos6 app]# find -user fanjie -group joe
find: `joe' is not the name of an existing group
[root@centos6 app]# find -user fanjie -group fanjie
./3

[root@centos6 app]# find -not \( -user fanjie -a -group fanjie \)
.
./2
./1
[root@centos6 app]# find -not \( -user fanjie -o -group fanjie \)
.
指定排除目录
  • -path "dirname" -a -prune:排除指定目录,不查找此目录

查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的其它所有.conf后缀的文件

[root@centos6 app]# find /etc/ \( -path "/etc/sane.d/" -o -path "/etc/fonts/" \) -a -prune -o -name "*.conf"
指定文件大小
  • -size #unit:(#-1,#]
    • 如:6k 表示(5k,6k]
  • -size +#unit:(#,∞)
    • 如:+6k 表示(6k,∞)
  • -size -#unit:[0,#-1]
    • 如:-6k 表示[0,5k]
指定时间
  • 以“天”为单位:-atime/-mtime/ctime
    • -atime #:[#,#+1)
    • -atime +#:[#+1,∞]
    • -atime -#:[0,#)
  • 以“分钟”为单位:-amin/-mmin/-cmin
    • -amin #:[#,#+1)
    • -amin +#:[#+1,∞]
    • -amin -#:[0,#)
指定权限
  • -perm mode:精确权限查找
  • -perm /mode:各权限位之间为逻辑或的关系,各权限位只要有一位匹配即可
  • -perm -mode:各权限位之间为逻辑与的管理,各权限位必须同时匹配才可以
  • 0表示不关注,7表示满权限
  • 查找当前目录下,其他人有写权限的文件
[root@centos6 app]# find -perm -002

处理动作

  • -print:默认的处理动作,将结果输出至终端
  • -ls:类似于对查找到的文件执行“ls -l”
  • -delete:删除查找到的文件
  • -fls file:将查到文件的长格式信息保存至指定文件中
  • -ok command {} ;:对查到的文件执行指定命令,会交互确认,注意反斜线后的封号
  • -exec command {} ;:对查到的文件执行指定命令,不交互确认,注意反斜线后的封号
    • {}:用于引用查找到的文件名称自身
  • 备份当前目录的配置文件,并添加.orig后缀
[root@centos7 app]# find -name “*.conf” -exec cp {} {}.orig \;
xargs

由于find会将查到的内容,一次性全部传递给后面的命令,但是很多命令不支持|来传递参数,而日常工作中很有必要,所有就有了xargs,先读入stdin的数据,然后以空格或回车分隔依次传给后面的命令

注意:文件名或其他意义的名词内含有空格符的情况

有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决

[root@centos7 app]# ll
total 0
-rw-r--r--. 1 root root 0 May 31 09:52 1
drwxr-xr-x. 2 root root 6 May 31 09:52 a
[root@centos7 app]# ls * | rm -rf
[root@centos7 app]# ll
total 0
-rw-r--r--. 1 root root 0 May 31 09:52 1
drwxr-xr-x. 2 root root 6 May 31 09:52 a
[root@centos7 app]# ls * | xargs rm -rf
[root@centos7 app]# ll
total 0
drwxr-xr-x. 2 root root 6 May 31 09:52 a
[root@centos7 app]# ls -d * | xargs rm -rf
[root@centos7 app]# ll
total 0

[root@centos7 app]# find /sbin/ -perm +700 | ls -l
total 0
find: warning: you are using `-perm +MODE'.  The interpretation of `-perm +omode' changed in findutils-4.5.11.  The syntax `-perm +omode' was removed in findutils-4.5.12, in favour of `-perm /omode'.
[root@centos7 app]# find /sbin/ -perm +700 | xargs ls -l
find: warning: you are using `-perm +MODE'.  The interpretation of `-perm +omode' changed in findutils-4.5.11.  The syntax `-perm +omode' was removed in findutils-4.5.12, in favour of `-perm /omode'.
-rwx------. 1 root root 881168 Apr 10 16:24 /sbin/build-locale-archive
-rwx------. 1 root root 790576 Apr 10 16:24 /sbin/glibc_post_upgrade.x86_64
-rwx------. 1 root root 139224 Apr 11 08:10 /sbin/iprdbg
-rwx------. 1 root root  36272 Apr 11 11:22 /sbin/unix_update

压缩和解压缩

compress

compress常用选项:

  • -d:解压缩,相当好与uncompress
  • -c:结果输出至当前终端,不删除原文件
  • -v:显示详情

uncompress:解压缩
zcat file.Z > file

gzip

gzip常用选项:

  • -d:解压缩,相当于gunzip
  • -c:将压缩的结果输出至标准输出
    • 注意-c选项配合重定向的时候文件权限可能会发生改变
  • -v:显示详情
  • -#:1-9,指定压缩比,值越大压缩比越大

gunzip:解压缩
zcat:不显式解压缩的情况下查看文件内容

[root@centos7 app]# ll
total 4
-rw-r--r--. 1 root root 969 May 31 10:31 passwd.gz
[root@centos7 app]# gzip -d -c passwd.gz > a
[root@centos7 app]# ll
total 8
-rw-r--r--. 1 root root 2517 May 31 11:04 a
-rw-r--r--. 1 root root  969 May 31 10:31 passwd.gz

bzip2

bzip常用选项:

  • -k:keep,保留源文件
  • -d:解压缩
  • -c:将压缩的结果输出至标准输出
  • -v:显示详情
  • -#:1-9,压缩比,默认为9

bunzip2:解压缩
bzcat:不显式解压缩的前提下查看文件内容

xz

xz常用选项:

  • -k:keep,保留原文件
  • -d:解压缩
  • -c:将压缩的结果输出至标准输出
  • -v:显示详情
  • -#:1-9,压缩比,默认为6

unxz:解压缩
xzcat:不显式解压缩的前提下查看文件

zip

zip -r 压缩包名 源文件:将源文件压缩成指定名称的文件
unzip:解压缩
cat /var/log/messages | zip messages -
unzip -p:不显式解压缩的前提下查看文件

打包工具

tar

  • -c:创建包
  • -v:详细过程
  • -f:指定包名
    • 这是历史的产物,最初tar用来将文件打包到磁带机,然后要用的时候从磁带机还原出来。后来硬盘空间大了,开始直接以文件的形式备份到硬盘,所以才有了 -f 这个选项。
    • 可以和选项一起并用,也可以单独一个选项
      • tar -cvf test.tar a b c
      • tar -cv a b c -f test.tar
  • -t:查看包中的文件
  • -r:追加文件,不支持对压缩过的包进行追加
  • --delete:删除包中指定文件
  • -x:解出包中所有文件
    • 也可以解出包中的指定文件
    • 配合-C解压到指定目录,默认为当前目录
  • -j:通过bzip2进行压缩或解压缩,此时包名后缀最好是.tar.bz2
  • -z:通过gzip进行压缩或解压缩,此时包名后缀最好是.tar.gz
  • -J:通过xz进行压缩或解压缩,此时包名后缀最好是.tar.xz
  • -T:指定输入文件,配合-X排除指定文件

分割tar文件

split -b size -d tar-file-name prefix-name
split -b 1M -d test.tar.bz2 test.parts

合并tar文件

cat test.parts* > test.tar.bz2

cpio

通过重定向的方式对文件进行打包备份,还原恢复,可以解压“.cpio”和“.tar”结尾的文件

cpio [选项] > 文件名或设备名:打包
cpio [选项] < 文件名或设备名:解压

常用选项:

  • -o:将文件打包到指定包
  • -i:解包
    • cpio -idv < find.cpio
    • cat find.cpio | cpio -idv
  • -t:查看包文件
  • -v:详细过程
  • -d:解包生成目录,因为包中有多级目录,解压是不加-d,无法自动创建,就会报错
  • -c:一种较新的存储方式

将etc目录备份,使用find命令注意路径问题,不然解压时会出问题

[root@centos7 etc]# find |cpio -ov > /app/etc.cpio
./dconf/db/ibus.d
......
./dconf/db/ibus.d/00-upstream-settings

[root@centos7 etc]# find /etc/ |cpio -ov > /app/etc.cpio
/etc/ksmtuned.conf.orig
......
/etc/fprintd.conf.orig

练习

  1. 查找/var目录下属主为root,且属组为mail的所有文件

    [root@centos7 etc]# find /var/ -user "root" -a -group "mail"
    
  2. 查找/var目录下不属于root、lp、gdm的所有文件

    [root@centos7 etc]# find /var -not \( -user "root" -o -user "lp" -o -user "gdm" \)
    
  3. 查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

    find /var -mtime -7 -not \( -user root -o -user postfix \)
    
  4. 查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

    [root@centos7 ~]# find / \( -nouser -o -nogroup \) -atime -7
    
  5. 查找/etc目录下大于1M且类型为普通文件的所有文件

    [root@centos7 ~]# find /etc/ -size +1M -type f
    
  6. 查找/etc目录下所有用户都没有写权限的文件

    find /etc/ -not -perm /222
    
  7. 查找/etc目录下至少有一类用户没有执行权限的文件

    [root@centos6 app]# find /etc/ -not -perm -111
    
  8. 查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

    [root@centos6 app]# find /etc/init.d/ -perm -113
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容