说说你常用的linux命令


这其实是一道开放的问题,但是面试中遇到的多了,基本回答的时候也都是自己总结的那一套

监控

ps

用于查看服务器的进程信息,默认情况下,PS命令只会显示运行在当前控制台下的属于当前用户的进程。

UID:该进程执行的用户id;
PID:进程id;
PPID(parent process ID):该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程称之为僵尸进程;
C:Cpu的占用率,其形式是百分数;
STIME:进程的启动时间;
TTY:终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起;
TIME:进程的执行时间;
CMD:该进程的名称或者对应的路径;

常用选项
【1】-e 。 等价于-A ,列出所有的进程
【2】-f 。 显示全部的列/字段
【3】-x。 无控制终端的进程(后台进程)
【4】-r。 运行中的进程
【5】-u。显示进程的用户信息。
使用cpu进行排序 --sort -pcpu
使用内存占用进行排序 – sort -pmem

补充: linux进程调度

Linux上,决定下一个运行的程序是通过调度程序来实现的,这取决于进程的优先级,其中nice值代表友好度,进程越友好它的优先级越低。CPU的衡量单位是世界,CPU百分比通常指的是当前进程占用CPU时间/CPU总时间

linux中的调度程序成为CFS 完全公平调度器,使用一颗红黑树作为调度队列的数据结构,根据任务在CPU上的实际运行时间进行排序。这种时间称为虚拟运行时间v-runtime,CFS采用纳秒级别的粒度来描述时间。红黑树最左节点的任务总是会被优先调度
CFS会周期性地根据任务已经运行的时间,递增它的虚拟运行时间值。并且周期性的与红黑树左节点的任务进行比较。(在队列中插入一个任务需要O(logN)的时间复杂度,其中N是任务总量)

虚拟运行时间是通过进程的实际运行时间和进程的权重综合计算出来的
权重越大的进程获得的虚拟运行时间越短,调度机会越大

当一个任务在CPU上运行的时候,CFS会加快进程虚拟时间值的流逝速率(增加),并且权重越小的进程,流逝的越快。因此即使每个任务都可以获得CPU,但是执行任务的时间是不同的。默认情况下(不修改nice),虚拟时间等于程序实际运行时间

以上讨论的都是标准分时进程,对应实时任务也要响应的调度程序,主要是先来先服务算法以及轮转算法。Linux的实时调度是软实时的。

Fuser 可以查看文件或者目录所属的pid——该文件或目录被哪一个进程使用
Lsof 通过进程(pid)来查看它打开了哪些文件(包括套接字、管道、普通文件等)。
fuser是fd -> pid ,而lsof是pid -> fd

top

PS命令查看的某一个时间点关于进程的快照信息,而TOP是实时显示的,可以用于查看服务器的资源占用。
在这里插入图片描述

PID:进程id;
USER:该进程对应的用户;
PR:优先级;
VIRT:虚拟内存;
RES:常驻内存;
SHR:共享内存;计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR)
S:表示进程的状态status(sleeping,其中S表示睡眠,R表示运行);
%CPU:表示CPU的占用百分比;
%MEM:表示内存的占用百分比;
TIME+:执行的时间;
COMMAND:进程的名称或者路径;

常用的TOP:
【1】查看占用内存最多的前N个进程:先执行top,然后使用快捷键M——内存降序
【2】查看CPU占用最多的前N个进程:先执行top,再使用快捷键P——CPU降序
【3】查看某个进程中的子进程 top -Hp pid。(-H设置线程/子进程模式,-p指定具体进程)

由于linux不区分进程和线程,统一看作“任务”,通过task_struct结构体进行定义。Java经过linux平台JVM进行线程映射时,将映射为子进程结构(fork)

【4】当服务器拥有多个CPU的时候,使用快捷键“1”可以切换显示各个CPU的详细信息
【5】-d 设置刷新的世界间隔

负载:load average 三个值分别显示了最近1min、近5min、近15min的平均负载,值越大说明系统的负载越高。假设CPU一段时间内可以执行100个任务,load值小于等于100就是非常健康的系统情况,如果load值大于1,则存在任务排队等待的情况。

Linux的进程状态
D 不可中断睡眠
R 运行中 或者 等待队列的进程
S 可中断睡眠
T 进程处于stopped
Z 僵尸进程

通过TOP命令也可以快速定位占用CPU最多的进程、占用内存资源最多的进程。

CPU使用率过高排除思路
【1】使用TOP命令定位出来CPU使用率最高的程序
【2】通过ps -ef或者jps进一步定位出进程号
【3】定位到具体的线程(子进程)
【4】将需要的线程ID转换为16进制格式tid(jstack打印的内容中,线程的标识是16进制的)
【5】jstack 线程id | grep tid

netstat

netstat用于查看网络状态。
在这里插入图片描述

常用选项:
-a显示所有字段
【1】-t:表示只列出tcp协议的连接、-u表示只列出udp协议的连接。
【2】-n:表示将地址从字母组合转化成ip地址,将协议转化成端口号来显示。(不显示别名,一律使用数字)
【3】-l:表示过滤出“state(状态)”列中其值为**LISTEN(监听)**的连接。
【4】-p: 显示建立相关连接的进程pid和进程名称。

netstat还可以用于查询某个端口被哪一个进程占用了
lsof则是反过来
在这里插入图片描述

系统文件

监视工具的本质上也是读取系统产生的文件,例如有一个进程5000,如果想要查看的它的具体信息,可以直接看/proc目录

Linux查看各种状态,本质上是查看内核中相关进程的数据结构的项,并且格式化打印出来。
Linux的**/proc是一个伪文件系统**,它是内核中各属性或者状态向外提供访问和修改的接口。(类比Java的Class实例)
/proc目录下的数字命名的目录对应的是各个进程的pid,其内文件记录的都是该进程的当前数据信息,只读。例如进程使用了那颗CPU的信息cpuset、进程占用内存的信息mem文件等
在这里插入图片描述
/proc/self 目录,表示的是当前正在访问/proc目录的进程即当前CPU正在执行的进程。
/proc/sys 目录是为管理员提供,用来修改内核参数的,因此该文件对root都是可写的。
使用sysctl 命令修改内核参数,本质上是在修改/proc/syc目录中的文

Cat /proc/cupinfo 可以查看CPU硬件的基本
信息 ,使用dop或者dstat可以查看CPU使用情况
Cat /proc/meminfo 可以查看内存基本容量信息。 free查看内存运行空间的信息、
Uname 查看 linux的系统版本

拿到进程号,然后去查看**/proc/进程号/status**

/etc/services 记录了端口和服务的对应关系
/etc/resolv.conf 用于设置DNS指向
/etc/sysconfig/network-scripts/中ifcfg开头的文件是网卡配置文件

==/proc/sys/net/ipv4/ ==文件夹下的文件可以调节TCP/IP参数,例如:
tcp_syn_retries TCP第一次握手丢包的重传次数、Tcp_synack-retries第二次握手报文的重传次数、tcp_syncookies 开启tcp_syncookies 默认开启。

查看一个进程的线程数量:

【1】直接看/proc文件:/proc/<pid>/status,其中threads字段会显示线程数量
【2】使用命令:top -Hp 进程号 | wc -l ,使用H选项输出线程,wc -l 使用line行统计
【3】统计子目录 : ls /proc/<pid>/task | wc 。对于一个进程中创建的每一个线程,都会在/proc/<pid>/task 创建一个目录,并且命名为其线程ID

查看进程运行的完整路径

Linux在启动一个进程的时候,系统会在/proc下创建一个以PID命名的文件夹,其中存放了进程信息。其中一个名为exe的文件记录了绝对路径。
cwd 符号链接的是进程运行目录。exe符号链接的是执行程序的绝对路径。cmdline就是程序运行时输入的命令行命令。fd目录下的是程序打开的文件的符号链接。

看日志用的

grep

Grep(global regular expression print 正则表达式搜索文本)指令主要用于过滤。

-n 显示行号
-r递归搜索
-E 按照正则表达式 -e 指定多个匹配模式(多个文件)
-F 按照字母意思(不按照正则)
-c 只输出匹配行的数量(等价于 wc -l)
-i 忽略大小写 ignore
-w 精确匹配
-v 反向匹配

tail

查看一个文件的后n号,默认是10行。
最经常使用的是 tail -f 。tail命令会保持活动状态,并不断显示添加到文件中的内容。该命令一般用于查看系统日志

sort 和 uniq

sort和uniq总是搭配使用:sort | uniq | sort

-b 忽略每行的前置空格
-h 可读性
-k 以哪个field进行排序(分列之后按照第几列进行排序)
-n 按照数值进行排序(默认按照字符排序)
-f 忽略大小写
-o 将排序后的文件存入指定文件
-r reverse 降序
-u unique 去重
-t 指定分隔符,默认为空字符

在这里插入图片描述
按照第二列进行排序,去重。如果第二列相同则按照第一列逆序比较。如果-r 和 -n单独使用用于全局,如果放在指定的列后面,则仅用于某一列

uniq的常用选项:
-c :在每列旁边显示该行重复出现的次数
-u :仅显示一次出现的行
注意:uniq去重的是相邻行,如果要绝对去重,需要先使用sort。sort -u 也可以进行去重,我们使用uniq命令主要是搭配选项 -c 进行一个统计重复次数的操作。

sed 和 awk 也是非常重要的命令,但是很复杂,后面再补充

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值