技术演进中的开发沉思-121Linux命令篇:系统设置命令(下)
今天继续聊 Linux 系统设置里的那些 “调试手艺”。这些命令不像ls
那样天天见,却像医生的听诊器、电工的万用表,关键时刻能帮系统 “看病”“接线”,让它从 “别扭” 变 “顺手”。我还是用当年踩过的坑、摸过的门道,把这些命令揉进生活场景里,希望不管你是刚碰 Linux 的新手,还是和我一样的老程序员,都能从这些文字里找到点 “哦,原来是这样” 的共鸣。
一、modinfo
有次我从网上下载了一个显卡模块,文件名是nvidia.ko
,却不知道它支持什么参数、是谁编译的 —— 万一装错了把系统搞崩就麻烦了。老同事教我输modinfo nvidia.ko
,屏幕上立刻跳出一行行信息:author: NVIDIA Corporation
(作者是英伟达)、description: NVIDIA Linux x86 Kernel Module
(英伟达的 Linux 模块)、parm: nvrm_debug:int
(支持调试参数)—— 就像拿到了产品说明书,心里一下子有底了。
这modinfo
是 Linux 模块的 “说明书阅读器”:-a
看是谁做的(作者),-d
看是干什么用的(描述),-p
看能调哪些参数(比如显卡的调试级别、显存大小)—— 就像买个新电器,先翻说明书,知道怎么用、注意什么,才不会用坏。
我后来装任何模块前,都会先跑modinfo
,比如装 Wi-Fi 模块看支持的信道,装声卡模块看支持的采样率。技术这东西,不怕不懂,就怕不看 “说明书”——modinfo
给了我们看懂模块的钥匙。
二、modprobe
早年用insmod
装模块,总要先记着它依赖哪些其他模块,比如装wireless.ko
,得先装cfg80211.ko
,漏装一个就报错。直到用了modprobe
,才算解放了双手 —— 它会照着depmod
画好的 “线路图”,自动把所有依赖模块装齐,装完还能把不用的模块卸了(-r
参数)。
这modprobe
是模块的 “自动电工”:你说 “装 Wi-Fi 模块”,它先查线路图(modules.dep
),知道要先装无线配置模块,再装 Wi-Fi 驱动,一步到位;你说 “卸了不用的声卡模块”,它会先看有没有程序在用,没用就安全卸掉 —— 就像电工按图纸接线,还把多余的线收得整整齐齐。
我现在维护服务器,装驱动都用modprobe -v
,看着它一行行列出装了哪些模块,心里踏实。技术的进步,就是把 “手动接线” 变成 “自动布线”,让我们少走弯路。
三、mouseconfig
那已经是很久很久的事了,我用一台老电脑跑 X Window,鼠标是二键的,在图形程序里不能中键粘贴 —— 调试画图软件时,复制个坐标都要输半天。后来在 Red Hat 里找到mouseconfig
,选了--emulthree
参数,把二键鼠标模拟成三键(按左右键当中键),一下子解决了问题。
这mouseconfig
是鼠标的 “调试向导”:--device /dev/ttyS0
指定鼠标接串口 1,--expert
手动选鼠标型号,--test
先试效果不保存 —— 就像给鼠标找 “适配器”,不管是串口鼠标、USB 鼠标,都能调得好用。
现在的系统能自动识别鼠标,但我总记得当年用mouseconfig
调试的日子:技术有时候很简单,一个参数就能解决大麻烦,关键是知道去哪里找这个参数。
四、ntsysv
刚学 Linux 时,用chkconfig
设服务启动,总记不住命令格式(chkconfig --level 3 httpd on
)。直到发现ntsysv
—— 弹出个互动界面,用方向键选服务,空格键勾 “开机启动”,像在编辑公司的值班表,直观又不容易错。
这ntsysv
是 Red Hat 的 “服务开关面板”:--level 3
只调运行级别 3 的服务,--back
加个 “返回” 按钮方便反悔 —— 就像给服务装了个 “可视化开关”,不用记复杂命令,新手也能上手。
当年我给实验室服务器设 Apache 和 MySQL 开机启动,就是用ntsysv
勾的选项。技术工具的好,就在于 “把复杂的事变简单”——ntsysv
做到了这一点。
五、passwd
刚工作时,我负责给新同事开 Linux 账号,用passwd lisi
给李四设初始密码,还会用passwd -l lisi
把账号锁了,等他自己改密码再解锁(passwd -u
)。普通用户只能用passwd
改自己的密码,改的时候还要输旧密码,很安全。
这passwd
是系统的 “密码管家”:-d
清空密码(让用户第一次登录必须改),-s
看密码状态(比如过期时间),-k
只让过期后改密码 —— 就像家里的钥匙管理员,谁能改密码、怎么改,都有规矩。
我现在还会定期用passwd -s
查用户密码状态,避免有人用过期密码登录。安全这东西,不怕麻烦,就怕没规矩 ——passwd
给密码管理定了规矩。
六、pwconv & pwunconv
早年 Linux 的用户密码存在/etc/passwd
里,任何人都能看(虽然是加密的),总觉得不安全。用pwconv
一跑,密码就被 “搬” 到了/etc/shadow
里 —— 只有 root 能读,passwd
里的密码位变成了 “x”,像把明锁换成了暗锁。
这pwconv
和pwunconv
是密码的 “锁匠”:pwconv
是 “换暗锁”,pwunconv
是 “换回明锁”(一般不用,除非要兼容老系统)—— 就像家里的锁坏了,换个更安全的,需要时再换回来。
当年系统安全检查,师傅让我用pwconv
加固所有用户密码,现在想起来,还是觉得这个命令设计得巧妙:不改变用户使用习惯,却悄悄提升了安全。
七、rdate
2000 年实验室的服务器没有 NTP 服务,时间总比实际慢半小时,导致日志时间混乱。老工程师教我输rdate -s time.server.com
,从时间服务器同步时间 —— 就像给手表对时,一下子准了。
这rdate
是系统的 “手动对时工具”:-p
先看远程时间对不对,-s
同步到本地 —— 就像打电话问 “现在几点”,然后把自己的表调好。
现在的系统都用ntpd
自动同步时间,但rdate
让我想起:技术的早期,很多功能都是 “手动但有效” 的 —— 哪怕是简单的时间同步,能解决问题就是好工具。
八、resize
早年用 telnet 远程登录服务器,终端窗口默认很小,ls -l
列出的文件名要换行,看着费劲。输resize -s 40 120
,把终端调成 40 行 120 列,一下子能看清所有内容 —— 就像把小窗户换成大窗户,视野开阔多了。
这resize
是终端的 “尺寸扳手”:-c
用 C Shell 的命令调,-u
用 Bourne Shell 的命令调 —— 不管你用什么 Shell,都能把终端调舒服。
我现在远程维护服务器,还会先用resize
调窗口大小。技术有时候很细节,但细节做好了,用起来就顺手多了。
九、rmmod
装错声卡模块时,insmod
装了个旧版本,导致没声音。这时候rmmod old_sound.ko
就能把旧模块删掉,再装新的 —— 就像电工把接错的电线拆掉,重新接对的。
这rmmod
是模块的 “拆线工具”:-a
把所有不用的模块都删掉(比如装新模块后,旧的依赖模块),-s
把删除记录写到系统日志 —— 就像拆线时把多余的线收走,还记下来拆了哪些。
当年我不小心删了正在用的网卡模块,导致远程连接断开,只能去机房重连 —— 这个教训让我知道:删模块前,一定要用lsmod
确认没人在用。技术操作,谨慎总是没错的。
十、rpm
有次我第一次在 Red Hat 上装 MySQL,下载的是mysql-3.23.rpm
,输rpm -ivh mysql-3.23.rpm
,看着屏幕上的 “#” 进度条走完,软件就装好了 —— 比编译tar.gz
文件省事多了。
这rpm
是 Linux 的 “软件快递员”:-i
是 “收快递”(安装),-e
是 “退快递”(卸载),-U
是 “换快递”(升级),-q
是 “查快递单”(查询)—— 就像收发快递一样,简单直观。
我后来装 Apache、PHP 都用 rpm,甚至自己打包 rpm 包给团队用。rpm 的出现,让 Linux 软件安装从 “复杂的编译” 变成 “简单的命令”,大大降低了 Linux 的使用门槛。
十一、set
写 Shell 脚本时,我总用set -e
—— 让脚本遇到错误就停,避免错误扩大(比如变量没定义还继续执行);调试脚本时用set -x
,看每一步执行的命令,像给脚本装了个 “监控摄像头”。
这set
是 Shell 的 “模式开关”:-a
标记修改的变量供导出,-C
不让文件覆盖已存在的,+x
关掉调试模式 —— 就像调收音机的模式,想要什么功能,就把对应的开关打开。
我现在写的每一个 Shell 脚本,开头都会加set -euo pipefail
,把 Shell 设成 “严格模式”。技术的严谨,就是从这些小开关开始的。
十二、setconsole
早年修服务器,主板没接显示器,只能用串口接终端机。输setconsole serial
,系统就把输出转到串口 —— 就像把电视信号从 HDMI 转到 AV 口,用终端机也能操作。
这setconsole
是系统的 “显示切换器”:video
用显卡接显示器,ttya
用串口 1,ttyb
用串口 2—— 不管你有什么显示设备,都能接上。
现在的服务器大多支持远程管理(IPMI),但setconsole
让我想起:当年没有远程管理时,串口终端是修服务器的 “救命稻草”。
十三、setenv
早年用 csh(tsch 的前身)写脚本,设置环境变量要用setenv PATH "$PATH:/opt/bin"
,不像 bash 用export
—— 就像不同品牌的笔,写法不一样,但都能写字。
这setenv
是 tsch 的 “环境传声筒”:和 bash 的export
功能一样,都是给程序递 “纸条”,告诉它们哪里找工具。
我现在很少用 csh 了,但还记得setenv
的写法 —— 技术的细节,有时候会记一辈子。
十四、setup
刚装完 Red Hat 系统,总要跑一遍setup
—— 调键盘布局、设鼠标、开 Apache 服务、装声卡、选时区,一站式解决所有基础设置,像系统的 “控制面板”,不用到处找命令。
这setup
是 Red Hat 的 “设置大管家”:把键盘、鼠标、服务这些分散的设置,集中到一个图形界面里,新手也能轻松上手。
当年我帮同学装 Linux,就是用setup
帮他调好所有设置,看着他能用 X Window 画图,心里很有成就感。技术工具的终极目标,就是让每个人都能用上。
十五、sndconfig
2001 年我给朋友的电脑装 Linux,声卡没声音,跑sndconfig
,它自动检测到是 “Sound Blaster 16”,选型号后重启,声音就有了 —— 不用手动改/etc/modules.conf
,太方便了。
这sndconfig
是声卡的 “诊断仪”:--noautoconfig
不自动配置,--noprobe
不检测,适合老声卡 —— 就像医生给病人看病,先检测,再对症下药。
现在的 Linux 用alsa-utils
管理声卡,但sndconfig
让我想起:当年能自动检测硬件的工具,都是 “黑科技”。
十六、SVGATextMode
早年用没有图形界面的服务器,文字模式分辨率太低,看代码要翻页。用SVGATextMode 1024x768
,把分辨率调成 1024x768,字体也调大,一下子舒服多了 —— 就像把黑白电视的画质调清晰。
这SVGATextMode
是文字模式的 “画质旋钮”:-t
用自己的配置文件,-v
检查显示频率 —— 不管是 CRT 显示器还是终端机,都能调出舒服的显示效果。
现在很少用纯文字模式了,但SVGATextMode
让我想起:在没有图形界面的年代,程序员是怎么把 “黑底白字” 调得好用的。
十七、timeconfig
刚装 Linux 时,时区默认是 UTC,日志时间比北京时间慢 8 小时。用timeconfig
选 “Asia/Shanghai”,再勾--utc
(告诉系统硬件时钟是 UTC),时间就对了 —— 就像给手表调时区,走到哪里都准。
这timeconfig
是时区的 “校准工具”:互动界面选时区,简单直观,比手动改/etc/localtime
方便多了。当年远程协作时,因为时区不对,同事的日志时间和我的差 8 小时,用timeconfig
同步后才解决。技术上的 “差一点”,有时候会导致大麻烦。
十八、ulimit
早年服务器上,普通用户跑脚本开了太多进程,导致系统卡机。用ulimit -u 100
给每个用户设 “最多开 100 个进程”,就像给每个人设 “预算”,避免超支。
这ulimit
是系统资源的 “预算员”:-n
设最多开多少文件,-t
设最多用多少 CPU 秒,-c
设 core 文件最大多大 —— 就像给程序定 “消费上限”,防止浪费资源。
我现在给服务器设ulimit
,会用-H
设硬限制(管理员定的上限),-S
设软限制(用户能临时超一点),既灵活又安全。技术的管理,就是 “有松有紧”。
十九、unalias
当年设了个alias ll='ls -l'
,后来想改ll='ls -la'
,先输unalias ll
删掉旧别名,再设新的 —— 就像用橡皮擦把旧笔记擦掉,写新的。这unalias
是别名的 “清理工具”:-a
把所有别名都删掉,回到默认状态 —— 就像把便利贴全撕掉,重新贴。我有时候调试别名冲突,会用unalias -a
清空,再一个个设,很方便。技术上的 “推倒重来”,有时候是最快的解决办法。
二十、unset
写 Shell 脚本时,临时变量temp_dir="/tmp/test"
用完了,用unset temp_dir
删掉,避免影响其他脚本 —— 就像用完工具后放回工具箱,保持环境干净。这unset
是变量的 “清洁剂”:-f
只删函数,-v
只删变量 —— 不会误删其他东西。我现在写脚本,结尾都会unset
临时变量,养成 “用完清理” 的习惯。技术上的 “整洁”,能减少很多隐藏的问题。
最后小结:
整理这些命令时,我总想起当年在机房里,对着终端一个个试命令的场景 —— 没有图形界面,没有搜索引擎,全靠手册和前辈的经验,错了就重来,对了就记在笔记本上。现在的 Linux 越来越易用,很多命令被图形界面替代,但那些命令背后的 “调试思维”—— 看说明书(modinfo)、按规矩来(passwd)、用完清理(unset)—— 却从来没过时。
未完待续