1. Linux基础入门:第三天实战指南
刚接触Linux的新手往往会被命令行界面吓退,但只要你熬过最初的不适期,就会发现这个开源操作系统的强大之处。今天我们就来深入探讨Linux基础学习的第三天内容,这也是新手能否顺利过渡到中级用户的关键转折点。
Linux作为服务器领域的霸主操作系统,其稳定性、安全性和灵活性是其他系统难以企及的。根据2023年的统计,全球超过90%的云计算平台和75%的智能手机(基于Android系统)都在使用Linux内核。对于开发者、运维人员甚至普通用户来说,掌握Linux基础都是提升工作效率的必备技能。
在第三天学习中,我们将重点突破以下几个核心内容:文件权限管理、进程控制、软件包安装以及基础网络配置。这些知识点不仅是日常使用Linux的基础,也是后续学习更高级内容的基石。我会结合自己十多年的Linux使用经验,分享一些官方文档中不会提及的实用技巧和常见陷阱。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件权限深度解析
2.1 理解Linux权限模型
Linux的文件权限系统是其安全架构的核心。与Windows不同,Linux对每个文件都设置了严格的所有者、组和其他用户权限。使用ls -l命令查看文件时,你会看到类似-rwxr-xr--的权限字符串,这实际上由四部分组成:
- 第一个字符表示文件类型(
-为普通文件,d为目录) - 接下来三组
rwx分别代表所有者(owner)、所属组(group)和其他用户(others)的权限
权限的数字表示法(如755)是通过二进制转换得来的:
- r (读) = 4
- w (写) = 2
- x (执行) = 1
所以chmod 755 filename相当于:
- 所有者:4+2+1=7 (rwx)
- 组:4+0+1=5 (r-x)
- 其他用户:4+0+1=5 (r-x)
实际经验:修改系统关键文件权限时要特别小心。我曾见过新手把/etc/passwd改成777权限导致系统安全漏洞。建议关键系统文件保持644或600权限。
2.2 特殊权限位解析
除了基本的rwx权限,Linux还有三个特殊权限位:
-
SUID (Set User ID):以文件所有者身份执行
- 设置方法:
chmod u+s file或chmod 4755 file - 典型应用:/usr/bin/passwd
- 设置方法:
-
SGID (Set Group ID):以文件所属组身份执行
- 设置方法:
chmod g+s file或chmod 2755 file - 对目录特别有用:新建文件自动继承目录的组
- 设置方法:
-
Sticky Bit:只有文件所有者能删除/重命名
- 设置方法:
chmod +t dir或chmod 1777 dir - 典型应用:/tmp目录
- 设置方法:
code复制# 查看特殊权限的示例
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59976 Nov 24 2022 /usr/bin/passwd
2.3 ACL高级权限控制
当基础权限不能满足需求时,可以使用ACL(Access Control List)进行更精细的控制:
bash复制# 查看ACL
getfacl filename
# 设置ACL
setfacl -m u:username:rwx filename
setfacl -m g:groupname:rx filename
# 删除特定ACL条目
setfacl -x u:username filename
# 删除所有ACL条目
setfacl -b filename
避坑指南:ACL虽然强大,但过度使用会导致权限管理复杂化。建议只在确实需要超出传统权限模型的精细控制时才使用ACL。
3. 进程管理实战
3.1 进程监控基础
Linux提供了多种工具来监控和管理进程:
-
ps命令:查看当前进程快照bash复制ps aux # 查看所有用户的所有进程 ps -ef # 完整格式列表 ps -o pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head # 自定义输出并按CPU排序 -
top/htop:实时进程监控top是Linux自带的,htop需要额外安装但功能更强大- 常用快捷键:
M:按内存排序P:按CPU排序k:杀死进程u:筛选特定用户进程
-
glances:更全面的系统监控工具bash复制
pip install glances glances
3.2 进程控制技巧
-
后台运行与作业控制
bash复制command & # 后台运行 jobs # 查看后台作业 fg %1 # 将作业1调到前台 bg %2 # 继续在后台运行作业2 -
使用
nohup防止进程因退出终端而终止bash复制nohup command > output.log 2>&1 & -
使用
tmux或screen管理持久会话bash复制tmux new -s session_name # 断开连接 tmux attach -t session_name
经验分享:对于长期运行的服务,建议使用systemd或supervisor管理,而不是简单的nohup。这样可以获得更好的日志管理和自动重启功能。
3.3 信号处理与进程终止
Linux使用信号与进程通信,常用信号包括:
| 信号编号 | 信号名 | 说明 | 触发命令 |
|---|---|---|---|
| 1 | SIGHUP | 挂起 | kill -1 PID |
| 2 | SIGINT | 中断 (Ctrl+C) | kill -2 PID |
| 9 | SIGKILL | 强制终止 | kill -9 PID |
| 15 | SIGTERM | 优雅终止 (默认信号) | kill PID |
优雅终止进程的最佳实践:
bash复制# 先尝试优雅终止
kill PID
# 等待几秒后如果进程还在,再强制终止
kill -9 PID
4. 软件包管理系统
4.1 主流包管理工具比较
不同Linux发行版使用不同的包管理系统:
| 发行版家族 | 包管理工具 | 命令示例 | 特点 |
|---|---|---|---|
| Debian/Ubuntu | apt | apt install package |
依赖解决优秀 |
| RHEL/CentOS | yum/dnf | dnf install package |
企业级支持 |
| Arch | pacman | pacman -S package |
滚动更新 |
| OpenSUSE | zypper | zypper install package |
YaST集成 |
4.2 APT高级用法
-
更新软件源并升级系统
bash复制sudo apt update sudo apt upgrade sudo apt dist-upgrade # 处理更复杂的依赖关系 -
搜索软件包
bash复制
apt search keyword apt show package -
清理无用包
bash复制sudo apt autoremove # 删除不再需要的依赖 sudo apt clean # 清理下载的.deb文件 -
解决依赖问题
bash复制sudo apt --fix-broken install sudo dpkg --configure -a
4.3 编译安装软件
当软件没有现成包可用时,需要从源码编译安装:
bash复制# 典型编译安装流程
wget https://example.com/software.tar.gz
tar xzf software.tar.gz
cd software
./configure --prefix=/usr/local # 检查依赖并生成Makefile
make -j$(nproc) # 并行编译,使用所有CPU核心
sudo make install # 安装到系统
注意事项:编译安装的软件不会出现在包管理系统中,卸载时需要手动删除或使用
make uninstall(如果支持)。建议优先使用包管理系统安装软件。
5. 基础网络配置
5.1 网络接口管理
-
查看网络接口信息
bash复制ip addr show # 新版推荐 ifconfig # 传统命令,可能需安装net-tools -
临时启用/禁用接口
bash复制sudo ip link set eth0 up sudo ip link set eth0 down -
设置静态IP(以Netplan为例,Ubuntu 18.04+)
yaml复制# /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4]应用配置:
bash复制sudo netplan apply
5.2 网络诊断工具
-
连通性测试
bash复制ping example.com traceroute example.com # 显示路由路径 mtr example.com # 结合ping和traceroute -
端口检查
bash复制telnet example.com 80 # 测试TCP端口 nc -zv example.com 80 # 更专业的测试 -
网络连接查看
bash复制ss -tulnp # 查看监听端口和连接 netstat -tulnp # 传统方法
5.3 SSH安全配置
SSH是管理Linux服务器的首要工具,安全配置至关重要:
-
密钥认证设置
bash复制# 本地生成密钥对 ssh-keygen -t ed25519 -C "your_email@example.com" # 将公钥复制到服务器 ssh-copy-id user@server -
加固SSH服务端配置(/etc/ssh/sshd_config)
code复制Port 2222 # 修改默认端口 PermitRootLogin no # 禁止root直接登录 PasswordAuthentication no # 禁用密码认证 AllowUsers yourusername # 只允许特定用户 -
使用SSH配置文件简化连接(~/.ssh/config)
code复制Host myserver HostName server.example.com User username Port 2222 IdentityFile ~/.ssh/id_ed25519然后只需
ssh myserver即可连接
安全提示:修改SSH端口后,确保防火墙允许新端口。我遇到过管理员改了端口却忘记开防火墙,结果把自己锁在服务器外面的情况。
6. Shell脚本入门
6.1 基础脚本结构
一个标准的bash脚本应该以shebang开头:
bash复制#!/bin/bash
# 这是注释
echo "Hello, World!"
给脚本添加执行权限:
bash复制chmod +x script.sh
./script.sh
6.2 变量与参数
-
变量使用
bash复制name="Linux" echo "Hello, $name" # 输出:Hello, Linux -
位置参数
bash复制# script.sh arg1 arg2 echo "第一个参数: $1" echo "所有参数: $@" echo "参数个数: $#" -
特殊变量
bash复制echo "脚本名: $0" echo "进程ID: $$" echo "上条命令退出状态: $?"
6.3 流程控制
-
条件判断
bash复制if [ -f "/path/to/file" ]; then echo "文件存在" elif [ -d "/path/to/dir" ]; then echo "目录存在" else echo "都不存在" fi -
循环结构
bash复制# for循环 for i in {1..5}; do echo "数字: $i" done # while循环 count=1 while [ $count -le 5 ]; do echo "计数: $count" ((count++)) done -
函数定义
bash复制greet() { local name=$1 echo "Hello, $name" } greet "Linux用户"
6.4 实用脚本示例
-
备份脚本
bash复制#!/bin/bash BACKUP_DIR="/backups" DATE=$(date +%Y%m%d) tar -czf "$BACKUP_DIR/backup-$DATE.tar.gz" /path/to/backup # 删除7天前的备份 find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete -
系统监控脚本
bash复制#!/bin/bash LOG_FILE="/var/log/system-monitor.log" { echo "=== $(date) ===" echo "内存使用:" free -h echo "磁盘使用:" df -h echo "最耗CPU的进程:" ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 5 } >> "$LOG_FILE"
脚本调试技巧:在脚本开头加上
set -x可以开启调试模式,显示每条执行的命令及其参数。遇到问题时,这是最快速的排查方法。
7. 常见问题排查
7.1 磁盘空间问题
-
查找大文件
bash复制du -ah / | sort -rh | head -n 10 -
查找并删除日志文件
bash复制journalctl --vacuum-size=100M # 限制systemd日志大小 find /var/log -type f -name "*.log" -size +100M -exec ls -lh {} \; -
处理已删除但未释放空间的文件
bash复制lsof | grep deleted # 查找被删除但仍被进程占用的文件 # 然后重启相关进程或服务
7.2 性能问题排查
-
CPU负载高
bash复制top -c # 查看CPU使用情况 pidstat 1 # 监控进程CPU使用 perf top # 性能分析工具 -
内存不足
bash复制free -h # 查看内存使用 vmstat 1 # 监控虚拟内存 cat /proc/meminfo # 详细内存信息 -
IO瓶颈
bash复制iostat -x 1 # 磁盘IO统计 iotop # 类似top的IO监控
7.3 网络问题排查
-
检查网络配置
bash复制ip addr ip route cat /etc/resolv.conf -
测试DNS解析
bash复制
dig example.com nslookup example.com -
防火墙检查
bash复制sudo iptables -L -n -v # 查看iptables规则 sudo ufw status # Ubuntu防火墙状态
8. 学习资源推荐
8.1 在线文档与教程
-
官方文档:
-
交互式学习平台:
- Linux Journey
- OverTheWire Bandit(游戏化学习)
-
中文资源:
8.2 推荐书籍
- 《Linux命令行与shell脚本编程大全》
- 《鸟哥的Linux私房菜:基础学习篇》
- 《UNIX环境高级编程》(APUE)
- 《Linux系统编程》
8.3 进阶学习路径
-
获取认证:
- Linux Foundation Certified System Administrator (LFCS)
- Red Hat Certified System Administrator (RHCSA)
-
参与开源项目:
- 从报告bug开始
- 参与文档翻译
- 贡献小型补丁
-
搭建自己的实验环境:
- 使用VirtualBox或VMware创建虚拟机集群
- 尝试搭建LAMP/LEMP环境
- 配置自动化部署工具如Ansible
学习Linux最重要的是保持实践。我建议新手设置一个每日目标,比如每天学习并掌握1-2个命令及其常用选项。三个月后,你会惊讶于自己的进步。记住,每个Linux专家都是从ls和cd开始的。
