尧图精选

Linux系统学习笔记:从基础命令到服务部署的完整知识框架

🕒 发布时间:2026/10/2 10:23:21 📁 来源:尧图网络
2026年1月12日我把过去一年多攒下的Linux知识重新整理了一遍。起因很直接手边三台机器——一台跑业务的Rocky Linux 9服务器、一台装着Debian 13Trixie的退役笔记本、一台放在虚拟机里的Kali——每台上面都散落着半年前的笔记和终端历史。之前的学习方式基本属于零散拾荒今天搜一个linux常用命令明天照着教程装个Docker后天被面试题考倒再回去补概念。时间一长知识点之间全是漏洞。所以我决定花一整天把整个知识框架重过一遍从虚拟机装系统开始到常用命令、用户权限、网络存储再到Docker部署和进程间通信最后把Linux面试题里高频出现的考点和操作陷阱也顺了一遍。整理过程明显比预想中费劲因为每个命令背后都能扯出一串为什么但也正是这些为什么让我从会敲命令变成了理解系统。这篇笔记就是当天的整理版适合正在系统学习Linux的新手也适合想查漏补缺的运维、开发以及准备Linux岗位面试的人。1. 这次整理的主线从装系统到跑服务的五个阶段1.1 触发整理的真实场景很多人学Linux是用到哪查到哪我那天决定整理是因为连续遇到了四件小事。第一件是帮同事排查一台新装的服务器网卡怎么都起不来前前后后折腾了一个多小时最后发现是NetworkManager把接口接管了而同事还在用老掉牙的ifcfg文件配置方式。第二件是参与了几场技术面试发现不少候选人对ls、grep这些命令很熟但一问到进程间通信有哪几种方式为什么/etc目录下的passwd命令带setuid位就开始含糊其辞。第三件是公司内部要搞私有化部署从Docker到数据库中间件全都要自己在Linux上搭起来。第四件是那天顺手翻了翻网上的技术热搜linux常用命令linux挂载nas存储rocky linux网卡文件kali linux安装教程这些词条的热度一直很高说明很多人都卡在同样的地方。1.2 我的整理主线当天整理时我没有按命令字母表去列大全而是给自己定了一条主线环境装系统→ 基础命令、用户、进程→ 外围网络、存储→ 服务化Docker、ClickHouse、私有服务→ 延伸嵌入式、安全。这条主线其实就是一套业务系统从无到有的步骤。沿着它去整理每个知识点都有明确的使用场景而不是孤立的命令行碎片。我用笔记软件建了五个目录每个知识点记录四件事是什么、怎么用、为什么、坑在哪。1.3 给自学Linux的人三条建议先说结论。第一准备两台机器一台生产型发行版比如Rocky Linux一台折腾型发行版比如Debian或Kali。生产型的让你习惯稳定维护折腾型的让你敢于反复重装试错。第二别只敲命令遇到问题先man手册再去看/proc目录下的运行时信息很多底层知识都是从这里长出来的。第三把每个命令从我会用变成我知道它内部做了什么比如rm不只是删除而是unlink一个目录项df和du统计维度的差异背后是文件系统和块设备的区别。这样学出来的知识才是能迁移的。2. 环境准备虚拟机装Linux的蓝屏问题与发行版选型2.1 虚拟机安装蓝屏的完整排查链路先说那天最早遇到的坑在一台Windows 11笔记本上用VirtualBox安装Debian 13虚拟机启动没几分钟宿主机直接蓝屏重启。这不是客户机的问题是宿主机内核层面被触发崩溃了。排查链路是这样的。第一步先检验镜像完整性去官网下载页面比对SHA256排除安装镜像损坏。第二步打开任务管理器性能选项卡里看CPU的虚拟化是否已启用没启用就去BIOS里打开VT-x或AMD-V。这两步都没问题那第三个原因就指向Windows的Hypervisor和第三方虚拟机软件的冲突。Windows 10/11开启内核隔离内存完整性或WSL2功能时Hyper-V会接管虚拟化层。VirtualBox在这种情况下虽然也能跑但某些操作会触发嵌套虚拟化异常轻则性能暴跌重则直接蓝屏。我当时的管理员终端里执行了bcdedit /set hypervisorlaunchtype off重启后蓝屏消失。这里要提醒一句如果日常依赖WSL2或Docker Desktop关掉Hypervisor会让它们无法工作。这种情况下更稳妥的方案是换VMware Workstation它和Hyper-V的共存机制做得比VirtualBox成熟。装完系统后第一件事永远是装增强工具或VM Tools共享剪贴板、拖拽文件、自适应分辨率都靠它别省这一步。2.2 发行版怎么选Rocky、Debian、国产系与Kali很多新手纠结哪个发行版最好其实没有标准答案只有场景匹配。我整理了一张表格直接按用途选发行版包管理适合场景我用来做什么Rocky Linux 9dnf/rpm服务器生产环境、追求稳定部署Docker、ClickHouse、GiteaDebian 13 (Trixie)apt/deb通用服务器、桌面学习网络配置、源替换、日常折腾统信UOS / 银河麒麟apt/deb 或 yum/rpm企业国产化办公环境了解生态兼容性Kali Linuxapt/deb安全审计、CTF授权测试环境下的工具学习选型逻辑其实很简单服务器尽量靠拢RHEL系因为企业里存量系统、厂商支持、认证体系都围绕它展开网上能查到的生产排错案例也最多。日常学习和桌面体验用Debian系软件新、教程多、apt用起来顺手。至于统信UOS、银河麒麟这些国产发行版它们本质上是基于Linux内核的完整操作系统包管理方式与Debian或RHEL系同源在政企环境里很常见。从技术学习角度看你掌握标准Linux知识后切换到这些系统基本是无痛的。Kali则是安全领域的专用系统后面单独讲。网上常年有人争论生态最好的Linux系统我的观点是生态好不好取决于你所在的技术圈子长期用哪套体系而不是某个发行版本身。2.3 安装后立刻要做的三件事装完系统先别急着敲命令把三件事做了能省下后面很多麻烦。第一件事是确认网络。Rocky Linux 9默认使用NetworkManager管理网络登录后先执行nmcli device status看看网卡是否被识别再nmcli connection show查看连接配置。很多人上来就翻/etc/sysconfig/network-scripts/ifcfg-*在Rocky 9里这个老目录基本已经退居幕后配置文件实际放在/etc/NetworkManager/system-connections/下。第二件事是换软件源。Debian 13的一个大变化是默认的软件源配置文件不再是你熟悉的/etc/apt/sources.list而是/etc/apt/sources.list.d/debian.sources采用deb822格式。如果只改旧文件不生效别惊讶先看看新文件。换清华源时文件内容类似这样Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/debian/ Suites: trixie trixie-updates trixie-backports Components: main contrib non-free non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg安全更新源要单独配Suite写成trixie-securityURIs指向清华的debian-security路径。第三件事是配置Anaconda环境变量。很多人在Linux下装完Anaconda直接在终端敲conda却提示找不到命令原因就是PATH里没有/opt/anaconda3/bin。在~/.bashrc末尾加上export PATH/opt/anaconda3/bin:$PATH然后source ~/.bashrc。需要注意用sudo执行conda时PATH会被重置如果不希望每次sudo都找不到python就别在sudo环境下依赖conda或者显式使用绝对路径。3. 高频命令整理把常用命令大全变成自己的肌肉记忆3.1 按场景而非字母表整理命令网上流传的linux常用命令大全几乎都是按字母排序这种整理方式很低效。我按使用场景把命令分成五组记忆负担小得多文件操作ls、cp、mv、rm、find、tar、rsync文本处理grep、awk、sed、sort、uniq、head、tail进程管理ps、top、htop、kill、pkill、nice、renice网络排查ip、ss、netstat、ping、curl、wget、traceroute、nc磁盘存储df、du、fdisk、lsblk、blkid、mount光列命令没有意义我给你一个真实排查案例。那天一台服务器磁盘满了我先df -h发现根分区100%再用du -sh /var/log/*逐级找大目录定位到journal日志占了20G执行journalctl --vacuum-size500M清理。整个过程没有用一个高深命令全是基础工具的组合但比任何命令大全都实用。3.2 文本处理三剑客的一句话记忆grep负责过滤awk负责取列和统计sed负责替换和流编辑。记住各自的定位组合起来威力很大。统计日志里每个IP的出现次数一行搞定awk {print $1} access.log | sort | uniq -c | sort -rn | head -10去掉配置文件里的注释行sed -i /^#/d config.conf找进程但排除掉grep自身ps aux | grep sshd | grep -v grep这三个例子覆盖了90%的日常场景。学awk不要一上来啃几百页文档先记{print $列号}这个模式再逐步掌握内置变量NR、NF足够应付绝大多数处理需求。3.3 用户管理从新建用户到密码过期提醒用户管理是Linux系统管理的基础课也是面试题的重灾区。完整的新建用户流程是这样useradd -m -s /bin/bash alice echo alice:初始密码 | chpasswd usermod -aG wheel alice-m创建家目录-s指定登录Shellchpasswd批量设置密码比交互式passwd更适合脚本。RHEL系管理员组是wheelDebian系是sudo组别搞混。密码过期提醒是运维里经常被问到的一个点。单用户策略用chage命令chage -M 90 -W 7 alice chage -l alice-M 90表示密码最长使用90天-W 7表示提前7天开始提醒。全局限定在/etc/login.defs里修改PASS_MAX_DAYS和PASS_WARN_AGE注意这个文件只影响新用户存量用户要单独chage。如果想让用户首次登录必须改密码执行chage -d 0 alice效果是密码马上过期登录时强制改密。linux密码过期提醒通知是网上搜得很热的问题。Linux自带的提醒是在登录时终端里显示密码即将到期如果要真正发邮件通知需要配合pam_exec脚本或者cron定时扫描chage -l输出属于进阶玩法生产环境里不少公司就是这么做的。3.4 进程管理进阶修改进程名称到底改了什么热搜里有一条linux 修改进程名称这个需求很实际监控面板上看到的进程名太笼统或者Python脚本默认显示python3你希望它显示成业务名。从原理上说进程名有两个来源。一个在/proc/ /cmdline是启动时传入的参数反映的是argv[0]和参数列表另一个在/proc/ /comm是内核记录的进程名会被截断为15个字符。ps命令显示的NAME列不同参数下取的是不同来源。实际操作有三种方式。Shell内建命令exec -a可以直接改argv[0]exec -a my_monitor python3 /opt/app.pyPython代码里用setproctitle库import setproctitle setproctitle.setproctitle(my_monitor)C语言里调用prctlprctl(PR_SET_NAME, my_monitor);如果你用systemd管理服务进程名的控制更简单ExecStart里直接写清楚命令再加--参数即可。这块知识在调试多worker进程、容器内识别业务进程时特别有用。4. 网络与存储把Linux放进真实环境4.1 Rocky Linux网卡配置与NetworkManager网络配置是Linux入门的一道坎把Rocky系讲清楚其他发行版就举一反三了。Rocky Linux 9和10都默认走NetworkManager推荐用nmcli命令操作而不是手工改文件。配置静态IP的完整流程nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.1.10/24 nmcli connection modify ens33 ipv4.gateway 192.168.1.1 nmcli connection modify ens33 ipv4.dns 223.5.5.5 nmcli connection up ens33改完立即生效但要注意如果你是通过SSH远程操作改IP会导致连接瞬间断开这是非常经典的翻车场景。正确做法是改完配置后先起一个新会话测试没问题再断旧连接。Debian系则习惯用/etc/network/interfaces或者装NetworkManager后用配置目录管理两种体系差异不小网上关于rocky linux 10 配置网络信息的搜索热度高说明大家都在这上面踩过坑。4.2 挂载NAS存储的完整链路linux挂载nas存储能挂上热搜说明这是企业环境里的高频需求。挂载NAS主要分NFS和SMB/CIFS两种协议。NFS方式在Linux之间用先装依赖RHEL系dnf install nfs-utilsDebian系apt install nfs-common。查看服务器导出路径showmount -e 192.168.1.100挂载mount -t nfs 192.168.1.100:/volume/share /mnt/nas -o nfsvers4要在重启后自动挂载写入/etc/fstab192.168.1.100:/volume/share /mnt/nas nfs defaults,_netdev,noatime 0 0SMB/CIFS方式适合挂载Windows或群晖这类NASmount -t cifs //192.168.1.100/NAS /mnt/nas -o credentials/etc/nas.cred,vers3.0,uid1000,gid1000强烈建议把用户名密码放进credentials文件并chmod 600不要在fstab里明文写密码。两个高频坑一是uid/gid参数容器服务以特定用户运行时挂载目录如果权限对不上会写入失败二是_netdev这个参数确保系统在网卡就绪后才尝试挂载能避免开机时因网络未就绪导致的挂载失败。重启后发现挂载丢失多半就是没加这个参数。4.3 局域网共享上网与网口转串口的实践热搜里linux 共享上网 办法从技术上讲指的是Linux充当内网网关把局域网内其他机器通过NAT转发上外网。这个场景在企业内网、实验室里很常见。一台Linux双网卡机器eth0接外网eth1接内网开启转发和NATsysctl net.ipv4.ip_forward1 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE把第一句写进/etc/sysctl.conf持久化iptables规则用iptables-save /etc/sysconfig/iptables保存或者安装iptables-persistent。内网机器的网关指向Linux的内网IP即可。如果想顺便做DHCP装个dnsmasq就行。网口转串口的场景主要出现在工业设备调试一个串口服务器盒子把串口转成网络接口Linux上访问它有两种姿势一种是直接用IP和端口访问另一种是socat把TCP端口映射成本地tty设备socat -d -d TCP-LISTEN:4001,fork PTY,link/dev/ttyS10,raw,echo0映射出来之后程序照常读写/dev/ttyS10完全无感。这种思路在做物联网设备调试时能省掉很多物理串口的折腾。5. 服务部署实战Docker到ClickHouse再到私有代码托管5.1 安装Docker的标准姿势服务器装Docker我现在基本固定用国内镜像源安装。RHEL系先加仓库dnf config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/docker-ce.repo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin systemctl enable --now dockerDebian系把仓库地址里的rhel换成debian即可。装完先别急着用docker run hello-world验证一下。这里说个细节如果服务器上配了自定义端口或代理docker pull可能会失败需要检查/etc/docker/daemon.json。如果公司有内网镜像仓库也可以在daemon.json的registry-mirrors里配置。生产环境我建议把docker-compose-plugin一起装上后面部署应用都用compose文件编排比裸docker run可控得多。5.2 用Docker部署ClickHouse 21.8.15.7热搜里有个很具体的版本号linux 部署 clickhouse 21.8.15.7这说明很多人部署时需要在特定版本上复现行为。我的实践是用固定tag拉取镜像docker run -d --name clickhouse-server --restartalways \ -p 8123:8123 -p 9000:9000 \ -e CLICKHOUSE_PASSWORD安全密码 \ -v /data/clickhouse/data:/var/lib/clickhouse \ -v /data/clickhouse/logs:/var/log/clickhouse-server \ clickhouse/clickhouse-server:21.8.15.7ClickHouse默认端口要记清楚9000是客户端TCP端口8123是HTTP端口9009用于集群复制。验证是否启动成功curl http://localhost:8123/返回Ok就是没问题的。生产环境推荐再加一个clickhouse-client容器或者直接HTTP接口执行查询。部署时有个坑容器重建后有时候CLICKHOUSE_PASSWORD环境变量的处理在不同版本镜像里不一致表现为新容器不认旧密码。稳妥的方案是把users.xml挂载进去密码在XML里显式配置绕开环境变量这个黑盒。数据目录挂载到宿主机是必须的不然容器一删数据全没别问我怎么知道的。5.3 GiteaLinux下的私有代码托管团队小、又不想依赖外部平台Gitea是最轻量的选择。二进制方式部署也就三步。创建系统和目录useradd -r -s /usr/sbin/nologin git mkdir -p /var/lib/gitea /etc/gitea chown -R git:git /var/lib/gitea /etc/gitea下载二进制放到/usr/local/bin/gitea后写systemd服务[Unit] DescriptionGitea Afternetwork.target [Service] Usergit Groupgit WorkingDirectory/var/lib/gitea ExecStart/usr/local/bin/gitea web --config /etc/gitea/app.ini Restartalways [Install] WantedBymulti-user.target最后配置nginx反代到80端口一个私有代码托管平台就起来了。整个部署过程不超过半小时Gitea不吃内存一台2G的云主机跑起来毫无压力。5.4 周边服务云桌面、打印机驱动的Linux化云桌面在Linux环境里部署本质上是给用户提供远程图形界面。常见路线有xrdpWindows远程桌面连接Linux、Apache Guacamole浏览器访问、KasmVNC容器化流式桌面。其中xrdp最省事装完配置好端口就能用适合内部办公场景。另一个搜索量很高的问题是HP LaserJet P1106 linux。这是个经典的老打印机Linux下驱动方案是hplip。USB直连时装hplip后跑hp-setup -i网络打印则用hp-setup -a自动发现。很多人在这一步卡住是因为缺少依赖库建议先装好libcups2和cups-common再装hplip成功率会高很多。5.5 部署里最容易忽略的三个细节RHEL系服务器部署服务SELinux是第一道坎。默认Enforcing状态下容器卷目录的上下文不对服务就直接拒绝访问。遇到这类问题先getenforce看状态再用restorecon -Rv修正目录上下文别急着setenforce 0。自定义端口也要登记比如nginx监听8080需要semanage port -a -t http_port_t -p tcp 8080。防火墙是第二道坎。firewalld管理端口要执行firewall-cmd --permanent --add-port8123/tcp再reload。这里有个隐蔽问题Docker的iptables规则和firewalld重启会互相干扰重启firewalld后Docker规则经常丢失需要重启Docker服务。第三是端口占用排查。这个万能用命令是ss -lntp看清谁在监听哪个端口比netstat输出更清晰。服务起不来的排查顺序永远是看日志、看状态、看端口、看SELinux这四步走完绝大多数问题都能定位。6. 进程间通信与Shell脚本把零散命令串起来6.1 进程间通信六种方式linux进程间通信是面试里出现频率极高的考点也是一个系统从业者的基本功。Linux下的IPC方式主要有六种管道、信号、共享内存、消息队列、信号量、套接字。我用一个表格对比它们的特点方式特点典型场景管道一端写一端读内存缓冲单向命令组合、父子进程通信信号异步事件通知轻量kill、CtrlC、配置reload共享内存速度最快需要配合锁高频大数据交换消息队列有格式的消息顺序处理简单的生产消费模型信号量解决互斥与同步多进程竞争共享资源套接字支持跨主机TCP/UDP/Unix域C/S架构、分布式通信理解它们最好的方式是结合场景。管道就是你天天在用的ls /var/log | grep journal信号的经典例子是kill -HUP 进程号很多守护进程收到这个信号会重新加载配置这不叫重启是优雅的reload共享内存可以用ipcs -m查看当前系统里的共享内存段Unix域套接字则被Docker、数据库大量使用比TCP少了网络协议栈开销。6.2 Shell脚本的实用骨架命令学得再好不会串成脚本工作效率就上不去。我常用的脚本骨架很简单变量、条件、循环再加一点防御性开关。磁盘告警脚本是每个运维都写过的入门项目#!/bin/bash set -euo pipefail THRESHOLD80 usage$(df -h / | awk NR2{print $5} | tr -d %) if [ $usage -gt $THRESHOLD ]; then echo 磁盘使用率已达 $usage% | mail -s 磁盘空间告警 adminexample.com fiset -euo pipefail这一行是血泪教训-e让脚本出错即停-u防止变量未定义-o pipefail让管道中任何一环失败都算失败。调试脚本时记住两个武器bash -x script.sh逐个跟踪每一步以及尽量多用echo打印中间变量。批量改名、日志轮转、定时备份这些都是练手的好项目。6.3 学习过程中的零碎问题记录顺手记录几个搜索热度不低的小问题。linux下gvim怎么全选普通模式输入ggVGgg跳到文件头V进入可视行模式G选中到文件尾字母y复制。如果你想要更直接的方式:1,$y的命令同样能做到。linux系统安装python这个需求也很常见。优先推荐用conda/micromamba管理Python环境系统Python只留给系统工具使用。如果非要编译安装Python 3.12记得先装好gcc、make、zlib-devel、openssl-devel这些依赖否则装完缺ssl模块pip连源都连不上。另外网上有些包名带有535.54.03(linux)gcc之类看起来很奇怪的版本号正规gcc版本号是类似13.2.0这种三段式碰到不熟悉的版本字符串先查这个项目自己的Release Notes别急着装。7. 权限与安全从提权原理反推系统加固7.1 权限模型的底层逻辑Linux权限模型看起来简单其实藏了不少容易混淆的细节。rwx三个位对文件和目录的含义不同对文件r是读内容w是修改内容x是作为程序执行对目录r是列出目录内容w是创建删除文件x是进入目录。真正理解这个差异很多权限问题一眼就能看穿比如你明明有目录的r权限却进不去多半是缺x权限。特殊权限位也是面试高频。setuid位最经典的例子就是passwd命令普通用户能修改自己的密码就是因为passwd二进制文件带setuid执行时临时获得root权限。sticky位则在/tmp目录上最典型权限显示为drwxrwxrwt它的作用是目录里任何人都能写文件但只有文件属主和root能删除别人的文件。这两个机制解释了为什么系统里的权限设计不是一刀切。7.2 从防御视角看常见提权路径linux提权这个词在网络热搜里热度不低。我这边从系统加固和审计的视角去理解它因为弄清攻击者的提权路径是防守的前提。第一条路径是sudo配置过宽。visudo打开配置如果看到username ALL(ALL) NOPASSWD: ALL这种行基本等于把root交出去了。防御做法是最小化授权只给需要的那几条命令。第二条路径是SUID文件利用。定时排查本机有哪些文件带setuid位find / -perm -4000 -type f 2/dev/null逐个确认白名单发现可疑程序立刻处理。第三条路径是内核漏洞uname -r查内核版本后跟上官方安全公告生产环境及时打补丁。第四条路径是cron和PATH劫持比如可写的cron脚本被植入了恶意命令或者PATH里出现当前目录且存在同名命令。防御要点是脚本目录收紧写权限PATH里不放入当前目录。所有防御动作归纳起来就是四个词最小权限、及时补丁、日志审计、边界隔离。auditd打开关键目录的审计SELinux/AppArmor保持开启都能把提权路径堵掉大半。7.3 Kali Linux装完后的基本操作流程Kali是安全审计领域的专用Linux发行版。先说清楚边界它只应在授权环境中使用比如自己的靶机、CTF比赛、公司授权的渗透测试。合规使用的前提下Kali确实是学习Linux安全体系的最好教材。装完Kali后的第一件事是更新源并升级系统apt update apt full-upgrade -y注意是full-upgrade不是upgrade因为Kali的滚动更新模式下两者的区别很明显。然后建议创建普通用户日常操作别用root需要管理员权限时sudo执行。工具按需安装Kali自带数千个工具全装没意义按方向装信息收集用nmap、masscanWeb方向用burpsuite、sqlmap密码方向用hydra、john无线方向用aircrack-ng。虚拟机装Kali一定要打快照因为涉及内核更新、工具实验时一个快照能让你几秒钟回到安全状态这个习惯比任何教程都实用。8. 嵌入式Linux从桌面系统到开发板的跃迁8.1 嵌入式Linux到底在学什么热搜里嵌入式linux和嵌入式linux项目都是常青词。嵌入式Linux和桌面Linux用的是同一个内核差异在于前者要针对特定硬件做裁剪和定制。学习嵌入式Linux的核心是四件事交叉编译工具链、Bootloader、内核配置、根文件系统。交叉编译是第一个门槛开发机上编译目标板上运行工具链前缀通常是arm-linux-gnueabihf-这类。写个hello world#include stdio.h int main() { printf(hello embedded\n); return 0; }交叉编译命令arm-linux-gnueabihf-gcc hello.c -o hello文件不能直接在PC上跑要用qemu模拟或拷贝到板子执行。之后是内核配置make menuconfig能让你直观地看到内核模块的开关裁剪到只剩目标板需要的驱动。根文件系统可以用Buildroot或BusyBox生成一条命令构建出完整的/目录结构。没有真实板子的情况下qemu-system-arm -M vexpress-a9是个不错的替代至少能把启动流程跑通。8.2 驱动与网络子系统DSA Switch带来的启发linux dsa switch驱动也有人搜这里简单说两句。DSADistributed Switch Architecture是内核里用于管理多端口交换芯片的框架家用路由器和工业交换机的Linux系统里经常见到。它通过Linux网络子系统的标准接口把交换芯片的每个端口抽象成独立的网络设备上层应用完全无感。我提这个不是为了讲驱动细节而是想说清一个学习方法Linux的能力边际远超桌面场景很多硬件外设都有对应的内核子系统。遇到一个陌生设备先去内核文档里找有没有现成的framework比如DSA、IIO、V4L2带着这个思路去啃源码比对着驱动代码逐行看效率高得多。学习嵌入式Linux的路线我建议是先跑通一个最小系统再回头研究设备树和驱动模型最后才碰具体外设驱动。9. 踩坑日志一下午的报错与排查9.1 WSL安装时提示安装向导提前结束网上一搜windows linux更新子系统安装能看到很多人遇到同样的问题。安装WSL时弹窗提示安装向导提前结束由于错误常见原因和解决路径比较固定。第一确认Windows功能里适用于Linux的Windows子系统和虚拟机平台都已启用启用后必须重启。第二手动更新WSL内核wsl --update因为新版WSL2需要内核组件旧版安装包往往不带。第三检查默认版本设置wsl --set-default-version 2。如果还不行打开服务管理器确认LxssManager服务在运行。处理过程不需要重装系统按这个顺序排查我还没见过解决不了的。9.2 改了密码却登录不进去有段时间我调密码策略给测试用户设置了首次登录强制改密码结果用户反馈按照提示改了新密码却依然被拒之门外。这个问题的根源在于我没搞清楚两个机制的区别chage -d 0是让密码立即过期用户登录后被强制改密但新密码必须符合密码复杂度策略比如长度、字符种类pam_pwquality这一关过不了就会拒绝。另一个可能是多次输错触发faillock账号锁定。正确的思路是区分使用场景首次登录强制改密用chage -d 0周期性提醒改密用chage -M 90 -W 7。测试时先关掉复杂度策略验证流程通不通再逐步打开策略。9.3 改完网卡IPSSH当场断连在4.1节提过这个问题但值得单独记录。现象是远程SSH到服务器执行nmcli connection modify改静态IP紧接着up连接瞬间断连。原因很简单你把自己的通信地址改了。我现在的标准操作是改配置之前先另开一个不需要这个网卡的通道比如带外管理或另一块网卡如果没有第二通道就写一个定时恢复脚本sleep 60 nmcli connection up ens33万一新配置有问题60秒后自动回滚。这个脚本救过我很多次。9.4 排查问题时的固定检查顺序踩坑多了之后我给自己定了一个固定排查流程现在分享出来。看到任何服务异常按这个顺序走看日志journalctl -xe、/var/log/messages、应用自己的日志文件看服务状态systemctl status 服务名关注Active行和最近日志看端口ss -lntp确认监听状态看权限上下文RHEL系执行getenforce再用ausearch -m avc -ts recent查拒绝记录看网络ping、curl -v逐层验证这个顺序能覆盖80%的问题。很多人一上来就查网络或者怀疑代码反而漏掉了最明显的日志信息。最后再说一个我自己坚持的小习惯每次踩坑解决后立刻在笔记里记三行——现象、根因、修复命令。不要只记命令一定要写根因因为命令会过时根因不会。这次整理Linux学习笔记时我翻出过去一年记的几十条踩坑记录发现大部分问题其实都是同一批底层概念没吃透权限模型、网络栈、systemd的依赖关系。把这些概念补上之后很多新问题不用查文档也能推断出方向了。这份笔记对我来说是一次彻底的查漏补缺也希望对你正在进行的Linux学习有一点参考价值。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →