32
    1.free查看内存的使用情况

    1. [root@study ~]# free [-b|-k|-m|-g|-h] [-t] [-s N -c N]
    2. 选项与参数:
    3. -b :直接输入 free 时,显示的单位是 KBytes,我们可以使用 b
    4. Bytes), mMBytes kKBytes), gGBytes 来显示单位喔!也可以直接让系统自己指定单位
    5. -h
    6. -t :在输出的最终结果,显示实体内存与 swap 的总量。
    7. -s :可以让系统每几秒钟输出一次,不间断的一直输出的意思!对于系统观察挺有效!
    8. -c :与 -s 同时处理~让 free 列出几次的意思~
    9. 范例一:显示目前系统的内存容量
    10. [root@study ~]# free -m
    11. total used free shared buff/cache available
    12. Mem: 2848 346 1794 8 706 2263
    13. Swap: 1023 0 1023

    就会出现上面的信息。Mem 那一行显示的是实体
    内存的量, Swap 则是内存交换空间的量。 total 是总量, used 是已被使用的量, free 则 是剩余可用的量。 后面的 shared/buffers/cached 是在已被使用的量当中,用来作为缓冲 及高速缓存的量,这些 shared/buffers/cached 的用量中,在系统比较忙碌时, 可以被释出
    而继续利用!因此后面就有一个 available (可用的) 数值!

    我们可以发现这部测试机根本没有什么特别的服务,但
    是竟然有 706MB 左右的 cache 耶!
    因为鸟哥在测试过程中还是有读/写/执行很多的文件
    嘛!这些文件就会被系统暂时高速缓存下来,等待下次运行时可以更快速的取出意!
    也就是说,系统是“很有效率的将所有的内存用光光”,目的是为了让系统的存取性能加速 啦!

    2. uname:查阅系统与核心相关信息

    [root@study ~]# uname [-asrmpi] 
    选项与参数: 
    -a :所有系统相关的信息,包括下面的数据都会被列出来; 
    -s :系统核心名称 
    -r :核心的版本 
    -m :本系统的硬件名称,例如 i686 或 x86_64 等; 
    -p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型! 
    -i :硬件的平台 (
    ix86) 
    范例一:输出系统的基本信息 
    [root@study ~]# uname -a 
    Linux study.centos.vbird 3.10.0-2
    

    3.uptime:观察系统启动时间与工作负载

    这个指令很单纯呢!就是显示出目前系统已经开机多久的时间,以及 1, 5, 15 分钟 
    的平均负载就是了。还记得 top 吧?没错啦!这个 uptime 可以显示出 top 画面的最上面一 
    行!
    [root@study ~]# uptime 
    02:35:27 up 7:48, 3 users, load average: 0.00, 0.01, 0.05 
    # top 这个指令已经谈过相关信息,不再聊!
    

    这个 netstat 也是挺好玩的,其实这个指令比较常被用在网络的监控方面
    在程序管理方面也是需要了解的啦! netstat 的输出
    分为两大部分,分别是网络与系统自己的程序相关性部分:

    [root@study ~]# netstat -[atunlp] 
    选项与参数: 
    -a :将目前系统上所有的连线、监听、Socket 数据都列出来 
    -t :列出 tcp 网络封包的数据 
    -u :列出 udp 网络封包的数据 
    -n :不以程序的服务名称,以埠号 (
    port number) 来显示; 
    -l :列出目前正在网络监听 (
    listen) 的服务;-p :列出该网络服务的程序 PID 
    范例一:列出目前系统已经创建的网络连线与 unix socket 状态 
    [root@study ~]# netstat 
    Active Internet connections (
    w/o servers) <==与网络较相关的部分 
    Proto Recv-Q Send-Q Local Address Foreign Address State 
    tcp 0 0 172.16.15.100:ssh 172.16.220.234:48300 ESTABLISHED 
    Active UNIX domain sockets (
    w/o servers) <==与本机的程序自己的相关性(非网络) 
    Proto RefCnt Flags Type State I-Node Path 
    unix 2 [ ] DGRAM 1902 @/org/freedesktop/systemd1/notify 
    unix 2 [ ] DGRAM 1944 /run/systemd/shutdownd 
    ....(中间省略).... 
    unix 3 [ ] STREAM CONNECTED 25425 @/tmp/.X11-unix/X0 
    unix 3 [ ] STREAM CONNECTED 28893 
    unix 3 [ ] STREAM CONNECTED 21262
    

    显示了两个部分,分别是网络的连线以及 linux 上面的 socket
    程序相关性部分。 我们先来看看网际网络连线情况的部分:
    Proto :网络的封包协定,主要分为 TCP 与 UDP 封包
    Recv-Q:非由使用者程序链接到此 socket 的复制的总 Bytes 数;
    Send-Q:非由远端主机传送过来的 acknowledged 总 Bytes 数;
    Local Address :本地端的 IP:port 情况
    Foreign Address:远端主机的 IP:port 情况
    State :连线状态,主要有创建(ESTABLISED)及监听(LISTEN)

    我们看上面仅有一条连线的数据,他的意义是:“通过 TCP 封包的连线远端的 172.16.220.234:48300 连线到本地端的 172.16.15.100:ssh ,这条连线状态是创建 (ESTABLISHED) 的状态!

    socket file 可以沟通两个程序之间的信息,因此程序可以取得对方传送过来的数据。
    上表中 socket file 的输出字段有:
    Proto :一般就是 unix 啦;
    RefCnt:连接到此 socket 的程序数量;
    Flags :连线的旗标;
    Type :socket 存取的类型。主要有确认连线的 STREAM 与不需确认的 DGRAM 两 种;
    State :若为 CONNECTED 表示多个程序之间已经连线创建。
    Path :连接到此 socket 的相关程序的路径!或者是相关数据输出的路径

    范例二:找出目前系统上已在监听的网络连线及其 PID 
    [root@study ~]# netstat -tulnp 
    Active Internet connections (only servers) 
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1326/sshd 
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2349/master 
    tcp6 0 0 :::22 :::* LISTEN 1326/sshd 
    tcp6 0 0 ::1:25 :::* LISTEN 2349/master 
    udp 0 0 0.0.0.0:123 0.0.0.0:* 751/chronyd 
    udp 0 0 127.0.0.1:323 0.0.0.0:* 751/chronyd 
    udp 0 0 0.0.0.0:57808 0.0.0.0:* 743/avahi-daemon: r 
    udp 0 0 0.0.0.0:5353 0.0.0.0:* 743/avahi-daemon: r 
    udp6 0 0 :::123 :::* 751/chronyd 
    udp6 0 0 ::1:323 :::* 751/chronyd 
    # 除了可以列出监听网络的接口与状态之外,最后一个字段还能够显示此服务的 
    # PID 号码以及程序的指令名称喔!例如上头的 1326 就是该 PID 
    范例三:将上述的 0.0.0.0:57808 那个网络服务关闭的话? 
    [root@study ~]# kill -9 743 
    [root@study ~]# killall -9 avahi-daemon
    

    5.dmesg :分析核心产生的讯息

    范例一:输出所有的核心开机时的信息 
    [root@study ~]# dmesg | more 
    范例二:搜寻开机的时候,硬盘的相关信息为何?[root@study ~]# dmesg | grep -i vda 
    [ 0.758551] vda: vda1 vda2 vda3 vda4 vda5 vda6 vda7 vda8 vda9 
    [ 3.964134] XFS (vda2): Mounting V4 Filesystem 
    ....(下面省略)....
    

    6.vmstat :侦测系统资源变化

    [root@study ~]# vmstat [-a] [延迟 [总计侦测次数]] <==CPU/内存等信息 
    [root@study ~]# vmstat [-fs] <==内存相关 
    [root@study ~]# vmstat [-S 单位] <==设置显示数据的单位 
    [root@study ~]# vmstat [-d] <==与磁盘有关 
    [root@study ~]# vmstat [-p 分区] <==与磁盘有关 
    选项与参数: 
    -a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息; 
    -f :开机到目前为止,系统复制 (
    fork) 的程序数; 
    -s :将一些事件 (开机至目前为止) 导致的内存变化情况列表说明; 
    -S :后面可以接单位,让显示的数据有单位。例如 K/M 取代 Bytes 的容量; 
    -d :列出磁盘的读写总量统计表 
    -p :后面列出分区,可显示该分区的读写总量统计表 
    范例一:统计目前主机 CPU 状态,每秒一次,共计三次! 
    [root@study ~]# vmstat 1 3 
    procs ------------memory---------- ---swap-- -----io---- -system-- ------cpu----- 
    r b swpd free buff cache si so bi bo in cs us sy id wa st 
    1 0 0 1838092 1504 722216 0 0 4 1 6 9 0 0 100 0 0 
    0 0 0 1838092 1504 722200 0 0 0 0 13 23 0 0 100 0 0 
    0 0 0 1838092 1504 722200 0 0 0 0 25 46 0 0 100 0 0
    

    利用 vmstat 甚至可以进行追踪喔!你可以使用类似“ vmstat 5 ”代表每五秒钟更新 一次,且无穷的更新!直到你按下 [ctrl]-c 为止。如果你想要实时的知道系统资源的运行 状态,这个指令就不能不知道!那么上面的表格各项字段的意义为何? 基本说明如下:

    程序字段 (procs) 的项目分别为: 
    r :等待运行中的程序数量;b:不可被唤醒的程序数量。
    这两个项目越多,代表系 统越忙碌 
    (因为系统太忙,所以很多程序就无法被执行或一直在等待而无法被唤醒 之故)。 
    内存字段 
    
    (memory) 项目分别为: 
    swpd:虚拟内存被使用的容量; free:未被使用的内存容量; buff:用于缓冲内存; 
    cache:用于高速缓存内存。 这部份则与 free 是相同的。 
    内存交换空间 (swap) 的项目分别为:si:由磁盘中将程序取出的量;
    so:由于内存不足而将没用到的程序写入到磁盘的 
    swap 的容量。 如果 si/so 的数值太大,表示内存内的数据常常得在磁盘与内存之间传 
    来传去,系统性能会很差! 
    
    磁盘读写 (io) 的项目分别为: 
    bi:由磁盘读入的区块数量; bo:写入到磁盘去的区块数量。如果这部份的值越 
    高,代表系统的 I/O 非常忙碌! 
    
    系统 (system) 的项目分别为: 
    in:每秒被中断的程序次数; 
    cs:每秒钟进行的事件切换次数;
    这两个数值越大,代 表系统与周边设备的沟通非常频繁! 
    这些周边设备当然包括磁盘、网卡、时间钟 等。
    
    CPU 的项目分别为: 
    us:非核心层的 CPU 使用状态;
    sy:核心层所使用的 CPU 状态; id:闲置的状态; 
    wa:等待 I/O 所耗费的 CPU 状态; 
    st:被虚拟机 (virtual machine) 所盗用的 CPU 使用状态 (2.6.11 以后才支持)。
    

    范例二:系统上面所有的磁盘的读写状态

    [root@study ~]# vmstat -d 
    disk- ------------reads------------ ------------writes----------- -----IO------ 
    total merged sectors ms total merged sectors ms cur sec 
    vda 21928 0 992587 47490 7239 2225 258449 13331 0 26 
    sda 395 1 3168 213 0 0 0 0 0 0 
    sr0 0 0 0 0 0 0 0 0 0 0 
    dm-0 19139 0 949575 44608 7672 0 202251 16264 0 25 
    dm-1 336 0 2688 327 0 0 0 0 0 0 
    md0 212 0 1221 0 14 0 4306 0 0 0 
    dm-2 218 0 9922 565 54 0 4672 128 0 0 
    dm-3 179 0 957 182 11 0 4306 68 0 0