ArchLinux 入门
1. 敬告
这是一个过来人的真实经历. 我为什么要用 Linux ? 也许是因为 Linux 的自定义程度高吧, 而且在折腾的过程中也能学到一点东西,从此我也很喜欢上了 Linux 的命令行, 以前觉得那些使用命令行的人太傻了,放着好好的 GUI 界面不去用. 现在看来,其实二者各有千秋, 命令行下其实常用命令就那几个, 慢慢积累的,不用的就去查. 部分情况下也许是命令行比较高效, 但是既然 GUI 用户占大多数,说明 GUI 这个理念也迎合了很多的人.
在使用 Linux 一段时间后, 我的 Windows 也被我调教的挺好的, 而且我也不是那么排斥 Windows, 所以目前打算就这样用着. 入坑 Arch 需谨慎, 你要有那种 “一个人, 一支烟, 一bug一整天” 的精神. 不然的话, 你还是乖乖用 Windows 吧, 但是你一旦度过这个最艰难的时期你就会觉得,也就这样吧。不管怎样, 祝各位 Archlinux 用户都有一个愉快的使用体验, 祝天天滚挂 >_<.
其次记住, Linux 它不是 windows; windows 也不是 Linux; 所以你不应该用 windows 的要求去要求 Linux, 同样用 Linux 的要求去要求 windows也是不合理的。最后, Linux也好, windows也好, 它们都只是一个工具而已, 是为了给我们提供服务, 所以什么适合自己就用什么吧.
2. 阅前提醒
文章很长, 我想在这里把我个人的所有关于 Linux 感受说出来, 特别是对于 Arch. 我并不想你浪费时间来阅读一个你不感兴趣的内容, 所以不感兴趣可以关闭这个网页了. 好了, 正文开始!想要看 Archlinux 安装的请直接跳到 [第6节]
3. 此文目的
此篇文章的目的: 记录我使用Linux的经历, 至少以后还能留下一些东西. 因为我现在发现我那种折腾的耐心了, 可以这样说. 反正我感觉我每天都在和Linux斗智斗勇, 几乎每个软件都有bug。我甚至都不知道我为什么最初会选择Linux, 我好像忘记了我选择 Linux 的初衷.现在每天折腾Linux都很痛苦, 仿佛以前的那种折腾Linux的快乐再也没有了, 以前的我是那么的乐此不疲。希望我把这篇文章写完之后, 回忆起当初使用 Linux 的种种, 能够找到属于 Linux 的那份快乐, 不然我可能真的要放弃 Linux 了
- 但是Linux本来就是你爱用不用的
- 这里没有其他的意思, 其实我还是挺想用Linux的
4. Where to learn ?
-
首先是去小破站(B站), 众所周知, 小破站是最大的学习网站
-
其次当然是去官方的Arch wiki或者是在Arch的bug里边看看是不是系统本身的原因, 抑或是Arch的Fomular
-
然后就是先查百度, 看有没有人的经历和我相同, 这样改Bug就快得多.因为百度还会展示以下的这些网站里边的相关的内容。
有时候我觉得百度的搜索结果还是挺好的
-
百度的方法不行, 就上知乎, 看看有没有类似的经历
-
知乎不行, 就上csdn
虽然很多人都说这里是一个垃圾堆, 但是我觉得那是对于那种高手而言的;我虽然没有经常逛, 但毕竟这是我第一个接触到的编程相关的网站, 还是它把握领进门的吧。但是现在我也觉得csdn的做法有一点的恶心了, 唉……
-
csdn不行, 我就会上老牌社区博客园看看
现在我觉得博客园很好, 很清爽, 很干净, 社区氛围很好, 力荐
-
博客园还不行的话我就只有上github了, 毕竟我的英语并不是很好, 虽然有浏览器的翻译, 但你们有没有觉得有时候浏览器的翻译怪怪的, 我从Arch wiki得出的经验
-
实在是没有办法了就只有上国外的网站搜索了。比如Quora, Stack Overflow, Stack Exchange, 或者是一些民间社区。 但是你得英语好, 再者就是盲目的google了
-
最后一招:也是我的杀手鐗: remake。软件卸载了然后重装。
5. How to learn ?
很多人可能都会认为上边的内容过于的浮夸, 但是我觉得,从一个电脑小白到安装手动 Linux 的路还是比较长的. 也许你需要去了解磁盘的分区方式, Linux 的文件系统, 挂载的概念, 文件系统的 inode, 以及 block 等东西。
特别感谢在 2023 年寒假一直陪伴我的: 鳥哥的 Linux 私房菜. 尽管
服务器假设篇
那本书我几乎没怎么看,但是基础篇
我几乎看完了, 部分内容至今仍觉得历历在目 …
因为我是准备安装 Windows + Linux 双系统, 然而原本的 win10 里边还有很多的重要文件, 课件, 包括一些难以安装的工业软件等。我不想到时候 archlinux 没有安装成功, 反而把原本的 win10 也搞挂了。所以即使是网上有很详细的双系统安装教程, 我也不敢一步一步的照着做。我还是得去查询每一条命令的实际作用, 查询这个命令运行后对原本文件系统的影响。
也许不会相信我所说的, 可能觉得太过夸张了。但是我当时连:
- linux 命令行
- GPT, MBR
- BIOS, UEFI
- GRUB
这些东西都没有听说过, 更不用说知道它们是干什么的. 特别是在目睹了网上很多老鸟安装双系统后失败的惨状, 作为一个电脑小白, 我害怕极了. 我不会放开手去按照网上的教程安装,所以我的解决办法是:
- 先去小破站把上边所说的什么: linux命令行, GPT, MBR, BIOS, UEFI, GRUB 了解一下
- 然后在小破站看看装机视频(就是单纯安装 windows 的, 听听那些 up 对于每一步操作的解释, 在这里推荐up:
硬件茶谈
, 他的视频解决了我在这一阶段的大部分问题) - 不实际操作, 总是会感觉不踏实: 但只有一个实体机, 怎么做实验呢? 对了, 使用虚拟机。我用的是 VMware。为了练习安装操作系统,我的 Vmware的系统快照最终变成了一个 “树” 形图,现在还是那些操作失败的系统安装分支都被删除的样子:
这些系统快照在容积最大的时候, 占了我大约 200G 的磁盘, 接下来就是实体机的安装了
6. 安装教程
在虚拟机上进行演练后, 我自信满满的
- 在我的硬盘分出一个区
- 安装基础包
- 编写基本配置
- 安装 DWM
虽然最终是安装好了,但是, 我还是想要记录下我这个过程中经理的种种 …
6.1 制作启动盘
我使用的是 rufus,一个免费的软件, 在windows上制作的, 具体的注意点:
- 选项 --> GPT
- 写入方式 --> DD
关于选项设置, 对于自己的电脑的启动方式, 可以在 Windows 上的 运行
框中输入:
1 |
|
来查看, 如果 BIOS MODE
显示的是 UEFI
那么就选择 GPT
, 如果是 Legacy
那么就选择 MBR
.进入LiveCD, HONOR 笔记本开机时长按的两个按键的说明:
- F2: 设置 BIOS
- F12: 选择启动项
6.1 连接网络
要在实体机中安装 Arch, 你首先的连的上网, 来下载 Arch 的基本环境组件(固件, 驱动, 内核等等).首先, 在虚拟机中我是使用的NAT来让我的虚拟机链接上网络的, 但那是在实体机里边怎么搞呢? 其实挺简单的;假如你想使用无线网的话, 依次输入如下命令即可
备注: 在后文中, #
后边的内容代表注释
1 |
|
但是, 我还是推荐第二种联网方案的,就是直接利用DHCP.简单来说就是直接从你的路由器
要可以上网的, 别用那种电都没插的, 或者是其他的离谱路由器
上接一根网线出来连接到你的电脑上。(USB口的可以买一个转接器)然后你的电脑自动就能够上网了, 不用你设置什么的。为什么我推荐这种方式呢?
- 稳定: 如果安装的过中, 隔壁的老王利用你的wifi偷看“学习资料”, 或者是各种原因导致你的wifi不稳定
- 速度快: 同样也是为了防火, 防电, 防老王。这样你的安装会很快(应该可以减少焦虑吧)
我就是用的DHCP, 网速平均能够达到30mb/s左右
首先, 因为在虚拟机的时候我可以手动选择启动时进入BIOS界面。怎么检测你是否连接上互联网了呢?
连接一下网站试试呗,运行如下的命令
1 |
|
6.2 refleactor 服务
系统里边又一个名为 refleactor
的服务, 它会挑选一下我们下载软件的仓库地址, 然后把它们放到
1 |
|
的文件下, 这个文件夹的大概结构图示(扩容的问题: 很简单的, 后边会讲)
为什么要禁用reflector ?
你想, 它同步的是全球的下载源(地址), 什么自由美利坚啊, 加拿大啊之类的, 当然也有我们中国的。 但是我们下载<东西>的时候时好像是默认使用排在前边的几个地址。你想, 你从美国下载快, 还是中国快。
所以我们就可以添加几个中国的源(下载地址)到开头: (再次提醒: #
后边的内容是注释)
1 |
|
怎么添加呢?挺简单地(你会vim的基础操作情况下)
ref: vim 基础操作
- 怎么退出 vim ? 没想到吧, 你第一次接触 vim 你可能都无法退出这个东西
- 先按个几下
<Esc>
键,看到 vim 的左下角出现 normal mode 或者是 Insert mode 消失 - 在英文模式下输入
:wq
即可,但是这个是保存后退出 - 不保存强制退出就输入
:q!
- 怎么插入文本, 或者说怎么使用“人性化”的方法进行类似 notepad 的操作
- 在
normal mode
的情况下, 在英文输入的情况下, 键入a i o
中任何一个字母即可 - 然后用上下左右方向
(k j h l)
键进行光标的移动
- 复制粘贴
- 在 normal 模式下使用
<n>yy
可以实现复制 n 行, 然后用 p 粘贴 - 部分的 vim 支持系统的剪切板, 输入
echo has('clipboard')
即可验证
- 搜索
- 在normal模式下输入
:/<text you find>
- 搜索支持正则表达式
6.3 磁盘分区[重点]
6.3.1 电脑启动流程
这一段感觉不知道该怎么讲, 如有讲的不对的地方, 欢迎补充. 我也不知道能否清楚, 我尽力 …
6.3.2 常见术语
- BIOS
- Legacy
- Legacy BIOS
- UEFI
- EFI
- ESP
- UEFI BIOS
- GPT
- MBR
- BootLoader
- Kernel
- GRUB(2)
- LILO
- OC
- clover
1.BootLoader
<开机管理程序> 或叫做 <启动引导程序>。在加载内核上具有唯一性, 你不能说用 windoes 的 BootLoader 去加载 Linux 的内核, 这是不行的。下边来解释原因, 以Linux下的 GRUB2 为例:
我们上边提到在 BIOS 读完信息后, 接下来就是会到第一个开机设备的 MBR(LBA0)去读取 boot loader 了。这个 boot loader 可以具有:
- 菜单功能、
- 直接载入核心文件
- 以及控制权移交的功能等
系统必须要有 loader 才有办法载入该操作系统的核心就是了。但是我们都知道, MBR 是整个硬盘的第一个 sector 内的一个区块, 充其量整个大小也才 446 Bytes 而已。即使是 GPT 也没有很大的扇区来储存 loader 的数据。我们的 loader 功能这么强, 光是程序码与设置数据不可能只占这么一点点的容量吧? 那如何安装?
为了解决这个问题, 所以 Linux 将 boot loader 的程序码执行与设置值载入分成两个阶段来执行:
-
阶段一: 执行 boot loader 主程序: 第一阶段为执行 boot loader 的主程序, 这个主程序必须要被安装在开机区, 亦即是 MBR 或者是 boot sector 。但如前所述, 因为MBR 实在太小了, 所以, MBR 或 boot sector 通常仅安装 boot loader 的最小主程序, 并没有安装 loader 的相关配置文件;
-
阶段二: 主程序载入配置文件: 第二阶段为通过 boot loader 载入所有配置文件与相关的环境参数文件 (包括文件系统定义与主要配置文件 grub.cfg), 一般来说, 配置文件都在 /boot 下面。
2. BIOS
使用汇编语言写到主板上的一个16位固件(硬件上的软件)—> 计算机执行的第一个程序
3. UEFI
使用C语言写到主板上的一个固件(可以看作一个低级的操作系统), 主要就是想要取代BIOS这个固件接口, 所以又叫做UEFI BIOS
4. EFI(EFI system partition)
GPT格式的硬盘中的系统启动分区, 又叫做ESP分区。 EFI其实就是系统自动安装或者是你手动添加的一个BootLoader, 通常都是一个**.efi**作为后缀的文件。然后这个BootLoader就会带着主板找到其它操作操作系统的BootLoader, 然后被找到的这个BootLoader就加载这个操作系统的内核内核, 从而启动操作系统。
5. BIOS寻找操作系统的方式
Legacy 和 UEFI → 可以进入BIOS模式后进行设置; 比如在Legacy模式下, 在BIOS中要把第一启动项设为安装由操作系统的那个硬盘。之后BIOS会扫描第一启动硬盘的第一个分区(MBR或这是LBA0),找到boot之类的启动文件,只用利用Loader才能加载系统内核, 从而进入操作系统
6. 磁盘的分区格式
MBR, GPT
7. 加载OS内核
BootLoader的主要工作之一, 常见的BootLoader有GRUB(2), LILO, spfdisk, Boot Manager(windows的boot loader), OC, clover. 好像还有一个叫变色龙是吧?
黑苹果玩家出来挨打
8. kernel
就是操作系统的内核, 我们平时说的 Linux
其实应该叫 GNU/Linux
; 因为 Linux 是 GNU 组织采用了 Linus 的 Linux 内核产生的
9. (BIOS and UEFI) OR (MBR and GPT)?
下面引用鸟哥书中的一句话:
如果你的分区表为 GPT 格式的话, 那么 BIOS 也能够从 LBA0 的 MBR相容区块读取第一阶段的启动引导程序代码, 如果你的启动引导程序能够认识 GPT 的话, 那么使用 BIOS 同样可以读取到正确的操作系统核心!换句话说, 如果启动引导程序不懂 GPT , 例如 Windows XP 的环境, 那自然就无法读取核心文件, 开机就失败了
明确几个点:
- 安装 Windows + Linux 双系统的话, 你应该先安装 windows, 再安装 Linux; windows 的安装会覆盖你的 MBR 和 BootSector, 从而你原本在 MBR 里边的 Linux 的 BootLoader 会被覆盖成 啥也不能干 的 windows 的 Boot Manager,然后你就只有使用 Linux 的修复模式来修复 MBR 了
- 多系统在磁盘上的关系, 如图:GPT也有MBR的兼容区, 所以说只要你在 windows 里边预先分出一块空余的磁盘(不要分区), 之后你在这个分区里边可以使劲造(还是别太使劲了), 你原来的 windows 里边的文件不会受到丝毫的影响(亲身体会). 但是在安装引导的时候得注意一下:
- BootLaoder的作用
- 提供菜单: 使用者可以选择不同的开机项目, 这也是多重开机的重要功能!
- 载入核心文件: 直接指向可开机的程序区段来开始操作系统;
- 转交其他 loader: 将开机管理功能转交给其他 loader 负责。(windows的不行)
bootloader的示意图
6.3.3 引导方案
在本教程中 Linux 的引导不安装在 windows 的 EFI 分区, 转而新建一个 /Boot
分区来存放 Linnux 和 Windows:
- 一部分用户 windows 自带的那个存放 BootLoader 的分区小的可怜(虽然BootLoader也很小)
- 另一方面是为了防止损坏 windows 原本的引导
6.3.4 分区方案
首先在你的 windows 中使用 windows 自带的磁盘管理分出 200G 左右的 free space, 下面是我实体机的分区情况:
1G | \boot | fat32 |
---|---|---|
8G | swap | swap |
The rest | \ | ext4 |
每个人可以按照自己的偏好进行调整, 由于我的实体机已经安装完成, 于是下边在虚拟机中进行演示, 数据按照表格来
-
磁盘分区: MBR 格式的硬盘使用fdisk(cfdisk 图形界面),GPT 格式的硬盘使用gdisk(cgdisk 图形界面);
最后一定要写入分区表才有效, 即输入w, 具体的方法我不多讲, 还是简单的; -
查看分区后磁盘情况, 使用命令:
1 |
|
注: 这个是我已经安装好的虚拟机双系统, 我已经把预留的60G分成了20G windows + 30G Arch; 然后我又把这个 30G 分成: 512M的/boot:/dev/nvme0n1p6 + 4G的swap:/dev/nvme0n1p7 + 30.5GM的/dev/nvme0n1p8
- 格式化分区:其实应该叫做格式化文件系统, 常见的文件系统如下:
- windows 下的FAT, FAT16, FAT32, NTFS文件系统
- Linux 下的ext2, ext3, ext4, SGI’s XFS, btrfs 文件系统
输入以下的命令
1 |
|
6.4 安装基本系统
6.4.1 软件源配置
因为Arch使用 pacman 作为包管理器, 所以你应该先编辑一下pacman的配置文件, 设置pacman的下载仓库有哪些, 不然仓库没有的话你就会缺少依赖, 然后就会一直改bug. pacman配置文件位于 /etc/pacman.conf
, 运行如下的命令进行编辑:
1 |
|
打开后你会看到Arch自带有三个软件源
- [core]
- [extra]
- [community]
但是你还应该把另外一个软件源给解封(它默认是被注释了的)—> 给两行解除注释, 就是 [multilib]
, 它的作用就是提供 32 位支持库。
你还可以在添加一个archlinuxcn这个源, 但是它不是官方的源, 是我们中国人自己搞的
在刚才的那个/etc/pacman.conf文件里边加入下边的内容即可
1 |
|
你也可以编辑 pacman 的镜像源, 把中国的镜像源放在最前边, 可能网速会好一点, 和前边的禁用 reflector 一样
最后就是要更新一下你的系统, 万一不是最新的, 但时候在安装的结束之际给你弹个ERROR出来, 相信我你会裂开的, 怎么更新呢?很简单, 运行下边的命令就可以了
1 |
|
6.4.2 硬盘安装
其实你细心一点就会对发现, 我们的配置都是改的U盘里边的那个系统, 即ISO文件, 根本没有和我们的安装硬盘扯上半点的关系, 毕竟我们是要把Arch安装到电脑的硬盘上, 而不是一个U盘里边。所以要怎么把Arch安装到电脑的硬盘上呢?
这里就涉及到一个Linux下的常用命令: 挂载
-
什么是挂载? 其实就是把你的储存设备(文件系统, 分区)挂到一个Linux的目录下边, 然后被挂载的目录就叫**挂载点。**你从挂载点进去就是进入了你的那个储存设备
-
什么是目录? 比如 windows下的
C:\users\..\Desktop
就是一个目录,(C:\users\..\)Desktop
就是挂载点.
只不过我们在 Linux 下使用的是 /mnt
这个目录, 作为挂载点; 所以就很简单了, 只需要把电脑的硬盘的分区挂载到 /mnt
目录下, 我们在这个U盘的系统里边, 把东西下载到 /mnt
目录下, 就等于我们把东西下载到电脑的硬盘上了.
回归正题:
- 我们要把 Arch 的系统主要内容安装在主分区, 就是最大的那个 ext4 玩意儿, 也就是
/dev/nvme0n1p6
- 还得把 Arch 的引导安装在
/boot
分区, 也就是/dev/nvme0n1p8
挂载操作相关命令如下:
1 |
|
接下来就可以开始下载东西来安装了,这么久的前期工作, 终于等来安装了;使用如下的命令即可:
1 |
|
有小伙伴可能还会问, 你上边不是说在Linux下, 文件系统是从
/
开始的吗? 而且U盘里变的文件系统是从/
开始的吗? 怎么又多了一个/mnt
和/boot
目录出来呢?
这个是安装 Arch 过程中的另外一个操作:叫做 arch-chroot
; 别着急,后边我们会详细讲解这个命令
6.4.3 fatab文件
首先恭喜你走到了这一步, 很多人在前边就放弃了, 离胜利不远了; 那么fstab有什么用呢? 还记得我们之前说的吗? 我们是不是手动的把我们的分区挂载到了一些目录下边。但是你的电脑肯定得关机吧, 那么重新开机以后你又得手动去挂载, 麻烦吗? 所以生成 fstab 文件就是在电脑开机后自动读取这个fstab文件, 然后挂载相关的文件系统, 使用如下命令:
这里的文件系统就是指的分区, 因为一般情况下, 一个分区只能有一个文件系统
1 |
|
6.5 基本环境配置
走完上边的流程, 你得到了一个很简洁的系统, 简洁到代码编辑器, dhcpcd, 反正要啥没啥。还有就是,现在的系统你肯定很不适应: 语言为英文, 时间也不对 … 但是先别急, 我们还得完成一个操作, 就是前边提到得一个命令 —— arch-chroot
. 它有什么用呢? 字面上看就是改变 (change) 根 (root)目录。那么实际意义是什么呢? 对了, 就是这个字面意义
那个改变根目录有什么作用呢?前边我们是不是说过, 在Linux下一切得目录都是从 /
开始的, 也就是说, /
就是最顶层的目录, 你不能够到达比 /
目录更上边的目录了
这样就可以起到保护你的学习资料, 从而免于被别人偷看
同时, 它也会改变你的工作目录, 你原来是在 /mnt
下(U盘里), 现在你就在 /
下了(电脑硬盘里,也就是的的新安装的Arch系统里面)这样也就能够解释上边的问题了. 使用如下命令切换根目录:
1 |
|
如果你之前在安装时配置了vim, 并且发现在新的系统里边少了一些配置文件, vim使用起来不顺手的话, 你可以退出当前的新系统。你在新系统里边没有你的vim配置文件, 因为你只能使用原来的/mnt下你安装的文件, 而你的vim配置文件在/mnt的上级, 你说, 你怎么使用?此时退出新系统, 进入U盘中的系统重新配置一下, copy过来即可, 使用如下命令退出新系统*
1 |
|
6.5.1 locale 设置
时区设置
1 |
|
硬件时钟的同步
1 |
|
设置locale
什么是locale?实际上就是生活习惯, 根据不同地区人们的不同的生活习惯, 电脑会调整相应的有关东西, 比如语言, 货币, 日期格式等。也就是说让Arch知道我们是中国人, 你的配置得按着我们中国人的习惯来
1 |
|
新建 /etc/locale.conf
1 |
|
6.5.2 设置 host
- 设置 hostname
那些改host文件的windows玩家, 这个东西, 你们肯定熟悉吧。你随便设一个英文名就行了, 但是下边配置host的时候名字得一致
1 |
|
- 设置 host
1 |
|
6.5.3 设置 root 密码
1 |
|
6.6 多操作系统引导
如果你只需要安装单个 Linux 操作系统, 那么这一部分你可以直接跳过; 对于需要安装 Linux+Windows 双系统, 甚至是多个操作系统, 包括 MacOS, 亦或者是多个 Linux 系统的用户来说, 多个操作系统的引导是一个很重要的话题:
1 |
|
6.6.1 GRUB基本配置
具体的详细步骤和参数意义可以参见 Arch 官方维基, 下面以命令
1 |
|
来进行相关信息的查看.可用的参考信息有: 磁盘类型, ESP分区
位置(本例中就是寻找 bootmgfw.efi
所在的分区位置), 相关命令输出如下:
1 |
|
所以我们要寻找的分区就是: /dev/nvme0n1p1
, 然后使用如下命令进行挂载操作,挂载点为: /boot
.
1 |
|
为了保险起见, 可以查看一下其中是否存在 EFI 文件夹
然后使用 os-prober
工具查找 bootmgf.efi
, 运行如下的命令:
1 |
|
os-prober 官方认为启动别的操作系统是不安全的, 所以就默认禁用了 os-prober 查找其他操作系统启动文件的功能. 尽管不自动启用, 但你仍然可以修改这一默认行为. 在文件
/etc/default/grub
中增加配置项:GRUB_DISABLE_OS_PROBER=false
, 然后再生成我们的 GRUB 配置文件
如果你可以得到类似如下输出, 就说明 os-prober
找到了 windows 的启动引导项了:
1 |
|
之后就是如下的常规操作:
1 |
|
6.6.2 GRUB 主题
GRUB 默认的主题是纯黑白的, 大概就像下面这样(示例图片选自:linux-grub-windows-dual-boot):
可能部分的用户并不喜欢, 所以我们可以自定义这个 grub 菜单界面的主题。这里采用的工具是: grub2-themes, 它提供的主题样式如下:
这个工具的使用十分的简单, 只需参考仓库对应的README即可, 但是我还是在这里补充一些易错点.其实主要的问题就出现在 os-prober 寻找 windows 的 .efi
上, 下面是我在默认的 windows 和 Linux 的引导都正常下的配置
方法:
- 首先把 Windows 的
.efi
文件对应的分区挂载到 Linux 的/boot/EFI
文件夹下, windows 的.efi
文件在我这里位于/dev/nvme0n1p1
分区. 所以使用命令:1
sudo mount /dev/nvme0n1p1 /boot/EFI
- 然后运行命令: 看一看是否能检测到 Linux 和 Windows 两个系统的启动文件, 如果正常的话, 应该会有类似如下的输出:
1
sudo os-prober
尤其得关注那个1
2
3
4
5
6
7
8
9
10
11$ sudo grub-mkcontig temp.cfg
Generating grub configuration file ...
Found theme:/usr/share/grub/themes/vimix/theme.txt
Found linux image:/boot/vmlinuz-linux-zen
Found initrd image:/boot/intel-ucode.img /boot/initramfs-linux-zen.img
Found fallback initrd image(s)in /boot:intel-ucode.img initramfs-linux-zen-fallback.img
Warning:os-prober will be executed to detect other bootable partitions
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Windows Boot Manager on /dev/nvmeon1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ..
doneWindows Boot Manager
项. - 如果以上两步均正常, 那么最后可以使用 grub2-themes 提供的脚本命令生成对应的 grub 配置 最后再检查一下对应的 grub 配置文件:
1
sudo ./install.sh -t vimix -s 1080p
/boot/grub/grub.cfg
是否正常, 我最后的文件长这样(不要抄袭, 每个人的情况是不同的):然后取消挂载, 重启, 即可看到效果1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 95e4daca-8211-4bb5-8407-1bfd1123e560
font="/usr/share/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=1920x1080,auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_input console
terminal_output gfxterm
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 95e4daca-8211-4bb5-8407-1bfd1123e560
insmod gfxmenu
loadfont ($root)/usr/share/grub/themes/vimix/dejavu_sans_12.pf2
loadfont ($root)/usr/share/grub/themes/vimix/dejavu_sans_14.pf2
loadfont ($root)/usr/share/grub/themes/vimix/dejavu_sans_16.pf2
loadfont ($root)/usr/share/grub/themes/vimix/dejavu_sans_24.pf2
loadfont ($root)/usr/share/grub/themes/vimix/dejavu_sans_32.pf2
loadfont ($root)/usr/share/grub/themes/vimix/dejavu_sans_48.pf2
loadfont ($root)/usr/share/grub/themes/vimix/terminus-12.pf2
loadfont ($root)/usr/share/grub/themes/vimix/terminus-14.pf2
loadfont ($root)/usr/share/grub/themes/vimix/terminus-16.pf2
loadfont ($root)/usr/share/grub/themes/vimix/terminus-18.pf2
insmod jpeg
insmod png
set theme=($root)/usr/share/grub/themes/vimix/theme.txt
export theme
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=-1
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=-1
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux, with Linux linux-zen' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-zen-advanced-95e4daca-8211-4bb5-8407-1bfd1123e560' {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root F8A7-B7F8
echo 'Loading Linux linux-zen ...'
linux /vmlinuz-linux-zen root=UUID=95e4daca-8211-4bb5-8407-1bfd1123e560 rw loglevel=5 quiet nowatchdog
echo 'Loading initial ramdisk ...'
initrd /intel-ucode.img /initramfs-linux-zen.img
}
menuentry 'Arch Linux, with Linux linux-zen (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-zen-fallback-95e4daca-8211-4bb5-8407-1bfd1123e560' {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root F8A7-B7F8
echo 'Loading Linux linux-zen ...'
linux /vmlinuz-linux-zen root=UUID=95e4daca-8211-4bb5-8407-1bfd1123e560 rw loglevel=5 quiet nowatchdog
echo 'Loading initial ramdisk ...'
initrd /intel-ucode.img /initramfs-linux-zen-fallback.img
}
menuentry 'Arch Linux, with Linux linux-zen (recovery mode)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-zen-recovery-95e4daca-8211-4bb5-8407-1bfd1123e560' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root F8A7-B7F8
echo 'Loading Linux linux-zen ...'
linux /vmlinuz-linux-zen root=UUID=95e4daca-8211-4bb5-8407-1bfd1123e560 rw single
echo 'Loading initial ramdisk ...'
initrd /intel-ucode.img /initramfs-linux-zen-fallback.img
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/25_bli ###
if [ "$grub_platform" = "efi" ]; then
insmod bli
fi
### END /etc/grub.d/25_bli ###
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-94D9-50AD' {
savedefault
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root 94D9-50AD
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_uefi-firmware ###
if [ "$grub_platform" = "efi" ]; then
fwsetup --is-supported
if [ "$?" = 0 ]; then
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
fwsetup
}
fi
fi
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###
再说一说我在这个过程中遇到的另一个坑吧. 我当时把 /dev/nvme0n1p1
分区挂载到了 /boot
目录下, 然后再运行 os-prober 命令就只能找到 Windows 的启动文件, 但是就找不到 Linux 的启动文件了, 这种情况下输出的 grub.cfg
文件大概长这样:
1 |
|
可以看到:
1 |
|
之间根本就没有任何的 Linux 启动选项, 所以导致我的 GRUB 菜单中只有一个 windows 启动项. 但是我这次并没有通过 LiveCD 进行对应的 grub.cfg
文件的更改, 我直接在 Windows 下使用 Disk Genius
修改的. 操作示意图如下:
上图中的那个 分区(4)
其实就是我那个 Linux 文件系统下的 /boot
文件夹, 所以我们要修改的文件就是那个: grub.cfg
, 修改好之后, 再替换原始的文件.重启系统, 马上恢复正常引导.
不建议新手像我这样手动修改
grub.cfg
文件, 但是如果你熟悉这个文件的结构和语法, 那我反而更推崇手写这个文件, archlinux 的官方文档中也有对应的 grub 启动菜单配置教程: grub menu
最后的效果如下:
实体机的 GRUB menu 界面不好截图,手机像素有点差,将就看吧
6.6.3 救赎 – 引导丢失
下面就说一个我亲身体验的:系统引导丢失, 无法进入系统的案件
某次我使用 timeshift 恢复系统时, 它问我要不要恢复 grub 引导, 然后我选择了同意。自然而然的, 重启后无法进入系统了(Arch 和 windows)。就连启动 windows 都只能够进入 BIOS 进行选择启动项了, 也就是说我的GRUB崩了。
然后我就重新制作了一个启动盘, 进入 LiveCD 模式, 也就是 Arch 的安装时的模式。重新把 Arch 的主分区和 boot 分区分别挂载在了/mnt
和 /mnt/boot
目录.
尽量不要颠倒下面命令的执行顺序
- 重新生成了 fstab 文件
1 |
|
- 重新安装了 Arch 的内核, 也就是如下的命令:
1 |
|
- 重新挂载 windows 的 ESP 分区到
/mnt/boot
目录. 使用命令
1 |
|
找到 Linux 和 Windows 的引导文件
- 重新生成 GRUB 的启动引导项
1 |
|
- 最后
1 |
|
重启, GRUB 成功引导 arch 和 Windows 两个系统
1 |
|
6.7 基本软件
6.7.1 计算机联网
为了方便之后的网络连接以及管理, 我个人安装了如下软件:
1 |
|
6.7.2 其余软件
还有一部分额外的软件, 可以根据个人喜好进行安装:
1 |
|
6.7.3 完成安装
完成以上的所有任务后, 恭喜你, 你得到了一个 Archlinux 系统, 蓝色双面鹰永在. 退出安装, 准备进行系统:
1 |
|
6.8 进入系统
6.8.1 连接网络
1 |
|
6.8.2 root 默认编辑器
1 |
|
6.8.3 准备非 root 用户
1 |
|
6.8.4 DE 环境安装
我这里的教程只保证你们安装好基本的 Display server, 至于你们喜欢什么桌面环境, 这个也许需要你自己去选择.
1 |
|
6.8.5 平铺桌面
如果用户喜欢轻量化的平铺桌面管理器, 我这里倒是有一个推荐的配置: yaocccc-dwm. 配置好的效果大概是这样: yaocccc-dwm-showoff. 我目前的桌面大概长这样:
7 日前现状
7.1 痛点
Windows 上的那些软件自然不能迁移到 Linux 下, 如:
- 大型工业软件如 SolidWorks, AutoCAD, Matlab.
- 还有数学软件 Mathematica, Maple.
- 最后就是 Adobe 系列
这些东西都没有办法迁移(大部分的用户应该都用不起正版 + 找不到linux的"科技"版). 可是既然你已经开始使用 Linux 了, 就说明你应该接纳 Linux, 上边的要求(要求 Linux 有 Windows 上的软件),也许有些过于的苛刻了. Linux 完全可以反问一句:我为什么要有这些软件呢? 的确也是这个道理。其实如果仅仅只是想要体验一下, 装个虚拟机, 尽管性能比较差, 但是也够了.
7.2 软件推荐
我现在又用回 Windows 了, weztrem 这个终端模拟器 + WSL2 还是很能打的.
但是在Linux下我的日常生活所需基本都能够满足, 主要是依靠如下的软件:
- 写作: LaTeX, WPS; 目前我使用 LaTeX 写论文, 制作演示文稿, 对应的表格需求很少
- 音乐: spotify, 网易云(而且有人基于网页端封装了一个), qqMusic 还不错
- 代码: Jetbrain 全家桶 + (n)vim, code-oss(VScode 的开源版本)
- 文档查看器: okular, zathura
- 交友通讯: linuxqq, 微信暂时无解, Telegram
- 科学上网: V2aray, clash-for-windows, 现在那个
dae
似乎比较的火. - 终端: simple-terminal(suckless), wezterm(目前在 Windows 上用着很舒服,打算迁移到 Linux 上), konsole 还不错
- 终端小工具: ranger, yazi, autojump,
这两个东西是类似于端口代理的, 不是其他的VPN软件那样全局的代理, 附注一张图,懂得自然懂:
-
浏览器: Vivalda, Chrome
-
剪辑绘图: kdenlive, Gimp, krita, inkscape
-
输入法: fcxit5+rime, 好像还有一个
oh-my-rime
感兴趣的可以看看.输入法的坑: 在某些应用中无法切换中文输入, 比如 dolphin, gedit, telegram …
解决方法也是比较简单的,首先运行命令进行输入法的配置检查:
1
2fcitx-diagnose
# 或者是 fcitx-diagnose 来查看潜在问题(你按照它的提示基本都可以 解决bug)基本都是更改以下的几个配置文件:
/etc/profile
~/.xprofile
/etc/environment
-
专业软件: Matlab ☞ Octave, Mathematica
7.3 DE 相关
目前我的桌面环境是: 我没有桌面环境(DE), 我用的就是简单的 xorg
+ picom
+ dwm
.个人感觉其他的 GUI 太重了, 不喜欢. 至于游戏, 我不打游戏的, 据说 Linux 的游戏体验不咋的.
8. Linux 基础知识/技巧
新手刚接触 Linux 难免会有些摸不着头脑,我自己平时也总结了一些常用技巧,就列在这里,希望能帮助到大家.
下面的部分技巧可能并不是通用的,请注意
8.1 zsh 终端小技巧
&
: 在一个命令后面添加&可以把命令放到后台执行ctrl + z
: 把正在前台执行的命令放到后台并“暂停”(在命令行窗口输出)jobs
: 查看当前在后台执行的命令fg %[num]
: 将后台命令调到前台(这里的num不是pid,是jobs命令返回的进程编号),对应的命令bgps
: 列出系统中正在运行的进程(很少,很实用)htop
: 列出系统进程(更加的详细的系统进程信息,比较多)Ctrl + r
: 搜索历史命令
8.2 系统管理员知识
sudo pacman -S package_name
# 安装软件包pacman -Ss
# 在同步数据库中搜索包,包括包的名称和描述sudo pacman -Syyu
# 升级系统。-yy:标记强制刷新、-u:标记升级动作sudo pacman -Rns package_name
# 删除软件包,及其所有没有被其他已安装软件包使用的依赖包sudo pacman -R package_name
# 删除软件包,保留其全部已经安装的依赖关系pacman -Qi package_name
# 检查已安装包的相关信息。-Q:查询本地软件包数据库pacman -Qdt
# 找出孤立包。-d:标记依赖包、-t:标记不需要的包、-dt:合并标记孤立包sudo pacman -Fy
# 更新命令查询文件列表数据库pacman -F some_command
# 当不知道某个命令属于哪个包时,用来在远程软件包中查询某个命令属于哪个包(即使没有安装)pactree package_name
# 查看一个包的依赖树)sudo pacman -Rns $(pacman -Qtdq)
# 删除孤立软件包(常用)sudo pacman -Sc
# 删除当前未安装的所有缓存包和未使用的同步数据库(可选)sudo pacman -Scc
# 从缓存中删除所有文件,这是最激进的方法,不会在缓存文件夹中留下任何内容(一般不使用)paccache -r
# 删除已安装和未安装包的所有缓存版本,但最近 3 个版本除外)
8.3 系统服务的管理
systemctl start dhcpcd
# 启动服务systemctl stop dhcpcd
# 停止服务systemctl restart dhcpcd
# 重启服务systemctl reload dhcpcd
# 重新加载服务以及它的配置文件systemctl status dhcpcd
# 查看服务状态systemctl enable dhcpcd
# 设置开机启动服务systemctl enable --now dhcpcd
# 设置服务为开机启动并立即启动这个单元systemctl disable dhcpcd
# 取消开机自动启动systemctl daemon-reload dhcpcd
# 重新载入 systemd 配置。扫描新增或变更的服务单元、不会重新加载变更的配置
8.4 top 命令
z
: 开启高亮x
: 高亮一列b
: 高亮一行>/<
: 进行左右移动
8.5 其余技巧
nohup <cmd> &
: 让命令在后台运行,不输出运行日志pkill
: 可以杀死一个进程的父进程和子进程pstree
: 显示进程树htop
: 显示进程信息,支持鼠标操作/排序
9 配置文件
9.1 zshrc
这里给一部分我的 zsh 终端的配置文件吧,个人感觉对于新手有一定的帮助.
1 |
|
9.2 wezterm
个人对于 wezterm 这个终端模拟器的评价非常高,而且还跨平台,支持图片查看, 支持终端复用, 也许将来会把 linux 下的 st 换为 wezterm. 我的配置文件很简单,如下:
1 |
|
在 windows 上的效果如图:
10 一篇文章
我最近看到的一篇关于Linux的文章:王垠-完全使用Linux工作, 你们也可以看一看, 应该可以改变很多人对 Linux 的刻板印象.