Skip to content

Linux 系统维护

TODO: 建立一个索引

相关命令

ls /dev/sd*

# fdisk
sudo fdisk -l
sudo fdisk /dev/sdb    # 输入 m,查看命令帮助

lsblk -f

# mkfs
sudo mkfs.ext4 /dev/sdb5 # 将/dev/sdb5格式化成ext4文件系统

查看系统信息

# 系统信息
uname -a
# 发行版本
cat /etc/os-release

显卡

lshw -numeric -C display
hwinfo --gfxcard --short # 需要安装
# or 还可以显示推荐的驱动版本
ubuntu-drivers devices

检测 lm_sensor TODO

驱动

# 驱动操作
insmod / modprobe  加载驱动  
rmmod              卸载驱动  
lsmod              查看系统中所有已经被加载了的所有的模块以及模块间的依赖关系  
modinfo            获得模块的信息

# 查看已经加载的驱动模块的信息
lsmod              能够显示驱动的大小以及被谁使用  
cat /proc/modules  能够显示驱动模块大小、在内核空间中的地址
cat /proc/devices  只显示驱动的主设备号,且是分类显示 
ls /sys/modules   下面存在对应的驱动的目录,目录下包含驱动的分段信息

cat /proc/driver/nvidia/version # 查看内核驱动版本

from here

显卡驱动

# 查看
cat /proc/driver/nvidia/version
# sudo rmmod nvidia_drm nvidia_modeset nvidia 实现卸载了内核驱动?
modinfo nvidia

时间

date -R     # 查看时区

设置时区

apt-get install tzdata tzselect

注意如果没有 tzdata 会报缺少 /usr/share/zoneinfo/iso3166.tab 的错。

实际上,系统时区配置(似乎)仅仅依赖于 /etc/localtime 文件,在没有安装 tzdata 的情况下,从其他的机器上复制时区文件为 /etc/localtime 即可进行设置。

cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

日志

dmesg   # 查看启动信息

Show LISTEN ports 查看监听端口

lsof -nP -i    #参见 macOS
netstat -tulpn | grep LISTEN

# 20210731 更新:似乎下面的记住就行
lsof -i:8080
  • macOS
    • Who is listening on a given TCP port on Mac OS X?
    • lsof
      • lsof - list open files
      • -i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list],注意 -i 指定TCP协议后有端口,可以放最后一个参数 -nPi
      • -P no port names
      • -n no host names 如果不加会很慢
lsof -nP -i | grep LISTEN        # 指定 n 速度比较快

制作启动盘

su
# 两个分区分别格式化为 NTFS 和 FAT32
fdisk -l  # 检查U盘,例如是 /dev/sdd
fdisk /dev/sdd # 分区,两个,留30M给第二个分区
yum install ntfsprogs # 安装处理NTFS的软件
mkfs.ntfs /dev/sdd1  # 速度比较慢
mkfs.vfat -F 32 /dev/sdc

wget https://software-download.microsoft.com/sg/Win10_21H1_Chinese(Simplified)_x64.iso?t=1e1d7d9d-a5d6-4c51-aa8d-38b35c627f1d&e=1632986672&h=53a28504164261a06e63f0c446241fc1
wget https://github.com/pbatard/rufus/blob/master/res/uefi/uefi-ntfs.img

sudo dd if=Win10_21H1_Chinese(Simplified)_x64.iso of=/dev/sdd1 bs=4M status=progress
sudo dd if=uefi-ntfs.img of=/dev/sdd2  # 也可以挂在两个,然后复制过去,注意需要把 img 下的隐藏文件也复制过去保留文件结构(而非仅仅是 EFI 文件夹)

from 在Linux下制作Linux&windows启动盘

挂载LVM

在Ubuntu下挂载 CentOS 中的LVM

# 安装lvm2软件
sudo apt-get install  lvm2
#  扫描 LVM 找到 VG
sudo vgscan
# 激活
sudo vgchange -ay VolGroup01
sudo lvs # 列出
# 挂载
sudo mount /dev/VolGroup01/LogVol00   /mnt

系统迁移

尝试过一次

Arch Linux 将系统转移到新的分区

这里将西数盘上(nvme0) 安装的 Arch 系统转移到三星 (nvme1) 的一个分区下, EFI 统一管理.

简单记录相关命令

# 1. 将系统复制到新驱动器
# 分区,构建文件系统
sudo fdisk /dev/nvme1n1
lsblk -f # --fs 输出文件系统信息
sudo mkfs.ext4 /dev/nvme1n1p5
# 用 rsync 将全盘复制到新分区
sudo pacman -Syy rsync
rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt
lsblk -f # 检查一下

# 2. 更新fstab
sudo mount /dev/nvme1n1p5 /mnt
sudo arch-chroot /mnt
# 这里进了新系统的环境,生成新的 fstab, 因此需要根据新系统下的挂载情况挂载相应的磁盘
mount /dev/nvme1n1p2 /efi # 这块磁盘上的 EFI 分区
sudo pacman -S --needed arch-install-scripts # 包括 arch-chroot, genfstab 等
genfstab -U / >> /etc/fstab # 如果是直接 mount 的话应该是 genfstab -U /mnt >> /mnt/etc/fstab

# 3. 重新安装引导加载程序 grub
# 安装,这里的 esp 即EFI系统分区,例如上面 mount /dev/nvme1n1p2 /efi 就是用 /efi
grub-install --target=x86_64-efi --efi-directory=[esp] --bootloader-id=GRUB
# 下面配置 grub,采用 grub-mkconfig 自动生成 (也可以手动写)
# 多系统引导,采用 os-prober 
sudo pacman -S os-prober 
# 挂载其他系统所在分区; 经测试 Windows 也可以识别
sudo mount /dev/nvme1n1p6 /root/sysA
grub-mkconfig -o /boot/grub/grub.cfg

# 完成!
sudo reboot

工具

格式转换工具

比较讨厌的是 doc 格式不好处理;win 平台可以利用 Python 打开 Word 另存为来解决,Linux 平台就不太好搞。

  • Pandoc 不支持doc,对于docx可识别表格等格式
pandoc -i some.docx -t plain > some.txt
  • antiword 可以 doc2docx ,但是输出的好像都是固定每行字数的格式?没法保留整段内容
  • docx2txt 支持docx转txt 格式没有pandoc好;也不支持doc
  • textract 支持的格式似乎挺多,但处理doc后台调用的是antiword

Debug

自动挂载

编辑 /etc/fstab 文件实现自动挂载

sudo gedit /etc/fstab

# 在已有内容的后面新起一行,写入下面了内容;
# 第一个参数为你要挂载的分区(/dev/sdb5);
# 第二个参数为挂载的位置(/sdb5文件夹必须存在);
# 第三个参数是分区文件类型(ext4),格式化的时候的那个类型,后面的参数默认即可;
/dev/sdb5   /home/qing/sdb5  ext4   defaults    0  0

制作(Linux)启动盘

找到U盘设备号后(可用 sudo fdisk -lsudo lsblk 等)

sudo dd if=~/ubuntu-16.04-desktop-amd64.iso of=/dev/sdc status=progress oflag=sync
  • status=progress 用来输出刻录过程中的信息。
  • oflag=sync 用来控制写入数据时的行为特征。确保命令结束时数据及元数据真正写入磁盘,而不是刚写入缓存就返回。

系统迁移/U盘

tar cvpzf backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/backup.tgz –exclude=/mnt –exclude=/sys /
# 恢复
tar xvpfz backup.tgz -C /
mkdir sys mnt proc lost+found

安装到U盘

Failed to connect to ip port

可能是配置了防火墙,参见 here

# 通过命令查看防火墙策略
sudo iptables -L | more
# 如果输出内容为Chain INPUT (policy DROP),再执行修改策略
sudo iptables -P INPUT ACCEPT
# 直到确认输出为Chain INPUT (policy ACCEPT),才可清除所有规则停止防火墙
sudo iptables -F 
# 关闭防火墙
systemctl stop firewalld.service