本文希望能尽可能地帮助没有任何基础知识但对Linux十分感兴趣的同学完成Arch Linux的安装,但本文不以安装为目的,而以学习为目的。
前言
我从上个暑假开始接触Linux,当时正值新冠疫情网课,家里的电脑和我同一个辈分,是WinXP的系统,有各种弹窗,运行速度令人担忧,并且WinXP已经停止维护了。于是上网查了一下,发现了这篇文章安装Bodhi Linux让老旧电脑重新焕发活力,于是开始了Linux的奇妙旅程。后来又了解到Arch Linux,便经过了一番努力,拥有了自己的U盘上的Arch Linux。它的确帮助我解决了不少问题,也让我学会了新的知识。
现在,有许多同学问我Linux学起来难吗,要花费多少精力,我也清楚没有任何基础接触Linux的尴尬,于是我想写下这篇文章,帮助大家减轻心理负担。
下面,请允许我把读者视为只会在Windows上点点鼠标的初学者。我会把基本的概念一一解释,其中也有不少废话,有能力的人请自行跳过。
安装前的准备
心理准备(可跳)
学习Arch Linux,至少就我而言,是一件趣事。不必太心急,遇到一个困难,解决一个困难,每解决一个困难都会有巨大的成就感。
遇到困难,要学会自己寻找解决方法,ArchWiki是你第一个应该参考的,如果不行,便要善用其他网络资源。
当然,你也可以向其他人寻求帮助。(Feel free to ask me!虽然我的回答不一定及时)
物质准备
一台计算机,网络,两个USB。
- 计算机没有要求
- 网络最好是有线网,因为Arch的安装需要通过网络来获取,有线连接较稳定。
- 为了方便,我们把一个U盘叫作系统盘,另一个称作引导盘。系统盘就是最终安装Arch Linux的U盘,读写速度要快(USB3.0差不多了),容量要大(毕竟以后作为使用,要装软件,要放文件。我使用的是32G的USB3.0,有需求的可以再大,有钱的可以直接用移动硬盘。)
基础问答(可跳)
什么是Linux?
和Windows、Mac一样,Linux也是一种操作系统。操作系统,换言之,就是计算机的思想,由她来管理整个计算机。Linux还有传奇的发展历史,有兴趣的同学可以自行搜索。
为什么使用Linux?
我的建议是有钱当然可以选择Mac,打游戏就基本是Windows了。根据我使用Linux的经历来看,Linux有以下特点:
- 开源(请自行搜索开源协议)
- 安全(这也是开源带来的好处,毕竟源码公开,没人往里面塞病毒)
- 稳定(大部分服务器都使用Linux,可以一直跑很多年)
- 快速(Linux对计算机的要求很低,绝大部分的运行都很出色)
总而言之,如果你烦透了Windows的各种推销、各种坑钱,那么Linux可以给你纯朴、高效的体验。
为什么选择Arch Linux?
Linux有许多发行版包括著名的RedHat、CentOS、Debian、Ubuntu等等。大家可以看看Archwiki的官方描述,事实上Arch拥有所有Linux发行版中最大的软件仓库,提供了可高度定制化的环境,可以说是个人用户的首选。
为什么安装在U盘上?
现在大家去买电脑,都会送Windows系统,盗版的系统也到处都是,Windows也能满足正常的办公,没有必要把Linux装在硬盘上了。而装在U盘上的系统可以随身携带,加上Archlinux的高度适应性,就可以在几乎任何一台别人的计算机上使用自己的系统了,隐私性也很高。
Tips
- 所有命令输入完毕按
Enter
执行 - 命令可以用
Tab
键补全 - Live环境中大写锁定切换为
Shift+CapsLk
,chroot环境为CapsLk
安装
先贴一下参考链接:
Install Arch Linux on a removable medium (简体中文)
准备启动盘
下载安装镜像
镜像站,找到China,选择镜像站(随便选),下载archlinux- -x86_64.iso
刻录U盘(启动盘)
进入Live环境
将启动盘插入计算机,开机,进入主板
有些主板在开机界面会有按键提示(请注意界面左下角)进入bios(主板);如果没有,可以根据自己的主板型号搜索。将Secure Boot设置为disabled以禁用安全启动,然后允许U盘启动。具体请搜索bios设置u盘启动。
进入启动菜单,选择自己的启动盘,启动
系统盘分区(以UEFI启动,32G的U盘为例)
分区是将硬盘的可用空间划分为多个可以独立访问的区块。
每个分区在使用前需要格式化为 文件系统 。
分区信息被存放在分区表中。目前有两种主流的模式:传统的 Master Boot Record 和新的 GUID Partition Table。后者功能更强大,解决了许多MBR的限制。
根分区
根目录是目录树的顶层,这里是主文件系统挂载和其他文件系统挂靠的地方。所有文件和目录都在根目录
/
显示,即使它们实际上存储在其他的物理设备上。根文件系统中的内容应该足以启动、恢复、修复系统。因此/
目录下的特定目录是不能作为独立分区的。/
分区或叫根分区是最重要而且必需的,需要最先挂载,其他其他分区可以被它取代。EFI系统分区
EFI 系统分区(也称为 ESP 或者 EFISYS)是一个 FAT32 格式的物理分区 (在硬盘主分区表上,而不是 LVM 或软件 RAID 等等) ,从这里 UEFI 固件启动 UEFI 引导器和应用程序。
它与操作系统无关而是作为 EFI 固件要启动的引导器和应用程序的存储空间,是 UEFI 启动所必须。
推荐使用 GPT 和 UEFI 搭配因为有的 UEFI 固件不支持 UEFI-MBR 启动。
- 交换空间(可选) 参阅:swap
交换空间通常是一个磁盘分区,但是也可以是一个文件。用户可以在安装 Arch Linux 的时候创建交换空间,或者在安装后的任何时间建立交换空间。交换空间可用于两个目的,将虚拟内存扩大到超过已安装的物理内存的容量,也可用于 suspend-to-disk 支持。
使用swap扩展您的虚拟内存是否有好处取决与您的物理内存。如果物理内存不足以支撑您日常使用全部的程序的话(体现在日常使用时内存满了导致的卡顿,死机),使用swap也许会对您有些帮助。这样可以避免 out of memory conditions,Linux内核OOM Killer机制将尝试通过杀进程的方式来自动释放内存。如果您想让虚拟内存足够使用,请添加相应的差值(或更多)作为交换空间。
启用交换的最大缺点是性能较低,请参阅:#性能优化。因此,启用swap是个人喜好问题:当物理内存用完时,有些人更喜欢杀死程序而不是启用交换,而另一些人更喜欢启用交换和较慢的系统。
由于U盘的空间有限,加上现在的计算机内存越来越大,在这里我不推荐使用swap分区。如果你使用固态硬盘并且有需求,可以自己增加。
目录
Linux系统使用目录树的形式对硬盘(包括虚拟内存盘)进行读取,所有其他目录都挂载在/目录下,再依次挂载下去。
/目录下面挂有如下目录:bin boot dev etc home lib lib64 mnt opt proc root run sbin srv sys tmp usr var .这些目录中我们涉及到
/boot
/home
需要了解。/boot
/boot
分区包含内核、ramdisk 镜像以及 bootloader 配置文件和 bootloader stage。它也可以存放内核在执行用户态程序之前所使用的其他数据。/boot
在日常系统运行中并不需要,只在启动和内核升级(包括重建initial ramdisk)的时候用到。/home
/home
目录包含用户定义的配置文件、缓存、应用程序数据和媒体文件。简单来说/home
就是用户个人场所。可以设置home分区并将其挂载在
/home
下,当然,如果U盘大小不允许,也可以不设置,我个人是不使用的(32G的U盘)
挂载点 | 分区 | 分区类型 | 建议大小 |
---|---|---|---|
/mnt/boot/efi |
/dev/*efi_system_partition(efi 系统分区)* |
EFI 系统分区 | 至少 260 MiB |
/mnt |
/dev/*root_partition(根分区)* |
Linux x86-64 根目录 (/) | 自定义(/分区 要用于安装软件,20~50G即可) |
/home |
/dev/*home_partition(home分区)* |
Linux home | 自定义 |
建立硬盘分区
将系统盘插入计算机,在Live环境中使用fdisk命令查看分区(也可以使用lsblk),并创建分区(也可以使用cfdisk等)。以下以fdisk为例:
fdisk -l # 查看分区
找到自己的系统盘
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors Disk model: SAMSUNG MZVLB512HBJQ-000L2 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 9192D0F6-8CA5-465B-9B8C-B68598D3ED72 Device Start End Sectors Size Type /dev/nvme0n1p1 2048 534527 532480 260M EFI System /dev/nvme0n1p2 534528 567295 32768 16M Microsoft reserved /dev/nvme0n1p3 567296 419997695 419430400 200G Microsoft basic data /dev/nvme0n1p4 419997696 788451327 368453632 175.7G Microsoft basic data /dev/nvme0n1p5 788451328 998164479 209713152 100G Microsoft basic data /dev/nvme0n1p6 998166528 1000214527 2048000 1000M Windows recovery environment Disk /dev/sda: 28.65 GiB, 30765219840 bytes, 60088320 sectors Disk model: SanDisk 3.2Gen1 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: D59BCF13-45C9-4E42-8034-0E098AEDFC88 Device Start End Sectors Size Type /dev/sda1 2048 616447 614400 300M EFI System /dev/sda2 616448 60088286 59471839 28.4G Linux root (x86)
在这里(实例中)就是
/dev/sda
,可以看到我的U盘是SanDisk 3.2Gen1细心的同学可以发现32G的U盘只有28.65G
这是计算方法不同造成的
存储制造商为了计算方便,使用十进制计算方法,是以1000(103)为换算单位的,即1GB=1000MB ;而计算机使用二进制,系统是用1024(210)为换算单位的,即1GB=1024MB 。这样计算机识别出的U盘容量就要小于U盘生产厂标称的容量,实际使用容量约为标示容量的90%左右。因此,所有U盘的实际容量都要小于标注容量,一般来说,8G为7.45G左右,16G为14.9G左右,以此类推。
因为存储的最小单位为字节(Byte)以16G的U盘为例,计算如下:
制造商计算的容量为:16G=1610001000*1000(Byte)=16000000(Bytes)
而系统计算的实际容量应为:
16000000/1024/1024/1024=14.9012(GB)
得出的结果和14.7GB差不多。
1KB=1000Bytes
1MB=1000KB
1GB=1000MB 。
而操作系统的换算则为
1KB=1024Bytes
1MB=1024KB
1GB=1024MB 。
这就产生了存储设备标配容量和实际使用容量出现差异的情况。
创建分区(以
/dev/sda
为例,32G的U盘,300M的EFI分区,剩余都划给根分区)fdisk /dev/sda
先按
m
for help(按下m然后Enter回车),如下帮助Help: GPT M enter protective/hybrid MBR Generic d delete a partition F list free unpartitioned space l list known partition types n add a new partition p print the partition table t change a partition type v verify the partition table i print information about a partition Misc m print this menu x extra functionality (experts only) Script I load disk layout from sfdisk script file O dump disk layout to sfdisk script file Save & Exit w write table to disk and exit q quit without saving changes Create a new label g create a new empty GPT partition table G create a new empty SGI (IRIX) partition table o create a new empty DOS partition table s create a new empty Sun partition table
g
创建新的GPT分区表n
创建第一个新分区,起始位置默认即可(按下Enter),终止位置:+300M
n
创建第二个新分区,都默认。t
改变分区类型不同的分区类型有不同的UUID,可以理解为有不同的身份证明,便于操作系统识别,在之后会有用处
选择
1
,即我们的300M的EFI分区l
查看分区类型的种类,列出部分如下:1 EFI System C12A7328-F81F-11D2-BA4B-00A0C93EC93B 2 MBR partition scheme 024DEE41-33E7-11D3-9D69-0008C781F39F 3 Intel Fast Flash D3BFE2DE-3DAF-11DF-BA40-E3A556D89593 4 BIOS boot 21686148-6449-6E6F-744E-656564454649 5 Sony boot partition F4019732-066E-4E12-8273-346C5641494F 6 Lenovo boot partition BFBFAFE7-A34F-448A-9A5B-6213EB736C22 7 PowerPC PReP boot 9E1A2D38-C612-4316-AA26-8B49521E5A8B 8 ONIE boot 7412F7D5-A156-4B13-81DC-867174929325 9 ONIE config D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149 10 Microsoft reserved E3C9E316-0B5C-4DB8-817D-F92DF00215AE 11 Microsoft basic data EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 12 Microsoft LDM metadata 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3 13 Microsoft LDM data AF9B60A0-1431-4F62-BC68-3311714A69AD 14 Windows recovery environment DE94BBA4-06D1-4D40-A16A-BFD50179D6AC 15 IBM General Parallel Fs 37AFFC90-EF7D-4E96-91C3-2D7AE055B174 16 Microsoft Storage Spaces E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D 17 HP-UX data 75894C1E-3AEB-11D3-B7C1-7B03A0000000 18 HP-UX service E2A1E728-32E3-11D6-A682-7B03A0000000 19 Linux swap 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F 20 Linux filesystem 0FC63DAF-8483-4772-8E79-3D69D8477DE4 21 Linux server data 3B8F8425-20E0-4F3B-907F-1A25A76F98E8 22 Linux root (x86) 44479540-F297-41B2-9AF7-D131D5F0458A 23 Linux root (x86-64) 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
:q
退出查看选择1 EFI System
再
t
改变类型,选择2,即我们的根分区,选择23 Linux root (x86-64)p
打印当前分区表Disk /dev/sda: 28.65 GiB, 30765219840 bytes, 60088320 sectors Disk model: SanDisk 3.2Gen1 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: D59BCF13-45C9-4E42-8034-0E098AEDFC88 Device Start End Sectors Size Type /dev/sda1 2048 616447 614400 300M EFI System /dev/sda2 616448 60088286 59471839 28.4G Linux root (x86)
如图,我们创建了两个分区,一个为
/dev/sda1
,是EFI分区;一个为/dev/sda2
,是根分区。w
保存并退出(写入新的分区表)格式化分区(决定分区的文件系统)
文件系统控制数据的读和写。如果没有文件系统,储存介质里的信息就会变成一块无法理解的数据。通过把数据分块、命名,不同的信息就可以被隔离、分辨。每组数据被命名为“文件”是取自纸质信息系统的命名方式。而“文件系统”是指用于管理信息的分组和命名的结构和逻辑规则。
文件系统有很多,每个磁盘分区可以而且只可以使用其中的某一个。每种文件系统有自己的优缺点和独有特性。
EFI分区需要fat32格式,
/
分区需要ext4格式,如果创建了home分区(可以选择ext4格式,读写较快;也可以选择ntfs或exfat,便于与Windows进行数据交换,Windows无法识别ext4)分区格式化命令:
mkfs.fat -F32 /dev/sda1 # EFI分区 mkfs.ext4 /dev/sda2 # /分区 mkswap /dev/swap_partition # 交换分区 mkfs.ntfs /dev/home_partition # home分区格式化为ntfs mkfs.exfat /dev/home_partition # home分区格式化为exfat
可以给分区加上Lable(卷标,也就是名字),则命令如下:
mkfs.fat -F32 /dev/sda1 -n "名字" mkfs.ext4 /dev/sda2 -L "名字" mkswap /dev/swap_partition mkfs.ntfs -f /dev/home_partition -L "名字" # -f表示快速格式化,最好加上 mkfs.exfat /dev/home_partition -L "名字"
将home分区格式化为ext4之外的格式并写入fstab默认挂载会使得该分区的所有者为root,新建用户后出现权限问题,请做好调试的准备——2022/2/8更新
挂载分区
先回忆一下表格
挂载点 分区 分区类型 建议大小 /mnt/boot/efi
/dev/*efi_system_partition(efi 系统分区)*
我们的/dev/sda1
EFI 系统分区 至少 260 MiB /mnt
/dev/*root_partition(根分区)*
我们的/dev/sda2
Linux x86-64 根目录 (/) 自定义( /分区
要用于安装软件,20~50G即可)/home
/dev/*home_partition(home分区)*
Linux home 自定义 挂载根分区
mount /dev/sda2 /mnt
挂载EFI分区(不推荐现在挂载,因为EFI分区只在启动时被读取,内核启动后就没用了,所以没有必要写入fstab默认挂载,可以在后面挂载) ——
2022/2/8更新
mkdir /mnt/boot mkdir /mnt/boot/efi mount /dev/sda1 /mnt/boot/efi
挂载home分区
mkdir /mnt/home mount /dev/home_partition /mnt/home
启用swap分区
swapon /dev/swap_partition
mkdir
就是新建一个文件夹,mount
就是把分区挂载到某个文件夹下使其能被访问
安装
联网
有线网
dhcpcd
无线网
iwctl # 进入iwd的交互界面 [iwd]# help # 查看帮助 [iwd]# device list #查看网卡 [iwd]# station wlan0 scan # 扫描 [iwd]# station wlan0 get-networks # 查看网络 [iwd]# station wlan0 connect **** # 连接 [iwd]# exit # 退出交互界面
有线网(静态ip)
ip l # 查看网卡 ip l set enps0(网卡) up # 打开网卡 ip a add 192.168.17.201/24 dev enps0 # 加入ip根据自己的 ip r add default via 192.168.17.1 # 增加网关,与上面对应
检查网络连接
ping -c 4 www.baidu.com
出现如下则成功
PING www.a.shifen.com (182.61.200.6) 56(84) bytes of data. 64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=1 ttl=50 time=28.1 ms 64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=2 ttl=50 time=30.5 ms 64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=3 ttl=50 time=30.5 ms 64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=4 ttl=50 time=30.2 ms --- www.a.shifen.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 28.132/29.863/30.549/1.007 ms
安装
pacstrap /mnt base linux linux-firmware base-devel vim nano dhcpcd iwd intel-ucode amd-ucode
这一步就是将ArchLinux的内核、驱动、基本包、文本编辑器、联网工具、微码安装到
/mnt
即我们的根分区上
配置系统
Fstab
用以下命令生成 fstab 文件 (用
-U
或-L
选项设置UUID 或卷标,前提是已经设置卷标):genfstab -U /mnt >> /mnt/etc/fstab
检查一下生成的
/mnt/etc/fstab
文件是否正确:cat /mnt/etc/fstab
Chroot
Change root 到新安装的系统:
arch-chroot /mnt
本地化
程序和库如果需要本地化文本,都依赖 Locale,后者明确规定了地域、货币、时区日期的格式、字符排列方式和其他本地化标准。
需在这两个文件设置:
locale.gen
与locale.conf
编辑
/etc/locale.gen
,然后取消掉en_US.UTF-8 UTF-8
和zh_CN.UTF-8 UTF-8
前的注释(#)。nano /etc/locale.gen
在nano中
Ctrl+w
可以查找,Ctrl+x
退出(退出时按y确认修改,再按Enter)接着执行
locale-gen
以生成 locale 信息:locale-gen
然后创建 locale.conf(5) 文件
echo "LANG=en_US.UTF-8" >> /etc/locale.conf
创建主机名
echo "你自己取的主机名" >> /etc/hostname
编辑/etc/hosts(使用nano)如下:
127.0.0.1 localhost ::1 localhost 127.0.1.1 myhostname.localdomain myhostname
Initramfs(此步骤为U盘安装必需)
创建新的 initramfs
创建 RAM Disk 前,修改
/etc/mkinitcpio.conf
,将block
和keyboard
钩子移动到autodetect
前面。只有这样生成的早期用户空间才能包含支持不同的系统硬件的模块。nano /etc/mkinitcpio.conf
将
HOOKS
(即钩子)修改如下:HOOKS=(base udev block keyboard autodetect modconf filesystems fsck)
生成新的RAM Disk
mkinitcpio -P
Root 密码
root是Linux中的管理员用户,拥有最高权限
设置 Root 密码:
passwd
安装引导程序
因为这里需要使用Pacman(Archlinux的包管理器)安装软件,先修改Pacman的配置
nano /etc/pacman.d/mirrorlist
默认已经按照速度排序,先
Ctrl+\
将所有Server
替换成#Server
,再除去第一个Server
的#
即可安装grub和efibootmgr
pacman -Sy grub efibootmgr
EFI挂载
mkdir -p /boot/efi mount /dev/sda1 /boot/efi
——
2022/2/8更新
设置grub
grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable --recheck
生成 GRUB 配置:
grub-mkconfig -o /boot/grub/grub.cfg
添加用户
正常情况下应该使用普通用户登录,故创建用户如下:
useradd -m -g wheel -s /bin/bash username(你的用户名)
设置用户密码
passwd username(你的用户名)
为用户添加sudo权限:
nano /etc/sudoers
除去
## %wheel ALL=(ALL)ALL
前的##
重启
输入
exit
或按Ctrl+d
退出 chroot 环境。执行
reboot
重启。结束
2022/2/8更新
有同学根据这篇文章完成了第一次ArchLinux的安装,并且发现其中有一些笔误和需要更新的地方而向我指出。在此感谢各位,Arch的安装经常有变化,希望大家发现问题后能够指出。
此外,由于部分主板不支持UEFI启动,在参考文章ArchLinux USB中已经有BIOS&UEFI双引导的方案提高兼容性。由于现在大部分计算机都已支持UEFI,所以之前没有特别指出这一点。但是有同学遇到了不支持UEFI的情况,并已对此提供了详尽的解释和解决方案。传送门
:ggdab~~
再次感谢各位!