1.1 cd 命令
这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如:
cd /ucharm/server/logs # 切换到目录/ucharm/server/logs
cd ./path # 切换到当前目录下的path目录中,“.”表示当前目录
cd ../path # 切换到上层目录中的path目录中,“..”表示上一层目录
1.2 ls 命令
这是一个非常有用的查看文件与目录的命令, 它的参数非常多, 下面就列出一些常用的参数如下 :
-l :长格式显示包含的文件属性与权限数据等
-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
-d :仅列出目录本身,而不是列出目录的文件数据
-h :将文件容量以较易读的方式(GB,kB等)列出来
-R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
1.3 grep命令
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-l :列出文件内容符合指定的范本样式的文件名称。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
例1 : 使用正则表达式 -E 选项
grep -E "[1-9]+" 或者 egrep "[1-9]+"
echo Yeeorder is a very good platform. |grep -E '[a-z]+.' //加上-o 选项则过滤出关键字
例2 : 使用忽略大小写 -i 选项
grep -i 'FAILED' sys.log //显示文件中含有FAILED的关键字
grep -ic 'FAILED' sys.log //显示文件中含有FAILED的关键字的次数
grep -in 'FAILED' sys.log //显示文件中含有FAILED关键字所在的行号
grep -in -C 3 'FAILED' error.log //显示文件中含有FAILED关键字的前后3行
grep -il 'ucharm' sys-1.log sys-2.log //搜索多个文件中并查找匹配的ucharm关键字,忽略大小写之分
grep '2019-11-04 13:[0-59]' sys.log //显示11月4号下午13点之间的日志
1.4 find 命令
find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:
# 与时间有关的参数:
-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件; find /etc -mtime 0 #在当前目录下查找今天之内有改动的文件
-mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;
-mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;
-newer file : 列出比file还要新的文件名
# 与用户或用户组名有关的参数:
-user name : 列出文件所有者为name的文件
-group name : 列出文件所属用户组为name的文件
-uid n : 列出文件所有者为用户ID为n的文件
-gid n : 列出文件所属用户组为用户组ID为n的文件
# 与文件权限及名称有关的参数:
-name filename :找出文件名为filename的文件
-size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件
-tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、
目录(d)、链接文件(l)、socket(s)、FIFO管道文件(p);
-perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;
-perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示
-perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示
1.5 cp 命令
该命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:
-a :将文件的特性一起复制
-p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
-i :若目标文件已经存在时,在覆盖时会先询问操作的进行
-r :递归持续复制,用于目录的复制行为
-u :目标文件与源文件有差异时才会复制
1.6 mv 命令
该命令用于移动文件、目录或更名,move之意,它的常用参数如下:
-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件已经存在,就会询问是否覆盖
-u :若目标文件已经存在,且比目标文件新,才会更新
1.7 rm 命令
该命令用于删除文件或目录,remove之间,它的常用参数如下:
-f :就是force的意思,忽略不存在的文件,不会出现警告消息
-i :互动模式,在删除前会询问用户是否操作
-r :递归删除,最常用于目录删除,它是一个非常危险的参数
1.8 ps命令
该命令用于将某个时间点的进程运行情况选取下来并输出,process之意,它的常用参数如下:
-A :所有的进程均显示出来
-a :不与terminal有关的所有进程
-u :有效用户的相关进程
-x :一般与a参数一起使用,可列出较完整的信息
-l :较长,较详细地将PID的信息列出
1.9 kill 命令
该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号(指定进程PID的进程),它通常与ps和jobs命令一起使用,它的基本语法如下:
kill -signal PID
signal的常用参数如下:
1: SIGHUP,启动被终止的进程
2: SIGINT,相当于输入ctrl+c,中断一个程序的进行
9: SIGKILL,强制中断一个进程的进行
15:SIGTERM,以正常的结束进程方式来终止进程
17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行
注:最前面的数字为信号的代号,使用时可以用代号代替相应的信号
1.10 killall 命令
该命令用于向一个命令启动的进程发送一个信号(用于杀死指定名字的进程),它的一般语法如下:
killall [-iIe] [command name]
-i :交互式的意思,若需要删除时,会询问用户
-e :表示后面接的command name要一致,但command name不能超过15个字符
-I :命令名称忽略大小写
# 例如:
killall -SIGHUP syslogd # 重新启动syslogd
pkill [options] [singal] 进程名 #按照进程名来杀死进程 选项: -t 终端号:按照终端号来踢出用户
例: pkill -9 -t tty1 #将tty1踢出去,不能登录系统
1.11 tar 命令
该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压。它的常用参数如下:
-c :新建打包文件
-t :查看打包文件的内容含有哪些文件名
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j :通过bzip2的支持进行压缩/解压缩
-z :通过gzip的支持进行压缩/解压缩
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename :filename为要处理的文件
-C dir :指定压缩/解压缩的目录dir
压缩:tar -czf filename.tar.gz 要被处理的文件或目录名称
查询:tar -tf filename.tar.gz
解压指定文件: tar -xf filename.tar.gz 文件在压缩包里的路径
解压:tar -xf filename.tar.gz -C 欲解压缩的目录
1.12 cat 命令
该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。例如:
cat text | less #查看text文件中的内容
注:这条命令也可以使用less text来代替 head、 tail 显示文件头、尾内容
1.13 du命令
du命令显示文件或目录所占用的磁盘空间。
-h : 输出文件系统分区使用的情况,例如:10KB,10MB,10GB等
-s : 显示文件或整个目录的大小,默认单位是KB
例1 Linux查找占用空间最大的文件与目录
du -h /ucharm --max-depth=1
1.14 top命令
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
2 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi: 硬件CPU中断占用百分比
0.0%si: 软中断占用百分比
0.0%st: 虚拟机占用百分比
Mem:
191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap:
192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入
序号 列名 含义
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 进程使用的、未被换出的物理内存大小,单位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
h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
1.15 sar 命令
sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。
CPU资源监控
# sar -u 3 4
Linux 3.10.0-957.el7.x86_64 (hz01-dev-yeeorder-application-02) 11/05/2019 _x86_64_ (2 CPU)
12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 2.91 0.00 1.59 0.00 0.00 95.50
12:20:01 AM all 2.90 0.00 1.58 0.00 0.00 95.51
12:30:01 AM all 2.82 0.00 1.54 0.00 0.00 95.63
输出项说明:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user: 显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice: 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal: 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle: 显示 CPU 空闲时间占用 CPU 总时间的百分比。
1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是CPU
内存和交换空间监控
# sar -r 10 3
Linux 3.10.0-957.el7.x86_64 (hz01-dev-yeeorder-application-02) 11/05/2019 _x86_64_ (2 CPU)
12:57:59 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:58:09 PM 226560 7947568 97.23 164 2969388 8669200 70.11 4223388 3360916 92
12:58:19 PM 226064 7948064 97.23 164 2969424 8669200 70.11 4223948 3360920 144
12:58:29 PM 226204 7947924 97.23 164 2969428 8667144 70.10 4223848 3360920 92
Average: 226276 7947852 97.23 164 2969413 8668515 70.11 4223728 3360919 109
输出项说明:
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
%memused: 这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcommit: 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit: 这个值是kbcommit与内存总量(包括swap)的一个百分比.
I/O和传送速率监控
# sar -b 3 3
Linux 3.10.0-957.el7.x86_64 (hz01-dev-yeeorder-application-02) 11/05/2019 _x86_64_ (2 CPU)
01:04:56 PM tps rtps wtps bread/s bwrtn/s
01:04:59 PM 0.00 0.00 0.00 0.00 0.00
01:05:02 PM 0.00 0.00 0.00 0.00 0.00
01:05:05 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 0.00 0.00 0.00
输出项说明:
tps: 每秒钟物理设备的 I/O 传输总量
rtps: 每秒钟从物理设备读入的数据总量
wtps: 每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
进程队列长度和平均负载状态监控
# sar -q 3 3
Linux 3.10.0-957.el7.x86_64 (hz01-dev-yeeorder-application-02) 11/05/2019 _x86_64_ (2 CPU)
01:05:19 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
01:05:22 PM 0 1936 0.22 0.19 0.15 0
01:05:25 PM 2 1938 0.20 0.19 0.15 0
01:05:28 PM 0 1937 0.18 0.18 0.15 0
Average: 1 1937 0.20 0.19 0.15 0
输出项说明:
runq-sz: 运行队列的长度(等待运行的进程数)
plist-sz: 进程列表中进程(processes)和线程(threads)的数量
ldavg-1: 最后1分钟的系统平均负载(System load average)
ldavg-5: 过去5分钟的系统平均负载
ldavg-15: 过去15分钟的系统平均负载
设备使用情况监控
# sar -d 3 3 -p
Linux 3.10.0-957.el7.x86_64 (hz01-dev-yeeorder-application-02) 11/05/2019 _x86_64_ (2 CPU)
01:10:04 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
01:10:07 PM vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:10:07 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:10:07 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:10:07 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
01:10:10 PM vda 6.33 0.00 98.67 15.58 0.00 0.00 0.00 0.00
01:10:10 PM centos-root 6.33 0.00 98.67 15.58 0.00 0.00 0.00 0.00
01:10:10 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:10:10 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
01:10:13 PM vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:10:13 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:10:13 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: vda 2.11 0.00 32.89 15.58 0.00 0.00 0.00 0.00
Average: centos-root 2.11 0.00 32.89 15.58 0.00 0.00 0.00 0.00
Average: centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
参数-p可以打印出vda等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0
tps: 每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
rd_sec/s: 每秒读扇区的次数.
wr_sec/s: 每秒写扇区的次数.
avgrq-sz: 平均每次设备I/O操作的数据大小(扇区).
avgqu-sz: 磁盘请求队列的平均长度.
await: 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
svctm: 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util: I/O请求占CPU的百分比,比率越大,说明越饱和.
1. avgqu-sz 的值较低时,设备的利用率较高。
2. 当%util的值接近 1% 时,表示设备带宽已经占满。
### 要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
1.16 docker 命令
1、进入到容器
命令格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it 容器id或容器名字 /bin/bash
命令格式:docker attach [OPTIONS] CONTAINER
docker attach 容器id或容器名字
2、停止删除容器命令 停止容器
docker stop CONTAINER_ID
3、杀死容器
docker kill container_name
4、查看容器列表
docker ps
docker ps –a
5、删除容器
docker rm
6、批量删除容器
docker rm -f `docker ps -a -q`
1.17 docker logs命令
# docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例1: 查看最近30分钟的日志
docker logs --since 30m CONTAINER_ID
例2: 查看某时间之后的日志
docker logs -t --since="2019-11-05T13:23:37" CONTAINER_ID
例3: 查看某时间段日志:
docker logs -t --since="2019-11-05T13:23:37" --until "2019-11-05T12:23:37" CONTAINER_ID
例4: 实时查看docker容器日志
docker logs -f -t --tail 行数 CONTAINER_ID