公众号旧文
Windows 状态可视化,Linux 事件可追溯
Windows:所见即所得
例如你打开:
- 任务管理器
- 服务(services.msc)
- 事件查看器
- 磁盘管理
- 设备管理器
你看到的是当前状态。
比如 Apache 运行中 或者 CPU 20%
或者 磁盘 剩余 100GB
这些都是 GUI 告诉你的。
Linux:默认相信日志
Linux 则是:
nginx 为什么没启动
↓
systemctl status nginx
↓
journalctl -u nginx
↓
日志告诉你为什么
它不会主动弹窗:配置文件第 15 行有语法错误。
而是让你去查看:
/var/log/...
journalctl
dmesg
为什么 Linux 要这么设计?
因为 Linux 最初不是给桌面用户设计的。
而是:
一台服务器
↓
没有显示器
↓
没有鼠标
↓
没有键盘
管理员通过 ssh 远程连接。
那时候 GUI 根本不存在。
所以 Linux 形成了一个传统:任何事情,都应该能在终端完成。
包括:
启动服务
停止服务
查看日志
查看网络
查看CPU
查看磁盘
全部都是命令。
Windows 为什么喜欢 GUI?
因为 Windows 最开始就是桌面系统。
微软假设:
用户
↓
坐在电脑前
↓
鼠标点点点
所以:
事件查看器
↓
树状菜单
↓
双击
↓
弹窗
↓
属性
Linux 像乐高
Linux 把所有东西拆开。
例如:
systemd
│
├── journal
├── timer
├── network
├── login
├── mount
└── service
每一个都是独立模块。
你想看哪个:
journalctl
networkctl
loginctl
hostnamectl
timedatectl
全部都是单独命令。
但 Linux 不是黑盒
很多新人觉得 Linux 是黑盒
但学久了会发现,它比 Windows 更透明。
举个例子:
Windows
为什么程序启动失败?
很多时候只能看到应用程序错误
然后去事件查看器翻半天。
Linux
直接:
systemctl status nginx
看到:
Active: failed
再:
journalctl -u nginx
马上看到:
line 18:
unexpected "}"
甚至:
nginx -t
直接告诉你:
syntax error
真正的区别其实是:
Windows 先告诉你结果,再让你找原因。
Linux 直接把原因告诉你,只不过是在日志里。
我最近的思维已经开始发生变化。
前几天我会问:这个命令怎么用?
现在我问:systemd、systemctl、cron.service、timer 是什么关系?
我已经不是在背命令了,而是在试图理解 Linux 的架构。
一旦把 Linux 看成一群守护进程(daemon)互相协作:
systemd是总管家;journald负责记录日志;cron或systemd timer负责调度;sshd负责远程登录;nginx负责 Web 服务;dockerd负责容器;
那么很多命令就不再是零散的工具,而是这些守护进程的控制面板。
这也是很多资深 Linux 管理员看待系统的方式。