云原生高级前置复习

一、命令行使用技巧

1、什么是内核、什么是shell、什么是Linux、什么是开源

内核 :是操作系统的核心组件,负责管理硬件资源(如 CPU、内存、磁盘)、进程调度等底层工作,是系统与硬件交互的桥梁。
shell: 是用户与内核之间的交互界面(命令解释器),用户通过 shell 输入命令,由 shell 传递给内核执行并返回结果(常见的 shell 有 bash、zsh 等)。
Linux :是一种基于 UNIX 的开源操作系统,由内核、shell 及各类工具 / 应用组成,广泛用于服务器、嵌入式设备等场景。
开源:指软件的源代码公开,用户可自由获取、修改、分发,Linux 是开源软件的典型代表。

2、Linux中命令录入方式

直接在终端(Terminal)中输入命令后按回车执行,支持单行 / 多行(通过反斜杠\换行)输入。

3、命令行快捷键

常用如Ctrl+C终止进程、Ctrl+D退出当前 shell、Ctrl+L清屏等,用于提升操作效率。

4、命令行补齐 <TAB>

输入命令 / 路径的部分字符后按Tab键,可自动补全完整内容(连续按两次可显示所有匹配项)。

5、命令行中如何获得帮助 ---help man

用命令 --help查看命令的简要帮助信息;

用man 命令查看更详细的手册(按q退出手册)。

二、Linux下文件管理

1、touch 、mkdir 、rm 、cp 、mv、cat、head 、less、vim、 file 、wc、 ls

|--------|---------------------------------------------|
| 命令 | 作用 |
| touch | 创建空文件,或修改文件的时间戳 |
| mkdir | 创建新目录(加-p可创建多级目录) |
| rm | 删除文件 / 目录(加-r递归删除目录,-f强制删除) |
| cp | 复制文件 / 目录(加-r复制目录) |
| mv | 移动 / 重命名文件 / 目录 |
| cat | 查看文件内容(适合短文件) |
| head | 查看文件前 N 行(默认前 10 行,如head -5 文件名) |
| less | 分页查看长文件内容(按PageUp/PageDown翻页,q退出) |
| vim | 文本编辑器,可用于创建 / 编辑文件(需掌握基本操作:i插入、:wq保存退出) |
| file | 查看文件的类型(如文本、二进制、压缩包等) |
| wc | 统计文件的行数、单词数、字节数(如wc -l 文件名统计行数) |
| ls | 列出目录内容(加-l显示详细信息,-a显示隐藏文件) |

2、二级目录的作用

二级目录是指在主目录下再划分的子目录,核心作用是:

  • 分类管理文件,避免文件杂乱(如/home下按用户划分目录);
  • 实现权限隔离,不同目录可设置不同的访问权限;
  • 便于系统维护,标准化的二级目录(如 Linux 的/etc、/var)是系统规范的一部分。

3、文件寻址 相对路径 绝对路径

  • **绝对路径:**从根目录(/)开始的完整路径,如/home/user/doc.txt,定位唯一且明确;
  • **相对路径:**从当前所在目录开始的路径,如当前在/home,则user/doc.txt等价于上述绝对路径,更简洁但依赖当前位置。

4、文件批处理

* 、?、 [[:alpha:]] 、 [[:aigit:]] 、 [[:lower:]] 、[[:upper:]] 、 [[:alnum:]] 、 [[:punct:]] 、 [[:space:]]、 []、 {}

|-------------------------|--------------------------------------------|
| 通配符 | 作用 |
| * | 匹配任意长度的任意字符(如*.txt匹配所有 txt 文件) |
| ? | 匹配单个任意字符(如file?.txt匹配file1.txt) |
| [:alpha:] | 匹配单个字母(含大小写) |
| [:lower:]/``[:upper:] | 匹配单个小写 / 大写字母 |
| [:alnum:] | 匹配单个字母或数字 |
| [:punct:] | 匹配单个标点符号 |
| [] | 匹配括号内的任意一个字符(如[abc].txt匹配a.txt等) |
| {} | 匹配大括号内的任意一个字符串(如{a,b}c.txt匹配ac.txt、bc.txt) |
| [:digit:] | 匹配单个数字 |
| [:space:] | 匹配单个空白字符(空格、制表符等) |

实验:

#说明:建议开启两个shell,在一个shell中开启监控

root@localhost mnt\]# watch -n 1 ls -Rl #在另外一个shell中操作 \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr lee \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee \[root@localhost mnt\]# \[root@localhost mnt\]# rm -fr \* \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr ??? \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr ???? \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\*e \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee file \[root@localhost mnt\]# rm -fr le\*e \[root@localhost mnt\]# rm -fr \* \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:digit:\]\]e \[root@localhost mnt\]# touch le8e leAe le@e leae le\\ e lee \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# touch le66e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:digit:\]\]e \[root@localhost mnt\]# rm -fr le\[\[:digit:\]\]\[\[:digit:\]\]e \[root@localhost mnt\]# touch le66e leAe le@e leae le\\ e lee \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:digit:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:punct:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:punct:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# \[root@localhost mnt\]# rm -fr le\[\[:punct:\]\]\*e \[root@localhost mnt\]# rm -fr le\[\[:space:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:alpha:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:upper:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:lower:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:alnum:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\[:punct:\]\[:space:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[!\[:punct:\]\[:space:\]\]\*e \[root@localhost mnt\]# touch le6e leAe le@e leae le\\ e lee \[root@localhost mnt\]# rm -fr le\[\^\[:punct:\]\[:space:\]\]\*e

#复制/etc/中以.conf 结尾的文件到/mnt/conf.bak/中并加入.bak后缀

root@localhost mnt\]# find /etc -type f -name "\*.conf" -exec sh -c 'cp "$1" "/mnt/conf.bak/$(basename "$1").bak"' _ {} \\; \[root@localhost mnt\]# ls /etc \| awk '/\\.conf$/{system("cp -r /etc/"$0 " /mnt/conf.bak/"$0".bak")}'

三、Linux中的输入和输出

1、字符设备是啥?

字符设备是 Linux 中一类按 "字符流" 方式交互的硬件设备(属于设备文件的一种),特点是按顺序、逐个字符传输数据,无缓存或缓存极小,典型例子包括终端(/dev/tty)、键盘、串口等。

它是 Linux 输入输出的硬件基础之一,命令行的输入输出默认就是通过字符设备(终端)完成的。

2、输入和输出的基本原理

Linux 中进程的输入输出通过文件描述符(FD) 管理,默认有 3 个标准 FD:

  • 0(标准输入,stdin):默认对应键盘,是进程获取输入的来源;
  • 1(标准输出,stdout):默认对应终端屏幕,是进程正常输出的目标;
  • 2(标准错误输出,stderr):默认对应终端屏幕,是进程错误信息的输出目标。

进程的输入输出本质是对这些 FD 的读写操作。

3、输出重定向

将进程的输出(stdout/stderr)从默认终端,转向文件或其他目标,常用符号:

|-----|-----------------------------------|---------------------------------------|
| 符号 | 作用 | 示例 |
| > | 覆盖式重定向 stdout 到文件(文件不存在则创建,存在则清空) | ls > file.txt(将 ls 结果存到 file.txt) |
| 2> | 覆盖式重定向 stderr 到文件 | ls /error 2> err.log(错误信息存到 err.log) |

4、追加

在输出重定向的基础上,保留文件原有内容,将新输出追加到末尾,对应符号:

|-------|-------------------|-------------------------------|
| 符号 | 作用 | 示例 |
| >> | 追加式重定向 stdout 到文件 | echo "new line" >> file.txt |
| 2>> | 追加式重定向 stderr 到文件 | ls /error 2>> err.log |

5、输入重定向

将进程的输入(stdin)从默认键盘,转向文件或其他目标,常用符号:

|------|-------------------------------------|----------------------------------|
| 符号 | 作用 | 示例 |
| < | 将文件内容作为进程的输入 | cat < file.txt(等价于cat file.txt) |
| << | 此处文档(Here Document):指定结束符,将中间内容作为输入 | cat << EOF(输入内容,以 EOF 结束) |

6、多行录入

通常通过此处文档(<<) 实现,用于向进程传递多行输入,格式:

cat > file.txt << EOF

hello

linux

input/output

EOF

7、管道

用|符号将前一个命令的 stdout,作为后一个命令的 stdin,实现命令间的 "数据传递",示例:

bash 复制代码
ls -l | grep ".txt"  # 将ls的结果传递给grep,筛选出含.txt的行

8、错误输出通过管道

默认管道仅传递 stdout,若要传递 stderr,需先将 stderr 重定向到 stdout(2>&1),再通过管道传递,示例:

bash 复制代码
ls /error 2>&1 | grep "No such file"  # 将错误信息传递给grep筛选

9、输出复制

用tee命令实现 "输出同时保存到文件和终端",即复制 stdout,示例:

bash 复制代码
ls | tee file.txt  # 同时在终端显示ls结果,并将结果保存到file.txt

实验步骤:

1、建立实验环境

root@localhost mnt\]# chmod 777 /mnt/ \[root@localhost mnt\]# watch -n 1 cat \* 2、在另一个shell中 \[root@localhost mnt\]# useradd lee \[root@localhost mnt\]# su - lee \[lee@localhost \~\]$ 3、实验过程 \[lee@localhost \~\]$ find /etc/ -name passwd 2\> /mnt/lee /etc/pam.d/passwd /etc/passwd \[lee@localhost \~\]$ find /etc/ -name passwd \&\> /mnt/lee \[lee@localhost \~\]$ \> /mnt/lee \[lee@localhost \~\]$ \[lee@localhost \~\]$ echo hello linux \> lee \[lee@localhost \~\]$ echo hello linux \> lee\^C \[lee@localhost \~\]$ cd /mnt/ \[lee@localhost mnt\]$ echo hello linux \> lee \[lee@localhost mnt\]$ echo hello linux \> lee \[lee@localhost mnt\]$ find /etc/ -name passwd \>\> /mnt/lee find: '/etc/sudoers.d': 权限不够 find: '/etc/pki/rsyslog': 权限不够 find: '/etc/sssd': 权限不够 find: '/etc/nftables': 权限不够 find: '/etc/sos/cleaner': 权限不够 find: '/etc/ssh/sshd_config.d': 权限不够 find: '/etc/lvm/archive': 权限不够 find: '/etc/lvm/backup': 权限不够 find: '/etc/lvm/cache': 权限不够 find: '/etc/lvm/devices': 权限不够 find: '/etc/polkit-1/rules.d': 权限不够 find: '/etc/polkit-1/localauthority': 权限不够 find: '/etc/grub.d': 权限不够 find: '/etc/audit': 权限不够 find: '/etc/firewalld': 权限不够 \[lee@localhost mnt\]$ find /etc/ -name passwd \^C /mnt/lee \[lee@localhost mnt\]$ \[lee@localhost mnt\]$ tr '' tr: "" 后缺少操作数 当进行替换操作时必须给定两组字符串。 请尝试执行 "tr --help" 来获取更多信息。 \[lee@localhost mnt\]$ cat lee \| tr 'a-z' 'A-Z' HELLO LINUX /ETC/PAM.D/PASSWD /ETC/PASSWD \[lee@localhost mnt\]$ \[lee@localhost mnt\]$ tr 'a-z' 'A-Z' \ hehe \> haha \> xixi \> EOF HEHE HAHA XIXI \[lee@localhost mnt\]$ \[lee@localhost mnt\]$ echo haha \| tr 'a-z' 'A-Z' \^C \[lee@localhost mnt\]$ find /etc/ -name passwd \| wc -l find: '/etc/sudoers.d': 权限不够 find: '/etc/pki/rsyslog': 权限不够 find: '/etc/sssd': 权限不够 find: '/etc/nftables': 权限不够 find: '/etc/sos/cleaner': 权限不够 find: '/etc/ssh/sshd_config.d': 权限不够 find: '/etc/lvm/archive': 权限不够 find: '/etc/lvm/backup': 权限不够 find: '/etc/lvm/cache': 权限不够 find: '/etc/lvm/devices': 权限不够 find: '/etc/polkit-1/rules.d': 权限不够 find: '/etc/polkit-1/localauthority': 权限不够 find: '/etc/grub.d': 权限不够 find: '/etc/audit': 权限不够 find: '/etc/firewalld': 权限不够 2 \[lee@localhost mnt\]$ find /etc/ -name passwd 2\>\&1 \| wc -l 17 \[lee@localhost mnt\]$ find /etc/ -name passwd 2\>\&1 \| wc -l 17 \[lee@localhost mnt\]$ find /etc/ -name passwd 2\>\&1 \| tee file \| wc -l 17 \[lee@localhost mnt\]$ rm -fr /mnt/\* \[lee@localhost mnt\]$ find /etc/ -name passwd 2\>\&1 \| tee file \| wc -l \[lee@localhost mnt\]$ find /etc/ -name passwd 2\>\&1 \| tee file \| wc -l 17

四、用户管理

1、用户存在的意义(3A机制)

3A 机制是用户身份管理的核心逻辑:

  • Authentication(认证):验证用户身份(如密码验证);
  • Authorization(授权):确定用户可执行的操作(如权限控制);
  • Accounting(审计):记录用户的操作行为(如日志审计)。

用户的存在是为了通过 3A 机制实现系统的安全隔离与权责划分

2、用户涉及到的系统配置文件有哪些

/etc/passwd 存储用户的基本信息(用户名、UID、GID、家目录、登录 shell 等),所有用户可读

/etc/group 存储用户组的基本信息(组名、GID、组成员),所有用户可读

/etc/shadow 存储用户的密码(加密后)及密码策略(有效期等),仅 root 可读

/etc/skel/.* #用户配置文件模板,建立用户时会把次目录中的所有文件

复制到新建用户的家目录中

/var/spool/mail/username 存储用户的邮件内容

/home/username 用户的家目录,存放个人文件与配置

3、用户管理

|------------|--------------------------------------------------------------------------------------------|
| 命令 | 常用参数 & 作用 |
| userdel -r | 删除用户并同时删除其家目录(-r是递归删除家目录) |
| useradd | -u指定 UID;-g指定初始组;-G指定附加组;-M不创建家目录;-s指定登录 shell;-c添加用户注释;-d指定家目录 |
| usermod | 用于修改用户信息:-l改用户名;-g改初始组;-G改附加组;-aG追加附加组;-c/-d/-m/-s修改注释 / 家目录 / 移动家目录 / 登录 shell 等 |
| passwd | 管理用户密码:-S查看密码状态;-d删除密码;-e强制用户下次登录改密码;-x设置密码最大有效期;-n设置密码最小有效期;-w设置密码过期警告期;--stdin通过标准输入设置密码 |
| chage | 管理用户密码有效期:-d设置密码最后修改时间;-w设置警告天数;-m设置最小修改间隔;-M设置最大有效期;-E设置账户过期时间;-l列出密码策略 |

userdel -r

useradd -u -g -G -M -s -c -d

usermod -l -g -G -aG -c -d -md -s -U -L

passwd -S -d -e -x -n -w --stdin

chage -d -w -m -M -E -I

4、权力下放

|--------------|---------------------------------------------|
| 工具 / 文件 | 作用 |
| /etc/sudoers | 配置 sudo 权限的文件,不建议直接编辑(无语法检测,错误会导致 sudo 不可用) |
| visudo | 安全编辑/etc/sudoers的工具,会自动检测语法错误 |
| visudo | 普通用户执行该命令,临时以 root 身份运行command |

/etc/sudoers #不建议直接编写,因为没有语法检测

visudo

sudo command

五、Linux系统中的权限管理

1、权限读取

元数据?

文件属性种类?

元数据被记录在磁盘的什么位置

  • 元数据:文件的属性信息(如权限、大小、修改时间等),而非文件内容本身;
  • 文件属性种类:包括权限(r/w/x)、类型(文件 / 目录 / 链接等)、所有者 / 组等;
  • 元数据存储位置:元数据存储在磁盘的 **inode(索引节点)** 中,每个文件对应一个 inode。

2、更改文件所有人所有组

chown 更改文件的所有者(可同时改所属组),如chown user:group file

chgrp 仅更改文件的所属组,如chgrp group file

3、文件普通权限

  • 权限类型与数值:权限以 "所有者 - 所属组 - 其他用户" 为维度,每种身份对应 3 种权限:

|------|----|-----------|---------------------|
| 权限符号 | 数值 | 作用(文件) | 作用(目录) |
| r | 4 | 读取文件内容 | 查看目录内的文件列表 |
| w | 2 | 修改文件内容 | 在目录内创建 / 删除 / 重命名文件 |
| x | 1 | 执行文件(如脚本) | 进入目录(cd) |

文件权限的类型

  • 0

r 4

w 2

x 1

chmod 用于修改文件权限,支持符号法(如chmod u+r file)和数值法(如chmod 755 file)

4、默认权限

由umask(权限掩码)控制,新建文件 / 目录的默认权限为:

  • 目录默认权限:777 - umask;
  • 文件默认权限:666 - umask(文件默认无执行权限)。

执行umask命令可查看当前掩码,修改umask 022可调整默认权限。

umask

5、特殊权限

suid 让普通用户执行文件时,以文件所有者的身份运行(如/usr/bin/passwd)

sgid 让普通用户执行文件时,以文件所属组的身份运行;或目录内新建文件继承目录的 所属组

stickybit 目录权限,仅文件所有者或 root 可删除目录内的文件(如/tmp目录默认开启)

6、权限列表ACL

setfac -m -m d -x -b

getfac

|---------|------------------------------------------------------|
| 命令 | 常用参数&作用 |
| setfacl | -m添加 ACL 规则;-x删除 ACL 规则;-b清除所有 ACL 规则;-d设置默认 ACL(目录) |
| getfacl | 查看文件 / 目录的 ACL 规则 |

7、attr

-i 设置文件为不可修改(即使 root 也无法修改 / 删除,需用-i取消);

-a 设置文件为仅追加模式(只能向文件中添加内容,无法修改 / 删除原有内容)。

练习:用户管理及权限练习

1、[root@rhce ~]# groupadd -g 2000 shengcan

2、[root@rhce ~]# groupadd -g 2001 caiwu

3、[root@rhce ~]# groupadd -g 2002 jishu

4、[root@rhce ~]# useradd -u 2000 -g shengcan -G jishu,caiwu lee

5、[root@rhce ~]# useradd -r -s /sbin/nologin linux

6、[root@rhce ~]# useradd -G caiwu westos

7、[root@rhce ~]# useradd -u 0 -o tabadmin

8、[root@rhce ~]# echo "westos" | passwd --stdin lee

更改用户 lee 的密码 。

passwd:所有的身份验证令牌已经成功更新。

root@rhce \~\]# echo "westos" \| passwd --stdin linux 更改用户 linux 的密码 。 passwd:所有的身份验证令牌已经成功更新。 \[root@rhce \~\]# echo "westos" \| passwd --stdin westos \[root@rhce \~\]# echo "westos" \| passwd --stdin tabadmin 更改用户 tabadmin 的密码 。 passwd:所有的身份验证令牌已经成功更新。 \[root@rhce \~\]# passwd -e lee 正在终止用户 lee 的密码。 passwd: 操作成功 \[root@rhce \~\]# passwd -e linux 正在终止用户 linux 的密码。 passwd: 操作成功 \[root@rhce \~\]# passwd -e westos \[root@rhce \~\]# passwd -e tabadmin 正在终止用户 tabadmin 的密码。 passwd: 操作成功 \[root@rhce \~\]# chage -M 30 lee \[root@rhce \~\]# chage -M 30 linux \[root@rhce \~\]# chage -M 30 linux \[root@rhce \~\]# chage -M 30 westos \[root@rhce \~\]# chage -M 30 tabadmin ###查看用户组 cat /etc/group \| grep -E "shengcan\|caiwu\|jishu" ###查看用户属性 \[root@rhce \~\]# id lee;id linux;id westos; id tabadmin ###查看密码有效期 chage -l lee

bash 复制代码
mkdir -p /sc /cw /js /pub
chgrp shengchan /sc
chgrp caiwu /cw
chgrp jishu /js
chmod 3770 /sc  /js  /cw
chmod 3777 /pub/
ls -ld /sc /cw /js  /pub

六、进程管理

1、什么是进程?什么是线程?

  • 进程:是程序在操作系统中的一次运行实例,是系统资源(CPU、内存、文件句柄等)分配的基本单位。每个进程有独立的地址空间,进程间资源不共享。
  • 线程:是进程内的执行单元,是 CPU 调度的基本单位。线程共享所属进程的地址空间与资源,仅拥有独立的栈、程序计数器等少量资源,线程间切换开销远小于进程。

2、进程状态

|------|-----------|--------------------------------------------|
| 状态符号 | 状态名称 | 含义 |
| R | 运行态 / 就绪态 | 进程正在 CPU 上运行,或已准备好等待 CPU 调度 |
| S | 可中断睡眠态 | 进程因等待资源(如 I/O、信号)而暂停,可被信号唤醒 |
| D | 不可中断睡眠态 | 进程因等待硬件资源(如磁盘 I/O)而暂停,不能被信号唤醒,强行终止可能导致数据丢失 |
| T | 停止态 | 进程被信号(如Ctrl+Z)暂停,可通过信号恢复运行 |
| Z | 僵尸态 | 进程已终止,但父进程未回收其资源(如进程描述符),需回收父进程或重启系统清理 |
| X | 死亡态 | 进程已彻底终止,仅短暂存在,通常无法观测到 |

3、进程查看命令

|--------|----------------------------------------------------------------------------|
| 命令 | 作用与常用参数 |
| ps | 静态查看进程快照: - ps -ef:显示进程的 UID、PID、PPID 等详细信息; - ps aux:显示进程的 CPU、内存占用率等资源信息 |
| top | 动态实时查看进程资源占用(默认 1 秒刷新一次),支持交互操作(如P按 CPU 排序、M按内存排序、k终止进程) |
| pstree | 以树状结构显示进程间的父子关系,直观展示进程层级 |
| pgrep | 根据进程名、UID 等条件筛选进程 PID,如pgrep vim直接输出 vim 进程的 PID |
| pidof | 根据进程名获取其 PID,如pidof nginx输出所有 nginx 进程的 PID |

ps

pidof #快速查询进程号

root@localhost mnt\]# vim \& \[1\] 27942 \[root@localhost mnt\]# pidof vim 27942 \[1\]+ 已停止 vim pgrep root@localhost mnt\]# su - lee \[lee@localhost \~\]$ vim \& \[1\] 28012 \[lee@localhost \~\]$ vim \& \[2\] 28013 \[1\]+ 已停止 vim \[lee@localhost \~\]$ vim \^ \[2\]+ 已停止 vim \[lee@localhost \~\]$ vim \& \[3\] 28015 \[root@localhost \~\]# pgrep -lu lee 27979 bash 28012 vim 28013 vim 28015 vim top

4、进程前后台调用

root@localhost mnt\]# ping www.baidu.com PING www.a.shifen.com (183.2.172.177) 56(84) 比特的数据。 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=1 ttl=128 时间=45.9 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=2 ttl=128 时间=53.5 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=3 ttl=128 时间=48.6 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=4 ttl=128 时间=51.4 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=5 ttl=128 时间=48.9 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=6 ttl=128 时间=41.6 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=7 ttl=128 时间=44.7 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=8 ttl=128 时间=46.6 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=9 ttl=128 时间=44.7 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=10 ttl=128 时间=46.2 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=11 ttl=128 时间=46.8 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=12 ttl=128 时间=43.8 毫秒 \^Z #ctrl+z 标识把占用终端的进程打入后台停止 \[1\]+ 已停止 ping www.baidu.com \[root@localhost mnt\]# ps PID TTY TIME CMD 1732 pts/0 00:00:00 bash 28027 pts/0 00:00:00 ping 28028 pts/0 00:00:00 ps \[root@localhost mnt\]# jobs \[1\]+ 已停止 ping www.baidu.com root@localhost mnt\]# jobs \[1\]+ 已停止 ping www.baidu.com \[root@localhost mnt\]# fg 1 ping www.baidu.com 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=13 ttl=128 时间=45.2 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=14 ttl=128 时间=48.1 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=15 ttl=128 时间=61.4 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=16 ttl=128 时间=41.8 毫秒 \^Z \[1\]+ 已停止 ping www.baidu.com ost mnt\]# \[root@localhost mnt\]# bg 1 \[1\]+ ping www.baidu.com \& \[root@localhost mnt\]# 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=17 ttl=128 时间=38.6 毫秒 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=18 ttl=128 时间=38.2 毫秒 \[root@localhost mnt\]# 64 比特,来自 183.2.172.177 (183.2.172.177): icmp_seq=19 ttl=128 时间=37.3 毫秒 \[root@localhost mnt\]# \[root@localhost mnt\]# \[root@localhost mnt\]# \[root@localhost mnt\]# \[root@localhost mnt\]# \[root@localhost mnt\]# vim \&

5、进程优先级

进程优先级决定了 CPU 调度的优先程度,Linux 中通过nice 值和PRI(优先级) 管理:

  • nice 值:范围为-20(最高优先级)~ 19(最低优先级),默认值为 0;普通用户只能调高 nice 值(降低优先级),root 可调整所有范围。
  • PRI:由内核根据 nice 值计算得到的实际调度优先级,公式为PRI = PRI_old + (nice_new - nice_old)。
  • 调整命令:
    • nice -n 5 command:以 nice 值 5 启动进程;
    • renice 10 PID:将指定 PID 进程的 nice 值调整为 10。

6、进程信号

信号是操作系统向进程传递的事件通知,用于控制进程行为,常用信号及作用:

|------|---------|--------------------------------------------------|
| 信号编号 | 信号名 | 作用 |
| 1 | SIGHUP | 终端断开时通知进程,常用于让进程重新加载配置(如nginx -s reload本质是发送此信号) |
| 2 | SIGINT | 中断信号,对应Ctrl+C,用于终止进程 |
| 9 | SIGKILL | 强制终止信号,进程无法忽略,用于强制结束无响应进程 |
| 15 | SIGTERM | 终止信号,进程可捕获并优雅退出(默认终止信号) |
| 18 | SIGCONT | 恢复进程(对应 SIGSTOP 的暂停) |
| 19 | SIGSTOP | 暂停进程,进程无法忽略(对应Ctrl+Z) |

  • 发送信号命令:kill -信号编号 PID(如kill -9 1234强制终止 PID 为 1234 的进程)。

7、守护进程

守护进程是在后台长期运行的特殊进程,特点:

  • 脱离终端(无控制终端),不受终端关闭影响;
  • 通常以d为后缀命名(如sshd、crond);
  • 由系统启动时自动加载,负责提供系统服务(如网络服务、定时任务);
  • 可通过systemctl管理(如systemctl start sshd启动 sshd 守护进程)。
  • systemctl

练习:进程项目练习

1、vim有运行,请显示vim的pid

2、使用命令查找出系统中cpu使用量在前5的进程,只显示这些进程的pid

相关推荐
HIT_Weston2 小时前
94、【Ubuntu】【Hugo】搭建私人博客:面包屑(二)
linux·运维·ubuntu
hui2593032 小时前
RH134 第八章 管理存储堆栈
linux·运维·服务器
一个学Java小白2 小时前
TUI的王者——ncurses.md
linux·ui
雾岛听蓝3 小时前
Linux用户权限管理基础
linux
遇见火星3 小时前
Linux 命令篇:df、du、fdisk 磁盘管理
linux·运维·服务器·df·du·fdisk
凌~风3 小时前
013-计算机操作系统实验报告之Linux命令!
linux·计算机操作系统·实验报告
牛奶咖啡133 小时前
shell脚本编程(七)
linux·shell脚本编程·列表for循环·列表for循环的多种示例·for循环的break用法·for循环continue用法·c语言型for循环
南烟斋..4 小时前
Linux系统编程核心知识指南
linux·算法
森旺电子4 小时前
Linux指令快速记忆
linux·运维·服务器