美文网首页一俢哥的 Liunx 学习笔记
【一俢哥的 Liunx 学习笔记】调兵遣将

【一俢哥的 Liunx 学习笔记】调兵遣将

作者: 一俢 | 来源:发表于2019-07-24 09:30 被阅读0次

    Liunx 系统的运行,需要大量的程序参与,如果没有程序的系统,那整个系统就成了一个寂静的兵马俑,一个一个没有生机的士兵存放的地方,如果要让整个军队运作起来,需要骑兵、步兵、弓弩手等等协作完成各种任务,调动起他们的积极性,才能让整个军队充满生机。Liunx 系统也一样,这些二进制的执行会行程一个一个的程序,程序会让系统的磁盘、内容、CPU 运作起来,这样系统也会起到自己应有的作用。

    本篇文章你会学习到:

    • Job 管理
    • 程序管理
    • 系统资源
    • SELiunx

    Job 管理

    在 Linux 下,可以简单的把 Job 理解为,一个或多个命令及其运行的任务。也就是说,之前所所的 cp mv tar,等在 bash 环境中运行的命令就是 Job,那么我们控制这些任务的运行状况,就是 Job 管理。要进行 bash 的 Job 管理必须要注意到的限制是:

    • 这些工作所触发的程序必须来自于你 shell 的子程序(只管理自己的 bash);
    • 前景:你可以控制与下达指令的这个环境称为前景的工作 (foreground);
    • 背景:可以自行运行的工作,你无法使用 [ctrl]+c 终止他,可使用 bg/fg 调用该工作;
    • 背景中“执行”的程序不能等待 terminal/shell 的输入(input)

    Job 管理相关命令

    • jobs:查看当前背景工作状态;
      • -l -r -s
    • &:将命令放到背景总执行;
    • fg:将背景的任务调到前景来处理;
    • bg:让工作在背景下的状态变成运行中;
    • kill:管理背景的任务;
      • -l -1 -2 -9 -15
    • nohup:离线执行任务。

    当运行一个命令时,我们可以通过 [ctrl]+z 将它放入到背景中暂停起来,接下来我们可以通过 jobs 看到所有的 Job 工作状态:

    jay-liunx% jobs -l
    [1]  - 12773 suspended  vim hell.txt
    [2]  + 12829 suspended  find / -print
    

    通过 fg 命令可以将背景任务重新唤起:

    jay-liunx% fg %2
    // 省略...
    

    通过 & 直接在背景中运行:

    jay-liunx% tar -zpcf /tmp/etc.tar.gz /etc &
    

    通过 kill 命令,来管理背景中的 Jobs:

    jay-liunx% kill -9 %2
    

    通过 nohup 命令,可以让任务离线执行,即使是注销了,任务也能执行完。

    jay-liunx% nohup ./task.sh &
    

    程序管理

    Liunx 下的程序包括 Liunx 所有的命令、服务以及应用程序,他们运行后都会有一个 PID。管理程序,就是查看、修改、停止这些正在运行的程序。

    • ps:查看某个时间点运行的程序;
      • -l -A -w -a -u -x
    • top:查看实时程序的变化;
      • -d -b -n -p
    • kill:关闭程序;
      • -l -1 -2 -9 -15
    • killall:关闭所有相关程序;
      • -i -e -I
    • nice:设置程序的执行权重;
    • renice:重新调整程序的执行权重;

    通过 ps 可以查看运行的程序:

    jay-liunx% ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 13174 13173  0  80   0 -  3094 -      pts/0    00:00:00 zsh
    0 R  1000 13407 13174  0  80   0 -  3955 -      pts/0    00:00:00 ps
    
    • F:程序标示;1-代表此子程序仅进行 fork 没事实际执行;4-代表程序权限为 root;
    • S:程序状态;R-运行中;S-休眠中;D-不可唤醒;T:停止状态;Z:僵尸状态;
    • UID:程序拥有者 ID;
    • PID:程序 ID;
    • PPID:父级程序 ID;
    • C:CPU 使用率;
    • PRI:执行优先级;
    • NI:
    • ADDR/SZ/WCHAN:和内存有关;
    • TTY:登陆者终端位置;
    • TIME:使用 CPU 时间;
    • CMD:使用什么指令或者程序;
    jay-liunx% ps -aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.2 122096  9360 ?        Ss   7月14   0:08 /sbin/init
    root         2  0.0  0.0      0     0 ?        S    7月14   0:00 [kthreadd]
    root         3  0.0  0.0      0     0 ?        I<   7月14   0:00 [rcu_gp]
    root         4  0.0  0.0      0     0 ?        I<   7月14   0:00 [rcu_par_gp]
    root         6  0.0  0.0      0     0 ?        I<   7月14   0:00 [kworker/0:0H-kblockd]
    root         8  0.0  0.0      0     0 ?        I<   7月14   0:00 [mm_percpu_wq]
    root         9  0.0  0.0      0     0 ?        S    7月14   0:18 [ksoftirqd/0]
    
    • USER:程序使用者;
    • PID:程序 ID;
    • %CPU:CPU 使用率;
    • %MEM:内存使用率;
    • VSZ:使用的虚拟内存;
    • RSS:使用的固定内存;
    • TTY:登陆者终端位置;
    • STAT:程序状态(R/S/T/Z);
    • START:启动时间;
    • TIME:使用 CPU 运行时间;
    • COMMAND:使用什么指令;

    通过 top 可以查看实时程序的变化:

    我们一个一个看每个参数代表的含义:

    jay-liunx% top
    top - 19:11:27 up 9 days, 18:26,  2 users,  load average: 0.00, 0.00, 0.00
    Tasks: 242 total,   1 running, 241 sleeping,   0 stopped,   0 zombie
    %Cpu0  :  1.0 us,  1.0 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  3932772 total,  1228504 free,   747788 used,  1956480 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  2741112 avail Mem
    
      PID USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND
    13490 jay       20       16640   4064   3204 R   1.0   0.1   0:00.72 top
    13469 root      20                           I   0.7         0:00.42 [kworker/u8:2-events_power_efficient]
     8949 jay       20      630440 122824  76112 S   0.3   3.1  10:24.50 /opt/google/chrome/chrome
     8986 jay       20      404064  69612  40268 S   0.3   1.8  22:47.71 /opt/google/chrome/chrome
    
    • 第一行:当前时间, 开机时间, 登陆人数, 系统工作负载
    • 第二行:任务总数, 运行数量, 休眠数量, 停止数量, 僵尸数量
    • 第三行:CPU 使用状况
    • 第四行:内存使用状况
    • 第五行:交换区使用状况
    • 第六行:实时程序状况
      • PID:程序 ID;
      • USER:程序使用者;
      • PR:Priority 的简写,程序优先级;
      • NI:Nice 的简写
      • %CPU:CPU 使用率;
      • %MEM:内存使用率;
      • TIME+:使用 CPU 累加时间;
      • COMMAND:使用什么指令

    通过 nicerenice 设置程序执行优先级

    nice 的范围是 -20 到 19,我们可以通过设置 nice 来改变程序的 Priority:

    jay-liunx% ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 14875 14874  1  80   0 -  3095 -      pts/0    00:00:00 zsh
    0 R  1000 14880 14875  0  80   0 -  3955 -      pts/0    00:00:00 ps
    jay-liunx% nice -n 5 zs
    jay-liunx% ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 14875 14874  0  80   0 -  3095 -      pts/0    00:00:00 zsh
    0 S  1000 14888 14875  0  85   5 -  3103 -      pts/0    00:00:00 zsh
    0 R  1000 14889 14888  0  85   5 -  3955 -      pts/0    00:00:00 ps
    

    系统资源

    出了前面的系统 Job、程序外,还有一些系统资源我们要查看,例如:内存、网络、开机状况等等:

    • free:查看内存使用情况;
      • -b -t -s -c
    • uname:查看系统与核心相关信息;
      • -a -s -r -m -p -i
    • uptime:观察系统启动时间与工作负载;
    • netstat:查看网络信息;
      • -a -t -u -n -l -p
    • vmstat:查看系统资源变化。

    这部分比较简单,自己尝试并查阅资料就可以搞懂里面的内容了。

    SELiunx

    SELinux 是 “Security Enhanced Linux” 的缩写,是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。这里不详细说这个,平时去修改相关内容也比较少。

    〖坚持的一俢〗

    相关文章

      网友评论

        本文标题:【一俢哥的 Liunx 学习笔记】调兵遣将

        本文链接:https://www.haomeiwen.com/subject/uustrctx.html