给自己的电脑安装 linux 操作系统的注意事项(认真编写)
注意:本文不提供各种安装过程,相关过程自己去搜。
作者作为一个使用过多达 10 个发行版,而且安装过很多次 linux 的人(包括给自己和给其他人),虽然对 linux 的了解不够多,但是我还是想在这里聊一聊如何给自己电脑安装 linux 系统(指实体)。网上的各种说法比较杂,我在这里提供一条龙服务(仅考虑思路)。大佬自然不需要看这个,这个主要是给小白了解的。
首先,建议您至少玩过虚拟机,最好玩过 vlab,这样对 linux 至少有点了解。了解程度应该至少在这个仓库的文档水平。(这个要求还是挺低的)
注:本文最开始面向中国科学技术大学学生编写,“vlab”是校内的虚拟机平台。这个“仓库”指上边的链接。
另外,如果是第一次安装 linux 系统,那么建议不要自己安装。
0. 前序知识准备
你应该了解这些知识:
- 严格意义上讲 Linux 不是操作系统, ubuntu 等才是操作系统。所谓各种 linux 操作系统(比如 ubuntu 等)其实是 linux 内核+常见应用程序+配置文件的组合。如何让人用起来舒服,这是各个发行版(比如 ubuntu)干的事。
个人电脑安装 linux 的最小应用程序集合包括:
- 一个 shell,也就是命令行
- coreutils,核心命令集合
一般情况下,其他应用程序包括:
- 多个 shell
- 包管理软件,比如 apt/dpkg 等
- 常用应用程序如 git 和 ssh 等,以及 QQ 、浏览器和输入法等软件(对个人电脑来说)
- 桌面显示套件,需要一层桌面显示管理器+一层桌面,第一种就是 lightdm 和 gdm 等管理器,第二层就是 gnome xfce 或 kde 等桌面环境。没有这个就只能用命令行。
- 万物皆文件概念。比如整个硬盘是 /dev 的某个文件,硬盘的每个分区都是 /dev 的文件,显示屏、鼠标、U盘等都是文件。
- 伪终端概念。一般情况下,个人电脑上,一个 linux 系统开机就有 6-7 个终端(如果有图形化桌面就是7个),也可以有更多,不过你的电脑只有一个屏幕,所以同时一般只能显示一个。这些终端对应的设备文件是
/dev/tty[1-7]
,这被称为终端,或者我可以叫做真终端。这些终端如果不开图形界面,那么只能进行简单的英文输入输出(也可以通过复杂的配置完成中文的 IO)。而你在图形化界面打开的命令行其实是桌面应用程序在图形中勾勒出来的命令行(比如 vscode 的终端,比如 kde 的 Konsole 程序),这就是伪终端,对应的设备文件是/dev/pts[NUMBER]
。 - 硬盘相关概念。
- 首先,很多人都会告诉你 linux 硬盘设备是 /dev/sda*(或sdb等),但是很少有人告诉你这过时了。比较新的电脑的硬盘很多都是 NVME 协议的固态硬盘,这种硬盘在 linux 里显示为
/dev/nvme[接口]n[硬盘编号]p[分区号]
,各种中括号全是数字。比如/dev/nvme0n1p1
- 其次,操作系统是安装在硬盘上的。同一个硬盘可以安装多个操作系统,但是多个操作系统 不可以 共享安装分区,比如说 windows的 C 盘不可安装其他系统,否则原有的系统会被破坏。如果是多个硬盘安装多个操作系统,那么建议选择其中一块硬盘安装引导。关于引导可以参考这个链接。
- 最后,除了安装分区,其他数据分区 可能 可以共享。windows 的文件系统一般是 NTFS 而 linux 一般是 ext4(这里所谓文件系统是硬盘的一个分区的文件管理格式,同一硬盘的不同分区可以有不同的格式),而 windows 无法直接读取 linux 分区(除非用第三方软件,而且一般收费。diskgenius 可以免费读写小文件,但是只能是把文件转移到 windows 分区里或者转移回去,无法直接编辑),反过来 linux 支持 NTFS,可以任意读写数据(请了解 挂载 概念)。这里的硬盘包括 U 盘。
- 引导相关概念。
- 首先,一个硬盘(或者U盘)只可能有0或1个引导,有引导的硬盘才能启动,不管有多少个操作系统。引导应该能够启动安装的各个操作系统。一个只有安装 windows 的电脑,其引导一般是 windows boot manager;只安装 linux 的电脑其引导一般是 grub,而同时含有多个操作系统的一般使用 grub;grub 在更新配置文件的时候使用
os-prober
这一应用程序来检测是否存在其他操作系统并将其添加到配置文件,所以如果安装多系统,请一定安装 os-prober(某些系统没有自带这个,比如 archlinux)并在配置文件中启用它。 - 其次,现在的硬盘一般采取 GPT(GUID) 分区表,这种情况下可以分很多很多分区(够你用了)。与之相对的老式分区称为 MBR 分区表。
- 最后,ESP(EFI)引导问题。你需要检查你的电脑有没有 ESP 分区,怎么检查?自己搜。
1. 安装之前的工作
首先,选择合适的发行版,这一点不需要多讲。
其次,检查电脑是否拥有 ESP 分区,这一点很重要,可惜几乎没有教程会提到。
最后,一般的教程会告诉你烧录 U 盘,用什么 ultraISO 之类的软件。这里有一个小知识,ISO 或者 IMG 文件可以烧录到 U 盘来启动电脑。我的建议是使用 ventoy,可以在 U 盘里放置多个可启动文件,剩下的空间可以装自己的资料,这很重要。
1.1 关于RAMOS
还应该了解有一个东西叫 RAMOS,RAM 就是内存,OS 就是操作系统。这种操作系统在运行的时候,从硬盘加载全部系统文件到内存里,并且对于这些系统文件,运行时只改变其在内存里的内容,不影响其在原硬盘的内容。这种东西一般被用来修复受损的操作系统(因为操作系统启动需要硬盘的文件,硬盘文件损坏会导致无法启动操作系统,而修复损坏的文件需要启动操作系统,RAMOS就打破了这个死锁)。这类操作系统一般很小,功能比较弱,运行效率低,不可定制。但是考虑到其需求,这是足够用的。
很多 RAMOS 都提供了浏览器,可以方便的修复系统。另外,很多 RAMOS 没有提供输入法,在某些时候不得不使用英文。
Windows 的 RAMOS 一般称为 PE,这里推荐 FirPE,建议 windows 用户都用 ventoy 装一个在自己 U 盘上备用。
Linux 的 RAMOS 称为 livecd,有些 livecd 提供了图形化界面。不是所有的发行版都提供了 livecd;我本人用过 ubuntu、kali 和 gentoo 的 livecd,其中前两个提供了图形界面。我觉得 kali 的好用,但是比较大,实际上 ubuntu 的也够用。建议 linux 用户也装一个备用。
对于 linux 操作系统的各种紧急情况(比如崩了,或者删除了不该删的系统文件导致不能启动),我们一般认为能进终端、能开命令行、能上网就有很大概率能解决。而 livecd 能保证进终端,除非电脑硬件问题,所以是解决问题的好助手。
所以,在开始安装 linux 之前,你的 U 盘里应该用 Ventoy 装下了如下的 iso 文件:
- 目标操作系统的安装镜像(必须)
- windows PE(推荐)
- 随便一个 linux 的 livecd,最好与目标操作系统一样(推荐)。
注:经过实测,很多发行版的 livecd 可以提供安装功能,包括 ubuntu、Debian、kali 等,这样可以减少 U 盘空间的使用。
1.2 再论硬盘
在安装操作系统之前,我推荐提前把安装的硬盘空间给分好。这一般涉及在既有操作系统(比如 windows)里删除分区,不需要重新格式化。这样在安装的时候会比较方便。另外,如果安装 linux,那么建议至少有 200GB 的空闲空间,最少也应该有 100GB(虽然作者的 kali linux在安装了巨多软件之后,使用仍然不到 50GB,但是考虑到以后可能安装大软件或者下载很多个人资料,亦或是编译大的项目,以及其他的各种突发情况,建议 200GB);如果空间不够,趁着这几年固态硬盘大幅降价,建议购买新的硬盘安装操作系统。
如果希望把之前硬盘上所有的分区和操作系统都删掉并安装新的操作系统,那么建议使用 RAMOS 进行删除。
linux 对硬盘分区的标识和 windows 不一样。一种比较合适的识别标识的方法是观察硬盘分区容量。这里推荐在 windows 里安装 diskgenius 软件查看硬盘各个分区的容量(因为 windows 的磁盘管理器会隐藏一些分区)并用手机拍个照。因为不同的操作系统和应用程序会使用不同的进制(1000或1024)计算硬盘容量,所以最终观察的时候可能会差一点。diskgenius 也可以用于查看是否有 ESP(EFI) 分区。
1.3 网络连接
安装操作系统的时候很多时候需要网络连接。linux 命令行上网属于一个老大难问题,而安装的时候提供的网络连接方案也大多不方便。这里建议能使用有线网的就使用有线网,需要提前备好网线和网口并完成测试。有线网配置方便,而且速度快。但是实际上现在人们都喜欢用 wifi,有些 WiFi 的登录很困难,比如中科大的 eduroam 和 ustcnet 等。这里建议使用手机连 WiFi 开移动热点并尽量取消密码。
2. 安装时需要注意的
很多教程只讲了这一部分,而对于以下的一些坑都没咋讲。
首先,建议新手找人带你安装(老生常谈),以及有网线就尽量使用网线。
安装时可以参考一些发行版的 wiki,建议同时参考一个知乎等教程或 B 站视频。有些发行版的文档说了一堆乱七八糟的东西,所以有的时候还是需要参考各种网络教程的。
大多数人应该会选择图形化安装,这是一种对新手比较好的方式(让我选,我也这么干)。有些发行版没有图形化安装方式
安装时比较重要的地方,我稍后一一讲解:
- 硬盘空间分配方案,对于正常情况没啥影响,但是如果系统坏了那么就会有用。
- 硬盘分配和格式化,如果安装多系统,小心把原有系统搞没了。
- 引导安装,这涉及电脑能否进入操作系统。
- 重要软件安装,小心进入操作系统之后不能启动。
- 网络连接安装,没搞好可能导致安装成功之后进去系统连不上网,发现缺少联网的软件,而安装这个软件又需要联网才能下载……
破坏性 2>3>4>5>1,不过我按安装过程顺序来讲解。
2.1 硬盘空间分配方案
说白了就是 linux 怎么分区的问题。
我们先考虑一下 windows,以前 windows 分 C 盘 D 盘,很多时候是为了在机械硬盘上快速启动(启动需要用到 C 盘,如果把机械硬盘读取最快的地方分为 C 盘,那么可以快速启动),不过现在既然是固态硬盘的时代,这个理由看来没有很大必要,于是几乎唯一的理由就是,如果需要重装系统,那么几乎必然破坏 C 盘。如果没有分区,则重装的时候可能会丢失原有数据。如果有分区,那么存储在 C 盘以外的数据则大概率能幸免于难。
对于 linux 也一样。咱也说不好万一哪天崩了,重装的时候就有的是好受的。网上不同的分配方案很多,先说我的结论:
我认为主要只需要分为根分区(必须的)和 /home 分区。
对于空间 150G 以下的,建议不要分区。
对于空间 150G-200G 的用户,建议根分区和 /home 分区按照 1:1 分区。
对于空间 200G 以上的用户,如果不打算安装大软件(指vivado这种50G+的),那么根分区可以给 100G,剩下的给 /home;如果安装大软件,则可以给根分区多一点。如果要特别多大软件,可以单独给 /opt 分区。
网上很多人说给 /usr 和 /var 分区的,我觉得没必要,我认为这些主要是在服务器上才需要使用的,个人电脑建议不要分太多分区。
如果你是视频剪辑爱好者、摄影爱好者等有存储大量同类媒体文件或数据文件需求的人,可以考虑给你的数据单独分区,用在 /home/${你的名字}/${数据存储目录}
里,不过不推荐也不反对,以及建议安装之后再处理这一点。
实际安装的时候,一般还会遇到给 boot 单独分区,以及有一个 swap 分区等,这个都是小问题,这里暂时不考虑。
2.2 硬盘分配和格式化
这是破坏性最大、最危险的一点。
首先,还记得之前让你拿手机拍下 windows 里的 diskgenius 磁盘分配情况吗?走到磁盘分配这一步,你可以使用上面显示的容量对照这时候安装界面给你显示的容量来判断哪块分区可用、哪块分区不可用。
Debian 系的发行版在安装的时候,很多人都会遇到什么“手动设置”、“选择最大连续空间安装操作系统”、“清空全部硬盘并安装操作系统”等等。有些教程叫你手动,有些教程叫你自动。
我的建议是:首先肯定不能清空全部硬盘。我本人不推荐直接手动设置,我的建议是选择最大连续空间安装操作系统,选择“整个操作系统用一个分区安装”或“自动分配”(如果有的话)(先不管你是否要分区),然后根据它给的分配情况,把根目录分区参考上一条计算的分区方案调整大小。
这里就要提到 ESP(EFI) 分区的事情了。如果你的电脑安装过 windows,那么大概就有 ESP 分区,大小 100M 到 300M 左右。如果你的电脑有 ESP 分区,那么在自动分配分区之后,大概率会发现它被挂载到了 /boot/efi 上(有的操作系统是 /boot/EFI),而且并非是格式化。这时候建议不要改动它。
如果有 EFI 分区而没有自动识别,则建议手动挂载且不要格式化(这样就有点危险了)。
没有 ESP 分区的建议给 /boot 单独分区,500M 到 1G 左右即可。
swap 分区如果看着碍眼,或者对自己的内存大小有自信够用,可以删除。
2.3 安装 grub 引导
一般操作系统会叫你安装 grub 引导,这一步不可错过,一般没什么问题(kali 貌似容易出这个问题)。一般情况下:没有安装 grub 引导 = 重启直接进入老操作系统。如果没有老操作系统,则可能不能识别到硬盘启动。
如果出现了这种问题,解决方案是:
- 如果能识别到硬盘并启动,那么尝试进入 bios 进入新系统并安装 grub(网上搜怎么装)
- 对于任何情况,可以使用 livecd 启动之后,chroot 到新系统,并安装 grub;几乎任何 linux 的问题都可以通过 livecd+chroot 解决。
- 安装 grub 之后别忘了生成 /boot/grub/grub.cfg(怎么搞自己搜)
2.4 重要软件安装
我们先说一下,安装之后不能正常启动的情况:
- 能进入 grub 界面(也就是选择一个操作系统启动的界面)但是根本进不去操作系统,这种建议重装。
- 能进入 grub 之后,能想办法,比如在 grub 界面按 e 进入编辑启动参数并调整到纯命令行启动,并且能正常使用命令行,这种一般是因为没安装好图形化界面。
- 进入命令行之后到处提示 nouveau 问题,这是显卡驱动的问题,你可以把 nouveau 禁用了就好了。命令行实在不能用,就 livecd+chroot 修改 blacklist 也行。
所以一个主要的大问题是图形桌面的安装,不过一般也不会漏掉这一点。一般的教程应该也不会漏掉它。
2.5 网络连接安装
linux 命令行上网比较困难,网上的各种说法也是乱七八糟。而且最怕出现上网死锁的情况,就是说为了上网需要安装一个软件包,而安装该软件包需要上网。
安装过程中,上网的时候一般会叫你选择一个网卡,不同的系统对同一网卡可能给不同的标识。
- 如果希望连接 wifi,那么请选择
wlan
开头的网卡。 - 如果连接有线网,请选择
en
或eth
等开头的网卡。 -
lo
这样的网卡不要选,不能靠这个上网。
不行就多试一试。
以下内容用于安装之后:本人也不是很懂 linux 上网需要安装什么软件包,我的建议是各种软件包能想到的都装上。如果在安装操作系统的末尾可以进入命令行,那么建议进入命令行尝试安装这些软件包。我本人能想到的有:
- NetworkManager,装一个
- net-tools,也装一个
- wpasupplicant,好像是连 wifi 的,装一个
- iw,连 wifi 好用,也装一个
然后检测一下这些命令是否存在(用 which ${命令}),如果不存在,就装:
- NetworkManager
- ifconfig
- ip
- iw, iwconfig,某些发行版还有 iwctl
- wpa_supplicant
不过对于 Debian 系,很少会出现没有安装足够上网工具的情况。Redhat 系和 archlinux 貌似容易出问题。
如果真的变死锁了,那么 livecd 请。
3. 安装结束后需要做的
3.1 检查能否正常启动
装完之后先重启检查原有系统和新系统能否正常启动。以下罗列部分问题:
- 启动之后直接进入老的 windows,或者根本无法启动直接进入 bios 并且在启动选项里找不到硬盘。
- 原因:大概率是没装
grub
- 解决方案:
livecd+chroot
(记得挂载/dev
等),安装grub
,执行grub-install
和grub-mkconfig
(具体怎么执行自己查)
- 启动之后,
grub
界面只有新系统,找不到老系统
- 原因:大概率是装了
grub
但是没识别到老系统 - 解决方案:进入新系统,安装
os-prober
,修改某文件某配置以启用os-prober
(自己查),执行grub-install
和grub-mkconfig
(第2步应该有诸如:warning: os-prober will be executed
和found ${某操作系统} in ${某磁盘分区}
的输出),重启能看得到新系统。 - 如果第二步有 warning 那一句但是没有 found 那一句,这也是不正常的,可能的原因是:
- 你把原操作系统格式化了,这没救了。
- 有的发行版的 os-prober 不太一样,可能需要你把其他操作系统的根目录(或 C 盘)挂载之后才能识别。
- 启动之后直接进入 grub shell,无法进入操作系统。
- 原因:大概率没有 /boot/grub/grub.cfg
- 解决方案:搜索“gurb shell进入操作系统”,或者 livecd+chroot 进入操作系统,参考第一条解决。
3.2 安装英伟达驱动
很多人的电脑都有 nvidia 独立显卡。如果有玩大型游戏,或者运行GPU计算如机器学习模型的需求,那么可能需要给独显安装驱动。如果没有这个需求,建议不要安装这个。
网上很多人告诉你自己编译安装,这种方式可能会遇到很多坑,比如很少有人会告诉你需要先执行 sudo apt install linux-headers-$(uname -r)
。我的建议是:
sudo apt install nvidia-drivers
这个安装之后可能会寄,所以我放在第一步,如果寄了方便重装系统。(当然如果真寄了建议还是先想办法修一下)
So Nvidia, f**k you! ——by Linus
3.3 配置包管理器
很多发行版都有包管理器,比如 apt 等。这些包管理器从网络源获取软件包来给用户安装软件。但是默认情况下,一般的网络源都在外国,网速可能比较慢。所以建议改为国内源,比如中科大源就是很快又很好用的源。
更新源之后建议更新软件包,因为安装操作系统的时候下载的软件包可能比较老,而且会有部分软件无法被检索到:
sudo apt update
sudo apt upgrade
第一条的目的是下载软件包名字列表,目的是检查有哪些软件可供安装、有哪些软件可以更新。如果某次安装软件的时候,软件名不再可供安装的列表里,那么就无法安装。
第二条是实质上更新那些已安装而可更新的软件。
3.4 输入法安装
这篇文档的读者很可能是中国人,很可能需要安装中文输入法。Linux 输入法有 fcitx 和 ibus 等框架,我的建议是安装 fcitx 框架的搜狗拼音输入法。你需要到官网下载安装包。安装包依赖比较多,如果是 Debian 系,那么 dpkg 安装大概会报错,建议:
sudo apt install xxx.deb # 这样可以让 apt 自己解决依赖问题
安装之后是无法看到的,我的经验是重启一次能看到输入法图标,但是点进去并没有搜狗。再重启一次就有了。当然实际情况可能比较复杂,需要自己调整。
更新提示:实测 2023 年 8 月更新的搜狗输入法,自带的 libqt6 等库有问题。亲测以下解决方案有可能能够修复:解决了一个在 LinuxMint 中运行搜狗拼音输入法的问题
3.5 shell 的配置
一般 linux 默认 shell 是 bash,并不怎么好用(虽然比 windows 的大多数都好很多)。使用好用的 shell 能提示 linux 操作体验。
一种方式是配置 zsh(z-shell),是现在比较流行的方式。zsh 的配置方式比较多,我也写了一种可用的配置方式,参考这里;另外其实它还有很多实用的配置方式,请自行搜索。
另一种相对小众的方案是 fish,这个不需要配置,开箱即用,但是我觉得不如 zsh 好用:
sudo apt install fish
fish # 进入 fish 体验
chsh -s $(which fish) # 如果希望默认 shell 为 fish
这还没完。很多时候需要用 sudo 执行命令。普通用户执行 sudo 需要输入密码,每次输入密码之后默认能管用五分钟。这种事有点麻烦,如果你不希望 sudo 输入密码,那么这也是可以配置的,具体怎么做自己搜,但是 方法一般会叫你第一步先 sudo vim(或 gedit/nano) /etc/sudoers
,这是不安全的,请使用 sudo visudo
替代以上命令。
不过这样子做可能会方便恶意脚本攻击,虽然这样的事情其实很少。安全和效率请你自己权衡。
3.6 开机自动挂载
如果工作中会经常使用到其他系统的文件,那么可以设置开机时自动挂载这些分区。具体怎么做自己搜。
3.7 桌面美化
很多发行版安装之后看起来不够美观,不符合个人习惯。一般我们都会调整一些显示信息,比如桌面壁纸、窗口样式、字体等。
首先要解决的是字体问题。一般的 linux 发行版自带的字体很少,可以从 windows 那里把字体拿过来:
- 首先建立一个目录存放来自 windows 的字体:
sudo mkdir /usr/share/fonts/windows
,其实随便什么地方基本都可以,但是建议在这里。 - 挂载 windows 的 C 盘
- 把 windows 盘的
C:\Windows\Fonts
的文件放到上边建立的目录里,大概 500M,虽然大部分都用不上,不过如果你不知道如何裁剪,那么可以全都拿过去。 - 自己搜索“linux如何添加字体”并对该目录执行。
然后可以调整桌面美化,各种桌面主题网上有很多,也有一些不同的美化配置。如果你喜欢 windows 的界面,而且使用 xfce 的桌面,可以参考我的文章。
3.8 常用应用安装
编程 IDE: VSCode
浏览器:根据喜好可以选择 edge 或 chrome 等。
上边那俩经常更新,而且时不时在执行 apt upgrade 的时候弹出来恶心人,可以自行搜索“apt关闭软件自动更新”使用 apt-mark 解决。
通讯软件:
- QQ:QQ 目前已经有新的 linux 版本了,经过大约半年的更新截止 2023-06-02,已经推出了 3.1.2 版本(官网上还是 3.1.1,可以下载安装之后更新到新版本),已经解决了大部分 bug,使用体验比较好。不过仍然有功能欠缺,比如无法匿名发言。
- 微信:~~截止 2023-06-02,微信还没有 linux 版本。如果有需要,推荐使用优麒麟打包的微信。很多人给的 wine 的方法并不一定能成功。~~推荐使用我打包的微信:
办公软件:可以使用 WPS,也可以使用开源的 libreoffice 工作。
画图:我没有看到 linux 比较好的画图软件,可以使用 kirta,不过相比 windows 画图更复杂,相比 Photoshop 又功能不足。
3.9 电源管理
本人亲测,linux 安装之后可能比较费电。可以安装 tlp 和 tlp-stat 从而大幅提升电脑续航水平。
3.10 个人配置
你可能需要配置 git,vim 等。
可以安装 tldr 用于快速查看常用命令的用途:sudo apt install tldr
举例:
$ tldr ln
ln
创建指向文件和目录的链接。
更多信息:https://www.gnu.org/software/coreutils/ln.
- 创建指向文件或目录的符号链接:
ln -s /路径/到/文件或目录 路径/到/符号链接
- 覆盖现有的符号链接以指向其他文件:
ln -sf /路径/到/新文件 路径/到/符号链接
- 创建文件的硬链接:
ln /路径/到/文件 路径/到/硬链接
另外,很多发行版如果安装的时候选择中文,而且启动桌面,则会在主目录下生成一堆中文路径:
$ ls ~
桌面 下载 ……
这里建议全改成英文,比如 desktop 和 download 等。另外请搜索“linux修改桌面路径”把对应的路径也改掉。