1、文件查找工具locate,find

1.1  locate

  • locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db
  • 索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库
  • 索引构建过程需要遍历整个根文件系统,很消耗资源 locate和updatedb命令来自于mlocate包

  工作特点

  1. 查找速度快
  2. 模糊查找
  3. 非实时查找
  4. 搜索的是文件的全路径,不仅仅是文件名
  5. 可能只搜索用户具备读取和执行权限的目录
格式

locate [OPTION]... [PATTERN]...

常用选项

-i    不区分大小写的搜索
-n N 只列举前N个匹配的项目
-r 使用基本正则表达式

  范例

搜索名称或路径中包含“conf”的文件

locate conf

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

locate -r '\.conf$'

更新数据

新建的文件,数据库没做更新,该文件查找不到

更新数据库后查找

1.2 find

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

  工作特点:

  1. 查找速度略慢
  2. 精确查找
  3. 实时查找
  4. 查找条件丰富
  5. 可能只搜索用户具备读取和执行权限的目录

  格式

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

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

1.2.1指定搜索目录层级

-maxdepth   level   最大搜索目录深度,指定目录下的文件为第1级

-mindepth   level    最小搜索目录深度

1.2.2对每个目录先处理目录内的文件,在处理目录本身

  -depth

[root@centos7~]$find /data/test/        #默认优先处理目录本身
/data/test/
/data/test/1.txt
/data/test/2.txt
/data/test/3.txt
/data/test/4.txt
/data/test/5.txt
/data/test/6.txt
/data/test/7.txt
[root@centos7~]$find /data/test/ -depth #加-deth,优先处理目录内的文件
/data/test/1.txt
/data/test/2.txt
/data/test/3.txt
/data/test/4.txt
/data/test/5.txt
/data/test/6.txt
/data/test/7.txt
/data/test/

1.2.3根据文件名和inode查找

-name  "文件名称"      #支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
-iname  "文件名称" #不区分字母大小写
-inum n         #按inode号查找
-samefile name      #相同inode号的文件
-links n         #链接数为n的文件
-regex “PATTERN” #以PATTERN匹配整个文件路径,而非文件名称

范例

[root@centos7~]$find /etc -name passwd
/etc/passwd
/etc/pam.d/passwd

1.2.4根据属主、属组查找

-user USERNAME       #查找属主为指定用户(UID)的文件
-group GRPNAME    #查找属组为指定组(GID)的文件

-uid UserID      #查找属主为指定的UID号的文件
-gid GroupID      #查找属组为指定的GID号的文件

-nouser          #查找没有属主的文件
-nogroup         #查找没有属组的文件

1.2.5根据文件类型查找

-type TYPE

TYPE可以是以下形式:

f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件

1.2.6空文件或目录

-empty

[root@centos7~]$find /etc  -type d -empty
/etc/pki/ca-trust/source/anchors
/etc/pki/ca-trust/source/blacklist
/etc/pki/tls/private
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
/etc/pki/CA/private
/etc/pki/rsyslog [root@centos7~]$tree /etc/pki/rsyslog
/etc/pki/rsyslog 0 directories, 0 files
[root@centos7~]$ls /etc/pki/rsyslog

1.2.7组合条件

与:-a ,默认多个条件是与关系
或:-o
非:-not ! 德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B) !A -a !B = !(A -o B)
!A -o !B = !(A -a B)

1.2.8排除目录

#查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件
find /etc -path '/etc/security' -a -prune -o -name "*.conf"

#查找/etc/下,除/etc/security和/etc/systemd,/etc/dbus-1三个目录的所有.conf后缀的文件
find /etc \( -path "/etc/security" -o -path "/etc/systemd" -o -path "/etc/dbus1" \) -a -prune -o -name "*.conf"

#排除/proc和/sys目录
find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -type f -a -mmin -1

1.2.9根据文件大小来查找

-size [+|-]#UNIT   #常用单位:k, M, G,c(byte),注意大小写敏感
#UNIT:         #表示(#-1, #],如:6k 表示(5k,6k]
-#UNIT         #表示[0,#-1],如:-6k 表示[0,5k]
+#UNIT         #表示(#,∞),如:+6k 表示(6k,∞)

1.2.10根据时间戳

#以“天”为单位
-atime [+|-]#

# #表示[#,#+1)
+# #表示[#+1,∞]
-# #表示[0,#)

-mtime
-ctime

#以“分钟”为单位
-amin
-mmin
-cmin

1.2.11根据权限查找

-perm [/|-]MODE

MODE   #精确权限匹配
/MODE   #任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从CentOS 7开始淘汰
-MODE   #每一类对象都必须同时拥有指定权限,与关系
0 表示不关注

1.2.13处理动作

-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会
交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身

范例

#备份配置文件,添加.orig这个扩展名
find -name ".conf" -exec cp {} {}.orig \;

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

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

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

1.3 参数替换xargs

由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数
据,并且以空格符或回车符将 stdin 的数据分隔成为参数
另外,许多命令不能接受过多参数,命令执行可能会失败,xargs 可以解决
注意:文件名或者是其他意义的名词内含有空格符的情况
find 经常和 xargs 命令进行组合,形式如下: find | xargs COMMAND #显示10个数字
[root@centos7 ~]#seq 10 | xargs
1 2 3 4 5 6 7 8 9 10
#删除当前目录下的大量文件
ls | xargs rm
#
find -name "*.sh" | xargs ls -Sl

[root@centos7 data]#echo {1..10} |xargs
1 2 3 4 5 6 7 8 9 10
[root@centos8 data]#echo {1..10} |xargs -n1
1
2
3
4
5
6
7
8
9
10
[root@centos7 data]#echo {1..10} |xargs -n2
1 2
3 4
5 6
7 8
9 10

#批量创建和删除用户
echo user{1..10} |xargs -n1 useradd
echo user{1..100} | xargs -n1 userdel -r

#这个命令是错误的
find /sbin/ -perm /700 | ls -l      

#查找有特殊权限的文件,并排序
find /bin/ -perm /7000 | xargs ls -Sl  

#此命令和上面有何区别?
find /bin/ -perm -7000 | xargs ls -Sl  

#以字符nul分隔
find -type f -name "*.txt” -print0 | xargs -0 rm

#并发执行多个进程
seq 100 |xargs -i -P10 wget -P /data   http://10.0.0.8/{}.html

2压缩和解压缩

2.1.1 gzip和gunzip

来自于 gzip 包
对应的文件是 .gz 后缀 格式: gzip [OPTION]... FILE ... 常用选项:
-k keep, 保留原文件,CentOS 8 新特性
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,保留原文件不改变
-# 指定压缩比,#取值为1-9,值越大压缩比越大

2.1.2 bzip2和bunzip2

来自于 bzip2 包
对应的文件是 .bz2 后缀 格式: bzip2 [OPTION]... FILE ... 常用选项 -k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-# 1-9, 压缩比,默认为9

2.1.3 xz和unxz

来自于 xz 包
对应的文件是 .xz 后缀
格式 xz [OPTION]... FILE ... 常用选项
-k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-# 压缩比,取值1-9,默认为6

2.1.4 zip和unzip

zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息,一般建议使用 tar 代替

分别来自于 zip 和 unzip 包
对应的文件是 .zip 后缀

#打包并压缩
zip  -r /backup/sysconfig.zip /etc/sysconfig/
#不包括目录本身,只打包目录内的文件和子目录
cd /etc/sysconfig; zip -r /root/sysconfig.zip *
#默认解压缩至当前目录
unzip /backup/sysconfig.zip  
#解压缩至指定目录,如果指定目录不存在,会在其父目录(必须事先存在)下自动生成
unzip /backup/sysconfig.zip  -d /tmp/config  
cat /var/log/messages | zip messages  -
#-p 表示管道
unzip -p message.zip   > message

3 tar

tar 即 Tape ARchive 磁带归档,可以对目录和多个文件打包一个文件,并且可以压缩,保留文件属性不丢失,
常用于备份功能,推荐使用对应的文件是 .tar 后缀

格式

tar [OPTION] ... [FILE]...

 1 -A或--catenate 新增文件到已存在的备份文件。
2 -b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
3 -B或--read-full-records 读取数据时重设区块大小。
4 -c或--create 建立新的备份文件。
5 -C<目的目录>或--directory=<目的目录> 切换到指定的目录。
6 -d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
7 -f<备份文件>或--file=<备份文件> 指定备份文件。
8 -F<Script文件>或--info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
9 -g或--listed-incremental 处理GNU格式的大量备份。
10 -G或--incremental 处理旧的GNU格式的大量备份。
11 -h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
12 -i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
13 -k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
14 -K<文件>或--starting-file=<文件> 从指定的文件开始还原。
15 -l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相
16 同,否则不予复制。
17 -L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
18 -m或--modification-time 还原文件时,不变更文件的更改时间。
19 -M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
20 -N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
21 -o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
22 -O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
23 -p或--same-permissions 用原来的文件权限还原文件。
24 -P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
25 -r或--append 新增文件到已存在的备份文件的结尾部分。
26 -R或--block-number 列出每个信息在备份文件中的区块编号。
27 -s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
28 -S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
29 -t或--list 列出备份文件的内容。
30 -T<范本文件>或--files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或
31 建立符合设置条件的文件。
32 -u或--update 仅置换较备份文件内的文件更新的文件。
33 -U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
34 -v或--verbose 显示指令执行过程。
35 -V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
36 -w或--interactive 遭遇问题时先询问用户。
37 -W或--verify 写入备份文件后,确认文件正确无误。
38 -x或--extract或--get 从备份文件中还原文件。
39 -X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除
40 符合设置条件的文件。
41 -z或--gzip或--ungzip 通过gzip指令处理备份文件。
42 -Z或--compress或--uncompress 通过compress指令处理备份文件。
43 -<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
44 --after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
45 --atime-preserve 不变更文件的存取时间。
46 --backup=<备份方式>或--backup 移除文件前先进行备份。
47 --checkpoint 读取备份文件时列出目录名称。
48 --concatenate 此参数的效果和指定"-A"参数相同。
49 --confirmation 此参数的效果和指定"-w"参数相同。
50 --delete 从备份文件中删除指定的文件。
51 --exclude=<范本样式> 排除符合范本样式的文件。
52 --group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
53 --help 在线帮助。
54 --ignore-failed-read 忽略数据读取错误,不中断程序的执行。
55 --new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
56 --newer-mtime 只保存更改过的文件。
57 --no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
58 --null 从null设备读取文件名称。
59 --numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
60 --owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
61 --posix 将数据写入备份文件时使用POSIX格式。
62 --preserve 此参数的效果和指定"-ps"参数相同。
63 --preserve-order 此参数的效果和指定"-A"参数相同。
64 --preserve-permissions 此参数的效果和指定"-p"参数相同。
65 --record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
66 --recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
67 --remove-files 文件加入备份文件后,就将其删除。
68 --rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
69 --same-owner 尝试以相同的文件拥有者还原文件。
70 --suffix=<备份字尾字符串> 移除文件前先行备份。
71 --totals 备份文件建立后,列出文件大小。
72 --use-compress-program=<执行指令> 通过指定的指令处理备份文件。
73 --version 显示版本信息。
74 --volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

选项

(1) 创建归档,保留权限

tar -cpvf /PATH/FILE.tar FILE...

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

tar -rf /PATH/FILE.tar FILE...

(3) 查看归档文件中的文件列表

tar -t -f /PATH/FILE.tar

(4) 展开归档

tar xf /PATH/FILE.tar
tar xf /PATH/FILE.tar -C /PATH/

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

-z 相当于gzip压缩工具
-j 相当于bzip2压缩工具
-J 相当于xz压缩工具
[root@centos8-liyj ~]#tar -Jcpf /backup/etcback-`date +%m-%d-%H`.tar.xz /etc/
tar: Removing leading `/' from member names [root@centos8-liyj ~]#ls /backup/
etcback-04-28-10.tar.xz etcback-22-04-28-10.tar.xz
[root@centos8-liyj ~]#

Linux-文件查找-打包压缩-tar的更多相关文章

  1. linux - 文件查找及压缩

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

  2. Linux 文件的打包压缩

    压缩和解压 压缩:为了节约磁盘空间. gzip --- .gz bzip2 --- .bz2 xz --- .xz compress --- .z 压缩比例:xz > bzip2 > gz ...

  3. 07.进程管理+作业控制+文件查找与压缩+文件压缩与打包+tar打包解包+NFS

    进程管理 程序放在磁盘上叫文件,把它复制到内存,并在cpu运行,就叫进程, 进程多少也反映当前运行程序的多少 进程在系统中会为每个进程生成一个进程号,在所有的进程中有一个特殊进程即init进程, 它是 ...

  4. linux基础—课堂随笔04_文件查找和压缩

    文件查找和压缩 文件查找 1.locate   这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进 ...

  5. Linux文件查找.md

    Linux 文件查找 在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 w ...

  6. linux下面的打包压缩命令

    tar命令 tar [-cxtzjvfpPN] 文件与目录 ....linux下面压缩之前要把一堆文件打个包再压缩,即使只有一个文件也需要打个包.例子:tar czvf 1.tar.gz hello. ...

  7. Linux文件查找命令find用法整理(locate/find)

    Linux文件查找查找主要包括:locate和find 1.locate 用法简单,根据数据库查找,非实时,用法: locate FILENAME 手动更新数据库(时间可能较长) updatedb 2 ...

  8. linux文件查找find命令

    linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find  [option ...

  9. linux 文件查找,which,whereis,locate,find

    linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...

随机推荐

  1. mybatis学习一:基于xml与注解配置入门实例与问题

    注:本case参考自:http://www.cnblogs.com/ysocean/p/7277545.html 一:Mybatis的介绍: MyBatis 本是apache的一个开源项目iBatis ...

  2. Spring由哪些模块组成?

    以下是Spring 框架的基本模块: Core module Bean module Context module Expression Language module JDBC module ORM ...

  3. 什么是sql注入?如何有效防止sql注入?

    一.什么是sql注入 利用程序员的代码bug,将输入的参数绕过校验并在系统中当做代码运行,从而攻击系统. 二.如何避免sql注入 1.对sql语句进行预编译 PreparedStatement类可以对 ...

  4. 为什么要用 Dubbo?

    随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越 复杂,诞生了面向服务的架构体系(SOA), 也因此衍生出了一系列相应的技术,如对服务提供.服务调用.连接处理.通信 协议.序列化 ...

  5. 如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

    用Spring的 SessionFactory 调用 LocalSessionFactory.集成过程分三步: 配置the Hibernate SessionFactory. 继承HibernateD ...

  6. docker打包镜像,测试部署

    docker基本入门以后,(docker基本入门https://www.cnblogs.com/yangyangming/p/11470926.html)可以试试打包docker镜像与dockerfi ...

  7. memcached 如何处理容错的?

    不处理! 在 memcached 节点失效的情况下,集群没有必要做任何容错处理.如 果发生了节点失效,应对的措施完全取决于用户.节点失效时,下面列出几种方 案供您选择: 忽略它! 在失效节点被恢复或替 ...

  8. 学习heartbeat-04 原理及部署

    1. Heartbeat介绍 1.1 Heartbeat作用 通过它可以将资源(IP及程序服务等资源)从一台故障计算机快速转移到另一台运转正常的机器继续提供服务,在实际生产应用场景中,heartbea ...

  9. 记一次 Nuxt 3 在 Windows 下的打包问题

    0. 背景 之前用 Nuxt 3 写了公司的官网,包括了样式.字体图标.图片.视频等,其中样式和字体图标放在了 assets/styles 和 assets/fonts 目录下,而图片和视频则放在了 ...

  10. 巧用CSS3:target 伪类制作Dropdown下拉菜单(无JS)

    原文链接:http://devework.com/css3-target-dropdown.html :target 是CSS3 中新增的一个伪类,用以匹配当前页面的URI中某个标志符的目标元素(比如 ...