Linux常用命令(2)

Posted by AceKei on November 21, 2018

目录


1. head命令

用来查看文件的前几行(默认10行)的内容

查看redis.config前10行

1
2
3
4
5
6
7
8
9
10
11
12
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# head redis.conf 
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#

-n

查看前n行

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# head -20 redis.conf 

2. tail命令

查看文件末尾的内容(默认10行)。

查看redis.config末尾10行信息

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# tail redis.conf 

-n

查看末尾n行

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# tail -20 redis.conf 

-f,–follow

当文件有继续输入时,继续打印输出。

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# tail -f -20 redis.conf 

-f -n连用

这个时候不能使用-n,直接输数字。

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# tail -f 20 redis.conf

3. tar命令

tape archive

将一个文件或者目录打包压缩成一个文件,或者将解压。 打包:仅仅是将一根文件或者目录下的所有内容汇总成一个总文件而已。 压缩:通过某些算法(gzip,bzip2)进行压缩成更小的文件。

tar zcvf src.tar.gz src/

src目录打包并压缩成 src.tar.gz文件。

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# tar zcvf src.tar.gz src/

tar命令是汇总成 “.tar” 文件。z 选项是采用gzip算法压缩成 “.gz” 文件。

tar ztvf src.tar.gz

查看压缩包里面的内容。

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# tar ztvf src.tar.gz

tar zxvf src.tar.gz

解压

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# tar zxvf src.tar.gz

4. ping命令

用于测试2台主机之间的网络是否连接。

ping www.baidu.com

查看当前主机与百度服务器的网络情况。 其中百度域名可以替换成IP地址

1
2
3
4
5
6
7
8
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=52 time=6.51 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=52 time=6.55 ms
^C
--- www.a.shifen.com ping statistics ---
14 packets transmitted, 14 received, 0% packet loss, time 13014ms
rtt min/avg/max/mdev = 6.512/6.577/6.756/0.077 ms

ctrl + c中断ping

-c

ping的次数。

1
2
3
4
5
6
7
8
9
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=52 time=5.58 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=52 time=5.59 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=52 time=5.60 ms

--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 5.581/5.594/5.605/0.061 ms

5. ssh命令

用于一台主机远程登录另外一台主机。

ssh 远程主机用户名@远程主机IP

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# ssh wsk1103@192.168.18.18

如果当前主机的用户名和远程主机的用户一致,则可以省略。

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# ssh 192.168.18.18

-p

指定访问的端口,默认是22

1
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# ssh -p 33 192.168.18.18

6. | 管道命令

管道|,能够将上一个命令的正确执行输出到下一个命令,作为下一个命令的标准输入。一般是与其他命令常用,最常用的是grep一起使用。

7. ps命令

process status 进程状态

用于查看当前系统运行的进程状态信息。该命令选项非常多,介绍常用。

-ef

查看当前系统所有的进程信息

1
2
3
4
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jan15 ?        00:00:55 /usr/lib/systemd/systemd --switched-r
root         2     0  0 Jan15 ?        00:00:00 [kthreadd]

字段说明

字段 说明
UID 进程所属用户ID
PID 进程ID,杀进程就是杀这个
PPID 进程的父ID
C CPU的使用率
STIME 进程的启动时间
TTY 开始此进程的终端设备。”?”:系统启动。”tty1”到”tty6”:本机上的登录者的程序。”pst/0”:网络连接进来的主机的程序。
TIME 进程使用CPU的总时间
CMD 启动进程的命令和参数

aux组合

查看当前系统所有的进程信息

1
2
3
4
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 125108  3644 ?        Ss   Jan15   0:55 /usr/lib/systemd/sys
root         2  0.0  0.0      0     0 ?        S    Jan15   0:00 [kthreadd]

字段说明

字段 说明
USER 进程的拥有者
PID 进程ID
%CPU 进程占用的CPU百分比
%MEN 进程占用的内存百分比
VSZ 进程使用的虚拟内存大小,单位KB
RSS 进程占用固定内存大小,单位KB
TTY 开始此进程的终端设备。”?”:系统启动。”tty1”到”tty6”:本机上的登录者的程序。”pst/0”:网络连接进来的主机的程序。
STAT 进程的状态,常见有:
R:正在运行或者可运行状态
S:处于休眠状态,等待被唤醒
Z:僵尸进程,程序已经终止,但是进程无法正常退出
T:已停止或处于被追踪状态
D:不可中断,一般是在等I/O
<:优先级高的进程
N:优先级低的进程
s:进程领导者,一般会有子进程
l:多线程的
START 进程的启动时间
TIME 进程使用CPU的总时间
COMMAND 启动进程的命令和参数

-eo 组合

自定义显示的进程信息字段

1
2
3
4
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# ps -eo user,pid,pcpu,pmem,cmd
USER       PID %CPU %MEM CMD
root         1  0.0  0.1 /usr/lib/systemd/systemd --switched-root --system --deserial
root         2  0.0  0.0 [kthreadd]

–sort -pcpu

对指定的字段进行排序显示,其中pcpu可以换成其他字段。- 表示降序, + 表示升序。

1
2
3
4
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# ps aux --sort -pcpu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
jenkins  11019  0.2 27.8 2710924 525164 ?      Ssl  Mar25   4:14 /etc/alternatives/ja

找出最占内存的10个进程

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# ps -aux --sort -pmem | head

8. kill命令

杀死一个进程。

可以给定一个进程具体的信号,如果没有明确的信号,则默认发生 15 信号。

信号说明

信号 说明
2 中断信号,Ctrl + c
9 强制终止
15 终止信号
19 暂停信号,Ctrl + z

kill -9 8080

强制终止进程为 8080 的进程。

kill 9 与kill -9 的区别

kill 9:只是告诉进程你需要终止运行,但是并不会立刻终止,而是先释放占用的资源或者做其他事情。 kill -9:立刻终止进程,无法反抗。

9. top命令

查看进程占用系统资源的实时动态列表信息

top

每隔3秒刷新一次

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# top

image

第一行,系统整体信息的统计

  • 23:45:10 当前时间
  • up 70 days, 9:20 系统连续运行时间
  • 1 user 当前登录用户数
  • load average: 0.00, 0.01, 0.05 系统分别在1,5,15分钟内的负载均衡

第二行,进程的统计信息

  • 68 total, 进程的总数
  • 1 running,正在运行的进程数
  • 67 sleeping,休眠的进程数
  • 0 stopped,停止的进程数
  • 0 zombie,僵尸进程数

第三行,CPU的统计信息

  • 0.3 us,用户占用的CPU百分比
  • 0.0 sy,内核占用的CPU百分比
  • 0.0 ni,
  • 99.7 id,空闲的CPU百分比
  • 0.0 wa,
  • 0.0 hi,
  • 0.0 si,
  • 0.0 st

第四行,内存的统计信息

  • 1883724 total,物理内存总大小
  • 85128 free,空闲可用物理内存大小
  • 776548 used,已用物理内存大小
  • 1022048 buff/cache缓冲内存大小

第五行,交换区的统计信息

  • 0 total,交换分区的总大小
  • 0 free,可用
  • 0 used.已用
  • 907264 avail Mem

因为top命令是按照单个CPU的核数来算的,所以有的时候,CPU的占比率会超过100%。例如一台服务器CPU为2核,那么CPU使用率理论可用达到200%。

当物理内存不够的时候,Linux有一个OOM-killer(Out of Memory killer)机制,他会直接杀死内存占比最高的那个进程。

top命令第一行的load average 也是一个比较直观的反应当前系统的性能情况。当数值在0.00-1.00之间浮动,则表示当前系统状态良好。当然如果,一台服务器是2核,那么理论上负载能力可以达到2.00.当系统平均负载达到总数的70%时,就要分析原因了。分析的重点主要是后2个值。

进程区信息字段说明

字段 说明
PID 进程ID
USER 进程拥有者
VIRT 进程使用的虚拟内存总大小,KB
RES 进程使用的物理内存总大小,KB
SHR 进程使用的共享内存总大小,KB
%CPU 上次更新到现在的CPU时间占比
%MEM 进程所占的物理内存百分比
COMMAND 启动进程的命令和参数

top命令支持按键响应事件。

按键 说明
P(shift + p) 按%CPU降序排序
M(shift + m) 按%MEM降序排序
N(shift + n) 按PID降序排序
1(数字1) 查看每个核的CPU使用情况
s 刷新的时间间隔,默认是5秒
q 退出

-d

查看列表信息的刷新时间间隔,默认是5秒

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# top -d 7

-p

查看指定的进程ID信息

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# top -p 8181

10. grep命令

搜索文本内容,从大量的数据中快速搜索。

grep redis redis.config

从redis.config中,搜索redis出现的行

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# grep redis redis.config

-n,–line-number

搜索到后,显示行号

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# grep -n redis redis.config

-e,–regexp

搜索多个

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# grep -e Redis -e redis redis.config

同时搜索redis和Redis

–color

将搜索结果高亮显示

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# grep --color redis redis.config

-E,–extended-regexp

等效 egrep,用正则表达式搜索

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# egrep '\bre' redis.config

-v,–invert-match

反转查找

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# ps -ef | grep nginx | grep -v java

查找nginx进程,并且将 grep java 行的信息排查掉

-r,–recursive

搜索一个目录下的所有文件

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# grep -r redis redis/

11. find命令

查找文件

find [查找的目录] [选项] [参数]

-name

按照文件的名称查找

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# find / -name redis

-type

根据文件的类型查找

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# find / -type d -name redis

文件类型说明

文件类型 说明
f 普通文件
d 目录
l 符号链接

-nmin

查找指定时间内被更改过的文件或者目录

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# find /  -name redis -mmin -5

查找5分钟前

12. su命令

切换用户身份。

su

等效 su root

su wsk

切换到wsk用户,当前目录路径不会变

su - wsk

切换到wsk用户,并且目录变更为wsk的home下。

13. 前台和后台任务

后台进程也叫守护进程,是运行在系统后台的进程。

命令的末尾加 &

将一个进程放到后台系统去运行,则在命令的末尾加 &

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# java -jar test.jar &

nohup command &

一般情况下,当用户退出终端后,那么启动的进程也会随着退出,为了使进程不随退出终端而退出,使用 nohup command &

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# nohup java -jar test.jar &

默认情况下,nohup命令会将进程的输出打印到当前目录下的“nohup.out”文件中。

当我们不想输出到“nohup.out”的时候,可以指定输出路径。

1
[root@izwz9ga6l7ls6ozy9ylwbdz ~]# nohub java -jar test.jar >/dev/null 2>&1 &

其中 >/dev/null 的:
> 表示重定向到某地地方。默认是标准输出,也就是 > 等效 1>
/dev/null:系统的空设备文件,经常到垃圾箱使用。这里不会输出任何的东西。

2>&1 表示:
>& 是等同于 的意思
2>&1表示将标准错误重定向到与标准输出相同的地方。

总的来说,这条命令就是输入和输出都不需要显示在终端上。

0,1,2说明

文档类型 符号 说明
stdin 0 标准输入
stdout 1 标准输出
stderr 2 标准错误

jobs

后台的任务,可以使用命令jobs命令来查看

1
2
3
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# jobs
[1]-  Stopped                 vi redis.conf
[2]+  Stopped                 vi sentinel.conf

其中,[num] 表示任务序号, + 表示默认选择的任务, - 表示任务需要通过任务序号来选择。

fg [num]

使用fg [num] 可以将一个后台任务切换到前台。

通过Ctrl + z也可以将一个进程暂停并且放到后台去。

bg [num]

将后台暂停的任务变为继续运行。

kill %num

杀死后台任务

14. 磁盘空间

dfdu 就可以查看磁盘空间

df

disk free
磁盘可用空间,用于查看服务器磁盘空间情况。

1
2
3
4
5
6
7
8
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  4.3G   33G  12% /
devtmpfs        910M     0  910M   0% /dev
tmpfs           920M     0  920M   0% /dev/shm
tmpfs           920M  316K  920M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
tmpfs           184M     0  184M   0% /run/user/0

du

disk usage
磁盘使用情况,查看文件或者目录占用的磁盘空间

1
2
3
4
[root@izwz9ga6l7ls6ozy9ylwbdz redis]# du redis-5.0.3 -h
24K	redis-5.0.3/utils/releasetools
24K	redis-5.0.3/utils/lru

15. 内存空间 free

查看系统内存的使用情况。

1
2
3
4
[root@izwz9ga6l7ls6ozy9ylwbdz redis]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        759M         68M        324K        1.0G        885M
Swap:            0B          0B          0B

16. wc命令 free

word count
单词统计

用于统计文本

-c,–bytes

统计字符数

1
2
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# wc -c redis.conf 
62170 redis.conf

-w,–words

统计单词数

1
2
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# wc -w redis.conf 
10732 redis.conf

-l,–lines

统计行数

1
2
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# wc -l redis.conf 
1379 redis.conf

17. netstat命令 free

查看系统的网络情况

-ant组合

查看所有TCP连接情况信息

  • -a,-all 显示所有socket链接
  • -n,-numeric 显示使用数字类型的IP地址
  • -t,tcp 只显示TCP的链接
1
2
3
4
5
6
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:8585            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     

-lntp 组合

查看系统监听端口的所有进程信息

  • -l,只显示监听的socket链接
  • -n,-numeric 显示使用数字类型的IP地址
  • -t,tcp 只显示TCP的链接
  • -p,显示进程PID和进程名称
1
2
3
4
5
6
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8585            0.0.0.0:*               LISTEN      11019/java          
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      1474/

端口占用

查看端口被占用

1
2
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# netstat -lntp | grep 8585
tcp        0      0 0.0.0.0:8585            0.0.0.0:*               LISTEN      11019/java  

可以看到8585端口被进程PID为11019的程序占用。

统计端口链接数

1
2
3
[root@izwz9ga6l7ls6ozy9ylwbdz redis-5.0.3]# netstat -ant | grep 8585 | wc -l
1

18. vi命令 free

vi编辑器。

有3种模式:

  • 命令模式:可以删除,复制等操作
  • 插入模式:可以插入文本
  • 底行模式:设置编译器,字符查找,文件保存和退出等。

命令模式

按键说明

按键 说明
j 光标向下移动
k 光标向上移动
h 光标向左移动
l 光标向右移动
gg 文首
G 文末
nG n是一个数字,定位到第N行
0 行首
^ 行首
$ 行尾
dd 删除光标所在行
yy 复制光标所在行
x 光标从高亮处(包括高亮处)向后删除字符
X 光标从高亮处(不包括高亮处)向后删除字符
p 将复制的内容粘贴在光标所在行的下一行
P 将复制的内容粘贴在光标所在行的上一行
u 还原
. 重复动作
?word 向上查找word字符串
/word 向下查找
n 同向搜索
N 反向搜索

进入插入模式

按键 说明
i 在光标高亮处之前插入
I 在光标所在行的行首插入
a 在光标的高亮处之后插入
A 在光标所在行的行尾插入
o 在光标所在行的下一行插入一个空行
O 在光标所在行的下上一行插入一个空行
Exc 退出插入模式,回到命令模式

在命令模式,进入底行模式

按键 说明
:w 保存
:q 退出
:w! 强制写入
:q! 强制退出
:wq 保存退出
:wq! 强制保存退出
:set nu 显示行号
:set nonu 隐藏行号
:nohl 退出匹配的高亮显示
:s/表达式/替换字符/ 替换当前行匹配到的第一处
:s/表达式/替换字符/g 替换当前行匹配到的所有处
:%s/表达式/替换字符/g 替换文档中匹配到的所有处
ZZ 保存退出
ZQ 不保存退出