Files
fzu-product/3.编程思维体系构建/3.Y.1Linux概念普及.md
2023-11-02 15:43:42 +08:00

174 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Linux 概念普及
## Before Start
在使用 Linux 之前,请确保自己会使用计算机。如果 Windows 都玩不转的,可以先补下基础知识。
- 什么是文件?什么是文件系统?
- 操作系统是干什么的?
- 软件是怎么运行起来的?
## What is Linux Distribution
Linux 不同于 Windows 和 macOS 这类系统它没有官方维护的版本。Linux 的官方只负责维护核心,而给这个核心加上各种软件变成能用的操作系统的重任,就交给了下游的各个组织和公司。所谓发行版,就是把一系列的软件和核心放在一起,经过测试之后,做成一个完整的系统,分发给用户。
这个模式给 Linux 提供了多样性。用户可以选择适合自己的发行版。虽然在早期这使适配软件变得有些困难,使不同发行版割裂开来,给 Linux 的发展带来了阻碍。但是现在是 2023 年,随着包管理的规范化和新一代打包系统的兴起,这个状况得到了极大的改善。现在我们可以自由选取发行版,而不用过度担心软件适配的问题。
简而言之GNU/Linux 加包管理加桌面约等于发行版,虽然不严谨,但是差不多贴近事实。
### Package Manager
一般来说,一个 Linux 的发行版最核心的部分是包管理模式。这通常通过包管理器和软件源实现。
包(package)类似 Windows 的安装包,它包含了要安装的软件以及一些额外的信息,但是同 Windows 安装包不同,它只是一个压缩包,不能自己运行安装,必须经过包管理器。用户很少需要直接下载安装它,而是通过包管理器。我们也不鼓励安装不在仓库里面的包,如果系统软件源里面没有可以去 flatpak。至于某些专有软件我更推荐丢进 Windows 10 LTSC 虚拟机。
包管理器(package manager)负责安装和管理软件包。它读取软件包,按照软件包的要求去安装它的依赖(通常是一些运行库,就像 Windows 下面的 VC++ 和 .NET),然后自动把包安装到规定的位置。
软件源(repository)是用来存放软件包的网站。包管理器就是从软件源服务器上下载包的。因为软件源通常在国外,软件包下载可能会比较慢。所以我们一般使用国内各个高校的镜像源,修改软件源的地址就是所谓换源。
有些人可能会纠结软件装到哪里去了,是装在什么盘上面了。这个不需要管。因为 Linux 的目录的定义和 Windows 有很大不同,这使得一些 Windows 上面的繁琐操作在 Linux 上面很多余。
这些常见的包管理器
- apt(dpkg): apt 是 Debian 系发行版的包管理器。基本上提供 Linux 安装包的软件都会支持。
- pacman: Arch 系的包管理器。可以使用 AUR(Arch User Repository),这里也能找到很多软件。
- rpm: Red Hat 系的包管理器。包比较少。只是由于中文互联网有很多死去的 CentOS 的教程遗留,所以提出来介绍一下。
- dnf: Fedora 的包管理器。
- flatpak: 通用包管理器,是个 Linux 桌面端都能安装使用。使用的 flathub 软件源上面有非常丰富的桌面软件支持(甚至有 QQ建议发行版软件源里面没有的都可以先看看 flathub 有没有,如果有就 flatpak 安装,而不是拿着网站上面下过来的 deb 文件手动安装,这样很容易搞坏系依赖管理。
- snap: 通用包管理器,只有 Ubuntu 强推。我建议使用 Ubuntu 的把这个卸载了换成 flatpak 避免影响使用体验。
不同的包管理器决定了不同的发行版。因此一般用包管理器做发行版的分类依据。
### Desktop Environment
桌面环境对用户而言当然也是很重要的,很大程度决定了用户体验。在 Linux 上面,桌面只是一些普通的程序,可以随便安装和更改。所以会有很多的桌面可供选择。不过这个选择一般来说发行版都帮你选好了。
#### Gnome
Gnome 曾一度成为 Linux 桌面的代名词因为很多发行版默认会安装这个桌面。Gnome 的风格比较独特,有点类似 macOS ,但是有不少自己的东西。对触控板手势的适配不错。
开箱状态连任务栏和桌面图标都没有,好在可以手动安装。一般各个发行版默认安装了 dash-to-dock(任务栏) desktop-icons(桌面图标) 这些插件。
设置比较少,不过可以通过 gnome-tweaks 补上。这样基本的设置都能覆盖。
#### KDE
KDE 也是非常热门的桌面。类似 Windows 的操作逻辑和极强的可定制性让他更适合 Linux “玩家”。
比较旧的版本里面可能会默认单击打开文件夹,可以在工作区(workspace)设置中改成双击。
KDE 的 GUI 功能做的还是不错的。而且提供了不少有用的套件。
Discover 应用商店可以直接使用发行版包管理器和 flatpak 进行安装,收录了很多软件,并且可以自动进行系统更新检查。
设置里面的选项很多,可以随便改。喜欢折腾的可以去看看 Theme,只是系统自带的主题安装器需要哈利波特才能使用。
自带的代理设置有些软件不会读,比如 Firefox, 给这些软件单独设置一下就行。
#### Cinnamon
Cinnamon 目前大众的发行版只有 Linux Mint 在支持,但是这也是个不错的桌面,适合小白。
#### Xfce || LXQT
如果你有一台老爷机,这两个桌面也许是个不错的选择。
#### Display Manager
在开机登陆用户的时候,那个让你输密码的界面并不是桌面,而是 DM(Display Manager),如果你有多个桌面,可以在这里切换。
我建议不要管这个,发行版用什么就跟着用。如果要自己安装都建议 SDDM 。
#### Wayland and X11
显示服务器是比桌面更底层的东西,处在系统内核和桌面之间,用来管理窗口。这个一般碰不到,只要了解你使用的是 X11 还是 Wayland 就行。X11 是老的Wayland 是新的。
现在(2023年)的时间点非常尴尬,处于 X11 和 Wayland 换代的节点上面。一方面 X11 太老旧了(十几年没有大更新了)对有些新事物支持不好,比如 2k 屏幕 1.5 倍缩放的屏幕撕裂问题。另一方面 Wayland 支持虽然已经大致完善但是有些死硬派没跟上说的就是你Nvidia
好在大多数发行版并不需要纠结这些。非 N 卡的 Gnome 和 KDE 桌面基本都是 Wayland 了,其他的桌面环境或者使用 N 卡都会用 X11。
但是有些发行版可能忘了给 N 卡换 X11, **如果你桌面登不进去**,请检查自己的环境是否是 Wayland如果是**换成 X11**。
如果你 N 卡要强开 Wayland,请参照自己使用的发行版的 wiki 以及 Arch Linux wiki, 看看有什么需要注意的点。
## Distro
大多数发行版是基于某几个特定的发行版魔改的。所以会有“系”的说法。常见的有 Debian 系, Arch 系 Red Hat 系和 SUSE 系。其中 Red Hat 系主要面向企业,桌面版除了 Fedora 并不多见。
服务器发行版建议 Debian ,用 Ubuntu 也是可以的。如果在中文互联网找资料可能会见到 CentOS但是 CentOS 如今已经停止维护了,所以看到之后绕着走就行。
在[3.Y.2双系统安装和发行版推荐](./3.Y.2双系统安装和发行版推荐.md) 推荐的发行版都是针对**双系统/单系统方案**的,因为在实机安装日常使用的时候,发行版对体验的影响才会体现出来,这样我写下的文字就会帮你剩下不少时间。
**对于虚拟机**,你不会在乎用户体验的,安装完新鲜感一过肯定就不打开了,偶尔遇到什么必须要用 Linux 的需求才会突然想起来有这个虚拟机。所以发行版**选择 Ubuntu 即可**,毕竟人气最高。要是对着百度上面刚刚找到的教程一顿猛敲之后,发现发行版不一样,那 Linux 就又风评被害了。
在安装系统的时候,建议安装时统一使用 English装好之后再换成中文或者干脆不换。
对某些很新的硬件,比如 13 代酷睿和 40 系 N 卡(2023 年),在其他发行版出现兼容性问题的情况下,可以使用 Debian 或者 Arch Linux 等等靠近上游的发行版,他们通常支持得比较好。
## Linux How to
### Directory
在 Linux 中,文件目录结构与 Windows 完全不同。Windows 存在 C 盘、D 盘等盘符,而在 Linux 中不存在这些划分,最上层的目录是根目录,路径为 `/` ,并以一个树形结构从此向下一级一级区分。没有盘符,只有路径。虽然可以多分区,但是分区是挂载到某个路径的,而不是分配盘符。用 Windows 的思维去理解就是盘符没了,全部挂进文件夹里面了,从 / 开始是根分区,就像 C 盘,`/` 底下有 `usr` `home` `var` 等等文件夹,这些文件夹可以是普通文件夹,也可以让其他磁盘分区当这个文件夹。分区还可以挂载到 `/media/root/abcd` 。这样的好处很明显,就是在路径上面模糊了分区,分区的地位和普通文件夹差不多了,非常简单,对写程序很友好。
因为舍弃了盘符的概念,一般我们在 Linux 系统上仅仅使用一个挂载到 `/` 的分区(简称 `/` 分区)或者一个 `/` 分区和一个 `/home` 分区。这样分区可以得到充足的空间,所以不会出现 C 盘装满了或者 C 盘文件多导致开机慢的情况,也就没有必要支持自定义的安装目录。
对于 Linux 的树形文件结构,存在相对路径与绝对路径之分。绝对路径是代表从根路径 `/` 开始的完整路径,如 `/home/testuser/Download`。相对路径代表从当前目录,到目标目录的一个部分路径。比如当前你所在的目录为 `/home/testuser`,那么切换到绝对路径 `/home/testuser/Download` 的相对路径即为 `./Download`。其中 `./` 代表从当前目录,再向下寻找。另外,`..` 这种两个句点代表的是向上层寻找,比如你当前所在的路径为 `/home/testuser/Download`,向上寻找到 `/home/testuser/Desktop` 的相对路径即为 `../Desktop`
当前用户的 home 文件夹简称为 `~/`,假设我们的用户名是 `user`:
```bash
user@computer:~$ cd ~/
user@computer:~$ pwd
/home/user
```
### User
Linux 在设计之初就是一个多用户操作系统,不像潜伏在多用户操作系统里面的纯正单用户操作系统 Windows。
![](./static/windows-single-user.jpeg)
因此Linux 对于用户和权限的管理比较严格,可能经常要你输 root 密码。
简单来说Linux 中存在两类用户。第一类用户即为 root 用户,也称为超级用户,它拥有系统中最高的权限。第二类用户就是除了 root 用户的普通用户,他们可以拥有不同等级的权限。使用 root 权限时需要十分小心。
一般情况下,我们使用的都是普通用户。但是要进行一些涉及较高权限的操作,比如安装软件和修改系统设置的的时候,我们就会使用 sudo 软件临时切换到 root 用户进行操作。
```bash
# 一些例子。
# 当你尝试安装 vim ,却忘记了 sudo
$ apt install vim
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
# 这样就可以安装了
$ sudo apt install vim
```
切记root 权限的使用要小心,不要随便粘贴指令!一条命令就可以干掉整个系统,比如 `sudo rm -rf /*`
### 本土化
想要正常使用系统,哈利波特是必须的。以前这个可能比较麻烦,现在有了 Flatpak 之后都好办起来了。只要[安装 Flatpak](https://flathub.org/setup), 就可以从 Flathub 上面安装 猫头 。如果连接质量差,设置 [sjtu 镜像](https://mirror.sjtu.edu.cn/docs/flathub)。需要注意的是这个 猫头 不会像 Windows 一样直接更改系统设置,你需要手动更改系统设置。
建议阅读
发行版会有一个全局的代理设置,但是有些软件就是不肯自己读取,点名 Firefox。不过好办分别单独设置就行。
由于海外的服务器下载慢,我们会把软件源换成国内各个高校的镜像。这点参考镜像站给出的教程。
输入法一律推荐 fcitx5 搭配 fcitx5-chinese-addons并打开云拼音。不推荐 rime太老了。强烈不推荐搜狗搜狗根本不懂 Linux。一般来说 Debian 系的发行版都有一个叫做 im-config 的软件包负责管理输入法,快捷方式名字通常是叫做 Input Method在这里切换到 fcitx5 就行。Arch Linux 系则需要自己设置环境变量。
### 如何寻求帮助
首先阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md),这对提升个人素养很有帮助。也有助于和能够提供帮助的人有效交流。
一般来说,各个发行版都有自己的 Wiki里面介绍了发行版本身的特点常用的软件和各种问题的解法。但是有些发行版的 wiki 年久失修,可能会过时或者缺失内容导致无法解决问题。这时候可以其他发行版的 wiki ,只要了解发行版之间的差异,自己适度发挥,也能解决问题。推荐的有 [Arch Linux wiki](https://wiki.archlinux.org) (神中神,非常推荐) 和 [Debian wiki](https://wiki.debian.org) (Debian 系可以看),他们的社区比较活跃,维护比较积极。
社区是 Linux 当中重要的组成部分。发行版通常有自己的论坛,邮件组和 IRC 频道。如果你确信你面对的是一个全新的问题,网上找不到已有的解决方案。或者你的能力不足以找到解决方案。可以尝试在这些地方求助。保持良好的态度,尽可能详细地描述问题,相信会有志愿者来解答的。
### 推荐阅读
- [archlinux 简明指南](https://arch.icekylin.online/): 虽然是 Arch Linux 的教程,但是写的很好,其他发行版也能参考。
- [Linux 就该这样学](https://www.linuxprobe.com/docs/LinuxProbe.pdf): 不错的书,适合长期看。