Linux基础(二十)——程序管理与 SELinux 初探

程序管理与 SELinux 初探

  • 1. 程序和进程
  • 2.程序调用流程
  • 3. 一个bash中的多任务工作管理
  • 4.进程管理
    • 4.1 查询进程
    • 4.2 进程的执行顺序
  • 5.系统资源的观察
  • 6. /proc/* 代表的意义
  • 7.SELinux

1. 程序和进程

在这里插入图片描述
在这里插入图片描述

2.程序调用流程

程序与进程之间的关系:
在这里插入图片描述
从上图可以看出,程序在存储在磁盘中,程序会载入到内存,形成进程,进程就包括PID、权限参数等。

当我们登陆并执行 bash 时, 系统已经给我们一个 PID 了, 这个 PID 就是依据登陆者的 UID/GID ( /etc/passwd) 来的。我们用这个 bash 提供的接口去执行另一个指令, 例如 /usr/bin/passwd 或者是 touch 等等, 那些另外执行的指令也会被触发成为 PID, 呵呵! 那个后来执行指令才产生的 PID 就是“子程序”了, 而在我们原本的 bash 环境下, 就称为“父程序”了!

[fle@CentOS7 ~]$ ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  34633   2847  0  80   0 - 29256 do_wai pts/1    00:00:00 bash
0 R  1000  34683  34633  0  80   0 - 38331 -      pts/1    00:00:00 ps
[fle@CentOS7 ~]$ bash
[fle@CentOS7 ~]$ ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  34633   2847  0  80   0 - 29256 do_wai pts/1    00:00:00 bash
0 S  1000  34698  34633  0  80   0 - 29258 do_wai pts/1    00:00:00 bash
0 R  1000  34743  34698  0  80   0 - 38331 -      pts/1    00:00:00 ps

从上面可以看出,使用bash新建一个子程序之后,多出来了一个进程,其PID为34743,其PPID(也就是父程序的PID)为34698,而这个PID就是原本bash的PID。

其实子程序与父程序之间的关系还挺复杂的, 最大的复杂点在于程序互相之间的调用。 在Linux 的程序调用通常称为 fork-and-exec 的流程 [1]! 程序都会借由父程序以复制 ( fork)的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序, 最终就成为一个子程序的存在:
在这里插入图片描述

3. 一个bash中的多任务工作管理

在这里插入图片描述
我们在上一个小节有提到所谓的“父程序、 子程序”的关系, 那我们登陆 bash 之后, 就是取得一个名为 bash 的 PID 了, 而在这个环境下面所执行的其他指令, 就几乎都是所谓的子程序了。 那么, 在这个单一的 bash 接口下, 我可不可以进行多个工作啊? 当然可以啦。在一个bash中同时进行多个工作,需要用到工作管理(job control):
①将指令丢到背景中“执行”的 &

[root@CentOS7 ~]# rm -rf /tmp/*
[root@CentOS7 ~]# tar -zpcf /tmp/etc.tar.gz /etc &
[1] 35079
[root@CentOS7 ~]# tar: 从成员名中删除开头的“/”
^C
[1]+  完成                  tar -zpcf /tmp/etc.tar.gz /etc

执行tar -zpcf /tmp/etc.tar.gz /etc &后,这个进程就被放到了bash的背景中,其工作号码为1,PID为35079。此外, 使用&最大的好处是: 不怕被 [ctrl]+c 中断的啦!

另外,如果放到背景的进程有许多输出,为了避免后续工作不被这个进程打扰(屏幕不要一直有打印信息),可以将输出的内容定向到文件:tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
②将“目前”的工作丢到背景中“暂停”: [ctrl]-z;将背景工作拿到前景来处理: fg
这对vim编辑非常有用,比如你在进行文件编辑的时候,突然忘记了某些前面指令的结果,就可以暂停编辑,这样就不用保存退出再编辑:

[root@CentOS7 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  34984  34698  0  80   0 - 58642 do_wai pts/1    00:00:00 su
4 S     0  34990  34984  0  80   0 - 29279 do_wai pts/1    00:00:00 bash
0 R     0  35693  34990  3  80   0 - 38331 -      pts/1    00:00:00 ps
[root@CentOS7 ~]# touch /tmp/PIDfile && vim /tmp/PIDfile[1]+  已停止               vim /tmp/PIDfile
[root@CentOS7 ~]# jobs
[1]+  已停止               vim /tmp/PIDfile
[root@CentOS7 ~]# fg %1
vim /tmp/PIDfile
[root@CentOS7 ~]# 

在vim编辑界面按下ctrl+z就可以暂停,之后可以使用jobs查看后台的工作的编号,这里的编号是1,想要重新编辑的话就可以使用fg %编号来将背景的工作提到bash前景中。
③让工作在背景下的状态变成运行中: bg
在这里插入图片描述
④管理背景当中的工作: kill
如果想要将该工作直接移除呢? 或者是将该工作重新启动呢? 这个时候就得需要给予该工作一个讯号 ( signal) , 让他知道该怎么作才好啊! 此时, kill 这个指令就派上用场啦。
在这里插入图片描述
常用的 signal 您至少需要了解 1, 9, 15 这三个 signal 的意义才好。
在这里插入图片描述

[root@CentOS7 ~]# rm -rf /tmp/*
[root@CentOS7 ~]# touch /tmp/file && vim /tmp/file[1]+  已停止               vim /tmp/file
[root@CentOS7 ~]# ps -l | grep 'vim'
0 T     0  35817   9470  0  80   0 - 37449 do_sig pts/0    00:00:00 vim
[root@CentOS7 ~]# kill -9 35817
[root@CentOS7 ~]# ls -a /tmp/*
/tmp/file
[1]+  已杀死               vim /tmp/file
[root@CentOS7 ~]# ps -l | grep 'vim'
[root@CentOS7 ~]# 

在这里插入图片描述
Tips:进行工作管理的行为中, 其实每个工作都是目前bash 的子程序, 亦即彼此之间是有相关性的。 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 bash .

4.进程管理

4.1 查询进程

ps -l
仅观察这个bash的进程。

[root@CentOS7 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  35870  35820  0  80   0 - 58642 do_wai pts/1    00:00:00 su
4 S     0  35876  35870  0  80   0 - 29248 do_wai pts/1    00:00:00 bash
0 R     0  36023  35876  0  80   0 - 38331 -      pts/1    00:00:00 ps

在这里插入图片描述

ps aux
查看所有bash的进程。

[root@CentOS7 ~]# ps aux | head -n 5
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 191408  3100 ?        Ss   11月16   0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    11月16   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   11月16   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    11月16   0:03 [ksoftirqd/0]

在这里插入图片描述
pstree
以目录树的方式查看。
在这里插入图片描述

4.2 进程的执行顺序

如果所有的程序同时被唤醒, 那么 CPU 应该要先处理那个程序呢? 也就是说, 那个程序被执行的优先序比较高? 这就得要考虑到程序的优先执行序 ( Priority) 与 CPU 调度啰。在Linux中是通过进程的Priority 与 Nice 值来进行确定的,其中PRI( new) = PRI( old) + nice
在这里插入图片描述
上图中假设 pro1, pro2 是紧急的程序, pro3, pro4 是一般的程序。具高优先权的 pro1, pro2 可以被取用两次, 而较不重要的 pro3, pro4 则运行次数较少。 如此一来 pro1, pro2 就可以较快被完成啦! 要注意, 上图仅是示意图, 并非较优先者一定会被运行两次啦! 为了要达到上述的功能, 我们 Linux 给予程序一个所谓的“优先执行序 ( priority, PRI) ”, 这个PRI 值越低代表越优先的意思。 不过这个 PRI 值是由核心动态调整的, 使用者无法直接调整 PRI 值的。使用ps -l查询优先级:

[root@CentOS7 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  35870  35820  0  80   0 - 58642 do_wai pts/1    00:00:00 su
4 S     0  35876  35870  0  80   0 - 29248 do_wai pts/1    00:00:00 bash
0 R     0  37441  35876  0  80   0 - 38331 -      pts/1    00:00:00 ps

在这里插入图片描述

5.系统资源的观察

free
观察内存使用情况
在这里插入图片描述

[root@CentOS7 ~]# free -mtotal        used        free      shared  buff/cache   available
Mem:            972         500         114          17         356         309
Swap:          1023         405         618

从上面可以看出,系统当中有 972MB 左右的实体内存, 我的 swap 有 1GB 左右。
uname
查看系统与核心相关信息
在这里插入图片描述

[root@CentOS7 ~]# uname -a
Linux CentOS7 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  1. Linux
    表示正在运行的操作系统的名称。
  2. CentOS7
    系统主机名(Hostname),即当前机器的网络名称。这里是 CentOS7。
  3. 3.10.0-1160.el7.x86_64
    内核版本(Kernel Version):
    3.10.0:Linux 内核的主版本号、次版本号和修订版本号。
    1160:发行版内核的补丁号或构建号。
    el7:表示这是 Red Hat 系列(包括 CentOS 和 RHEL)发行版的内核,el7 表示是 CentOS/RHEL 7 系列。
    x86_64:表示内核的架构,这里是 64 位架构。
  4. #1
    表示这是该内核的第一个构建版本。
  5. SMP
    表示该内核支持对称多处理(Symmetric Multi-Processing),即支持多核处理器。
  6. Mon Oct 19 16:18:59 UTC 2020
    内核编译时间:
  7. x86_64
    CPU 的架构类型,这里是 64 位架构。
  8. x86_64 x86_64
    CPU 的硬件平台和运行平台,重复两次是正常的:
    第一部分:硬件架构。
    第二部分:内核使用的硬件平台。
  9. GNU/Linux
    表示操作系统的全名是 GNU/Linux,说明这是基于 GNU 工具链的 Linux 系统。

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

[root@CentOS7 ~]# uptime14:56:14 up 1 day, 23:47,  2 users,  load average: 0.00, 0.02, 0.05

netstat
比较常被用在网络的监控方面
在这里插入图片描述
dmesg
分析核心产生的讯息

[root@CentOS7 ~]# dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc v
ersion 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos
-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF
-8
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003fedffff] usable
[    0.000000] BIOS-e820: [mem 0x000000003fee0000-0x000000003fefefff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000003feff000-0x000000003fefffff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000003ff00000-0x000000003fffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.7 present.
[    0.000000] DMI: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS
--More--

Tips:对于输出非常多的命令,可以使用管线加more的方式实现翻页,这样就不会一次性全部输出

6. /proc/* 代表的意义

我们之前提到的所谓的程序都是在内存当中嘛! 而内存当中的数据又都是写入到/proc/* 这个目录下的, 所以啰, 我们当然可以直接观察 /proc 这个目录当中的文件。目前主机上面的各个程序的 PID 都是以目录的型态存在于 /proc 当中。 举例来说,我们开机所执行的第一支程序 systemd 他的 PID 是 1 , 这个 PID 的所有相关信息都写入在/proc/1/当中:

[root@CentOS7 ~]# ll /proc/1 | more
总用量 0
dr-xr-xr-x 2 root root 0 1118 15:06 attr
-rw-r--r-- 1 root root 0 1118 15:06 autogroup
-r-------- 1 root root 0 1118 15:06 auxv
-r--r--r-- 1 root root 0 1117 03:26 cgroup
--w------- 1 root root 0 1118 15:06 clear_refs
-r--r--r-- 1 root root 0 1117 03:26 cmdline
-rw-r--r-- 1 root root 0 1117 03:26 comm
-rw-r--r-- 1 root root 0 1118 15:06 coredump_filter
-r--r--r-- 1 root root 0 1118 15:06 cpuset
lrwxrwxrwx 1 root root 0 1118 15:06 cwd -> /
-r-------- 1 root root 0 1117 03:26 environ
lrwxrwxrwx 1 root root 0 1117 03:26 exe -> /usr/lib/systemd/systemd
dr-x------ 2 root root 0 1118 15:06 fd
dr-x------ 2 root root 0 1118 15:06 fdinfo
-rw-r--r-- 1 root root 0 1118 15:06 gid_map
-r-------- 1 root root 0 1118 15:06 io
-r--r--r-- 1 root root 0 1118 15:06 limits
-rw-r--r-- 1 root root 0 1117 03:26 loginuid
dr-x------ 2 root root 0 1118 15:06 map_files
-r--r--r-- 1 root root 0 1118 15:06 maps
-rw------- 1 root root 0 1118 15:06 mem
-r--r--r-- 1 root root 0 1116 15:09 mountinfo

比较有趣的其实是两个文件, 分别是:
在这里插入图片描述
下面是一些/proc目录下的文件及其含义:
在这里插入图片描述

7.SELinux

SELinux(Security-Enhanced Linux) 是一种基于强制访问控制(MAC, Mandatory Access Control)的安全机制,由美国国家安全局(NSA)最初开发,现已成为 Linux 操作系统中一项重要的安全子系统。它通过对系统中所有资源的访问权限进行细粒度的控制,提升了系统的整体安全性。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19482.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 路由写法及传参方式 !超详细

Vue Router 是 Vue.js 官方的路由管理器。它主要用于单页面应用程序&#xff08;SPA, Single Page Application&#xff09;中&#xff0c;帮助解决页面导航、组件复用等问题。 基本的使用 1.router配置文件代码 创建一个ts文件,用来写路由器 // 创建一个路由器,并暴露出去 …

MATLAB绘制正四面体、正六面体

MATLAB绘制正四面体、正六面体 clc;close all;clear all;warning off;% clear all rand(seed, 100); randn(seed, 100); format long g;% 正四面体&#xff08;Tetrahedron&#xff09; % 顶点坐标&#xff08;正四面体的顶点位于一个正方体的对角线上&#xff0c;并经过适当缩…

一文了解 inductive bias(归纳偏好)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 归纳偏好&#xff08;Inductive Bias&#xff09;是机器学习中的一个非常基础但又非常重要的概念。为了更好地理解它&#xff0c;我们先从 “归纳” 和 “偏好” 这两个词开始讲解。 什么是归纳&#x…

leetcode844:比较含退格的字符串

题干 题目分析 两个字符串要进行比较&#xff0c;#代表着回车&#xff0c;也就是删除之前的字符。 若按照遍历的惯例&#xff0c;选择从前到后遍历&#xff0c;但这样没法判断&#xff0c;因为#之前被删除的部分是不需要相同的。 因此考虑到#的含义&#xff0c;我们应该选择从…

【Python爬虫实战】从入门到精通:全面解析IP代理池的原理与实战应用

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、IP代理池 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;主要功能 &#xff08;三…

c++_day2

第一题&#xff1a; 继续为 mystring类编写以下方法&#xff1a; 1&#xff1a;析构函数&#xff0c;释放buf指向的堆空间 2&#xff1a;编写 append(const mystring r) 为当前字符串尾部,拼接新的字符串r 3&#xff1a;编写 isEqual(const mystring r) 判断当前字符串和 字符串…

机器学习基础06

目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项&#xff08;曼哈顿距离&#xff09; 2.3.2…

基于一种基于OCR图像识别技术的发票采集管理系统及方法

本发明涉及了一种基于OCR图像识别技术的发票采集管理系统及方法&#xff0c;该系统的发票信息采集单元采集发票图片信息数据&#xff0c;OCR图像识别单元基于OCR图像识别技术并结合人工智能深度学习算法对发票图片信息数据进行识别读取以获得OCR图像识别结果&#xff0c;发票信…

Windows注册表基础学习

修改注册表让cmd ascii输出有颜色 reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 如何打开注册表编辑器 运行regedit 按下"Winr"组合键&#xff0c;在打开的"运行"对话框中输入"regedit"&#xff0c;单击"确定"…

CarSim复制数据注意事项

更正&#xff0c;上图中提到的“数据集”应该是“数据类别”&#xff0c;可以理解为数据集的一个子集。

Spring:注解开发依赖注入

Spring为了使用注解简化开发&#xff0c;并没有提供构造函数注入、setter注入对应的注解&#xff0c;只提供了自动装配的注解实现。 直接上代码&#xff1a; 1&#xff0c;添加一个配置类SpringConfig Configuration ComponentScan("com.itheima") //PropertySourc…

springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【Linux】learning notes(2)

文章目录 1、快捷键2、专业名词2.1、驱动2.2、内核2.3、U-Boot2.4、Dynamic Library and Static Library2.5、SDK / NDK / UDK 3、BUG 前文链接&#xff1a; 【Linux】learning notes 1、快捷键 在文件夹里&#xff0c;ctrll&#xff0c;选定文件夹路径 Linux下的ctrl常用组合…

商业银行核心系统单元化改造的研究与思考

随着金融科技的快速发展&#xff0c;银行核心系统面临着更高的处理能力、扩展能力及业务连续性的要求与挑战。为应对这些挑战&#xff0c;许多银行开始考虑对其核心系统进行单元化改造。本文首先分析了传统银行核心系统存在的问题以及单元化改造的必要性&#xff0c;然后详细阐…

指针

内存和地址 内存 我们知道计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数据也会放回内存中&#xff0c;那我们电脑上的哪些内存空间如何高效的管理呢&#xff1f; 其实也是把内存划分为一个个的…

强大的正则表达式——Medium

由上一篇文章《Easy》中提到过的&#xff1a; 还是直接让AI写个python脚本生成难度2的正则表达式&#xff0c;但是生成的正则表达式无法成功获取到flag&#xff1a; 这里了解了一下相关知识&#xff0c;字符串形式的整数对常数求模是可以用有限状态机来实现的。对于二进制数字来…

科技改变工作方式:群晖NAS安装内网穿透实现个性化办公office文档分享(1)

文章目录 前言1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 前言 本文将详细介绍如何在群晖NAS上安装Synology Office和Synology Drive Server&#xff0c;并利用Cpolar内网穿透工具为本地文档配置固定的公网…

android:taskAffinity 对Activity退出时跳转的影响

android:taskAffinity 对Activity跳转的影响 概述taskAffinity 的工作机制taskAffinity对 Activity 跳转的影响一个实际的开发问题总结参考 概述 在 Android 开发中&#xff0c;任务栈&#xff08;Task&#xff09;是一个核心概念。它决定了应用程序的 Activity 如何相互交互以…

运算放大器的学习(三)增益带宽积

我们接着了解运放的相关指标参数&#xff0c;下面我们看下增益带宽积与压摆率. 增益带宽积:即电压增益&#xff08;Gain&#xff09;和带宽&#xff08;Bandwidth&#xff09;的乘积是一个常数&#xff0c;称为增益带宽积&#xff08;Gain Bandwidth Product&#xff09;. 增益…

ThinkPHP6门面(Facade)

门面 门面&#xff08;Facade&#xff09; 门面为容器中的&#xff08;动态&#xff09;类提供了一个静态调用接口&#xff0c;相比于传统的静态方法调用&#xff0c; 带来了更好的可测试性和扩展性&#xff0c;你可以为任何的非静态类库定义一个facade类。 系统已经为大部分…