常用shell快速帮助手册
变量
env/printenv:查看全局变量
查看单个环境变量:printenv name,echo $name
set:查看局部变量
export name 临时把一个局部变量设置为全局变量,在父shell中修改会影响子shell,但是在子shell中设置的对父shell无用
unset name :删除变量
一些特殊的环境变量
PATH:当你需要运行一个第三方命令时,系统就会去这个变量对应的目录下面查找,只支持绝对路径,使用冒号分隔,export PATH=$PATH:
持久化变量
系统变量:在/etc/profile.d/下创建一个.sh结尾的文件,把export aaa=xxx写进去
个人变量:修改~/.bashrc
监控
进程
ps
ps -ef
-e:显示所有进程
-f:显示完整格式
状态表
< 表示高优先级的进程(not nice to other users)
N 低优先级(nice to other users)
+ 属于某个前台组的进程
s 某一个回话的leader进程
l 线程加锁
+ 后台运行进程组
D 不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
R 正在运行或可运行(在运行队列排队中)
S 可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
T 已停止的 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W 正在换页(2.6.内核之前有效)
X 死进程 (未开启)
Z 僵尸进程 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
[root@master ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Feb07 ? 00:01:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 Feb07 ? 00:00:00 [kthreadd]
root 4 2 0 Feb07 ? 00:00:00 [kworker/0:0H]
root 6 2 0 Feb07 ? 00:01:33 [ksoftirqd/0]
启动用户 进程pid 父进程id 生命周期中cpu使用率 启动时的系统时间 启动的终端 运行累计cpu时间 启动命令
ps -aux
a 显示所有用户的进程(show processes for all users) u 显示用户(display the process's user/owner) x 显示无控制终端的进程(also show processes not attached to a terminal)
[root@master ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 43988 4488 ? Ss Feb07 1:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Feb07 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< Feb07 0:00 [kworker/0:0H]
启动用户 pid cpu占用率 内存 完全驻存需要内存 实际使用内存 终端 状态 启动时间 总计cpu时间 启动命令
top
top - 10:49:48 up 34 days, 43 min, 1 user, load average: 0.31, 0.19, 0.16
Tasks: 119 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.7 us, 1.3 sy, 0.0 ni, 95.6 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 3733344 total, 178572 free, 898816 used, 2655956 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2543632 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18778 root 20 0 1039976 256428 46572 S 2.7 6.9 1053:23 kube-apiserver
pid 用户 优先级 nice 虚拟内存 物理内存 共享内存 状态
kill/pkill
kill 基于进程号
kill [-s signal|-p] [-q sigval] [-a] [--] pid...
kill -l [signal]
pkill基于进程名
NAME
pgrep, pkill - look up or signal processes based on name and other attributes
SYNOPSIS
pgrep [options] pattern
pkill [options] pattern
挂载
查看挂载:mount
查看硬盘使用量:df
查看文件占用存储空间:du
监控cpu和磁盘io情况:iostat
监控文件描述符:lsof
-a file:查看文件占用(-a加不加都行
[root@master 8432]# lsof -a /var/lib/docker/volumes/metadata.db
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dockerd 8432 root mem-W REG 253,1 32768 1183817 /var/lib/docker/volumes/metadata.db
dockerd 8432 root 10uW REG 253,1 32768 1183817 /var/lib/docker/volumes/metadata.db
命令 pid user r读w写u读写 文件类型REG为常规文件 主从设备号 文件大小 节点号 名字
-n dev:查看磁盘占用
-p pid:查看进程打开的文件
lsof -i:port 获取端口占用
-d:列出占用文件号的进程
文件处理
排序
sort -t ":" -k number -n item
-t:分隔符
-k:选择栏数
-n:把数字按照数值排序
-r:降序
搜索
grep parten file
-v:反向搜索
-v:显示行数
-c:显示匹配的行数
-e:匹配多个字段 grep -e xx -e ff file
-q:静默
匹配到了返回值0,没有返回1
归档
tar -cvf test.tar test1/ test2/
将两个目录下的问价归档为test.tar
tar -xvf test.tar
解压
去重
uniq
-c:统计
-u:去重
文本处理
awk
awk -F":" '{print $1}'
系统交互
子shell
把进程挂到后台执行并输出重定向
这种方式运行的后台程序不会因为shell的退出而退出,单纯&会使得程序随着shell一起结束
nohup xxxx >> /tmp/xxx 2>&1 &
查看后台运行中的进程
jobs -l
加号表示当前运行的程序,-表示下一个将要运行的程序
如果想要恢复一个被暂停的进程,可以用bg或者fg+pid,分别对应后台和前台运行
[root@master ~]# nohup sleep 10 >> /tmp/test.log 2>&1 &
[1] 16671
[root@master ~]# jobs -l
[1]+ 16671 Running nohup sleep 10 >> /tmp/test.log 2>&1 &
[root@master ~]# jobs -l
[1]+ 16671 Done nohup sleep 10 >> /tmp/test.log 2>&1
查询命令文件
[root@master ~]# which echo
/usr/bin/echo
打印程序所使用的共享库列表:ldd
定时任务 at/crontab
创建随机字符串
openssl rand -base64 n
网络
查看域名解析:nslookup
查看网络连接:netstat
-at :显示所有tcp端口
-lt:显示所有tcp监听中的端口
-st:统计所有tcp连接的情况
-pt:显示tcp及对应的pid
-r:显示核心路由信息
找出程序运行的端口
netstat -ap| grep docker
显示数据包到目标地址之间的跳转:tracerout
如果显示*,那是返回数据被防火墙给过滤了
-n 只显示ip不显示主机名
-m number 跳数限制
-w number 探测包等待响应时间
telnet 测试目标端口连通性
快速查看自己的公网ip
curl ifconfig.me
日志
dmesg:内核日志
journalctl
-k dmesg
-f follow
journalctl --since "2021-01-01" --until "2021-09-16 13:40" 查看指定时间内的日志
-n number 显示尾部几行
journalctl _PID=665 查看指定进程的日志
journalctl UID=33 --since today 查看指定用户
-b 本次启动的日志
如果想查看上次的,需要修改系统设置
https://zhuanlan.zhihu.com/p/410995772
修改/var/log/journal
[Journal]
Storage=persistent
systemctl restart systemd-journald