我常用的Linux指令/工具

Linx terminal

出于想做Full Stack,却又不是专业运维,维护服务器频次比较低,平时coding为主,但是服务器还是要了解一下的,所以记录下我常用的指令/工具,太好记的就不写了

1. 目录及文件类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 解压
tar -xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar -xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
# 压缩
tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar
tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包
tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包
tar -cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包
rar a jpg.rar *.jpg //rar格式的压缩
zip jpg.zip *.jpg //zip格式的压缩
# 阅读文件
cat -n //显示行号
cat -n ons.log | tail -n +100 | head -n 20 // 从第100行起,显示20行
more //分页显示文件,只能往后面翻页
less //分页显示文件,可以前后翻,在翻阅的时候可以输入 /abcd 查找并高亮abcd字符串
tail -n200 -f //先显示文档尾,最后200行,并持续输出
head //显示文件头,与tail类似
wc file.txt // 显示字数行数统计,列出数字分别为“行数 单词数 字节数 文件名”
-l 行数统计
-v 字节统计
-L 最长行的长度
-w 统计单词数
# 查找文件内容
grep //支持正则查找
cat test.txt | grep hat$ // 查找text.txt文件中,以hat结尾的内容
grep '[a-z]\{7\}' *.txt //显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行
expr // 表达式求值 ,+-*/运算,以及对字符串的一些操作
cat test.txt | cut -c 1-100 //显示每行1-100字符的内容,有时候单行log太长,影响查看则,使用则可以很整齐的显示

2. 服务器日志操作

1
2
3
4
5
6
# 查看access.log中访问top10的
cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10
# 查看access.log中访问top10的url
cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10
# 查看最耗时的页面
cat access.log | sort -k 2 -n -r | head -10

3. 查看系统新能指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 查看系统版本
lsb_release -a
# 查看负载
uptime // 最后的load average系统平均负载,统计最近1,5,15分钟的系统平均负载
# 查看系统状态
top
| grep Cpu // 只查看CPU的
-p 123 // 进程只显示 123 pid的
# 查看磁盘
df -h
du -h /home/haha // 查看 /home/haha目录下,具体文件占用多少磁盘空间
# 查看网络状况
sar -n DEV 1 1
# 查看系统IO情况
iostata -d -k
# 查看内存使用情况
free -m
# 查看swap IO的情况
vmstat
# 被监听的端口
netstat -tnlp

4. 系统网络相关指令

1
2
3
4
5
6
7
8
# 在防火墙中打开要用到的端口2181,编辑iptables文件
vim /etc/sysconfig/iptables
## 2. 末尾增加以下内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
## 3. 重启防火墙
service iptables restart
## 4. 查看防火墙状态
service iptables status

5. Java服务器相关

jps 主要用来输出JVM中运行的进程状态,类似Unix系统中的ps

1
2
3
4
5
jps [options] [hostid]
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数

jstack 查看某个Java进程内的线程堆栈信息

1
2
3
jstack [option] pidjstack [option] executable corejstack [option] [server-id@]remote-hostname-or-ip
-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

jmap jhat 用来查看堆内存使用状况,一般结合jhat使用。

1
2
3
4
5
6
7
8
jmap [option] pidjmap [option] executable corejmap [option]
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
[server-id@]remote-hostname-or-ip
jmap -heap pid // 查看进程堆内存使用情况
jmap -permstat pid // 打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息
jmap -histo:live pid | more // 查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jmap -dump:format=b,file=dumpFileName pid
jhat -port 9998 /tmp/dump.dat // 用jmap把进程内存使用情况dump到文件中,再用jhat分析查看


作者 @Brady
2016年8月10日