Linux基础知识(三)
第一部分
1. 什么是文件系统权限?它是如何工作的?如何查看文件的权限?
2. 解释‘-rw-r--r--’这个字符串。
3. 使用什么命令可以更改文件和目录的权限?写出分别使用符号法和数值法将权限从 754 修改为
775 的命令。
4. 如何修改文件的所有者和所属组?
5. suid、sgid、sticky 这三个特殊权限对文件和目录有什么影响?
6. umask 在文件权限管理中有什么作用?解释 umask 0022 命令的作用。
1.权限控制用户/组对文件的读(r)、写(w)、执行(x)访问,包含三组权限:所有者(owner)、所属组(group)、其他用户(others)。
查看命令:
ls -l 文件名 # 查看详细权限(如 -rw-r--r--)
stat 文件名 # 显示权限数字格式(如 0644)
2.
文件类型(-为普通文件,d为目录)
rw- 所有者权限:可读、可写、不可执行
r-- 所属组权限:仅可读
r-- 其他用户权限:仅可读
对应数字权限:644(所有者=6,组=4,其他=4)
3.
• 符号法(基于当前权限修改):
chmod g+w,o+x 文件名 # 给组添加写权限,其他用户添加执行权限
• 数值法(直接设置绝对权限):
chmod 775 文件名 # 7(rwx) for所有者, 7(rwx) for组, 5(r-x) for其他
4.
chown 新所有者:新所属组 文件名 # 同时修改所有者和组
chown 新所有者 文件名 # 仅修改所有者
chgrp 新组名 文件名 # 仅修改所属组
示例:
sudo chown root:adm /var/log/syslog # 需root权限
5.
权限 符号 文件影响 目录影响
SUID s 执行时继承所有者权限(如/usr/bin/passwd) 无意义
SGID s 执行时继承组权限 目录内新建文件继承父目录组
Sticky t 无意义 仅文件所有者可删除文件(如/tmp)
设置方法:
chmod u+s 文件 # 设置SUID
chmod g+s 目录 # 设置SGID
chmod +t 目录 # 设置Sticky
umask作用
6.:
• 作用:控制新建文件的默认权限(反向掩码)。
• 计算规则:
• 文件权限 = 666 - umask
• 目录权限 = 777 - umask
• 示例:
umask 0022 # 默认值
touch 新文件 # 权限=644 (666-022)
mkdir 新目录 # 权限=755 (777-022)
第二部分
1. 如何理解 systemd 进程?
2. ps 和 top 有什么区别?
3. 解释 ps aux 和 ps -ef 这两个命令和参数的作用。
4. 进程状态有哪些?
5. 怎么理解作业 (Job) 和作业控制?
6. 说明 kill 命令中使用 9 和 15 信号量的区别。
1.
作为Linux系统的初始化系统(PID=1),是首个用户态进程,负责:
• 管理系统服务(替代SysVinit)
• 提供并行启动、依赖管理、日志收集(journald)
• 通过systemctl命令控制(如start/stop/enable服务)
关键特性:
• 使用.service单元文件定义服务
• 支持系统状态快照(systemctl snapshot)
• 通过cgroups跟踪和管理进程树
2.
命令 特点 适用场景
ps 静态快照(执行时刻的进程状态) 精确获取特定进程信息(如PID、CMD)
top 动态实时监控(默认3秒刷新) 系统资源占用分析(CPU/MEM排序)
示例:
ps -eo pid,cmd,%cpu --sort=-%cpu | head # 静态获取CPU占用Top5进程
top -b -n 1 > process_report.txt # 生成一次性资源报告
ps aux 与 ps -ef 解析
命令 参数意义 输出差异
ps aux a=所有用户进程,u=详细格式,x=包括无终端进程 显示USER、%CPU、%MEM等资源指标
ps -ef -e=所有进程,-f=完整格式 显示UID、PPID(父进程ID)、CSTIME等
典型输出:
ps aux 示例
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 169728 13004 ? Ss Jul24 0:15 /usr/lib/systemd/system
ps -ef 示例
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jul24 ? 00:00:15 /usr/lib/systemd/systemd
4.
进程状态(STAT字段)
状态码 含义 触发条件
R (Running) 运行中/可运行 正在CPU执行或就绪队列等待
S (Sleeping) 可中断休眠 等待事件(如I/O完成)
D (Uninterruptible) 不可中断休眠 内核态阻塞(常见于磁盘I/O)
Z (Zombie) 僵尸进程(已终止但未回收) 父进程未调用wait()
T (Stopped) 暂停状态(可由信号控制) 收到SIGSTOP/SIGTSTP信号
查看方法:
ps -eo pid,stat,cmd | grep -E 'D|Z' # 筛选危险状态进程
5.
概念区分:
• 作业:Shell中启动的进程组(如管道命令ls | wc -l是一个作业)
• 控制方法:
sleep 60 & # 后台运行([1] 为作业ID)
jobs # 查看当前作业列表
fg %1 # 将作业1调至前台
Ctrl+Z # 暂停当前前台作业(变为Stopped状态)
bg %1 # 让暂停的作业在后台继续运行
应用场景:
长时间任务(如编译)后台运行,避免阻塞终端
6.
kill -9 与 kill -15 区别
信号 名称 行为 使用建议
SIGTERM (15) 终止信号 允许进程清理资源后退出(默认信号) 优先使用,确保数据安全保存
SIGKILL (9) 强制终止 立即终止进程(内核直接回收资源) 进程无响应时的最后手段
操作示例:
kill -15 1234 # 优雅终止PID为1234的进程
kill -9 1234 # 强制杀死(可能导致数据损坏)
pkill -9 -f "pattern" # 按进程名模式强制终止
第三部分
1. 守护进程(Daemon)是什么?列举一些常见的守护进程。
2. 怎么理解 systemd.unit?列举一些常用的单元类型。
3. restart 和 reload 有什么区别?
4. systemctl enable 命令会在当前会话中启动服务吗?
5. systemctl mask 和 systemctl disable 有哪些不同?
1.
在后台持续运行的系统进程,不依赖于终端,通常以d结尾命名,负责提供系统级服务。
常见守护进程示例:
守护进程名称 功能描述
sshd 提供SSH远程连接服务
crond 定时任务调度
rsyslogd 系统日志收集
httpd/nginx Web服务器
dbus-daemon 进程间通信总线
技术特点:
• 父进程通常为systemd(PID=1)
• 通过&或fork()实现后台运行
• 日志记录到/var/log/或journalctl
2.
systemd.unit解析
核心概念:
systemd的配置单元文件,定义服务/设备/挂载点等资源的管理规则,存储在/usr/lib/systemd/system/和/etc/systemd/system/。
常用单元类型:
单元类型 文件后缀 作用
Service单元 .service 管理后台服务(如nginx.service)
Target单元 .target 系统运行目标(类似SysVinit运行级)
Mount单元 .mount 文件系统挂载点定义
Timer单元 .timer 替代cron的定时任务
Socket单元 .socket 按需激活服务的IPC套接字
查看所有单元:
systemctl list-unit-files --type=service
3.
操作 命令示例 行为差异 适用场景
restart systemctl restart nginx 先停止再启动服务(进程ID变化) 配置重大变更后
reload systemctl reload nginx 重新加载配置(进程不重启,保持连接) 动态更新配置(如日志轮替)
信号机制:
• restart发送SIGTERM→SIGKILL→新建进程
• reload发送SIGHUP(如nginx -s reload)
4.
不会立即启动服务,仅配置为下次系统启动时自动激活。
深层原理:
• 实际操作为创建符号链接:
ln -s /usr/lib/systemd/system/foo.service /etc/systemd/system/multi-user.target.wants/
• 需要立即运行需额外执行:
systemctl start foo.service
5.
操作 命令示例 效果差异 恢复方式
disable systemctl disable foo 移除开机自启,但允许手动启动 enable即可恢复
mask systemctl mask foo 禁止所有启动(包括手动),创建空文件链接 需先unmask再enable
关键文件差异:
disable示例(移除链接)
rm /etc/systemd/system/multi-user.target.wants/foo.service
mask示例(创建空链接)
ln -s /dev/null /etc/systemd/system/foo.service