Linux基础--linux文件搜索细讲 find文件搜索 xargs使用图解 grep使用图解 linux分卷压缩 split使用图解

find细讲

  • 格式: find [OPTION] … [查找路径] [查找条件] [处理动作]

  • 查找路径:可以指定具体的路径,默认是当前路径

  • 查找条件:用来指定文件查找的标准,可以是文件名、大小、权限、类型等等

  • 处理动作:对符合条件的文件进行的操作(复制、删除
    、打印等等),默认是直接输出到屏幕上

查找条件
按照名称来搜索
  • -name
    find -name a 完全匹配
    find -name "a*" 所有的以a开头的文件或者文件夹
    find -name "a?" 所有以a开头后面为一个字母的文件或者文件夹
    find -name "a[ab]" 以a开头后面是a或者b的文件或者文件夹
    

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • -iname 忽略大小写

    find -iname a
    

在这里插入图片描述

按照搜索层级
  • -maxdepth level 指定最大的搜索层数,指定的目录为第一层

    find -maxdepth 2 -name a
    

在这里插入图片描述

  • -mindepth level 指定最小的搜索层数

    find -mindepth 2 -name a
    

在这里插入图片描述

按照文件的类型来查找
  • -type type
    (1) f 文件
    (2)d 目录
    (3)l 链接
    在这里插入图片描述
    (4)s socket套接字
    在这里插入图片描述
    (5)b 块设备
    (6)c 字符设备文件
    (7)p 管道文件
find -type f -name a 搜索文件
find -type d -name a 搜索目录
find -type l -name a 搜索软链接

在这里插入图片描述

空文件和空目录
  • -empty

    find -empty
    find -empty -type d
    

在这里插入图片描述
在这里插入图片描述

根据属组,属主来搜索
  • -user username 查找属主是username的文件或者文件夹
    在这里插入图片描述

  • -group groupname 查找属组是groupname的文件或者文件夹

  • -uid uid 查找uid为uid的文件或者文件夹

  • -gid gid 查找gid为gid的文件或者文件夹
    在这里插入图片描述

  • -nouser 查找没有属主的文件或者文件夹
    在这里插入图片描述

  • -nogroup 查找没有属组的文件或者文件夹
    在这里插入图片描述

find -user jiangyi
chmod :xiaofeng jiangyi
chown :xiaofeng jiangy
find -group xiaofenf
find -group xiaofeng
find -uid 1000 
find -gid 1000 
find -gid 1001
find  -nouser
find -nogroup 
组合条件
  • 与 -a
  • 或 -o
  • 非 -not 也可以使用 !
  • 摩根定律
    • (非A)或(非B)=非(A且B)
    • (非A)且(非B)=非(A或B)
find -not -user wupeiqi -a -not -user xiaofeng -ls|wc -l
find -not \( -user wupeiqi -o -user xiaofeng \) -ls|wc -l

在这里插入图片描述

排除目录
  • -path
find /etc/ -path /etc/ssh -name *_config

在这里插入图片描述

文件大小来搜索
  • -size[+|-] unit 【unit:代指大小,单元;常用单位:k,M,G,c(byte)】

(1)#unit 【 (#-1,#] 不包括#-1,但是包括# 】
在这里插入图片描述
在这里插入图片描述

(2)-#unit 【 [0,#-1],从0到#-1 】
(3)+#unit 【 (#,∞) 不包括# 】

在这里插入图片描述

文件时间戳
  • 以“天"为单位

    (1)atime:[+|-] day

    • time 【直接写一个时间, [#,#+1)包括#,但不包括#+1】
    • -time 【[0,#)】
    • +time 【[#+1,∞]】
    • 和 上面的的-size 表示,每一项都有区别
      在这里插入图片描述

    (2)mtime
    (3)ctime

  • 以“分钟”为单位
    (1)-amin
    (2) -mmin
    (3)-cmin

根据权限来搜索
  • -perm 【permit 特许、许可证,权限】
find -perm 644  -ls
find -perm 777  -ls

在这里插入图片描述

处理动作
  • -print 【把搜索到的结果直接打印到屏幕上,默认的】

  • -ls 【相当于执行ls -l 命令】

  • -delete 【 删除查找的文件】

  • -fls filename 【将查找结果写入文件中】

  • -ok command {} \;【对查找的文件执行command命令,但是每一次都需要用户确认,最后的分号记得要加上】
    在这里插入图片描述

  • -exec command {} ;【对查找到的文件执行command命令,不需要用户确认,最后的分号记得要加上】
    在这里插入图片描述

    (1) {} 【表示查找到的文件】
    (2)find 传递的时候 是一次性传递的

xargs

  • 由于好多的命令不支持管道,但是工作有需要用到,这个时候xargs就可以派上用场
    在这里插入图片描述
    在这里插入图片描述

  • xargs 把一个命令的输出结果,一个一个的传递给后面要执行的命令

  • 有些命令不支持太多的字符,也可以使用xargs来传递
    在这里插入图片描述
    在这里插入图片描述

[root@localhost d]#echo a{1..1000000}|xargs touch
[root@localhost d]#rm a{1..1000000}
-bash: /usr/bin/rm: Argument list too long
[root@localhost d]#ls a*|xargs rm -f 
-bash: /usr/bin/ls: Argument list too long
[root@localhost d]#ls |xargs rm -f 
  • 一般情况下 find|xargs command

grep 文本过滤工具

文本处理“三剑客”
  • grep
  • sed
  • awk

(1)grep:全局用正则表达式搜索,并且打印符合条件的行
在这里插入图片描述

(2)grep [option] … pattern [file]
在这里插入图片描述

参数
  • - -color=auto 【将匹配到的文本添加颜色显示】
    在这里插入图片描述

  • -v 【invert 取反,显示没有匹配到】

  • -i 【ignore-case,忽略大小写】

  • -n 【line-number,显示匹配到的行的行号】
    在这里插入图片描述

  • -c 【只显示匹配到的行的个数】
    在这里插入图片描述

  • -o 【只显示匹配到的字符】
    在这里插入图片描述

  • -q 【quiet, --silent,静默模式,不输出东西】
    在这里插入图片描述

$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
【补充】
$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$*类似,但是可以当作数组用
  • -A # 【输出后#行】
    在这里插入图片描述

  • -B # 【 输出前#行】

  • -C # 【前后各输出#行】

  • -e 【表示或者】
    在这里插入图片描述

  • -E 【extended-regexp,扩展正则表达式】

  • -r 【递归查找】
    在这里插入图片描述

 grep 'root' passwd 
 grep -v "root" passwd 
 grep "root" passwd 
 grep -i "root" passwd 
 grep -n "root" passwd 
 grep -ni "root" passwd 
 grep -ci "root" passwd 
 grep -i "root" passwd 
 grep -o "root" passwd 
 grep -oi "root" passwd 
 grep -q "root" passwd 
 grep -q "qwertyuip;qwertyuo" passwd 
 echo $?
 grep -q "root" passwd 
 echo $?
 grep -nA 2 "root" passwd 
 grep -nB 2 "root" passwd 
 grep -nC 2 "root" passwd 
 grep -e "root" -e "mail" passwd 
 grep -r root /etc/ 
正则表达式
字符匹配
  • . 匹配任意单个字符

  • [abc] 匹配执行范围内的任意单个字符 [0-9]

  • [^abc] 取反

  • [:alnum:] 数字大小写字母 [a-zA-Z0-9]
    在这里插入图片描述

  • [:alpha:] 包含大小写字母 [a-zA-z]的匹配项
    在这里插入图片描述

  • [:lower:] 包含小写字母 [a-z]的匹配项

  • [:upper:] 包含大写字母 [A-Z]的匹配项

  • [:digit:] 包含数字 [0-9]的匹配项
    在这里插入图片描述

  • [:punct:] 包含标点符号的匹配项

匹配次数
  • * 【0次或者多次,是贪婪匹配】
    在这里插入图片描述

  • \?【linux中需要转义;0次或者一次】
    在这里插入图片描述

  • \+ 【linux中需要转义;至少一次】
    在这里插入图片描述

  • 三者关系
    在这里插入图片描述

    • \{n\} 【linux中不能使用r 来完成转义,所有都加上了\ 来转义;表示匹配n次】

    • \{m,n\} 最少m次,最多n次

    • \{,n\} 最多n次
      在这里插入图片描述

    • \{m,\} 最少m次

位置锚定
  • ^ 行首锚定
  • $ 结尾
  • ^$ 【除锚定符号外,什么都不加,表示空行】
    在这里插入图片描述
向后引用
  • \1 【表示前面第一个括号内匹配之后产生的字符,在\1的位置要在出现一次】
    在这里插入图片描述
    在这里插入图片描述

  • \2 【第二个括号,括号按照从外到内,即是最外层为1,往里层递增 (1(2 ))】

egrep
  • egrep = grep -E (扩展正则表达式)
    支持扩展正则表达式,与标准增长表达式的区别就是不需要转义,相当于正则表达式中前加上 “-r ”一样的效果
    在这里插入图片描述

压缩

gzip

在这里插入图片描述

Usage: gzip [OPTION]… [FILE]…

gzip passwd 压缩文件 默认会删除文件
gunzip pass.gz 解压文件,默认也会删除文件
gzip -d passwd.gz 解压文件
-c 保留原来的文件
gzip -c passwd > passwd.gz 压缩
gzip -c -d passwd.gz > passwd 解压
- #  【1-9 指定压缩比,值越大压缩比例越大 默认是9】
zcat 查看压缩包内的文件
zcat passwd.gz > passwd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bzip2
-k 【keep 保留原文件】
-d 【decompress 解压】
bunzip2 【解压】
-# 1-9 默认的是9
bzcat 查看压缩包的文件

在这里插入图片描述

xz
-k 保留源文件
-d 解压
unxz 解压
-# 1-9 默认的是9
xzcat 查看压缩包内的文件
tar

在这里插入图片描述

tar cvf a.tar b c 【cvf 和 -cvf 效果一样】
	c 【creative 创建】
	v 【verbose 显示过程】
	f 指定文件
	
	r 【append 追加】
	x 【extract 解压、提炼】
	-C 指定解压位置
	j 使用bzip2来压缩
	z 使用gzip来压缩
	J 使用xz来压缩
--exclude 排除
tar cvf a.tar b c
tar -r -f a.tar d
tar xf a.tar -C /opt
tar jcvf a.tar.bz b c d
tar zcvf a.tar.gz b c d
tar Jcvf a.tar.xz b c d

tar zcf etc.tar.gz --exclude=/etc/yum.repos.d --exclude=yum.conf /etc/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分卷压缩
  • split 命令 可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
split -b size file -d tarfile 
-b  指定每一个分卷的大小
-d 指定数字 默认是字母
-a 指定后缀个数

合并:
cat tarfile* > file.tar.gz
dd if=/dev/zero of=b bs=10M count=2
split -b 5M b b.tar.gz
split -b 5M b -d  b.tar.gz
split -b 5M b -d -a 3 b.tar.gz

在这里插入图片描述

  • 补充几个知识点,便于测试理解
    (1)dev/zero 是什么?它是一个输入设备,你可你用它来初始化文件。
    /dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

    如何使用/dev/zero?
    像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.
    关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备

    使用/dev/null?
    把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.

    (2)dd命令
    dd命令用于复制文件并对原文件的内容进行转换和格式化处理。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值