从盘符到根目录,从管家式管理到自主掌控,这是一次思维模式的彻底迁徙。

原始素材

下一篇

再论Linux,走出Windows舒适区后的另一片天地.txt

原始聊天记录素材

Linux对新来的Windows用户的几条建议

1. 操作系统运行在内存之中,操作系统不一定要依赖于硬盘而存在,文件系统是管理存储资源的系统而不是管理磁盘的系统,所有可读的资源都在根底下,包括硬盘上的和不在硬盘上的。

2. 要学会为自己所做所为负责,这个世界没有Microsoft管家拿着自动更新的鞭子抽你。也没有出现的弹窗让你注意病毒和危险操作,但时刻检查下软件更新也是很重要的。更新常常引入一些更好的功能和更好的安全性。同时,小心使用sudo的权杖。

3. 整个系统都是你的,整个系统都是可审计的,不断尝试,多多学习,就像探索新世界一样,你会逐步发现各个组件之间的联系和秘密,并且和他们成为朋友。

4. /usr是包管理器的地盘,除非你知道你在做什么,否则请用尊重包管理器的方式去完成你想完成的操作,FHS的所有软件一家亲既是统一透明共享的魔法,也是依赖地狱的诅咒,那里给系统添加功能,那么你也得尊重系统的规则。~底下的东西才完全是你的。

5. 完成一件事情可能会有多种方式,没有哪种原则是一定不变的,FHS不可解决的问题可以用flatpak,容器化解决。KISS原则,UNIX原则在复杂问题上要退居后位,Linux不是UNIX的复制和绝对拥护者,Linux鼓励用户使用他喜欢的方式构建它的系统。

再简要翻译这五条,提炼出我要的注意点

1. 忘掉盘符

2. 更大权利,更大责任

3. 不断学习,相信系统是可解释的

4. 改掉在Windows下随便删改目录来解决软件问题的糟糕习概!

5. 综合使用多种方法,像Windows那样shell只有explorer的例子并不是亘古不变的真理

只要路径对的,挂载啥都不意外,两个在不同硬盘上但挂载到同一目录下不同文件夹是很正常的,甚至网络储存都可以。这对应用都是透明的,在很多时候会带来好处

文件权限有3组3位,rwx,所有者,所有组,用户有主组和附加组,有自己的mask去定义创建的文件的默认权限

在3组3位之外还有特殊位,目录有粘滞位阻止乱写

文件有x位在执行时改变权限

(不过在现代Linux系统更推荐用capability来做)

也有sgid改变组权限

文件本身也有些文件系统的属性,比如C来防止COW,好像更改是用flags还是attribute?

更复杂的还有ACL,不过大多数情况下经典权限就够了

用file指令可以很轻松辨别文件类型,不过这种方法原本认为优雅,但是近年来逐渐破产,还是扩展名更易读。

不过在看到没有扩展名时file一下看看是elf还是数据库还是日志是蛮重要的。要是执行位还在可能误运行。

目录执行位决定了你有没有权利进入这个目录,有r权限能让你ls列出,但没有x权限连读写都不能

编译工具build-essential很重要,很多软件需要现场编译像Microsoft那种不自带编译链的系统本身就是异类。

Linux可以跑的设备蛮多的,找到合适的硬件你可以试着破解个Linux试试(USB WiFi刷armbian.jpg)

文件权限十分重要,错误的权限设置会让Linux的一些软件无法正常运行甚至进不去系统!

实在在仓库里找不到软件,要么添加第三方仓库,要么自己写打包文件,要么手动下载二进制放到usr/local里或/opt里,最后的救命稻草是docker和qemu

命名约定

.d结尾的一般会被动态导入合并

.conf是config,

.service是systemd的服务文件

部分科技树

大概就是

文件系统(虚拟文件系统proc,sys,inode,ln和link)

启动流程(initramfs,grub,init 1)

用户与用户组(以及文件权限)

内核模块

系统调用

重要的内核子系统namespace,cgroup,iptables

进程管理

终端(tty,shell,管道,短路)

环境变量

包管理器

coreutils

管理哲学

桌面环境

网络子系统

Linux用户空间六大部分

GNU CoreUtils

Linux Utils

init1(systemd,xxxctl,systemd-xxx,xxxd)

X Server(Or Wayland composistor)

OpenSSL(SSH……security!)

Containers and isolate(fuser,/dev/,user namespace,podman……)

/


引言:当“C:\”变成“/”

如果你刚从 Windows 的世界“移民”到 Linux,最初的不适感几乎是必然的。那个熟悉的、以盘符划分的整齐世界消失了,取而代之的是一个从 /(根目录)开始的、看似混沌的树状结构。没有弹窗提醒你更新,没有防病毒软件跳出来指手画脚,甚至没有一个统一的“控制面板”来管理一切。

这种“失控感”,恰恰是 Linux 给你的第一份礼物:将系统的完全控制权交还给你。随之而来的,是一份同等重量的责任。这篇文字,就想和你聊聊,在这片新天地里生存、探索乃至扎根的几条核心心法。

五条核心心法,与 Windows 思维的决裂

心法一:忘掉盘符——一切都是“文件”,一切皆在“根”下

在 Windows 里,你首先面对的是 C:\D:\ 这些盘符,它们是物理存储(硬盘分区)的直接映射。你的思维被“这块空间在哪个硬盘上”所锚定。

Linux 彻底颠覆了这一点。它的核心抽象是 “一切皆文件”“单一目录树”

  • 操作系统运行在内存中:Linux 内核启动后,就驻留在内存里。根文件系统 / 可以被挂载在任意存储介质上(硬盘、U盘、甚至网络位置),内核并不关心。一个正在运行的系统,完全可以脱离初始的硬盘而存在(比如 Live USB 环境)。

  • 文件系统是资源管理器,而非磁盘管理器/ 目录下看到的一切,是各种资源(存储设备、设备文件、进程信息、内核参数)通过 虚拟文件系统(VFS) 统一呈现的视图。你的 /home 可能在 SSD 上,/var/log 可能在机械硬盘上,而 /proc/sys 则只是内存中的映射。对应用程序而言,它们只是路径,感知不到底层硬件的差异。

  • 挂载点的艺术:这正是“忘掉盘符”的威力所在。你可以将一个新的硬盘分区挂载到 /data,将网络存储(NFS/Samba)挂载到 /mnt/nas。所有应用都能无缝访问,因为它们只认路径。这种灵活性,是构建复杂存储方案(如合并多个磁盘、使用 LVM 逻辑卷)的基础。

给你的建议:强迫自己不再思考“这个文件在哪个盘”。思考“这个文件在目录树中的哪个位置?它应该属于哪个逻辑部分(配置、用户数据、系统库)?”。

心法二:更大权力,更大责任——你是系统的“第一责任人”

Windows 像一个有保姆的公寓:微软(通过自动更新、Defender、各种提示)替你操心了大量维护和安全工作,虽然有时也显得聒噪和强制。

Linux 则像一片自留地:你是地主,也是唯一的园丁。没有自动更新在后台悄然运行,没有弹窗警告你“此程序来自未知发布者”。这带来了无与伦比的自由,也意味着:

  1. 安全自负sudo 不是管理员密码,而是 权杖。每次使用它,你都在行使“神之手”。在网上下载一个脚本然后 sudo ./install.sh,等同于在 Windows 里关闭所有防护双击来历不明的 .exe。你得自己判断来源是否可信。

  2. 维护自觉:系统不会逼你更新。但持续的更新(尤其是安全更新)至关重要。你需要建立自己的节奏:是用 apt update && apt upgrade (Debian/Ubuntu),还是 pacman -Syu (Arch),或是通过 GUI 工具。更新前,看看更新日志是个好习惯。

  3. 没有“后悔药”rm -rf /(在 root 下)真的会删除一切。没有回收站(桌面环境提供的回收站只是对 rm 的有限包装),没有“系统还原点”(除非你手动用快照工具如 timeshift 配置过)。每一步破坏性操作,都需要你头脑清醒。

给你的建议:敬畏 sudo。为关键操作设置别名(如 rm 替换为 rm -i 或使用 trash-cli)。建立定期的更新和备份习惯。你是系统的守门人。

心法三:不断学习,相信系统是“可解释”的——探索者的乐园

Windows 的许多内部机制是封闭的、黑箱的,或者被 GUI 层层包裹。Linux 则恰恰相反,它几乎是全透明的。

  • 一切皆可审计:从内核启动参数 (/proc/cmdline),到每个进程打开的文件 (lsof),再到系统所有的网络连接 (ss -tulpn),你几乎可以窥见系统在任何时刻的完整状态。

  • 配置即文本:几乎所有的系统配置,都存放在 /etc 目录下的纯文本文件中。没有神秘的二进制注册表。你可以用最熟悉的文本编辑器 (vim, nano) 查看和修改,并用 diff 工具追踪变化。这使得配置管理、版本控制(用 Git 管理 /etc)和问题调试变得极为直接。

  • 组件联系清晰:系统由一个个相对独立的模块组成:内核、systemd(初始化系统)、各种守护进程(sshd, cron)、桌面环境等。学习 Linux,就是学习这些组件如何通过文件、套接字、信号、环境变量进行通信和协作。这种清晰的边界,让故障排查变成了逻辑推理游戏。

给你的建议:遇到问题,别急着重启。用 journalctl 查日志,用 strace 跟踪系统调用,用 man 查手册。把每次故障都当作一次理解系统内部运作的机会。好奇心是你的最佳向导。

心法四:改掉“乱删乱改”的习气——尊重系统的秩序

在 Windows 里,一个软件装坏了,你可能习惯于直接冲进 Program FilesAppData 手动删除文件。在 Linux 下,这是灾难的配方。

  • /usr:包管理器的神圣领土:这是系统级软件包的安装地,由你的包管理器(apt, yum, pacman 等)全权管理。手动删除或修改这里的文件,会破坏包管理器数据库的完整性,导致未来无法正常更新、升级或卸载软件,甚至引发依赖地狱。

  • 文件系统层次标准(FHS):Linux 遵循 FHS,它规定了 /bin/sbin/lib/usr/var/tmp 等目录的用途。这种约定俗成的结构,是所有软件共享和协作的基础。随意打破,无异于在公共图书馆里按照自己的喜好乱放图书。

  • 你的地盘在 ~/opt/usr/local:用户数据和应用配置在 ~(家目录)下,完全由你掌控。自行编译或下载的第三方二进制软件,通常建议安装在 /opt(每个软件独立的子目录)或 /usr/local(模仿 /usr 结构,但不受包管理器管辖)。这才是你施展“手动操作”的安全区。

给你的建议:安装软件,优先使用包管理器。卸载软件,也一定用包管理器。只有在包管理器无能为力,且你确切知道自己在做什么时,才考虑其他安装方式。对 /usr 保持“只读”心态。

心法五:综合使用多种方法——没有“唯一真理”

Windows 的图形化操作(资源管理器)是其绝对主流,CLI 往往是补充。Linux 则鼓励方法论的多元化。

  • GUI 与 CLI 并存:一个任务,常常既有图形工具(如 nmtui 配置网络),也有命令行工具(nmcli)。后者在自动化、远程管理和精确控制上更具优势。从 GUI 入门,逐步学习 CLI,是效率提升的必经之路。

  • 多种方案解决问题:FHS 和包管理器解决不了所有问题?没问题。容器化技术(Docker/Podman) 带来了依赖隔离和环境复现。Flatpak/Snap 提供了沙盒化的、跨发行版的软件分发。甚至可以直接在 ~ 下用虚拟机QEMU 跑一个完全隔离的环境。

  • 哲学是工具,不是枷锁:Unix 的“KISS”(保持简单和笨拙)和“一个程序只做一件事并做好”的哲学深刻影响了 Linux。但在面对复杂的桌面环境、现代化的服务编排时,这些原则需要灵活运用。Linux 不是 Unix 的教条复刻,它更是一个鼓励用户按自己喜好组装系统的平台。systemd 管理复杂服务依赖,还是用 Docker Compose,取决于哪种方式更“简单”地解决了你的问题。

给你的建议:不要拘泥于一种方式。根据场景选择最合适的工具:日常文件管理用 GUI 或 ranger;批量操作用 Bash 脚本;软件部署考虑容器;独立应用试试 Flatpak。Linux 的工具箱是立体的。

从心法到实战:一些你必须知道的“生存细节”

理解了上述心法,我们再来填充一些具体的技术血肉,让你在探索时更有底气。

文件权限:不只是“只读”和“隐藏”

Linux 文件权限是理解系统安全的基础模型。

  • 经典的 3x3 位rwx(读、写、执行)分别对应文件所有者文件所属组其他用户ls -l 看到的 -rwxr-xr-- 就是这九位的体现。

  • 用户与组:每个用户有一个主组,可以属于多个附加组。文件权限中的“组”权限,就作用于文件所属组的成员。

  • 目录的执行位 x:它决定你能否 cd 进入该目录。有读 (r) 无 x,你只能 ls 看到文件名列表,但无法访问其中文件的内容或属性。这是实现目录访问控制的关键。

  • 特殊位

  • SetUID (s):文件执行时,临时获得文件所有者的权限(如 passwd 命令)。

  • SetGID (s):对文件,作用类似 SetUID 但针对组;对目录,在该目录下新建的文件会自动继承目录的所属组。

  • 粘滞位 t:常用于 /tmp 目录。即便所有用户都有写权限,用户也只能删除自己创建的文件。

  • 更细粒度控制:经典权限不够?还有 ACL(访问控制列表) 可以为单个用户/组设置额外权限。对于进程权限,现代系统更推荐 Capabilities(能力) 机制来替代粗糙的 root 权限,实现最小权限原则。

软件安装:条条大路通罗马

当发行版仓库里没有你想要的软件时,你有清晰的路径:

  1. 添加第三方仓库:很多软件官方会提供自己的仓库源。这是最接近包管理器原生体验的方式。

  2. 手动下载 .deb/.rpm:对于 Debian/Ubuntu 或 Fedora/RHEL 系,有时能找到现成的包文件。

  3. AppImage/Flatpak/Snap:获取跨发行版、沙盒化的独立应用。

  4. 自己动手

  • 源码编译./configure && make && sudo make install。通常安装在 /usr/local

  • 下载预编译二进制:解压到 /opt~/.local 下,并手动配置 PATH。

  1. 终极隔离方案Docker/Podman 容器虚拟机。彻底解决环境依赖问题,也是生产部署的常态。

关键科技树点亮指南

想从 Linux 用户进阶为管理者甚至开发者?可以沿着这些脉络深入:

  • 文件系统:从虚拟文件系统 (/proc, /sys)、inode 与硬链接/软链接 (ln),到具体文件系统(ext4, Btrfs, XFS)的特性。

  • 启动流程:从 GRUB/Bootloader -> 内核 -> initramfs -> systemd (PID 1) 的完整链条。

  • 用户与权限:用户/组管理 (useradd, passwd, /etc/passwd, /etc/shadow, /etc/group),以及前文详述的权限体系。

  • 内核模块:动态加载/卸载内核代码 (lsmod, modprobe, insmod)。

  • 系统调用:用户空间与内核交互的接口,理解 strace 输出的基础。

  • 核心子系统命名空间 (Namespaces) 提供隔离视图(容器基石),控制组 (cgroups) 限制资源使用,netfilter (iptables/nftables) 实现防火墙和 NAT。

  • 进程管理:进程树、信号、作业控制 (jobs, fg, bg)、守护进程。

  • Shell 与终端:Bash/Zsh 编程、管道 (|)、重定向 (>, >>, 2>&1)、短路逻辑 (&&, ||)、终端复用器 (tmux, screen)。

  • 网络栈:从 ip 命令配置接口、路由,到 ss/netstat 查看连接,再到 tcpdump 抓包分析。

结语:拥抱不确定性,享受构建的乐趣

从 Windows 的“舒适区”走进 Linux 的“新天地”,本质上是从一个消费型用户向一个构建型用户的转变。初期的不适,是旧思维模式与全新设计哲学的碰撞。

Linux 不承诺给你一个完美无缺、开箱即用的“产品”。它交付给你的,是一个极其强大、透明且可塑的“基底”。在这个基底之上,你能构建出从极简服务器到炫酷桌面,从嵌入式设备到超级计算机的无数可能。

这个过程注定是持续的、学习性的,有时甚至是充满挫折的。但每一次你通过查阅文档解决了问题,通过编写脚本自动化了流程,通过理解日志定位了故障,你获得的不仅是一个能工作的系统,更是一种对计算本质更深层的理解和掌控感。

这片天地没有围栏,地图需要你自己绘制。但请相信,每一个探索者留下的足迹(无数开源文档、问答和博客),都是你前进的路标。现在,深呼吸,打开终端,开始你的构建吧。