1. 用户和用户组
常用命令:
useradd
:创建用户(-m
创建家目录,-s
指定默认 shell)。usermod
:修改用户属性(如-aG
将用户添加到附加组)。userdel
:删除用户(-r
同时删除家目录)。groupadd
:创建用户组。groups
:查看用户所属组。passwd
:修改用户密码。- 面试重点:
- 用户和用户组的配置文件:
/etc/passwd
、/etc/shadow
、/etc/group
。 - 如何实现用户权限隔离(通过用户组管理)。
- 如何查看当前用户:
whoami
或id
。
- 用户和用户组的配置文件:
- 案例:
- 创建一个用户
testuser
,并将其添加到developers
组:useradd -m testuser groupadd developers usermod -aG developers testuser
- 查看
testuser
的组信息:groups testuser
- 创建一个用户
2. 权限管理
常用命令:
-
chmod
:修改文件权限(如chmod 755 file
或chmod u+x file
)。 -
chown
:修改文件所有者(如chown user:group file
)。 -
chgrp
:修改文件所属组。 -
面试重点:
- 权限表示法:
rwx
(读、写、执行)及其数字表示(如755
)。 - 特殊权限:
SUID
、SGID
、Sticky Bit
的作用及设置方法。 - 如何递归修改目录及其子文件的权限:
chmod -R
。
- 权限表示法:
-
案例:
-
设置脚本为可执行、可读权限:
chmod +rx script.sh
这将为脚本文件添加可执行 (
x
) 和可读 (r
) 权限。 -
设置脚本为可执行、可写权限:
chmod +wx script.sh
这将为脚本文件添加可执行 (
x
) 和可写 (w
) 权限。 -
设置脚本为可执行、可读、可写权限:
chmod +rwx script.sh
这将为脚本文件添加可执行 (
x
)、可读 (r
) 和可写 (w
) 权限。 -
使用数字模式设置权限:
也可以使用数字模式来设置权限。每个权限对应一个数字:
读 (r
) = 4
写 (w
) = 2
执行 (x
) = 1
例如:
-
设置脚本为可读、可写、可执行权限:
chmod 777 script.sh
这里的
777
表示所有用户(所有者、组、其他用户)都具有读、写、执行权限。 -
设置脚本为可读、可执行权限:
chmod 755 script.sh
这里的
755
表示所有者具有读、写、执行权限,而组和其他用户只有读和执行权限。 -
设置脚本为可写、可执行权限:
chmod 733 script.sh
这里的
733
表示所有者具有读、写、执行权限,而组和其他用户只有写和执行权限。
-
3. 文件/字符查询
常用命令:
find
:查找文件(如find /path -name "*.log"
)。grep
:查找文件内容(如grep "keyword" file
)。awk
:文本处理工具(如awk '{print $1}' file
)。sed
:流编辑器(如sed 's/old/new/g' file
)。locate
:快速查找文件(需先更新数据库:updatedb
)。- 面试重点:
grep
的高级用法:正则表达式匹配、递归查找(-r
)、忽略大小写(-i
)。find
的高级用法:按时间、大小、类型查找文件。awk
和sed
的常见场景:日志分析、文本替换。
- 案例:
- 查找
/var/log
目录下所有包含error
关键字的日志文件:grep -r "error" /var/log
- 查找
/home
目录下大于 100MB 的文件:find /home -type f -size +100M
- 查找
4. VI 编辑器
常用操作:
- 模式切换:命令模式(按
Esc
)、插入模式(按i
)、末行模式(按:
)。 - 保存与退出:
:w
(保存)、:q
(退出)、:wq
(保存并退出)、:q!
(强制退出)。 - 文本操作:复制(
yy
)、粘贴(p
)、删除(dd
)、撤销(u
)。 - 面试重点:
- 如何快速定位行号:
:set number
。 - 如何进行批量替换:
:%s/old/new/g
。 - 如何搜索关键字:
/keyword
。
- 如何快速定位行号:
- 案例:
- 在 VI 中替换文件中所有的
foo
为bar
::%s/foo/bar/g
- 在 VI 中显示行号并跳转到第 50 行:
:set number :50
- 在 VI 中替换文件中所有的
5. 进程管理
常用命令:
ps
:查看进程状态(如ps aux
)。top
:实时查看系统资源占用。kill
:终止进程(如kill -9 PID
)。pkill
:按名称终止进程(如pkill process_name
)。nohup
:后台运行进程(如nohup command &
)。- 面试重点:
- 如何查看进程的 CPU 和内存占用:
ps aux
或top
。 - 如何查找某个进程的 PID:
ps aux | grep process_name
。 - 如何优雅地终止进程:
kill -15 PID
(发送 SIGTERM 信号)。
- 如何查看进程的 CPU 和内存占用:
- 案例:
- 查找并终止名为
nginx
的进程:pkill nginx
- 查看占用 CPU 最高的进程:
top -o %CPU
- 查找并终止名为
6. Shell 编程
常用知识点:
- 变量定义与使用:
var=value
、echo $var
。 - 条件判断:
if [ condition ]; then ... fi
。 - 循环:
for
、while
。 - 函数定义:
function_name() { ... }
。 - 脚本参数:
$1
、$2
表示第 1、2 个参数,$#
表示参数个数。 - 面试重点:
- 如何编写一个简单的 Shell 脚本并执行。
- 如何处理脚本中的错误:
set -e
(遇到错误立即退出)。 - 如何调试 Shell 脚本:
bash -x script.sh
。 - 常见的 Shell 脚本应用场景:日志清理、定时任务、自动化部署。
- 案例:
-
编写一个脚本,统计日志文件中错误出现的次数:
#!/bin/bash logfile=$1 error_count=$(grep -c "ERROR" $logfile) echo "Error count: $error_count"
脚本解析:
-
#!/bin/bash
指定使用 Bash 作为解释器。 -
logfile=$1
将脚本的第一个参数(即用户传入的日志文件名)赋值给变量logfile
。
例如:运行脚本时输入./script.sh /var/log/syslog
,则$1
就是/var/log/syslog
。 -
error_count=$(grep -c "ERROR" $logfile)
- 使用
grep
命令在日志文件中查找包含"ERROR"
的行。 -c
选项表示统计匹配行的数量。- 将统计结果赋值给变量
error_count
。
- 使用
-
echo "Error count: $error_count"
输出错误次数的统计结果。
示例运行:
假设日志文件
/var/log/syslog
中有 5 行包含"ERROR"
,运行脚本:./script.sh /var/log/syslog
输出:
Error count: 5
-
-
编写一个脚本,备份指定目录并压缩:
#!/bin/bash backup_dir=$1 tar -czf backup_$(date +%Y%m%d).tar.gz $backup_dir echo "Backup completed!"
脚本解析:
-
#!/bin/bash
指定使用 Bash 作为解释器。 -
backup_dir=$1
将脚本的第一个参数(即用户传入的目录路径)赋值给变量backup_dir
。
例如:运行脚本时输入./backup.sh /home/user/documents
,则$1
就是/home/user/documents
。 -
tar -czf backup_$(date +%Y%m%d).tar.gz $backup_dir
- 使用
tar
命令对目录进行压缩备份。 -c
:创建新的归档文件。-z
:使用 gzip 压缩。-f
:指定输出的文件名。backup_$(date +%Y%m%d).tar.gz
:生成的文件名,包含当前日期(格式为YYYYMMDD
)。$backup_dir
:要备份的目录。
- 使用
-
echo "Backup completed!"
输出备份完成的提示信息。
示例运行:
假设要备份
/home/user/documents
目录,运行脚本:./backup.sh /home/user/documents
输出:
Backup completed!
同时会在当前目录生成一个类似
backup_20231025.tar.gz
的压缩文件。 -
-