您的位置:首页 > 运维架构 > Linux

find命令常见用法与linux定时计划任务

2017-01-09 18:31 711 查看
find命令:

一种实时查找工具,通过遍历指定路径下的文件系统完成文件查找。 find [OPTION]...[查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径,默认为当前路径
查找条件:指定的查找标准,可以为文件名,类型,大小,权限等标准进行,默认为找出路径下的所有文件
处理动作:对查找的文件执行什么动作;默认输出至屏幕

查找条件:文件名,属主属组,文件类型,文件大小,时间戳,权限 根据文件名查找:
-name "文件名称": 支持使用glob:*,?,[],[^]
-iname "文件名称": 不区分字母大小写
-regex "PATTERN": 以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
根据属主属组查找: -user USERNAME:查找属主为指定用户的文件
-group GRPNAME:查找属组为指定组的文件
-uid UserID:查找属主为指定UID号的文件
-gid GroupID:查找属主为指定GID号的文件 -nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找: -type TYPE:
f:普通文件
d:目录文件
l:符号链接
s:套接字文件
b:块设备文件
c:字符设备文件
p:管道文件
根据文件大小查找: -size [+|-] #UNIT
常用单位:k,M,G,同时支持b,c,w
#UNIT:(#-1,#],查找大于#-1,小于等于#UNIT大小的文件 +#UNIT:(#,∝)
-#UNIT:[0,#-1]
根据时间戳查找: 以“天”为单位:
-atime [+|-] # -mtime [+|-] # -ctime [+|-] # 以“分”为单位:
-amin [+|-] # -mmin [+|-] # -cmin [+|-] # #:[#,#+1)
+#:[#+1,∝)
-#:[0,#) 根据权限查找: -perm [/|-] MODE
MODE:精确权限匹配,指定的MODE即为文件或目录所有的权限。如果指定为0,即没有任何权限。 如:400,查找指定目录下属主只有可读权限,属组和其他没有任何权限的文件或目录。
/MODE:任何一类对象权限,只要匹配一位即可,一位:指u,g,o中rwx任意以指定的MODE相匹配即可
如:/524,只要u可读或者可执行,或者g可写,或者o可读的文件和目录都将被匹配到。其他未指定的位可为0或1
-MODE:每一类对象都必须同时拥有为其指定的权限标准。如果指定为0,权限可忽略。 如:-400,查找指定目录下属主必须具有可读权限,属组和其他用户权限可以忽略
-520,查找指定目录下属主必须具有可读写权限,属组必须具有可写权限,其他用户权限可忽略
-424,查找指定目录下属主必须具有可读权限,属组必须具有有可写权限,其他用户有可读权限 组合条件: -a:非
-o:或
-not,!:非
处理动作: -print:默认选项
-ls:类似对查找到的文件执行"ls -l"命令
-delete:删除查找到的文件
-fls /path/to/somefile:查找到的所有长格式文件保存至指定文件
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,要求进行交互式确认
-exec COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令, {}: 用于引用查找到的文件名称自身;
有些命令可能不能接受过多参数,导致命令执行失败,可通过xargs避免此问题
find | xargs COMMAND
1、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();
[root@allen ~]# grep -E --color=auto "\<[[:alpha:]]+\>\(\)" /etc/rc.d/init.d/functions
checkpid() {
daemon() {
killproc() {
pidfileofproc() {
pidofproc() {
status() {
success() {
failure() {
passed() {
warning() {
action() {
strstr() {
2、使用echo命令输出一个绝对路径,使用grep取出其基名;
基名:指不包含文件的目录路径,仅含文件名本身。可以通过basename来查询文件的基名,多用于脚本中。
[root@allen ~]# echo /etc/sysconfig/network-scripts/ | grep -E -o "[^/]+/?$" | cut -d"/" -f1
network-scripts
扩展:取出其路径名
[root@allen ~]# echo /etc/sysconfig/network-scripts/ | egrep -o "(/[^/]+)+/." | grep -E -o "(/[^/]+)+/" | grep -E -o "(/[^/]+)+"
/etc/sysconfig
3、找出ifconfig命令结果中的1-255之间数字;
①要获取1-255之间的数字,需对数字进行拆分,分段获取:1-9,10-99,100-199,200-249,250-255
②基本正则表达式不支持元字符‘|’,所以需要使用参数-E,或者使用egrep查询。

③选项-o,仅显示匹配的字符

④此处需要用到单词锚定符/</>,或者/b/b来完整匹配一个数字

[root@allen ~]# ifconfig | grep -E -o "\<[1-9]\>|\<[1-9][0-9]\>|\<[1][0-9]{2}\>|\<[2][0-4][0-9]\>|\<25[0-5]\>"


4、查找当前系统上没有属主或属组的文件;
[root@localhost ~]# find / -nouser -o -nogroup
查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录;
[root@localhost ~]# find / \( -nouser -o -nogroup \) -a -atime -3


5、查找/etc目录下大于1M,且类型为普通文件的所有文件;
[root@localhost ~]# find /etc -size +1M -type f -exec ls -lh {} \;
-rw-r--r--. 1 root root 1.1M Apr 24  2015 /etc/pki/tls/certs/ca-bundle.trust.crt
-rw-r--r--. 1 root root 8.0M Nov 17 09:27 /etc/selinux/targeted/modules/active/policy.kern
-rw-r--r--. 1 root root 8.0M Nov 17 09:27 /etc/selinux/targeted/policy/policy.24
-rw-r--r--. 1 root root 2.2M Nov 17 09:29 /etc/gconf/gconf.xml.defaults/%gconf-tree.xml
6、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件;
[root@localhost hallen]# find /etc/init.d/ -perm -113 -ls
7、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件;
[root@localhost ~]# find /etc -not \( -user root -o -user hadoop \) -a -mtime -7 -ls
[root@localhost ~]# find /etc -not -user root -a -not -user hadoop -a -mtime -7 -ls
8、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
[root@localhost tmp]# cp /etc/rc.d/rc.sysinit /tmp/rc.sysinit
[root@localhost tmp]# sed 's@^[[:space:]]\+@#@' /tmp/rc.sysinit
9、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符

[root@localhost tmp]# sed -i 's/^#[[:space:]]\+//' /tmp/rc.sysinit
[root@localhost tmp]#sed '/^#[[:space:]]\+/ d' /tmp/rc.sysinit
10、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;
[root@localhost tmp]# sed -ri '/enabled=0|gpgcheck=0/ s/0/1/'  /etc/yum.repos.d/CentOS-Media.repo


周期性任务计划:cron
在centos中,周期性任务计划相关程序包包含cronnie,cronie-anacron,crontabs三个。

cronie是主程序包,提供了crond守护进程及相关辅助工具

cronie-anacron是cronie的补充程序,用于监控cronie的任务执行状况。

crontabs包含Centos提供系统维护任务

系统级别的任务计划定义在/etc/crontab配置文件中。
用户任务计划通过crontab命令来添加,每个用户定义的计划任务都会在/var/spool/cron/目录下存在一个以用户名命名文件。

crontab命令:
crontab [-u user] [-l | -e | -r] [-i]
-l:列出所有任务

-e:编辑任务

-r:移除所有任务

-i:通-r一同使用,交互式选择移除指定任务

-u user: 仅root用户可运行,代为指定用户管理cron任务
cron任务时间说明:
cron用5个时间段来定义计划任务执行周期,分别为:分钟,小时,天,月,周。
系统cron任务

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
时间表示法:

1) 特定值:给定时间点有效取值范围内的值

2) *:给定时间点上有效取值范围内的所有值,表示"每..."

3) 离散取值:用逗号","分隔

4) 连续取值:-

5) 在指定时间范围上,定义步长: */# (#为整数)
对cron任务来说,如需使用%号,需要使用转义字符进行转义。因%在cron中有特殊用途

11、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20161202
[root@allen ~]# crontab -e
0 2 * * 2,4,6 cp /var/log/messages /backup/logs/messages-`date +\%Y\%m\%d`
12、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中
[root@allen ~]# crontab -e
0 */2 * * * grep -E '^S' /proc/meminfo >> /stats/memory.txt
13、写一个脚本创建10用户user10-user19;密码同用户名;
#!/bin/bash
#useradd user10 to user19
for i in $(seq 10 19);do
id user$i > /dev/null 2>&1
status=`echo $?`
if [ $status -ne 0 ];then
useradd user$i > /dev/null 2>&1
fi

if id user$i > /dev/null 2>&1;then
echo "user$i" | passwd --stdin user$i > /dev/null 2>&1
fi
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux find sed