ps
用于显示当前进程 (process) 的状态
Copy ps -ef
e:显示所有进程;f:全格式。
ps -T -p 15436
查看进程15436创建的所有线程
netstat
显示网络状态
Copy netstat -anp | grep 8080
查询占用8080端口的进程号 a:所有连线中的socket;n:直接使用IP地址,而不通过域名服务器;p:显示正在使用Socket的程序识别码和程序名称。
Recv-Q和Send-Q分别表示接收队列和发送队列,一般都是0,如果不是则表示包正在队列中堆积,这种情况是非常少见的。
参考:
https://www.runoob.com/linux/linux-comm-netstat.html
top
实时显示 process 的动态 CPU占有率等
Copy 如何添加增加展示的属性?
1.top
2.f(进入属性选择列表)
3.p(选中swp,拿swap举例,其他类似)
4.回车
如何按指定属性排序?
1.top
2.shift + f (进入属性选择列表)
3.p(选中swp,拿swap举例,其他类似)
4.回车
top -p 139
显示指定进程的状态
top -c
显示完整命令
top -H 显示线程
P:按照cpu使用率来排序
M:按照内存来排序
top -H -p 15436
实时显示进程15436下所有线程状况
Tasks: 102 total, 0 running, 102 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.7%us, 2.7%sy, 0.0%ni, 81.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 65940140k total, 48233180k used, 17706960k free, 345604k buffers
Swap: 12582904k total, 0k used, 12582904k free, 7675716k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15436 work 20 0 5473m 2.5g 19m S 0.0 4.0 0:00.00 java 15448 work 20 0 5473m 2.5g 19m S 0.0 4.0 0:26.85 java 15449 work 20 0 5473m 2.5g 19m S 0.0 4.0 0:00.87 java 15450 work 20 0 5473m 2.5g 19m S 0.0 4.0 0:00.82 java 15451 work 20 0 5473m 2.5g 19m S 0.0 4.0 0:00.85 java
进入top,再按1显示每个cpu的使用信息。
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断(Hardware IRQ)占用CPU的百分比
si — 软中断(Software Interrupts)占用CPU的百分比
列的含义:
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES resident memory usage 常驻内存,进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
参考:
https://mp.weixin.qq.com/s/eNvm8N_tY9T6qpN3UKb1XQ
包管理
apt-get install package-name 安装软件包
apt-cache search package-name 搜索软件源中可安装的软件包
apt-get update 更新软件列表
apt-get upgrade 更新软件
apt-get remove package-name 卸载软件
apt-get remove --purge package-name 卸载并清除配置
apt-cache madison package-name 列出所有版本
apt-get install package=version 安装指定版本
解压&压缩
解压:tar -zxvf eg:tar -zxvf jdk-8u101-linux-x64.tar.gz
压缩:tar -zcvf eg: tar -zcvf test.tar.gz test
解压zip:unzip test.zip
find命令
find ./ -name {fileName} 当前位置根据name查找某个文件
find -maxdepth 查找的最大深度。eg:find . -maxdepth 2 -name "Wuziqi.class"
find -type 查找某一类型的文件,eg:d:目录;l -:符号链接文件;f:普通文件。[默认啥类型的都查找]
grep
Copy # 在当前目录以及子目录查找字符串timeline
grep -r "timeline" ./
# 查询字符串,显示带上行号
grep -n "tiemline" TimeLine.log
# 显示匹配行数的上下几行
grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
grep -B 5 foo file 显示foo及前5行
grep -A 5 foo file 显示foo及后5行
# 只显示匹配部分
grep -o "test" test.log
# 不显示匹配的文件名
grep -h "test" test.log
# 匹配正则 -E或者-P [https://blog.csdn.net/yufenghyc/article/details/51078107]
grep -E "start*" test.log
# 或
grep -E '123|abc' test.log
# 不包含
grep -v "string"
# 不区分大小写
grep -i "string"
# 只显示匹配的前x行(grep -m 1表示只显示第一行)
grep -m 1 "string"
# 在指定的文件类型中查找
find -name "*.c" | xargs grep "aaa"
# 有的时候查询会报是二进制文件,可以使用-a解决
grep -a string file.log
ln软链接
创建软链接
Copy # 在当前目录创建一个软链接HTTPConten,指向/var/www/html
ln -s /var/www/html httpContent
环境变量
Copy # 查看所有的环境变量
export
# 查看指定的环境变量
echo $PATH
which
查找某个命令所在的绝对路径,比如:
Copy which java
/home/wangjun/jdk1.8.0_181/bin/java
which sudo
/usr/bin/sudo
whereis
查找特定目录下符合条件的文件,比如:
Copy whereis java
java: /usr/share/java /usr/share/man/man1/java.1.gz
# 以上输出信息从左至右分别为查询的程序名、java路径、java的man 手册页路径。
wget
下载命令,用法:wget {url}
光标移动删除
ctrl + k 删除光标后面所有字符
ctrl + u 删除光标前面所有字符
ctrl + y 恢复ctrl+u上次执行时删除的字符
ctrl + a 将光标移动到命令行开头
ctrl + e 将光标移动到命令行结尾处
ctrl + w 向后删除一个单词
option + f 向前移动一个单词
option + b 向后移动一个单词
查看内存占用情况
Copy # 第一种方式
cat /proc/meminfo
MemTotal: 1017788 kB
MemFree: 357644 kB
Buffers: 7096 kB
Cached: 68120 kB
SwapCached: 0 kB
Active: 544024 kB
Inactive: 65336 kB
Active(anon ): 534148 kB
Inactive(anon ): 9848 kB
Active(file ): 9876 kB
Inactive(file ): 55488 kB
......
# 第二种方式,free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。
free -h
total used free shared buffers cached
Mem: 993M 657M 336M 9.6M 9.3M 76M
-/+ buffers/cache: 571M 422M
Swap: 0B 0B 0B
【解释】
total:总内存大小。
used:已经使用的内存大小(这里面包含cached和buffers和shared部分 )。
free:空闲的内存大小。
shared:进程间共享内存(一般不会用,可以忽略 )。
buffers:要写到磁盘的东西在内存写完先缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上。
cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回,省去了寻址等过程 )。
-/+ buffers/cache看做两部分:
-buffers/cache:正在使用的内存大小(注意不是used部分,因为buffers和cached并不是正在使用的,组织和人民需要是它们是可以释放的 ),其值=used-buffers-cached。
+buffers/cache:可用的内存大小(同理也不是free表示的部分 ),其值=free+buffers+cached。
# 第三种方式,查看每个进程的内存情况
ps命令可以实时的显示各个进程的内存使用情况。Reported memory usage information includes %MEM (percent of physical memory used ), VSZ ( total amount of virtual memory used ), and RSS ( total amount of physical memory used )。你可以使用 “–sort”选项对进程进行排序,例如按RSS进行排序:
$ ps aux --sort -rss
查看CPU核数
Copy # 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo | grep "cpu cores" | uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo | grep "processor" | wc -l
权限控制
Copy # 将文件所有权付给group用户组下的user用户
chown user:group file1.txt
# 更改读写执行权限
# 所有人可读
chmod ugo+r file1.txt #u:user,g:group,o:others,r:read
# 所有人可读取
chmod a+r file1.txt
将文件file1.txt 与 file2.txt设为拥有者,同群体用户可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
# 也可以使用数字
r = 4, w = 2, x = 1
若要rwx属性则4+2+1 =7;
若要rw-属性则4+2 =6;
若要r-x属性则4+1 =5。
chmod ug=rwx,o=x file
和
chmod 771 file
效果一样
# 将文件夹及其所有子文件夹和文件赋予权限777
chmod -R 777 folder
lsof
List open files。是一个列出当前系统打开文件的工具,因为在Linux下任何事物都以文件的形式存在,所以lsof打开的文件可以是:普通文件、目录、网络文件系统的文件、字符或设备文件、(函数)共享库、管道、符号链接、网络文件(网络Socket等)还有其他类型的文件等。
Copy # 查看端口被哪个进程占用
lsof -i:14814
# 查看文件被哪个进程打开
sudo lsof test.log
# 查看当前目录所有文件的占用情况
lsof +d ./
# 查看被删除文件的占用进程
lsof | grep del
# 命令参数:
-a 列出打开文件存在的进程
-c <进程名> 列出指定进程所打开的文件
-g 列出GID号进程详情
-d <文件号> 列出占用该文件号的进程
+d <目录> 列出目录下被打开的文件
+D <目录> 递归列出目录下被打开的文件
-n <目录> 列出使用NFS的文件
-i <条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p <进程号> 列出指定进程号所打开的文件
-u 列出UID号进程详情
-h 显示帮助信息
-v 显示版本信息
参考:
https://www.cnblogs.com/peida/archive/2013/02/26/2932972.html
查看网络带宽dstat -nt
Copy # 每一秒统计一次,第一列是入网速度,第二列是出网速度
dstat -nt
-net/total- ----system----
recv send | date/time
0 0 | 27-11 16:05:32
1287k 384k | 27-11 16:05:33
1618k 350k | 27-11 16:05:34
907k 255k | 27-11 16:05:35
413k 294k | 27-11 16:05:36
327k 353k | 27-11 16:05:37
tcpdump抓包
Copy #-s 0 : 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包
# -X 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16和ASCII码形式打印出每个包的数据(但不包括连接层的头部).这对于分析一些新协议的数据包很方便.
# 'tcp dst port 8080'是tcpdump条件表达式,表示过滤出目的端口是本机8080的tcp协议数据包
sudo tcpdump -s 0 -X 'tcp dst port 8080'
# 保存成文件,可以使用wireshark分析
sudo tcpdump -s 0 -X 'tcp dst port 8080' -w test.log
参考:
https://www.cnblogs.com/Jtianlin/p/4330723.html
查找历史命令
Copy # history:显示历史执行命令,可以配合grep使用
# 按下Ctrl + r进入命令搜索模式,输入搜索的命令,如果有多个匹配到,再次按Ctrl + r向上查找。
du 查看大小
Copy # 列出当前目录下所有目录和文件的大小
du -sh *
# 列出大小并排序
du -sh *|sort -hr
# 查看当前文件夹所有文件总大小
du -s ./
# 列出当前目录下所有目录和子目录的大小
du
# 列出当前目录下所有目录的大小(不包括子目录)
du --max-depth=1
nc
Copy # 监听端口数据,只能监听没被使用的端口
nc -l 11317
# 巧用:可以用来传送文件
# 1.在被接收方开一个端口进行监听数据,并将数据写入文件
nc -l 3456 > test.log
# 2.在发送方将数据写入目标的ip,port
nc 10.235.111.248 3456 < test.log
# 查看端口是否启动
nc -z 127.0.0.1 9429
Connection to localhost 9429 port [tcp/*] succeeded !
!号的妙用
Copy # 使用history会列出历史命令,每条命令前面有个数字,使用! + 数字就可以执行历史命令,例如
$ history | grep export
1573 export NAMESRV_ADDR=localhost:9876
2001 history | grep export
wangjun@iZ94pe2uk6bZ:~$ !1573
export NAMESRV_ADDR = localhost:9876
# 执行上一条命令
!!
# 在上一条命令之前加参数
$ /opt/user/test.txt #忘记输入more
$ more !! #这样是不是快多了?
# !$表示上条命令的最后一个参数,!^表示上条命令的第一个参数
# 执行上一条以关键字开头的命令
$ !find #执行上条以find开头的命令
行数统计 wc
Copy # testfile文件的统计信息
wc testfile
3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598
# 统计三个文件
wc testfile testfile_1 testfile_2
3 92 598 testfile #第一个文件行数为3、单词数92、字节数598
9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78
3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32
15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708
# grep + wc 统计此文件匹配的行数
grep "thread:Thread-" file.log* | wc -l
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
dmesg
查看core信息,一般有进程挂掉,dmesg会记录此信息。
查看某个进程使用的环境变量
vim /proc/{进程号}/environ
pstree显示线程
以树状图的方式展现进程之间的派生关系,显示效果比较直观。
Copy # 显示进程下面的线程
pstree -p 23304
dig
dig命令主要用来从DNS域名服务器查询主机地址信息。
Copy $ dig miliao.com
; << >> DiG 9.9.5-3ubuntu0.2-Ubuntu << >> miliao.com ## 1:显示dig命令的版本和输入参数
;; global options: +cmd
;; Got answer: ## 2:显示返回的一些详情,比如status的值为NOERROR,表示查询成功
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48542
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ## 3:QUESTION SECTION显示我们要查询的域名
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;miliao.com. IN A
;; ANSWER SECTION: ## 4:查询结果
miliao.com. 600 IN CNAME orig.sc.g.mi.com. ## 分别表示要解析的地址,TTL(缓存时间) ,查询类,类型,解析到的地址
orig.sc.g.mi.com. 600 IN A 36.110.204.140
;; Query time: 36 msec ## 5:本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。
;; SERVER: 100.100.2.138#53(100.100.2.138)
;; WHEN: Mon Jul 08 15:50:22 CST 2019
;; MSG SIZE rcvd: 82
参考:https://www.cnblogs.com/sparkdev/p/7777871.html
wall 同步信息
Copy # wall + 字符串可以将字符串发给给同时登陆同一台机器的其他人
wall "test"
# 或者
echo "test" | wall
scp
远程拷贝命令
Copy # 将本地文件test.log拷贝到远程机器的work目录下面
scp test.log wangjun@10.235.111.248:/home/wangjun/work
tldr(需要安装)
tldr全称Too long, Don’t read,翻译成中文就是[太长不读]。tldr
根据二八原则将命令的常用场景给出示例,让人一看就懂。
Copy # mac上安装,只需要执行一行
brew tap tldr-pages/tldr && brew install tldr
# 查看 netstat命令
awk
awk是一个强大的文本分析工具。
Copy # 每行按空格或TAB分割,输出文本中的1、4项
awk '{print $1,$4}' log.txt
# 格式化输出
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
# 使用","分割
awk -F, '{print $1" "$2}' log.txt
# 设置变量
awk -va=1 '{print $1,$1+a}' log.txt
# 根据逗号分割打印出所有的字段
awk -F, '{for(i=1;i<=NF;i++)print $i}' log.txt
xargs
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
比如:
Copy # 先找到一个java进程然后杀死
jps -l | grep 'test' | awk '{print $1}' | xargs kill -9
参考:
https://www.runoob.com/linux/linux-comm-xargs.html
sort
sort命令用于将文本文件内容加以排序。
Copy # 默认以ASCII码来排序
# -n 依照数值的大小来排序
# -r 倒叙(默认正序)
# -k n 以第几列来排序
uniq
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
注意: 只能合并相邻的相同数据,比如下面的数据:
uniq后为:
所以一般是先sort排序,之后再用uniq。
eg:
Copy grep "Greet \] GreetReq:" spp_worker1.20190421.log* | grep -oE "userId.*" | awk -F, '{print $1" "$2}' | awk '{print $4}' > greet.csv
sort greet.csv | uniq -c | sort -n -k 1 > sort.csv
who
查看当前登录客户端的用户都有哪些
Copy wangjun@iZ94pe2uk6bZ:~# who
wangjun pts/0 2019-05-14 17:01 (106.39.75.134)
wangjun pts/1 2019-05-14 17:14 (106.39.75.134)
## 显示标题
wangjun@iZ94pe2uk6bZ:~# who -H
NAME LINE TIME COMMENT
wangjun pts/0 2019-05-14 17:01 (106.39.75.134)
wangjun pts/1 2019-05-14 17:14 (106.39.75.134)
## 只显示自己
wangjun@iZ94pe2uk6bZ:~# who -m
wangjun pts/0 2019-05-14 17:01 (106.39.75.134)
## 精简显示
wangjun@iZ94pe2uk6bZ:~# who -q
wangjun wangjun
# users=2
这个时候如果需要强制踢人下线则可以使用pkill:
Copy wangjun@iZ94pe2uk6bZ:~# pkill -kill -t pts/1
查看二进制文件
Copy hd 文件名
# centos下使用hexdump
hexdump 文件名
# od命令,od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示
od -c file # ASCII字符或者反斜杠
od -x file # 16进制
od -o 或者 od file # 8进制
od -d file # 10进制
nmap查看端口
nmap是一款网络扫描和嗅探工具,可以扫描目标机器有哪些端口是open状态。
Copy # 需要安装
apt-get install nmap
# 扫描端口
nmap {ip}
参考:
https://www.cnblogs.com/freeweb/p/6903915.html
crontab定时任务
常用命令:
Copy crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
我们用crontab -e 进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。crontab的命令构成为 时间+动作,其时间有分、时、日、月、周 五种,操作符有
比如我们写一个定时任务,每1分钟清空一次test文件夹里面的所有文件。
Copy crontab -e
# 进入编辑界面,输入
* /1 * * * * rm -rf /home/wangjun/test/test/ *
# 保存即可
参考:
https://www.runoob.com/w3cnote/linux-crontab-tasks.html
命令执行挂起终止
Ctrl+Z:将一个正在前台执行的命令放到后台,并处于暂停状态
jobs:查看当前有多少在后台运行的命令。jobs -l
选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
fg:将后台中的命令调至前台 继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
bg:将一个在后台暂停的命令,变成在后台 继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
kill:终止进程
方法1:通过jobs命令查看job号(假设为num),然后执行kill %num
方法2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:Ctrl+c
nohup:如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
参考:
https://www.cnblogs.com/kaituorensheng/p/3980334.html
curl
Copy # GET请求
curl {url}
# POST请求
curl -d "user=admin&passwd=12345678" {url}
# TRACE请求 -X 执行HTTP 方法 -v 显示多的信息
curl -v -X {url}
file显示文件类型
可以通过file命令查询文件位数,64位或者32位
Copy $ file libhadoop.so.1.0.0
libhadoop.so.1.0.0: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1] = 2c6a0dae993e827ec637437f921b30279487049c, with debug_info, not stripped
# 显示文件MIME类型
$ file -i start.sh
start.sh: text/x-shellscript ; charset = us-ascii
计算器bc
Copy bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type ` warranty'.
1+1
2
# 设计小数点位数,默认为0
scale=3
locate
locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb
命令,手动更新数据库。
date
Copy # 显示时间
date
# 当前时间转时间戳(秒)
date +%s
# 时间戳转时间
date -d @1587450784
【mac系统】date -r 1587450784
file
Copy # 确定文件类型
# 可执行文件
$ file test_tool
test_tool: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked ( uses shared libs ), for GNU/Linux 2.6.18, not stripped
# 二进制文件
$ file 200988.dump
200988.dump: data
# ASCII 文本文件
$ file test.log
stat .log: ASCII text
分析二进制
https://mp.weixin.qq.com/s/Se5hTxB9Li4aq9QAhhMK4g
kill
Copy # kill -9 pid 和 kill -15 pid的区别:kill后面跟数字其实是一个信号量,可以执行kill -l来查看kill支持的所有信号量。
$ kill -l
1 ) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6 ) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11 ) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16 ) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21 ) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26 ) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31 ) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38 ) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43 ) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48 ) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53 ) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58 ) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63 ) SIGRTMAX-1 64) SIGRTMAX
# -9表示强制杀死进程,-15表示通知进程主动关闭,进程可以监测到,在关闭之前可以做一些事情,比如关闭IO,保存数据,打印日志等操作。
我们可以编写一个程序实验一下:
Copy public class Main {
private static void shutdownCallback () {
System . out . println ( "程序马上关闭!" );
}
public static void main ( String [] args) throws InterruptedException {
Runtime . getRuntime () . addShutdownHook ( new Thread() {
@ Override
public void run () {
shutdownCallback() ;
}
});
Thread . sleep ( 100000 );
}
}
运行这个程序,然后依次执行kill -15和kill -9,可以看到-15可以输出”程序马上关闭“,-9不能输出:
Copy kill -15 30397
程序马上关闭!
Process finished with exit code 143 (interrupted by signal 15: SIGTERM )
kill -9 30447
Process finished with exit code 137 (interrupted by signal 9: SIGKILL )
PS:kill -15 pid
等价于kill pid
。
head/tail 只显示结果的n行
Copy # 只显示结果的第一行
grep "String" test.log | head -n 1
# 只显示结果的倒数第一行
grep "String" test.log | tail -n 1
printf
Copy # 10进制转16进制
$ printf %x 109630
1ac3e$
# 换行 \n
printf '%x\n' 109630
1ac3e
# 转十进制:%d,转八进制:%o
cut
Copy # 截取字符串
abcd
cut -b 1
# 输出a
cut -b 1,3
# 输出ac
cut -b 1-3
# 输出abc
watch 循环执行某个命令
Copy # 每隔2s显示时间,-d 变更的内容高亮显示
watch -d date
# 每隔1s显示文件的信息,-n {x} 每x秒执行一次
watch -d -n 1 ls -l test.log
uptime 显示系统平均负载
Copy $ uptime
14:37:28 up 1 day, 3:00, 1 user, load average: 0.25, 0.35, 0.35
# 14:37:28 当前时间
# up 1 day, 3:00 系统运行时间
# 1 user 当前登录用户数
# load average: 0.25, 0.35, 0.35 系统平均负载,分别表示系统内1分,5分,15分的平均负载
# 平均负载:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
swapon swap使用情况
Copy # 查看swap使用情况(也可以用free)
swapon -s
wangjun@raspberrypi:~ $ swapon -s
Filename Type Size Used Priority
/var/swap file 102396 0 -2
#第一列:Swap分区存储设备的名称或分区的位置
#第二列:表示存储分区类型
#第三列:表示Swap分区的总容量
#第四列:表示Swap分区的使用情况
#第五列:表示将被使用的优先级