拿来就用的Shell脚本实现

前言

日常运维中经常出现一些关于系统功能维护,例如获得Linux系统用户列表,文本内容行diff,检查IP是否能ping通,在系统中创建新用户等。如下的几个常见脚本能帮助大家快速实现类似功能。

1. 获得Linux系统用户列表

该脚本用于读取Linux系统/etc/passwd文件中的所有/bin/bash作为登录默认Shell的用户列表,并提取每个用户的用户名。

对于这些用户名进行检查,是否不等于roottidb。如果用户名不等于roottidb,则使用usermod命令对该用户的默认Shell修改为:/sbin/nologin,它通常用于禁止用户远程登录系统。

#!/bin/bash
for user in $(cat /etc/passwd | grep /bin/bash | cut -d ":" -f 1)
do
    if [ $user != "root" ] && [ $user != "tidb" ]; then
        usermod -s /sbin/nologin $user
    fi
done

2. 文本内容行diff

该脚本首先自定义了md5_listmd5_no_hash.txt两个文件,然后循环读取md5_list文件中每一行的哈希值,判断是否在md5_no_hash.txt文件中存在。

如果检查出哈希值在md5_no_hash.txt中存在,则打印信息:MD5值 xxx 在 md5_no_hash.txt 中存在。

#!/bin/bash  

# 指定md5_list文件和md5_no_hash.txt文件的路径  
md5_list_file="md5_list"
md5_no_hash_file="md5_no_hash.txt"

# 循环读取md5_list文件中的每一行  
while IFS= read -r md5; do
    # 检查md5是否在md5_no_hash.txt中  
    if grep -q "$md5" "$md5_no_hash_file"; then
        echo "MD5值 $md5 在 $md5_no_hash_file 中存在"  
    else
        echo "MD5值 $md5 在 $md5_no_hash_file 中不存在"  
    fi
done < "$md5_list_file"

3. 检查IP是否能ping通

该脚本的主要功能是:遍历读取一个包含IP地址的文件,如该文件名为:mmyd,然后对该文件里的每行IP地址执行ping操作,并检查丢包率。如果ping的丢包率为:100%,则输出该IP不可达的日志;如果ping不存在丢包率,则输出该IP可达的日志。

#!/bin/bash  
# author:JackTian
# 获取当前系统时间  
current_time=$(date +"%Y-%m-%d-%H:%M:%S")
# 获取开始时间戳  
start_time=$(date +%s)

for i in `cat mmyd`  # 这个是逐个读取该文件里的全部所列出的 IP 地址
do
  ping=`ping -c 10 $i | grep loss | awk '{print $6}' | awk -F "%" '{print $1}'`
  # 上面一行是对读出来的ip ping一次,看是否ping通。并取出loss的百分比的值 也就是丢包的值,看是否丢包
  Packet_Loss_Rate=`ping -c 10 $i | grep loss | awk '{print $6}'`

  if [ $ping -eq 100 ];then
  # 比较一下,看丢包的值是不是100,如果是100就是全部丢包,那就是没ping通,那就显示 IP ping 失败了,如果不等于100的话,就ping通了,就显示 IP ping 成功了。
    echo "$current_time 某某移动-活跃 IP 地址:$i ping 失败了,丢包率为:$Packet_Loss_Rate" >>/opt/jacktian/mmyd_ping.log
  else
    echo "$current_time 某某移动-活跃 IP 地址:$i ping 成功了!" >>/opt/jacktian/mmyd_ping.log
  fi
done

# 获取结束时间戳  
end_time=$(date +%s)

# 计算执行时间(秒)  
execution_time_seconds=$((end_time - start_time))

# 将执行时间转换为分钟和秒  
minutes=$((execution_time_seconds / 60))
seconds=$((execution_time_seconds % 60))

echo "执行完毕!该脚本执行时间共: $minutes 分钟 $seconds 秒"

4. 系统中创建新用户

该脚本用于在Linux系统中创建新用户,并为该用户设置密码、省份代码、目录权限以及vsftpd服务的配置。

#!/bin/sh

read -p "user:" user
read -p "passd:" pass
read -p "province:" province

useradd $user -d /bigdata/sftp/province/$province/

#passwd $user
echo $pass | passwd --stdin $user

chown $user /bigdata/sftp/province/$province/ -R

chmod 750 /bigdata/sftp/province/$province/ -R

echo $user>>/etc/vsftpd/chroot_list

echo $user>>/etc/vsftpd/user_list

systemctl restart vsftpd.service
  • read -p "user:" user:提示用户输入一个用户名,并将输入的值存储在变量user

  • read -p "passd:" pass:提示用户输入一个密码,并将输入的值存储在变量pass中。注意:在输入密码时,不会显示任何字符。

  • read -p "province:" province:提示用户输入一个省份代码,并将输入的值存储在变量province

  • useradd $user -d /bigdata/sftp/province/$province/:该命令将创建一个新用户,其用户名为之前输入的user,其家目录为:/bigdata/sftp/province/$province/

  • echo $pass | passwd --stdin $user:该命令会将之前输入的密码通过标准输入传给passwd命令,为新创建的用户设置密码

  • chown $user /bigdata/sftp/province/$province/ -R:该命令将更改新创建用户成为/bigdata/sftp/province/$province/目录及其子目录的所有者

  • chmod 750 /bigdata/sftp/province/$province/ -R:该命令会设置/bigdata/sftp/province/$province/目录及其子目录的权限为:750,也就是指:用户有读、写、执行的权限,而用户组只有读和执行的权限

  • echo $user>>/etc/vsftpd/chroot_list:该命令会将新创建的用户添加到vsftpd服务的chroot列表中。这表示当vsftpd服务在运行时,该用户会被限制在其自己的目录中,不能访问系统的其他目录

  • echo $user>>/etc/vsftpd/user_list:该命令会将新创建的用户添加到vsftpd服务的用户列表中。这表示当vsftpd服务在运行时,这个用户可以登录并访问系统。

  • systemctl restart vsftpd.service:重启vsftpd服务,使之前的所有配置生效

关于我
loading