更多的bash shell命令——第四章

前端之家收集整理的这篇文章主要介绍了更多的bash shell命令——第四章前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

小节目录:

  • 管理进程
  • 获取磁盘统计信息
  • 挂载新磁盘
  • 排序数据
  • 归档数据
  • @H_502_15@

    管理进程

    运行在系统的程序称之为进程(process),用ps 命令来进行监测。

    默认ps命令不会提供那么多信息 ps:

    [root@localhost ~]# ps
      PID TTY          TIME CMD
    14036 pts/0    00:00:00 bash
    14066 pts/0    00:00:00 ps

    PID 进程 ID (Process ID),TTY 运行在哪隔终端,TIME 进程已用的cpu时间

    ps命令支持三种不同类型的命令行参数:Unix,BSD,GNU

    ps [-aAcdefHjlmNVwy][acefghLnRSSTuvxX][-C <指令名称>][-g <群组名称>]
    [-G <群组识别码>][-p <进程识别码>][p <进程识别码>][-s <阶段作业>]
    [-t <终端机编号>][t <终端机编号>][-u <用户识别码>][-U <用户识别码>]
    [U <用户名称>][-<进程识别码>][--cols <每列字符数>]
    [--columns <每列字符数>][--cumulative][--deselect][--forest]
    [--headers][--help][-- info][--lines <显示列数>][--no-headers]
    [--group <群组名称>][-Group <群组识别码>][--pid <进程识别码>]
    [--rows <显示列数>][--sid <阶段作业>][--tty <终端机编号>]
    [--user <用户名称>][--User <用户识别码>][--version]
    [--width <每列字符数>]
    
    参数说明:
    
      -a  显示所有终端机下执行的进程,除了阶段作业领导者之外。
       a  显示现行终端机下的所有进程,包括其他用户的进程。
      -A  显示所有进程。
      -c  显示CLS和PRI栏位。
       c  列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
      -C<指令名称>  指定执行指令的名称,并列出该指令的进程的状况。
      -d  显示所有进程,但不包括阶段作业领导者的进程。
      -e  此参数的效果和指定"A"参数相同。
       e  列出进程时,显示每个进程所使用的环境变量。
      -f  显示UID,PPIP,C与STIME栏位。
       f  用ASCII字符显示树状结构,表达进程间的相互关系。
      -g<群组名称>  此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的名称来指定。
       g  显示现行终端机下的所有进程,包括群组领导者的进程。
      -G<群组识别码>  列出属于该群组的进程的状况,也可使用群组名称来指定。
       h  不显示标题列。
      -H  显示树状结构,表示进程间的相互关系。
      -j或j  采用工作控制的格式显示进程状况。
      -l或l  采用详细的格式来显示进程状况。
       L  列出栏位的相关信息。
      -m或m  显示所有的执行绪。
       n  以数字来表示USER和WCHAN栏位。
      -N  显示所有的进程,除了执行ps指令终端机下的进程之外。
      -p<进程识别码>  指定进程识别码,并列出该进程的状况。
       p<进程识别码>  此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。
       r  只列出现行终端机正在执行中的进程。
      -s<阶段作业>  指定阶段作业的进程识别码,并列出隶属该阶段作业的进程的状况。
       s  采用进程信号的格式显示进程状况。
       S  列出进程时,包括已中断的子进程资料。
      -t<终端机编号>  指定终端机编号,并列出属于该终端机的进程的状况。
       t<终端机编号>  此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。
      -T  显示现行终端机下的所有进程。
      -u<用户识别码>  此参数的效果和指定"-U"参数相同。
       u  以用户为主的格式来显示进程状况。
      -U<用户识别码>  列出属于该用户的进程的状况,也可使用用户名称来指定。
       U<用户名称>  列出属于该用户的进程的状况。
       v  采用虚拟内存的格式显示进程状况。
      -V或V  显示版本信息。
      -w或w  采用宽阔的格式来显示进程状况。 
       x  显示所有进程,不以终端机来区分。
       X  采用旧式的Linux i386登陆格式显示进程状况。
       -y 配合参数"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位
      -<进程识别码>  此参数的效果和指定"p"参数相同。
      --cols<每列字符数>  设置每列的最大字符数。
      --columns<每列字符数>  此参数的效果和指定"--cols"参数相同。
      --cumulative  此参数的效果和指定"S"参数相同。
      --deselect  此参数的效果和指定"-N"参数相同。
      --forest  此参数的效果和指定"f"参数相同。
      --headers  重复显示标题列。
      --help  在线帮助。
      --info  显示排错信息。
      --lines<显示列数> 设置显示画面的列数。
      --no-headers  此参数的效果和指定"h"参数相同,只在列表格式方面稍有差异。
      --group<群组名称>  此参数的效果和指定"-G"参数相同。
      --Group<群组识别码>  此参数的效果和指定"-G"参数相同。
      --pid<进程识别码>  此参数的效果和指定"-p"参数相同。
      --rows<显示列数>  此参数的效果和指定"--lines"参数相同。
      --sid<阶段作业>  此参数的效果和指定"-s"参数相同。
      --tty<终端机编号>  此参数的效果和指定"-t"参数相同。
      --user<用户名称>  此参数的效果和指定"-U"参数相同。
      --User<用户识别码>  此参数的效果和指定"-U"参数相同。
      --version  此参数的效果和指定"-V"参数相同。
      --widty<每列字符数>  此参数的效果和指定"-cols"参数相同。 
     
    常用命令:
    ps -ef
    ps aux
       ps aux输出格式
       USER PID %cpu %MEM VSZ RSS TTY STAT START TIME COMMAND
     
    USER: 进程拥有者
    PID:pid
    %cpu:占用的cpu使用率
    VSZ:占用的内存使用率
    RSS:占用的虚拟内存大小
    TTY:是否为登入者执行的程序,若为tty1-tty6,为本机登入者,若为pts/??,则为远程登入者。
    STAT:程序的状态,R:正在执行中,S:睡眠,T:正在检测或者停止,Z:死亡程序
    START:程序开始时间
    TIME:程序运行的时间
    COMMAND:所执行的指令。
    [root@localhost ~]# ps -ef 
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 Sep23 ?        00:00:01 /sbin/init
    root         2     0  0 Sep23 ?        00:00:00 [kthreadd]
    root         3     2  0 Sep23 ?        00:00:00 [migration/0]
    root         4     2  0 Sep23 ?        00:00:00 [ksoftirqd/0]
    root         5     2  0 Sep23 ?        00:00:00 [stopper/0]
    root         6     2  0 Sep23 ?        00:00:00 [watchdog/0]
    root         7     2  0 Sep23 ?        00:01:25 [events/0]
    root         8     2  0 Sep23 ?        00:00:00 [events/0]
    root         9     2  0 Sep23 ?        00:00:00 [events_long/0]
    root        10     2  0 Sep23 ?        00:00:00 [events_power_ef]

    这个例子用了两个参数: -e 参数指定显示所有运行在系统上的进程, -f 参数则扩展了输出,扩展包括这些列:

    UID :启动这些进程的用户
    PID :进程的ID
    PPID :父进程的进程号(如果该该进程是由另一个进程启动的)
    C : 进程生命周期中cpu的利用率
    STIME :进程启动时的系统时间
    TTY :进程启动时的终端设备
    TIME :运行进程需要的累积cpu时间
    CMD :启动程序的名称

    如果想要获更多信息,可采用-l 参数它会产生一个长格式输出

    [root@localhost ~]# ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0 14036 14032  0  80   0 - 27122 wait   pts/0    00:00:00 bash
    4 R     0 14115 14036  0  80   0 - 27034 -      pts/0    00:00:00 ps
    F : 内核分配给进程的系统标记
    S:进程状态(O代表正在运行,S代表正在休眠,R代表可运行,正在等待运行 Z代表僵化,进程已结束但父进程已不存在,T代表停止);
    PRI : 进程优先级,越大的数字代表越低的优先级
    NI : 谦让值 用来参与决定优先级
    ADDR : 进程的内存地址
    SZ : 假如进程被换出,所需交换空间的大致大小
    WCHAN : 进程休眠的内核函数的地址

    实时监测进程:

    ps命令虽然在手机在系统上运行进程信息时非常有用,但也有不足之处:它只能显示特定时间点的信息。如果想观察那些频繁换进换出的内存的进程时,ps就不那么方便了。

    top命令适合这种场景:top命令与ps相似,能够显示进程信息,但是它是实时显示的。

    [root@localhost ~]# top
    top - 00:58:06 up 1 day,6:29,1 user,load average: 0.00,0.01,0.05
    Tasks: 148 total,1 running,147 sleeping,0 stopped,0 zombie
    cpu(s):  0.0%us,0.3%sy,0.0%ni,99.7%id,0.0%wa,0.0%hi,0.0%si,0.0%st
    Mem:    881004k total,816212k used,64792k free,151564k buffers
    Swap:  2621436k total,0k used,2621436k free,385520k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %cpu %MEM    TIME+  COMMAND                                                                                                      
    14259 root      20   0 15032 1260  936 R  0.7  0.1   0:00.18 top                                                                                                           
        7 root      20   0     0    0    0 S  0.3  0.0   1:30.31 events/0                                                                                                      
        1 root      20   0 19364 1544 1228 S  0.0  0.2   0:01.77 init                                                                                                          
        2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd

    输出的第一部分显示的是系统概况:

    第一行显示了 当前时间,系统的运行时间,登录用户数及系统的平均负载。平局负载有三个值:最近1分钟、5分钟 和15分钟的平均负载。值越大说明负载越高。由于进程短期内的突发性活动,出现最近1分钟的高负载值也很常见。但是如果15分钟平均负载都很高,说明系统可能有问题了。

    Linux管理系统定义什么程度算是高负载,这个值取决于系统硬件配置及系统上通常运行的程序。对某个系统来说是高负载的值可能对另一系统来说是正常值,通常一个系统负载超过了2,就说明系统比较繁忙了。

    第二行显示了进程概要信息——top命令的输出中将进程叫做任务(Task): 有多少金城处于运行、休眠、停止或者是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。

    下一行显示cpu概要信息:

    后两行显示了系统内存状态:

    最后一部分显示了当前运行中进程的详细列表,跟ps 输出类似:

    PID :进程ID
    USER:进程属主的名字
    PR:进程优先级
    NI: 进程谦让度
    VIRT: 进程占用的虚拟机内存总量
    RES: 进程占用的物理内存总量
    SHR : 进程和其他进程共享的内存总量
    S : 进程的状态(D代表可中断的休眠状态,R 代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态).
    %cpu : 进程使用的cpu时间比例
    %MEM: 进程使用的内存占可用内存的比例
    TIME+:进程启动到目前为止的cpu时间总量
    COMMAND:进程所对应的命令行名称,也就是启动的程序名。

    默认top 会按%cpu值对进程进行排序。可以在top运行时使用多种交互命令重新排序。每个交互命令都是单字符的,top命令运行时 键入可改变top的行为。键入f 允许你选择对输出进行排序的字段,键入d 允许你修改轮询间隔,键入q 可以退出top。用户在top命令上有很大的控制权,这个工具经常能找出占用系统最大资源的罪魁祸首。

    杀死进程:
    kill pid
    kill -9 pid
    killall process*

    检测磁盘空间:

    mount / umount 挂在存储媒体

    使用df命令:disk free

    有时你需要知道在某个设备上还有多少磁盘空间。df命令可以让你很方便的查看所有已挂载磁盘的使用情况。

    [root@node1 ~]# df
    Filesystem           1K-blocks    Used Available Use% Mounted on
    /dev/mapper/VolGroup-lv_root
                          12367016 6069160   5662976  52% /
    tmpfs                   653492      76    653416   1% /dev/shm
    /dev/sda1               487652   40916    421136   9% /boot

    df命令会显示每个有数据的已挂载文件系统,有些已挂载设备仅限系统内部使用。命令输出如下:

    设备的设备文件位置;
    能容纳多少个1024字节大小的块
    已用了多少个1024字节大小的块
    还有多少个1024字节大小的块可用
    已用空间所占的比例
    设备挂载到哪个挂载点上

    df -h 命令,它会把输出中的磁盘空间按照用户易读的形式显示,通常用M来替代兆字节,用G替代吉字节

    [root@node1 ~]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root
                           12G  5.8G  5.5G  52% /
    tmpfs                 639M   76K  639M   1% /dev/shm
    /dev/sda1             477M   40M  412M   9% /boot

    使用du命令:disk usage

    使用df命令很容易发现某个磁盘的存储空间快没了。系统管理员面临的下一个问题是,发生了这种情况怎么办。另一个游泳的命令是du命令。du命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可以判断系统上某个目录爱是不是有超大文件

    默认情况下,du命令会显示当前目录下所有文件、目录和子目录的磁盘使用情况,它会以磁盘块为单位来表明每个文件或目录占用了多大存储空间。对标准大小的目录来说,这个输出会是一个比较长的列表。下面是du命令的部分输出

    [root@node1 ~]# du
    4	./.config/gnome-disk-utility/ata-smart-ignore
    8	./.config/gnome-disk-utility
    4	./.config/gnome-session/saved-session
    8	./.config/gnome-session
    4	./.config/ibus/bus
    8	./.config/ibus
    36	./.config
    4	./Desktop
    0	./.gvfs
    40	./.local/share/gvfs-Metadata
    24	./.local/share/applications
    68	./.local/share
    72	./.local
    4	./Pictures
    8	./.oracle_jre_usage
    20	./.cache
    4	./Documents

    左边数值代表每个文件或目录占用的磁盘块数,注意:这个列表是从目录层级的最底部开始,然后按照文件、子目录、目录逐级向上。

    du命令不加参数作用并不大,我们更想知道每个文件和目录占用了多大的磁盘空间,但如果还得逐页查找的话就没什么意义了。

    下面是能让du 命令用起来更方便的几个命令行参数。

    -c :显示所有已列出文件总大小
    -h :按照用户易读的格式输出大小, K代表千字节 , M代表兆字节 , G 代表吉字节
    -s : 显示每个输出参数的总计。

    处理数据文件

    排序数据:sort命令

    sort命令按照会话指定的默认语言的排序规则对文本文件中的数据进行排序

    ========================================================

    放假先回家了,剩下的到家整理O(∩_∩)O~

猜你在找的Bash相关文章