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 访问控制
# 允许普通用户抓包
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中注册端口类型shell
终端操作
tty # 查看当前处于哪个虚拟终端
!$ # 上一条指令的最后一个单词快捷键
ctrl + \ # 强制退出当前命令的执行,有时执行ctrl + c无用时采用常用单行语法
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 # 标准输出+错误输出 一起重定向 推荐方式shell脚本模板头部
#!/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包管理工具
rpm
rpm -qf /bin/file2 # 查询文件归属包
rpm -ivh xxxx.rpm
rpm2cpio xxx.rpm |cpio -div # 解压yum
yum makecache # 更新缓存deb
ar # 解压 deb常用系统包
# 开发工具开发库
gcc gcc-c++ make autoconf automake m4 libtool
ncurses ncurses-devel
# 网络工具包
telnet lftp curl wget lrzsz ntpdate
# 文件管理
xz zip unzip dos2unix
# 系统工具
dstat lsof sysstat
bash-completion磁盘管理
工具列表
| 名字 | 简介 |
|---|---|
| df | 容量检查 |
| sfdisk | 非交互式实现 fdisk 的功能 |
| blkid | 查看文件系统卷标,uuid,type等基础信息 |
| fsck | 文件系统修复 |
| e2fsck | |
| e2image | |
| e2label | |
| mkfs | |
| dumpe2fs |
查看信息
# 查看目录大小
du -sh ./*
# 查看路径下各文件的大小,包含隐藏文件
shopt -s dotglob; du -sh ./*
# 检测分区使用量大于 50% 的空间
df -h | grep '[5-9][0-9]%'
df -Ph # 查看硬盘容量, 约束到一排显示
# 检查磁盘性能
iostat -x -d -k 1 10
iotop
lsblk -f # 列出所有的块设备基础管理
# 卷标
e2label device [新卷标]
e2label /dev/sdb1 /sdb1
fsck -y /dev/sda6 # 对文件系统修复
# 文件系统修复类命令
fsck
fsck.cramfs
fsck.ext2
fsck.ext3
fsck.msdos
fsck.vfat扩容
# 重新扫描磁盘
echo 1 > /sys/block/sda/device/rescanlvm扩容磁盘
parted /dev/sda
resizepart 3 100%
# 扩容对应的pv大小
pvresize /dev/sda3
# lv
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
lvresize -l +41163 /dev/vg_00/root # 增加 n 个 PE 至某LV
# 动态调整分区大小
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/vg_00/root无lvm扩容磁盘
# parted /dev/vda resizepart 3 400GB
parted /dev/vda
resizepart 3 100%
# 直接扩容
parted /dev/sda resizepart 3 100%aws ec2 扩容磁盘
lsblk
nvme0n1 259:0 0 300G 0 disk
├─nvme0n1p1 259:1 0 199.9G 0 part /
├─nvme0n1p14 259:2 0 4M 0 part
└─nvme0n1p15 259:3 0 106M 0 part /boot/efi
growpart /dev/nvme0n1 1 # 调整基础磁盘分区
resize2fs /dev/nvme0n1p1 # ext4 文件系统挂载管理
# 挂载给普通用户
mount -o uid=1000,gid=1000 /dev/sdc1 /data/share_smb/wait/hddDisk
# 挂载iso
mount -t iso9660 -o loop /home/iso/rhel5.iso /mnt/iso/iscsi 管理
存储端
# 服务器增加访问服务器
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.27.10.24客户端
# 发现
iscsiadm -m discovery -t sendtargets -p 10.27.10.22:3260
# login
iscsiadm -m node -T iqn.ngca.com.20180308:disk1 -p 10.27.10.22:3260 -l
# logout
iscsiadm -m node -T iqn.ngca.com.20180308:disk1 -p 10.27.10.22:3260 -u
# delete
iscsiadm --mode node -o delete -T iqn.ngca.com.20180308:disk1 -p 10.27.10.22:3260
# 查看本地已经发现的存储
iscsiadm -m node事件排查分析
基础信息
pidof program # 查看某名称进程的pid
pstack pid # 前运行时的堆栈
kill $(pgrep program_name)
kill -9 $(ps -ef | grep proc_name | grep -v grep | awk '{print $2}')ps
ps -o nlwp -p 463133 # 查看线程数
ps -mfL <PID> # 查看进程的线程
# 查看某进程的 启动时间 - 运行时长(占用CPU的时间)
ps -ef|grep -v grep|grep -w chrome|awk '{print $1, $2, $5, "-", $7}'
ps -eo pid,lstart,etime,args # 查看进程启动时间
# 自定义输出格式
ps -eo pid,lstart,etime
ps -eo user,pid,ppid,lstart,etime,stat,size,exe
ps -eo user,pid,ppid,lstart,etime,stat,size,cmd | grep java
# 查询僵尸进程
ps aux | awk '{print $8}' | grep 'Z'
ps -lfe | awk '{print $2}' | grep ^Z
ps -ef | grep defunct
# 按内存占用大小排序进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | headtop
top -H -p <pid> # 显示某进程的线程情况 | top -Hp <pid>线程信息
# 统计进程的线程信息
pstree -p 7001 | wc -l
grep Threads /proc/7001/status
top -bH -d 3 -p 7001
ps -eLf | grep 3322 # 查询某进程的线程信息
ls -l /proc/<pid>/task/ | wc -l # 进程的线程数
ls -l /proc/<pid>/fd/ | wc -l # 进程打开的文件描述符数
/usr/sbin/lsof -n |awk '{print $2} " " $3'|sort|uniq -c |sort -nr|more
ps -eLo ruser | awk 'NR>1' | sort | uniq -c # 统计 real user的进程线程数
ps -elfT | wc -l # 统计系统当前启动的进程/线程总数
cat /proc/1369/environ |tr -s '\0' '\n' # 查看某个进程启动的信息strace
用户态的函数调用跟踪用
ltrace -p pid
ltrace -p 15547 -T -s 51200 -S -r -i -c内核态的系统调用跟踪用
strace
strace -c -f -p 18775 # 输出汇总统计
strace -T -t -f -p 15545 # 查看进程详细动作
strace -fp 5211 -e trace=open,stat,close,unlink
# 跟踪指定动作
## -f表示跟踪子进程和子线程,-T表示显示系统调用的时长,-tt表示显示跟踪时间
strace -f -T -tt -p ${Pid} -o trace.log综合
dstat -tampl
pidstat -w # 统计进程自愿/非自愿上下文切换
sar -r # 查看历史期间 内存/SWAP 的使用情况
sar -P ALL 2 10
dmesg # 显示开机信息
lsmod # 查看内核模块
uptime # 查看服务器启动时间
ldd # 查看程序的动态链接库
plddel6
# 查看自启动服务 - el6
chkconfig --list | awk '{if ($5=="3:on") print $1}'文件
/usr/sbin/lsof | wc -l
/usr/sbin/lsof | grep lim
lsof |grep delete # 查看处于删除状态的进程
ulimit -a | grep open
最后更新于