#

强烈推荐阅读:Arch Linux 安装使用教程archlinux 简明指南 。 这两本书都是内容非常详尽的 Arch Linux 安装和使用教程,包括 Arch Linux 安装、基本配置、日产使用、常用软件安装等内容,可以帮助初学者解决很多问题。

笔者本人使用笔记本单固态应硬盘安装 windows10 + ArchLinux 双系统,推荐按照 archlinux 简明指南 的安装步骤进行安装。

安装过程需要注意:

  1. 清楚你即将使用的命令做了什么,不要一味回车回车...

  2. 按照教程的大纲,分模块进行,分清每一块做了什么,不要一行一行,遇见一个敲一个,先通读知晓这一块是做什么之后,返回来按照自己需要的去做。

  3. 不要过分地 “多线程” 操作试图节省时间,稳中前进,不出错就是最快的。

  4. 仔细对照好输入的命令是否正确,确认每个命令的结果是否符合预期。

    Arclinux 中文论坛 众多 Archlinux 使用者汇集的地方,同时有着较为官方的信息和软件包,很多问题可以在这里解决。

# 部分命令记录

sudo fdisk -l   # 查看磁盘和分区信息
df-h # 显示文件系统磁盘空间使用情况
sudo umount /dev/sdX # 卸载 U 盘,“/dev/sdX” 为你要卸载的 U 盘设备名称。
sudo mkfs.vfat /dev/sdX # 将 U 盘格式化为 FAT32 文件系统 /
printenv # 查看所有的环境变量
echo &PATH # 查看特定环境变量的值(echo $http_proxy)
export http_proxy="http://127.0.0.1:7890"   # 设置代理服务器,设置 http_proxy 和 https_proxy 环境变量
export https_proxy="http://127.0.0.1:7890"

以下命令需要安装后才能使用:

tree -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合
     -C 使用颜色区分文件类型
     -N 支持显示中文字符
     -a 显示隐藏文件(以.开头)
     -d 只显示目录
     -h 使用人易读的单位显示文件大小
     -L [num] 指定显示的最大深度

##Pacman 包管理:

sudo pacman -Syu                # 升级系统
sudo pacman -S package_name     # 安装软件包
sudo pacman -Syu package_name   # 升级系统并安装软件包,ArchLinux 不支持部分升级,建议用此命令先升级再安装
sudo pacman -Syyu               # 升级系统 yy 标记强制刷新 u 标记升级动作
sudo pacman -Ss package_name    # 搜索包含相关内容的软件包
sudo pacman -R package_name     # 删除软件包
sudo pacman -Qi package_name    # 查看软件包信息     
sudo pacman -Q                  # 查看安装的软件包      
sudo pacman -Rs package_name    # 删除软件包,及其所有没有被其他已安装软件包使用的依赖包
sudo pacman -Si package_name    # 从数据库中搜索软件包的信息
sudo pacman -Qdt                # 找出孤立包 Q 为查询本地软件包数据库 d 标记依赖包 t 标记不需要的包 dt 合并标记孤立包
sudo pacman -Rs $(pacman -Qtdq) # 删除孤立软件包
sudo pacman -U abc.pkg.tar.gz   # 安装下载的 abc 包,或新编译的本地 abc 包
sudo pacman -Fy                 # 更新命令查询文件列表数据库
sudo pacman -F xxx              # 当不知道某个命令属于哪个包时,用来查询某个 xxx 命令属于哪个包
sudo pacman -Sc                 # 清理没有安装的所有缓存包,和没有被使用的同步数据库
yay -Syu                        # 升级官方和 AUR 的软件包,包括 pacman, -syyu 强制升级
yay -S abc                      # 安装 abc 包
yay -Ss abc | grep 已安装        # 搜索已安装且包含 abc 的包
yay -R 包名                      # 删除软件包 (不包括前后缀,版本号)
sudo rm /var/lib/pacman/db.lck  # 删除 /var/lib/pacman/db.lck 锁

# 系统服务的操作与介绍

Linux 系统中运行着各种服务,你需要掌握查询,变更服务状态的方式。同时对创建服务最好也有大致的了解。这里讲述命令 systemctl 的用法。以 dhcpcd 为例

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 配置 扫描新增或变更的服务单元 不会重新加载变更的配置 加载变更的配置用 reload

# 换源 - 阿里云

编辑文件 /etc/pacman.d/mirrorlist

sudo vim /etc/pacman.d/mirrorlist

在镜像源列表最顶端添加:

Server = http://mirrors.aliyun.com/archlinux/$repo/os/$arch

参考:阿里云开发者社区 > 镜像站 > archlinuxcn

sudo pacman -Syy && sudo pacman -S archlinuxcn-keyring # 安装 archlinuxcn-keyring 包导入 GPG key

# 安装 yay

sudo pacman -S yay
#安装完成后再次更新
yay -Syyu && yay -Sys

# 常见问题及其解决

  • 使用 yay 命令时报错:

    搜索 AUR 时出错: response decoding failed: invalid character '<' looking for
    • 解决:
    yay --aururl "https://aur.archlinux.org" --save
  • Telegram 无法登陆:

    • 解决:
      SETTING 中添加地址,使用代理,port 选择代理所使用端口号。
  • 连接显示器无法使用:

    • 解决:
      根据 Linux 安装使用教程显卡驱动所描述进行即可。
  • VSCode 无法唤出外部终端:

    • 解决:
      .vscode 文件中设置启用外部终端,在 settings.json 文件中加入 "terminal.external.linuxExec": "/usr/bin/konsole", "" 内指要调用的终端 bin/konsole。
  • 在升级系统(syu)时,出现以下内容:

    错误:python-markdown: 来自 "Caleb Maclennan <alerque@archlinux.org>" 的签名是勉强信任的
    :: 文件 /var/cache/pacman/pkg/python-markdown-3.3.6-1-any.pkg.tar.zst 已损坏 (无效或已损坏的软件包 (PGP 签名)).
    打算删除吗? [Y/n] 
    错误:trash-cli: 来自 "Alexander Epaneshnikov <alex19ep@archlinux.org>" 的签名是勉强信任的
    :: 文件 /var/cache/pacman/pkg/trash-cli-0.21.10.24-1-any.pkg.tar.zst 已损坏 (无效或已损坏的软件包 (PGP 签名)).
    打算删除吗? [Y/n] 
    错误:无法提交处理 (无效或已损坏的软件包)
    发生错误,没有软件包被更新。
    • 解决:

      终端输入: sudo pacman-key --init && sudo pacman-key --populate && sudo pacman -Syyu

      可能的方法: sudo pacman -S archlinux-keyring

# 使用 Docker

  1. 安装:

    sudo pacman -S docker # 安装 Docker -Ss 搜索 Docker 软件包
    sudo systemctl enable docker.service # 开启 Docker 开机自启动服务
    sudo systemctl start docker.service  # 启动 Docker 服务
    # 安装好 docker 后自动建立了 docker 组,不需要自己添加 docker 组,只需要把当前工作用户加入 docker 组即可
    sudo gpasswd -a $USER docker # 把工作用户加入 Docker 组,避免使用 root 账号工作
    #重启系统生效
    sudo systemctl disable docker.service # 关闭开机自启动服务
  2. 获取镜像:

    docker pull archlinux  # 下载镜像
    docker image ls        # 列出镜像列表
    docker ps -a           # 列出容器列表
    docker run -it archlinux /bin/bash       # 用所给镜像启动一个新的容器
    docker run --rm -it --net=host gpt-academic # 用所给镜像启动一个新的容器
    docker exec -it <CONTAINER_NAME> bash    # 进入一个正在运行的 docker (在容器内部创建一个子进程)
    docker stop [contaionerID]               # 终止镜像
    docker rmi $(docker images -q)           # 删除所有镜像
    docker stop $(docker ps -aq)             # 停止所有容器
    docker container rm [contaionerID]       # 删除一个处于终止状态的容器
    docker container rm $(docker images -q)  # 删除所有容器
  3. 配置镜像:

    启动镜像,配置初始开发环境,安装了一些包(可能有些没有用),

    docker run -t -i archlinux /bin/bash # 启动镜像
    # 在 docker 内输入以下内容
    sed -i '1i Server = http://mirrors.aliyun.com/archlinux/$repo/os/$arch' /etc/pacman.d/mirrorlist \
        && sed -i '1i Server = https://mirrors.tencent.com/archlinux/$repo/os/$arch' /etc/pacman.d/mirrorlist \
        && sed -i '$i [archlinuxcn]' /etc/pacman.conf \
        && sed -i '$i SigLevel = TrustAll' /etc/pacman.conf \
        && sed -i '$i Server = https://repo.archlinuxcn.org/$arch' /etc/pacman.conf \
        && sed -i -r 's/^NoExtract\s*=\s*.*/# \0/g' /etc/pacman.conf \
        && pacman -Syyu --noconfirm \
        && pacman -Sy --noconfirm archlinuxcn-keyring && pacman -Su --noconfirm\
        && pacman -Syy --noconfirm git vim neovim zsh oh-my-zsh-git jdk-openjdk jdk8-openjdk jdk11-openjdk \
        maven yay zsh python3 go nodejs npm yarn tmux python2 zsh-autosuggestions zsh-syntax-highlighting \
        zsh-theme-powerlevel10k ranger python-pip python-neovim wl-clipboard fzf ripgrep man-db \
        gcc clang base-devel wqy-zenhei noto-fonts-cjk wget unzip thefuck \
        && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && pacman -Scc --noconfirm \
        && rm -rf /var/lib/pacman/sync/* /var/cache/pacman/pkg/* \
        && echo "" > /var/log/pacman.log

    精简版本:

    sed -i '1i Server = http://mirrors.aliyun.com/archlinux/$repo/os/$arch' /etc/pacman.d/mirrorlist \
        && sed -i '1i Server = https://mirrors.tencent.com/archlinux/$repo/os/$arch' /etc/pacman.d/mirrorlist \
        && sed -i '$i [archlinuxcn]' /etc/pacman.conf \
        && sed -i '$i SigLevel = TrustAll' /etc/pacman.conf \
        && sed -i '$i Server = https://repo.archlinuxcn.org/$arch' /etc/pacman.conf \
        && sed -i -r 's/^NoExtract\s*=\s*.*/# \0/g' /etc/pacman.conf \
        && pacman -Syyu --noconfirm \
        && pacman -Sy --noconfirm archlinuxcn-keyring && pacman -Su --noconfirm\
        && pacman -Syy --noconfirm git vim neovim \
        maven yay go npm yarn tmux \
        ranger python-pip python-neovim wl-clipboard fzf ripgrep man-db \
        gcc clang base-devel wqy-zenhei noto-fonts-cjk wget unzip thefuck \
        && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && pacman -Scc --noconfirm \
        && rm -rf /var/lib/pacman/sync/* /var/cache/pacman/pkg/* \
        && echo "" > /var/log/pacman.log
  4. 配置 vscode:

    下载插件:Remote Development Pack(包含 Remote-Containers),Docker。打开插件,在 CONTAINERS 中右键 Attach Visual Studio Code,在 vscode 中运行了镜像,重新安装一些扩展,当作一个新的 archlinux 一样使用。

  5. 容器和本地间的文件传输:

    docker ps -a   # 获得容器 ID
    docker cp 本地文件路径 ID全称:容器路径 # 本地文件复制到容器
    docker cp ID全称:容器文件路径 本地路径 # 容器文件复制到本地

# Typora+PicGo+Github 图床

整体遵循:https://juejin.cn/post/6844904137407086600#heading-8

  1. 创建 GIthub 仓库并创建 Token 并复制
  2. 下载 PicGo(app)并配置,包括时间戳命名,选择 github 图床,仓库名,分支用 main,设定 Token
  3. 下载并配置 node.js
  4. 配置 Typora 并测试图床

# 编译安装从 GitHub 下载的源码

  1. 执行以下命令,生成 Makefile 文件:

    ./autogen.sh

  2. 如果下载的源代码中已经包含了 Makefile 文件,则可以跳过此步骤。

  3. 执行以下命令,配置编译选项:

    ./configure

    configure 脚本会检查系统环境和依赖库,并生成 Makefile 文件。可以通过指定不同的选项来定制编译过程。

    例如,可以使用 --prefix 选项指定安装目录,使用 --enable-shared 选项生成共享库等。

  4. 执行以下命令,开始编译:

    make

    这个命令会编译源代码,并生成可执行文件或共享库等。

  5. 执行以下命令,安装编译好的文件:

  6. sudo make install

    这个命令会将编译好的文件安装到系统中,通常是 /usr/local 目录。 如果在执行 configure 或 make 命令时遇到了错误,可以根据错误信息进行调整。通常情况下,错误信息会提示缺少依赖库或者系统环境不兼容等问题。

# 安装 deb 包

  1. 使用 yay 安装 debtap。 yay -S debtap
  2. 升级的 debtap。 sudo debtap -U
  3. 转换 deb 包,生成一个 yourfile.zst 文件。 sudo debtap yourfile.deb (接两次回车)
  4. 安装转换后的包。 sudo pacman -U yourfile.zst

# 压缩文件

  • -c :生成一个新的归档文件
  • -f :输出到文件中,
  • -z & -j :将 tar 压缩成 gzip 和 bzip2 格式。
  • archive :压缩文件的名称
  • /path/to/folder :要压缩的文件夹的路径。
# 将文件夹压缩成 .tar 文件:
copy codetar -cf archive.tar /path/to/folder
# 将文件夹压缩成 .tar.gz 文件:
copy codetar -czf archive.tar.gz /path/to/folder
# 将文件夹压缩成 .tar.bz2 文件:
copy codetar -cjf archive.tar.bz2 /path/to/folder

# 安装 QQ

yay -Ss linuxqq # 在 AUR 查找 linuxQQ 
yay -S linuxqq  # 从 AUR 安装 linuxqq
sudo pacman -Rns linuxqq # 删除 linuxqq 及不再需要的依赖

# 登陆后闪退的可能解决办法:

删除 ~/.config/QQ 下的所有文件,重启 QQ 进行登陆并在设置里关闭 QQ 自己的更新。

其他问题请自行在 Google 或者在 Arch 中文社区寻找解决方案

# 安装 fcitx5 及中文输入法

sudo pacman -S fcitx5-im 
sudo pacman -S fcitx5-chinese-addons  fcitx5-rime

sudo vim /etc/environment ,添加如下内容,之后重启输入法:

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx

在设置中找到输入法,添加输入法,选拼音

# 中文标点消失:

  • 编辑~/.config/fcitx/data/punc.mb.zh_CN,自行查找

  • [ctrl+.]

# 安装 zsh

# 编辑配置文件:

vim ~/.zshrc

目前的:

if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p12k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p11k-instant-prompt-${(%):-%n}.zsh"
fi
ZSH=/usr/share/oh-my-zsh/
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(
	sudo
	git
	autojump
	zsh-syntax-highlighting
	zsh-autosuggestions
)
ZSH_CACHE_DIR=$HOME/.cache/oh-my-zsh
if [[ ! -d $ZSH_CACHE_DIR ]]; then
  mkdir $ZSH_CACHE_DIR
fi
source $ZSH/oh-my-zsh.sh
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# other name
alias sp='sudo pacman' 
alias syyu='yay -Syyu' # 强制升级系统和软件包
alias syu='yay -Syu'   # 升级系统和软件包
alias c='clear' # 清屏
alias e='exit'  # 退出终端
alias qq='rm -rf ~/.config/QQ/ && linuxqq &' # 启动 QQ 时删除文件
# git 快捷键 cd+add+commit+push+cd
# 将本地 Note 仓库提交到 gihub
alias gpn='cd /home/origin/Code/repository/Note && git add . && git commit -m \"update\" && git push && cd -'
# 将本地 Code_c 仓库提交到 gihub
alias gpc='cd /home/origin/Code/repository/Code_c && git add . && git commit -m \"update\" && git push && cd -'
# 将本地 Code_cc 仓库提交到 gihub
alias gpcc='cd /home/origin/Code/repository/Code_cc && git add . && git commit -m \"update\" && git push && cd -'
# 将本地 Python 仓库提交到 gihub
alias gppy='cd /home/origin/Code/repository/Code_py && git add . && git commit -m \"update\" && git push && cd -'
# 将本地 my-xv6-labs-2022 仓库提交到 gihub
alias gplab='cd /home/origin/Code/repository/my-xv6-labs-2022 && git add . && git commit -m \"update\" && git push &&cd -'
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/lib/go/bin:$GOPATH/bin"
export PATH=/usr/sbin:$PATH

## 为一个文件或目录创建一个符号链接:

/usr/local/local 中存有已经建立的符号链接,在 /usr/share 中有通过自行下载的装包安装的软件,如通过官网安装包安装的 code。

输入 ln -s [文件/目录路径] [建立后的软链接名称] ,即可建立链接。如: ln -s /usr/share/code/code code

# 更改默认 Jva 环境

# 安装 Java 环境(Java-20-jdk)

sudo pacman -Sy --needed --noconfirm jdk

输入

archlinux-java status

若出现类似下面,即为安装成功

Available Java environments:
  java-21-jdk
  java-21-openjdk
  java-8-openjdk (default)

若 java-21-openjdk 为 default 则已成功将 java21 设置为默认环境,若不是,则输入

sudo archlinux-java set java-20-openjdk[你想要设为默认的java环境名]

后输入 archlinux-java status 查看, java-21-openjdk 已是 default

Available Java environments:
  java-21-jdk
  java-21-openjdk (default)
  java-8-openjdk

# ArchLinux 内存管理

  1. 清除 Arch Linux 上的包缓存和 AUR 软件包

    pacman -Scc
    yay -Scc

    Arch Linux 在 /var/cache/pacman/pkg/ 目录中存储下载的每个软件包,包括升级。如果更新破坏了软件包,便于回滚到以前的版本。 /home/origin/.cache/yay 存有 AUR 的软件包。下面的名令将从缓存 /var/cache/pacman/pkg/ 中删除当前未安装的所有包。在命令中添加另一个 **-c**(最后有两个 c)标志将删除所有缓存的包。

  2. 删除孤立的软件包

    sudo pacman -Qtdq 查看删除孤立的软件包
    sudo pacman -Rns $(pacman -Qtdq)
  3. 清理日志,设置了固定大小为 50M,多的日志会被删掉。

    journalctl --vacuum-size=50M

# python 使用 pip 遇到问题

pip install scikit-learn
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try 'pacman -S
    python-xyz', where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Arch-packaged Python package,
    create a virtual environment using 'python -m venv path/to/venv'.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip.
    
    If you wish to install a non-Arch packaged Python application,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. Make sure you have python-pipx
    installed via pacman.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

解决:

sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED

# 修改用户名及用户目录

  1. 切换终端,用 root 账户登录;
  2. 编辑 /etc/passwd 文件,将旧用户名替换为新用户名;
  3. 编辑 /etc/shadow 文件,将旧用户名替换为新用户名;
  4. 编辑 /etc/group 文件,将旧用户名替换为新用户名;
  5. 重命名 home 文件: mv /home/oldusername/home/newusername

注:目录名的改变会导致一些固定路径的配置项发生错误,需要手动修改路径。

# Linux 修改 U 盘名称

sudo pacman -S mtools # 安装工具
sudo vim /etc/mtools.conf # 然后修改配置文件
# 在这个文件最后添加下面一行
mtools_skip_check=1
sudo mlabel -i /dev/sdb1 ::DISK2 # sdb1 是 U 盘,SISK2 是修改后的名称(自动改大写)
sudo eject /dev/sdb1      # 修改完成