Linux学习日志(九)

文件查找: 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 [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"
 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
时间: 2024-08-24 03:32:14

Linux学习日志(九)的相关文章

Linux学习日志2-vim使用基础

vim是linux操作系统下的一个文本编辑工具,功能非常强大,但刚学习起来比较复杂.vim的所有功能要讲明白得有几百页,在这里只是记录一下vim的一些基本用法. 首先vim打开文件的三种方式: vim +# xxx(#是数字):表示打开xxx文件并将光标定位到指定行. vim -o xx1 xx2 xx3:表示同时打开三个文件,垂直分割显示 vim -O xx1 xx2 xx3:表示同时打开三个文件,水平分割显示 多个文件间跳转:键入ctrl+w后:→向左.←向右.↑向上.↓向下 vim打开文件

Linux学习日志day1——无人值守系统安装DHCP+TFTP+PXE+Kickstar

Linux学习日志day1--无人值守批量系统远程网络安装(DHCP+TFTP+PXE+Kickstar)                                         --作者:江信瀚 服务器环境介绍: 主机名:workstation.example.com 关闭SElinux以及防火墙 虚拟机:VMware(关闭了VMware的DHCP服务) 网卡配置: 静态IP获取! IPV6全部都删除,因为根本用不到 子网IP可以在VMware中设置 8.8.8.8是谷歌的DNS服务器

Linux学习日志1-基本知识

1.冯.诺依曼体系计算机五大组成部件: 1.控制器:控制其他四个部件的运作 2.运算器:负责计算加减乘除 3.存储器:存放运算的数据来源与结果 4.输入设备:接收数据输入存入存储器 5.输出设备:从存储器接收数据输出 2.Linux的起源: 1991年一个芬兰大学生Linus Torvalds参考其老师的教学用操作系统Minix的思想(注意仅仅是思想),自己写了一个操作系统内核,命名为Linux 0.0.1,发布在comp.os.minix新闻组上,正式宣告Linux内核的诞生.从那时起,Lin

linux学习日志

Linux学习日志 基本用户接口模式是shell ,乌班图一般是用 terminal这个终端来输入命令 F11全屏,ctrl+shift+"+" 变大,ctrl+-变小. 命令格式 命令  [参数] [操作对象] cmd    options  opreation cd ~ 回到用户主目录 ls 查看目录下的内容 ./当前目录 ../父目录 ls -l pwd 可以查看当前工作目录 print working directory man 命令名 可以查命令帮助 cd 切换目录 touc

linux学习之九 学习过程总结

~写在前面 首先非常感谢孟老师的悉心讲解,使用这种新颖的教学方式(MOOC课堂+博客),也感到非常有幸随着老师的思路对linux的内核进行了初步的系统学习.结合代码和gdb调试工具跟踪分析对linux内核的一些重要机制有了更深刻的理解. 一 学习Linux内核的心得Linux系统的理解 liunx内核是一个十分庞大的操作系统,代码量动辄上千万行,并且还会越来越大,所以通过阅读代码来了解他的机制是不现实的.但是光拿着一本讲linux工作机制的书,比如那本引为经典的巨厚的<深入理解linux内核>

Linux学习日志--文件搜索命令

开头总结: 学习了Linux中的文件搜索命令find和locate,系统搜索命令whereis 和which ,字符串搜索命令grep,find和locate的区别和用法格式,什么是path环境变量以及其好处,whereis和which的用法,区别在于查询系统命令内容的不同,grep和find的区别,为什么要引入通配符? 什么情况下用通配符还是正则表达式? Locate文件搜索命令: 1)格式: Locate [文件名] 2)更新数据库 updatedb 好处: 相对于find命令来说,Loca

Linux学习日志(六)

文件系统 按名称存取是文件系统存在的一个主要目的 定义: 文件系统是一个软件,对磁盘上存在的二进制进行管理 MBR:Master Boot Record 主引导记录 512byte: bootloader:记载器,4 46bytes fat:每16个字节引导一个分区, MBR有效性标记:5A 4个主分区 3主,1扩展分区,引用其他额外的分区表 逻辑分区 硬盘: 存放位置 /dev 硬盘接口: IDE(ATA):并口,每个控制器可接两个硬盘,master/slave,133MB/S /dev/hd

Linux学习笔记九:Linux系统引导流程

当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接. 在Linux引导流程中,一般可以分为以下几个主要过程: 1.固件firmware(CMOS/BIOS)  ->  POST(Power On Self Test),即加电自检 2.自举程序BootLoader(GRUB) -> 将系统载入内核 3.载入内核Kernel  ->  驱动硬件 4.启动进程init  ->  服务启动 5.读取执行配置文件/etc/initta

Linux学习日志(一)

###目录管理 FHS:文件层次标准 操作系统自身运行使用的 /bin: 存放可执行的二进制程序,管理员和普通用户都可以使用 /sbin:管理员才能执行的命令 运行正常功能的程序存放位置 /usr/bin /usr/sbin 用来存放第三方软件的程序 /usr/local/bin /usr/local/sbin /boot:存放系统引导文件:内核.ramfs文件.bootloader(grub) /dev:设备文件存放目录 /etc:配置文件的集中存放目录 /etc/sysconfig:系统级别