1、使用 locate 命令
  需要安装:yum install mlocate -y
  创建或更新 slocate/locate 命令所必需的数据库文件:updatedb
  作用:搜索不经常改变的文件如配置文件等,否则需要搜索前更新数据库
  文件查找:非实时查找(数据库查找),查询系统上预建的文件索引数据库
    /var/lib/mlocate/mlocate.db
  依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
  索引构建过程需要遍历整个根文件系统,极消耗资源

  工作特点:
    查找速度快
    模糊查找
    非实时查找
    搜索的是文件的全路径,不仅仅是文件名
    可能只搜索用户具备读取和执行权限的目录

locate 语法:
locate keyword
  -i 不区分大小写的搜索
  -n N 只列举前 N 个匹配项目
  -r 使用正则表达式
# 例:
[root@centos7 ~]#yum install mlocate -y
[root@centos7 ~]#ll bin/hello.sh
-rwxr-xr-x. root root 2月 : bin/hello.sh
[root@centos7 ~]#locate hello.sh
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
[root@centos7 ~]#updatedb # 更新数据库
[root@centos7 ~]#locate hello.sh
/root/bin/hello.sh
# 例:
# 搜索名称或路径中带有 "conf" 的文件
locate conf # 使用 Regex 来搜索以 ".conf" 结尾的文件
locate -r '\.conf$'

2、 使用 find 命令(功能强大)
  实时查找工具,通过遍历指定路径完成文件查找
  工作特点:
    查找速度慢
    精确查找
    实时查找
    可能只搜索用户具备读取和执行权限的目录(搜索考虑权限问题)

find 语法:
find [OPTION]… [查找路径] [查找条件] [处理动作]
  查找路径:指定具体目标路径;默认为当前目录
  
  查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件。
    指搜索层级:
      -maxdepth level 最大搜索目录深度,指定目录为第一级
      -mindepth level 最小搜索目录深度

  处理动作:对符合的文件做操作,默认输出至屏幕
    -print:默认的处理动作,显示至屏幕
    -ls:类似于对查找到的文件执行 "ls -l" 命令
    -delete:删除查找到的文件
    -fls file:查找到的所有文件的长格式信息保存至指定文件中
    -ok COMMAND {} \;对查找到的每个文件执行由 COMMAND 指定的命令。对于每个文件执行命令之前,都会交互式要求用户确认。
    -exec COMMAND {} \; 对查找到的每个文件执行由 COMMAND 指定的命令。
      {}:用于引用查找到的文件名称自身
      find 传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令。

  1> 根据文件名和 inode 查找:

-name "文件名称":支持使用 glob
  *,?,[ ],[^]
-iname "文件名称":不区分字母大小写
-inum n:按 inode 号查找
-samefile name:相同 inode 号的文件
-links n:链接数为 n 的文件
-regex "PATTERN":以 PATTERN 匹配整个文件路径字符串,而不仅仅是文件名称。

  2> 根据属组、属主查找:

-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME:查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的 UID 号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件

  3> 根据文件类型查找:

-type TYPE:
  f:普通文件
  d:目录文件
  l:符号链接文件
  s:套接字文件
  b:块设备文件
  c:字符设备文件
  p:管道文件
空文件或目录
-empty
# 例:
# find /etc/ -name passwd # 查找/etc/目录下名为 passwd 的文件
/etc/passwd
/etc/pam.d/passwd

# find /etc/ -maxdepth -name passwd # maxdepth 指定最大深度,mindepth 相反指定最小深度
/etc/passwd

# find /data/ -name f1 # 搜索/data 目录下文件名为 f1 的文件,也可以使用 "*f1" 指包含 f1 的文件名(通配符)

# find /home -user yang # 查找属主为 yang 的文件

# find /home -nouser -o -nogroup # -o 或者 # 找出/tmp 目录下,属主不是 root,且文件名不以 f 开头的文件:
find /tmp \( ! -user root -a ! -name 'f*' \) -ls
find /tmp ! \( -user root -o -name 'f*' \) -ls
# 排除目录示例:
# 查找/etc/下,除/etc/sane.d 目录的其他所有.conf 后缀的文件
# find /etc -path '/etc/asne.d' -a -prune -o -name "*.conf" # -path '/etc/asne.d' -a -prune 如果是这个目录剪切掉

# 查找/etc/下,除/etc/sane.d 和/etc/fonts 两个目录的所有.conf 后缀的文件
# find /etc \( -path '/etc/sand.d' -o -path '/etc/fonts' \) -prune -o -name "*.conf" # \( -path "/etc/sane.d" -o -path "/etc/fonts" \) # 过滤多个目录 # 查找/data/目录下 的空文件夹
# find /data -type d -empty
# find /home -type d -maxdepth
# find /data/ -empty -type f -ls # 查找目录下空文件,-ls 列出长属性

  4> 组合条件、德摩根定律

组合条件:
  与:-a
  或:-o
  非:not,!
德摩根定律:
(非 A)或(非 B)= 非(A 且 B)
(非 A)且(非 B)= 非(A 或 B)
# 例:
!A -a !B = !(A -o B) !A -o !B = !(A -a B)
# find /data/ ! \( -empty -o -type f \) # 查找/data目录下不是空文件

  5>根据文件大小来查找:

-size [+|-]#UNIT     # 按单位搜索,搜索出来的并不是精确的
  常用单位:k,M,G,c(byte)
  #UNIT: (#-,#]
    如:6k 表示(5k,6k]
  -UNIT: [,#-]
    如:-6k 表示[,5k]
  +UNIT: (#,)
    如:+6k 表示(6k,)

  6> 根据时间戳查找:

以 "天" 为单位:
-atime [+|-]#
  -#:[0,#) #:[#,#+) +#:[#+,]-mtime -ctime
以 "分钟" 为单位:
-amin -mmin -cmin

  7> 根据权限查找:

-prem [/|-]MODE
  MODE:精确权限匹配
    # find -prem 会匹配权限模式恰好是 的文件
  /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从 centos7 开始淘汰
    # find /data/ -perm / -ls # 三者之间是或的关系
  -MODE:每一类对象都必须同时拥有指定权限,与关系
  /和-的时候, 表示不检查 表示检查(二进制);-是交集,/是并集
  只要当每个人有写权限时,find -perm + 就会匹配
  只有当每个人都有写权限时,find -perm - 才会匹配
  只有当其他人(other)有写权限时,find -prem - 才会匹配

  8> 参数替换:xargs

由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了 xargs 命令
xargs 用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为 arguments
注意:文件名或者是其他意义的名词内含有空格符的情况
有些命令不能接受过多参数,命令执行可能会失败,xargs 可以解决 # 例:
echo f{1..100000} | xargs -n1 touch # -n 表示一次传一个参
# find示例:
# 备份配置文件,添加.orig 这个扩展名
# find -name "*.conf" -exec cp {} {}.orig \;

# 提示删除存在时间超过 天以上的 joe 的临时文件
# find /tmp -ctime + -user joe -ok rm {} \;

# 在主目录中寻找可被其它用户写入的文件
# find ~ -perm - -exec chmod o-w {} \;

# 查找/data 下的权限为 ,后缀为 sh 的普通文件,增加执行权限
# find /data -type f -perm -name "*.sh” -exec chmod 755 {} \;

# 查看/home 的目录
# find /home -type d -ls

3、压缩和解压缩

  1> compress [-dcv] [file…](.Z)    # 老旧
  新系统默认不安装,若要学习,需要安装包:yum install ncompress -y
    -d:解压缩,相当于 uncompress
    -c:结果输出至标准输出(屏幕),不删除原文件,后可重定向至文件
    -v:显示详情
    uncompress 解压缩
    zcat file.Z >file    # zcat 也是解压缩 file.Z 压缩包输出信息至屏幕,后跟重定向至文件

示例:
[root@centos7 ~]#ls
file
[root@centos7 ~]#compress file # 默认删除原文件,compress -c file >file.Z 重定向可以保留原文件
[root@centos7 ~]#ls
file.Z
[root@centos7 ~]#compress -d file.Z
[root@centos7 ~]#ls
file

  2> gzip [OPTION]…FILE…(.gz)
    -d:解压缩,相当于 gunzip
    -c:将压缩或解压缩的结果输出至标准输出(屏幕)
    -#:1-9,指定压缩比,值越大压缩比越大
    zcat:不显示解压缩的前提下查看文本文件内容

示例:
gzip file # 压缩文件(大概为-6),-d 解压缩文件(默认删除原文件)
gzip -c file >file.gz # 使用-c 重定向标准输出至文件可保留原文件
gzip -c -d file.gz >file # 解压缩+重定向
zcat file.gz >file # 相当于解压缩重定向

  3> bzip2 [OPTION]…FILE…(.bz2)
    -k:keep,保留原文件
    -d:解压缩
    -#:1-9,压缩比,默认为 9
    bzcat:不显示解压缩的前提下查看文本文件内容

  4> xz [OPTION]…FILE…(.xz)
    -k:keep,保留原文件
    -d:解压缩
    -#:1-9,压缩比,默认为 6
    xzcat:不显示解压缩的前提下查看文本文件内容

4、zip/unzip 打包压缩

打包压缩
zip -r /testdir/sysconfig /etc/sysconfig/ # 压 缩 /etc/sysconfig/ 文件夹到/testdir/sysconfig 文件(-r 压缩目录,不跟-r 压缩文件)
解包解压缩
unzip sysconfig.zip
cat /var/log/messages | zip messages – # 把前面的标准输出传到后面
unzip -p message > message

5、 tar 打包工具
  tar(Tape Archive,磁盘归档的缩写)
  tar [OPTION]…

  1> 创建归档

tar -cpvf /PATH/TO/SOMEFILE.tar FILE…    # -c 创建打包文件 f 后跟文件名 p 保留属性 v 显示信息
du -sh 显示原有文件夹大小,ll -h 显示打包后文件大小,大小不变
tar -tvf -t 预览打包文件 -x 解压缩(tar -xvf data.tar -C /tmp/ -C 跟解压目录)

  2> 追加文件至归档:注:不支持对压缩文件追加

tar -r -f /PATH/TO/SOMEFILE.tar FILE…

  3> 查看归档文件中的文件列表

tar -t -f /PATH/TO/SOMEFILE.tar

  4> 展开归档

tar -x -f /PATH/TO/SOMEFILE.tar
tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/

  5> 结合压缩工具实现:归档并压缩

-j:bzip2,-z:gzip,-J:xz
-T 把那些文件打包了,-X 那些文件不打包
cat list.txt # 可以将打包的文件放在一个文件中
/etc/
/boot/
cat exlist.txt # 将排除的文件也放在一个文件中
/etc/shadow
/boot/symvers-3.10.-.el7.x86_64.gz
tar zcvf list.tar.gz -T list.txt -X exlist.txt # 过滤打包

分割大的 tar 文件为多份小文件
split -b size -d tar-file-name(文件名称) prefix-name(前缀)
split -b 10M -d list.tar.gz a.tar # -b 切割成 10M 一个文件,-d 指定后缀为数字
-rw-r--r--. root root 月 : a.tar00
-rw-r--r--. root root 月 : a.tar01
……
-rw-r--r--. root root 月 : a.tar09
合并:
cat a.tar0* >a.tar.gz # 查看重定向至文件

  6> cpio 工具
  功能:复制文件从或到归档
  cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,他可以解压以“.cpio”或者“.tar”结尾的文件

cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项:
-o 将文件拷贝打包成文件或着将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称
-d 解包生成目录,在 cpio 还原时,自动的建立目录
-c 一种较新的存储方式
# 示例:
# 将 etc 目录备份:
# find ./etc -print | cpio -ov > etc.cpio # 内容预览:
# cpio -tv < etc.cpio # 解包文件:
# cpio -idv < etc.cpio

linux 文件的查找和压缩的更多相关文章

  1. linux文件名称查找which,whereis,locate

    1. 文件名称查找 使用find查询时.因为磁盘查询.所以速度较慢. 所以linux下查询更常使用which, whereis, locate来查询,因为是利用数据库查询.所以速度非常快. 2. wh ...

  2. Linux文件的查找

    一直以来,总是记不住文件的查找命令,今天记在博客里,希望可以记得更牢! 1.脚本文件名的查询 which命令(寻找执行文件) #which ifconfig 2.文件名的查找 whereis 命令 # ...

  3. linux文件的查找和检索

    1)按文件属性查找 1)文件名: find  +  查找的目录  +   -name  +  "文件名" 文件名中可以使用通配符:*号表示多个,?号表示一个 2)文件大小: fin ...

  4. Linux文件的打包与压缩

    打包命令: tar tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询罗! [root@www ~]# tar [-j|-z] [cv] [-f 创建的档名 ...

  5. Linux 文件,目录,压缩,解压缩操作

    2018/11/20 1.find -name 'pom.xml' | xargs perl -pi -e  's|oldString|newString|g' (批量替换) ( 命令行中使用Perl ...

  6. Linux文件的查找之find命令处理动作

    查找到文件之后的处理动作 例如:找出来系统中比较大超过10G的并且存放时间超过一年的log文件并删除 find / -name ".log" -size +10G -mtime + ...

  7. linux - 文件查找及压缩

    文件查找: 1.  which    查找可以执行文件,只搜索$PATH里的目录 $ which ls /bin/ls which只搜索$PATH里的目录,如果搜索当前目录的文件是没有任何结果的 $ ...

  8. linux中文件或者文件夹的基本操作(复制,移动,删除,查找,压缩)

    linux 文件(文件夹)的创建,复制,移动,重命名,删除基本命令 复制文件或整个目录 cp 源文件名 目标文件夹/[目标文件名]cp -rv 源文件夹 目标文件夹/[目标文件夹名] --r 递归目录 ...

  9. Linux中文件查找,压缩和打包指令

    1.文件的查找和搜索 可执行文件的搜索:which .whereis locate搜索文件 find搜索文件       1.1可执行文件的搜索       在Linux系统中,有成百上千个指令,不同 ...

随机推荐

  1. 2020 python web开发就业要求锦集

    郑州 Python程序员 河南三融云合信息技术有限公司 6-8k·12薪 7个工作日内反馈 郑州 1个月前 本科及以上2年以上语言不限年龄不限 微信扫码分享 收藏 Python程序员 河南三融云合信息 ...

  2. OSPF与ACL的综合应用

    在企业中OSPF和ACL应用特别广泛,本实验介绍OSPF和ACL具体配置过程 实验拓扑: 实验要求: 1.企业内网运行OSPF路由协议,区域规划如图所示:2.财务和研发所在的区域不受其他区域链路不稳定 ...

  3. 听说用 Lombok 可以早点下班?

    听说隔壁用 Lombok 的六点就下班了,我也想六点下班! 好的,那么这篇文章就介绍下什么是 Lombok,Lombok 做了什么以及 Lombok 是怎么做的? 在介绍之前,先通过是否使用 Lomb ...

  4. 图片OCR(Optical Character Recognition)

    目录 Photo OCR问题描述 滑动窗口(Sliding Windows) 获得大量数据和人工数据(Getting Logs of Data and Artificial Data) 瓶颈分析:需要 ...

  5. 模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo...

    近日,TensorFlow模型优化工具包又添一员大将,训练后的半精度浮点量化(float16 quantization)工具. 有了它,就能在几乎不损失模型精度的情况下,将模型压缩至一半大小,还能改善 ...

  6. 8 个出没在 Linux 终端的诡异家伙

    这篇文章,我们一起来到 Linux 的诡异的一面-- 你知道吗?在我们日常使用的 Unix(和 Linux )及其各种各样的分支系统中,存在着一些诡异的命令或进程,它们让人毛骨悚然,有些确实是有害,但 ...

  7. coding++ :JS-判断当前是否是IE浏览器,并返回时IE几?

    IEVersion(); function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var is ...

  8. 基于OAuth2.0的token无感知刷新

    目前手头的vue项目关于权限一块有一个需求,其实架构师很早就要求我做了,但是由于这个紧急程度不是很高,最近临近项目上线,我才想起,于是赶紧补上这个功能.这个项目是基于OAuth2.0认证,需要在每个请 ...

  9. 为什么条件变量需要传入mutex?

    条件变量一般而言,会有一个布尔表达式作为唤醒的条件.调用wait的线程需要读取这个布尔表达式内数据, 同样,调用signal的线程需要修改这个布尔表达式的数据,让表达式为真.故而这两个线程必然访问至少 ...

  10. MyBatis(四):SqlSession及其工厂类的作用域和生命周期

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可 https://space.bilibili.com/95256449?spm_id_from=333.788 ...