【Linux命令篇】Linux命令实践

面试篇 专栏收录该内容
199 篇文章 12 订阅

Linux

1.你常用的Linux命令有哪些?

求助命令: --helpman

文件目录的基本操作: lscdrmdirmkdircpmvchmod

其中chmod分别是r4 w2 x1 chmod754 .bashrc

获取文件内容catheadfind

其中find [basedir] [options] find . -name 'shadow*'

压缩打包命令: 压缩命令gzip 打包tar

查看进程: ps查看自己的进程 top 实时显示进程的信息 netstat查看占用端口的进程

正则表达式:

  • grep使用正则表达式进行全局查询并打印;-n 表示输出行号

    • 示例:把含有the字符串的行提取出来grep -n 'the' regular_express.txt
    • 此外正则表达式a{m,n}用来匹配字符a出现m~n次。grep -n 'a\{2,5\}' regular_express.txt
  • awk: awk每次处理一行,处理的最小单位是字段。每个字段的命名方式为: n . n 为 字 段 号 , 从 1 开 始 。 ‘ n. n为字段号,从1开始。` n.n1 awk ‘条件类型 1 {动作 1} 条件类型 2 {动作 2} …’ filename`

    • 示例:取出最近五个登录用户的用户名和IP。首先用last -n 5 去除最近五个登录用户的所有信息,用户名和IP分别在第一列和第三列。last -n 5 | awk '{print $1 "\t" $3}'
    • 示例:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。
    $ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
    

    awk 变量:

    变量名称代表意义
    NF每一行拥有的字段总数
    NR目前所处理的是第几行数据
    FS目前的分隔字符,默认是空格键
    • 示例:显示正在处理的行号以及每一行有多少字段
    $ last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}'
    

2.用过vim编辑器?

vim编辑器一般是三个模式:

  • 一般指令模式:VIM的默认模式,可以用于移动游标来查看内容;
  • 编辑模式:按下“i”等按键之后进入,可以对文本进行编辑;
  • 指令模式:按下":"之后,用于保存退出等操作;

3.对文本进行分组并统计每个值出现的次数?

(1) grep+wc统计某个字符出现的次数

grep -o '404' nginx.conf | wc -l
输出4
grep -o '404\|8081' nginx.conf | wc -l
输出5

(2) 统计文件中某个字符出现的次数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJGI9JK5-1618239524292)(imgs/22.png)]

从某行取出分割的串

cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}'

cat读取当前文件;awk -F 进行分割字符,并打印第二列的字符;在这里 ‘(txt=|&client)’是分隔符,它是一个正则表达式。

sdate=2017-09-20 23:59:32&
com.ford.fordmobile
_id=x

之后排序

cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}'|sort

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVM2C4NJ-1618239524302)(imgs\23.png)]

之后统计数量与去重

cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}'| sort | uniq -c

uniq -c 中的-c 代表在每列旁边显示该行重复出现的次数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r48NpGf5-1618239524305)(imgs\24.png)]

之后再按重复次数排序

cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}'| sort | uniq -c | sort -nr

sort -n 按照数值的大小排序;-r按照相反顺序

最后将结果输出到文件中

cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}'| sort | uniq -c | sort -nr > testfile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3JHVuSVJ-1618239524314)(imgs\25.png)]

面试真题:

对第二列进行group,得到每个值出现次数。

123|weixin|314

45|zfb|321

12|weixin|14

先将这些写到一个test.log文件当中。

cat test.log | awk -F '|' 'print $2' | sort | uniq -c | sort -nr > res.log

4.Linux命令下查看进程占据的端口

ps命令详解

ps命令是用来显示所有进程的状态的

  • ef是用标准的格式显示进程的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mrrKXYdQ-1618239524318)(imgs\29.png)]

  • aux是用BSD的格式来显示进程的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rhwPvs3N-1618239524321)(imgs\30.png)]

grep命令详解

结合grep 命令,grep就是使用正则表达式搜索文本,并把匹配的行打印出来。

例子:搜索一个进程比如httpd

第一步,使用ps命令结合管道符 | 查询到进程的PID。查询进程关键字为httpd,找到进程的PID号。

ps -aux | grep [name]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WME2bVE4-1618239524325)(imgs\31.png)]

第二步:根据PID号,使用netstat命令查询端口占用

netstat命令详解

netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于校验本机各端口的网络连接情况。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xx6QeeIq-1618239524327)(imgs\33.png)]

常见参数为:

  • -a 显示所有连接和监听端口;
  • -t 仅显示tcp相关选项;
  • -u仅显示udp相关选项;
  • -n 以数字形式显示地址和端口号;
  • -l仅列出有在Listen(监听)的服务状态;
  • -p显示建立相关链接的程序名 pid号;
  • -c每隔一个固定时间,执行该netst命令

netstat -nap | grep 'PID号'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4YvmrwJK-1618239524329)(imgs\32.png)]

5.Linux命令查看某个进程下的线程数量

top查看实时的进程数

显示CPU占用状态;显示内存使用率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsytrDTL-1618239524330)(imgs\37.png)]

可以查看某个进程下的所有线程数量。

top -Hp pid

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUYXEEva-1618239524332)(imgs\34.png)]

6.linux下命令查看TCP连接数即参数为t

(1) 统计httpd协议连接数

ps -aux | grep httpd | wc -l

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ggQjzaWY-1618239524335)(imgs\35.png)]

(2) 统计80端口连接数

netstat -nat | grep -i '80' | wc-l

其中t是tcp连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zpjYGLAm-1618239524336)(imgs\36.png)]

(3) 统计已连接上的 状态为’established’

netstat -na | grep ESTABLISHED | wc -l

(4) 查看哪个IP地址连接最多,将其封了

netstat -na | grep ESTABLISHED | awk 'print $5' | awk -F ':' 'print $1' | sort | uniq -c | sort -nr 

7.linux下如何定位线上CPU过高的问题

A. top命令找到CPU利用率最高的进程(原理:方法是由线程执行的,线程是在进程底下的,找到进程下cpu最高的线程就能定位到方法)-默认按cpu使用率排序 找到其pid号;

B.之后通过top -Hp pid号,找到该进程下哪个线程的cpu使用情况

C. 通过top命令定位到cpu占用率较高的线程之后,继续使用jstack pid命令查看当前java进程的堆栈状态 jstack pid > p.txt 用哪个jstack导出线程的dump;

D. 把刚刚的pid线程号转成16进制 printf “%x \n” 40437

E. 到刚刚导出的p.txt里面检索定位;

8.linux下如何定位线上OOM的问题

A.确定JVM的内存空间是否分配过小;

jmap -heap pid

可以看出新生代、老年代的空间大小和使用情况;

B.找到最耗费内存对象

jmap -histo:live pId | more

可以看出存活对象的大小信息,找到耗费内存最大的那个对象;

C.确定资源是否耗尽

ptree
netstat
  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值