Series · Linux · Chapter 1

Linux 使用基础

Linux 入门导览:理解多用户与文件级权限模型,看懂 FHS 目录结构与发行版谱系,掌握登录后第一时间要敲的那批最常用的命令。

Linux 的"难"很少出在命令本身。真正卡住新人的,是脑子里没有一张系统地图:它为什么主导了服务器领域、多用户多任务到底意味着什么、Debian 系和 Red Hat 系切换时哪些东西会变、SSH 登录之后头十分钟该敲哪些命令。这篇文章是整个 Linux 系列的入口导览,先把心智模型搭起来——哲学、发行版、FHS 目录树——然后过一遍你每天会用上几十次的命令:cd ls pwdcp mv rm mkdircat less head tailfind grep,以及管道、重定向、SSH,还有权限和进程的最小集合。每个主题都点到为止,深入内容散落在专题文章里(文件权限、磁盘管理、用户管理、系统服务管理、进程管理、软件包管理、文件操作深入解析)。

为什么是 Linux,它为什么长成这样

新手能感受到的几乎所有 Linux 怪癖,都可以追溯到三个早期设计决定:它生来就要同时服务很多用户、它把文件当成万能接口、它假设你会写脚本而不是去点鼠标

  • 开放、可裁剪。 从内核到 init 系统,每个组件都能换、能重编、能裁剪。一个 5MB 的 Alpine 容器和一个 12GB 的 Oracle Linux 安装盘,都自称是 Linux。
  • 稳到可以忽略它的存在。 生产服务器跑上几年不重启是常态。一台老机器 uptime 打出 up 412 days,没人会觉得稀奇。
  • 包管理器才是第一安装方式。 你几乎不会去下载 .exeaptdnfpacmanzypper 会自动解决依赖、校验签名,一行命令就能升级整个系统。
  • 一切皆文件。 磁盘在 /dev,进程在 /proc,内核开关在 /sys 里靠写文件来切换。同一个 cat>,既能读 CPU 信息,也能控制 LED 亮度。
  • CLI 优先,GUI 可选。 图形桌面(GNOME、KDE)当然有,但服务器一般通过 SSH 连进去靠纯文本驱动——这也正是它适合脚本化和远程批量管理的根本原因。

发行版谱系一览

绝大多数发行版都来自少数几个祖先。最快区分它们的方法就是看包管理器叫什么。

Linux 发行版谱系

  • Debian / Ubuntu 系 —— apt。学习曲线最平缓,文档最全,云镜像默认选项。没有特殊原因就选 Ubuntu LTS
  • Red Hat / RHEL / CentOS / Rocky / Alma / Fedora 系 —— yum(CentOS 7)或 dnf(8+)。企业级首选。CentOS Linux 在 2021 年被砍掉之后,Rocky LinuxAlmaLinux 成了与 RHEL 二进制兼容的接班人。
  • SUSE / openSUSE 系 —— zypper。欧洲企业和 SAP 部署里常见。
  • Arch / Manjaro 系 —— pacman。滚动更新,软件最新,默认假设你会读 wiki。
  • 独立派 —— Gentoo(什么都自己编译)、Alpine(musl + 5MB,容器场景的宠儿)、NixOS(声明式配置)、Void(不用 systemd)。

云上还要看厂商口味:AWS 推 Amazon Linux,阿里云推 Alibaba Cloud Linux,两者都是针对自家平台调优过的 RHEL 派生。

三个解释一切的核心理念

1. 多用户、多任务

同一时刻可能有几十个用户从 SSH 或本地 TTY 登进来,每人又跑着几十个进程。内核必须把他们的 CPU 时间、内存、文件、socket 隔开。这就是权限模型为什么要设计得这么严格——不然任何一个用户都能读到别人的密码、kill 掉别人的进程。

2. 以文件为核心的权限

每个文件(目录在 Linux 里也是一种特殊文件)都有三组权限——ownergroupothers——每组各 3 位:读 (r)写 (w)执行 (x)。从左往右读这个权限串:

1
2
3
4
5
6
-rwxr-xr-x  1 alice  devs   2048  Jan 15 09:30  deploy.sh
^^^^^^^^^^
||||||||||+-- others:r-x      可读、可执行
|||||||+----- group: r-x      可读、可执行
||||+-------- owner: rwx      可读、可写、可执行
+------------ 类型:  -        普通文件(d=目录,l=软链接)

有一个组合你必须立刻能认出:rw-------(八进制 600)是 SSH 私钥唯一允许的权限——其它任何模式 SSH 客户端都会拒绝使用这把私钥。

chmod/chown、八进制 vs 符号写法、SUID/SGID/sticky bit、ACL、umask 的深入内容都在 《 Linux 文件权限》 专题里。这里的最小集合够你看懂 ls -l 的输出。

3. 一切皆文件

普通文件、目录、设备、进程、内核状态、管道、socket——它们都暴露同样的 read()/write() 接口。好处是同一套工具到处通用:

1
2
3
4
cat /proc/cpuinfo                                       # CPU 型号、核心数、特性位
cat /proc/meminfo | head -5                             # 内存总量
echo 1 > /sys/class/leds/input1::capslock/brightness    # 点亮键盘大写锁定灯
cat /dev/urandom | head -c 16 | xxd                     # 16 字节随机数,按十六进制打印

只要一个东西能 cat 出来、能 > 写进去,基本就能脚本化。

文件系统地图(FHS)

Linux 没有 Windows 那种盘符。所有磁盘、U 盘、网络共享都被 挂载 到唯一的根 / 下面的某个位置。这套布局由 FHS(Filesystem Hierarchy Standard) 规范化。

FHS 文件系统层级

最常打交道的两个目录是 /etc(配置)和 /var/log(日志)。把这条经验记牢:

  • 服务起不来? —— 去 /var/log/<服务>/journalctl -u <服务>
  • 配置不对? —— 去 /etc/<服务>/
  • 磁盘满了? —— du -sh /* 2>/dev/null | sort -h 先找出最大的一级目录。
  • 找一个命令? —— which <cmd>,通常在 /usr/bin/usr/local/bin

几个第一天就该知道的小细节:

  • /root 是 root 的家,不是 /home/root。普通用户才在 /home 下面。
  • /proc/sys 是虚拟的——它们只存在于内存里,是内核状态的视图。du -sh /proc 没有意义。
  • /tmp 在大部分发行版上重启会清空(而且经常用 tmpfs 挂在内存里),任何重要文件都不要放这。

一条命令的解剖

Shell 把每一行命令解析成三类 token,靠空格分隔。

一条 shell 命令的解剖

$ ls -l -a -h --color=auto /var/log /etc
  ^^ ^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^
  |    |          |             |
  |    |          |             参数(要操作的对象)
  |    |          长选项(完整名字,--name=value)
  |    短选项(单字母 flag,可以叠加成 -lah)
  命令本身(要运行的程序)

三个习惯能省你很多时间:

  • -lah 等价于 -l -a -h。短选项可以叠在一起。
  • 路径里有空格或 shell 特殊字符的,全部加引号:ls "/var/log my dir"
  • 不确定参数的时候问命令本身:<cmd> --help 看简表,man <cmd> 看完整手册(/ 在手册里搜索,q 退出)。

登上一台新机器后的头十分钟

你刚刚 SSH 进去。在动任何东西之前,先把这五个问题答完。

1. 我是谁?我能干什么?

Shell 提示符直接告诉你。看末尾那个字符:

1
2
root@web01:~#       # '#'  -> 你是 root,无所限制
alice@web01:~$      # '$'  -> 普通用户,需要权限就 sudo

别用 root 干日常活。 用普通账号登录,要权限的时候再 sudo。审计日志(/var/log/auth.log/var/log/secure)会记下每次 sudo 是哪个用户调的——大家都顶着 root 上的话,这条线索就丢了。

2. 我在哪?周围有什么?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ pwd
/home/alice
$ ls -lah
total 32K
drwxr-xr-x  4 alice alice 4.0K Jan 15 09:30 .
drwxr-xr-x  6 root  root  4.0K Jan 15 09:00 ..
-rw-------  1 alice alice  220 Jan 15 09:00 .bash_history
-rw-r--r--  1 alice alice 3.8K Jan 15 09:00 .bashrc
drwx------  2 alice alice 4.0K Jan 15 09:30 .ssh
drwxr-xr-x  2 alice alice 4.0K Jan 15 09:30 projects

pwd(当前目录)配合 ls -lah(长格式、含隐藏文件、人类可读大小)基本就把环境看清楚了。

3. 这是什么系统?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ uname -a
Linux web01 5.15.0-92-generic #102-Ubuntu SMP x86_64 GNU/Linux
$ cat /etc/os-release | head -3
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
$ hostnamectl
   Static hostname: web01
           Chassis: vm
        Machine ID: 9e2f...
   Operating System: Ubuntu 22.04.3 LTS
            Kernel: Linux 5.15.0-92-generic
      Architecture: x86-64

4. 系统压力大不大?

1
2
3
4
5
6
7
8
9
$ df -h /                # 根分区磁盘剩余
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   12G   26G  31% /
$ free -h                # 内存 + swap
               total        used        free      shared
Mem:           7.8Gi       1.2Gi       3.4Gi       128Mi
Swap:          2.0Gi          0B       2.0Gi
$ uptime
 09:32:11 up 47 days,  3:14,  2 users,  load average: 0.18, 0.22, 0.20

负载(load average)是过去 1、5、15 分钟内 可运行 + 不可中断 的任务平均数。在 4 核机器上,持续高于 4.0 就意味着 CPU 顶到天花板了。

5. 网通不通?

1
2
3
4
5
6
7
8
$ ip -br addr            # 所有网卡的简洁视图
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             10.0.0.42/24
$ ip route | head -2
default via 10.0.0.1 dev eth0
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.42
$ ping -c 3 1.1.1.1
64 bytes from 1.1.1.1: icmp_seq=1 ttl=58 time=2.14 ms

ip 多年前就替代了已经被废弃的 ifconfig/route/arp 三件套。教程里要是还在写 ifconfig,多数发行版有兼容包能跑,但你该学的是 ip

文件与目录操作:日常词汇表

下面这些命令应该练到不用看键盘就能敲出来。下面这张分类速查表把常用命令按意图归了组。

常用命令按类别分组

导航

1
2
3
4
5
6
pwd                 # 显示当前目录
cd /var/log         # 绝对路径
cd projects/api     # 相对路径
cd ~                # 回家目录(不带参数的 cd 等价)
cd ..               # 上一层
cd -                # 上一次所在目录(来回切换)

一个值得知道的小技巧:pushd / popd / dirs 维护一个目录栈,可以一脚扎进很深的路径,然后一键跳回来。Tab 补全对所有路径都生效。

列出

1
2
3
4
5
6
7
ls                  # 朴素列表
ls -l               # 长格式(权限、属主、大小、时间)
ls -lh              # 大小人类可读(1.4K、2.3M、7G)
ls -la              # 含隐藏文件(.bashrc、.ssh)
ls -lah             # 上面所有的合体(你这辈子敲得最多的一条)
ls -lt              # 按修改时间排序,新的在前
ls -lS              # 按大小排序,大的在前

ll 在 Ubuntu/Debian 上是 ls -alF 的别名,很多人会自己加(在 ~/.bashrcalias ll='ls -lah')。

创建与删除

1
2
3
4
5
6
mkdir reports                    # 单层目录
mkdir -p data/2024/01/raw        # 父目录自动创建
touch notes.md                   # 空文件,或更新 mtime
rm notes.md                      # 删一个文件
rm -r reports                    # 递归(删目录)
rm -rf reports                   # 递归 + 强制,不询问

rm 没有回收站。 文件一旦 unlink,恢复要靠取证工具,而且经常救不回来。两个保命习惯:

  • 在敲 rm <pattern> 之前,先用 ls <pattern> 看一眼 会删掉哪些文件。
  • 谨慎一点的话,在 shell rc 里加 alias rm='rm -i',每删一个文件都问一遍。
  • 永远不要写 rm -rf "$VAR/" 而不先确认 $VAR 有值;空的 $VAR 会让这条命令变成 rm -rf /。现代 GNU rm 默认会拒绝 /--preserve-root),但别指望它兜底。

复制与移动

1
2
3
4
5
6
cp report.md report.bak          # 复制文件
cp -r src/ dst/                  # 递归(目录)
cp -a src/ dst/                  # archive 模式:保留权限、链接、时间
cp -i src dst                    # 交互:覆盖前先问
mv old.md new.md                 # 原地重命名
mv *.log /var/log/archive/       # 移动多个文件

同一个文件系统内的 mv 其实只是改了一下目录条目——基本不耗时,没有数据被复制。跨文件系统的 mv 才相当于 cp + rm

看文件内容

1
2
3
4
5
6
cat short.txt                            # 整个文件 dump 出来(只适合短文件)
less /var/log/syslog                     # 可滚动分页器:space=向下 b=向上 /=搜索 q=退出
head -n 20 access.log                    # 前 20 行(默认 10)
tail -n 50 access.log                    # 末尾 50 行
tail -f /var/log/nginx/access.log        # 实时跟随追加(看日志必备)
tail -F /var/log/nginx/access.log        # 类似 -f,但能撑过日志切割

tail -F 是边等请求过来边看日志的标准姿势。配合 grep --line-buffered ERROR 还能实时过滤。

不开编辑器的快速写入

1
2
3
4
5
6
7
8
echo "deployed at $(date)" > deploy.log    # 覆盖
echo "step 2 done"        >> deploy.log    # 追加

cat > config.yaml <<'EOF'
host: 0.0.0.0
port: 8080
debug: false
EOF

<<'EOF' 这种带引号的 heredoc 会禁用 shell 展开——$VAR 会被原样写入而不是替换成它的值。不加引号的话,变量会被替换。

找文件、找内容

两条命令覆盖九成场景:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 按名字、类型、时间、大小找文件:
find /var/log -name "*.log"             # 按通配(注意引号)
find /home/alice -type f -mtime -1      # 最近 1 天内修改过的文件
find / -size +100M -type f 2>/dev/null  # 大于 100MB 的文件
find . -name "*.tmp" -delete            # 找完直接删(小心)

# 按内容找:
grep "ERROR" app.log                    # 单文件
grep -rIn "TODO" .                      # 递归、显示行号、跳过二进制
grep -v INFO app.log                    # 反选:不含 INFO 的行
grep -E "^(WARN|ERROR)" app.log         # 扩展正则

-rIn 这三个字母值得背下来:r 递归、跳过 bInary(大写 I)、显示 n 号。仓库特别大的时候 ripgreprg)是更快的替代品。

文件信息

1
2
3
4
5
stat report.md           # 完整元数据:atime、mtime、ctime、inode、占用块
file mystery.bin         # 按文件内容判断类型,不依赖后缀
wc -l access.log         # 行数(-w 单词、-c 字节)
du -sh ./*               # 当前目录每个一级子项的占用,汇总
du -sh /var/lib/* 2>/dev/null | sort -h   # 按大小排序

stat 区分了三个让新手晕的时间戳:atime(最后一次读)、mtime(最后一次内容修改)、ctime(最后一次元数据变化,比如 chmod)。ls -l 默认显示的是 mtime

管道:把命令拼起来

管道 | 把上一个进程的 stdout 接到下一个进程的 stdin 上。中间不落盘,数据通过内核 buffer 一段一段地流过去。这是整个 Unix 工具链里最强大的一个想法。

管道数据流

举个实际例子:从 nginx 访问日志里找出错误响应排名前十的来源 IP。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ cat /var/log/nginx/access.log \
    | grep ' 5[0-9][0-9] '          \   # 5xx HTTP 响应
    | awk '{print $1}'              \   # 提取 IP(第 1 列)
    | sort                          \   # 把相同行排到一起
    | uniq -c                       \   # 数连续重复
    | sort -rn                      \   # 按数字逆序
    | head -10                          # 取前 10
   1842 203.0.113.42
    611 198.51.100.7
    ...

三个常配的重定向算子:

1
2
3
4
5
cmd > file        # stdout 重定向,覆盖
cmd >> file       # stdout 重定向,追加
cmd 2> errors     # 只重定向 stderr
cmd > all 2>&1    # 把 stderr 并入 stdout,再一起重定向
cmd | tee file    # 一边写文件,一边继续往下游传

2>&1 的意思是"把 fd 2 指向 fd 1 当前指向的位置"。顺序很关键:cmd 2>&1 > file 不能 把 stderr 写进文件;cmd > file 2>&1 才行。

管道、进程替换 <(...)、命名管道(FIFO)、用 xargs 做并行执行的深入用法在 《 Linux 文件操作深入解析》 专题。

SSH:登录远程机器

SSH(Secure Shell)是远程操作 Linux 的默认方式。所有流量都加密,默认走 TCP 22 端口,支持密码和公钥两种认证。

基本用法

1
2
3
4
ssh alice@10.0.0.42                  # 默认 22 端口
ssh -p 2222 alice@example.com        # 指定端口
ssh -i ~/.ssh/work_ed25519 alice@server   # 指定私钥
exit                                 # 退出会话(Ctrl-D 也行)

网络中断时终端会卡住。在新行开头敲 ~.(波浪号、点)可以从本地端强制断开。

公钥免密登录

更安全也更标准的做法。每台笔记本生成一对密钥,把 公钥 拷到所有要登的服务器上。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1. 在本地生成密钥对(Ed25519 是当前最佳实践)
ssh-keygen -t ed25519 -C "alice@laptop"
#   -> ~/.ssh/id_ed25519       (私钥,绝对不外传,权限必须 600)
#   -> ~/.ssh/id_ed25519.pub   (公钥,可以随便复制)

# 2. 把公钥推到服务器
ssh-copy-id alice@10.0.0.42
#   会以正确的权限追加到 ~alice/.ssh/authorized_keys

# 3. 之后登录就不用密码了
ssh alice@10.0.0.42

公钥跑通之后,就该把 sshd 锁死:在 /etc/ssh/sshd_config 里把 PasswordAuthentication 改成 no,然后 reload 服务。全网都有机器人在 IPv4 段里扫接受密码登录的 sshd,把这个口子直接关掉。

安全加固清单

  • Ed25519 密钥(更快、更短、更现代),两端都新的话不要再用 4096 位 RSA。
  • 关掉密码登录、关掉 root 登录(PermitRootLogin no)。
  • fail2ban,自动封掉反复失败的来源 IP。
  • 能在防火墙层面把 SSH 限制在已知源 CIDR,就限。
  • 改默认端口只能减少扫描噪音,不是真正的安全措施。

服务管理(reload sshd、开机自启)在 《 Linux 系统服务管理》 专题里讲。

权限和用户:两页讲完

看懂、改对权限

rwx 三元组的格式你已经会读了。chmod 有两种写法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 数字写法:r=4、w=2、x=1,每一组求和
chmod 755 deploy.sh        # owner=rwx, group=r-x, others=r-x
chmod 600 ~/.ssh/id_ed25519  # owner=rw-, others=---  (SSH 私钥必须)
chmod 644 README.md        # owner=rw-, group=r--, others=r--

# 符号写法:谁(u/g/o/a) +/-/= 什么(r/w/x)
chmod u+x deploy.sh        # owner 加执行
chmod g-w report.md        # group 去掉写
chmod o=  secrets.env      # others 完全没权限
chmod -R a+r docs/         # 递归,所有人都能读

值得背的几种常见模式:

模式含义典型用途
755rwxr-xr-x可执行文件、公开脚本
644rw-r–r–普通配置 / 源码文件
700rwx——私有目录
600rw——-SSH 私钥、密钥文件
400r——–只读密钥

SUID、SGID、sticky bit、ACL、umask 都在 《 Linux 文件权限》 专题。

切换用户:susudo

1
2
3
4
sudo apt update              # 用 root 跑一条命令(有审计、用你自己的密码)
sudo -i                      # 进 root 交互 shell(有审计)
su - root                    # 切到 root(要 root 密码,常被禁用)
su - bob                     # 切到 bob,加载他的环境

现代默认是 sudo,因为它能记下 什么时候 干了 什么,而且不需要分享 root 密码。Ubuntu 全新安装时的第一个用户会自动加进 sudo 组;RHEL 系上对应的是 wheel 组。

创建用户、组成员关系、密码策略、useradd/usermod/userdel/etc/passwd//etc/shadow 的内部细节,全部在 《 Linux 用户管理》 专题。

进程,最小集合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
ps aux                            # 所有进程的快照
ps aux | grep nginx               # 按名字过滤
ps -ef --forest                   # 进程树,能看父子关系
top                               # 实时排序(默认按 CPU),按 M 切到内存,q 退
htop                              # 更友好的 top(一般要装)

kill 1234                         # 礼貌的 TERM 信号——进程能先做清理
kill -9 1234                      # KILL——内核立刻干掉,进程完全没机会处理
killall nginx                     # 所有名为 nginx 的进程
pkill -f 'python worker.py'       # 按完整命令行匹配

command &                         # 当前 shell 的后台
nohup long-job &                  # 退出登录也不被杀(输出到 nohup.out)
jobs                              # 列出当前 shell 的后台任务
fg %1                             # 把任务 1 调回前台

先用普通 kill,进程真的卡死了再上 kill -9-9 是无法捕获的,进程没有机会 flush 缓冲、关 socket、释放锁——经常是状态损坏的根源。

CPU/内存/IO 监控(vmstatiostatpidstat)、nice/renice、cgroup、OOM killer 都在 《 Linux 进程与资源管理》 专题。

包管理 30 秒入门

Linux 装软件靠包管理器,不是去下载安装包。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Debian / Ubuntu (apt)
sudo apt update                      # 刷新包索引
sudo apt install nginx
sudo apt remove nginx                # 卸载,保留配置
sudo apt purge  nginx                # 卸载 + 删配置
sudo apt search keyword

# RHEL / CentOS / Rocky / Alma (dnf;7 上是 yum)
sudo dnf install nginx
sudo dnf remove  nginx
sudo dnf search  keyword
sudo dnf upgrade                     # 全量更新

# Arch (pacman)
sudo pacman -Syu                     # 同步源 + 升级系统
sudo pacman -S    nginx
sudo pacman -R    nginx

为什么这套方式好:依赖会自动解决,每个包都被发行版签名校验过,一条升级命令覆盖整个系统。

源码编译、手动装 .deb/.rpm、其它生态(snapflatpakpipnpm)、第三方源管理在 《 Linux 软件包管理》 专题。

几个能救你命的习惯

  1. /etc 之前先备份。

    1
    
    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
    

    一旦新配置把 SSH 弄坏,旧文件就一条 cp 的距离。

  2. 不要在唯一一个 SSH 连接上改 SSH 配置。 编辑 sshd_config 之前再开 第二个 SSH 会话。如果改完之后新会话连不上,老会话还活着,可以立刻把改动撤回去。这条习惯救过无数个周末。

  3. 下面这些命令请当成核武器对待:

    • rm -rf / —— 把整个宇宙抹掉(现代 rm 会拒绝,但请别测试)。
    • dd if=/dev/zero of=/dev/sda —— 把整块硬盘清零,无法恢复。
    • chmod -R 777 / —— 全局可写,整套系统的安全模型直接报废。
    • > /etc/passwd —— 把用户数据库截断。系统能撑到下次重启。

    动这些命令之前先用 lslsblkcat 把目标确认清楚。

  4. 日志通常已经把答案告诉你了,先看日志。

    1
    2
    3
    4
    
    sudo tail -f /var/log/syslog                    # 通用(Debian/Ubuntu)
    sudo tail -f /var/log/messages                  # 通用(RHEL 系)
    sudo grep 'Failed password' /var/log/auth.log   # SSH 暴力破解
    sudo journalctl -u nginx -n 50 --no-pager       # 单个服务的最近 50 行
    

下一步去哪儿

这篇文章只是给你一张地图。每个主题都有对应的深入文章,等你需要细节时再去翻:

  • 《 Linux 文件权限》 —— SUID/SGID/sticky、ACL、umask、权限继承。
  • 《 Linux 用户管理》 —— useradd、组、sudoers 语法、PAM、密码策略。
  • 《 Linux 磁盘管理》 —— 分区、文件系统、挂载、LVM、RAID。
  • 《 Linux 系统服务管理》 —— systemd unit、journalctl、定时器。
  • 《 Linux 软件包管理》 —— 软件源、GPG、源码编译、alternatives。
  • 《 Linux 进程与资源管理》 —— 监控、cgroup、调度、OOM。
  • 《 Linux 文件操作深入解析》 —— 管道、重定向、xargstee、FIFO。

Linux 不是一次性学完的。开一台免费云主机(或者本地的 VirtualBox / Multipass / WSL2),打开终端,故意把东西搞坏——肌肉记忆建立得最快的方式就是这个。

参考资料

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub