Linux常用语句
进程
ps -ef 查看所有进程
ps -ef|grep ssh 过滤查看ssh进程
ps -ef|grep nginx 过滤查看nginx进程
ps -ef|grep keepalived 过滤查看keepalived进程
IP
ip a 查看IP
keepalived
systemctl start keepalived 启动keepalived
systemctl stop keepalived 关闭keepalived
systemctl restart keepalived 重启keepalived
keepalived -v 查看版本号
keepalived配置文件路径:/etc/keepalived/keepalived.conf
VIM
:%d 删除整个编辑缓冲区。
NGINX
sudo vim /etc/nginx/nginx.conf 管理员权限编辑文件
nginx start 启动Nginx
sudo service nginx start 启动Nginx
nginx stop 停止Nginx
nginx -t 检查配置文件
nginx -s reload 重新加载配置文件,nginx是支持热部署的,意思就是可以在不停止服务的情况下进行更新部署。
sudo service nginx restart Nginx服务重启,重启前记得先检查配置文件,不然服务会先关闭,再去检查文件
nginx -v 查看nginx版本号
NGINX日志分析
统计IP的
awk '{print $1}' /var/log/nginx/host/host.access-2020-08-29.log | sort | uniq -c | sort -nr | head -10
统计错误码的
awk '{print $9}' /var/log/nginx/host/host.access-2020-08-29.log | sort | uniq -c | sort -nr | head -10
统计请求响应时间超过10s的记录
awk '($NF > 10){print $0}' /var/log/nginx/host/host.access-2020-08-29.log | sort -rk3 | head -10
根据Tab分隔符分隔统计最后一个参数统计每小时请求响应时间超过3s,空的是80端口的记录,结合find 查找 /var/log/nginx下 所有文件名包含2024-05-28的文件,find结合awk 必须包含 {} \
sudo find /var/log/nginx -type f -name "*2024-05-28.log" -exec awk '($NF > 3){print $3,$5}' {} \; | awk -F: '{count[$1" "$2]++} END {for (hour in count) print hour,"\t",count[hour]}' | sort -rk1 | head -10
根据Tab分隔符分隔统计最后一个参数统计每小时每个端口请求响应时间超过3s,空的是80端口的记录,结合find 查找 /var/log/nginx下 所有文件名包含2024-05-28的文件,find结合awk 必须包含 {} \
sudo find /var/log/nginx -type f -name "*2024-05-28.log" -exec awk '($NF > 3){print $3,$5}' {} \; | awk -F: '{count[$1" "$2"\t"$5]++} END {for (hour in count) print hour,"\t", count[hour]}' | sort -rk1 | head -100
sudo find /var/log/nginx -type f -name "*2024-05-15.log" -exec awk '($NF > 3){print $3,$5}' {} \; | awk -F: '{count[$1" "$2"\t"$5]++} END {for (hour in count) print hour,"\t", count[hour]}' | sort -rk1 > 2024-05-15每小时每个端口请求响应时间超过3s,空的是80端口的统计.tx
根据Tab分隔符分隔统计最后一个参数统计每小时每个端口请求响应时间超过3s,空的是80端口的记录,结合find 查找 /var/log/nginx下 所有文件名包含2024-05-28的文件,文件夹名称包含端口号50820,find结合awk 必须包含 {} \
sudo find /var/log/nginx/*50820* -type f -name "*2024-05-28.log" -exec awk '($NF > 3){print $3,$5}' {} \; | awk -F: '{count[$1" "$2"\t"$5]++} END {for (hour in count) print hour,"\t", count[hour]}' | sort -rk1 | head -100
根据Tab分隔符分隔统计最后一个参数统计每小时每个端口每个URL请求响应时间超过3s,空的是80端口的记录,结合find 查找 /var/log/nginx下 所有文件名包含2024-05-28的文件,find结合awk 必须包含 {} \
sudo find /var/log/nginx -type f -name "*2024-05-28.log" -exec awk '($NF > 3){print $3,$5,"\t",$7}' {} \; | awk -F: '{count[$1" "$2"\t"$5]++} END {for (hour in count) print hour,"\t", count[hour]}' | sort -rk1 | head -100
根据Tab分隔符分隔统计最后一个参数统计端口每个IP请求响应时间超过3s,空的是80端口的记录,结合find 查找 /var/log/nginx下 所有文件名包含2024-05-28的文件,find结合awk 必须包含 {} \
sudo find /var/log/nginx/*50820* -type f -name "*2024-05-31.log" -exec awk '($NF > 5){print $3,$5,$1}' {} \; | awk -F: '{count[$1" "$2":"$3"\t"$5]++} END {for (hour in count) print hour,"\t", count[hour]}' | sort -rk1 > 50820_2024-05-31截止10点43每分钟每个IP超5s数量.log
Nginx统计请求响应时间超过3秒的每小时数量,过滤指定时间段
多文件联合:
sed -n '/23\/May\/2024:00:*/,/27\/May\/2024:12:59:59/p' /var/log/nginx/host.interface50820/host.interface.access-2024-05-23.log /var/log/nginx/host.interface50820/host.interface.access-2024-05-24.log /var/log/nginx/host.interface50820/host.interface.access-2024-05-25.log /var/log/nginx/host.interface50820/host.interface.access-2024-05-26.log /var/log/nginx/host.interface50820/host.interface.access-2024-05-27.log | awk '($NF > 3){print $3}' | awk -F: '{count[$1" "$2]++} END {for (hour in count) print hour, count[hour]}' | sort -rk1 | head -1000
单文件
sed -n '/27\/May\/2024:00:*/,/27\/May\/2024:12:59:59/p' /var/log/nginx/host.interface50820/host.interface.access-2024-05-27.log | awk '($NF > 3){print $3}' | awk -F: '{count[$1" "$2]++} END {for (hour in count) print hour, count[hour]}' | sort -rk1 | head -1000
根据Tab分隔符分隔统计第15参数请求响应时间超过10s的记录
awk -F '\t' '($15 > 10){print $0}' "/var/log/nginx/host.interface50830/host.interface.access-2021-11-10.log" | sort -rk3 | head -10
简单统计nginx访问日志access log每分钟请求数
awk -F: '{count[$2":"$3]++} END {for (minute in count) print minute, count[minute]}' /var/log/nginx/host/host.access-2020-08-29.log | sort > count.log
统计nginx每秒请求数,结合find 查找 /var/log/nginx下 所有文件名包含2024-05-28的文件,find结合awk 必须包含 {} \
sudo find /var/log/nginx -type f -name "*2024-05-28.log" -exec awk '{print $3}' {} \;| awk -F: '{count[$2":"$3":"$4]++} END {for (minute in count) print minute, count[minute]}'| sort -n -rk1 > 20240528RequestForSeconds.log
简单统计nginx访问日志access log每分钟请求数
将 文件中第二列进行反向排序,按照数字进行排序,并获取前几位
-r 反向排序
awk -F: '{count[$2":"$3]++} END {for (minute in count) print minute, count[minute]}' /var/log/nginx/host/host.access-2020-08-29.log | sort -n -rk2 | head -10
统计不同状态码,不同响应后端前10数量
awk -F '\t' '{print $6,",",$12}' "/var/log/nginx/host/host.access-2020-08-29.log" | sort | uniq -c | sort -nr | head -10
参考统计:https://blog.csdn.net/yangshuai518/article/details/112981327
参考awk,sort:
https://blog.51cto.com/u_14449524/2442177
获取前后行,过滤关键字:https://blog.csdn.net/weixin_42515313/article/details/112490183
文件/文件夹
rm -rf 文件夹路径 删除文件夹
rm 文件路径 删除文件
rm -rf * 表示删除当前目录下的所有文件。
“rm”命令的一般形式为:
如果没有使用“- r”选项,则rm不会删除目录。
该命令的各选项含义如下:
“- f ”忽略不存在的文件,强制删除,不给出提示。
“- r” 指示rm将参数中列出的全部目录和子目录均递归地删除。
“- i ”进行交互式删除。
使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。为了防止这种情况的发生,可以使用“i”选项来逐个确认要删除的文件。如果用户输入“y”,文件将被删除。
truncate -s 0 file 清空文件
truncate命令可以将文件缩减或扩展至指定大小。-s 选项是指定文件大小,不足用0填充,多余则从末尾删除。这里指定size为0,则是清空文件
创建文件夹:
mkdir /var/log/nginx/host.interface/
查看系统整体空间剩余情况
df -h
查看每个文件夹的占用情况
du -sh *
查看每个文件夹的占用情况,排序
du -sh * | sort -nr
查找文件,30天前,后缀.log,并且文件名不包含.error.log
find /var/log/nginx/host.interface/ -mtime +30 -name "*.log" ! -name "*.error.log";
查找文件,30天前,后缀.log,并且文件名不包含.error.log,并删除这些文件
find /var/log/nginx/host.interface/ -mtime +30 -name "*.log" ! -name "*.error.log" -exec rm {} \;
查找文件,30天前,后缀.log,并且文件名不包含.error.log,并删除这些文件不提示
find /var/log/nginx/host.interface/ -mtime +10 -name "*.log" ! -name "*.error.log" -exec rm -rf {} \;
查看文件
tail -f 实时查看日志文件 tail -f 日志文件log
tail -f -n 100 catalina.out linux查看日志后100行
搜寻字符串
grep 搜寻字符串 filename
根据行号查看前后的行:
cat test.sql |sed -n '开始行数,结束行数p'
查看某时间段日志:
sed -n '/2024-05-17T*/,/2024-05-18T*/p' alert_ZJMESDB1.log |more
more是一个用来分页显示大文本文件的命令,它默认是内置在各个Linux发行版中的。
空格:下一页
b:上一页
q:退出
more filename 分页查看
more -20 filename 分页查看,每页20条
more -s filename 分页查看,忽略多余的空白行
more +/搜索关键字/ filename 分页查看,查找字符串
more +5 filename 分页查看,从第五行开始
1. 压缩文件
gzip 源文件
如压缩 b.txt 使用命令 gzip b.txt 注意:压缩为 .gz 文件 源文件会消失
如果想保留源文件 使用命令 gzip -c 源文件 > 压缩文件
zip
zip 压缩后的文件名 要压缩的文件。例如:zip test.zip test.txt
2. 压缩目录
gzip -r 目录
注意 gzip 压缩目录 只会递归地压缩目录下的所有文件 不会压缩目录
特别注意:gzip不支持压缩整个目录
压缩目录使用:tar -czvf xxx.tar.gz source_file (tar -czvf 包名.tar.gz 源文件) #以tar.gz方式打包并gz方式压缩
3. 解压
gzip -d xxx.gz
unzip filename.zip
tar -xzvf xxx.tar.gz -C path (tar -xzvf xxx.tar.gz -C 目标路径) #解压缩包
4. 文件复制
1、同一文件夹内拷贝:
cp filename filename_date拷贝文件
5. 端口相关
查看当前监听端口
netstat -tulpn | grep 3306
6. crontab定时任务
参考:https://zhuanlan.zhihu.com/p/350671948
常用命令:
$ crontab -u root -e #编辑用户 root 的计划任务文件(需要有 root 权限) $ crontab -e #编辑当前用户的计划任务文件 $ crontab -u root -l #显示用户 root 的计划任务文件(需要有 root 权限) $ crontab -l #显示当前用户的计划任务文件 $ crontab -r #删除当前用户的计划任务文件
cron 语法格式:
# m h dom mon dow command 0-59 0-23 1-31 1-12 0-7 command
符号 | 含义 | 取值范围 |
---|---|---|
m | 表示分钟 | 0-59 |
h | 表示小时 | 0-23 |
dom | day of month,表示日期 | 1-31 |
mon | month,表示月份 | 1-12 |
dow | day of week,表示星期 | 0-7 |
command | 待执行的命令 | - |
命令例子:
需注意的是:执行sh有些时候需要加sh,有的时候不需要,建议设置完后测试一遍,以下环境为: GNU ld (GNU Binutils for Ubuntu) 2.34) #44~20.04.1-Ubuntu SMP
0 12 * * * sh /home/admin/AutoClearFile.sh>/home/admin/dellog.log
添加任务-方法1:crontab -e;这种方法有一个缺点,就是当前系统中配置的crontab不在一个配置文件中,让管理员不方便查询系统到底有多少个crontab。
添加任务-方法2、直接在/etc/crontab文件中添加,不过需要是root身份。打开文件。
参考:http://www.80vps.com/new6583.html
操作系统信息
使用`hostnamectl`命令查看内核版本
hostnamectl
实用程序是systemd的一部分,用于查询和更改系统主机名。 它还显示Linux发行版和内核版本:
使用以下命令只显示当前内核版本:
hostnamectl | grep -i kernel
通过查看/proc/version文件确认内核版本
/proc
目录包含虚拟文件,其中包含有关系统内存,CPU内核,已安装文件系统等的信息。有关正在运行的内核的信息存储在/proc/version
虚拟文件中。
结合cat查看文件内容:
cat /proc/version