Linux的程序管理

在 Linux 系统当中:“触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置。

不同的 使用者身份执行这个 program 时,系统给予的权限也都不相同。

因为每个程序都有一个 PID ,那某个程序的父程序该如何判断?就通过 Parent PID (PPID) 来判断即可。

一、工作管理 (job control)

直接将指令丢到背景中“执行”的 &

将“目前”的工作丢到背景中“暂停”:[ctrl]-z

 

 

 观察目前的背景工作状态: jobs

 将背景工作拿到前景来处理:fg

 让工作在背景下的状态变成运行中: bg

管理背景当中的工作: kill

语法格式:kill -signal %jobnumber

                  kill -l

选项与参数:

-l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?

signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知:

        -1 :重新读取一次参数的配置文件 (类似 reload);

        -2 :代表与由键盘输入 [ctrl]-c 同样的动作;

        -9 :立刻强制删除一个工作;

        -15:以正常的程序方式终止一项工作。与 -9 是不一样的。

 

nohup 可以让你在离线或登出系统后,还能够让工作继续进行

 二、程序管理

 1、程序的观察

  • ps :将某个时间点的程序运行情况撷取下来

语法格式:ps aux <==观察系统所有的程序数据

                  ps -lA <==也是能够观察所有系统的数据

                  ps axjf <==连同部分程序树状态

选项与参数:

-A :所有的 process 均显示出来,与 -e 具有同样的效用;

-a :不与 terminal 有关的所有 process ;

-u :有效使用者 (effective user) 相关的 process ;

x :通常与 a 这个参数一起使用,可列出较完整信息。

输出格式规划:

l :较长、较详细的将该 PID 的的信息列出;

j :工作的格式 (jobs format)

-f :做一个更为完整的输出。

仅观察自己的 bash 相关程序: ps -l

F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:

        若为 4 表示此程序的权限为 root ;

        若为 1 则表示此子程序仅进行复制(fork)而没有实际执行(exec)。

S:代表这个程序的状态 (STAT),主要的状态有:

        R (Running):该程序正在运行中;

        S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。

        D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)

        T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;

        Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。

UID/PID/PPID:代表“此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码”

C:代表 CPU 使用率,单位为百分比;

PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所执行的优先顺序,数值越小代表该程序越快被 CPU 执行。详细的 PRI 与 NI 将在下一小节说明。

ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪 个部分,如果是个 running 的程序,一般就会显示“ - ” / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。

TTY:登陆者的终端机位置,若为远端登陆则使用动态终端接口 (pts/n);

TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时 间;

CMD:就是 command 的缩写,造成此程序的触发程序之指令为何。

语法格式:top [-d 数字] | top [-bnp]

选项与参数:

-d :后面可以接秒数,就是整个程序画面更新的秒数。默认是 5 秒;

-b :以批次的方式执行 top ,还有更多的参数可以使用喔! 通常会搭配数据流重导向来将批次的结果输出成为文件。

-n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。

-p :指定某些个 PID 来进行观察监测而已。

在 top 执行过程当中可以使用的按键指令:

        ? :显示在 top 当中可以输入的按键指令;

        P :以 CPU 的使用资源排序显示;

        M :以 Memory 的使用资源排序显示;

        N :以 PID 来排序喔!

        T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。

        k :给予某个 PID 一个讯号 (signal)

        r :给予某个 PID 重新制订一个 nice 值。

        q :离开 top 软件的按键。

  •  pstree

语法格式:pstree [-A|U] [-up]

选项与参数:

-A :各程序树之间的连接以 ASCII 字符来连接;

-U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;

-p :并同时列出每个 process 的 PID;

-u :并同时列出每个 process 的所属帐号名称。

eg1:列出目前系统上面所有的程序树的相关性:

 eg2:承上题,同时秀出 PID 与 users

2、程序的管理

程序是的互相管理其实是通过给予该程序一个讯号 (signal) 去告知该程序你想要让她作什么。

常见的讯号(signal)有:

代号名称内容
1SIGHUP启动被终止的程序,可让该 PID 重新读取自己的配置文件,类似重新启动.
2SIGINT相当于用键盘输入 [ctrl]-c 来中断一个程序的进行
9SIGKILL代表强制中断一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会有“半产品”产生,类似 vim会有 .filename.swp 保留下来。
15SIGTERM以正常的结束程序来终止该程序。由于是正常的终止, 所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的。
19SIGSTOP相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行
  • kill -signal PID

eg:以 ps 找出 rsyslogd 这个程序的 PID 后,再使用 kill 传送讯息,使得 rsyslogd 可以重 新读取配置文件。

  •  killall -signal 指令名称

语法格式:killall [-iIe] [command name]

选项与参数:

-i :interactive 的意思,互动式的,若需要删除时,会出现提示字符给使用者;

-e :exact 的意思,表示“后面接的 command name 要一致”,但整个完整的指令不能超过 15 个字符。

-I :指令名称(可能含参数)忽略大小写。

eg1:给予 rsyslogd 这个指令启动的 PID 一个 SIGHUP 的讯号

3、程序的执行顺序 

  • Priority 与 Nice 值

Linux 给予程序一个所谓的“优先执行顺序 (priority, PRI)”, 这个 PRI 值越低代表越优先的意思。不过这个 PRI 值是由核心动态调 整的, 使用者无法直接调整 PRI 值的。

 由于 PRI 是核心动态调整的,我们使用者也无权去干涉 PRI !那如果你想要调整程序的优先 执行序时,就得要通过 Nice 值了。Nice 值就是上表的 NI,一般来说, PRI 与 NI 的相关 性如下:

PRI(new) = PRI(old) + nice

虽然 nice 值是可以影响 PRI ,不过, 最终的 PRI 仍是要经过系统分析后才会决定的。另外, nice 值是有正负的喔,而既然 PRI 越小越早被执行, 所以,当 nice 值为负值时,那么该程序就会降低 PRI 值,亦即会变的较优先被处理。此外,你必须要留意到:

  • nice 值可调整的范围为 -20 ~ 19 ;
  • root 可随意调整自己或他人程序的 Nice 值,且范围为 -20 ~ 19 ;
  • 一般使用者仅可调整自己程序的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占系统资 源);
  • 一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5;

如何给予 某个程序 nice 值呢?有两种方式,分别是:

  1. 一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
  2. 调整某个已经存在的 PID 的 nice 值:用 renice 指令。
  • nice :新执行的指令即给予新的 nice 值

语法格式:nice [-n 数字] command

选项与参数:

-n :后面接一个数值,数值的范围 -20 ~ 19。

  •  renice :已存在程序的 nice 重新调整

语法格式:renice [number] PID

选项与参数: PID :某个程序的 ID !

eg1:找出自己的 bash PID ,并将该 PID 的 nice 调整到 -5

 整个 nice 值是可以在父程序 --> 子程序 之间传递的。

4、观察系统资源

  • free :观察内存使用情况

语法格式:free [-b|-k|-m|-g|-h] [-t] [-s N -c N]

选项与参数:

-b :直接输入 free 时,显示的单位是 KBytes,我们可以使用 b(Bytes), m(MBytes) k(KBytes), 及 g(GBytes) 来显示单位喔!也可以直接让系统自己指定单位 (-h)

-t :在输出的最终结果,显示实体内存与 swap 的总量。

-s :可以让系统每几秒钟输出一次,不间断的一直输出的意思!对于系统观察挺有效!

-c :与 -s 同时处理,让 free 列出几次的意思。

eg1:显示目前系统的内存容量

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

语法格式:uname [-asrmpi]

选项与参数:

-a :所有系统相关的信息,包括下面的数据都会被列出来;

-s :系统核心名称

-r :核心的版本

-m :本系统的硬件名称,例如 i686 或 x86_64 等;

-p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!

-i :硬件的平台 (ix86)

eg1:输出系统的基本信息

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

  • netstat :追踪网络或插槽档 

语法格式:netstat -[atunlp]

选项与参数:

-a :将目前系统上所有的连线、监听、Socket 数据都列出来

-t :列出 tcp 网络封包的数据

-u :列出 udp 网络封包的数据

-n :不以程序的服务名称,以埠号 (port number) 来显示;

-l :列出目前正在网络监听 (listen) 的服务;

-p :列出该网络服务的程序 PID

eg1:列出目前系统已经创建的网络连线与 unix socket 状态

 eg2:找出目前系统上已在监听的网络连线及其 PID

  •  dmesg :分析核心产生的讯息

eg1:搜寻开机的时候,硬盘的相关信息为何?

  •  vmstat :侦测系统资源变化

语法格式:vmstat [-a] [延迟 [总计侦测次数]] <==CPU/内存等信息

                  vmstat [-fs] <==内存相关

                  vmstat [-S 单位] <==设置显示数据的单位

                  vmstat [-d] <==与磁盘有关

                  vmstat [-p 分区] <==与磁盘有关

选项与参数:

-a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息;

-f :开机到目前为止,系统复制 (fork) 的程序数;

-s :将一些事件 (开机至目前为止) 导致的内存变化情况列表说明;

-S :后面可以接单位,让显示的数据有单位。例如 K/M 取代 Bytes 的容量;

-d :列出磁盘的读写总量统计表

-p :后面列出分区,可显示该分区的读写总量统计表

eg1:统计目前主机 CPU 状态,每秒一次,共计三次!

 eg2:系统上面所有的磁盘的读写状态

5、查询已打开文件或已执行程序打开之文件。

  • fuser:借由文件(或文件系统)找出正在使用该文件的程序

语法格式:fuser [-umv] [-k [i] [-signal]] file/dir

选项与参数:

-u :除了程序的 PID 之外,同时列出该程序的拥有者;

-m :后面接的那个文件名会主动的上提到该文件系统的最顶层,对 umount 不成功很有效!

-v :可以列出每个文件与程序还有指令的完整相关性!

-k :找出使用该文件/目录的 PID ,并试图以 SIGKILL 这个讯号给予该 PID;

-i :必须与 -k 配合,在删除 PID 之前会先询问使用者意愿!

-signal:例如 -1 -15 等等,若不加的话,默认是 SIGKILL (-9) !

eg1:找出目前所在目录的使用 PID/所属帐号/权限为何?

eg2::找到所有使用到 /home 这个文件系统的程序!

eg3:找到 /run 下面属于 FIFO 类型的文件,并且找出存取该文件的程序

  • lsof :列出被程序所打开的文件文件名。

语法格式:lsof [-aUu] [+d]

选项与参数:

-a :多项数据需要“同时成立”才显示出结果时!

-U :仅列出 Unix like 系统的 socket 文件类型;

-u :后面接 username,列出该使用者相关程序所打开的文件;

+d :后面接目录,亦即找出某个目录下面已经被打开的文件!

eg1:请列出目前系统上面所有的被启动的周边设备

eg2:属于 root 的 bash 这支程序所打开的文件

  • pidof :找出某支正在执行的程序的 PID

语法格式:pidof [-sx] program_name

选项与参数:

-s :仅列出一个 PID 而不列出所有的 PID

-x :同时列出该 program name 可能的 PPID 那个程序的 PID

三、SELinux 核心模块

1、SELinux 三种模式的启动、关闭与观察

  • enforcing:强制模式,代表 SELinux 运行中,且已经正确的开始限制 domain/type 了;
  • permissive:宽容模式:代表 SELinux 运行中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
  • disabled:关闭,SELinux 并没有实际运行。

eg1:列出目前的 SELinux 使用哪个政策 (Policy)。

  • SELinux 的启动与关闭

让 SELinux 模式在 enforcing 与 permissive 之间切换的方法为:

语法格式:setenforce [0|1]

选项与参数:

0 :转成 permissive 宽容模式;

1 :转成 Enforcing 强制模式

eg1:将 SELinux 在 Enforcing 与 permissive 之间切换与观察

2、SELinux 政策内的规则管理。

  • SELinux 各个规则的布林值查询 getsebool

语法格式:getsebool [-a] [规则的名称]

选项与参数:

-a :列出目前系统上面的所有 SELinux 规则的布林值为打开或关闭值

eg1:查询本系统内所有的布林值设置状况

  • SELinux 各个规则规范的主体程序能够读取的文件 SELinux type 查询 seinfo, sesearch

安装好我们所需要的软件后,我们就可以来使用 seinfo, sesearch 等指令了

语法格式:seinfo [-Atrub]

选项与参数:

-A :列出 SELinux 的状态、规则布林值、身份识别、角色、类别等所有信息

-u :列出 SELinux 的所有身份识别 (user) 种类

-r :列出 SELinux 的所有角色 (role) 种类

-t :列出 SELinux 的所有类别 (type) 种类

-b :列出所有规则的种类 (布林值)

eg1:列出 SELinux 在此政策下的统计状态

语法格式:sesearch [-A] [-s 主体类别] [-t 目标类别] [-b 布林值]

选项与参数:

-A :列出后面数据中,允许“读取或放行”的相关数据

-t :后面还要接类别,例如 -t httpd_t

-b :后面还要接SELinux的规则,例如 -b httpd_enable_ftp_server

eg1:找出 crond_t 这个主体程序能够读取的文件 SELinux type

eg2:找出 crond_t 是否能够读取 /etc/cron.d/checktime 这个我们自订的配置文件

eg3:列出 httpd_enable_homedirs 这个规则当中,主体程序能够读取的文件 SELinux type。

  • 修改 SELinux 规则的布林值 setsebool

语法格式:setsebool [-P] “规则名称” [0|1]

选项与参数:

-P :直接将设置值写入配置文件,该设置数据未来会生效的!

eg1:查询 httpd_enable_homedirs 这个规则的状态,并且修改这个规则成为不同的布林值。

3、SELinux 安全本文的修改。

  • 使用 chcon 手动修改文件的 SELinux type

语法格式:chcon [-R] [-t type] [-u user] [-r role] 文件

                  chcon [-R] --reference=范例档 文件

选项与参数:

-R :连同该目录下的次目录也同时修改;

-t :后面接安全性本文的类型字段!例如 httpd_sys_content_t ;

-u :后面接身份识别,例如 system_u; (不重要)

-r :后面街角色,例如 system_r; (不重要)

-v :若有变化成功,请将变动的结果列出来

--reference=范例档:拿某个文件当范例来修改后续接的文件的类型!

eg1:查询一下 /etc/hosts 的 SELinux type,并将该类型套用到 /etc/cron.d/checktime 上

eg2:直接以 /etc/shadow SELinux type 套用到 /etc/cron.d/checktime 上!

  • 使用 restorecon 让文件恢复正确的 SELinux type

语法格式:restorecon [-Rv] 文件或目录

选项与参数:

-R :连同次目录一起修改;

-v :将过程显示到屏幕上

eg3:将 /etc/cron.d/ 下面的文件通通恢复成默认的 SELinux type!

eg4:重新启动 crond 看看有没有正确启动 checktime 啰

  • semanage 默认目录的安全性本文查询与修改

语法格式:semanage {login|user|port|interface|fcontext|translation} -l

                  semanage fcontext -{a|d|m} [-frst] file_spec

选项与参数:

fcontext :主要用在安全性本文方面的用途, -l 为查询的意思;

-a :增加的意思,你可以增加一些目录的默认安全性本文类型设置;

-m :修改的意思;

-d :删除的意思。

eg1:查询一下 /etc /etc/cron.d 的默认 SELinux type 为何?

4、一个网络服务案例及登录文件协助

  • setroubleshoot --> 错误讯息写入 /var/log/messages

  • 实例状况说明:通过 vsftpd 这个 FTP 服务器来存取系统上的文件

  • 匿名者无法下载的问题

这个例子在告诉你,要先从权限的角度来瞧一瞧,如果无法被读取,可能就是因为没有 r 或没有 rx!

  • 无法从主文件夹下载文件的问题分析与解决
  • 一般帐号用户从非正规目录上传/下载文件
  • 无法变更 FTP 连线端口问题分析与解决
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值