通配符: 是shell在做匹配的时候会用到,一般用于匹配文件名
它是由shell进行解析的,比如 find ls cp 等等命令都可以配合着通配符一起使用
shell常见的通配符
* : 匹配0或者多个字符
?: 匹配任意1个字符
[list]: 匹配list中任意单个字符
[c1-c2]: 匹配c1-c2中任意单个字符
[^c1-c2]: 不匹配c1-c2中任意单个字符
{string1,string2….} : 匹配{}中任意单个字符
匹配条件:
- *
- ?.txt
- [123]1.txt —> 11.txt 21.txt 31.txt
- [1-9].txt —> 1.txt 2.txt …… 9.txt
- [^a-z].txt —> 除了a.txt …. z.txt文件
- {A,B,C}.txt —> A.txt B.txt C.txt文件
shell元字符
IFS : //
CR:
= :设定变量
$ : 获取变量
>< : 重定向
| : 管道
& : 后台执行命令
() : 在子shell中执行命令/运算或命令替换等
{}: 函数中执行/变量替换的范围定界
; : 命令结束后,忽略其返回值,继续执行下一个命令
&& : 命令结束后,若为true,继续执行下一个命令
|| : 命令结束后,若为false,继续执行下一个命令
! : 非
# :注释
\ : 转义
shell转义符:
硬转义: 内部所有shell元字符、通配符等 都会被关闭掉 ‘ ‘
软转义: 内部所有shell元字符、通配符等 都正常生效 “ “
案例:
[root@test test1]# a=1
[root@test test1]# echo ‘$a’
$a
[root@test test1]# echo “$a”
1
find命令
实时查找工具,通过遍历指定路径下的文件系统完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
[root@test tmp]# find —help
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
find [选项] [路径] [查找条件 + 处理动作]
路径: 指定具体目录路径,默认是当前文件夹
查找条件: 指定查找的标准(文件名/大小/文件类型/权限等等),默认是找出所有文件
处理动作: 对符合条件的文件做什么操作,默认是输出屏幕
- 查找条件
根据文件名称查找:
-name “filename” 根据文件名称查找(支持通配符global)
-iname “filename” 根据文件名称查找;忽略大小写(支持通配符global)
-regex “PATTERN” 以pattern匹配整个文件路径字符串,而不仅仅是文件名称
[root@test tmp]# find ./ -name "1[123].txt"
根据属主和属组查找:
-user username : 查找属主为指定用户的文件
-group groupname: 查找属组为指定用户的文件find
-uid UID : 查找属主为指定UID号的文件
-gid GID :查找数组为指定GID号的文件
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件
##匹配次数 *:匹配前面的字符任意次数
.*:匹配任意长度的字符
\?:匹配其前面字符0或1次,即前面的可有可无
+:匹配其前面的字符至少1次
{m}:匹配前面的字符m次
{m,n}:匹配前面的字符至少m次,至多n次
{0,n}:匹配前面的字符至多n次
{m,}:匹配前面的字符至少m次
根据文件类型查找:
-type TYPE :
TYPE: f d l s b c p
组合条件:
与:-a
或:-o
非: -not
相关案例:找出/tmp目录下,属主不是root,且文件名不是fstab的文件
find /tmp ( -not -user root -a -not -name “fstab”\ )
根据文件大小查找:
-size [+|-]N[bkMG]
寻找/下文件大小超过10M的所有文件:
[root@test tmp]# find / -size +10M
根据时间戳:
-mtime [+-]days:-表示days内修改过,+表示days前修改过,不加表示正好在days修改过。
-ctime [+-]days:改变时间,+-含义同-mtime。
-atime [+-]days:访问时间,+-含义同-mtime。
-mmin n:n分钟前修改过文件内容,
-cmin n:n分钟前文件改变过。
-amin n:n分钟前文件被访问过。
天:
-atime [+|-]N
-mtime [+|-]N
-ctime [+|-]N
-atime +7 : 表示7天内
分
-amin [+|-]N
-mmin [+|-]N
-cmin [+|-]N
根据权限进行查找:
-perm [+|-]MODE
MODE : 精确查找
/MODE : 任何一类(u g o )对象的权限中只要能有一位匹配即可
-MODE : 每一类对象都必须同时拥有为其制定的权限标准
处理动作:
-print: 默认处理动作,显示至屏幕上
-ls: 类似于对查找到的文件执行 ls -l 命令
-delete: 删除查找到的文件
-fls /path/to/somefile : 查找到的所有文件的**长格式信息**保存至指定文件中
-ok COMMAND {}\ :
对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
交互式,每个文件执行命令前会让用户确定
-exec COMMAND {}\:
对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
实例1: 对/tmp目录下所有属主为root用户的文件修find改其属主为zhangsan
chown [-cfhvR] [—help] [—version] user[:group] file…
参数 :
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
- —help : 显示辅助说明
- —version : 显示版本
[root@test tmp]# find /tmp -user root -ok chown zhangsan: {} \; (这里 {} \ 之间要有空格)
实例2: 对/tmp目录下所有属主为zhangsan用户或者属主为zhangsan的文件修改其为root:root
[root@test tmp]# find /tmp -user zhangsan -o -group zhangsan -exec chown root:root {} \;
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;
另一种 方式可规避此问题 find | xargs COMMAND
等同于上面实例2的操作
[root@test tmp]# find /tmp -user zhangsan -o -group zhangsan | xargs chown root:root
-type TYPE:根据指定的文件类型查找文件
**f:普通文件
**d:目录文件
**l:链接文件
**p:管道文件
s:套接字文件
**b:块设备文件
c:字符设备文件
** 但是有些命令不能接受过长的参数,此时命令执行会失败,另一种方式可规避次问题
find | xargs COMMAND**
练习题:
查找/var目录下属主为root,且属组为mail的所有文件或目录
find /var/ -type f -user root -group mail
查找/usr目录下不属于root,bin或Hadoop的所有文件或目录
find /usr/ -not -user root -a -not -user bin -a -not -user Hadoop
find /usr/ -not ( -user root -o -user bin -o -user Hadoop )
- 查找/etc目录下最近一周内容曾被访问过的文件或目录
find /etc/ -mtime -7 -a -not ( user root -o -user hadooop )
查找当前系统上没有属主或属组,且近一周内曾被访问过的文件或目录
find / (-nouser -o -nogroup ) -atime -7
查找/etc目录下大于1M且类型为普通文件的所有文件或目录
find /etc -size +1M -type f
查找/etc目录下所有用户都没有写权限的文件
find /etc -not -perm /222
查找/etc目录下至少一类用户没有执行权限的文件(r:4w:2x:1)
find /etc -not -perm -111 x执行权限 ugo 111:001 101 111
find -perm -mode , 表示mode中转换成二进制的1在文件权限位里面必须匹配,0则不用管。(也就是说如果一个文件的权限比参数中的mode要多,则是匹配的)
比如mode=644那么转换成二进制为110 100 100,而被查找的文件的权限位也可以被转换成一个二进制数,两者在位上为1的部分必须完全匹配,而0则不管。例如被查找的文件的权限为转换成二进制数是 111 111 111那么这个比如被匹配,而假如是100 100 100那么则不会匹配。所以这个’-‘的作用归结起来就是匹配比mode权限更充足的文件(找不到什么词语来形容了)查找/etc/init.d目录下,所有用户都执行权限,且其它用户写权限的文件
find /etc/init.d -perm -113
-perm mode 文件的权限正好是mode就匹配
-perm -mode 文件的权限包括mode就匹配(该文件还可以拥有额外的权限属性)