工作中遇到的服务器都是Linux系统,在进行日志分析,问题排查等日常工作时如果能用好一些linux命令,会起到事半功倍的效果,在这里记录一些日常用到和学习到的命令,帮助自己,希望也能帮助到他人
进程查看
ps –ef | grep 服务名 查看某个服务是否启动
ps -ef查看进程详细信息(包含时间等)
查看显示的字段含义如下:
UID PID PPID C STIME TTY TIME CMD
zzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae
UID :程序被该 UID 所拥有
PID :就是这个程序的 ID
PPID :则是其上级父程序的ID
C :CPU使用的资源百分比
STIME :系统启动时间
TTY :登入者的终端机位置
TIME :使用掉的CPU时间。
CMD :所下达的是什么指令
网络端口相关
查看指定端口/某些匹配端口的使用情况:
netstat -tunlp |grep 18 netstat -ano |grep 18 netstat -anp |grep 18 查看18开头的端口的占用情况
-t 选项列出 TCP 协议的连接
-u 选项列出 UDP 协议的连接
lsof –i:端口号 : 查看端口是否被占用,没有结果返回则说明没有被占用
查看文件大小
df -h 查看当前系统磁盘容量的使用情况
du –sh 查看当前目录下文件和目录的总大小
du –sh *查看当前目录下所有文件和目录的大小
du –sh * | sort –nr查看当前目录下所有文件和目录的大小且排序
日志分析
grep:
统计目标文件中符合匹配的行数 :grep -o objStr filename |wc -l
awk
awk不仅仅可以进行正则拆分日志,还可以进行有条件的筛选和计数
文件查找
find -name:直接根据文件名字来查找,. 点表示当前目录, / 表示根目录
比如 find / -name a.txt:在根目录下查找 a.txt文件
find -perm:根据文件权限来查找,比如:find / -perm 777,:查找根目录下权限为 777(rwx-rwx-rwx)的文件
找出当前目录下包括子文件中不包含指定字符串的文件:
for file in ls ./*/*.xml
; do count=grep -i 'target-Str'
; if [ $count -eq 0 ];then echo $file; fi; done
CPU相关
top命令:常用来监控Linux的系统状况,比如cpu、内存的使用,是一个动态的显示,查看的结果有下面几项:
第一行如下所示,展示的是当前时间、系统已运行的时间、当前登录用户的数量、相应最近5、10和15分钟内的平均负载
再往下有tasks:进程总数,后面是各个阶段进程的数量
还有mem和swap各个区域的大小
mem:物理内存,swap 交换区内存
对于内存监控,我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了
最下方列表有以下字段,含义如下
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。这里每一个100%表示占用了一核的CPU,比如280%就是占用了2.8个
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
查看逻辑cpu核数:cat /proc/cpuinfo |grep “processor”|wc –l
查看物理cpu核数:cat /proc/cpuinfo |grep “physical id”|sort |uniq|wc -l
CPU负载
使用top命令可以看到负载(load)和cpu使用率(%Cpu)
top - 23:39:41 up 8 days, 6:36, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 71 total, 1 running, 70 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
需要区分CPU负载和使用率之间的关系,二者都可以一定程度上反映一台机器的繁忙程度
CPU使用率显示的是程序在运行期间实时占用的CPU百分比;cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait。
CPU负载是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处于wait状态进程。
CPU利用率高,并不意味着CPU的负载大。两者之间没有必然的关系。无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。
CPU利用率:显示的是程序在运行期间实时占用的CPU百分比
CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。
多核系统的cpu负载大于1是正常的!负载是指任务数,正在运行和等待的
什么场景会导致高负载低CPU使用率
CPU负载越高,意味着CPU需要在更多的工作中进行来回切换,简言之负载就是需要运行处理但又必须等待队列前的进程处理完成的进程个数。具体来说,也就是如下两种情况:
1、等待被授权予CPU运行权限的进程。2、等待磁盘I/O完成的进程
cpu低而负载高也就是说等待磁盘I/O完成的进程过多,就会导致队列长度过大,这样就体现到负载过大了,但实际是此时cpu被分配去执行别的任务或空闲,具体场景有如下几种,下三种场景总结下来就是IO卡住,导致任务积压,CPU虽空闲负载很高
场景一:磁盘读写请求过多就会导致大量I/O等待
场景二:MySQL中存在没有索引的语句或存在死锁等情况
场景三:外接硬盘故障,常见有挂了NFS,但是NFS server故障
vim命令
删除指定匹配模式的行
:g/pattern/d
如:g/txt$/d 删除以txt结尾的行
删除不以指定匹配模式结尾的行
vim中直接删除不以.mp3结尾的行
v/.mp3$/d
统计匹配目标字符串的行数
vim:在命令模式下输入 : :%s/objStr//gn