Linux学习日志(九)
来源:互联网 发布:在淘宝代运营公司工作 编辑:程序博客网 时间:2024/05/18 14:26
文件查找: 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 -002find /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 循环体donewhile CONDITION; do 循环体done
循环控制
continue:提前结束本次循环而开始评估下一轮 break [n]:结束当前循环,指定条吹几次循环
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" fidone
扩展前一题
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/bashwhile 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" fidone
练习:写一个脚本
前提:配置好yum源
1、如果本机没有一个可用的yum源,则提示用户,并退出脚本(4);如果此脚本非以root用户执行,则显示仅有root才有权限安装程序包,而后退出(3);
2、提示用户输入一个程序包名称,而后使用yum自动安装之;尽可能不输出yum命令执行中的信息;
如果安装成功,则绿色显示,否则,红色显示失败;
3、如果用户输入的程序包不存在,则显示错误后让用户继续输入;
4、如果用户输入quit,则正常退出(0);
5、正常退出前,显示本地共安装的程序包的个数;
#!/bin/bashwhile true;doif [ $UID -ne 0 ]; then echo "`basename $0` must be running as root" exit 3fiyum repolist &> /dev/nullif [[ $? -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 4fidone
- Linux学习日志(九)
- Java学习日志(九)
- linux基础(九)系统日志
- osgi 学习系列(九)osgi 日志
- Linux Socket 学习(九)
- Linux学习笔记(九)
- Linux Socket 学习(九)
- Linux学习笔记(九)
- Linux学习笔记(九)
- Linux每日学习(九)
- linux学习笔记(九)
- LINUX学习笔记(九)
- 设计模式学习日志九:访问者模式(原文转载)
- linux 学习日志(1)
- Linux学习日志(一)
- Linux学习日志(一)
- Linux学习日志(三)
- Linux学习日志(四)
- native2ascii.exe详细使用方法、native2ascii转换示例
- CodeForces 286C Main Sequence
- Linux学习日志(十)
- ARB_precision_hint_fastest,ARB_precision_hint_nicest 的意义,作用
- UVa - 1592 Database(STL综合,强推!)
- Linux学习日志(九)
- 读取spring配置文件的方法(spring读取资源文件)
- LeetCode 026 Remove Duplicates from Sorted Array
- MyBatis入门时的一些细节问题
- NYOJ-6-喷水装置(一)
- 前台提交servlet存入数据库乱码问题
- LeetCode 027 Remove Element
- SpringMvc笔记1
- GCD串行并发队列扫盲