1. 文件管理基础操作
在Linux系统中,文件管理是最基础也是最重要的技能之一。与Windows系统不同,Linux采用树形目录结构,所有文件和设备都以文件的形式存在。理解这种设计哲学是掌握Linux文件管理的第一步。
1.1 文件系统结构解析
Linux文件系统遵循FHS(Filesystem Hierarchy Standard)标准,主要目录及其用途如下:
- /bin:存放系统基本命令二进制文件
- /etc:系统配置文件存放目录
- /home:普通用户的家目录
- /root:root用户的家目录
- /var:经常变化的文件,如日志
- /tmp:临时文件目录
- /usr:用户程序和相关文件
提示:使用
tree -L 1 /命令可以直观查看根目录下的结构,但需要先安装tree工具。
1.2 常用文件操作命令
文件操作的核心命令包括:
-
查看文件:
cat:显示文件全部内容less/more:分页查看文件head/tail:查看文件开头/结尾部分
-
文件操作:
cp:复制文件mv:移动或重命名文件rm:删除文件(谨慎使用)touch:创建空文件或更新文件时间戳
-
文件权限:
chmod:修改文件权限chown:修改文件所有者chgrp:修改文件所属组
实际操作示例:
bash复制# 创建并查看文件
touch test.txt
echo "Hello Linux" > test.txt
cat test.txt
# 复制并重命名文件
cp test.txt test_backup.txt
mv test_backup.txt backup/
# 设置权限:所有者可读写,组可读,其他无权限
chmod 640 test.txt
1.3 文件权限深度解析
Linux文件权限采用9位二进制表示,分为三组:所有者(owner)、组(group)和其他用户(other)。每组包含读(r)、写(w)、执行(x)三种权限。
权限的数字表示法:
- r=4
- w=2
- x=1
因此,常见的权限组合:
- 755:rwxr-xr-x
- 644:rw-r--r--
- 600:rw-------
特殊权限位:
- SUID(4):执行时以文件所有者身份运行
- SGID(2):执行时以文件所属组身份运行
- Sticky(1):目录下文件只有所有者能删除
设置特殊权限示例:
bash复制chmod u+s executable_file # 设置SUID
chmod g+s directory # 设置SGID
chmod +t /tmp # 设置Sticky位
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 用户管理实战
2.1 用户账户基础
Linux是多用户系统,每个用户都有唯一的UID(User ID)。用户信息主要存储在三个文件中:
- /etc/passwd:用户账户信息
- /etc/shadow:用户密码信息
- /etc/group:组信息
查看当前用户信息:
bash复制id # 显示当前用户UID、GID和所属组
whoami # 显示当前用户名
2.2 用户创建与管理
创建用户的基本命令是useradd,更友好的替代命令是adduser(某些发行版需要单独安装)。
创建用户完整流程:
bash复制sudo useradd -m -s /bin/bash newuser # -m创建家目录,-s指定shell
sudo passwd newuser # 设置密码
关键参数说明:
- -d:指定家目录路径
- -g:指定主组
- -G:指定附加组
- -e:设置账户过期日期
- -c:添加注释信息
用户修改命令usermod常用操作:
bash复制sudo usermod -aG sudo newuser # 将用户加入sudo组
sudo usermod -L newuser # 锁定账户
sudo usermod -U newuser # 解锁账户
删除用户:
bash复制sudo userdel -r newuser # -r同时删除家目录和邮件池
2.3 用户密码策略
安全密码策略配置文件/etc/login.defs和/etc/security/pwquality.conf。
设置密码过期策略:
bash复制sudo chage -l newuser # 查看密码过期信息
sudo chage -M 90 -m 7 -W 14 newuser # 设置90天过期,最短7天修改,提前14天警告
密码强度策略配置示例(/etc/security/pwquality.conf):
code复制minlen = 12
dcredit = -1 # 至少1位数字
ucredit = -1 # 至少1位大写字母
lcredit = -1 # 至少1位小写字母
ocredit = -1 # 至少1位特殊字符
3. 组管理详解
3.1 组的基本概念
Linux中组是用户的集合,主要用于权限管理。每个用户都有一个主组和多个附加组。
组信息存储在:
- /etc/group:组名称、GID和成员列表
- /etc/gshadow:组密码信息
查看组信息:
bash复制getent group # 显示所有组信息
groups username # 查看用户所属组
3.2 组操作命令
创建组:
bash复制sudo groupadd developers # 创建新组
sudo groupadd -g 1005 testers # 创建组并指定GID
修改组:
bash复制sudo groupmod -n devs developers # 重命名组
sudo groupmod -g 1006 devs # 修改GID
删除组:
bash复制sudo groupdel devs # 删除组
3.3 用户与组关联管理
添加用户到组:
bash复制sudo usermod -aG devs user1 # 将user1添加到devs组
sudo gpasswd -a user2 devs # 另一种添加方式
从组中移除用户:
bash复制sudo gpasswd -d user1 devs # 从devs组移除user1
设置组管理员:
bash复制sudo gpasswd -A user1 devs # 设置user1为devs组管理员
4. 综合应用与问题排查
4.1 权限管理最佳实践
- 最小权限原则:只授予必要的权限
- 合理使用组:通过组管理权限而非直接给用户
- 定期审计:检查
/etc/passwd、/etc/shadow和/etc/group文件
权限设置示例场景:
bash复制# 开发团队共享目录设置
sudo mkdir /project
sudo groupadd project_team
sudo chown :project_team /project
sudo chmod 2770 /project # 2表示SGID,新文件继承组
4.2 常见问题排查
-
用户无法登录:
- 检查
/etc/passwd中shell是否正确 - 检查
/etc/shadow中密码字段是否被锁定(!或*开头) - 查看
/var/log/auth.log获取登录失败信息
- 检查
-
权限拒绝错误:
bash复制# 检查文件权限 ls -l /path/to/file # 检查用户所属组 id username # 检查SELinux上下文 ls -Z /path/to/file -
组权限不生效:
- 确保用户已注销并重新登录以更新组信息
- 检查SGID位是否设置正确
- 确认文件创建时的umask设置
4.3 高级技巧
-
ACL(访问控制列表):
bash复制# 设置ACL setfacl -m u:user1:rwx /shared_dir setfacl -m g:group1:r-x /shared_dir # 查看ACL getfacl /shared_dir -
sudo权限精细控制:
编辑/etc/sudoers(使用visudo命令):code复制# 允许用户user1以root身份运行特定命令 user1 ALL=(root) /usr/bin/apt-get update, /usr/bin/apt-get upgrade # 允许组admin无需密码执行所有命令 %admin ALL=(ALL) NOPASSWD: ALL -
用户环境配置:
- 全局配置:/etc/profile、/etc/bash.bashrc
- 用户配置:~/.bash_profile、~/.bashrc、~/.profile
我在实际系统管理中总结的经验是:对于生产环境,一定要建立完善的用户权限审批流程,定期审查用户权限,避免权限泛滥。特别是在多人协作的项目中,通过合理设置组权限和ACL,可以大幅减少权限管理的工作量。
