linux运维常用命令(持续更新 2024-12)
一提到 Linux,许多人都会说到“自由”,但我不认为他们都知道“自由”的真正涵义。“自由”是一种权力,它决定你的计算机能做什么,同时能够拥有这种“自由”的唯一方式就是知道计算机正在做什么。“自由”是指一台没有任何秘密的计算机,你可以从它那里了解一切,只要你用心的去寻找。
目录
三:在B机器查看是否可以访问A机器某个端口,查看端口是否开放
十九:统计当前 Linux 系统中可以登录计算机的账户有多少个
二十一:实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
一: 查看指定端口是否被监听
netstat -nltp |grep 9030
二:查看某个端口/服务相关进程
ps -ef |grep 9030
三:在B机器查看是否可以访问A机器某个端口,查看端口是否开放
telnet A服务器IP A服务器端口
四:查看端口占用列表
netstat -ntulp
五:查看端口占用情况
lsof -i :80
六:查看哪些进程监听了2181端口
netstat -nap |grep 2181 | awk '{print $7}' | sort
七:查看已删除却没有释放的进程
lsof -n / |grep deleted
八:查看cpu占用前10行情况
ps -aux --sort=-pcpu|head -10
九:查看服务器内存占用前十行相关进程
ps -aux | sort -k4nr | head -10
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less
十:查看网络带宽,流量监控
十一:查看TCP请求中各个状态的数据,如timewait
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}';netstat -nat |wc -l
十二:启动docker所有容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
十三:查看当前目录下文件夹的大小,1代表第一层
sudo du -h --max-depth=1
update20240829:如果想排除根目录下比如/data、/mnt 这些已知较大的目录,可以使用 --exclude函数:
sudo du -h --max-depth=1 --exclude='./data' --exclude='./mnt' --exclude='./proc'
十四:查询大于100M的文件
find / -type f -size +100000k -ls
十五:查看最近两个小时生成的文件
find / -iname "*" -amin 120 -type f
十六:删除指定目录下大于指定天数的日志。
例如,要删除/data/bigdata/download 目录下 文件时间在3天之前的日志
cd "/data/bigdata/download/" && ls -tF |grep '/$'|awk '{if (NR > 3) print $0 }'|xargs rm -rf
运行截图:
十七:查看日志文件中并发量,可以知道程序性能如何
运行原理:查看日志文件并发量可分为两个命令,第一个命令使用awk去逐行的处理文本文件,例如我的日志格式是:
2023-06-29 14:49:57,243 INFO (Thread-56|102) [ReportHandler.diskReport():381] begin to handle disk report from backend 11002
那么使用awk 按照 ',' 分隔符逐行取出来第一个参数下载到一个新的文件。
第二个命令将新文件按照每行的内容进行统计分组降序。最后得到日志文件中的并发情况。
cat fe.log.20230628-1 |awk -F ',' '{print $1 > "message_time.txt" }'
cat message_time.txt | xargs -n1 | sort | uniq -c | sort -rn -k1 | awk '{print $2,$1}' | head -n 10 | tail -n +1
运行截图:
十八:查看有多少远程IP在连接本机
netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr | uniq -c
十九:统计当前 Linux 系统中可以登录计算机的账户有多少个
#如果去掉 |wc -l 就是输出列表
grep "bash$" /etc/passwd | wc -l
二十:定时备份日志目录下所有日志文件
#可以配合crontab设置定时
tar -czf log-`date +%Y%m%d`.tar.gz /var/log
二十一:实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
#!/bin/bash
# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
# 提取根分区剩余空间
disk_size=$(df / | awk '/\//{print $4}')
# 提取内存剩余空空间
mem_size=$(free | awk '/Mem/{print $4}')
while :
do
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
if [ $disk_size -le 512000 -a $mem_size -le 1024000 ]
then
mail ‐s "Warning" root <<EOF
Insufficient resources,资源不足
EOF
fi
done
二十一:根据PID过滤进程所有信息
#! /bin/bash
# Author:李指导
# Date:2023-06-30
# Function: 根据用户输入的PID,过滤出该PID所有的信息
read -p "请输入要查询的PID: " P
n=`ps -aux| awk '$2~/^'$P'$/{print $11}'|wc -l`
if [ $n -eq 0 ];then
echo "该PID不存在!!"
exit
fi
echo "--------------------------------"
echo "进程PID: $P"
echo "进程命令:`ps -aux| awk '$2~/^'$P'$/{print $11}'`"
echo "进程所属用户: `ps -aux| awk '$2~/^'$P'$/{print $1}'`"
echo "CPU占用率:`ps -aux| awk '$2~/^'$P'$/{print $3}'`%"
echo "内存占用率:`ps -aux| awk '$2~/^'$P'$/{print $4}'`%"
echo "进程开始运行的时刻:`ps -aux| awk '$2~/^'$P'$/{print $9}'`"
echo "进程运行的时间:`ps -aux| awk '$2~/^'$P'$/{print $10}'`"
echo "进程状态:`ps -aux| awk '$2~/^'$P'$/{print $8}'`"
echo "进程虚拟内存:`ps -aux| awk '$2~/^'$P'$/{print $5}'`"
echo "进程共享内存:`ps -aux| awk '$2~/^'$P'$/{print $6}'`"
echo "--------------------------------"
二十二:根据进程名过滤进程信息
#! /bin/bash
# Author:李指导
# Date:2023-06-30
# Function: 根据输入的程序的名字过滤出所对应的PID,并显示出详细信息,如果有几个PID,则全部显示
read -p "请输入要查询的进程名:" NAME
N=`ps -aux | grep $NAME | grep -v grep | wc -l` ##统计进程总数
if [ $N -le 0 ];then
echo "该进程名没有运行!"
fi
i=1
while [ $N -gt 0 ]
do
echo "进程PID: `ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $2}'`"
echo "进程命令:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'`"
echo "进程所属用户: `ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $1}'`"
echo "CPU占用率:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $3}'`%"
echo "内存占用率:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $4}'`%"
echo "进程开始运行的时刻:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $9}'`"
echo "进程运行的时间:` ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'`"
echo "进程状态:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $8}'`"
echo "进程虚拟内存:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $5}'`"
echo "进程共享内存:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $6}'`"
echo "***************************************************************"
let N-- i++
done
二十三:清除系统缓存、空出更多内存
free -m && sync && echo 1 > /proc/sys/vm/drop_caches && echo 2 > /proc/sys/vm/drop_caches && echo 3 > /proc/sys/vm/drop_caches && echo 4 > /proc/sys/vm/drop_caches && sync && free -m
运行截图:
二十四:kill -9 杀不死进程
查看是否有僵尸进程,如果有,kill掉该进程的父进程
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
二十五:根据关键词找到在哪个文件内容中
grep '9f82164b10d044bd-b1cdeb575153de91' /path/to/fe/log/fe.audit.log
二十六:查看特定时间内生成的文件
查看/mnt/error_log目录下最近2分钟产生的文件
find /mnt/error_log -type f -mmin -2
二十七:linux 定时删除文件夹下的文件
#编写一个指定文件夹内只保留7天文件,超过七天自动删除的脚本; 路径和时间为 可变参数
[root@localhost util]# vi /data/util/AutoFileCleaner.sh
#!/bin/bash
# *************************************
# ScriptName: AutoFileCleaner.sh
# pwd: /data/util
# @Author: bigdata_lizexin@163.com
# @Create: 2024/11/25
# @Version: v1.0
# @Description: 删除指定路径下指定天数之前的文件
# *************************************
# 检查输入参数
if [ "$#" -ne 2 ]; then
echo "用法: $0 <路径> <天数>"
exit 1
fi
# 获取参数
TARGET_DIR=$1
DAYS=$2
# 检查路径是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 指定的路径不存在: $TARGET_DIR"
exit 1
fi
# 记录开始时间
START_TIME=$(date +%s)
echo "开始时间: $(date +"%Y-%m-%d %H:%M:%S")"
# 删除指定天数之前的文件
find "$TARGET_DIR" -type f -mtime +$DAYS -exec rm -f {} \;
# 删除空目录
find "$TARGET_DIR" -type d -empty -exec rmdir {} \;
# 记录结束时间
END_TIME=$(date +%s)
echo "结束时间: $(date +"%Y-%m-%d %H:%M:%S")"
# 计算并打印运行时长
DURATION=$((END_TIME - START_TIME))
echo "运行时长: ${DURATION} 秒"
# 输出结果
echo "已删除 $DAYS 天之前的文件,路径: $TARGET_DIR"
#赋值权限
[root@slave2 dowload]# chmod 777 /data/util/AutoFileCleaner.sh
#运行时输入路径和保留时间参数
[root@slave2 dowload]# /data/util/AutoFileCleaner.sh /data/kettle-shell/dowload 7
#加入定时脚本
[root@localhost util]# crontab -l
0 23 * * * /data/util/AutoFileCleaner.sh /data/kettle-shell/dowload 7 >> /data/util/AutoFileCleaner.log 2>&1
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)