1.软件包管理工具

dnf命令

建立软件包缓存

sudo dnf makecache

进行软件包更新

sudo dnf upgrade

更新单个软件包

sudo dnf upgrade package_name

搜索软件包

dnf search package_name

查找软件包,使用通配符

dnf list kernel-*

列出所有软件包

dnf list all

列出已安装软件包

dnf list installed package_nam

列出所有包组

dnf group list

列出已启用的软件仓库

dnf repolist

列出来自单个软件仓库的软件包

dnf repository-packages fedora list

显示单个软件包的信息

dnf info package_name

列出具体软件包的所有信息

dnf repoquery package_name --info

列出哪个软件包提供了该二进制文件

dnf provides "*bin/named"

列出某个软件包组的详细信息

dnf -v group list group_name

安装单个软件包

sudo dnf install package_name

不知道包名的情况下使用

sudo dnf install /usr/sbin/named

安装软件包组

sudo dnf groupinstall group_nane

卸载软件包

sudo dnf remove package _name

卸载软件包组

sudo dnf group remove group_name

列出所有事务

dnf history list

2.驱动安装

显卡

查看显卡型号

lspci -k | grep -EA3 'VGA|3D|Display' 

AMD, Intel显卡免驱

查看模块加载情况

lsmod|grep amdgpu

NVIDIA 显卡驱动安装

1.进行软件包更新

sudo dnf update  --refresh

2. 安装驱动程序及其依赖

sudo dnf install gcc kernel-headers kernel-devel akmod-nvidia xorg-x11-drv-nvidia xorg-x11-drv-nvidia-libs xorg-x11-drv-nvidia-libs.i686

3.等待驱动模块加载,过程需要5~10分钟

ps -e | grep akmods # 执行命令无输出说明模块安装完成

4.强制从更新的内核模块中读取配置

sudo akmods --force

sudo dracut --force

5.命令完成后重新启动系统

sudo reboot
lsmod | grep nvidia # 查看模块加载情况

网卡

intel

fedora预置了iwlwifi驱动模块,故可以即插即用。
若其他系统比如debian默认没有预置需要添加non-free源并安装firmware-nonfree包,也可以将固件下载下来复制到/lib/firmware
近期我将预置的我将预置的wpa_supplicant换成了iwd,fedora提供了iwd的包

安装

sudo dnf install iwd

停止并屏蔽wpa_supplicant

sudo systemctl stop wpa_supplicant

sudo systemctl mask wpa_supplicant

设置自动启动

sudo systemctl enable --now iwd

设置NetworkManager

由于NetworkManager默认以wpa_supplicant为后端,因此需要更改后端为iwd

sudo vim /etc/NetworkManager/conf.d/iwd.conf
[device]
wifi.backend=iwd
wifi.iwd.autoconnect=yes

重启NetworkManager

sudo systemctl restart NetworkManager

realtek

你可能需要自己编译驱动,源码请自行寻找。

3. systemd服务

启动服务

systemctl start service_name

重启服务

systemctl restart service_name

服务自动启动

systemctl enable service_name

服务取消自动启动

systemctl disable service_name

屏蔽服务

systemctl mask service_name

查看服务是否自动启动

systemctl is-enabled service_name

编辑服务

systemctl edit httpd.service

新建服务

vim /etc/systemd/system/foo.service
#示例
[Unit]
Description=frpc #服务描述
After=network.target #在网络连接激活后启动

[Service]
Type=simple #服务类型
ExecStart=/usr/bin/frpc -c frp.ini #命令

[Install]
WantedBy=multi-user.target
systemctl status service_name #查看服务运行状态

journalctl -u service_name #查看服务运行日志

journalctl --vacuum-size=1M #清理运行日志

硬件解码

注意:需要先启用rpmfusion仓库才能继续操作!

sudo dnf install gstreamer1-plugins-{bad-\*,good-\*,base} gstreamer1-plugin-openh264 gstreamer1-libav --exclude=gstreamer1-plugins-bad-free-devel
sudo dnf install lame\* --exclude=lame-devel
sudo dnf group upgrade --with-optional Multimedia

intel视频解码

sudo dnf install intel-media-driver libva libva-utils gstreamer1-vaapi ffmpeg intel-gpu-tools mesa-dri-drivers mpv

编辑~/.bashrc

export LIBVA_DRIVER_NAME=iHD

十一代CPU及以后开启guc以及fbc
编辑/etc/modprobe.d/i915.conf

options i915 enable_guc=3
options i915 enable_fbc=1

重新生成initramfs

sudo dracut --force

重启查看guc以及huc是否启用

sudo dmesg | grep -i guc

浏览器硬件解码

chrome
wayland下不可用

/usr/bin/google-chrome-stable --proxy-server=socks5://127.0.0.1:7890 --enable-gpu-rasterization --enable-zero-copy --disable-features=UseChromeOSDirectVideoDecoder --enable-features=VaapiVideoDecoder --enable-features=VaapiVideoEncoder --ignore-gpu-blocklist --ozone-platform-hint=auto --gtk-version=4 --enable-features=WebUIDarkMode --force-dark-mode %U

firefox
硬件解码应该开箱即用

4.vim命令

命令模式

i 进入编辑模式
x 删除当前光标所在处的字符
: 切换到底线命令模式

输入模式

回车键换行
退格键删除光标前一个字符
删除键删除光标后一个字符
方向键在文本中移动光标
HOME/END移动光标到行首/行尾
Page Up/Page Down上/下翻页
Insert切换光标为输入/替换模式,光标将变成竖线/下划线
ESC退出输入模式,切换到命令模式

输入“/”搜索字符串,回车后跳转到对应字符串位置

5.KVM虚拟化

查看CPU是否支持虚拟化,有输出说明CPU支持虚拟化

egrep '^flags.*(vmx|svm)' /proc/cpuinfo 

安装虚拟化包组

sudo dnf install @virtualization

设置libvirtd自动启动并启动服务

sudo systemctl enable --now libvirtd

查看KVM内核模块是否加载

lsmod | grep kvm

使用virsh-install配置

sudo virt-install --name Fedora \
--description 'Fedora' \
--ram 4096 \
--vcpus 4 \
--disk path=/var/lib/libvirt/images/linux.qcow2,size=20 \
--os-type linux \
--os-variant fedora36 \
--network bridge=virbr0 \
--graphics vnc,listen=127.0.0.1,port=5901 \
--cdrom Fedora-Workstation-Live-x86-64-36-1.1.iso \
--noautoconsole

使用virt-manager配置

根据gui界面管理

使用virsh配置

创建虚拟机

virsh create machine_name 

列出所有虚拟机

virsh list --all

导出配置文件

virsh dumpxml <virtual machine (name | id | uuid)

虚拟机关机

virsh shutdown machine_name

虚拟机强制关机

virsh destroy machine_name

6.启用第三方软件仓库

启用flathub仓库

添加软件源

flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

搜索软件包

flatpak --user search package_name

安装软件包

flatpak --user install package_name

删除软件包

flatpak --user remove package_name

启用rpmfusion软件仓库

sudo dnf install https://mirrors.ustc.edu.cn/rpmfusion/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.ustc.edu.cn/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

之后执行dnf makecache重新生成软件包缓存即可。

设置其他软件仓库

依照软件官网的设置向导设置即可。

7.中文输入法配置

sudo dnf install fcitx5-configtool fcitx5 fcitx5-rime

配置输入法自动启动

sudo dnf install fcitx5-rime

注销账户重新登录或者重启电脑后即可使用。

8.端口被占用解决方法

查看占用端口的程序

lsof命令

lsof -i:port_number

netstat命令

netstat -tunlp | grep port_number

杀死占用端口的程序

kill -9 PID

9.开启sysrq

由于某个服务卡死或者kernel loop导致无法关机时使用

sudo vim /etc/sysctl.d/90-sysrq.conf
kernel.sysrq = 1

查看sysrq是否已启用

cat /proc/sys/kernel/sysrq

注:各数字代表功能:

  • 0 - disable sysrq completely
  • 1 - enable all functions of sysrq
  • >1 - bitmask of allowed sysrq functions (see below for detailed function description):
    • 2 - enable control of console logging level
    • 4 - enable control of keyboard (SAK, unraw)
    • 8 - enable debugging dumps of processes etc.
    • 16 - enable sync command
    • 32 - enable remount read-only
    • 64 - enable signalling of processes (term, kill, oom-kill)
    • 128 - allow reboot/poweroff
    • 256 - allow nicing of all RT tasks

临时启用sysrq

echo "number" >/proc/sys/kernel/sysrq 

注:需重启电脑或sysctl -p生效

10.迁移/var目录遇到的问题

由于我的好多docker镜像存储在/var目录,导致根目录可用空间越来越小,于是考虑将/var目录迁移到新分区。

迁移过程

备份

注:若要备份整个系统,则需要排除目录/proc,/lost+found,/mnt,/sys,/run/media,/dev,/tmp,若备份输出的包本身在备份目录则还要排除包本身,可以使用–exclude命令进行排除

pigz打包

sudo tar --use-compress-program=pigz -cvpf linux-backup.tgz /var

zstd打包

sudo tar -z -c -T0 -18 -v -p -f - linux-backup.zstd /var

恢复

切换到LiveCD

BIOS设置为LiveCD启动,然后重启电脑

挂载磁盘

sudo mount /dev/nvme0n1p3 /mnt/var

解包备份文件

pigz解包
sudo tar -xvf linux-backup.tgz -C /mnt/
zstd解包
sudo tar -z -c -T0 -18 -v -p -f - linux-backup.zstd -C /mnt/

重启电脑

遇到的问题

最初不知道为啥不开机,发现可进入shell,进入shell后发现/var/log/audit/audit.log中有大量denied字段,猜测可能是selinux问题,于是把selinux设置为disabled重启电脑发现正常,重新开启后就不开机,发现文件的label可能已经错乱。

由于文件的selinux标识不正确导致无法开机,google了很多资料,重新标记文件标识才解决。

解决方法

设置开机后重新标记文件

sudo fixfiles -F -B onboot

最终结果

重启后selinux重新relabel有一堆警告,可以无视,重启后即可正常开机,log中也没有大量denied字段。

11.无法执行二进制文件的解决方法

systemd报错提示Permission Denied,怀疑是selinux的问题,于是setenforce 0,重启systemd服务,二进制文件可以正常执行,于是查资料发现需要selinux设置可执行文件标签才可以正常运行程序。

sudo chcon -R -t bin_t /usr/bin/tuic

12.ssh远程登录机器时遇到的问题

远程登录时遇到publickey permission denied报错,经过查阅资料发现ssh密钥不是立刻被导入电脑的,需要自己先行导入。
注意:有时无法登录时可以kill掉ssh-agent进程并重新启动此进程。

eval $(ssh-agent) > /dev/null
killall ssh-agent #kill掉ssh-agent进程
eval `ssh-agent`
ssh-add ~/.ssh/id_rsa #添加自己的密钥

第一次登录可以使用-i选项指定密钥登录,此外也可以指定端口。

ssh -i /path/to/yourkey username@host -p port

重要:公钥放在服务器的authorized_keys文件中,私钥一定要自己拿好,不要给别人,服务器一定要禁用密码登录和root用户登录!

PasswordAuthentication yes #禁止密码登录
PermitRootLogin no #禁止root用户登录