精华内容
下载资源
问答
  • Linux 运维常用 shell 脚本实例

    千次阅读 2021-02-26 15:07:33
    1、用shell脚本批量建立Linux用户 实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码! 脚本实现如下: #!/bin/bash for i in `seq 1 50` do useradd -G student...

    1、用shell脚本批量建立Linux用户


    实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码!

    脚本实现如下:

    #!/bin/bash
    for i in `seq 1 50`
    do
        useradd -G student student$i ; 
        echo student$i | passwd student$i --stdin;
    done

     【说明:Linux下 Passwd有参数 --stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.   所以linux下自动改变用户密码的办法就是: Echo 密码 | passwd –stdin 用户名】

    -------------------设置相同的密码------------------------

    #!/bin/bash
    password="123456"
    for USER in user1 user2 user3
    do
         useradd -m $USER
         echo -e "${password}\n${password}" | passwd $USER
    done

    说明:
    echo -n 不换行输出
    $echo -n "123"
    $echo "456"
    最终输出 123456
    而不是
    123
    456
        echo -e 处理特殊字符:
            \n 换行且光标移至行首 


    ok,就这么一个简单的脚本,就可以在系统里批量生成账号了。而且密码跟账号的名字一样。
     


    2、 编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下:

    #!/bin/bash
    for FILE in `ls /usr/local/test`
    do
        if [ -f $FILE ] ; then
            if [ `ls -l  $FILE | awk `{print $5}` -gt 100000 ] ; then
                mv $FILE  /tmp/
            fi
        fi
    done

    ================

    #!/bin/bash
    for FileName in `ls -l  /usr/local/test | awk '$5>102400' {print $9}`
    do
            mv $FileName  /tmp/
    done
    ls -al  /tmp/
    echo  "done!"


    3、通过apache访问日志access.log 统计IP和每个地址访问的次数,按访问量列出前10名。


         日志格式样例如下:
         192.168.1.247  ---【02/jul/2010:23:44:59 + 8080 】 "GET /HTTP/1/1"   200 19
         答案:
             cat  access.log | awk '{print  $1}' |sort| uniq -c |sort -rn |head -10
     (uniq 参数说明:– c 显示输出中,在每行行首加上本行在文件中连续出现的次数。
         sort参数说明:sort默认的排序方式是升序,-r 参数就会改变成倒叙;你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。)


    4、一台监控主机,一台被监控主机。被监控主机分区使用率大于80%,就发告警邮件。放到crontab里面,每10分钟执行一次。


            a、 首先两台机器要建立服务器间的信任关系。
            b、脚本:        

    #!/bin/bash
    FSMAX="80"
    remote_user='root'
    remote_ip=(IP地址列表)
     ip_num='0'
    while [ "$ip_num" -le "$(expr ${#remote_ip[@]} -l)"]
    do
      read_num='1'
      ssh "$remote_user"@"${remote_ip[$ip_num]}"  df -h > /tmp/diskcheck_tmp
      grep '^/dev/*'  /tmp/diskcheck_tmp | awk '{print $5}'|sed 's/\%//g'  > /tmp/diskcheck_num_tmp
        while [ "$read_num" -le $(wc -l < /tmp/diskcheck_num_tmp) ]
          do
    	 size=$(sed -n "$read_num" 'p'  /tmp/diskcheck_num_tmp)
    	 if [ "size" -gt "$FSMAX" ]
    	   then
    	     $(grep '^/dev/*'  /tmp/diskcheck_tmp |sed -n $read_num'p'  > /tmp/disk_check_mail)
    	     $(echo ${remote_ip[$ip_num]}) >> /tmp/disk_check_mail)
    	     $(mail  -s "diskcheck_alert"  admin  <  /tmp/disk_check_mail)
    	 fi
    	 read_num=$(expr  $read_num + 1)
    	 done
      ip_num=$(expr  $ip_num + 1)
    done
    ===================写入crontab=====================
    0/10 * * * *   /home/diskcheck.sh   2&>1
    
    


    5、监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告

    #!/bin/bash
    #monitor available disk space
    #提取本服务器的IP地址信息  
    IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`    
    SPACE=` df -hP | awk '{print int($5)}'`
    if [ $SPACE -ge 90 ]
    then
      echo "$IP 服务器 磁盘空间 使用率已经超过90%,请及时处理。"|mail -s "$IP 服务器硬盘告警"   fty89@163.com
    fi


    6、自动ftp上传
       

    #! /bin/bash
        ftp -n << END_FTP
        open 192.168.1.22
        user  test testing      //用户名test  密码:testing
        binary
        prompt  off    //关闭提示
        mput   files     //上传files文件
        close
        bye
        END_FTP


    7、编写shell脚本,获取本机的网络地址。

    比如:本机的ip地址是:
    192.168.100.5/255.255.255.0,
    那么他的网络地址是:
    192.168.100.1/255.255.255.0


    方法一:

    #!/bin/bash
    IP=ifconfig eth0|grep 'inet addr'|sed 's/^.*addr://g'|awk  '{print $1}'
     NETMASK=ifconfig eth0 |grep "inet addr"|sed 's/^.*Mask://g'
    echo "$IP/&NETMASK"
    exit

    方法二:

    #!/bin/bash
     #This script print ip and network
     file="/etc/sysconfig/network-scripts/ifcfg-eth0"
     if [ -f $file ] ;then
         IP=`grep "IPADDR" $file|awk -F"=" '{ print $2 }'`
         MASK=`grep "NETMASK" $file|awk -F"=" '{ print $2 }'`
     echo "$IP/$MASK"
     exit 1
     fi

    IP地址也可这样获取:IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "
    子网掩码:NETMASK= `ifconfig eth0 | grep "inet addr"|cut -f 4 -d ":"


     8、某系统管理员需要每天做一定的重复工作,编制一个解决方案:


    (1).从下午4:50 删除/abc 目录下的全部子目录和全部文件;
    (2).从早上8:00~下午6:00 每小时读取/xyz 目录下x1 文件中每行第一个域的全部数
    据加入到/backup 目录下的back01.txt 文件内;
    (3).每逢周一下午5:50 将/data 目录下的所有目录和文件归档并压缩为文件
    backup.tar.gz;
    (4).在下午5:55 将IDE 接口的CD-ROM 缷载(假设CD-ROM 的设备名为hdc);
    (5).在早上8:00 前开机后启动。
    (a)用vi创建编辑一个名为prgx的crontab文件;
    (b)prgx文件的内容:
                50 16 * * * rm -r /abc/*
                0 8-18/1 * * * cut -f1 /xyz/x1 >>  /backup/bak01.txt
                50 17 * * * tar zcvf backup.tar.gz /data
                55 17 * * * umount /dev/hdc
    (c)由超级用户登录,用crontab执行 prgx文件中的内容:
                root@xxx:#crontab prgx;在每日早晨8:00之前开机后即可自动启动crontab


    9.设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30 


    参考答案: 

    #!/bin/sh 
    i=1 
    groupadd class1 
    while [ $i -le 30 ] 
    do 
    if [ $i -le 9 ] ;then 
    USERNAME=stu0${i} 
    else
    USERNAME=stu${i} 
    fi 
    useradd $USERNAME 
    mkdir /home/$USERNAME 
    chown -R $USERNAME /home/$USERNAME 
    chgrp -R class1 /home/$USERNAME 
    i=$(($i+1)) 
    done


    10.编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。

     
    参考程序: 

    #!/bin/sh 
    i=1 
    while [ $i -le 50 ] 
    do 
    userdel -r stud${i} 
    i=$(($i+1 )) 
    done 

     

    11.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。 

    参考答案:
    (1)编写shell程序fileback: 

    #!/bin/sh 
    DIRNAME=`ls /root | grep bak` 
    if [ -z "$DIRNAME" ] ; then 
    mkdir /root/bak 
    cd /root/bak 
    fi
    BACKETC=$(date +%Y%m%d)_etc.tar.gz 
    tar zcvf  $BACKETC  /etc 
    echo "fileback finished!" 

    (2)编写任务定时器: 


    echo "0 0 1 * * /bin/sh /usr/bin/fileback" >; /root/etcbakcron 
    crontab /root/etcbakcron 
    或使用crontab -e 命令添加定时任务: 
    0 1 * * * /bin/sh /usr/bin/fileback 

     

    12.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做? 

    参考答案:
    (1)第一种方法: 
    用户应使用crontab –e 命令创建crontab文件。格式如下: 
    0 0 * * sun cp –r /user/backup /tmp 
    (2)第二种方法: 
    用户先在自己目录下新建文件file,文件内容如下: 
    0 * * sun cp –r /user/backup /tmp 
    然后执行 crontab file 使生效。 
    13.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 
    参考答案: 建立程序 Pro16如下: 

    #!/bin/sh 
    i=1 
    while [ i -le 50 ] 
      do 
      if [ -d /userdata ];then 
        mkdir -p -m 754 /userdata/user$i   加上-m 754 就不用写下面那一句了  -p 是递归建立目录 
        #chmod 754 /userdata/user$i 
        echo "user$i" 
        let "i = i + 1" (或i=$(($i+1)) 
      else 
        mkdir /userdata 
        mkdir -p -m /userdata/user$i 
    #chmod 754 /userdata/user$i 
        echo "user$i" 
        let "i = i + 1" (或i=$(($i+1)) 
      fi 
    done

     

    展开全文
  • Linux运维常用shell脚本实例

    千次阅读 2019-05-10 15:03:02
    1、用shell脚本批量建立Linux用户 实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码! 脚本实现如下: 说明: Linux下 Passwd有参数--stdin This option ...

    1、用shell脚本批量建立Linux用户

     

    实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码!

     

    脚本实现如下:

     

    说明:

    Linux下 Passwd有参数--stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.  

    所以linux下自动改变用户密码的办法就是:Echo 密码 |passwd –stdin 用户名

     

    说明:
    echo -n 不换行输出:
    $echo -n "123"
    $echo "456"
    最终输出 123456
    而不是
    123
    456
     echo -e 处理特殊字符: \n 换行且光标移至行首

     
    ok,就这么一个简单的脚本,就可以再系统里批量生成账号了。而且密码跟账号的名字一样。
    这就是for do done语句用法。

     

    2、 编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下:

     

     

    3、通过apache访问日志access.log 统计IP和每个地址访问的次数,按访问量列出前10名。

     

    日志格式样例如下:

    192.168.1.247  ---【02/jul/2010:23:44:59 + 8080 】 "GET /HTTP/1/1"   200 19


    答案:
    cat  access.log | awk '{print  $1}' |sort| uniq -c |sort -rn |head -10(uniq 参数说明:– c 显示输出中,在每行行首加上本行在文件中连续出现的次数。


    sort参数说明:sort默认的排序方式是升序,-r 参数就会改变成倒叙;你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。)

     

    4、一台监控主机,一台被监控主机。被监控主机分区使用率大于80%,就发告警邮件。放到crontab里面,每10分钟执行一次。

     

    a、 首先两台机器要建立服务器间的信任关系。

    b、脚本:

     

    5、监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告

     

     

    6、自动ftp上传  

     

     

    7、编写shell脚本,获取本机的网络地址。比如:本机的ip地址是:

     

    192.168.100.5/255.255.255.0,
    那么他的网络地址是:
    192.168.100.1/255.255.255.0

     

    IP地址也可这样获取:IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "
    子网掩码:NETMASK= `ifconfig eth0 | grep "inet addr"|cut -f 4 -d ":"

     

     8、某系统管理员需要每天做一定的重复工作,编制一个解决方案:

     

    (1).从下午4:50 删除/abc 目录下的全部子目录和全部文件;


    (2).从早上8:00~下午6:00 每小时读取/xyz 目录下x1 文件中每行第一个域的全部数;据加入到/backup 目录下的back01.txt 文件内;


    (3).每逢周一下午5:50 将/data 目录下的所有目录和文件归档并压缩为文件;backup.tar.gz;


    (4).在下午5:55 将IDE 接口的CD-ROM 缷载(假设CD-ROM 的设备名为hdc);


    (5).在早上8:00 前开机后启动。
    (a)用vi创建编辑一个名为prgx的crontab文件;
    (b)prgx文件的内容:
    50 16 * * * rm -r /abc/*
    0 8-18/1 * * * cut -f1 /xyz/x1 >>  /backup/bak01.txt
    50 17 * * * tar zcvf backup.tar.gz /data
    55 17 * * * umount /dev/hdc
    (c)超级用户登录,用crontab执行 prgx文件中的内容:
     root@xxx:#crontab prgx;在每日早晨8:00之前开机后即可自动启动crontab

     

    9.设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30 

     

     

    10.编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。 

     

     

    11.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。

     

    参考答案:
    (1)编写shell程序fileback: 

    (2)编写任务定时器: 
    echo "0 0 1 * * /bin/sh /usr/bin/fileback" >; /root/etcbakcron 
    crontab /root/etcbakcron 
    或使用crontab -e 命令添加定时任务: 
    0 1 * * * /bin/sh /usr/bin/fileback 

     

    12.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?

     

    参考答案:
    (1)第一种方法: 
    用户应使用crontab –e 命令创建crontab文件。格式如下: 
    0 0 * * sun cp –r /user/backup /tmp 
    (2)第二种方法: 
    用户先在自己目录下新建文件file,文件内容如下: 
    0 * * sun cp –r /user/backup /tmp 
    然后执行 crontab file 使生效。 

     

    13.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 

    参考答案: 建立程序 Pro16如下: 

     

    END

    碧茂课堂精彩课程推荐:

    1.Cloudera数据分析课;

    2.Spark和Hadoop开发员培训;

    3.大数据机器学习之推荐系统;

    4.Python数据分析与机器学习实战;

    详情请关注我们公众号:碧茂大数据-课程产品-碧茂课堂

    现在注册互动得海量学币,大量精品课程免费送!

    展开全文
  • 1、用shell脚本批量建立Linux用户 实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码! #!/bin/bash for i in `seq 1 50` do  useradd -G student student$i ;  ...

    1、用shell脚本批量建立Linux用户

    实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码!

    #!/bin/bash
    for i in `seq 1 50`
    do
        useradd -G student student$i ; 
        echo student$i | passwd student$i --stdin;
    done

    【脚本实现如下:说明:Linux下 Passwd有参数  --stdin  This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.  所以linux下自动改变用户密码的办法就是:  Echo 密码 |passwd –stdin 用户名】-------------------设置相同的密码------------------------

    #!/bin/bash
    password="123456"
    for USER in user1 user2 user3
    do
         useradd -m $USER
         echo -e "${password}\n${password}" | passwd $USER
    done

     【说明:
         echo -n 不换行输出:
    $echo -n "123"
    $echo "456"
    最终输出 123456
    而不是
    123
    456
        echo -e 处理特殊字符:
            \n 换行且光标移至行首 】 
    ok,就这么一个简单的脚本,就可以再系统里批量生成账号了。而且密码跟账号的名字一样。
    这就是for do done语句用法。

    2、批量创建用户

    #!/bin/bash
    DATE=$(date +%F_%T)
    USER_FILE=user.txt
    echo_color(){
        if [ $1 == "green" ]; then
            echo -e "\033[32;40m$2\033[0m"
        elif [ $1 == "red" ]; then
            echo -e "\033[31;40m$2\033[0m"
        fi
    }
    # 如果用户文件存在并且大小大于0就备份
    if [ -s $USER_FILE ]; then
        mv $USER_FILE ${USER_FILE}-${DATE}.bak
        echo_color green "$USER_FILE exist, rename ${USER_FILE}-${DATE}.bak"
    fi
    echo -e "User\tPassword" >> $USER_FILE
    echo "----------------" >> $USER_FILE
    for USER in user{1..10}; do
        if ! id $USER &>/dev/null; then
            PASS=$(echo $RANDOM |md5sum |cut -c 1-8)
            useradd $USER
            echo $PASS |passwd --stdin $USER &>/dev/null
            echo -e "$USER\t$PASS" >> $USER_FILE
            echo "$USER User create successful."
        else
            echo_color red "$USER User already exists!"
        fi
    done

    3.批量添加组用户

    添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30 
    参考答案: 

    #!/bin/sh 
    i=1 
    groupadd class1 
    while [ $i -le 30 ] 
    do 
    if [ $i -le 9 ] ;then 
    USERNAME=stu0${i} 
    else
    USERNAME=stu${i} 
    fi 
    useradd $USERNAME 
    mkdir /home/$USERNAME 
    chown -R $USERNAME /home/$USERNAME 
    chgrp -R class1 /home/$USERNAME 
    i=$(($i+1)) 
    done

    4.批量删除用户

    实现自动删除50个账号的功能。账号名为stud1至stud50。 
    参考脚本: 

    #!/bin/sh 
    i=1 
    while [ $i -le 50 ] 
    do 
    userdel -r stud${i} 
    i=$(($i+1 )) 
    done 

    5.批量修改用户密码

    旧密码SSH主机信息old_info文件:

    #     ip     user    passwd    port
    192.168.18.217  root    123456     22
    192.168.18.218  root    123456     22

    修改密码脚本:

    #!/bin/bash
    OLD_INFO=old_info
    NEW_INFO=new_info
    for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do
        USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)
        PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)
        PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)
        NEW_PASS=$(mkpasswd -l 8)
        echo "$IP   $USER   $NEW_PASS   $PORT" >> $NEW_INFO
        expect -c "
        spawn ssh -p$PORT $USER@$IP
        set timeout 2
        expect {
            \"(yes/no)\" {send \"yes\r\";exp_continue}
            \"password:\" {send \"$PASS\r\";exp_continue}
            \"$USER@*\" {send \"echo \'$NEW_PASS\' |passwd --stdin $USER\r exit\r\";exp_continue}
        }"
    done 

    生成新密码new_info文件:

    192.168.18.217  root    n8wX3mU%        22
    192.168.18.218  root    c87;ZnnL        22

    作为一个系统管理员,可能要经常的为机器添加用户,可能是在一台机器上添加很多用户,也有可能是在很多机器上要添加同一个用户。

    基本上,批量添加用户有两种方式,一是用useradd + passwd命令配合脚本来添加,二是用newusers+chpasswd来添加。

    第一个方法合适用来在不同的机器上添加不同的用户,或者在同一台机器上添加大量的规则命名的用户。第二个方法可用于在同一台机器上添加大量的用户名单,如将A机上的用户全部添加到B机上。

    方法一:useradd + passwd命令配合脚本来添加

    其中users.list文件内容如下:

    johnson
    lily
    kelly

    执行结果如下图所示:

    由脚本知,用户的初始密码被设为用户名+123,大家可以按需修改使用。

    方法二、使用while语句

    #!/bin/bash
    user_info=/root/adduser.txt
    useradd=/usr/sbin/useradd
    passwd=/usr/bin/passwd
    cut=/bin/cut
    while read lines
    do
        username=`echo $lines | $cut -f1 -d' '`
        password=`echo $lines | $cut -f2 -d' '`
        $useradd $username
        if [ $? -ne 0 ];then
            echo "$username cunzai,bunengxiugaimima"
        else
            echo $password | $passwd
        fi
    done < $user_info
    其中adduser.txt存的文件为

    username001 password001
    username002 password002
    username003 password003
    username004 password004

    方法三、newusers+chpasswd批量添加用户

    1、首先我们创建用户文件和密码文件;

    我们要创建包含新用户的文件userfile.txt ;另一个是为新添加的用户设置密码的userpwdfile.txt;

    [root@localhost ~]# touch userfile.txt
    [root@localhost ~]# touch userpwdfile.txt

    然后用文本编辑器打开文件userfile.txt,添加如下内容;

    win00:x:520:520::/home/win00:/sbin/nologin
    win01:x:521:521::/home/win01:/sbin/nologin
    win02:x:522:522::/home/win02:/sbin/nologin
    win03:x:523:523::/home/win03:/sbin/nologin
    win04:x:524:524::/home/win04:/sbin/nologin
    win05:x:525:525::/home/win05:/sbin/nologin
    win06:x:526:526::/home/win06:/sbin/nologin
    win07:x:527:527::/home/win07:/sbin/nologin
    win08:x:528:528::/home/win08:/sbin/nologin
    win09:x:529:529::/home/win09:/sbin/nologin

    userfile.txt 文件内容格式和 /etc/passwd 的格式是一样的,必须严格按照/etc/passwd 的格式来书写;上面所添加的用户都不能登录系统,但完全能用于ftp登录,但您得在相应ftp服务器的配置文件中打开让本地用户有读写权限;如果您想让上面的部份用户可以登录系统,可以把SHELL类似改一改,比如改成/bin/bash ;

    我们再来书写新增用户的密码文件userpwdfile.txt内容;这个文件的内容中的用户名要与 userfile.txt用户名相同且严格按照“用户名:密码”的格式来写,一个用户一行;也就是说我们先是添加了win00到win09的用户,现在要为这些用户更新密码;比如下面的;

    win00:123456
    win01:654321
    win02:123321
    win03:qweewq
    win04:google
    win05:adadwc
    win06:wsscee
    win07:xxec32
    win08:543wew
    win09:3ce3wf

    2、用newusers批量添加用户,此时用户是没有密码的

    [root@localhost ~]# newusers userfile.txt

    2、执行命令/usr/sbin/pwunconv,将/etc/shadow产生的shadow密码解码,然后回写到/etc/passwd中, 并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消shadow password功能,关闭影子文件。

    [root@localhost ~]# pwunconv

    3、 用chpasswd批量修改密码
    [root@localhost ~]# chpasswd < userpwdfile.txt

    4、最后不要忘了恢复影子文件,保证安全,您可以通过下面的命令来映射到 /etc/shadow文件名

    [root@localhost ~]# pwconv

    6、批量权限控制脚本

    设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 
    如下: 

    #!/bin/sh 
    i=1 
    while [ i -le 50 ] 
    do 
    	if [ -d /userdata ];then 
    		mkdir -p -m 754 /userdata/user$i   加上-m 754 就不用写下面那一句了  -p 是递归建立目录 
    		#chmod 754 /userdata/user$i 
    		echo "user$i" 
    		let "i = i + 1" (或i=$(($i+1)) 
    	else 
    		mkdir /userdata 
    		mkdir -p -m /userdata/user$i 
    		#chmod 754 /userdata/user$i 
    		echo "user$i" 
    		let "i = i + 1" (或i=$(($i+1)) 
    	fi 
    done

     

    展开全文
  • Shell程序fileback存放在/usr/bin目录下。  (1)编写shell程序fileback:  #!/bin/sh  DIRNAME=`ls /root | grep bak`  if [ -z "$DIRNAME" ] ; then  mkdir /root/bak  cd /root/bak  fi BACKETC...

    1、判断crond进程是否运行

    #!/bin/bash
    NAME=crond
    NUM=$(ps -ef |grep $NAME |grep -vc grep)
    if [ $NUM -eq 1 ]; then
        echo "$NAME running."
    else
        echo "$NAME is not running!"
    fi

    2.crontab操作

    某系统管理员需要每天做一定的重复工作,编制一个解决方案:
    (1).从下午4:50 删除/abc 目录下的全部子目录和全部文件;
    (2).从早上8:00~下午6:00 每小时读取/xyz 目录下x1 文件中每行第一个域的全部数
    据加入到/backup 目录下的back01.txt 文件内;
    (3).每逢周一下午5:50 将/data 目录下的所有目录和文件归档并压缩为文件
    backup.tar.gz;
    (4).在下午5:55 将IDE 接口的CD-ROM 缷载(假设CD-ROM 的设备名为hdc);
    (5).在早上8:00 前开机后启动。
    (a)用vi创建编辑一个名为prgx的crontab文件;
    (b)prgx文件的内容:
                50 16 * * * rm -r /abc/*
                0 8-18/1 * * * cut -f1 /xyz/x1 >>  /backup/bak01.txt
                50 17 * * * tar zcvf backup.tar.gz /data
                55 17 * * * umount /dev/hdc
    (c)由超级用户登录,用crontab执行 prgx文件中的内容:
                root@xxx:#crontab prgx;在每日早晨8:00之前开机后即可自动启动crontab

    3、contab操作案例

    在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。 
    (1)编写shell程序fileback: 

    #!/bin/sh 
    DIRNAME=`ls /root | grep bak` 
    if [ -z "$DIRNAME" ] ; then 
    mkdir /root/bak 
    cd /root/bak 
    fi
    BACKETC=$(date +%Y%m%d)_etc.tar.gz 
    tar zcvf  $BACKETC  /etc 
    echo "fileback finished!" 

    (2)编写任务定时器: 
    echo "0 0 1 * * /bin/sh /usr/bin/fileback" >; /root/etcbakcron 
    crontab /root/etcbakcron 
    或使用crontab -e 命令添加定时任务: 
    0 1 * * * /bin/sh /usr/bin/fileback 

    4、contab操作案例

    有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做? 
    (1)第一种方法: 
    用户应使用crontab –e 命令创建crontab文件。格式如下: 
    0 0 * * sun cp –r /user/backup /tmp 
    (2)第二种方法: 
    用户先在自己目录下新建文件file,文件内容如下: 
    0 * * sun cp –r /user/backup /tmp 
    然后执行 crontab file 使生效。 

    展开全文
  • 方法3:将expect脚本独立出来 login.exp登录文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
  • 编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下: #!/bin/bash for FILE in `ls /usr/local/test` do if [ -f $FILE ] ; then if [ `ls -l $FILE | awk `{print $5}` -gt 100000 ] ;...
  • Linux运维常用Shell脚本(带注解)[日期:2012-12-13]来源:Linux社区作者:wgkgood[字体:大 中 小]在Linux日常运维中,shell脚本是每个IT运维人员必备的利器,熟练编写生产环境的shell脚本,能帮助我们更轻松,更...
  • 运维常用shell脚本

    千次阅读 2018-04-26 09:44:36
    1、用shell脚本批量建立Linux用户实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码!脚本实现如下:#!/bin/bashfor i in `seq 1 50`do useradd -G student student$i...
  • LInux系统日常运维过程中,经常需要在本地运行脚本执行对远程主机的命令,正常情况下,ssh登录远程服务器时会提示输入密码,这会影响到脚本的自动执行(因为shell脚本中没有自动填充密码的命令)。有三个解决办法: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,008
精华内容 10,403
关键字:

linux运维常用shell脚本

linux 订阅