一、命令行使用技巧

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,实现命令间的 “数据传递”,示例:

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

8、错误输出通过管道

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

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

9、输出复制

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

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' <lee
HELLO LINUX
/ETC/PAM.D/PASSWD
/ETC/PASSWD
[lee@localhost mnt]$ echo haha |  tr 'a-z' 'A-Z'
HAHA
[lee@localhost mnt]$ echo -e "haha\nhehe" |  tr 'a-z' 'A-Z'
HAHA
HEHE
[lee@localhost mnt]$  tr 'a-z' 'A-Z' <<EOF
> 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 种权限:
权限符号数值作用(文件)作用(目录)
r4读取文件内容查看目录内的文件列表
w2修改文件内容在目录内创建 / 删除 / 重命名文件
x1执行文件(如脚本)进入目录(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

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、进程信号

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

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

更多推荐