1.文件查找

在文件系统上查找符合条件的文件:locate, find

非实时查找(数据库查找)locate

实时查找:find

 


2.locate

1)功能特点

查询系统上预建的文件索引数据库

/var/lib/mlocate/mlocate.db

依赖于事先构建的索引

  索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)

索引构建过程需要遍历整个根文件系统,极消耗资源

工作特点:

  查找速度快

  模糊查找

  非实时查找

  搜索的是文件的全路径,不仅仅是文件名

  可能只搜索用户具备读取和执行权限的目录

2)功能命令

locate KEYWORD

例如:locate conf  搜索名称或路径中带有“conf”的文件

 

有用的选项

  -i 不区分大小写的搜索

  -n N 只列举前N个匹配项目

  -r 支持正则

locate  -r‘\.conf$’

   使用Regex来搜索以“.conf”结尾的文件

locate命令是非实时的,如果新添加一个文件,马上使用locate是无法查找出来的,需要使用updatedb 命令更新locate数据库/var/lib/mlocate/mlocate.db,然后就能查找出来了。

 


3.find

1)功能特点

实时查找工具,通过遍历指定路径完成文件查找

 工作特点:

 查找速度略慢

 精确查找

 实时查找

 可能只搜索用户具备读取和执行权限的目录

 

2)语法

     find [OPTION]... [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录

查找条件:指定的查找标准,可以文件名、大小、类型、

权限等标准进行;默认为找出指定路径下的所有文件

处理动作:对符合条件的文件做操作,默认输出至屏幕

 

3)查找条件

指搜索层级:

  -maxdepth level  最大搜索深度

  -minxdepth level  最小搜索深度

根据文件名和inode查找:

  -name 基于名称的精确查找

  -iname 基于名称忽略大小写的精确查找查找

  -inum 基于inode查找

  -samefile 基于相同inode号的查找(查找硬链接)

  -links n 硬链接为n的文件  

  -regex 支持正则 默认为(emacs标准)

  -regextype egrep -regex 支持egrep同标准的正则

根据属主、属组查找:

  -user 用户名  基于文件owner的查找

  -group 组名  基于文件group的查找

  -uid userid   基于文件uid的查找

  -gid groupid  基于文件gid的查找

  -nouser  查找没有owner的文件

  -nogroup 查找没有group的文件

根据文件类型查找:

  -type 基于文件类型的查找

    f: 普通文件

    d: 目录文件

    l: 符号链接文件

    s:套接字文件

    b: 块设备文件

    c: 字符设备文件

    p: 管道文件

组合条件:

与:-a

或:-o

非:-not, !

德·摩根定律:

( A) ( B) = (A B)

( A) ( B) = (A B)

4)示例

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

找出/tmp目录下,属主不是root,且文件名不以f开头的文件

find /tmp \( -not -user root -a -not -name 'f*' \) -ls

find /tmp -not\( -user root -o -name 'f*' \) -ls

排除目录

示例:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件

  find /etc -path '/etc/sane.d' -a -prune -o -name "*.conf"

  find /etc \( -path '/etc/sane.d' -o -path'/etc/fonts' \) -a -prune -o -name "*.conf"

 

5)根据文件大小来查找

  -size[+|-]#UNIT 根据文件大小来查找

    常用单位:k, M, Gcbyte

   #UNIT:(#-1,#]

如:6k 表示(5k,6k]

   -#UNIT[0,#-1]

如:-6k 表示[0,5k]

   +#UNIT(#,)

如:+6k 表示(6k,)

 

6)根据时间戳查找

以“天”为单位;

 -atime[+|-]#,

    #: [#,#+1)

    +#: [#+1,]

    -#: [0,#)

 -mtime

 -ctime

以“分钟”为单位:

 -amin

 -mmin

 -cmin

 

7)根据权限查找

-perm

  mode 精确权限匹配

  +mode[/mode]  任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,(+ centos7开始淘汰,centos7中只能用/mode

  -mode  每一类对象都必须同时拥有指定权限,与关系0表示不关注

 

例如:权限模式恰好是755的文件,find -perm 755才会匹配

只要当任意人有写权限时,find -perm +222就会匹配

只有当每个人都有写权限时,find -perm -222才会匹配

只有当其它人(other)有写权限时,find -perm -002才会匹配

(注意:如果某位数字为2,并不是说那个位只能有写权限,也可以是有读写权限的,也可以是读写执行权限都有的,总之就是必须包含写权限。)

 

8)处理动作

-print 处理默认的动作,显示至屏幕

文件查找和压缩——Linux基本命令(12)_第1张图片

   -delete 直接删除所查找到的文件,不询问。

   -ls 长列出所查找到的文件

wKiom1mMGSrjdJg_AAAxNmgyKO8552.png

   -fls file 将查找到的文件长列出导入到指定文件。

      > file 

wKiom1mMGSvwrd-pAAA5TXhpfb0062.png

   -ok command {} \; 对查找到的文件当做下一命令的参数去执行(交互式要求用户确认)

   -exec command {} \; 对查找到的文件当做下一命令的参数去执行(非交互式)

{}: 用于引用查找到的文件名称自身

 

9)参数替换 xargs

由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs命令。有些命令不能接受过多参数,命令执行可能会失败,xargs也可以解决。

findxargs格式:find | xargs COMMAND

 

例如:find cr*.sh 可以找出cr开头.sh结尾的文件,但是要是想要长列出是不能直接使用find cr*.sh |ls -l  这个命令的,因此要使用find cr*.sh |xargs ls -l  

文件查找和压缩——Linux基本命令(12)_第2张图片

10find示例

为了更好的理解和运用find功能,我们来举几个例子:

 

1.find -name “*.conf” -exec cp {} {}.orig \;

寻找当前目录下名字以.conf结尾的文件,复制到当前文件夹并将名字后面加上.orig

2.find /tmp -ctime +3 -user joe -ok rm {} \;

寻找/tmp文件夹下ctime为大于3天之前的且属主为joe的文件,将它们全部删除

3.find ~ -perm -002  -exec chmod o -w {} \;

寻找家目录下other拥有写权限的文件,将other减去写权限

4.find /data -type f -perm 644 -name “*.sh” -exec chmod 755 {} \;

寻找/data文件夹下文件类型为普通文件属主包括读写权限且属组和other都包括写权限的以.sh为结尾的文件,修改权限为755

5.find /home -type d -ls

寻找/home目录下文件类型为目录文件并列出

 


4.压缩解压缩及归档工具

1compress (后缀名.Z

      -d 解压缩,相当于uncompress ,相当于zcat X.Z > X

     -c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

      (使用-c配合重定向可以实现不删除原文件的情况下实现压缩并可以自由命名)

wKiom1mMGSvziXu4AAAVQS-6nZw552.png

     -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

     -v 显示详细过程。

 

2gzip (后缀名.gz

      -d 解压缩,相当于gunzip,相当于zcat X.gz > X

     -c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

     -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

     -v 显示详细过程。

     -# 数字越大,压缩比越高,速度越慢,文件越小。

         -1 等于 --fast

         -23456(默认)78

         -9 等于 --best

 

3bzip2(后缀名.bz2

      -d 解压缩,相当于bunzip,相当于bzcat X.bz2 > X

     -k 保留原文件

     -c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

     -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

     -v 显示详细过程。

     -# 数字越大,压缩比越高,速度越慢,文件越小。

         -1 等于 --fast

         -2345678

         -9等于 --best (默认)

 

4xz(后缀名.xz

      -d 解压缩,相当于unxz,相当于xzcat X.xz > X

     -k 保留原文件

     -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

     -v 显示详细过程。

     -# 数字越大,压缩比越高,速度越慢,文件越小。

         -0 等于 --fast

         -1 -23456(默认)78

         -9 等于 --best

 

5zip(后缀名.zip

zip可以单独压缩也可以实现打包压缩(使用zip不需要手动添加后缀名)

zip -r 要压缩的文件     单独压缩

文件查找和压缩——Linux基本命令(12)_第3张图片

zip -r 新文件路径或名字 原文件路径   打包压缩

文件查找和压缩——Linux基本命令(12)_第4张图片


unzip 解压缩

 寻找的文件|zip 将生成的文件名 -”可以将管道前的输出结果转为文件并压缩。

通过此方式压缩的文件只能使用“unzip -p 压缩包 > 新文件 ”来解压缩

wKioL1mMGS3jyh6ZAABwvHeKSkg825.png

wKiom1mMGS6gDFkbAABWp077ti0193.png

  unzip -p 预览解压缩后的内容到屏幕,可以配置重定向将结果保存到指定文件,权限会发生变化。

 

6tar(打包)

tar不是用来压缩的,是用来打包的。(就是归档)

  -cf 创建包名字  原文件(可以指定多个)

  -tf 包名字   显示包中的文件名

     -tvf  详细显示包中的文件名

  -rf 包名字 新文件名(可以指定多个)

  --delete-f 包名字   被删除的文件名(可以指定多个)

  -xf 包名字   解出所有的文件到当前目录

     -xf 包名字 文件名   解所指定的文件到当前目录

  -C 解包到指定目录

  -v 显示过程

  -Jcf 创建包的名字(.tar.xz) 原文件(可以指定多个)打包并用xz压缩

  -jcf 创建包的名字(.tar.bz2) 原文件(可以指定多个)打包并用bzip压缩

  -zcf 创建包的名字(.tar.gz) 原文件(可以指定多个)打包并用gzip压缩

  -T 指定个列表,包含需要被打包的文件,以换行符为间隔

  -X 指定个排除列表,以换行符为间隔

 

split -b Size -d tar -file -name prefix -name  tar包分隔为多个文件

cat 被分隔出的多个文件名 > 单个文件名  合并

 


5.cpio

cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。

cpio

  ls * |cpio -o > 文件名.cpio   打包。

  cpio -id < 文件名.cpio   解开被cpio打包的文件

  gzip文件名.cpio    生成文件名为文件名.cpio.gz

  /boot/initramfs-xxxx.img

    Centos6:cpio.gz 文件。zcat initramfs-xxxx.img |cpio -id

    Centos7:cpio 文件 cpio -id < initramfs-xxxx.img

  -tv < 文件名.cpio   预览cpio打包的文件。