Linux常用的九个高级命令

1.1 top:

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况

  1. top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.

  2. 命令与显示结果

    [itshare@hadoop201 ~]$ top
    top - 08:04:45 up 14 min,  2 users,  load average: 1.33, 0.37, 0.16
    Tasks: 160 total,   1 running, 159 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  3861304 total,  2006184 free,  1452708 used,   402412 buff/cache
    KiB Swap:  4063228 total,  4063228 free,        0 used.  2179892 avail Mem 
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                        
      2744 itshare   20   0 2880872 298780  23396 S   1.7  7.7   0:36.89 java                                                                                                                           
      2371 itshare   20   0 2822356 228376  22624 S   0.7  5.9   0:17.38 java                                                                                                                           
      1138 root      20   0  305504   6564   5176 S   0.3  0.2   0:01.10 vmtoolsd                                                                                                                       
      1418 root      20   0  218552   4080   3240 S   0.3  0.1   0:00.22 rsyslogd                                                                                                                       
      1526 mysql     20   0 1122304 190276   6672 S   0.3  4.9   0:02.53 mysqld                                                                                                                         
      2234 itshare   20   0 2841872 314700  22636 S   0.3  8.2   0:16.27 java                                                                                                                           
      2935 itshare   20   0 2827640 315028  22756 S   0.3  8.2   0:24.83 java  
    
  1. 显示结果说明

    1. top

      1. 08:04:45 当前系统时间
      2. up 14 min 系统运行的时间,格式:时:分, 刚启动只有分
      3. 2 user 当前登陆用户数
      4. load average: 1.33, 0.37, 0.16: 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
    2. Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie

      1. total 进程总数
      2. running 正在运行的进程数
      3. sleeping 睡眠的进程数
      4. stopped 停止的进程数
      5. zombie 僵尸进程数
    3. %Cpu(s):

      1. 0.1 us 用户空间占用CPU百分比
      2. 0.0 sy 内核空间占用CPU百分比
      3. 0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
      4. 99.9 id 空闲CPU百分比
      5. 0.0 wa 等待输入输出的CPU时间百分比
      6. 0.0 hi 硬件CPU中断占用百分比
      7. 0.0 si 软中断占用百分比
      8. 0.0 st 虚拟机占用百分比
    4. KiB Mem :

      1. 3861304 total 物理内存总量
      2. 1976556 free, 空闲内存总量
      3. 1485068 used 使用的物理内存总量
      4. 399680 buff/cache 用作内核缓存的内存量
    5. KiB Swap:

      1. 4063228 total 交换区总量
      2. 4063228 free 空闲交换区总量
      3. 0 used 使用的交换区总量
      4. 2179892 avail Mem 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入
    6. 再下面是动态的进程信息列表

      序号  列名    含义
      a    PID     进程id
      b    PPID    父进程id
      c    RUSER   Real user name
      d    UID     进程所有者的用户id
      e    USER    进程所有者的用户名
      f    GROUP   进程所有者的组名
      g    TTY     启动进程的终端名。不是从终端启动的进程则显示为 ?
      h    PR      优先级
      i    NI      nice值。负值表示高优先级,正值表示低优先级
      j    P       最后使用的CPU,仅在多CPU环境下有意义
      k    %CPU    上次更新到现在的CPU时间占用百分比
      l    TIME    进程使用的CPU时间总计,单位秒
      m    TIME+   进程使用的CPU时间总计,单位1/100秒
      n    %MEM    进程使用的物理内存百分比
      o    VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
      p    SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
      q    RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
      r    CODE    可执行代码占用的物理内存大小,单位kb
      s    DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
      t    SHR     共享内存大小,单位kb
      u    nFLT    页面错误次数
      v    nDRT    最后一次写入到现在,被修改过的页面数。
      w    S       进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
      x    COMMAND 命令名/命令行
      y    WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名
      z    Flags   任务标志,参考 sched.h
      

      默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

      更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
      o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
      按大写的 FO 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

  2. 命令的使用

    1. top使用格式

      top [-] [d] [p] [q] [c] [C] [S] [s] [n]
      
      • 选项说明

        选项 含义
        d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
        p 通过指定监控进程ID来仅仅监控某个进程的状态
        q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
        S 指定累计模式
        s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
        i 使top不显示任何闲置或者僵死进程。
        c 显示整个命令行而不只是显示命令名
  1. 其他实用命令
    下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

    命令 含义
    Ctrl+L 擦除并且重写屏幕。
    h或者? 显示帮助画面,给出一些简短的命令总结说明。
    k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
    i 忽略闲置和僵死进程。这是一个开关式命令。
    q 退出程序。
    r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
    S 切换到累计模式。
    s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成 ms。输入0值则系统将不断刷新,默认值是3s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
    f/F 从当前显示中添加或者删除项目。
    o/O 改变显示项目的顺序。
    l 切换显示平均负载和启动时间信息。
    m 切换显示内存信息。
    t 切换显示进程和CPU状态信息。
    c 切换显示命令名称和完整命令行。
    M 根据驻留内存大小进行排序。
    P 根据CPU使用百分比大小进行排序。
    T 根据时间/累计时间进行排序。
    W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
  1. 常用操作:

    top       //每隔3秒显式所有进程的资源占用情况
    top -d 5  //每隔5秒显式所有进程的资源占用情况
    top -c  //每隔5秒显式进程的资源占用情况,并显示进程的命令行选项(默认只有进程名)
    top -p 2744 -p 2371//每隔5秒显示pid是2744和pid是2371的两个进程的资源占用情况
    top -d 2 -c -p 2371//每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行选项
    

1.2 ps

  1. 概述: ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照。

  2. 格式:ps [options] [--help]

  3. ps 的选项非常多, 在此仅列出几个常用的选项

    选项 含义
    -A 列出所有的进程
    -w 显示加宽可以显示较多的资讯
    -au 显示较详细的资讯
    -aux 显示所有包含其他使用者的行程
    • ps aux 输出格式

      [itshare@hadoop201 ~]$ ps -aux
      USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root          1  0.0  0.1 191428  4380 ?        Ss   07:50   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
      root          2  0.0  0.0      0     0 ?        S    07:50   0:00 [kthreadd]
      root          4  0.0  0.0      0     0 ?        S<   07:50   0:00 [kworker/0:0H]
      root          6  0.0  0.0      0     0 ?        S    07:50   0:00 [ksoftirqd/0]
      root          7  0.0  0.0      0     0 ?        S    07:50   0:00 [migration/0]xxxxxxxxxx itshare    3228  0.0  0.0 155472  1872 pts/0    R+   09:20   0:00 ps aux[itshare@hadoop201 ~]$ ps -auxUSER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot          1  0.0  0.1 191428  4380 ?        Ss   07:50   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22root          2  0.0  0.0      0     0 ?        S    07:50   0:00 [kthreadd]root          4  0.0  0.0      0     0 ?        S<   07:50   0:00 [kworker/0:0H]root          6  0.0  0.0      0     0 ?        S    07:50   0:00 [ksoftirqd/0]root          7  0.0  0.0      0     0 ?        S    07:50   0:00 [migration/0]USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
      
  • 每列含义说明

    USER: 行程拥有者
    PID: pid
    %CPU: 占用的 CPU 使用率
    %MEM: 占用的记忆体使用率
    VSZ: 占用的虚拟记忆体大小
    RSS: 占用的记忆体大小
    TTY: 终端的次要装置号码 (minor device number of tty)
    STAT: 该行程的状态:
        D: 无法中断的休眠状态 (通常 IO 的进程)
        R: 正在执行中
        S: 静止状态
        T: 暂停执行
        Z: 不存在但暂时无法消除
        W: 没有足够的记忆体分页可分配
        <: 高优先序的行程
        N: 低优先序的行程
        L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    START: 行程开始时间
    TIME: 执行的时间
    COMMAND:所执行的指令
    
  1. 常见用法

    1. 根据进程信息查询

      1. 格式

        ps -ef | grep 进程关键字
        
      2. 举例

        [itshare@hadoop201 ~]$ ps aux|grep mysql
        mysql      1526  0.1  4.9 1122304 190276 ?      Sl   07:50   0:09 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
        itshare    3264  0.0  0.0 112828   980 pts/0    R+   09:33   0:00 grep --color=auto mysql
        
    2. 显示指定用户的进程

      [itshare@hadoop201 ~]$ ps -u itshare
         PID TTY          TIME CMD
        1976 ?        00:00:01 sshd
        1977 pts/0    00:00:00 bash
        2007 ?        00:00:00 sshd
        2008 pts/1    00:00:00 bash
        2234 ?        00:00:36 java
        2371 ?        00:00:37 java
        2744 ?        00:01:20 java
        2935 ?        00:00:39 java
        3272 pts/0    00:00:00 ps
      
  1. 显示所有进程信息,连同命令行

    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 07:50 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    root          2      0  0 07:50 ?        00:00:00 [kthreadd]
    root          4      2  0 07:50 ?        00:00:00 [kworker/0:0H]
    root          6      2  0 07:50 ?        00:00:00 [ksoftirqd/0]
    root          7      2  0 07:50 ?        00:00:00 [migration/0]
    ...
    

1.3 iotop

  1. 概述:

    实时监控磁盘I/O的工具

  2. 安装

    yum -y install iotop
    
  3. 使用

    1. 查看帮助信息

      [root@hadoop201 itshare]# iotop -h
      Usage: /usr/sbin/iotop [OPTIONS]
      
      DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
      period. SWAPIN and IO are the percentages of time the thread spent respectively
      while swapping in and waiting on I/O more generally. PRIO is the I/O priority at
      which the thread is running (set using the ionice command).
      
      Controls: left and right arrows to change the sorting column, r to invert the
      sorting order, o to toggle the --only option, p to toggle the --processes
      option, a to toggle the --accumulated option, i to change I/O priority, q to
      quit, any other key to force a refresh.
      
      Options:
        --version             show program's version number and exit
        -h, --help            show this help message and exit
        -o, --only            only show processes or threads actually doing I/O
        -b, --batch           non-interactive mode
        -n NUM, --iter=NUM    number of iterations before ending [infinite]
        -d SEC, --delay=SEC   delay between iterations [1 second]
        -p PID, --pid=PID     processes/threads to monitor [all]
        -u USER, --user=USER  users to monitor [all]
        -P, --processes       only show processes, not all threads
        -a, --accumulated     show accumulated I/O instead of bandwidth
        -k, --kilobytes       use kilobytes instead of a human friendly unit
        -t, --time            add a timestamp on each line (implies --batch)
        -q, --quiet           suppress some lines of header (implies --batch)
      

      选项说明

        --version             显示程序的版本号并退出
        -h, --help            显示帮助信息并退出
        -o, --only            只显示正在进行I/O操作的进程或线程 
        -b, --batch           非交互模式,一般用于记录日志
        -n NUM, --iter=NUM    设置监测的次数,默认无限。在非交互模式下很有用。
        -d SEC, --delay=SEC   设置每次监测的间隔,默认1秒,接受非整形数据
        -p PID, --pid=PID     指定监测的进程/线程。
        -u USER, --user=USER  指定监测某个用户产生的I/O
        -P, --processes       仅显示进程,默认iotop显示所有线程。
        -a, --accumulated     显示累积的I/O,而不是带宽。
        -k, --kilobytes       使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。
        -t, --time             加上时间戳,非交互非模式。
        -q, --quiet           禁止头几行,非交互模式。有三种指定方式。
      

      按键交互

      left和right方向键:改变排序。  
      r:反向排序。
      o:切换至选项--only。
      p:切换至--processes选项。
      a:切换至--accumulated选项。
      q:退出。
      i:改变线程的优先级。
      
  4. 举例

    1. 只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。

      iotop  -o
      
    2. 时间刷新间隔3秒,输出5次

      iotop  -d 3 -n 5
      
  1. 非交互式,输出5次,间隔5秒,输出到屏幕,也可输出到日志文本,用于监控某时间段的io信息

    iotop -botq -n 5 -d 5
    
  1. 非交互式,输出pid为2744的进程信息

     iotop -botq -p 2744
    

1.4 iostat

iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。

  1. 安装

    yum install sysstat
    
  2. 使用

    显示所有设备负载情况

    [root@hadoop201 itshare]# iostat
    Linux 3.10.0-1127.el7.x86_64 (hadoop201)        2021年02月02日  _x86_64_        (8 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.05    0.00    0.07    0.00    0.00   99.88
    
    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    sda               0.80        23.40         7.18     711490     218382
    scd0              0.00         0.03         0.00       1028          0
    dm-0              0.75        22.34         7.11     679395     216294
    dm-1              0.00         0.07         0.00       2204          0
    

    说明:

    cpu属性值说明:

    %user:CPU处在用户模式下的时间百分比。

    %nice:CPU处在带NICE值的用户模式下的时间百分比。

    %system:CPU处在系统模式下的时间百分比。

    %iowait:CPU等待输入输出完成时间的百分比。

    %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

    %idle:CPU空闲时间百分比。

    备注:

    如果%iowait的值过高,表示硬盘存在I/O瓶颈

    如果%idle值高,表示CPU较空闲

    如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。

    如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU。

    cpu属性值说明:

    tps:该设备每秒的传输次数

    kB_read/s:每秒从设备(drive expressed)读取的数据量;

    kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

    kB_read: 读取的总数据量;

    kB_wrtn:写入的总数量数据量;

  3. 举例

    定时显示所有信息

    # 【每隔2秒刷新显示,且显示3次】 iostat 2 3
    

    显示指定磁盘信息

    iostat -d /dev/sda
    

    显示tty和Cpu信息

    iostat -t
    

    以M为单位显示所有信息

    iostat -m
    

    查看设备使用率(%util)、响应时间(await)

    # 【-d 显示磁盘使用情况,-x 显示详细信息】#  iostat -d -x -k 1 1
    

    说明:

    rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s

    wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s

    %util: 一秒中有百分之多少的时间用于 I/O

    如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷

    idle小于70% IO压力就较大了,一般读取速度有较多的wait。

    查看cpu状态

    [root@hadoop201 itshare]# iostat -c 1 1
    Linux 3.10.0-1127.el7.x86_64 (hadoop201)        2021年02月02日  _x86_64_        (8 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.05    0.00    0.07    0.00    0.00   99.88
    

1.5 netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

  1. 输出信息含义

    [root@hadoop201 itshare]# netstat
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 hadoop201:43808         hadoop2:intu-ec-svcdisc TIME_WAIT  
    tcp        0      0 hadoop2:intu-ec-svcdisc hadoop203:46252         ESTABLISHED
    tcp        0      0 hadoop2:intu-ec-svcdisc hadoop202:49768         ESTABLISHED
    tcp        0     96 hadoop201:ssh           192.168.19.1:64945      ESTABLISHED
    tcp        0      0 hadoop201:ssh           192.168.19.1:65078      ESTABLISHED
    tcp        0      0 hadoop201:43456         hadoop2:intu-ec-svcdisc ESTABLISHED
    tcp        0      0 hadoop201:42906         hadoop202:8031          ESTABLISHED
    tcp        0      0 hadoop2:intu-ec-svcdisc hadoop201:43456         ESTABLISHED
    Active UNIX domain sockets (w/o servers)
    Proto RefCnt Flags       Type       State         I-Node   Path
    unix  3      [ ]         DGRAM                    30       /run/systemd/notify
    unix  2      [ ]         DGRAM                    32       /run/systemd/cgroups-agent
    
  1. 执行netstat后,其输出结果为

    从整体上看,netstat的输出结果可以分为两个部分:

    • 一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

    • 另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
      Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

  2. 常见选项

    -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。
    -l 仅列出有在 Listen (监听) 的服務状态

    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令。

    提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

  3. 实用命令实例

    1. 列出所有端口 (包括监听和未监听的)

    2. 列出所有端口 netstat -a

      ```
      [root@hadoop201 itshare]# netstat -a|more
      Active Internet connections (servers and established)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State      
      tcp        0      0 0.0.0.0:ampify          0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:9864            0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:fs-agent        0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:9866            0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:9867            0.0.0.0:*               LISTEN     
      tcp        0      0 localhost:33006         0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:9870            0.0.0.0:*               LISTEN     
      tcp        0      0 hadoop201:19888         0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:10033           0.0.0.0:*               LISTEN     
      tcp        0      0 hadoop2:intu-ec-svcdisc 0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
      tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:13562           0.0.0.0:*               LISTEN     
      tcp        0      0 hadoop201:10020         0.0.0.0:*               LISTEN     
      tcp        0      0 0.0.0.0:40807           0.0.0.0:*               LISTEN     
      tcp        0      0 hadoop201:43812         hadoop2:intu-ec-svcdisc TIME_WAIT  
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop203:46252         ESTABLISHED
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop202:49768         ESTABLISHED
      tcp        0     96 hadoop201:ssh           192.168.19.1:64945      ESTABLISHED
      tcp        0      0 hadoop201:ssh           192.168.19.1:65078      ESTABLISHED
      tcp        0      0 hadoop201:43456         hadoop2:intu-ec-svcdisc ESTABLISHED
      tcp        0      0 hadoop201:42906         hadoop202:8031          ESTABLISHED
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop201:43456         ESTABLISHED
      tcp6       0      0 [::]:mysql              [::]:*                  LISTEN     
      tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
      tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
      udp        0      0 hadoop201:ntp           0.0.0.0:*                          
      udp        0      0 localhost:ntp           0.0.0.0:*                          
      udp        0      0 0.0.0.0:ntp             0.0.0.0:*                          
      udp6       0      0 hadoop201:ntp           [::]:*                             
      udp6       0      0 localhost:ntp           [::]:*                             
      udp6       0      0 [::]:ntp                [::]:*                             
      Active UNIX domain sockets (servers and established)
      Proto RefCnt Flags       Type       State         I-Node   Path
      unix  2      [ ACC ]     STREAM     LISTENING     16647    /run/systemd/private
      unix  3      [ ]         DGRAM                    30       /run/systemd/notify
      unix  2      [ ]         DGRAM                    32       /run/systemd/cgroups-agent
      unix  2      [ ACC ]     STREAM     LISTENING     25818    private/proxymap
      unix  2      [ ACC ]     SEQPACKET  LISTENING     16678    /run/udev/control
      unix  2      [ ACC ]     STREAM     LISTENING     25821    private/proxywrite
      unix  2      [ ACC ]     STREAM     LISTENING     25824    private/smtp
      unix  2      [ ACC ]     STREAM     LISTENING     25827    private/relay
      unix  2      [ ACC ]     STREAM     LISTENING     16680    /run/lvm/lvmetad.socket
      unix  2      [ ACC ]     STREAM     LISTENING     40       /run/systemd/journal/stdout
      unix  2      [ ACC ]     STREAM     LISTENING     25833    private/error
      unix  2      [ ACC ]     STREAM     LISTENING     25836    private/retry
      unix  5      [ ]         DGRAM                    43       /run/systemd/journal/socket
      unix  2      [ ACC ]     STREAM     LISTENING     25839    private/discard
      unix  2      [ ACC ]     STREAM     LISTENING     25842    private/local
      unix  15     [ ]         DGRAM                    45       /dev/log
      unix  2      [ ACC ]     STREAM     LISTENING     25845    private/virtual
      unix  2      [ ACC ]     STREAM     LISTENING     20792    /var/run/abrt/abrt.socket
      unix  2      [ ]         DGRAM                    16698    /run/systemd/shutdownd
      unix  2      [ ACC ]     STREAM     LISTENING     16707    /run/lvm/lvmpolld.socket
      unix  2      [ ACC ]     STREAM     LISTENING     25854    private/scache
      unix  2      [ ACC ]     STREAM     LISTENING     26922    private/defer
      unix  2      [ ACC ]     STREAM     LISTENING     26925    private/trace
      unix  2      [ ACC ]     STREAM     LISTENING     26902    public/pickup
      unix  2      [ ACC ]     STREAM     LISTENING     26906    public/cleanup
      unix  2      [ ACC ]     STREAM     LISTENING     26931    public/flush
      unix  2      [ ACC ]     STREAM     LISTENING     25830    public/showq
      unix  2      [ ACC ]     STREAM     LISTENING     25848    private/lmtp
      unix  2      [ ACC ]     STREAM     LISTENING     25851    private/anvil
      unix  2      [ ACC ]     STREAM     LISTENING     26909    public/qmgr
      unix  2      [ ACC ]     STREAM     LISTENING     26913    private/tlsmgr
      unix  2      [ ACC ]     STREAM     LISTENING     26916    private/rewrite
      unix  2      [ ACC ]     STREAM     LISTENING     26919    private/bounce
      unix  2      [ ACC ]     STREAM     LISTENING     26928    private/verify
      unix  2      [ ACC ]     STREAM     LISTENING     20696    /run/dbus/system_bus_socket
      unix  2      [ ACC ]     STREAM     LISTENING     25905    /var/lib/mysql/mysql.sock
      unix  2      [ ACC ]     STREAM     LISTENING     15096    /var/run/vmware/guestServicePipe
      unix  3      [ ]         STREAM     CONNECTED     26900    
      unix  3      [ ]         STREAM     CONNECTED     994      
      unix  3      [ ]         STREAM     CONNECTED     26926    
      ```
    
    1. 列出所有 tcp 端口 netstat -at

      [root@hadoop201 itshare]# netstat
      Active Internet connections (w/o servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State      
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop203:46252         ESTABLISHED
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop202:49768         ESTABLISHED
      tcp        0     96 hadoop201:ssh           192.168.19.1:64945      ESTABLISHED
      tcp        0      0 hadoop201:ssh           192.168.19.1:65078      ESTABLISHED
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop203:47112         ESTABLISHED
      tcp        0      0 hadoop201:43456         hadoop2:intu-ec-svcdisc ESTABLISHED
      tcp        0      0 hadoop201:42906         hadoop202:8031          ESTABLISHED
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop201:43456         ESTABLISHED
      
  3. **列出所有 udp 端口 netstat -au**

     ```
     [root@hadoop201 itshare]# netstat -au
     Active Internet connections (servers and established)
     Proto Recv-Q Send-Q Local Address           Foreign Address         State      
     udp        0      0 hadoop201:ntp           0.0.0.0:*                          
     udp        0      0 localhost:ntp           0.0.0.0:*                          
     udp        0      0 0.0.0.0:ntp             0.0.0.0:*                          
     udp6       0      0 hadoop201:ntp           [::]:*                             
     udp6       0      0 localhost:ntp           [::]:*                             
     udp6       0      0 [::]:ntp                [::]:*      
     ```
  1. 列出所有处于监听状态的 Sockets

    1. 只显示监听端口 netstat -l
    2. 只列出所有监听 tcp 端口 netstat -lt
    3. 只列出所有监听 udp 端口 netstat -lu
    4. 只列出所有监听 UNIX 端口 netstat -lx
  2. 显示每个协议的统计信息

    1. 显示所有端口的统计信息 netstat -s
    2. 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
  3. 在 netstat 输出中显示 PID 和进程名称 netstat -p

    1. netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

      [root@hadoop201 itshare]# netstat -pt
      Active Internet connections (w/o servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
      tcp        0      0 hadoop201:43818         hadoop2:intu-ec-svcdisc TIME_WAIT   -                 
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop203:46252         ESTABLISHED 2234/java         
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop202:49768         ESTABLISHED 2234/java         
      tcp        0     96 hadoop201:ssh           192.168.19.1:64945      ESTABLISHED 1974/sshd: itshare 
      tcp        0      0 hadoop201:ssh           192.168.19.1:65078      ESTABLISHED 2005/sshd: itshare 
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop203:47122         ESTABLISHED 2234/java         
      tcp        0      0 hadoop201:43456         hadoop2:intu-ec-svcdisc ESTABLISHED 2371/java         
      tcp        0      0 hadoop201:42906         hadoop202:8031          ESTABLISHED 2744/java         
      tcp        0      0 hadoop2:intu-ec-svcdisc hadoop201:43456         ESTABLISHED 2234/java    
      
  4. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

    当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

    同样可以加速输出,因为不用进行比对查询。

    # netstat -an
    

    如果只是不想让这三个名称中的一个被显示,使用以下命令

    # netsat -a --numeric-ports
    # netsat -a --numeric-hosts
    # netsat -a --numeric-users
    
  5. 持续输出 netstat 信息

    netstat 将每隔一秒输出网络信息。

    # netstat -c
     Active Internet connections (w/o servers)
     Proto Recv-Q Send-Q Local Address           Foreign Address         State
     tcp        0      0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
     tcp        1      1 ramesh-laptop.loc:52564 101.11.169.230:www      CLOSING
     tcp        0      0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
     tcp        1      1 ramesh-laptop.loc:42367 101.101.34.101:www      CLOSING
    
  6. 显示系统不支持的地址族 (Address Families)

  ```
  netstat --verbose
  ```

  在输出的末尾,会有如下的信息

  ```
  netstat: no support for `AF IPX' on this system.
  netstat: no support for `AF AX25' on this system.
  netstat: no support for `AF X25' on this system.
  netstat: no support for `AF NETROM' on this system.
  ```
  1. 显示核心路由信息 netstat -r
  ```
  [root@hadoop201 itshare]# netstat -r
  Kernel IP routing table
  Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
  default         gateway         0.0.0.0         UG        0 0          0 ens33
  192.168.19.0    0.0.0.0         255.255.255.0   U         0 0          0 ens33
  ```

  

  **注意:** 使用 netstat -rn 显示数字格式,不查询主机名称。
  1. 找出程序运行的端口
  并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

  ```
  # netstat -ap | grep ssh
   tcp        1      0 dev-db:ssh           101.174.100.22:39213        CLOSE_WAIT  -
   tcp        1      0 dev-db:ssh           101.174.100.22:57643        CLOSE_WAIT  -
  ```

   **找出运行在指定端口的进程**

  ```
  # netstat -an | grep ':80'
  ```

  10. **显示网络接口列表**

      ```
      # netstat -i
      Kernel Interface table
      Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
      eth0       1500 0         0      0      0 0             0      0      0      0 BMU
      eth2       1500 0     26196      0      0 0         26883      6      0      0 BMRU
      lo        16436 0         4      0      0 0             4      0      0      0 LRU
      ```

      显示详细信息,像是 ifconfig 使用 netstat -ie:

      ```
      # netstat -ie
       Kernel Interface table
       eth0      Link encap:Ethernet  HWaddr 00:10:40:11:11:11
       UP BROADCAST MULTICAST  MTU:1500  Metric:1
       RX packets:0 errors:0 dropped:0 overruns:0 frame:0
       TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
       Memory:f6ae0000-f6b00000
      ```

   11. **IP和TCP分析**

       **查看连接某服务端口最多的的IP地址**

       ```
       wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
       18 221.136.168.36
       3 154.74.45.242
       2 78.173.31.236
       2 62.183.207.98
       2 192.168.1.14
       2 182.48.111.215
       2 124.193.219.34
       2 119.145.41.2
       2 114.255.41.30
       1 75.102.11.99
       ```

       **TCP各种状态列表**

       ```
       wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
       established)
       Foreign
       LISTEN
       TIME_WAIT
       ESTABLISHED
       TIME_WAIT
       SYN_SENT
       ```

       

       - 先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。

         ```
         [root@hadoop201 itshare]# netstat -nat |awk '{print $6}'|sort|uniq -c
               1 established)
               7 ESTABLISHED
               1 Foreign
              18 LISTEN
               1 TIME_WAIT
         [root@hadoop201 itshare]# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
              18 LISTEN
               7 ESTABLISHED
               1 TIME_WAIT
               1 Foreign
         ```

         

       - 分析access.log获得访问前10位的ip地址

         ```
         awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10
         ```

1.6 tar

  • tar 用于压缩和解压缩

  • tar 常见选项

    • 必要选项有如下:

      -A 新增压缩文件到已存在的压缩
      -B 设置区块大小
      -c 建立新的压缩文件
      -d 记录文件的差别
      -r 添加文件到已经压缩的文件
      -u 添加改变了和现有的文件到已经存在的压缩文件
      -x 从压缩的文件中提取文件
      -t 显示压缩文件的内容
      -z 支持gzip解压文件
      -j 支持bzip2解压文件
      -Z 支持compress解压文件
      -v 显示操作过程
      -l 文件系统边界设置
      -k 保留原有文件不覆盖
      -m 保留文件不被覆盖
      -W 确认压缩文件的正确性
      
    • 可选选项如下:

      -b 设置区块数目
      -C 切换到指定目录
      -f 指定压缩文件
      --help 显示帮助信息
      --version 显示版本信息
      
  • 常用命令展示

    tar 
    解包:tar xvf FileName.tar
    打包:tar cvf FileName.tar DirName
    (注:tar是打包,不是压缩!)
    
    
    .gz
    解压1:gunzip FileName.gz
    解压2:gzip -d FileName.gz
    压缩:gzip FileName
    
    .tar.gz 和 .tgz
    解压:tar zxvf FileName.tar.gz
    压缩:tar zcvf FileName.tar.gz DirName
    
    .bz2
    解压1:bzip2 -d FileName.bz2
    解压2:bunzip2 FileName.bz2
    压缩: bzip2 -z FileName
    
    .tar.bz2
    解压:tar jxvf FileName.tar.bz2
    压缩:tar jcvf FileName.tar.bz2 DirName
    
    .bz
    解压1:bzip2 -d FileName.bz
    解压2:bunzip2 FileName.bz
    压缩:未知
    
    .tar.bz
    解压:tar jxvf FileName.tar.bz
    压缩:未知
    
    .Z
    解压:uncompress FileName.Z
    压缩:compress FileName
    
    .tar.Z
    解压:tar Zxvf FileName.tar.Z
    压缩:tar Zcvf FileName.tar.Z DirName
    
    .zip
    解压:unzip FileName.zip
    压缩:zip FileName.zip DirName
    
    .rar
    解压:rar x FileName.rar
    压缩:rar a FileName.rar DirName 
    

1.7 df -h

Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。

  • 常用选项:

    -a, --all 包含所有的具有 0 Blocks 的文件系统
    --block-size={SIZE} 使用 {SIZE} 大小的 Blocks
    -h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
    -H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
    -i, --inodes 列出 inode 资讯,不列出已使用 block
    -k, --kilobytes 就像是 --block-size=1024
    -l, --local 限制列出的文件结构
    -m, --megabytes 就像 --block-size=104857
    --no-sync 取得资讯前不 sync (预设值)
    -P, --portability 使用 POSIX 输出格式
    --sync 在取得资讯前 sync
    -t, --type=TYPE 限制列出文件系统的 TYPE
    -T, --print-type 显示文件系统的形式
    -x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
    -v (忽略)
    --help 显示这个帮手并且离开
    --version 输出版本资讯并且离开
    
  • 举例

    • 显示文件系统的磁盘使用情况统计

      [root@hadoop201 itshare]# df
      文件系统                   1K-块     已用     可用 已用% 挂载点
      devtmpfs                 1918620        0  1918620    0% /dev
      tmpfs                    1930652        0  1930652    0% /dev/shm
      tmpfs                    1930652    11892  1918760    1% /run
      tmpfs                    1930652        0  1930652    0% /sys/fs/cgroup
      /dev/mapper/centos-root 47285700 10178564 37107136   22% /
      /dev/sda1                1038336   153928   884408   15% /boot
      tmpfs                     386132        0   386132    0% /run/user/1000
      

      第一列指定文件系统的名称,

      第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。

      已用和可用列分别表示正在使用中,空闲的磁盘的总量。

      已用%列指定使用的内存的百分比,

      而最后一栏"挂载点"指定的文件系统的挂载点。

  • -h选项,通过它可以产生可读的格式df命令的输出:

    [root@hadoop201 itshare]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    devtmpfs                 1.9G     0  1.9G    0% /dev
    tmpfs                    1.9G     0  1.9G    0% /dev/shm
    tmpfs                    1.9G   12M  1.9G    1% /run
    tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/mapper/centos-root   46G  9.8G   36G   22% /
    /dev/sda1               1014M  151M  864M   15% /boot
    tmpfs                    378M     0  378M    0% /run/user/1000
    

    我们可以看到输出显示的数字形式的'G'(千兆字节),"M"(兆字节)和"K"(千字节)。

    这使输出容易阅读和理解,从而使显示可读的。请注意,第二列的名称也发生了变化,为了使显示可读的"大小"。

1.8 find

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

  • 语法

    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
    
  • 参数说明

    find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。

    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

    • -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

    • -amin n : 在过去 n 分钟内被读取过

    • -anewer file : 比文件 file 更晚被读取过的文件

    • -atime n : 在过去n天内被读取过的文件

    • -cmin n : 在过去 n 分钟内被修改过

    • -cnewer file :比文件 file 更新的文件

    • -ctime n : 在过去n天内被修改过的文件

    • -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name

    • -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

    • -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

    • -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

    • -type c : 文件类型是 c 的文件。

      • d: 目录

      • c: 字型装置文件

      • b: 区块装置文件

      • p: 具名贮列

      • f: 一般文件

      • l: 符号连结

      • s: socket

    • -pid n : process id 是 n 的文件

    • 你可以使用 ( ) 将运算式分隔,并使用下列运算。

      • exp1 -and exp2

      • ! expr

      • -not expr

      • exp1 -or exp2

      • exp1, exp2

  • 实例

    • 列出当前目录下所有csv文件

      [root@hadoop201 itshare]# find . -name "*.csv"
      ./partition.csv
      
  • 将当前目录及其下子目录中所有文件列出

    find . -type f
    
  • 将当前目录及其子目录下所有最近 1 天内更新过的文件列出

    [root@hadoop201 module]# find . -ctime -1
    ./hadoop-3.1.3/logs/userlogs
    ./hadoop-3.1.3/logs/hadoop-itshare-historyserver-hadoop201.out
    ./hadoop-3.1.3/logs/hadoop-itshare-namenode-hadoop201.out
    ./hadoop-3.1.3/logs/hadoop-itshare-datanode-hadoop201.out
    ./hadoop-3.1.3/logs/hadoop-itshare-nodemanager-hadoop201.out
    
  • 查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:

    [root@hadoop201 module]# find /var/log -type f -mtime +7 -ok rm {} \;
    < rm ... /var/log/tallylog > ? 
    
  • 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

    find . -type f -perm 644 -exec ls -l {} \;
    
  • 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:

    find / -type f -size 0 -exec ls -l {} \;
    

1.9 crontab

crontab是用来定期执行程序的命令。

  • 语法

    crontab [ -u user ] file
    或
    crontab [ -u user ] { -l | -r | -e }
    

    crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。

    -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

    • 选项

      • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
      • -r : 删除目前的时程表
      • -l : 列出目前的时程表
    • 时间格式

      f1 f2 f3 f4 f5 program
      
      • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
      • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
      • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
      • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
      • 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
      *    *    *    *    *
      -    -    -    -    -
      |    |    |    |    |
      |    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
      |    |    |    +---------- 月份 (1 - 12) 
      |    |    +--------------- 一个月中的第几天 (1 - 31)
      |    +-------------------- 小时 (0 - 23)
      +------------------------- 分钟 (0 - 59)
      
    • 使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间

  • 举例

    • 每一分钟执行一次 /bin/ls

      * * * * * /bin/ls
      
  • 在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:

    0 6-12/3 * 12 * /usr/bin/backup
    

你可能感兴趣的:(Linux常用的九个高级命令)