Linux基本指令

  • 连接SSH

    • ssh uesrname@ip
    • 例如:ssh root@192.168.43.217
  • Linux 创建多级目录命令: mkdir -p

    • 示例:mkdir -p project/App;
    • 注:删除多级文件夹:rm -r 文件夹名 -- 表示循环删除文件夹,深入后逐个询问并删除
      • rm -rf 文件夹名 -- f表示强制执行,-rf直接删除,不询问。
  • 管道"|"

    • 管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。
    • 连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。
  • linux基本指令 awk、find、grep

    • AWK是一种处理文本文件的语言,是一个强大的文本分析工具
    • grep更适合单纯的查找或匹配文本;awk 更适合格式化文本,对文本进行较复杂格式处理
    • grep查找具体的文本,find查找文件。
  • grep:-v 不显示匹配上的内容;-n 显示匹配上的内容

    • grep -v down,显示不包含down的内容。
    • grep -n down,显示包含down的内容。
  • linux命令:找出关键字出现的次数

    • 两种方法:grep+wc;awk。
    • grep+wc:
      • 当个字符串:grep 字符串 文件名|wc -l ,grep输出,wc -l按行统计
      • 多个字符串:grep 'objStr1\|objStr2' filename|wc -l
    • awk:
      • 语法1: awk -v RS="@#$j" '{print gsub(/targetStr/,"&")}' filename
      • 语法2:awk '{s+=gsub(/targetStr/,"&")}END{print s}' filename
    • 统计文件夹下特定类型文件个数
      • 示例:统计文件夹下/mount/taskdata 以.log结尾的文件数量
      • 法1:find /mount/taskdata -name *.log |wc -l -- find查找特定类型并统计
      • 法2:ls /mount/taskdata/*.log |wc -l-- ls列出特定类型并统计
  • 大文件中查找关键字出现的次数

  • 查找文件:

    • find /(查找范围) -name 查找关键字 -print
    • find <指定目录> <指定条件> <指定动作>
    • find的使用实例:
        - find . -name 'my*':搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
        - find . -name 'my*' -ls: 搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
        - find . -type f -mmin -10: 搜索当前目录中,所有过去10分钟中更新过的普通文件。
      • 如果不加-type f参数,则搜索普通文件+特殊文件+目录。
    • find 可以与 wc 通过管道连接,进行一些统计操作。
  • shell脚本:如何查找出现频率最高的100个ip地址

    • 通过查看日志access_log文件进行统计:

      • cat access_log |cut -d ' ' -f 1 | sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 100 | less
    • 当前WEB服务器中联接次数最多的ip地址:
      • netstat -ntu | tail -n +3|awk '{ print $5}' | cut -d : -f 1 | sort | uniq -c| sort -n -r | head -n 100
    • 通过文件test.txt查询:
      • cat test.txt | awk '{print $2}' | sort | uniq -c | sort -n -r | head -n 100
  • shell:统计一个文件中重复的行和重复次数

    • 格式:uniq [options][file1 [files]]
    • uniq -c file:file中的重复行输出一次,并在每行前显示重复次数
    • uniq -d file:file中的重复行输出一次,但不输出唯一的行
    • uniq -u file:只输出file中的唯一行
    • uniq file1 file2:把file1中的重复的相邻行删除,并把每行的一个拷贝送到file2
    • 示例:cat a.txt|uniq -cuniq -c a.txt获得相同结果
      • 注:只获取重复行,用unqi -d的参数d
  • awk

    • 待续
  • 查看端口

    • netstat -tunlp 是查看所有的在使用的端口号情况
    • netstat -tunlp | grep 端口号 是查看所查询的端口号情况
    • 参数备注:
      • -t:(tcp)仅显示TCP相关端口
      • -u:(udp)仅显示UDP相关端口
      • -n:不进行DNS轮询,显示IP(可以加速操作)
      • -l:仅列出有在Listen(监听)的服务端口
      • -p:显示建立相关链接的程序名
  • 找到共用80端口的线程

    • 注:存疑,先这样吧。
    • ps:使用场景:两个不同端口的微服务,当我们测试的时候,需要放到同一台服务器上,共享80端口访问
    • ps -ef |grep 80
    • netstat -anp |grep :80
  • 查看进程

    • ps -A 显示所有进程信息
    • ps -u root 显示指定用户信息
    • ps -ef 显示所有进程信息,连同命令行
      • ps -ef|grep ssh 查找特定进程ssh
    • ps -l 列出与本次登录有关的进程信息;
    • ps -aux 查询内存中进程信息;
      • ps -aux |more 分页显示结果
      • ps -aux | grep *** 查询***进程的详细信息;
      • ps -aux > ps001.txt 把所有进程显示出来,并输出到指定文件中
    • ps -o pid,ppid,pgrp,session,tpgid,comm 输出指定字段
    • top 查看内存中进程的动态信息;
    • kill -9 pid 杀死进程。
  • vim 显示所有行的行号::set number

    • 操作:esc + 冒号 + set number + 回车
    • 显示行号::set number,可以简写为::set nu
    • 关闭行号::set nonumber,简写为::set nonu
  • linux 如何将文件从一台服务器转移到另一台服务器

    • scp:secure copy的缩写, 是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,可以在linux服务器之间复制文件和目录。
    • 格式:scp [参数] [原路径] [目标路径]
    • 从本地服务器复制到远程服务器:
      • 复制文件: scp local_file remote_username@remote_ip:remote_folder
      • 复制目录: scp -r local_folder remote_username@remote_ip:remote_folder
        • 参数 -r :递归复制整个目录
  • 权限修改命令

    • 格式:chmod ABC Filename
    • chmod: 修改文件权限命令。
    • rwx:4读取,2写入,1执行,
      • User、Group、及Other的权限,同组用户的权限,其他用户的权限。
chmod u+r test.txt     //增加用户可读
chmod u-w test.txt //撤销用户可写
chmod u=rw test.txt //重置用户权限(可读可写)
chmod u=- test.txt //重置用户权限(无任何权限)
chmod g=rw test.txt //重置用户组权限(可读可写) //角色:
u (user)用户(文件所有者)
g (group)用户组(同一组中除了当前用户的其他用户)
o (other)其他用户(其他用户组下的所有用户)
a (all)所有用户 //操作符:
+ 增加权限
- 撤销权限
= 设置权限 //权限值:
r 可读,权限值4
w 可写,权限值2
x 可执行,权限值1
- 无任何权限,权限值0
  • ps -ef | grep xxxserver | grep -v grep|wc -l

    • ps -ef 指令用来查询所有进程,grep通过管道来过滤。grep -v 是反向查询的意思,grep -v grep的作用是除去包含grep的项。
  • 磁盘查询:

    • du:(disk use)显示每个文件和目录的磁盘使用空间。
    • df:(disk free)显示磁盘分区上可以使用的磁盘空间。

一、CPU

1、良好状态指标

  • CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%。
  • 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是可以接受的。
  • 可运行队列:每个处理器的可运行队列<=3个线程。

2、监控工具

  • vmstat

$ vmstat 1

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

14  0    140 2904316 341912 3952308  0    0     0   460 1106 9593 36 64  1  0  0

17  0    140 2903492 341912 3951780  0    0     0     0 1037 9614 35 65  1  0  0

20  0    140 2902016 341912 3952000  0    0     0     0 1046 9739 35 64  1  0  0

17  0    140 2903904 341912 3951888  0    0     0    76 1044 9879 37 63  0  0  0

16  0    140 2904580 341912 3952108  0    0     0     0 1055 9808 34 65  1  0  0

重要参数:

r,run queue,可运行队列的线程数,这些线程都是可运行状态,只不过CPU暂时不可用;

b,被blocked的进程数,正在等待IO请求;

in,interrupts,被处理过的中断数

cs,context switch,系统上正在做上下文切换的数目

us,用户占用CPU的百分比

sys,内核和中断占用CPU的百分比

id,CPU完全空闲的百分比

上例可得:

sy高us低,以及高频度的上下文切换(cs),说明应用程序进行了大量的系统调用;

这台4核机器的r应该在12个以内,现在r在14个线程以上,此时CPU负荷很重。

  • 查看某个进程占用的CPU资源

$  while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep 'test_command'; sleep 1; done

PID  NI PRI %CPU PSR COMMAND

28577   0  23  0.0   0 test_command

28578   0  23  0.0   3 test_command

28579   0  23  0.0   2 test_command

28581   0  23  0.0   2 test_command

28582   0  23  0.0   3 test_command

28659   0  23  0.0   0 test_command

……

二、Memory

1、良好状态指标

  • swap in (si) == 0,swap out (so) == 0
  • 应用程序可用内存/系统物理内存 <= 70%

2、监控工具

  • vmstat

$ vmstat 1

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

0  3 252696   2432    268   7148 3604 2368  3608  2372  288  288  0  0 21 78  1

0  2 253484   2216    228   7104 5368 2976  5372  3036  930  519  0  0  0 100  0

0  1 259252   2616    128   6148 19784 18712 19784 18712 3821 1853  0  1  3 95  1

1  2 260008   2188    144   6824 11824 2584 12664  2584 1347 1174 14  0  0 86  0

2  1 262140   2964    128   5852 24912 17304 24952 17304 4737 2341 86 10  0  0  4

重要参数:

swpd,已使用的 SWAP 空间大小,KB 为单位;

free,可用的物理内存大小,KB 为单位;

buff,物理内存用来缓存读写操作的buffer大小,KB 为单位;

cache,物理内存用来缓存进程地址空间的 cache 大小,KB 为单位;

si,数据从 SWAP 读取到 RAM(swap in)的大小,KB 为单位;

so,数据从 RAM 写到 SWAP(swap out)的大小,KB 为单位。

上例可得:

物理可用内存 free 基本没什么显著变化,swapd逐步增加,说明最小可用的内存始终保持在 256MB(物理内存大小) * 10% = 2.56MB 左右,当脏页达到10%的时候就开始大量使用swap。

  • free

$ free -m

total used free shared buffers cached

Mem: 8111 7185 926 0 243 6299

-/+ buffers/cache: 643 7468

Swap: 8189 0 8189

三、磁盘IO

1、良好状态指标

  • iowait % < 20%

提高命中率的一个简单方式就是增大文件缓存区面积,缓存区越大预存的页面就越多,命中率也越高。

Linux 内核希望能尽可能产生次缺页中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读),这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放一些不用的页。

2、监控工具

  • 查看物理内存和文件缓存情况

$ cat /proc/meminfo

MemTotal:      8182776 kB

MemFree:       3053808 kB

Buffers:        342704 kB

Cached:        3972748 kB

这台服务器总共有 8GB 物理内存(MemTotal),3GB 左右可用内存(MemFree),343MB左右用来做磁盘缓存(Buffers),4GB左右用来做文件缓存区(Cached)。

  • sar

$ sar -d 2 3

Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU)

11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00

11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05

Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02

重要参数:

await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。

svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。

%util表示一秒中有百分之几的时间用于I/O操作。

如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。

如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。

四、Network IO

对于UDP

1、良好状态指标

接收、发送缓冲区不长时间有等待处理的网络包

2、监控工具

  • netstat

对于UDP服务,查看所有监听的UDP端口的网络情况

$ watch netstat -lunp

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

udp        0      0 0.0.0.0:64000           0.0.0.0:*                           -

udp        0      0 0.0.0.0:38400           0.0.0.0:*                           -

udp        0      0 0.0.0.0:38272           0.0.0.0:*                           -

udp        0      0 0.0.0.0:36992           0.0.0.0:*                           -

udp        0      0 0.0.0.0:17921           0.0.0.0:*                           -

udp        0      0 0.0.0.0:11777           0.0.0.0:*                           -

udp        0      0 0.0.0.0:14721           0.0.0.0:*                           -

udp        0      0 0.0.0.0:36225           0.0.0.0:*                           -

RecvQ、SendQ为0,或者不长时间有数值是比较正常的。

对于UDP服务,查看丢包情况(网卡收到了,但是应用层没有处理过来造成的丢包)

$ watch netstat -su

Udp:

278073881 packets received

4083356897 packets to unknown port received.

2474435364 packet receive errors

1079038030 packets sent

packet receive errors 这一项数值增长了,则表明在丢包。

这里有对“packet receive errors”的稍微详细些的解释,它包含了7种错误,and通常表明是checksum错误。不过我们通常通过这个数值的变化来判断UDP服务是否丢包(第2项错误),不知道是否有其他什么方法来判断UDP的丢包?:

"packet receive errors" usually means:

1) data is truncated, error in checksum while copying

2) udp queue is full, so it needs to be dropped

3) unable to receive udp package from encapsulated socket

4) sock_queue_rcv_skb() failed with -ENOMEM

5) it is a short packet

6) no space for header in udp packet when validating packet

7) xfrm6_policy_check() fails

many times it means the checksum is not right.

对于TCP(来自david的经验,thx~~)

1、良好状态指标

对于TCP而言,不会出现因为缓存不足而存在丢包的事,因为网络等其他原因,导致丢了包,协议层也会通过重传机制来保证丢的包到达对方。

所以,tcp而言更多的专注重传率。

2、监控工具

# cat /proc/net/snmp | grep Tcp:

Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts

Tcp: 1 200 120000 -1 78447 413 50234 221 3 5984652 5653408 156800 0 849

重传率 = RetransSegs / OutSegs

至于这个值在多少范围内,算ok的,得看具体的业务了。

业务侧更关注的是响应时间。

Linux常见问题合集的更多相关文章

  1. 转载-好用的linux软件合集

    音频 Airtime – Airtime 是一款用于调度和远程站点管理的开放广播软件  Ardour – 在 Linux 上录音,编辑,和混音  Audacious – 开源音频播放器,按你想要的方式 ...

  2. linux命令合集

    序:介绍一些经常需要用到的Linux命令. 一.wget 作用:下载网络文件,将远程服务器文件恢复备份到本地. wget http://cn.wordpress.org/wordpress-3.1-z ...

  3. ubantu下关于linux命令合集

    ubantu下linux的命令与操作 1.熟悉linux目录是学习linux非常必要的第一步 linux目录结构: linux目录: /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目 ...

  4. Java开发面试常见问题合集

    次面试事故 面试官:你看过哪些源码?我:都挺熟悉的面试官:对hashMap了解程度怎么样?面试官:那你能讲讲 HashMap的实现原理吗?面试官:HashMap什么时候会进行 rehash?面试官:结 ...

  5. 常用linux命令合集(持续更新中)

    我的博客:www.while0.com 开发调试 readelf-a 查看elf文件中的内容 hexdump -C 用16进制查看文件 objdump -d 反汇编目标文件 nm 查看目标文件或者可执 ...

  6. InnoDB 静态数据加密的常见问题合集

    1. 数据是否为有权查看数据的用户解密? 是的.InnoDB静态数据加密旨在透明地在数据库中应用加密,而不会影响现有应用程序.以加密格式返回数据会破坏大多数现有应用程序. InnoDB静态数据加密提供 ...

  7. 监控系统grafana常见问题合集

    监控系统搭建完毕后,使用中确实存在不少的习惯问题. 系统组成: 展示界面:Grafana 核心系统:Promethus snmp监控:SNMP Exporter ping监控:Blackbox Exp ...

  8. golang 在 windows 下编译出 linux 二进制可执行文件的软件套装合集 [go 1.7.3环境]

    golang 很好用,不过要把工具链弄完整. 要不你会发现怎么不能编译跨平台的呀? 怎么写代码没提示啊? ... 这一整套弄下来并不容易. 所以精心准备了一套工具方便大家使用. 软件列表如图. 安装顺 ...

  9. (转)超全整理!Linux性能分析工具汇总合集

    超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...

  10. Linux常用命令合集

    常用命令合集 命令选项和参数 Linux中的命令格式为:command [options] [arguments]  //中括号表示可选的,即有些命令不需要选项也不需要参数,但有的命令在运行时需要多个 ...

随机推荐

  1. UE5笔记:虚幻引擎反射系统和对象

    虚幻引擎反射系统 使用宏提供引擎和编辑器各种功能,封装你的类.使用虚幻时,可以使用标准的C++类,函数和变量 虚幻中对象的基类是UObject,UCALSS宏的作用是标记UObject的子类,以便UO ...

  2. MySQL,你只需要看这一篇文章就够了!PART04--完结篇

    MySQL--DAY04 索引 定义 索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制. 一张表的一个字段可以添加一个索引,当然,多个字段联合起来也可以添加索引. 索引相当于一本书的目 ...

  3. 盘点阿里、腾讯、百度大厂C#开源项目

    BAT作为互联网第一梯队的互联网公司,他们开源的项目都是发自内心地将踩过的坑和总结的经验融入到开源项目中,供业界所有人使用,希望帮助他人解决问题. 目前互联网的大厂开源的项目涉及各种语言,项目类型包含 ...

  4. AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)

    最近,"AI孙燕姿"翻唱众多明星的歌曲在各大网络平台上走红,其作品不仅累积上千万的播放量,在科技圈和音乐圈也都引发了热议,歌手孙燕姿在社交平台发文回应称:人类无法超越AI技术已指日 ...

  5. Java开发

    总结java开发中知识点和问题点 基础: 常用加解密算法: [md5] import java.security.MessageDigest; public static final String e ...

  6. python之DataClass

    Python 在版本 3.7 (PEP 557) 中引入了dataclass.dataclass允许你用更少的代码和更多的开箱即用功能来定义类. 下面定义了一个具有两个实例属性 name 和 age ...

  7. Ansible 运维自动化

    Ansible 概述Ansbile是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,列如持续部署,滚动更新.Ansible 适用于管理企业IT基础设施,从具有少数主机的小规模到数 ...

  8. 同步工具之Vector

    官网: https://vector.dev/ 用于构建可观察性管道的轻量级.超快速工具 [安装] curl --proto '=https' --tlsv1.2 -sSf https://sh.ve ...

  9. PHP编译安装之常见问题

    正式服的PHP环境,一般都会进行编译安装,汇总一下经常遇到的一些问题 1.Call to undefined function crmeb\utils\imagecreate 解决:需要安装gd库 1 ...

  10. 如何使用docsify搭建自己的github文档?

    安装前提 确认电脑已经安装好 node 和 npm 环境. 如果还没有装好,那需要执行下面的步骤: 1.进入官网:https://nodejs.org/zh-cn/ , 下载长期支持版. 2.安装就直 ...