在计算机中安装Arch Linux

2023-11-02

Arch Linux是一个优秀的linux操作系统。其优点是滚动发行、软件包比较新,并且可以深度可定制。缺点是由于深度可定制,所以开始安装的时候只有命令行可用,对于linux新手来说会有一些难度。我也是练习安装了好多次,才逐渐从安装过程中学习到linux的组成部分并体会到Arch的优美之处的。

另外,Arch Linux一大特色就是拥有完善的wiki,因此如果想要了解更多信息的话,还是仔细的研究Arch Wiki最好了。我在这里的安装方案是UEFI+GPT Win、Deepin、Arch三系统方案

安装准备

  • 2G以上的空闲U盘
  • 最新的ArchLinux安装镜像
  • 启动盘制作工具,推荐rufus
  • 关闭BIOS中安全启动选项
  • 有网并且网络质量很好

然后制作一个Arch启动盘。我这里使用rufus制作的是UEFI+GPT方案。如果需要在MBR磁盘上安装的话,最好在Arch Wiki上查找对应的方法。

rufus制作启动盘

制作好启动盘之后,将其插入电脑之中,重启进入BIOS并设置U盘为第一启动顺序,然后然后再次重启,就可以进入到Arch安装环境了。记着关闭BIOS中安全启动的选项,否则无法安装。另外Arch Linux在安装过程中需要全程联网下载最新的包。因此必须在有网环境下才能安装。

安装过程

确定UEFI启动

我选择的是UEFI的启动方案。所以首先需要确定当前安装介质是否以UEFI方式启动的。如果是UEFI启动的,那么就是下图这样的。

UEFI启动

如果没注意这个地方就进入了命令行界面,也不用着急。这个命令可以确定当前是否以UEFI模式启动。如果是的话,会列出一堆UEFI变量来;如果什么都没有,则说明是BIOS方式启动的。

# ls /sys/firmware/efi/efivars

或者这样也可以查看当前的efi变量:

# efivar -l

测试是否有网络

如果是使用网线的话,直接测试就可以了:

# ping -c 4 www.baidu.com

如果使用的是无线网卡的话,需要先连接到网络。利用wifi-menu命令即可连接到无线网络。连接成功之后再次输入上面的命令来测试网络是否连通。

# wifi-menu

分区和格式化

分区

首先需要查看一下存储设备的状态,使用lsblk命令即可。这样会列出当前所有的存储设备。sd*x*(x是字母)代表不同的物理磁盘,而sdx*i*(i是数字)则是每个物理磁盘下的分区。

下图显示的是我的分区方案:
1. sda是我的SSD,分区是安装Windows的时候由Windows分配的:sda1是恢复分区;sda2是EFI分区;sda3是保留分区,忽略即可;sda4是Windows系统下的C盘。
2. sdb是我的普通硬盘。sdb1准备安装Arch Linux,sdb2准备安装Deepin,sdb4准备作为交换分区使用,剩下的分区作为Windows下的普通分区使用。剩下的sdc是我的移动硬盘,和安装过程没有关系。

使用lsblk查看存储设备

我在这里使用的是UEFI+GPT的方案,需要GPT格式的磁盘。如果不熟悉的话,可以在windows下事先分好区。我这硬盘就是在windows下将MBR转成GPT并重新分的区。

如果要在Arch的环境下分区也很容易。cfdisk是一个简单好用的终端模拟图形化的分区工具。如果有多个磁盘的话,需要添加命令行参数指定要操作的磁盘:

# cfdisk /dev/sdb

第一次使用cfdisk对未格式化的磁盘进行操作时会首先询问你是用什么分区表类型,推荐使用GPT。如果因为误操作点成DOS的话也没有关系,可以使用parted命令重新修改回GPT分区表。但是需要注意,分区表的修改会清楚磁盘上的所有数据,所以最好在一开始就想好要分配什么类型并提前将有用数据移出。

# parted /dev/sdb
(parted) mklabel gpt
(parted) quit

格式化

前面已经说了我的分区方案。在开始安装之前还需要将其格式化。首先格式化/dev/sdb1为ext4分区:

# mkfs.ext4 /dev/sdb1

然后格式化交换分区并启用:

# mkswap /dev/sdb4
# swapon /dev/sdb4

由于已经安装了Windows系统,所以EFI分区不需要再次格式化。

挂载

首先需要挂载根分区,如果需要挂载其他分区,也要在挂载根分区之后。

# mount /dev/sdb1 /mnt

然后挂载EFI分区,这需要先在根分区之下创建一个对应的文件夹:

# mkdir -p /mnt/boot/EFI
# mount /dev/sda2 /mnt/boot/EFI

交换分区不需要挂载。挂载完成之后,就变成这样的了:
挂在完之后

安装基本系统

修改安装源

默认的镜像是美国的,在中国速度比较慢。这样的话就需要将软件安装位置修改成中国的镜像。软件源的配置文件在/etc/pacman.d/mirrorlist中。这里将所有非中国的源全部注释掉。

# sed -i '/Score/{/China/!{n;s/^/#/}}' /etc/pacman.d/mirrorlist

开始安装

修改完软件源之后,刷新一下软件仓库列表,就可以开始安装了。

# pacman -Syy
# pacstrap -i /mnt base base-devel

配置fstab

fstab是一个关于文件系统的配置文件,在开机时候会由mount命令读取并挂载其中的分区。在安装完基本系统之后,就可以将fstab信息写入新安装的系统中了。生成之后最好查看一下fstab是否生成成功。

# genfstab -U -p /mnt >> /mnt/etc/fstab
# nano /mnt/etc/fstab

新系统的配置

下面的配置都需要进入新系统进行配置。

进入新系统:

# arch-chroot /mnt /bin/bash

创建初始ramdisk环境,安装的时候这一步会自动进行,所以不需要手动执行。但是如果以后更改了内核配置的话,可能就需要重新生成一下ramdisk环境了。

# mkinitcpio -p linux

使用不带参数的passwd命令设置root密码:

# passwd

配置主机名:

# echo myhostname > /etc/hostname

然后将主机名添加到/etc/hosts文件中localhost和::1两行的末尾:

#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost myhostname
::1 localhost.localdomain localhost myhostname

安装grub

grub是一个启动引导器,同时支持EFI和BIOS方式的启动。安装和配置起来也比较简单。首先要安装grub。如果使用UEFI方式启动,还需要安装efibootmgr。如果同时还装有其他操作系统,还要安装os-prober:

# pacman -S grub os-prober efibootmgr

安装好之后,还需要将其安装到EFI分区之中,这里不需要指明具体是哪个分区,因此不用数字:

# grub-install --recheck /dev/sda

如果提示error:cannot find EFI directory,说明找不到EFI文件夹的位置,还需要加上–efi-directory参数指明安装位置:

# grub-install --recheck /dev/sda --efi-directory=/boot

没有错误则说明安装成功。安装完毕之后还需要生成一个grub配置文件。这一步会探测系统上已经安装的系统并写入到配置文件中。但是由于在安装介质环境中,此时Windows系统可能会探测不到。等到一会重启真正进入Arch环境之后,还需要重新执行一下这个命令,这样就会正常地探测到所有系统了。

# grub-mkconfig -o /boot/grub/grub.cfg

配置网络

如果使用有线网的话,令dhcp服务开机启动:

# systemctl enable dhcpcd.service

如果使用无线网络的话,要安装这几个包,否则重启之后无法连接无线网络:

# pacman -S iw wpa_supplicant dialog

退出并重启系统

前面的所有都配置完了之后,就可以退出chroot环境并重新启动了,当然不要忘了拔掉启动盘或者重新修改BIOS的启动顺序。

# exit
# reboot

正常情况下,应该就会进入到新安装的Arch环境了。使用root用户和前面设置的root密码登录进tty之后,重新执行一下grub-mkconfig命令即可搜索到所有的操作系统。

# grub-mkconfig -o /boot/grub/grub.cfg

这样,一个最基本的Arch Linux就安装完成了。

总结

安装完成之后梳理一下可以发现,安装Arch Linux和安装其他Linux系统并没有什么大的区别,只不过Arch的安装过程完全要考命令行来操作,初次安装可能会有一些问题。但是具体的安装步骤都是差不多的:
* 制作启动盘
* 重启进入安装环境
* 选择分区并进行挂载
* 安装系统
* 配置用户等设置

关于时区、时间、具体用户等配置我在这里并没有提及,准备放到以后的美化部分一起说。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在计算机中安装Arch Linux 的相关文章

  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • 一些好的学习网址

    地址 http chs gotdotnet com quickstart 描述 本站点是微软 NET技术的快速入门网站 我们不必再安装 NET Framework中的快速入门示例程序 直接在网上查看此示例即看 名称 微软官方 NET指导站点
  • npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)...

    什么是npm npm有两层含义 一层含义是Node的开放式模块登记和管理系统 网址为npmjs org 另一层含义是Node默认的模块管理器 是一个命令行下的软件 用来安装和管理Node模块 npm不需要单独安装 在安装Node的时候 会连
  • Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例

    转载自 http mobile 51cto com symbian 272812 htm 在此谢谢原作者的分享 第一部分 本篇来介绍Qt 事件处理机制 深入了解事件处理系统对于每个学习Qt人来说非常重要 可以说 Qt是以事件驱动的UI工具集
  • 华为OD机试真题-需要打开多少监控器-2023年OD统一考试(B卷)

    题目描述 某长方形停车场 每个车位上方都有对应监控器 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时 监控器才需要打开 给出某一时刻停车场的停车分布 请统计最少需要打开多少个监控器 输入描述 第一行输入m n表示长宽 满足1
  • python实现天气数据爬取实现数据可视化和天气查询gui界面设计

    在学校大一实训中 我的实训项目就是使用python爬取天气数据并且实现gui图形界面的设计 实训结束了 希望自己的代码可以帮助大家的学习 代码是大一时候写的 比较青涩 大家多包涵 第一个部分是getdata的部分 就是爬取数据 并将数据存放
  • 刷脸支付有可以大规模落地的商用前景

    科技的高频创新牵引着公众行为发生着快速切换与升级 当人们还沉浸在扫码支付的便利场景中时 刷脸支付作为一种全新的支付方式已不期而至 同时 针对刷脸支付可能大规模落地商用的前景 围绕其便捷性与安全性所展开的舆论博弈也不断被推向高潮 目前刷脸支付
  • vue.config.js中的配置

    兼容性问题 const defineConfig require vue cli service module exports defineConfig node modules里的依赖默认是不会编译的 会导致es6语法在ie中的语法报错
  • 今天第一次用dubbo写一个提供者,消费者,记录一下

    随笔 自己记录一下 一 先创建一个maven项目 dubbo pom 里面包含两个module dubbo api 和 dubbo consumer 如下 dubbo pom xml
  • 嵌入式开发(S5PV210)——u-boot中如何确定启动方式

    1 嵌入式设备确认启动方式 设备确认启动方式分为硬件方式和软件方式 硬件方式是通过芯片某几个引脚的高低电平来决定启动方式 软件方式就是通过代码设置来决定启动方式 1 硬件方式 比如S5PV210芯片 通过拨码开关去设置芯片引脚的高低电平来设
  • 正则表达式判断字符串是否包含中文

    正则表达式通常被用来检索 替换那些符合某个模式 规则 的文本 Regex regex new Regex u4e00 u9fa5 string str 48445helloWorld regex IsMatch str ToString b
  • windows上的neo4j 数据迁移

    需求 把windowsA上的neo4j中graph库相关数据 同步到 windowsB上的neo4j 上 解答 步骤如下 1 首先把windowsA windowsB上的neo4j服务停掉 2 进入windowsA上的neo4j的data目
  • Python生成器generator之next和send运行流程

    http blog csdn net pfm685757 article details 49924099 运行流程 yield from iterable本质上等于for item in iterable yield item的缩写版 转
  • 安装visio64位,无法安装,需要卸载32位问题

    最近买了新电脑 在准备安装visio的时候出现了这个问题 只需要下载一个注册表自动清理器 链接 https pan baidu com s 1eNit u1dLAYC3BBL9u1auA 提取码 kho7 下载后直接打开 点击 一键解决此问
  • 创建docker容器时设置hosts内容

    方式1 在使用docker run运行一个新的容器的时候 通过参数 add host来添加域名和IP信息到容器的 etc hosts文件中 例如 docker run add host hostname 111 111 111 1 name
  • 在Mac OS中配置CMake的详细图文教程

    CMake是一个比make更高级的跨平台的安装 编译 配置工具 可以用简单的语句来描述所有平台的安装 编译过程 并根据不同平台 不同的编译器 生成相应的Makefile或者project文件 本文主要介绍在Mac OSX上安装配置CMake
  • 在html中如何使div在页面中居中显示

    在html中如何使div在页面中居中显示 最近无聊中又再温习了下html 发现好多东西都忘了 尝试着写了一个html网页 结果就连div如何在页面中居中显示都查了好久才弄出来 其实我不知道为什么这样可以实现 因为css还没仔细研究过 等我参
  • watermark前端js盲水印添加方法

    1 引入js 2 实例化对象
  • java获取一个文件的md5码

    什么是文件的MD5码 MD5信息摘要算法 英语 MD5 Message Digest Algorithm 一种被广泛使用的密码散列函数 可以产生出一个128位 16字节 的散列值 hash value 用于确保信息传输完整一致 每个文件对应
  • [知识蒸馏]

    知识蒸馏目的 需要关注的是上图的 attention transfer channel wise knowledge distillation for dense prediction ppt来源于 精读AI论文 知识蒸馏 哔哩哔哩 bil
  • 在计算机中安装Arch Linux

    Arch Linux是一个优秀的linux操作系统 其优点是滚动发行 软件包比较新 并且可以深度可定制 缺点是由于深度可定制 所以开始安装的时候只有命令行可用 对于linux新手来说会有一些难度 我也是练习安装了好多次 才逐渐从安装过程中学