安装Arch Linux的记录

第一次安装双系统,虽然是参考b站教程的,但还是很有成就感,故记录一下这个过程,顺便仔细学习一下各个命令的作用。

本文仅为学习记录,文末给出了参考来源,若有侵权请联系我删除🙏

安装过程

准备工作

  1. 首先登录官网从国内镜像源下载arch linux系统镜像
  2. 下载rufus烧录arch linux镜像到U盘,默认设置就行

image-20231202223105417

  1. 为arch linux分配磁盘空间,大概20G就够用

​ 我这里能压缩的磁盘空间很少,但这个盘还剩很多空间,于是我使用了傲梅分区助手

设置网络

重启进入bios,设置为从u盘启动,开始安装arch linux

image-20231202224005368

rfkill list查看列表

image-20231202223727234

rfkill unblock wifi解除wifi锁定

ip link查看网卡,一般网卡名为wlan0

ip link set wlan0 up启用网卡

ip link set DEVICE { up | down | arp { on | off } | name NEWNAME | address LLADDR }
选项说明:
dev DEVICE:指定要操作的设备名
up and down:启动或停用该设备
arp on or arp off:启用或禁用该设备的arp协议
name NAME:修改指定设备的名称,建议不要在该接口处于运行状态或已分配IP地址时重命名
address LLADDRESS:设置指定接口的MAC地址

连接wifi

1
2
3
4
5
6
7
8
9
10
iwctl   //在 Linux 中,"ctl" 通常代表 "control" 或 "controller"。例如,在 SysV 初始化系统中,/etc/init.d 目录下的脚本通常以 "ctl" 作为后缀,表示它们是用于控制系统服务的控制器。此外,在某些驱动程序中,CTL 可能代表 "control",表示该驱动程序控制某个设备的操作。
station wlan0 scan

station wlan0 get-networks

station wlan0 connect [wifi名字] //这里有个小技巧,如果遇到中文乱码,可以打出前面的非中文字符,再按下Tab匹配
//接着输入密码
exit

ping baidu.com //检查网络是否正常

image-20231202224913623

设置时间同步

1
2
3
timedatectl set-ntp true //开启ntp时间同步

timedatectl status

image-20231202225330770

分配磁盘空间

1
2
3
fdisk -l  //查看磁盘状态

fdisk /dev/nvme...n.... //nvme...n.... 由图为刚刚为arch linux分配空间的磁盘

image-20231202225956849 image-20231202225904146

1
2
3
4
5
6
7
//p 查看布局
//n 新建分区
n
7 //这里给出为linux的交换分区给出空间的磁盘的序号
+4G //这里建立linux的交换分区,大小为4GB
n
//直接回车表示把剩余默认空间都给linux的根分区

image-20231202231143106

UEFI是指主板的引导启动方式

GPT是硬盘的分区模式

EFI是GPT硬盘分区模式中的系统启动分区

EFI分区全称是EFI system partition,一般简写成EFI分区或者ESP分区

EFI分区是用来引导系统启动的

分配好的空间如图

image-20231202231551277

分区格式化

创建好的分区必须格式化为一种文件系统,Linux 上常见的文件系统有 ext4,btrfs,xfs 等。建议第一次安装的读者使用 ext4 文件系统。btrfs 提供子卷、写时复制、压缩、快照等高级功能,适合更加熟练的用户。

mkfs命令

image-20231202231817070

1
2
3
4
mkfs.btrfs /dev/nvme...n...1  //将根目录分区格式化为btrfs文件系统

mkswap /dev/nvme...n...2 //对交换分区进行操作,mkswap命令用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般都将整个文件或者设备作为交换区。
swapon /dev/nvme...n...2

image-20231202232822725

挂载分区

mount命令的功能是将文件系统挂载到目录

1
2
3
4
5
6
7
8
9
fdisk -l

mount /dev/nvme1n.... /mnt //将根分区挂载

mkdir /mnt/boot //根目录下生成文件夹boot

mount dev/nvme0n.... /mnt/boot //将引导分区挂载到/mnt/boot下

//mnt - 此目录主要是作为挂载点使用。通常包括系统引导后被挂载的文件系统的挂载点。如挂载Windows下的某个分区。

最终的布局

从上到下分别是 引导分区、根分区、交换分区

Linux分区和挂载是Linux系统管理硬盘的两个重要概念。分区是将硬盘划分为不同的逻辑区域,以便存储不同类型的数据和文件。挂载是将一个分区与一个目录联系起来,使得该目录可以访问该分区中的数据和文件。
linux为什么要挂载? 如果硬盘是一片空地,那么分区和挂载就是把一片空地建成不同的房间(分区),每个房间存放不同类型的货物,再把房间的钥匙发给使用这个房间里的货物的人(挂载)。如果不挂载,那么人要使用某个货物时,就会因为没有钥匙而无法使用这个货物。
为什么不直接访问/dev目录? 直接访问/dev目录,就相当于把房间都拆了,直接从空地上寻找需要的货物,这不方便,也不安全(空地货物可能会被弄乱)
Linux分区和挂载有以下几个用途:
提高系统的安全性。没有挂载的分区是无法访问的,这样可以防止恶意用户或程序对系统造成破坏。
提高系统的效率。通过合理地划分和挂载分区,可以减少系统维护文件的规模,提高磁盘空间的利用率和读写速度。
适应多用户操作系统。Linux是一个多用户操作系统,不同用户可能有不同的权限和需求。通过分区和挂载,可以实现对用户空间、临时文件、日志文件等的隔离和管理。

img

选择软件镜像源

1
2
3
4
5
6
nano /etc/pacman.d/mirrorlist //手动添加镜像

Server =https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server =......
//ctrl+x保存退出

image-20231202235356804

在 Arch Linux 中,软件仓库就好比手机中的应用商店,软件包是通过软件仓库进行分发的。软件仓库镜像是软件仓库的复制品,同一个软件仓库可以在世界各地建立软件仓库镜像,以便于不同地区的用户下载。因此选择一个合适的软件仓库镜像对于您更新软件包数据库以及下载软件包的速度有很大影响。

pacman命令

image-20231202235029820

nano编辑器

image-20231202234934124

安装基础包

我们使用 pacstrap 安装 base,linux,linux-firmware 三个软件包,它们分别是基础包组,linux 内核和驱动程序。此外,如果您使用 2019 年及以后生产的笔记本电脑,可能需要安装 sof-firmware,否则可能没有声音[23]

Arch linux 官方提供了 linux,linux-lts,linux-zen,linux-hardened 内核[24],但是对于初学者,只推荐使用 linux 内核。

1
2
3
pacstrap -K /mnt base base-devel linux linux-firmware sudo nano vim networkmanager intel-ucode
//安装base,base-devel,linux,linux-firmware,sudo,nano,vim,networkmanager,intel-ucode
//intel-ucode是CPU微码,用于intel的cpu固件更新???这里我不确定(

image-20231202235643268

1
2
3
pacman -Sy archlinux-keyring //如若报错则需更新keyring

pacstrap -K /mnt base base-devel linux linux-firmware sudo nano vim networkmanager intel-ucode //然后重新安装

fstab是一个系统文件,决定了系统启动时如何自动挂载分区。没有 fstab,系统将找不到根分区,从而无法启动。fstab 有一定的格式,我们用一个例子说明 fstab 文件的格式。

1
genfstab -U/mnt >> /mnt/ect/fstab  

其中“genfstab -U /mnt”是以 UUID 的描述方式生成 fstab,“>>” 的意思是,将输出结果附加在后面的文件之后。

image-20231203000926638

生成完成后,记得使用 cat 命令打印文件内容,仔细检查一遍。

1
cat /mnt/etc/fstab

使用chroot

使用chroot切换到安装的新系统

1
arch-chroot /mnt

这里我顿悟了,之前的根目录在/mnt下,这里chroot直接把根目录移动回系统/下,/mnt相当于完成汉诺塔的倒数第二步

chroot命令

image-20231203001312188

设置时区

1
2
3
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //设置上海时间

hwclock --systohc //设置硬件时间

ln命令

image-20231203001502785

hwclock命令

image-20231203001608909

本地化

我们将设置 locale、终端键盘布局和字体。locale 决定了系统的语言和格式,包括终端显示哪种语言,数字、时间和货币以哪国的格式显示等等。

1
2
3
nano /etc/locale.gen
//取消en_US.UTF-8 和zh_CN.UTF-8前的注释
locale-gen //生成locale
image-20231203004524408

image-20231203004557543

1
2
nano /etc/locale.conf //修改locale.conf文件
//输入LANG=en_US.UTF-8,ctrl+x保存
image-20231203004942416

确定系统名和网络管理系统配置

1
2
3
4
nano /etc/hostname
//输入archlinux,确定系统名
systemctl enable NetworkManager//注意大小写
//使用 systemd 设置 NetworkManager 开机自动启动

设置root密码

root 用户是 Linux 系统中权限最高的用户,有些敏感的操作必须通过 root 用户进行,比如使用 pacman。我们之前进行所有的操作也都是以 root 用户进行的。也正是因为 root 的权限过高,如果使用不当会造成安全问题,所以我们在下一篇文章中会新建一个普通用户来进行日常的操作。在这里我们需要为 root 用户设置一个密码。

1
2
3
passwd
//输入密码,这里不会显示已经输入的密码
//再次输入密码
image-20231203005458592

新建普通用户

1
2
3
4
useradd -m -G wheel -s /bin/bash [username] //将用户添加到wheel组,root也在wheel组

passwd [username]
//输入密码并重复输入确定

image-20231203005911850

1
2
3
visudo //打开/etc/sudoers文件进行编辑设置sudo
//这里使用传统vim编辑器,按i进入编辑模式,按esc退出编辑模式,输入:wq退出保存
//取消%wheel ALL前的注释
image-20231203010135452

这里的意思是让wheel组下的所有用户都能免去输入密码使用sudo权限

sudo权限

image-20231203010514566

Grub安装

GRUB 是什么?

GRUB 是一个用于加载和管理系统启动的完整程序。它是 Linux 发行版中最常见的*引导程序(bootloader)*。引导程序是计算机启动时运行的第一个软件。它加载 操作系统的内核,然后再由内核初始化操作系统的其他部分(包括 Shell、显示管理器桌面环境 等等)。

1
2
3
pacman -S grub efibootmgr os-prober //安装系统探测器

nano /etc/default/grub

新版grub默认禁用os-prober,需要手动启用

image-20231203011100286

去掉GRUB_DISABLE前面的注释

1
2
3
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB //安装Grub

grub-mkconfig -o /boot/grub/grub.cfg //生成Grub配置

手动添加Windows启动项

1
blkid /dev/nvme0n......  //查看引导分区信息

blkid命令

image-20231203011827063记录下UUID后面的数字

image-20231203011909438
1
nano/boot/grub/grub.cfg

有概率os-prober无法探测到windows,需要手动添加windows启动项

image-20231203012234078

输入红框中的内容,红圈中的内容为刚刚记下来的数字

1
2
3
4
5
exit //保存后退出

umount -R /mnt // /mnt完成了它的使命,把它卸载掉

reboot //重启查看能否正常启动Windows

进入Arch Linux美化

1
root //输入密码登录root账户

重复之前的联网操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
rfkill unblock wifi

ip link

ip link set wlan0 up

iwctl

station wlan0 scan

station wlan0 get-networks

station wlan0 connect [wifi名字]

exit

ping baidu.com

安装Gnome桌面

GNOME是一个自由开源的桌面环境,是 Linux 操作系统中最常用的桌面环境之一。 GNOME的目标是为 Linux 系统提供现代、易用的桌面环境,以提高用户的体验和生产力。 它提供了一个用户友好的界面和许多常用的应用程序,如文件管理器、文本编辑器、终端、图形 图像处理 程序

1
pacman -S gnome gnome-tweaks //然后一路回车

安装相应的显卡驱动

注意这里只要安装集显驱动而不要安装英伟达驱动,原因是arch linux可能检测不到

1
pacman -S mesa xf86-video-b

image-20231203014043573

1
systemctl enable gdm

GDM (The GNOME Display Manager)是GNOME显示环境的管理器,并被用来替代原来的X Display Manager

1
reboot 

于是就进入gnome桌面了

下载软件

下载fcirx输入法、浏览器等必要软件

1
sudo pacman -S git ntfs-3g wqy-zenhei firefox fcitx5-im fcitx5-chinese-addons

/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。

1
sudo nano /etc/environment

输入:

1
2
3
4
5
6
7
8
9
GTK_IM_MODULE=fcitx

QT_IM_MODULE=fcitx

XMODIFIERS=@im=fcitx

SDL_IM_MODULE=fcitx

GLFW_IM_MODULE=ibus
image-20231203014725348
1
reboot

设置中文输入法

image-20231203015046687

注意这个输入法是用ctrl+空格启用的

设置蓝牙连接

安装蓝牙模块并启动蓝牙服务

1
2
3
sudo pacman -S bluez bluez-utils
sudo systemctl enable bluetooth.service
sudo systemctl start bluetooth.service

Bluez是Linux系统上的蓝牙协议栈,自带了很多有用的工具,Bluetoothctl就是其一

1
2
bluetoothctl --help          查看帮助命令
bluetoothctl -v 查看蓝牙版本
1
2
3
4
5
6
7
8
bluetoothctl            进入蓝牙管理工具环境
[bluetooth]# power on 打开蓝牙
[bluetooth]# agent on 开启代理
[bluetooth]# scan on 扫描蓝牙设备
[bluetooth]# pair xx:xx:xx:... 配对该设备
[bluetooth]# trust xx:xx:xx:... 信任该设备
[bluetooth]# connect xx:xx:... 连接该设备
[bluetooth]# disconnect xx:xx:... 断开蓝牙

安装蓝牙音频

1
sudo pacman -S pulseaudio-bluetooth

蓝牙图形化管理工具安装

1
sudo pacman -S bluedevil

1
sudo pacman -S blueman

完结撒花🌸

Linux 系统结构

  • /bin
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev :
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc:
    etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib
    lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media
    linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt
    opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc
    proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    1
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root
    该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux
    这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv
    该目录存放一些服务启动之后需要提取的数据。

  • /sys

    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

    该文件系统是内核设备树的一个直观反映。

    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp
    tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr
    usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin:
    系统用户使用的应用程序。

  • /usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src:
    内核源代码默认的放置目录。

  • /var
    var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run
    是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是 /bin、**/usr/bin** 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

参考

本文参考:

ip link 命令总结-CSDN博客

Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 (linuxcool.com)

linux中ctl代表什么缩写?很多命令都带结尾ctl,另外ifconfig和nmcli有什么区别? - 知乎 (zhihu.com)

Arch Linux 详细安装教程,萌新再也不怕了!「2023.10」 - 知乎 (zhihu.com)

【超简单】Windows+Arch Linux双系统双磁盘方案,全程不废话_哔哩哔哩_bilibili

Linux—带你区分”根目录” 和 “家目录”_根目录、家目录的路径分别是什么?可以用什么符号表示,用来快速访问?-CSDN博客

https://blog.csdn.net/qq_61683908/article/details/129430286

linux下的mnt文件夹用来干嘛,Linux/mnt目录主要用于什么?_Killer Seven的博客-CSDN博客

ArchWiki (archlinux.org)

Linux 黑话解释:Linux 中的 GRUB 是什么? | Linux 中国 - 知乎 (zhihu.com)

什么是GNOME_GNOME简介_GNOME的优势以及应用场景-腾讯云开发者社区 (tencent.com)

etc/profile和/etc/environment的比较 - 明明是悟空 - 博客园 (cnblogs.com)

ArchLinux安装使用蓝牙之基础_archlinux 蓝牙_kler的博客-CSDN博客

Linux 系统目录结构 | 菜鸟教程 (runoob.com)