目录 start
目录 end
|2018-06-21| 码云 | CSDN | OSChina
uptime
执行结果
cat /proc/loadavg
执行结果
对于Linux来说, 都是有内存就去分配, 然后就用, 只有内存不够了才会去回收, 对于服务器来说, 交换内存会带来性能的明显下降 一般是不会配置的
空闲内存, 已使用, buffers, cached 共同构成了整个内存容量
free
直接运行得到的就是内存情况,默认是kb为单位,可以指定 -b -m -g (后两种不推荐,因为向下取整的特性,出来的数据有点诡异,)
运行结果解析:
buffers
是为了写时,解决内存和硬盘巨大速度差存在的缓冲区(块设备IO相关的缓存页)cache
是为了读时,为了尽量减少内存从硬盘读数据的次数,缓冲区(普通文件相关的缓存页)cached
就是cache内存区域已经使用量used
内存已使用量(不含buff/cache), free空闲内存, available 可用内存设置交换分区:可以单独建立一个分区,也可以使用交换文件,
最初是设计为查看虚拟内存的,现在用于性能监测
vmstat 1 4
输出信息,间隔1s 共4次 特别注意第一行数据是指开机以来的平均值,后面的才是当前值
更多参数用法:
-a
输出中,原来的 buff 和cache 被 inact 和 active 取代了
-f
查看启动以来创建的fork(或者称为task)总数-m
展示内存 slabinfo-s
展示内存指标以及系统事件-d
展示各磁盘的统计信息-p /dev/sda1
展示某一特定分区的 IO信息对多处理器的统计, 和iostat同属于systat软件下,可能需要手动安装
mpstat -P ALL 1 1
查询所有CPU信息,后两个参数是和vmstat一样的,如果只看0号CPU 就ALL改成0即可
-I
值可选, SUM CPU ALL感觉 htop 就是基于这个开发的, 使用htop更简单些, 这个强大但是好多参数
其中主要是看 RES 真实内存, VIRT 是虚拟内存(也就是进程和线程以为自己能拥有的内存大小)
执行iostat
输出信息:
参数:
iostat -d -k 1 3
-y
可以去除第一行按程序名字找到id
ps -ef | grep "$NAME" | grep -v "grep" | awk '{print $2}'
pidof sshd
pidof -x 脚本文件名
-o pid
默认持续执行除非Ctrl C退出,指定参数后就和vmstat一样 sar 2 3
输出到指定文件中: -o filename
注意这个不是文本结构,是特殊的结构化方式, 查看需要 sar -f filename
多核的支持:sar -P ALL 1 1
与mpstat 大致相同
指定结束时间 -e 18:00:00
一般和 -o -f一起用
查看网络信息 -n 参数有: DEV EDEV SOCK FULL
这个命令使用时最好是 sudo或者root用户, 不然就会警告说显示信息不完全
查看打开标准错误输出的进程 lsof -d 3
查看打开某文件或目录(不关注子文件夹)的进程 lsof filename/catalog
通过进程查询打开的文件 ps aux | grep mysqld
sudo lsof -p pid
就能看到mysql服务打开的文件了
查看某一用户打开的文件 sudo lsof -u username
输出结果:
端口占用查询 lsof -i [4/6] [protocol][@hostname|hostaddr] [:service|port]
dd if=/dev/zero bs=1024 count=1000000 of=./1gb.file
df -h
rm -rf
删除他,ls 文件不见了, 但是硬盘的占用还在lsof | grep 1gb.file
或者 lsof 1gb.file
就能找到占用该文件的进程了,杀掉就能真正的删除文件了
和lsof功能差不多,但是这个是符合posix标准的命令 POSIX:可移植操作系统接口
fuser -v /home/kuang/sdk
列出正在打开这个目录的进程(和lsof一样不关注子文件夹)
输出信息 详解:
常用选项
-a 显示所有命令行中指定的文件,默认情况下被访问的文件才会被显示。
-c 和-m一样,用于POSIX兼容。
-k 杀掉访问文件的进程。如果没有指定-signal就会发送SIGKILL信号。
-i 杀掉进程之前询问用户,如果没有-k这个选项会被忽略。
-l 列出所有已知的信号名称。
-m name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称name)。这样所有访问这个文件或者文件系统的进程都会被列出来。如果指定的是一个目录会自动转换成"name/",并使用所有挂载在那个目录下面的文件系统。
-n space 指定一个不同的命名空间(space).这里支持不同的空间文件(文件名,此处默认)、tcp(本地tcp端口)、udp(本地udp端口)。对于端口, 可以指定端口号或者名称,如果不会引起歧义那么可以使用简单表示的形式,例如:name/space (即形如:80/tcp之类的表示)。
-s 静默模式,这时候-u,-v会被忽略。-a不能和-s一起使用。
-signal 使用指定的信号,而不是用SIGKILL来杀掉进程。可以通过名称或者号码来表示信号(例如-HUP,-1),这个选项要和-k一起使用,否则会被忽略。
-u 在每个PID后面添加进程拥有者的用户名称。
-v 详细模式。输出似ps命令的输出,包含PID,USER,COMMAND等许多域,如果是内核访问的那么PID为kernel. -V 输出版本号。
-4 使用IPV4套接字,不能和-6一起应用,只在-n的tcp和udp的命名存在时不被忽略。
-6 使用IPV6套接字,不能和-4一起应用,只在-n的tcp和udp的命名存在时不被忽略。
查询占用端口 fuser -v -n tcp 22
或者 fuser -v 22/tcp
fuser中含三种协议, file默认, tcp, udp
fuser -v -n tcp 0
还能发送信号 fuser -v -k /home/kuang/sdk
就把占用该文件夹的进程全部杀掉了(如果是ssh登录的服务器,当前目录就是这个的话, 就直接下线了)
直接运行 ps
就会显示当前会话中的进程
ps aux
显示系统中所有进程的状态信息 可根据需要自由组合
ps aux
和ps -aux
的区别:
ps -aux
其实应该理解为 ps -a -u x
显示用户名为 x 的用户的所有进程ps aux
ps aux
ps -aux
ps --format
ps aux
等价于 ps -eF
-o
输出指定列 ps -eo pid,user,cmd,start
man ps
可以看到可以指定的列pid=进程号
对范围进行筛选
ps -u root
ps -U root -u root u
ps -C sshd
这个实用!!!排序 :
ps aux --sort -pcpu/+pcpu/
按CPU使用率,进行降序/升序排列--sort=+pcpu, -pmem
CPU升序,内存降序排列查询线程信息:
ps -ef | grep mysql
ps -L pid
显示某id的线程的具体信息 其中的LWP (轻量级进程, 可以理解为用户进程) Light Weight Processps -T pid
显示 将-L的LWP替换为SPID (系统中的线程ID)进程树:
ps axjf
ps -ejH
kill -l
或者 trap -l
显示kill可以向进程发送的信号, kill是通过发送信号让进程自己决定做什么,而不是kill去做什么
信号名称 | 信号编号 | 说明 |
---|---|---|
HUP | 1 | 终端断线,关闭所有其从属的子进程 |
INT | 2 | 中断 同Ctrl+C 结束前台进程,输入阻塞的程序应该退出(自己做清理)并清除阻塞状态 |
QUIT | 3 | 退出 同Ctrl+\ 也有点强制退出的意思 |
FPE | 8 | 发生算术运算错误时发出 |
TERM | 15 | 终止 程序自己做清理工作,然后退出 缺省的信号值 |
KILL | 9 | 强制终止 退出 |
CONT | 18 | 继续 fg/bg 命令 |
STOP | 19 | 暂停/停止 同 Ctrl+Z |
例如 reids的服务端:
INT/TERM 信号就相当于在客户端的shutdown命令,是正常的退出
QUIT/KILL 信号是强制退出
STOP 信号就是暂停挂在后台
kill命令格式kill [选项] [进程号]
9号信号:
kill -9 pid
0号信号:
终结后台作业:
kill -信号 %作业号
编号就是运行jobs
后方括号内编号通过名字来发送信号,其他和kill是一致的
杀掉指定名字 不需要sudo killall -9 name
确定使用注意事项, 避免误杀
在Linux中, 作业是由一个或多个进程构成的, 作业控制就是对作业的行为进行控制, 前后台的切换, 终止等操作
&
: 让作业后台运行 作业如果是多个命令构成,会返回最后一个命令对应进程的pid和作业号Ctrl Z
切换到后台,但是会暂停的状态,可以使用jobs
查看作业号kill -18 %作业
或者 bg %作业号
fg %作业
指定作业
符号 | 含义 | 示例 |
---|---|---|
%Number | 根据编号来指定作业 | fg %1 |
%String | 匹配命令以String开头的作业,如果匹配到多个就会报错 | kill %deng |
%?String | 命令行中含有String字符串的作业,如果是通过管道连接的多个命令,则仅匹配第一个命令 | kill %?ng |
%% | 指代作业列表中最近一个被切换到后台的作业 | kill %% |
%+ | 和%%作用完全相同 | kill %+ |
%- | 排在%%所指代的作业前面的那个作业 | kill %- |
也就是说,这个匹配也是只能匹配一个作业,不能通配
捕捉信号并响应, 格式:trap "commands" signal-list 动态读取并更新配置文件 定期清除临时文件 忽略信号对程序可能的影响
trap "" 2
: 忽略Ctrl+C
可以针对用户的退出操作,询问用户是否真的确认要退出
#!/bin/bash
trap 'echo "hello"' 2
tail -f ~/.bashrc
trap "" INT
屏蔽中断信号trap INT
恢复2>&1
表示将标准错误(2)重定向到标准输出(1)nohup 命令>result.txt 2>/dev/null 1>&2 &
wait $PID
echo $?
disown %作业号
就能在后台运行,且屏蔽hup信号了setid 命令
就会让进程在一个新的会话运行在一个真实的终端运行多个伪终端,认为是开启了多个新会话 命令参考
-A 将所有的视窗都调整为目前终端机的大小。
-d <作业名称> 将指定的screen作业离线。
-h <行数> 指定视窗的缓冲区行数。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。
-v 显示版本信息。
-x 恢复之前离线的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
uname -a
输出所有信息
who
和 w
who是按照不同tty来显示信息whoami
查看有效用户,就是当前会话的拥有者who am i
查看系统的真实用户,例如普通用户 su 切换用户,这条命令就显示了真正的用户,而不是su切换的用户
groups
查看所有组service 服务名 status/start/stop/restart
cd /etc/init.d/ && ls -F
查看所有service掌控的服务名which service
结果显示这是个脚本 service 服务名 stop
等价于 /etc/init.d/服务名 stop
掌控等级制度 LSB
输出机器的 BIOS CPU 内存等硬件信息 (DMTF DMI)
dmidecode -t
就会提示你后接类别change root directory 更改root目录 最古老的容器技术
命令 | 作用 |
---|---|
shutdown | 可用于关机,重启,支持定时和通知 |
reboot | 重启系统 |
halt | 停止系统 |