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
1 0
原创粉丝点击