CheatSheet_Linux
显示文件中所有未注释的行
grep -v "#" /usr/local/nginx/conf/nginx.conf |grep -v "^$"
公网IP地址质量测试
IP质量体检报告 https://github.com/xykt/IPQuality
双栈
bash <(curl -sL IP.Check.Place)
v4
bash <(curl -Ls IP.Check.Place) -4
查看时间范围内的 atop 记录
atop -r /var/log/atop_20240704 -b 03:53 -e 03:59
查找 Grafana 日志中remote_addr字段出现次数
awk '{ match($0, /remote_addr=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/, ip); if(ip[1]) print ip[1] }' grafana.log | sort | uniq -c
使用 Ssh-keygen 从 Pem 文件中导出公钥
ssh-keygen -y -f awesome.pem > public.pub
Rsync 命令传输数据
保留文件的原本的信息, 归档模式, 传输前压缩, 以及展示进度 和 暂存发送文件进度.
rsync -azP /source/path/ /destination/path/
rsync -aP /source/path/ /destination/path/
查看磁盘设备的详细信息
包括 EBS Volume ID 和 设备驱动类型
lsblk -f -o +SERIAL,SCHED,TRAN,STATE
强制退出程序并生成 Corefile
组合键用于发送 SIGQUIT 信号,用于终止正在运行的进程。与Ctrl+C不同的是,Ctrl+\会生成一个core文件,用于调试程序。
同时在某些特定的场景下, 这个指令并Ctrl+c停止进程的速度快。
Ctrl+\
查看当前系统中 CPU 使用率最高的前 20 个进程
ps auxwww --sort -%cpu | head -20
列出当前系统中内存使用最高的前 20 个进程
ps auxwww --sort -rss | head -20
列出系统中所有进程的详细信息
ps auxf --width=200
以完整格式列出系统中所有进程的详细信息
ps auxwwwf
Curl 输出各个阶段所花费的时间
curl -s -w "time_namelookup:%{time_namelookup}\ntime_connect: %{time_connect}\ntime_appconnect: %{time_appconnect}\ntime_redirect: %{time_redirect}\ntime_pretransfer: %{time_pretransfer}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" -o /dev/null $HTTP_URL
对于命令输出内容的解释:
curl -o /dev/null \ # 将下载的文件输出到 /dev/null (即丢弃)
-s \ # 静默模式,不显示进度条等信息
-w "time_namelookup:%{time_namelookup}\n \ # 输出 DNS 解析时间
time_connect: %{time_connect}\n \ # 输出建立 TCP 连接所花费的时间
time_appconnect: %{time_appconnect}\n \ # 输出建立 SSL/TLS 连接所花费的时间
time_redirect: %{time_redirect}\n \ # 输出重定向所花费的时间
time_pretransfer: %{time_pretransfer}\n \ # 输出从开始到准备好传输所花费的时间
time_starttransfer: %{time_starttransfer}\n \ # 输出从开始到第一个字节被传输所花费的时间
time_total: %{time_total}\n" \ # 输出整个传输所花费的总时间
$HTTP_URL # 要下载的文件 URL
查看与 TCP 内存管理和拥塞控制相关的内核参数
通常这些配置会出现在 [[Linux_Sysctl 参数记录]] /etc/sysctl.conf
文件中。
sysctl -a | egrep "rmem|wmem|tcp_mem|adv_win|moderate|slow_start"
列出系统中所有用户的 Crontab 任务
cat /etc/passwd | cut -f 1 -d : | xargs -I {} crontab -l -u {}
查看 AWS EC2 的 Billing Code
Redhat / SUSE 的 Enterprise 版本在 AWS EC2 上面运行实例会带有 Billing Code 的, 这标记 OS 是否是付过费用的,会不会收到安全补丁, 不会使用系统内的订阅管理器。
Finding AMI billing and usage details
AMI billing information fields
# IDMSv1
curl http://169.254.169.254/latest/dynamic/instance-identity/document
# IDMSv2
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/dynamic/instance-identity/document
查看 SUSE 的注册情况,以及是否启用 LTSS
sudo SUSEConnect --list-extensions
查看网络可能存在的丢包和异常
ip 命令查看链路层丢包指标.
ip -s link show ens18
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether bc:24:11:6f:db:1c brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
29865128113 35188796 0 4316 0 0
TX: bytes packets errors dropped carrier collsns
6054383278 2278239 0 0 0 0
altname enp0s18
ethtool 命令查看网卡硬件队列的丢包
ethtool -S eth0 | grep drop
查看 由于 UDP Buffer 造成的丢包
nstat -az UdpSndbufErrors UdpRcvbufErrors
#kernel
UdpRcvbufErrors 0 0.0
UdpSndbufErrors 0 0.0
OpenSSL 测试指定域名并输出调试信息
openssl s_client -debug --connect $URL:443
指定算法和协议版本
openssl s_client -debug --connect $URL:443 -tls1_2 -cipher RC4
查看证书的有效期:
echo | openssl s_client -servername $URL:443 -connect $URL:443 2>/dev/null | openssl x509 -noout -dates
查看启动以来的内核日志
journalctl -xeak
查看特定级别的日志
journalctl -xeak -p3
# 日志级别的补充说明:
# FROM..TO. The log levels are the usual syslog log levels as documented in syslog(3), i.e. "emerg" (0), "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6), "debug" (7). If a
# single log level is specified, all messages with this log level or a lower (hence more important) log level are shown. If a range is specified, all messages within the range are shown, including both
# the start and the end value of the range. This will add "PRIORITY=" matches for the specified priorities.
journald记录的所有启动会话(boots)信息
journalctl --list-boots
# 输出所有重启的历史记录
# 命令会通过序号的方式标记重启的记录, 0, -1, -2, -3 等等
查看上次系统启动的日志
journalctl -xeab -1
查看所有日志不使用pager进行分页
journalctl -xea --no-pager
查看特定 Service 日志
journalctl -xeau SERVICE_NAME
查看并追踪特定 Service 日志
journalctl -xeafu SERVICE_NAME
查看最近 100 行
journalctl -n 100 --no-pager -xeau SERVICE_NAME
查看指定时间范围的日志
journalctl -xea --no-pager -S "2024-01-31 18:20:00" -U "2024-01-31 18:40:00"
# 显示从什么时间开始的日志 或者 到什么时间为止的日志。
# Format: 2012-10-30 18:17:16
# 可以仅仅提供日期字段, 时间会默认全0
# -S, --since=, -U, --until=
journalctl -xea -u SERVICE_NAME --no-pager -S "2024-01-31 17:40:00" -U "2024-01-31 23:40:00"
Tshark 命令简单说明
tshark -i ens5 -n -f 'tcp dst port 32123' -T fields -e frame.number -e frame.time_epoch -e frame.time_delta_displayed -e ip.src -e tcp.srcport -e ip.dst -e tcp.dstport -e tcp.time_delta -e tcp.stream -e tcp.len -e tcp.analysis.ack_rtt
# 抓取 dns 请求, 并显示 IP TTL 以及 DNS TTL, 格式化输出
> sudo tshark -i ens5 -Y 'dns' -T fields -e ip.src -e ip.dst -e dns.qry.name -e ip.ttl -E header=y -E separator='/t' -E quote='d' -E occurrence=f
Iptables 常用命令
关于 iptables 的扩展内容: [[Linux/Linux_Iptables-and-conntrack|Linux_Iptables-and-conntrack]]
清理 Iptables 所有规则
iptables-save > ./iptables-save.log
iptables -X && iptables -F && iptables -Z && iptables -t nat -F && iptables -t nat -X && iptables -t nat -Z
查看 Iptables 中的规则,并标记显示行号
# 查看 nat 表
iptables -t nat -nvL --line-number
# 查看 filter 表
iptables -nvL --line-number
# 查看 raw 表
iptables -t raw -nvL --line-number
增加、删除规则
# 增加规则在 nat 表上先进行 DNAT
# 这个规则的意义是, 将收到所有来源的udp报文中的端口, 从 20000 - 30000 范围内, 重写成dport 32124 并继续判断下一个规则, 这个规则会在PREROUTING上第一个被执行。
iptables -t nat -I PREROUTING 1 -i eth0 -p udp --dport 20000:30000 -j DNAT --to-destination :32124
# 删除 nat 表 PRERTOUING 上的第一个规则
iptables -t nat -D PREROUTING 1
查看 close Wait 状态的 Socket
ss --tcp state CLOSE-WAIT
关闭所有处于 [[Databases_MySQLConnetionTroubleshooting#^de7c10]] closewait 的socket ,通过 ss 命令干预, 通常应该由应用程序关闭, 而不是 ss 命令关闭, 这个命令只是记录一下用法.
最佳的方式是找到异常的进程, 并查看为什么程序不能及时的关闭 socket , 或者 kill 掉这个进程.
ss --tcp state CLOSE-WAIT --kill
触发内存 Compact
激活内核进行内存碎片的整理; ( 重启也行…
echo 1 > /proc/sys/vm/compact_memory
查看rpm包内所有文件列表
rpm -ql htop
对比 Rpm 包内和系统实际的文件是否有更改
\\ 不指定的时候是列出所有权限或者内容变化的文件
rpm -Va
\\ 指定一个 rpm 包的名称
rpm -Va htop
重置 Linux 文件权限为 Rpm 包内记录
~]$ rpm --setperms htop
\\ 尝试变更一个无关文件的权限
~]$ chmod 0000 /usr/share/pixmaps/htop.png
\\ 使用命令校验rpm文件是否发生变化.
~]$ rpm -Va htop
.M....... /usr/share/pixmaps/htop.png
\\ 使用这个命令将文件的权限置为与rpm包一致.
~]$ rpm --setperms htop
\\ 再次校验.
~]$ rpm -Va htop
~]$ stat /usr/share/pixmaps/htop.png
File: /usr/share/pixmaps/htop.png
Size: 3537 Blocks: 8 IO Block: 4096 regular file
Device: 10301h/66305d Inode: 1542971 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:usr_t:s0
Access: 2022-06-03 00:54:39.000000000 +0000
Modify: 2022-06-03 00:54:39.000000000 +0000
Change: 2024-05-30 01:55:00.225771761 +0000
Birth: 2024-04-24 05:39:08.826700372 +0000
删除目录下的所有文件夹,但是保留所有文件
find ./ -type d ! -name . | xargs rm -rf