linux-cmd

文件

结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
要遵循FHS规范,规范定义的两级目录规范如下:
/home 每个账号在该目录下都有一个文件夹,进行数据的管理
/usr 有点像windows的program files和winNT结合的目录,主要包括系统的主要程序、本机端额外安装的软件、图形接口所需要的文档、额外的函数库、共享目录与文件等
/bin /usr/bin /usr/local/bin 存放执行挡 如可执行的指令等
/boot 存放linux开机会用到的文件
/dev 存放linux的任何装置和接口设备文档
/etc 存放系统设定文档 如账号密码文件、各种服务的起始档等
/lib /usr/lib /usr/local/lib 系统使用的函数库放置的目录
/mnt /media 是软盘和光盘预设挂载点的地方
/opt 主机额外安装软件所摆放的目录
/proc 该目录是一个虚拟档案系统,他放置的数据都是在内存中,所 以本身不占用任何的硬盘空间
/root 系统管理员的家目录
/sbin /usr/sbin /usr/local/sbin 放置一些只有系统管理员才能动用 的执行指令
/srv 一些服务启动之后,这些服务所需要取用的数据目录
/tmp 让一般使用者或者正在执行的程序暂时放置档案的地方
/var 主要针对系统执行过程中,常态性变动档案放置的目录
文档的路径有:绝对路径 (absolute) 与相对路径 (relative)。
绝对路径为:由根目录 (/) 开始写起的文件名或目录名称
相对路径为相对于目前路径的文件名写法。 ./表示相对当前路径,../表示相对于上一级目录的路径,~代表home目录,~account代表当前账号的home目录)

查看文件

  • 1
    2
    cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况;
    more和less一般用于显示文件内容超过一屏的内容,并且提供翻页的功能。more比cat强大,提供分页显示的功能,less比more更强大,提供翻页,跳转,查找等命令。而且more和less都支持:用空格显示下一页,按键b显示上一页
  • 1
    2
    3
    4
    5
    cat -b threadpool.cpp//对非空行显示行号 cat -b threadpool.cpp |less
    cat -n threadpool.cpp//对所有行均显示行号
    cat > newtxt.txt//创建新文件
    cat sir01.txt sir02.txt sir03.txt > sir04.txt //如果sir04.txt存在,则清空,并合并1 2 3 到4,否则就创建
    cat sir01.txt sir02.txt sir03.txt >> sir04.txt//追加 到 sir04.txt
  • 1
    2
    3
    4
    more -c threadpool.cpp//从顶部清屏后显示
    more +4 threadpool.cpp//从 第四行开始显示
    more -4 threadpool.cpp//每屏显示4行
    more +/threadpool threadpool.cpp//从 threadpool.cpp第一个 threadpool单词的前两行开始显示
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    less -N threadpool.cpp//显示行号
    less -M threadpool.cpp//显示百分比,页数以及总行数
    less -c threadpool.cpp//从顶部清空后显示
    less +4 ////从 第四行开始显示
    less -4//每屏显示4行

    动作命令:
    g 跳到第一行
    G 调到最后一行
    p n%调到 n%
    /pattern 搜索pattern单词
  • 1
    2
    3
    head -n 10 threadpool.cpp//显示前10行
    tail -n 10 threadpool.cpp//显示最后10行
    tail -n +10 threadpool.cpp
  • 1
    2
    3
    wc -l threadpool.cpp//统计文件行数 line
    wc -w threadpool.cpp//统计单词数
    wc -c //统计字符个数

内存、磁盘、IO

  • 1
    2
    tail -f log.log//实时查看log
    tail -100f log.log//实时查看Log的后100行, ctrl +c 退出
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
      top//
    top - 16:20:29 up 5:14, 1 user, load average: 0.21, 0.07, 0.04
    Tasks: 276 total, 2 running, 210 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 2.0 us, 0.3 sy, 0.0 ni, 97.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    KiB Mem : 4015636 total, 182740 free, 1430052 used, 2402844 buff/cache
    KiB Swap: 2097148 total, 2097148 free, 0 used. 2274092 avail Mem

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    2050 bliss 20 0 3149272 472176 98040 S 1.7 11.8 2:27.45 gnome-shell
    1861 bliss 20 0 450400 111008 48884 S 1.0 2.8 0:47.45 Xorg
    第一行:当前时间;系统运行天数;使用者个数;系统负载的平均值,后面分别为1分钟前,5分钟前,15分钟前进程的平均个数。这个数超过CPU数目时,说明负载过高
    第二行:任务:进程总数,运行进程总数,睡眠进程总数,被停止的进程总数,僵尸进程的进程总数
    第三行:cpu状态:us 用户空间占用CPU的百分比,sy内核空间,ni改变过优先级的进程,id空闲CPU,waIO等待占用CPU,hi硬件中断,si软件中断
    第四行:物理内存总量-空闲内存-使用中的内存-缓存内存
    第五行:swap交换分区 swap总量-


    可用内存数,这里有个近似的计算公式:第四行的内存free + 第四行的内存buffers + 第五行的swap cached

    6行为空
    7行:
    PID-进程ID
    USER-进程所有者
    NI-优先级-Nice值(负值高优先级,正值低优先级)
    VIRT-进程使用的虚拟内存总量 kb,VIRT=SWAP+RES
    RES 进程使用的、未被换出的物理内存大小,kb RES=CODE+data
    SHR 共享内存大小,kb
    S 进程状态。D=不可中断的睡眠状态R=运行 S=睡眠 T=跟踪/停止 Z=僵尸
    %CPU 上次更新到现在的CPU时间占用百分比
    %MEM 进程使用的物理内存百分比
    TIME+ 进程使用的CPU时间总计 1/100
    COMMAND 进程名称


    -H//开启线程查看
    动作命令:
    1 查看每个逻辑CPU的状况//不按1时,显示的是所有CPU的均值
    M 按照内存排序,默认从大到小,R反向
    P 根据CPU使用排序
    T 根据使用时间排序
    N 以 PID 的大小的顺序排列表示进程列表
    H 查看线程
    f 进入到选项框,带*的是显示项,d选择是否显示,s 表示按此排序

    top -H -p <pid>//top 查看单个进程的 线程资源
  • 1
    2
    //配合使用pmap  -d   + 进程号;查看进程内存映射情况
    pmap -d 1123
  • 1
    2
    3
    4
    top命令的监控最小单位是进程,所以看不到我关心的java线程数和客户连接数,而这两个指标是java的web服务非常重要的指标,通常我用ps和netstate两个命令来补充top的不足。

    ps -eLf | grep java | wc -l// 监控java线程数
    netstat -n | grep tcp | grep 侦听端口 | wc -l// 监控网络客户连接数
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    系统根目录/proc中,每一个数字子目录的名字都是运行中的进程的PID,进入任一个进程目录,可通过其中文件或目录来观察进程的各项运行指标,例如task目录就是用来描述进程中线程的,因此也可以通过下面的方法获取某进程中运行中的线程数量(PID指的是进程ID):
    ls /proc/PID/task | wc -l

    pmap PID//分析进程堆栈
    /*
    30281: top
    000055c102af6000 100K r-x-- top
    000055c102d0e000 4K r---- top
    000055c102d0f000 4K rw--- top
    000055c102d10000 160K rw--- [ anon ]
    000055c104132000 532K rw--- [ anon ]
    00007fcdc5a1a000 240K r-x-- libnss_systemd.so.2
    00007fcdc5a56000 2044K ----- libnss_systemd.so.2
    */
    cat /proc/your_PID/status //进程状态 进程状态、文件句柄数、内存使用情况
    /*
    Name: top
    Umask: 0022
    State: S (sleeping)
    Tgid: 30281
    Ngid: 0
    Pid: 30281
    PPid: 29894
    TracerPid: 0
    Uid: 1000 1000 1000 1000
    Gid: 1000 1000 1000 1000
    FDSize: 256
    Groups: 4 24 27 30 46 116 126 1000
    */
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    cat /proc/cpuinfo   //cpu的配置信息 CPU核心数,时钟频率、CPU型号
    /*
    processor : 0
    vendor_id : GenuineIntel
    cpu family : 6
    model : 158
    model name : Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
    stepping : 10
    microcode : 0xb4
    cpu MHz : 2303.997
    cache size : 8192 KB
    physical id : 0

    */
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    free//
    total used free shared buff/cache available
    Mem: 4015744 1030652 1603008 5472 1382084 2690460
    Swap: 2097148 0 2097148

    total 总计物理内存
    used 已使用
    free 未使用
    shared 多个进程共享的内存总额
    buffer/cache 磁盘缓存的大小
    free -m //单位 mb
    free -k //单位kb//默认
    free -b //单位b

    cat/proc/meminfo
    /*
    MemTotal: 4015744 kB
    MemFree: 1590312 kB
    MemAvailable: 2692140 kB
    Buffers: 270108 kB
    Cached: 952780 kB
    SwapCached: 0 kB

    */

    vmstat //Virtual Meomory Statistics 可对操作系统的虚拟内存、进程、IO读写、CPU活动等进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析
    vmstat
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 0 1576316 270224 1139764 0 0 1459 633 264 714 5 6 72 17 0

    procs r //等待运行的进程数
    pros b //处在非中断睡眠状态的进程数 指被资源阻塞的进程对列数

    memory swpd //已使用的虚拟内存大小
    memory free// 空闲的物理内存的大小
    buff// 用来做buffer(缓存,主要用于块设备缓存)的内存数,
    cache//用来做cache(缓存,主要用于缓存文件)的内存,

    swap si//Amount of memory swapped in from disk 从磁盘交换到内存的交换页数量,单位:KB/秒。
    so// Amount of memory swapped to disk从内存交换到磁盘的交换页数量,单位:KB/秒
    io bi//Blocks received from a block device 每秒从块设备接收到的块数,单位:块/秒 也就是读块设备。
    bo//Blocks sent to a block device 每秒发送到块设备的块数,单位:块/秒 也就是写块设备。
    system in//每秒的中断数,包括时钟中断
    system cs//每秒的环境(上下文)切换次数。

    cpu us//用户CPU时间(非内核进程占用时间)(单位为百分比) us的值比较高时,说明用户进程消耗的CPU时间多。
    sy//系统使用的CPU时间(单位为百分比)
    id// Time spent idle 空闲的CPU的时间(百分比)
    wa//Time spent waiting for IO. 等待IO的CPU时间 wait越大则机器io性能就越差。说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
    st//Time stolen from a virtual machine
    //参数命令
    vmstat -f //显示系统启动以来的forks总数 包括fork、vfork和clone system calls
    vmstat -n 3//每隔3s刷新一次
    vmstat 3 5//每隔三秒更新一次,更新5次
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    iostat//

    Linux 4.15.0-64-generic (ubuntu) 20190930日 _x86_64_ (1 CPU)

    avg-cpu: %user %nice %system %iowait %steal %idle
    2.19 0.43 2.36 5.56 0.00 89.45

    Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
    loop0 0.04 0.42 0.00 1117 0
    loop1 3.25 3.62 0.00 9573 0

    avg-cpu % usr cpu处于用户模式下的时间百分比
    %nice CPU处于带NICE值的用户模式下的百分比
    %system 系统模式下的百分比
    %iowait 处于等待输入输出完成时间的百分比 过高,表示硬盘存在I/O瓶颈
    %steal 管理程序维护另一个虚拟处理器时,虚拟CPU无意识等待事件百分比
    %idle CPU空闲时间百分比
    Device tps 该设备每秒的传输次数
    KB_read/s 每秒从设备(drive expressed)读取的数据量;
    kB_wrtn/s 每秒向设备(drive expressed)写入的数据量
    kB_read: 读取的总数据量;
    kB_wrtn:写入的总数量数据量;

    # 【每隔2秒刷新显示,且显示3次】
    iostat 2 3
    -c //显示 CPU情况
    -x//显示详细情况
    -d//显示磁盘使用情况 iostat -d sda1 显示指定磁盘信息
    iostat -m// 以M为单位显示信息

    iostat -d -x -k 1 1//
    Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
    loop0 0.03 0.00 0.32 0.00 0.00 0.00 0.00 0.00 14.56 0.00 0.00 10.34 0.00 0.22 0.00

    rrqm/s 每秒进行的merge的读操作数目
    wrqm/s 每秒进行的merge的写操作数目
    %util 一秒中有百分多少的时间用于IO 接近100表示IO请求太多,IO系统已经满负荷
    idle 小于
  • 1
    2
    3
    df  磁盘使用情况统计
    -h // 使用人类可读的格式
    -i //列出 inodes
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    sar //查看网络 IO
    sar -n DEV 1 2//一秒采集1次,采集2次
    095648秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
    095649秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00


    Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
    Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    Average: ens33 0.51 0.00 0.03 0.00 0.00 0.00 0.00 0.00

    IFACE //设备名称
    rxpck/s//每秒接受到的数据包 几千正常
    txpck/s 每秒发送的包
    rxkB/s 每秒接收到的数据量
    txKB/s 每秒发送的数据量

    sar -n DEV -f /var/log/sa/sa07 查看7号的流量,后边sa07指的是那一天的,sar会以日期号为结尾保存,最多保存一个月的
    sar -q 查看历史负载 sar -q -f /var/log/sa07查看指定某天的负载
    sar -b 查看磁盘的(读写)
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
      ps 
    -e // 显示所有进程
    -f// 显示UID,PPIP,C与STIME栏位
    -p//指定进程识别码,并列出该进程的状况。
    -U<用户识别码>  列出属于该用户的进程的状况,也可使用用户名称来指定。
    -t<终端机编号>  指定终端机编号,并列出属于该终端机的进程的状况。
    -C<指令名称>  指定执行指令的名称,并列出该指令的进程的状况。
    x  显示所有进程,不以终端机来区分。
    -l或l  采用详细的格式来显示进程状况。
    -T//开启线程查看
    /*
    ps -T -t 5249 查看 5249 进程创建的线程
    PID SPID TTY TIME CMD
    5249 5249 tty2 00:00:10 firefox
    5249 5256 tty2 00:00:00 gmain
    5249 5257 tty2 00:00:00 gdbus

    */
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    netstat //显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告
    -t //显示TCP的连接状况
    -u//显示 UDP的连接状况
    -p //显示正在使用Socket的程序识别码和程序名称。
    -i//显示网卡
    -s//显示网络统计
    -l//处于listen状态的socket
    -e //显示扩展信息,例如uid等
    -c //每隔一个固定时间,执行该netstat命令

    netstat -ap | grep firfox//找出程序运行的端口数据
    tcp 0 0 ubuntu:48944 182.254.53.181:https ESTABLISHED 5249/firefox
    tcp 0 0 ubuntu:37916 182.254.59.158:https ESTABLISHED 5249/firefox
    unix 3 [ ] STREAM CONNECTED 76587 5418/firefox
    unix 3 [ ] SEQPACKET CONNECTED 77567 5249/firefox


    LISTEN:侦听来自远方的TCP端口的连接请求

    SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)

    SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)

    ESTABLISHED:代表一个打开的连接

    FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

    FIN-WAIT-2:从远程TCP等待连接中断请求

    CLOSE-WAIT:等待从本地用户发来的连接中断请求

    CLOSING:等待远程TCP对连接中断的确认

    LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)

    TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

    CLOSED:没有任何连接状态

    netstat -atnp | grep ESTA //打印 active 状态的连接 active 状态的套接字连接用 "ESTABLISHED" 字段表示
    sudo netstat -aple | grep ntp// 查看服务是否在运行
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    pidstat//监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等
    u:默认的参数,显示各个进程的cpu使用统计
    -r:显示各个进程的内存使用统计
    -d:显示各个进程的IO使用情况
    -p:指定进程号
    -w:显示每个进程的上下文切换情况
    -t:显示选择任务的线程的统计信息外的额外信息
    -l:显示命令名和所有参数
    //每个进程的上下文切换情况
    bliss@ubuntu:~$ pidstat -w -p 5249
    Linux 4.15.0-64-generic (ubuntu) 20190930日 _x86_64_ (1 CPU)

    110102秒 UID PID cswch/s nvcswch/s Command
    1101021000 5249 1.35 6.54 firefox

    Cswch/s:每秒主动任务上下文切换数量
    Nvcswch/s:每秒被动任务上下文切换数量


    pidstat -T TASK TASK表示报告独立的task。
    pidstat -T CHILD CHILD关键字表示报告进程下所有线程统计信息
    pidstat -T ALL ALL表示报告独立的task和task下面的所有线程。

  • 统计某个文件夹下文件个数

    • 1
      ls /proc/5249/task | wc -l //某个进程创建了多少个线程
  • CPU参数

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      Linux查看物理CPU个数、核数、逻辑CPU个数

      # 总核数 = 物理CPU个数 X 每颗物理CPU的核数

      # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数


      # 查看物理CPU个数

      cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l


      # 查看每个物理CPU中core的个数(即核数)

      cat /proc/cpuinfo| grep "cpu cores"| uniq


      # 查看逻辑CPU的个数

      cat /proc/cpuinfo| grep "processor"| wc -l


      查看CPU信息(型号)
      cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
文章目录
  1. 1. 文件
    1. 1.1. 结构
  2. 2. 内存、磁盘、IO
  3. 3.