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

Linux学习日志(九)

2016-05-11 01:36 741 查看

文件查找: find命令

grep : 文本搜索

find :文本查找

locate:(updatedb 手动生产)

1.依赖于数据库
2.非实时查找,结果非精确
3.查找速度快
4.采用的模糊查找


find:

实时查找:速度慢
精确匹配


格式:

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

查找路径:默认为当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示


查找条件:

-name “文件名称”:支持使用globbing(文件通配)

-iname "文件名称" : 根据姓名查找文件,不区分大小写
-user UserName :根据属主查找
-group GroupName : 根据属组查找
-nouser:查找没有属主的文件
-nogroup: 查找没有属组的文件
-type: 根据文件类型查找
f: 普通文件
d: 目录
b: 块设备
c: 字符设备
l: 符号链接文件
p: 命令管道
s: 套节子

-szie:根据文件大小查找
格式: -size[+|-]#Unit
#:(#-1)<x<=#
例: -size +2MB 大于2兆的
-size -2MB 小于2兆的
-size 2MB 等于2兆的


根据时间撮查找:

以天为单位(time):
-atime [+|-]#
-mtime
-ctime

-: 刚好#
+: >#

以分钟为单位

-amin
-mmin
-cmin


根据权限查找:

-perm [+|-] MODE
MODE : 精确匹配
+ MODE:任何一类用户的任何一位权限匹配 (常用于查找某类的某特定权限是否存在)

- MODE:每类用户的指定要检查的权限位都匹配


文件通配:

*:表示任意长度的任意字符
?:表示任意的单个字符
[] : 表示在指定范围内的单个字符:[a-z]
[^]:脱字符,取反的意思


组合条件:

-a :与。同事满足
-o : 或,一个满足
-not , !非。取反


练习:

1.查找/var目录中属主为root且属组为mail的文件

find /var/ -user root -group mail


2.查找/usr目录下不属于root、bin或 hadoop的所有文件

find /usr/ -not -user root -not -user bin -not -user hadoop
find /usr/ -not \( -user root -o -user bin -o -user hadoop \)


3.查找/etc目录中最近一周内其内容修改过的,且不属于root或hadooop的文件

find /etc -mtime -7 -not -user root -not -user hadoop


4.查找当前系统上没有属组或属组,且最近一个月内被访问过的文件

find / \(-nouser -o -nogroup\) -atime -30


5.查找早/etc/目录下大于1M且类型为普通文件的所有文件

find /etc/ -type f -size +1M


6.查找/etc/目录所有用户都没有写权限的文件

find /etc/ -not -perm +222
所有都没有;相反:任何一个有
所有都有:相反:只要有一个没有


7.查找/etc/目录下至少一类没有写权限的文件

find /etc/ -perm -222


8.查找/etc/init.d目录下,所有用户都有执行权限其其他用户有写权限的文件

find /etc/init.d/  -perm -111 -perm -002
find /etc/init.d/  -perm -113


Linux任务计划

一次性任务执行:

at:

1.交互式 让用户在at>提示符输入多个要执行命令

格式:at time
atq =at -L 查看作业
-q 字母 TIme  添加别的队列
at -d job_name 删除一个尚未执行的作业= atrm

Ctrl+d :提价任务
at 作业有队列:使用单个字符表示

2.批处理:将任务的各命令写入文件由at进行调用

at批模式:
at -f 文件路径 TIME

TIME:
模糊时间:
now
noon(中午)
midnight(午夜)
teatime(下午4点)
tomorrow


任务的执行结果会议邮件的形式发送给提交者

使用mail

-s 指定主题
mail -s 主题 用户

mail 用户名
主题
内容

可以通过系统文件当作内容 或者用ehco

echo -e "hello are you " | mail -s "to" root
cat /etc/passwd | mail -s "ss" root


batch:不能指定时间,它自动选择系统空闲时执行

crond:守护进程,运行在后台,随时监视着进程等待执行
服务进程:阻塞,轮训


周期性任务执行

系统cron:

文件: /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs
# 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. /# :表示在指定时间范围内每隔#一次   5-45/3 5到45分钟,每3分钟执行一次


注意: 通过输出重定向而拒收邮件

&> /dev/null  错误
> /dev/null 2>/文件位置 成功的到/dev/null 成功到指定位置


用户cron:

文件: /var/spool/sron/UserName


使用crontab命令来实现

-l:查看自己的cron任务列表
-e:通过EDITOR变量中定义的编辑器打开用户自己的cron配置文件:
编辑单独的任务都使用-e选项,无论是删除、修改还是新建
-r:移除crontab文件


如果是管理员

-u UserName: 为别的用户指定crontab作业
#crontab -e -u 用户名


提醒:如果在conrtab的用户命令中使用%,得转义为\%

anacron

练习

1、每3分钟执行一个“echo “how are you?””

*/3 * * * * /bin/echo "hao are you"


2、每周2、4、6备份/etc/目录至/backup目录中,备份的文件名以当etc_开头并跟上当日的日期作为文件名

3 2 * * 2,4,6 /bin/tar  -Jcf /backup/etc_`data '+/%F'.tar.xz ` /etc/*


3.每天6,9,12,15,18查看一下系统当前挂载的所有文件系统,并将查看的结果追加至/tmp/mounts.txt文件中

3 6,9,12,15,18 * * * * * /bin/mount>>/tmp/mounts.txt


4.每天每两小时取当前系统内存空间余量,将其保存至/stats/memory.txt文件中

34 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /status/memory.txt


如何实现秒级别的任务

* * * * * * /bin/echo "how are your"; sleep 30; /bin/echo "how are you"


crontab文件的格式

空白行会被忽略
#开头的行是注释


anacron:

1. 是crontab的补充,用于检查crontab中某任务在过去的一个周期内是否没有执行,
2. 如果没有执行,则在开机以后的某时间点让其执行一次,无论其周期是否到达


facl:文件访问控制列表

普通用户无法安全地将某文件授权给其他用户访问

facl:

附加原有权限模型之上另一层权限控制机制,保存至文件扩展属性信息中


命令:

getfacel file...
setfacel {-x|-m} 权限 file...

-m:设定权限
-m u:UserName:Perms
-m g:GroupName:Perms
-m m::Perms
-x:取消权限
-x u:UserName
-x g:GroupName
-x m:
ll表示为+,有额外的权限属性
-R:递归,对文件夹内的文件也生效


bash编程之循环控制

for varName in List; do
循环体
done

while CONDITION; do
循环体
done


循环控制

continue:提前结束本次循环而开始评估下一轮
break
:结束当前循环,指定条吹几次循环


shell练习

练习:求100以内所有偶数之和

#!/bin/bash
declare -i sum=0
declare -i i=1

while [ $i -le 100 ];do
if [ [ $i%2 ] -eq 0 ];then
let sum+=$i
fi
let i++
done


写一个脚本

1.让用户输入一个块设备,如果设备文件不存在,就提示用户重新输入,知道用户输入正确

2.用户可以输入quit退出

#!/bin/bash
#
while true; do
read -p "Enter a dev " devdir
if [ "$devdir" == "quit" ];then
break
fi
if [ -b $devdir ];then
break
else
echo "wrong device file"
fi
done


扩展前一题

1,显示用户输入块设备,并提示用户,后续操作会损坏设备上的所有文件,让用户选择是否选择

2.如果用户输入y。则继续后面的操作

3.如果用户输入n ,则显示用户选择了终止,并退出脚本

4.输入任何其他字符,则用户重新选择

#!/bin/bash
#
while true; do
read -p "Enter a dev " devdir

if [ "$devdir" == "quit" ];then
break
fi

if [ -b $devdir ];then
echo "$devdir is very good !"
read -p "Are you suer [y|b]" devop
devop=echo $devop | tr 'A-Z' 'a-z'
if [[ "$devop" == "y"  ]];then
echo "no xuanze le yes"
elif [[ "$devop" == "n"  ]];then
break
else
continue
fi
else
echo "wrong device file"
fi
done


练习:写一个脚本

1.提示用户输入一个目录路径

2,显示目录下至少包含一个大写字母的文件名

#!/bin/bash
while true;do
read -p "Enter a directory: " dirname
[ "$dirname" == "quit" ] && exit 3
[ -d "$dirname" ] && break || echo "wrong directory..."
done
for filename in $dirname/*;do
if [[ "$fileName" =~ .*[[:upper:]]{1,}.* ]]; then
echo "$fileName"
fi
done


练习:写一个脚本

前提:配置好yum源

1、如果本机没有一个可用的yum源,则提示用户,并退出脚本(4);如果此脚本非以root用户执行,则显示仅有root才有权限安装程序包,而后退出(3);

2、提示用户输入一个程序包名称,而后使用yum自动安装之;尽可能不输出yum命令执行中的信息;

如果安装成功,则绿色显示,否则,红色显示失败;

3、如果用户输入的程序包不存在,则显示错误后让用户继续输入;

4、如果用户输入quit,则正常退出(0);

5、正常退出前,显示本地共安装的程序包的个数;

#!/bin/bash
while true;do
if [ $UID -ne 0 ]; then
echo "`basename $0` must be running as root"
exit 3
fi
yum repolist &> /dev/null
if  [[ $? -eq 0 ]];then
while true;do
read -p "Enter a chengxubao: " baoname
if [[ "$baoname" == "quit" ]];then
rpm -qa |wc -l
exit 0
fi
yum list |grep "^$baoname.*" &> /dev/null
if [[ $? -eq 0 ]];then
yum install $baoname -y &> /dev/null
if [[ $? -ne 0 ]];then
echo "$baoname not ok"
else
echo "$baoname is ok!"
exit 0
fi
else
continue
fi
done
else
echo "yum is not ok!!"
exit 4
fi
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: