整理的6个Linux运维脚本

1、统计/etc/passwd 中能登录的用户,并将对应在/etc/shadow 中第二列密码提取

###统计当前 Linux 系统中可以登录的账户有多少个
grep "bash$" /etc/passwd | wc -l
或者
awk -F: '/bash$/{print $1}' /etc/passwd
——————————
###将对应在/etc/shadow 中第二列密码提出处理
user=$(awk -F: '/bash$/{print $1}' /etc/passwd)
for i in $user
do
awk -F: -v x=$i '$1==x{print $1,$2}' /etc/shadow
done

输出结果:

在这里插入图片描述

2、查看当前连接到本机的远程IP地址

netstat -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq

这个命令的含义是:
netstat -tn:显示所有TCP连接的详细信息。
awk '{print $5}':提取输出中的第五列,即远程IP地址和端口号。
cut -d: -f1:使用冒号作为分隔符,只提取IP地址部分。
sort:对IP地址进行排序。
uniq:去除重复的IP地址。
——————————

netstat -atn  |  awk  '{print $5}'  | awk  '{print $1}' | sort -nr  |  uniq -c

这个命令的含义是:
netstat -atn:显示当前系统的所有网络连接,包括TCP和UDP协议的连接。
awk ‘{
    
    print $5}’:使用awk命令提取netstat命令输出的结果中的第5列,该列显示了与当前系统建立连接的远程主机的IP地址和端口号。
awk ‘{
    
    print $1}’:使用awk命令进一步提取第5列中的IP地址部分,去除端口号。
sort -nr:对提取出的IP地址进行排序,-n参数表示按照数字大小排序,-r参数表示降序排序。
uniq -c:统计并去除重复的IP地址,并计算每个IP地址的出现次数。

输出结果:

在这里插入图片描述

3、检测本机当前用户是否为超级管理员(root)

#!/bin/bash

# 检查当前用户是否为root用户
if [ $(id -u) -eq 0 ]; then
    echo "当前用户是超级管理员(root)"
else
    echo "当前用户不是超级管理员"
fi

输出结果:

在这里插入图片描述

4、检查指定目录下是否存在对应文件

#!/bin/bash

# 指定目录
directory="/path/to/directory"

# 检查文件是否存在
if [ -e "$directory/filename" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

——————————
或者使用:
#!/bin/bash
 
if [ -f /path/to/directory/filename ]
then 
echo "File exists"
fi

输出结果:

在这里插入图片描述

5、查找 Linux 系统中的僵尸进程

#!/bin/bash
#awk 判断 ps 命令输出的第 8 列为 Z 是,显示该进程的 PID 和进程命令
ps aux | awk ‘{
    
    if($8 ==Z){
    
    print $2,$11}}’

该命令的作用是:

通过ps aux命令获取系统中所有进程的详细信息,并将输出结果通过管道传递给awk命令进行处理。
在awk命令中,通过if条件判断进程的状态是否为”Z”(僵尸进程),如果是,则打印出进程的ID和进程名。

输出结果:

在这里插入图片描述

6、获取本机 MAC 地址

ip a s |awk 'BEGIN{
    
    print "本机 MAC 地址信息如下:"}/^[0-9]/{
    
    print $2;getline;if($0~/link\/ether/){
    
    print 
$2}}' |grep -v lo:

该命令用于查看本机的MAC地址信息。具体解释如下:

ip a s:显示网络接口的配置信息。
awk 'BEGIN{
    
    print "本机 MAC 地址信息如下:"}:在输出之前,打印出提示信息。
/^[0-9]/{
    
    print $2;getline;if($0~/link\/ether/){
    
    print $2}}':对每一行进行匹配和处理。
/^[0-9]/:匹配以数字开头的行,即网络接口的行。
{
    
    print $2}:打印出第二列,即网络接口的名称。
getline:读取下一行。
if($0~/link\/ether/):如果当前行包含”link/ether”,则执行以下语句。
{
    
    print $2}:打印出第二列,即MAC地址。
grep -v lo::过滤掉包含”lo:”的行,即排除本地回环接口的信息。

输出结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41840843/article/details/132040186