linux

常用工具介绍

综合功能

名字 简介
lsof 扫描已经打开的文件(宽泛)
top 查看进程活动状态以及一些系统状况
sar 查看系统状况
iostat 查看CPU 负载,硬盘状况
vmstat 查看系统状态、硬件和系统信息等
mpstat 与 vmstat 功能相似,但可以查看多处理器状况
dstat 综合了 vmstat, iostat, ifstat, netstat 等多个信息 - 推荐
pidstat 进程和内核线程的统计信息,支持IO和页面信息
glacne
ps 进程的一些信息
nmon 非常好的第三方监控工具,方便输出报表
dbf hp-unix

单项功能

名字 简介
slabtop 实时展示内核slab模块所管理的各种缓存对象资源信息;
sysdig 系统内核态和网络和I/O的监控利器(综合)
free 内存信息
ipcs 查看进程间通信情况 消息队列,共享内存,信号量等信息
lscpu 简要描述 CPU 信息-第三方,已经合并到 util-linux
strace 内核态的函数调用跟踪用
ltrace 用户态的函数调用跟踪用
dmesg 内核级信息,如启动时的驱动加载情况,设备起停,硬件插拔,网卡起停,网卡丢包等情况
iotop 很不错的 io 监控软件
lsblk 块设备信息,分区/CD 等
swapinfo
nfsstat

资源监控

# 综合查看
dstat -talpm --socket --tcp

# 获取占用CPU资源最多的10个进程
ps aux|head -1;ps aux|sort -k 3 -nr| head -10

# 查看CPU使用情况,按占用时间排序
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu

# 占用内存资源最多的10个进程
ps aux|head -1;ps aux | sort -rn -k 4 | head -10

dstat -tamp
dstat --top-io --top-bio            # disk io process show
dstat -d -r --top-io --top-bio

iotop           # 进程级别IO监控
iotop -o        # 只显示有IO操作的进程

访问控制

# 允许普通用户抓包
setcap cap_net_raw=eip  /usr/sbin/tcpdump


# 允许普通进程监听80端口(需要nginx restart, 而不是 reload)
setcap cap_net_bind_service=+ep /usr/local/nginx/sbin/nginx

系统环境变量


# 高优先级的动态库路径
LD_PRELOAD=$HOME/lib

# 一般优先级动态库路径
LD_LIBRARY_PATH=$HOME/lib

# 时区
TZ="Asia/Shanghai"

selinux

getenforce      # 获取状态
setenforce 0    # 暂时关闭,即  permissive 状态,只对当前的会话有效
setenforce 1    # 恢复开启,即 Enforcing 状态

sestatus -v     # 查看selinux状态
getenforce      # 查看selinux模式

semanage port -l                                # 查看selinux端口限制规则
semanage port -a -t http_port_t -p tcp 8000     # 在selinux中注册端口类型

终端操作

tty                     # 查看当前处于哪个虚拟终端
!$                      # 上一条指令的最后一个单词

快捷键

ctrl + \                # 强制退出当前命令的执行,有时执行ctrl + c无用时采用

shell

常用单行语法

date +%s                            # 1538725423 输出unix时间戳
date +%s -d '1990-01-01 01:01:01'   # 指定时间的时间戳

date +'%F %T'                   2016-11-09 02:06:16
date +"%Y-%m-%d %H:%M:%S"       2016-11-09 02:06:16


date >out.log 2>&1              # 标准输出+错误输出 一起重定向
date &> out.log                 # 标准输出+错误输出 一起重定向  推荐方式

脚本模板

#!/bin/bash

WORKDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd ${WORKDIR}

用户管理

gpasswd -a user_name wheel          # 添加用户到某组

echo "pw" | passwd user --stdin     # 非交互修改密码
echo "pw" | sudo -S ls /tmp         # 非交互式使用 sudo

su - user -c "cmd1; "               # 切换用户执行命令

踢出用户

w
pkill -kill -t tty1

# 剔除用户
# 或者使用 pstree 查看 sshd 的进程数,判断所属进程后 kill 即可
# 注意, 用户正常退出时, 其启动的进程会自动移交给 init;
# 但如果 kill 这个用户, 会将信号传递给其启动的进程
# 于是会导致用户 使用此命令时 会将此用户启动的进程也非正常结束掉
# 进程没有收到信号, 却死了

密码相关

passwd -l user_name             # 禁用账号(不能阻止私钥登陆)
usermod -L user_name            # 禁用账号(不能阻止私钥登陆)

passwd -u user_name             # 解锁用户
passwd -S user_name             # 查看用户密码状态

chage -E0 user_name             # 设置用户密码立即过期(私钥也不能登陆)
chage -E-1 user_name            # 设置用户密码未过期(恢复原密码过期时间)


# 检查所有用户的密码到期日期
for user in $(cat /etc/passwd |cut -d: -f1); do echo $user; chage -l $user | grep "Password expires"; done | paste -d " "  - - | sed 's/Password expires//g'

# 除系统用户外的所有用户的密码有效期
for user in $(cat /etc/passwd |cut -d: -f1); do echo $user; chage -l $user | grep "Password expires"; done | paste -d " "  - - | sed 's/Password expires//g' | grep -v "never"

登录审计

last                        # 查看登陆过的用户信息
who /var/log/wtmp           # 查看登陆过的用户信息
lastlog                     # 用户最后登录的时间
lastb -a                    # 列出登录系统失败的用户相关信息

who                         # 当前在线用户
w                           # 当前在线用户
whoami                      # 查看当前用户名
logname                     # 查看初始登陆用户名

systemd

systemctl daemon-reload     # 重载所有修改过的配置文件

# 一次性输出、不进入交互式翻页
systemctl --no-pager status node_exporter -l

日志管理 - journalctl

journalctl --since=yesterday
journalctl --since='2024-01-25 10:00'   # 指定时间开始的日志

journalctl -b -1                        # 查看上一次启动的日志(需更改设置)

硬件相关

cpu

lscpu                                   # 查看cpu信息
more /proc/cpuinfo
grep name /proc/cpuinfo | cut -f2 -d: | uniq -c    # 查看cpu型号和逻辑核心数
getconf LONG_BIT                                         # cpu运行的位数
grep 'physical id' /proc/cpuinfo|sort| uniq -c    # 物理cpu个数

# 查看cpu指令集: pae 支持半虚拟化  IntelVT 支持全虚拟化
grep flags /proc/cpuinfo

内存

more /proc/meminfo          # 查看内存信息

# 查看内存插槽和大小
dmidecode | grep -P -A5 "Memory\s+Device" | grep Size | grep -v Range

综合

dmesg

lspci                                   # 查看硬件信息
lspci|grep RAID                         # 查看是否支持raid
lspci -vvv |grep Ethernet               # 查看网卡型号
lspci -vvv |grep Kernel|grep driver     # 查看驱动模块
ethtool -i eth0                         # 查看网卡驱动版本

dmidecode                               # 查看全面硬件信息
dmidecode | grep "Product Name"         # 查看服务器型号

cat /proc/mdstat            # 查看软raid信息
cat /proc/scsi/scsi         # 查看Dell硬raid信息(IBM、HP需要官方检测工具)

modinfo name            # 查看驱动版本(驱动模块)
ethtool -i em1          # 查看网卡驱动版本

事件

drop_caches 管理

# 清理内存
echo 2 > /proc/sys/vm/drop_caches
echo 1 > /proc/sys/vm/drop_caches
echo 0 > /proc/sys/vm/drop_caches

常用shell别名

alias ll='ls -l --time-style=long-iso'
alias ag='rg'
alias dsync='rsync -avuP --delete'

系统脚本

1. 系统自检查脚本

#!/bin/bash

# 主机登录后的常规检查项目, 可以放在 /etc/profile.d 里登录自动运行

df -Th

# 对于小容量的云服务器, 还是有必要检查一下 inode 使用率
df -ih

free -h

uptime; echo; cat /proc/loadavg

# top5 cpu
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 6

ss -s

# 最近200条错误级别的日志
journalctl -p 3 -n 200 --no-pager
最后更新于