一、pacman命令
更新系统:
pacman -Syu
1.pacman安装、升级软件包
安装过程中,若不小心终止了 pacman 进程,则需要先删除 /var/lib/pacman/db.lck
才能再次启动 pacman!
(1)安装一个或者多个指定的软件包:
①通过-S后面跟包名的命令,只在官方源仅搜索软件包全名的包:
pacman -S 软件包名
② 通过-Syu后面跟包名的命令,会直接在官方源搜索带有foo
关键词的所有包(包名和简介中只要出现foo都会被一网打尽):
pacman -Syu 软件包名
(2)同步远程软件库与本地软件库,并且更新系统的所有软件包,但不包括不在软件库中的“本地安装的”包:
pacman -Syu
(3)强制同步远程与本地存储库,并更新系统(一般使用 -Syu 即可)
pacman -Syyu
(4)同步软件包,让本地的包数据库与远程的软件仓库同步,但不升级系统
pacman -Syy
(5)安装时遇到文件冲突,并强制覆盖:
pacman -S –overwrite 要覆盖的文件模式**
//强制pacman`覆盖与给模式匹配的文件
(6)下载包而不安装它:
pacman -Sw 软件包名
pacman -Syyw 软件包名
//下载较新的软件包,但不安装
pacman参数:
-S
代表同步synchronization,它的意思是pacman
在安装之前先与远程软件库进行同步。y
代表更新本地主程序包存储库,是主程序包数据库的本地副本yy
代表强制更新u
代表系统更新
2.pacman卸载软件包
(1)卸载一个指定的软件包,并且删除它的所有依赖包。
pacman -R 软件包名
(2)删除一个包,以及删除被本软件依赖但不被其他包使用的依赖包:
pacman -Rs 软件包名
(3)删除软件包,及删除其所有没有被其他已安装软件包使用的依赖包
sudo pacman -Rns 软件包名
(4)删除孤立包
pacman -Rns $(pacman -Qtdq)
也可以使用 pacman -Rsc $(pacman -Qtdq)
pacman参数:
-R
删除removes
查询搜索-d
依赖包depend-t
不需要的包 *n
pacman 删除某些程序时会备份重要配置文件,在其后面加上.pacsave扩展名。-n 选项可以避免备份这些文件
3.pacman查找软件包
(1)在远程网络软件包仓库的数据库中搜索包,包括包的名称和描述:
pacman -Ss 字符串1 字符串2 ...
(2)查找已在本地安装的软件包:
pacman -Qs 字符串1 字符串2 ...
(3)检查本地已安装包的相关信息
pacman -Qi 软件包名
(4)在本地已安装包中找出已安装孤立包。
pacman -Qdt
(5)根据文件路径及文件名在本地已安装的软件包中查找文件所属包
pacman-Qo 文件路径/文件名
(6)查看哪些包属于一个软件包组
,运行:
pacman -Sg gnome软件包组名
(7)根据文件名在远程软包中查找它所属的包:
pacman -F 文件名
(8)查询某个命令在远程软件包中属于哪个包(即使没有安装)
pacman -F 命令字符串
(9)更新命令查询文件列表数据库
sudo pacman -Fy
(10)查看一个包的依赖树:
pactree 软件包名
pacman参数:
-Q
查询本地已安装软件包的数据库-S
查询远程软件包仓库-F
查询文件在远程软包仓库中它所以所属的包s
查询搜索o
查询i
查询信息informationg
群组group-d
依赖包depend-t
不需要的包-dt
合并标记孤立包
4.pacman清除缓存
pacman
将其下载的包存储在 /var/cache/Pacman/pkg/
中,并且不会自动删除旧版本或卸载的版本。这有一些优点:
- ① 它允许降级一个包,而不需要通过其他来源检索以前的版本。
- ② 已卸载的软件包可以轻松地直接从缓存文件夹重新安装。
但是,有必要定期清理缓存以防止文件夹增大。
(1)要删除当前未安装的所有缓存包和未使用的同步数据库,请执行:
pacman -Sc
(2)要从缓存中删除所有文件,请使用清除选项两次,这是最激进的方法,不会在缓存文件夹中留下任何内容:
pacman -Scc
//(一般不使用)
(3)paccache -r
# 删除已安装和未安装包的所有缓存版本,但最近 3 个版本除外(一般不使用)
pacman参数:
-S
代表pacman在清理之前先与远程软件库进行同步,确认不需要的缓存包和本地软件包数据库。c
代表“一个”清除cleancc
强调是清除clean两次,强调删除所有缓存文件
5.pacman安装本地或者第三方的包
(1)安装不是来自远程存储库的“本地”包:
pacman -U 本地软件包路径.pkg.tar.xz
(2)安装官方存储库中未包含的“远程”软件包:
pacman -U http://www.example.com/repo/example.pkg.tar.xz
pacman参数:
-U
代表使用本地包更新
6.降级软件包
两种方法:
(1)在 /var/cache/pacman/pkg/
中找到旧软件包(包括旧 AUR 软件包),双击打开安装实现手动降级。
也可以配合如下命令在仓库中下载某个版本的包,然后手动安装:
pacman -Sw 软件包名
(2)使用downgrade命令
sudo downgrade 软件包名
然后会列出一系列的该软件的版本,用数字选择一个你需要的版本即可!
二、yay命令
yay是一个AUR Helper,他可以执行pacman的几乎所有操作,yay虽然可以使用pacman的所有<operation>
,并在此基础上添加了很多额外用法。
更新系统:
yay
1.yay安装软件包
(1)仅执行yay
更新系统
等同于 yay -Syu
当我们仅执行yay
,后面不跟任何参数时,yay会执行操作yay -Syu
,他会先调用pacman更新源的数据库、更新所有从源内安装的软件包,并检查你的AUR包有没有更新。
(2)yay 软件包名
等同于 yay -Syu 软件包名
通过yay后面直接跟包名的命令会让yay直接在官方源和AUR内搜索带有软件包名
关键词的包(包名和简介中只要出现foo都会被一网打尽)。
(3)yay -S 软件包名
通过-S后面直接跟包名的命令,会让yay直接在官方源和AUR内安装指定软件包名
的包。
2.yay卸载软件包
基本与pacman参数相同。
3.yay查找软件包
基本与pacman参数相同。
4.yay清理缓存
基本与pacman参数相同。
(1)清理不需要的依赖
yay -Yc
(2)清理全部软件安装包:
yay -Scc
效果类似于: 如果使用了 yay 来安装 AUR 中的软件包的话,可以选择清理 yay 的缓存目录:
rm -rf ~/.cache/yay
(3)清理无用的孤立软件包:
yay -Rns $(yay -Qtdq)
若显示 error: no targets specified (use -h for help) 则说明没有孤立软件包需要清理
(4)清理指定的孤立软件包:
yay -Rn (package_name)
5.yay软件包降级
在 archlinux 上偶尔会出现某一个包的最新版本有各种问题的情况,此时需要降级该包以正常使用,包可以是普通软件,也可以是内核。为了使用 downgrade 额外的命令需要先安装 downgrade:
yay -S downgrade
安装此包即可,使用方法也很简单,downgrade 后加上需要降级的包名即可,随后会提示你选择需要降级到的版本,点选即可。
6.yay其他命令
(1)打印系统统计信息
yay -Ps
(2)yay 支持在下载时修改 PKGBUILD 文件,方法是
yay -S --editmenu (package_name)
yay参数:
-Y (--yay)
-Y行为其实是yay的默认行为,当你没有加其他的行为参数时,yay就会执行-Y参数,可以跟--gendb和-c。
-P(--show)
执行特定的Print操作。可以跟的[option]有-c、-f、-d、-g、-n、-s、-u、-w、-q
-g(--currentconfig)
Print当前的yay配置。
-G(--getpkgbuild)
后跟包名。需要注意的是,如果指定的包不存在于官方源,则无法输出,后跟-f、-p参数。
如果希望仅获取来自AUR(即排除第三方源的干扰)的PKGBUILD,后需跟-a参数。
yay -Gpa
yay -Ga
-p(--print)
Print指定包的PKGBUILD。
三、其他安装、卸载相关命令
1.从 PKGBUILD 安装软件
在 PKGBUILD 所在的文件夹内执行:
makepkg -si
即可安装
2.pacman和yay常用查询系统安装信息命令
-
-Qe
:显示用户安装的软件包 -
-Qn
:显示从官方镜像中下载的软件 -
-Qm
:显示从 AUR 中下载的软件 -
-Qs
:显示本地库的包
四、vim 的 命令模式
在命令模式
下,可以用一些快捷指令来对文本进行操作:
- 此时处在 vim 的
命令模式
。在命令模式
下,可以用一些快捷指令来对文本进行操作 - 输入
a
进入 vim 的编辑模式
,此时即可输入任意文本进行编辑 -
在输入完成后按下 Esc 键,即可从
编辑模式
退出到命令模式
。此时输入:wq
即可保存并退出 vim :wq
—— 保存退出:q!
—— 不保存,强制退出dd
—— 删除一行2dd
—— 删除两行gg
—— 回到文本第一行shift
+g
—— 转到文本最后一行/xxx
—— 在文中搜索 xxx 内容。回车Enter
搜索,按n
键转到下一个?xxx
—— 反向搜索
五、 系统服务
命令 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 配置。扫描新增或变更的服务单元、不会重新加载变更的配置
六、一些有用的命令总结
1.获取设备信息
(1)简要信息
可以使用能显示系统图标的 neofetch
,在终端中输入:(需要下载 neofetch
软件包)
neofetch
或者使用功能更强大的 inxi
:(需要在 AUR 中下载 inxi
软件包)
sudo inxi -b
(2)详细信息
在终端中输入:
sudo inxi -Fa
(3)内核版本
在终端中输入:
uname -a
(4)操作系统版本
在终端中输入:(需要 lsb-release
软件包)
lsb_release -a
2.进程、内存、日志管理
(1)命令行进程查看器
在终端中输入:(需要 htop
软件包)
htop
(2)内存使用情况
free
显示系统中已用和未用的物理内存和交换内存、共享内存和内核使用的缓冲区的总和
在终端中输入:(默认单位是 KiB,即 1024 字节)
free
Linux 的内存策略和使用指南可以参考这个网站:Linux ate my RAM
(2)上一次关机的系统日志
journalctl -rb -1
3.文件权限与属性
(1)查看文件权限与属性
查看当前目录下所有文件(包括目录文件,即文件夹)的权限与属性:
ls -l
输出部分开头由 10 位字母或 -
符号组成,如 drwxr-xr-x
第一个字母代表文件类型,d
表示目录文件,-
表示普通文件
后面 9 个字母代表文件的权限:第 1-3 个字母代表所有者对文件的权限,第 4-6 个字母代表用户组对该文件的权限,第 7-9 个字母代表所有其他用户对该文件的权限
其中 r
代表读取权限,w
代表修改权限,x
代表执行权限(非可执行文件,如文本文件,本身就没有执行权限),-
代表没有该类型的权限
(2)修改文件权限
在终端里使用 chmod
命令可以修改文件权限:
chmod (who)=(permissions) (file_name)
其中的 (who)
是一个或者多个字母,可以是 u
(所有者)、g
(用户组)、o
(所有其他用户)、a
(以上所有,等价于 ugo
)
权限 (permissions)
用 r
、w
、x
表示
中间的 =
符号是覆盖性的,chmod
命令允许使用 +
或 -
从现有集合中添加和减去权限,例如:
chmod u+x (file_name)
可以给文件添加所有者的可执行权限
chmod
也可以用数字来设置权限,此时 r=4
、w=2
、x=1
,如 rwxr-xr-x
等于 755
,这样可以同时编辑所有者、用户组和其他用户的权限:
chmod 755 (file_name)
大多数目录被设置为 755
,以允许所有者读取、写入和执行,但拒绝被其他所有人写入
非可执行的文件通常是 644
,以允许所有者读取和写入,但允许其他所有人读取,可执行文件则为 744
如果要递归修改,可以加入 -R
参数
更多设置和用法参考以下网址:
File permissions and attributes – ArchWiki
(3)修改文件用户组
在终端里使用 chgrp
命令可以修改文件所属的用户组:
chgrp (group_name) (file_name)
如果要递归修改,可以加入 -R
参数
(4)修改文件所有者
在终端里使用 chown
命令可以修改文件所有者:
chown (user_name) (file_name)
如果要递归修改,可以加入 -R
参数
也可以同时修改所有者和用户组:
chown (user_name):(group_name) (file_name)
4.文件操作命令
(1)查看并转换编码
查看编码的命令为:
file -i (file_name)
其中 charset
一栏的输出即为文件编码
转换编码可以使用系统预装的 iconv
,方法为:
iconv -f (from_encoding) -t (to_encoding) (from_file_name) -o (to_file_name)
该方法适合对文本文件转换编码,对 ZIP 压缩包和 PDF 文件等二进制文件则无法使用
iconv
支持的编码格式可以用 iconv -l
查看
(2)转换图片格式
这需要 imagemagick
软件包,它提供了 convert
等命令
例如批量将图片从 PNG 格式转换为 JPG 格式:
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.png}.jpg"'
(3)查找命令
grep
命令的用法为在文件或命令输出中查找字符串,例如:
grep (pattern) (file_pattern)
即为在当前目录文件名符合 file_pattern
的文件中查找字符串 pattern
又例如:
pamac list | grep (pattern)
可以查询已安装的软件包中名字含有 pattern
的软件包
(4)获取命令执行的时间
使用 time
命令在任何命令前面可以获取命令执行的时间:
time (command)
输出有三行:real
一行是命令执行的总时间,user
一行是指令执行时在用户态(user mode)所花费的时间,sys
一行是指令执行时在内核态(kernel mode)所花费的时间
(5)命令行比较两个文件
可以用 Linux 自带的 diff
命令,它可以逐行比较两个文件(如果是二进制文件则直接输出是否存在差异):
diff (file_name_1) (file_name_2)
这里的文件也可以换成路径,详细用法可以用 diff --help
查询
(6)批量更改文件名
可以用 Linux 自带的 rename
命令:
rename -- "(old_name)" "(new_name)" (files)
这里的参数 --
是为了防止在 "old_name"
中出现连字符导致识别错误(将其识别为参数)而添加的
例如将本文件夹下所有文件的文件名中空格改为下划线,即执行:
rename -- " " "_" ./*
详细用法可以用 rename --help
查询
(7)批量更改文件
推荐使用 sed
命令处理:
sed -ie 's/(old_string)/(new_string)/g' (files)
七、常见命令错误
1.pacman 排除常见错误
(1)提交事务失败(文件冲突)
“Failed to commit transaction (conflicting files)” 错误
如果你看到以下报错:
error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.
这是因为 pacman 检测到文件冲突,不会为你覆盖文件。
解决这个问题的一个安全方法是首先检查另一个包是否拥有这个文件(pacman-Qo 文件路径)。
(2)提交事务失败(包无效或损坏)
“Failed to commit transaction (invalid or corrupted package)” 错误
在 /var/cache/pacman/pkg/
中查找 .part
文件(部分下载的包),并将其删除。这通常是由在 pacman.conf
文件中使用自定义 XferCommand
引起的。
(3)初始化事务失败(无法锁定数据库)
“Failed to init transaction (unable to lock database)” 错误
当 pacman
要修改包数据库时,例如安装包时,它会在 /var/lib/pacman/db.lck
处创建一个锁文件。这可以防止 pacman
的另一个实例同时尝试更改包数据库。
如果 pacman
在更改数据库时被中断,这个过时的锁文件可能仍然保留。如果你确定没有 pacman
实例正在运行,那么请删除锁文件。
检查进程是否持有锁定文件:
lsof /var/lib/pacman/db.lck
如果上述命令未返回任何内容,则可以删除锁文件:
rm /var/lib/pacman/db.lck
如果你发现 lsof 命令输出了使用锁文件的进程的 PID,请先杀死这个进程,然后删除锁文件。
(4)升级提示 “exists on filesystem” 错误(自身文件冲突)
使用 yay
或 sudo pacman -Syu
进行系统升级时,有时会遇到软件自身与其上个版本的软件冲突的情况,提示错误信息类似如下:
error: failed to commit transaction (conflicting files)
......: /usr/share/...... exists in filesystem
Errors occurred, no packages were upgraded.
-> error installing repo packages
这时,升级和覆盖冲突包的正确方法是使用--overwrite
:
sudo pacman --overwrite "*" -Syu
如果是在升级某个软件时,遇到类似上述提示错误,使用如下命令强制覆盖升级:
sudo pacman -S --overwrite \* <package_name>
或者
sudo pacman -S --overwrite "*" <package_name>
版权声明:本文由 Duter2016 在 2023年06月09日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《Arch Linux 常用命令总结》