1   Bash终端 1.1   符号输入控制 2   基础命令 关机:poweroff
(也是调用shutdown工具链实现)halt
(实际调用shutdown -h)shutdown -h now
init 0
(init是所有进程的祖先,他是Linux系统操作中不可缺少的程序之一。它的进程号始终为1,所以发送TERM信号给init会终止所有的用户进程,shutdown就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机,init 1为重启。) 重启reboot
shutdown -r now
(root权限可使用)init 1
3   包管理器 3.1   apt 3.1.1   apt update证书验证错误 错误信息:Certificate verification failed: The certificate is NOT trusted.
1 sudo apt install --reinstall ca-certificates
4   编译问题 4.1   编译环境的常规配置 以ubuntu举例,下载和更新相关的依赖:
1 2 3 4 apt update apt upgrade apt install linux‑headers‑amd64 apt install build‑essential
4.2   源码编译的程序的安装和卸载 常规的编译安装过程:
1 2 3 4 sudo ./configure --prefix=/path_to_installsudo make -j32make install
卸载方式:
反安装target: make uninstall/distclean/veryclean make install之后目录下有一个install_mainfest.txt的文件记录安装的所有内容:xargs rm < install_manifest.txt
若未指定prefix且没有install_mainfest.txt,临时目录重新安装:./configure --prefix=/tmp/to_remove && make install
,遍历/tmp/to_remove
内的文件,把最初安装诶只的文件删除(缺点:部分文件夹可能无法删除,无法确定是系统安装或者源码编译安装) debian系列linux可尝试使用auto-apt 和 checkinstall: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 apt install auto-apt checkinstall auto-apt run ./configure make checkinstall dpkg -r packagename dpkg -i ***.deb dpkg -L packagename dpkg -l | grep packagename apt list --installed | grep packagename
4.3   普通用户导致的编译问题 普通用户中如果在系统关键目录中,如/opt
,执行sudo make
可能会出现xxx command not found
,这是因为有些命令在sudo
下是不可见的,但如果不用sudo
,make
又无法在这些路径生成文件。
解决方式:使用make -f
参数指定makefile
文件,让它在有权限的路径中工作。例如,将工作路径切到home
目录中,make -f /opt/xxx/xxx/makefile
,make
可在home
路径中生成文件。
4.4   常见编译错误 make /lib/modules/xxx/build no such file or directory:证明无 header 在新系统上编译老驱动可能会遇到'SUBDIRS' was removed in Linux 5.3 Use 'M=' or 'KBUILD_EXTMOD=' instead:这代表驱动太老了,驱动代码的编译流程已不适合新系统。 5   账户管理 5.1   删除账户 1 2 userdel [-r] [user_account] userdel -r kin
5.2   自动root登录 1 2 3 4 gedit /etc/gdm/custom.conf AutomaticLoginEnable=True AutomaticLogin=root
5.3   重置密码(ubuntu为例) 进入到救援模式中,选择root选项(root Drop to root shell prompt),敲一次回车enter键显示:root@ubuntu:~#
重置密码命令:passwd 系统账户名
,按提示输入两次密码确认 exit退出shell,选择resume回到正常启动中。 5.4   帐号和密码文件(/etc/passwd和/etc/shadow) Linux系统中,所有用户(包括系统管理员root)的账号和密码存储在/etc/passwd和/etc/shadow这两个文件中。其中,passwd保存的是账号,shadow保存的是账号的密码等信息(/etc/passwd只有root才可以修改的,/etc/shadow只有root才能查看)
5.4.1   /etc/passwd 示例:root:x:0:0:root:/root:/bin/bash
上面每一行都代表一个用户,每一行又通过[:]分为7个部分。
账号名称 为密码占位符(x表示该账户需要密码才能登录,为空时,账户无须密码即可登录)。原先用来保存密码的,现在密码都放在/etc/shadow中,所以这里显示x。 UID,也就是使用者ID。默认的系统管理员的UID为0,我们添加用户的时候最好使用1000以上的UID,1-1000范围的UID最好保留给系统用。 GID,也就是群组ID 关于账号的一些说明信息(暂时可以忽略) 账号的家目录,家目录就是你登陆系统后默认的那个目录 账号使用的shell。/bin/bash为可登录系统Shell,/sbin/nologin表示账户无法登录系统。 5.4.2   /etc/shadow 示例:root:!:15324:0:99999:7:::
上面每一行都代表一个用户,每一行又通过[:]分为9个部分。
账户名称(密码需要与账户对应的) 加密后的密码:如果这一栏的第一个字符为!或者*的话,说明这是一个不能登录的账户,从示例可看出ubuntu默认的就不启用root账户。(账户未设置密码时为空,设置密码后加密显示。!为无效哈希,系统会自动锁定这些账户并阻止登录,通过在/etc/passwd设置/bin/false或者/sbin/nologin实现禁止登录) 最近改动密码的日期:上次修改密码的时间距离1970年01月01日多少天 密码不可被变更的天数:设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是0的话,则没有限制 密码需要重新变更的天数:密码经常更换才能保证安全,为了提醒某些经常不更换密码的用户,可以设置一个天数,强制让用户更换密码,也就是说该用户的密码会在多少天后过期(默认位99999天,可以理解为永不过期) 密码过期预警天数:如果在5中设置了密码需要重新变更的天数,则会在密码过期的前多少天进行提醒,提示用户其密码将在多少天后过期 密码过期的宽恕时间:如果在5中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数 账号失效日期,过了这个日期账号就不能用了 保留未使用 5.4.3   /etc/shadow文件中密码的加密方式 示例:root:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.:14838:0:99999:7:::
示例的密码域:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.
,密码域密文也是由三部分组成的,即:$id$salt$encrypted,详细参见linux标准源文件passwd.c中的pw_encrypt函数。
加密算法:明文密码和一个叫salt的东西通过函数crypt()完成加密
id为1时,采用md5进行加密;id为5时,采用SHA256进行加密;id为6时,采用SHA512进行加密。
得知加密方式,可以复制密文到相关工具上逆向破解:
6   硬盘和分区管理 6.1   挂载一个新硬盘 1 2 3 4 5 6 7 8 9 lsblk df -lh sudo fdisk -l sudo fdisk /dev/sdb sudo mkfs.ext4 /dev/sdb sudo mkdir /mnt/pan sudo mount /dev/sdb /mnt/pan sudo vim /etc/fstab /dev/sdb /mnt/pan ext4 defaults 0 0
6.2   将/home目录挂载到新分区(或新硬盘) 1 2 3 4 5 6 7 8 9 10 11 sudo mkdir /mnt/homesudo mount /dev/新分区 /mnt/home sudo rsync -aXS /home/ /mnt/home sudo mv /home /home_oldsudo mkdir /homesudo umount /dev/新分区sudo mount /dev/新分区 /homeblkid|grep /dev/新分区 sudo gedit /etc/fstab sudo rm -rf /home_old
6.3   查看硬盘是不是固态硬盘(SSD) 1 2 3 4 5 cat /sys/block/sda/queue/rotationallsblk -d -o name,rota
7   网络 7.1   查看网卡信息 查看ip信息:
windows:ipconfig /a linux: ifconfig(配置网络接口)或者iwconfig(配置无线网络接口) 网卡名称解析:
lo:表示local wl:表示wlan(Wireless Local Area Network)无线局域网 en:表示ethernet以太网 PCI接口的物理位置的坐标(bus, slot),其中bus表示总线,slot表示插槽 例子:
wlp3s0表示,WLAN PCI接口位置:bus=3, slot=0。 enp2s0表示,Etnernet PCI接口位置:bus=2, slot=0。 7.2   ubuntu配置网卡 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 sudo nano /etc/netplan/01-netcfg.yamlnetwork: version: 2 renderer: networkd ethernets: eth0: addresses: - 192.168.1.10/24 gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] network: version: 2 renderer: networkd ethernets: eth0: dhcp4: yes sudo netplan apply
7.3   ssh登录远程服务器 大部分系统都预装ssh程序客户端,方便连接其他ssh服务器使用,包括windows系统。如果需要设置作为被连接的ssh端,需要自行手动安装ssh的server。
连接命令:ssh 系统账户名@远程服务器ip
,例如ssh root@192.168.1.1
查看ssh版本:ssh -V
7.3.1   Ubuntu开启ssh服务及允许root登录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo apt install openssh-serversudo nano /etc/ssh/sshd_configPermitRootLogin yes sudo systemctl restart sshd.servicesudo passwd
7.3.1.1   系统自启ssh服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sudo systemctl enable sshsudo systemctl disable sshsudo systemctl start sshsudo systemctl stop sshsudo systemctl status sshsystemctl status sshd
7.3.2   使用scp传递文件 windows和linux之间传输更推荐使用WinSCP 工具。
下载安装PuTTY 在PuTTY安装路径中打开终端窗口 拷贝命令:pscp [Linux用户名]@[Linux服务器ip地址]:[Linux服务器源文件] [本地目标文件夹]
,示例:pscp d:\Old\test.jpg root@ipaddress:/var/www/html/
8   远程控制软件 8.1   ubuntu linux安装远程控制软件 根据系统类型下载官方安装包 安装命令:sudo apt-get install ./todesk-v4.7.2.0-amd64.deb
运行命令:todesk
8.2   arch linux安装远程控制软件 P.S.配置好arch的“国内源”和“社区源”,安装yay。
1 2 3 4 5 yay -S todesk sudo systemctl start todeskd.servicesudo systemctl enable todeskd.service
1 2 3 4 5 6 yay -S teamviewer sudo teamviewer daemon startsudo teamviewer daemon enable sudo teamviewer daemon restart
1 2 3 4 5 yay -S sunloginclient sudo systemctl start runsunloginclient.servicesudo systemctl enable runsunloginclient.service
P.S.若遇到todesk打开系统就注销的问题,尝试下先删除teamviewer再重新安装一下,之后再打开todesk测试(yay社区编译版本的todesk和teamviewer可能存在冲突)。
9   开机排障 9.1   ubuntu恢复模式(recovery mode)/linux救援模式(rescue mode) 救援模式相当于使用 SysV 作为默认的服务管理器的 Linux 发行版中的单用户模式。ubuntu和debian系列常用说法就是恢复模式,其他不同类的linux发行版更多常说救援模式。在救援模式下,将挂载所有本地文件系统,仅启动一些重要服务。但是,不会启动正常服务(例如网络服务)。一般系统无法正常启动时,进入该模式修复,例如重置root。
如果同时需要网络的话,在Recovery Menu中选择network模式即可。
若硬盘挂载失败,会自动进入到救援模式中。修正fstab表中正确的硬盘uuid,之后正确恢复到 ubuntu摁一次esc键可以进入可grub选择界面,重复摁会导致无法进入的。进入到grub选择界面后,选择ubuntu的高级选项(Advanced options for Ubuntu)并选择recovery mode进入到救援模式。如果没有可选择的界面,尝试重启长摁SHIFT键或者shift+esc组合键看看,出现后可以使用上下方向键,防止自动读秒。 编辑grub进去到救援模式:
在grub选择菜单中,选择Ubuntu
,按e键进入编辑模式 在以linux
开头的一行末尾,删除字符串$vt_handoff
并添加字符串systemd.unit=rescue.target
修改完成后,按Ctrl+X或者F10,在救援模式中启动 1 2 3 4 5 6 7 8 systemctl emergency systemctl reboot exit
9.2   ubuntu紧急模式 在紧急模式中不启动任何东西。没有服务启动、没有挂载点、没有建立套接字,什么也没有。只是一个原始的 shell。
从紧急模式切换到救援模式:systemctl rescue
编辑grub进去到救援模式:
在grub选择菜单中,选择Ubuntu
,按e键进入编辑模式 在以linux
开头的一行末尾,删除字符串$vt_handoff
并添加字符串systemd.unit=emergency.target
修改完成后,按Ctrl+X或者F10,在救援模式中启动 9.3   开机出现initramfs(requires a manual fsck) 问题常见于以下常见场景:
异常断电或者关机引起文件数据损坏 系统无法启动 连接的驱动器(包括闪存驱动器/SD卡这类设备)未按预期工作 解决方法:
10   显卡驱动 10.1   ubuntu 20.04安装英伟达nvidia闭源驱动 10.1.1   运行nvidia-smi可能出现的报错:Failed to initialize NVML: Driver/library version mismatch NVML library version 故障原因:系统检测到驱动和NVML版本不一致的原因导致的。
解决方法:sudo reboot
重启系统即可。
11   参考文献 [1] ubuntu开机出现initramfs(requires a manual fsck)解决办法[EB/OL]. https://www.cnblogs.com/yibeimingyue/p/14261416.html . [2] 如何在 Ubuntu 18.04 中启动到救援模式或紧急模式[EB/OL]. https://zhuanlan.zhihu.com/p/53902139 . [3] Linux下如何查看一块硬盘是不是固态硬盘(SSD)[EB/OL]. https://blog.csdn.net/qq_42303254/article/details/89317618 . [4] Ubuntu 18.04 apt update failed for https repository[EB/OL]. https://askubuntu.com/questions/1229122/ubuntu‑18‑04‑apt‑update‑failed‑for‑https‑repository . [5] 将/home 目录挂载到新分区(或新硬盘)[EB/OL]. https://blog.51cto.com/runixcn/4605838 . [6] ubuntu修改密码(详细版)「建议收藏」[EB/OL]. https://cloud.tencent.com/developer/article/2159425 . [7] Linux账号和密码文件 /etc/passwd和/etc/shadow[EB/OL]. https://www.cnblogs.com/fuyuanming/p/6519758.html . [8] What means * and ! at second field of /etc/shadow?[EB/OL]. https://superuser.com/questions/623881/what-means-and-at-second-field-of-etc-shadow . [9] SSH and locked users[EB/OL]. http://arlimus.github.io/articles/usepam/ . [10] Linux shadow文件中密码的加密方式[EB/OL]. https://www.cnblogs.com/7-58/p/13328148.html . [11] 使用root ssh登录ubuntu22.4配置[EB/OL]. https://www.cnblogs.com/waldron/p/16864613.html . [12] Windows连接ssh、scp到Ubuntu服务器[EB/OL]. https://blog.csdn.net/renshy5/article/details/117735410 . [13] Ubuntu下移动硬盘的分区、格式化、挂载操作[EB/OL]. https://zhuanlan.zhihu.com/p/397440213 . [14] Ubuntu ifconfig 查看网卡信息 lo enp2s0 wlp3s0 具体含义[EB/OL]. https://blog.csdn.net/wuyujin1997/article/details/105460929 . [15] arch linux 安装teamviewer,todesk,向日葵,远程软件方法[EB/OL]. https://www.jianshu.com/p/e4b61f754071 . [16] 怎么卸载用 make install 编译安装的软件?[EB/OL]. https://www.zhihu.com/question/20092756 . [17] Ubuntu网络配置:使用DHCP自动配置网卡[EB/OL]. https://blog.csdn.net/VqaEditor/article/details/133605050 . [18] The Ultimate Guide to Recovery and Rescue Mode in Ubuntu[EB/OL]. https://www.fosslinux.com/113044/the-ultimate-guide-to-recovery-and-rescue-mode-in-ubuntu.htm . [19] 如何启动 Ubuntu 22.04 进入救援/紧急模式[EB/OL]. https://linux.cn/article-14750-1.html . [20] 【已解决】Failed to initialize NVML: Driver/library version mismatch NVML library version: 535.161[EB/OL]. https://blog.csdn.net/BetrayFree/article/details/137608544 .