3847 个字词
19 分钟
Linux 学习笔记 2 —— 核心命令与系统管理
你可能觉得 Linux 命令枯燥,但想象一下:
- 你想批量重命名 1000 张照片,图形界面要点点点半小时,终端只要一行命令。
- 服务器出问题了,没有图形界面,你只能靠命令行救命。
- 如果你想自动化备份、部署、监控,那么Shell 脚本是运维的基石。
本章将告诉你 Linux 的核心命令和系统管理技巧,让你从“命令小白”变成“命令达人”。
2.1 文本处理:grep 和 less
2.1.1 🔍 grep:在茫茫文海中找针
grep 不只是搜索,它是你的“文本雷达”。
基础用法:
# 在 /etc/passwd 中找包含 "root" 的行
grep root /etc/passwd
# 忽略大小写搜索(-i)
grep -i error /var/log/syslog
# 反向匹配:找不包含 "bash" 的行(-v)
grep -v bash /etc/passwd
# 显示行号(-n)
grep -n "TODO" project.py正则表达式进阶:
# 找邮箱地址(扩展正则 -E 或 egrep)
egrep '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt
# 找以 "Error" 开头且以 "failed" 结尾的行
grep '^Error.*failed$' app.log
# 找包含数字的行
grep '[0-9]' data.txt2.1.2 📄 less:分页查看大文件的正确姿势
别再用 cat 看大文件了!less 让你从容浏览。
常用操作:
less /var/log/auth.log| 键盘快捷键 | 功能 |
空格/Page Down | 下一页 |
b/Page Up | 上一页 |
/keyword | 向前搜索(输完按回车) |
?keyword | 向后搜索 |
n | 下一个匹配项 |
N | 上一个匹配项 |
q | 退出 |
g | 跳到文件头 |
G | 跳到文件尾 |
h | 帮助手册 |
2.1.3 📊 sort, head, tail:数据整理组合拳
排序 (sort):
# 字母顺序排序
sort names.txt
# 数值排序(-n),否则 "10" 会排在 "2" 前面!
sort -n scores.txt
# 逆序(-r)
sort -r data.txt
# 去重后排序(-u)
sort -u duplicates.txt
# 按第2列排序(-k2)
sort -k2 students.txt取头尾 (head, tail):
# 前10行(默认)
head /etc/passwd
# 前5行
head -n 5 /etc/passwd
# 后10行(默认)
tail /var/log/syslog
# 后5行
tail -n 5 /var/log/syslog
# 从第100行开始到最后
tail -n +100 huge_file.txt
# 实时监控日志(-f),按 Ctrl+C 停止
tail -f /var/log/apache2/access.log2.2 文件查找:find vs locate
2.2.1 🔎 find:实时递归搜索(强大但慢)
find 是瑞士军刀,功能多到爆炸。
基础语法:
find [路径] [条件] [动作]常用示例:
# 在当前目录及子目录找所有 .log 文件
find . -name "*.log"
# 找大于100M的文件(-size +100M)
find /home -size +100M
# 找最近7天内修改过的文件(-mtime -7)
find . -mtime -7
# 找用户 john 的所有文件
find /home -user john
# 找可执行文件(-type f -executable)
find /usr/bin -type f -executable
# 找到后删除(小心!先不加 -delete 确认一下)
find ./temp -name "*.tmp" -delete
# 找到后执行命令(-exec)
find . -name "*.jpg" -exec mv {} ~/pictures/ \;2.2.2 🚀 locate:基于数据库的快速查找
locate 快如闪电,但数据可能不是最新的。
# 快速找含 "passwd" 的文件
locate passwd
# 只统计数量(-c)
locate -c nginx
# 忽略大小写(-i)
locate -i ReadMe
# 更新数据库(需要 sudo)
sudo updatedb2.3 环境变量与 PATH:让系统认识你的命令
2.3.1 🌍 什么是环境变量?
环境变量是 shell 的“全局设置”,比如 $HOME 指向你的家目录,$USER 是当前用户名。
查看与设置:
# 查看所有环境变量
env
# 或
printenv
# 查看单个变量
echo $HOME
echo $PATH
# 设置临时变量(仅当前 shell 有效)
MY_VAR="hello"
echo $MY_VAR
# 导出为环境变量(子进程也能看到)
export MY_VAR="hello"
bash # 启动新 shell
echo $MY_VAR # 仍能输出 "hello"2.3.2 🛣️ PATH:命令搜索路径
当你输入 ls,shell 怎么知道去哪找它?答案是 $PATH。
# 查看当前 PATH
echo $PATH
# 输出类似:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# 临时添加自定义目录到 PATH(优先查找)
export PATH=/my/scripts:$PATH
# 添加到末尾
export PATH=$PATH:/my/scripts
# 永久生效:加到 ~/.bashrc 或 ~/.profile
echo 'export PATH=/my/scripts:$PATH' >> ~/.bashrc
source ~/.bashrc # 立即生效2.4 权限管理:chmod, chown, umask
2.4.1 🔐 读懂 ls -l 输出
-rw-r--r-- 1 alice developers 2048 Mar 23 10:00 secret.txt
↑↑↑↑↑↑↑↑↑↑
│││││││││└─ 文件名
││││││││└─── 修改时间
│││││││└──── 文件大小
││││││└───── 所属组 (developers)
│││││└────── 所有者 (alice)
│││└───────── 其他人权限 (r--)
││└────────── 所属组权限 (r--)
│└─────────── 所有者权限 (rw-)
└──────────── 文件类型 (- = 普通文件, d = 目录, l = 链接)权限含义:
r(read) = 4w(write) = 2x(execute) = 1-= 无权限
对目录而言,x 表示“可进入”。
2.4.2 🛠️ chmod:修改权限
方法一:数字模式(八进制)
# 所有者: rwx(7), 组: r-x(5), 其他人: r-x(5)
chmod 755 script.sh
# 所有者: rw-(6), 组: r--(4), 其他人: r--(4) → 标准文件权限
chmod 644 document.txt
# 只有自己能读写执行
chmod 700 private_key.pem方法二:符号模式(更直观)
# 给所有人加执行权限
chmod +x script.sh
# 给所有者加写权限
chmod u+w file.txt
# 移除其他人的读权限
chmod o-r secret.txt
# 给组和所有人加读权限
chmod go+r data.txt
# 递归修改目录及内部所有文件
chmod -R 755 my_folder/2.4.3 🎭 umask:控制新建文件的默认权限
umask 是“权限掩码”,决定新建文件时去掉哪些权限。
# 查看当前 umask
umask
# 通常输出 022 或 002
# 设置 umask(影响后续新建文件)
umask 022 # 新建文件默认 644,目录 755
umask 077 # 新建文件默认 600,目录 700(更安全)
# 永久生效:加到 ~/.bashrc
echo 'umask 022' >> ~/.bashrc计算逻辑:
- 文件最大权限 = 666 (rw-rw-rw-)
- 目录最大权限 = 777 (rwxrwxrwx)
- 实际权限 = 最大权限 - umask
例:umask 022 → 文件权限 = 666 - 022 = 644
2.5 进程管理:ps, kill, 作业控制
2.5.1 👁️ ps:查看进程
# 当前终端的进程
ps
# 所有属于你的进程
ps x
# 所有系统进程(包括别人的)
ps aux
# 详细信息(CPU, 内存)
ps u
# 完整命令行(不换行)
ps w
# 组合拳:最常用
ps aux | grep chrome
# 查看当前 shell 的 PID 和详情
ps u $$关键字段解释:
PID: 进程IDSTAT: 状态(S=睡眠, R=运行, Z=僵尸, T=停止)%CPU,%MEM: 资源占用COMMAND: 启动命令
2.5.2 ☠️ kill:终止进程
# 礼貌终止(发送 SIGTERM)
kill 1234
# 强制杀死(SIGKILL,慎用!)
kill -9 1234
# 或
kill -KILL 1234
# 暂停进程(冻结)
kill -STOP 1234
# 恢复被暂停的进程
kill -CONT 1234
# 查看所有信号
kill -l2.5.3 🎪 作业控制:前台/后台切换
# 运行一个长任务
ping google.com
# 按 Ctrl+Z 挂起(暂停)
# 输出:[1]+ Stopped ping google.com
# 查看当前 shell 的作业
jobs
# 把作业放到后台继续运行
bg %1
# 把作业拉回前台
fg %1
# 直接在后台启动命令
sleep 100 &
# 输出:[2] 56782.6 重定向与管道:Unix 哲学的精髓
2.6.1 🔄 管道 |:连接命令
# 取前10行,转大写
head /proc/cpuinfo | tr a-z A-Z
# 找 Chrome 进程
ps aux | grep chrome
# 排序 + 去重计数
cat words.txt | sort | uniq -c
# 复杂组合:找日志中出现最多的IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -52.6.2 📥📤 重定向:控制输入输出
标准输出 (stdout, 文件描述符 1):
# 覆盖写入
echo "hello" > file.txt
# 追加写入
echo "world" >> file.txt标准错误 (stderr, 文件描述符 2):
# 错误单独存到 err.log
ls /nonexistent 2> err.log
# stdout 和 stderr 合并到 all.log
ls /nonexistent > all.log 2>&1
# 或(Bash 4+ 简写)
ls /nonexistent &> all.log标准输入 (stdin, 文件描述符 0):
# 从文件读入(较少用,因为命令通常直接接受文件名)
sort < unsorted.txt > sorted.txt2.7 归档与压缩:tar, gzip, zip
2.7.1 📦 tar:打包工具
# 创建归档(c=create, v=verbose, f=file)
tar cvf backup.tar file1 dir1/
# 查看内容(t=test/list)
tar tvf backup.tar
# 解压(x=extract)
tar xvf backup.tar
# 打包并 gzip 压缩(z=gzip)
tar czvf backup.tar.gz file1 dir1/
# 解压 .tar.gz
tar xzvf backup.tar.gz
# 打包并 bzip2 压缩(j=bzip2)
tar cjvf backup.tar.bz2 file1/
# 解压 .tar.bz2
tar xjvf backup.tar.bz22.7.2 🗜️ 其他压缩工具
# gzip(最常见)
gzip file.txt # 生成 file.txt.gz
gunzip file.txt.gz
zcat file.txt.gz # 直接查看,不解压
# bzip2(压缩率更高)
bzip2 file.txt # 生成 file.txt.bz2
bunzip2 file.txt.bz2
# xz(最高压缩率)
xz file.txt # 生成 file.txt.xz
unxz file.txt.xz
# zip(Windows 兼容)
zip archive.zip file1 dir1/
unzip archive.zip2.8 超级用户:sudo 的正确用法
2.8.1 👑 为什么不用 root 登录?
- ❌ 无操作审计
- ❌ 容易误删系统文件
- ❌ 失去正常用户环境
✅ 正确做法:用 sudo 临时提权。
# 以 root 身份编辑配置文件
sudo vipw
# 重启服务
sudo systemctl restart nginx
# 启动交互式 root shell(谨慎!)
sudo -i
# 以其他用户身份运行命令
sudo -u postgres psql2.8.2 📜 配置 sudoers(必须用 visudo!)
# 安全编辑 /etc/sudoers
sudo visudo示例配置:
# 允许用户 alice 免密码执行所有命令
alice ALL=(ALL) NOPASSWD: ALL
# 允许 admins 组执行特定命令
%admins ALL=(ALL) /usr/bin/systemctl, /usr/bin/apt
# 允许 root 模拟任何用户
root ALL=(ALL) ALL2.9 Linux 目录结构:FHS 标准速查
| 目录 | 用途说明 |
|---|---|
/ | 根目录,一切从这里开始 |
/bin | 基本命令(ls, cp, bash 等) |
/dev | 设备文件(硬盘、键盘等) |
/etc | 系统配置文件(passwd, fstab, network 等) |
/home | 用户家目录(/home/alice, /home/bob) |
/lib | 共享库文件(.so) |
/proc | 虚拟文件系统,提供进程和内核信息(如 /proc/cpuinfo) |
/root | root 用户的家目录 |
/sbin | 系统管理员命令(fdisk, ifconfig 等) |
/tmp | 临时文件(重启后可能清空) |
/usr | 用户程序和数据(类似 Windows 的 Program Files) |
/usr/bin | 用户级命令(gcc, python, vim 等) |
/usr/local | 手动安装的软件(避免覆盖系统包) |
/var | 可变数据(日志 /var/log,邮件 /var/mail,缓存 /var/cache) |
/run | 运行时数据(进程 ID、socket 等,重启清空) |
/sys | 系统与设备接口(虚拟文件系统,可调内核参数) |
2.10 特殊字符与命令行编辑
下面是一些常见的特殊字符和命令行编辑快捷键:
2.10.1 🎭 特殊字符速查表
| 字符 | 名称 | 用途 | 示例 |
|---|---|---|---|
* | star | 通配符 | *.txt |
? | question | 单字符通配 | file?.txt |
| ` | ` | pipe | 管道 |
> | greater | 输出重定向(覆盖) | echo hi > file |
>> | append | 输出重定向(追加) | echo hi >> file |
< | less | 输入重定向 | sort < file |
& | ampersand | 后台运行 | sleep 100 & |
; | semicolon | 命令分隔 | cd /tmp; ls |
&& | AND | 前一个成功才执行后一个 | make && make install |
| ` | ` | OR | |
$ | dollar | 变量引用 | echo $HOME |
` | backtick | 命令替换(旧式) | echo `date` |
() | subshell | 命令替换(新式) | echo $(date) |
' | single | 字面量(禁止展开) | echo '$HOME' |
" | double | 半字面量(允许变量展开) | echo "$HOME" |
\ | backslash | 转义 | echo \"hello\" |
~ | tilde | 家目录快捷方式 | cd ~ |
# | hash | 注释 | # This is a comment |
2.10.2 ⌨️ 命令行编辑快捷键(Bash Emacs 模式)
下面是一些常用的命令行编辑快捷键,能让你在终端里快到飞起来:
| 快捷键 | 功能 |
|---|---|
Ctrl+A | 跳到行首 |
Ctrl+E | 跳到行尾 |
Ctrl+B | 光标左移(同←) |
Ctrl+F | 光标右移(同→) |
Ctrl+P | 上一条命令(同↑) |
Ctrl+N | 下一条命令(同↓) |
Ctrl+W | 删除前一个单词 |
Ctrl+U | 删除从光标到行首 |
Ctrl+K | 删除从光标到行尾 |
Ctrl+Y | 粘贴被删内容(yank) |
Ctrl+L | 清屏(同 clear) |
Ctrl+R | 反向搜索历史命令 |
Ctrl+G | 取消搜索 |
Tab | 自动补全 |
Ctrl+D | 退出当前 shell(空输入时) |
Ctrl+C | 终止当前命令 |
Ctrl+Z | 挂起当前命令 |
2.11 获取帮助:man, info, —help
可以通过 man 查看命令的手册页,了解它的用法和选项。info 提供更详细的文档,适合 GNU 工具。--help 则给出简短的使用说明。
# 查看命令手册
man ls
man 5 passwd # 第5节:文件格式
man 2 open # 第2节:系统调用
# 关键字搜索
man -k copy # 找含 "copy" 的命令
apropos copy # 同上
# GNU 风格简短帮助
ls --help
grep --help
# 更详细的 GNU 文档
info coreutils
info grep | less # 管道给 less 阅读
# 在线文档(很多软件在 /usr/share/doc/)
ls /usr/share/doc/2.12 实战练习题
练习1:权限实验
# 1. 创建一个文件,权限设为只有自己可读写
touch secret.txt
chmod 600 secret.txt
ls -l secret.txt
# 2. 创建一个脚本,让自己和别人都能执行
echo '#!/bin/bash\necho "Hello"' > greet.sh
chmod 755 greet.sh
./greet.sh
# 3. 尝试用别人身份读取 secret.txt(会失败)
sudo -u nobody cat secret.txt练习2:管道组合
# 找出 /var/log 中最大的5个文件
du -ah /var/log | sort -rh | head -5
# 统计当前登录用户数
who | wc -l
# 找最近修改的10个文件
find . -type f -mtime -1 | head -10练习3:归档备份
# 备份家目录到 /backup 文件夹
mkdir -p /backup
tar czvf /backup/home_backup_$(date +%F).tar.gz ~/
# 验证备份
tar tzvf /backup/home_backup_*.tar.gz | head -20练习4:进程管理
# 启动一个后台进程
sleep 300 &
# 查看它的 PID
jobs -l
# 挂起它(先 fg 再 Ctrl+Z)
fg %1
# 按 Ctrl+Z
# 恢复后台
bg %1
# 杀死它
kill %12.13 常见错误与解决方案
Linux 学习笔记 2 —— 核心命令与系统管理
https://adalovelemon.github.io/blog/posts/content/technotes/linux/linux2/
