1. Linux指令基础与高效操作
作为一名Linux系统管理员,我每天打交道最多的就是各种指令。很多人觉得Linux指令复杂难记,其实只要掌握核心逻辑,就能事半功倍。先来看几个最基础的生存指令:
ls:列出目录内容,搭配-l参数显示详细信息,-a显示隐藏文件cd:切换目录,cd ~快速回到用户主目录pwd:显示当前工作目录完整路径mkdir:创建目录,-p参数可自动创建父目录rm:删除文件,-r递归删除目录,-f强制删除不提示
危险警告:
rm -rf /是著名的"删库跑路"指令,绝对不要尝试!它会递归强制删除根目录下所有文件。
我习惯使用alias创建快捷指令,比如把ls -lha设为ll:
alias ll='ls -lha'这样每次输入ll就能看到带隐藏文件的详细列表。这个配置可以写入~/.bashrc文件永久生效。
1.1 文件操作进阶技巧
处理文本文件时,这几个指令组合能解决大部分问题:
# 查看文件内容 cat filename | less # 分页查看大文件 head -n 20 filename # 查看前20行 tail -f logfile # 实时追踪日志更新 # 文件搜索 grep "error" *.log # 在当前目录log文件中搜索error关键词 find /var/log -name "*.log" -mtime -7 # 查找/var/log下7天内修改过的log文件 # 文件处理 sed 's/foo/bar/g' file.txt # 替换文件中所有foo为bar awk '{print $1}' file.txt # 打印每行第一个字段1.2 系统监控与进程管理
当系统变慢时,这套组合拳能快速定位问题:
top # 动态查看系统资源占用 htop # 增强版top(需安装) free -h # 查看内存使用情况(人类可读格式) df -h # 查看磁盘空间 ps aux | grep nginx # 查找nginx相关进程 kill -9 1234 # 强制结束PID为1234的进程我特别喜欢watch指令,它能定期执行并刷新结果,比如watch -n 1 free -h每秒刷新一次内存情况,比反复手动执行方便多了。
2. Linux权限机制深度解析
Linux的权限系统是其安全基石,理解它才能避免"Permission denied"的困扰。每个文件都有三组权限:所有者(user)、所属组(group)和其他人(other),用ls -l看到的权限字符串如-rwxr-xr--可以拆解为:
- 第1位:文件类型(
-普通文件,d目录,l链接等) - 2-4位:所有者权限(rwx)
- 5-7位:所属组权限(r-x)
- 8-10位:其他人权限(r--)
权限对应的数字值:
- r (读) = 4
- w (写) = 2
- x (执行) = 1
所以chmod 755 filename表示:
- 所有者:4+2+1=7 (rwx)
- 所属组:4+1=5 (r-x)
- 其他人:4+1=5 (r-x)
2.1 特殊权限位
除了基本的rwx,还有三个特殊权限位:
SUID(Set User ID):以文件所有者身份执行
- 设置:
chmod u+s file - 典型应用:
/usr/bin/passwd允许普通用户修改自己的密码
- 设置:
SGID(Set Group ID):以文件所属组身份执行
- 设置:
chmod g+s file - 对目录设置时,新建文件自动继承目录的组
- 设置:
Sticky Bit:防止非所有者删除文件
- 设置:
chmod +t dir - 典型应用:
/tmp目录任何人都能创建文件,但只能删除自己的
- 设置:
查看这些特殊权限:
ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 59976 Nov 24 2022 /usr/bin/passwd注意所有者执行位是s而不是x,表示设置了SUID。
2.2 权限管理实战案例
场景1:团队协作目录设置
mkdir /shared chown :developers /shared # 设置组为developers chmod 2770 /shared # SGID+rwxrwx---这样任何在developers组的用户都能在/shared中创建文件,且新建文件自动属于developers组。
场景2:防止误删重要日志
chmod a-w /var/log/important.log # 所有人去掉写权限 sudo chattr +i /var/log/important.log # 设置不可修改属性(需root)3. 用户与组管理实操
3.1 用户账户管理
创建新用户并设置密码:
sudo useradd -m -s /bin/bash newuser # -m创建家目录,-s指定shell sudo passwd newuser # 设置密码查看用户信息:
id username # 显示用户UID、GID和所属组 finger username # 显示详细信息(需安装finger)3.2 组管理技巧
创建组并添加用户:
sudo groupadd devteam sudo usermod -aG devteam user1 # -aG追加到附加组 sudo gpasswd -a user2 devteam # 另一种添加方式查看组内用户:
getent group devteam临时切换组测试权限:
newgrp devteam # 启动新shell并切换主组4. 高级权限控制:ACL与SELinux
4.1 访问控制列表(ACL)
基本权限系统有时不够灵活,ACL提供了更精细的控制:
# 查看ACL getfacl /path/to/file # 设置ACL setfacl -m u:username:rwx /path/to/file # 给特定用户添加权限 setfacl -m g:groupname:rx /path/to/file # 给特定组添加权限 setfacl -x u:username /path/to/file # 删除特定用户的ACL条目实用案例:允许web用户读取日志但不影响其他权限
setfacl -m u:www-data:r-- /var/log/nginx/access.log4.2 SELinux基础
SELinux提供了强制访问控制,常见操作:
# 查看文件上下文 ls -Z /var/www/html # 修改上下文 chcon -t httpd_sys_content_t /path/to/file # 恢复默认上下文 restorecon -Rv /path/to/dir # 查看布尔值(开关策略) getsebool -a setsebool -P httpd_can_network_connect on遇到权限问题时,可以检查SELinux日志:
ausearch -m avc -ts recent # 查看最近的SELinux拒绝记录5. 常见权限问题排查
5.1 "Permission denied"诊断流程
确认当前用户:
whoami id检查文件权限:
ls -l /path/to/file检查父目录权限(需要x权限才能进入):
ls -ld /path/to/parent检查SELinux上下文:
ls -Z /path/to/file检查ACL设置:
getfacl /path/to/file
5.2 典型解决方案
问题1:脚本无法执行
chmod +x script.sh问题2:无法写入目录
chmod o+w /path/to/dir # 临时方案 chown user:group /path/to/dir # 更好的方案问题3:SELinux阻止访问
# 临时方案 setenforce 0 # 禁用SELinux(不推荐) # 永久方案 semanage fcontext -a -t httpd_sys_content_t "/path/to/dir(/.*)?" restorecon -Rv /path/to/dir6. 安全最佳实践
最小权限原则:只给必要的权限
- 服务账户应该有自己的用户和组
- 避免使用root运行应用程序
定期审计:
# 查找SUID/SGID文件 find / -perm /4000 -type f 2>/dev/null find / -perm /2000 -type f 2>/dev/null # 查找全局可写文件 find / -perm -2 -type f 2>/dev/null敏感文件保护:
chmod 600 /etc/ssh/ssh_host_rsa_key chattr +i /etc/passwd # 防止修改(谨慎使用)sudo精细控制:
# /etc/sudoers示例 User_Alias ADMINS = user1, user2 Cmnd_Alias NETWORKING = /sbin/ifconfig, /sbin/route ADMINS ALL=(ALL) ALL %developers ALL=(ALL) NETWORKING
在多年的Linux系统管理工作中,我发现权限问题导致的故障占比很高。掌握这些核心概念和工具后,不仅能快速解决问题,还能设计出更安全的系统架构。记住:好的权限管理就像给系统穿上合身的铠甲,既不能太松(不安全)也不能太紧(影响使用)。