news 2026/4/16 10:32:32

S99test软链接怎么建?测试脚本操作全过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
S99test软链接怎么建?测试脚本操作全过程

S99test软链接怎么建?测试脚本操作全过程

你是不是也遇到过这样的问题:写好了开机启动脚本,却卡在最后一步——软链接怎么建?尤其是那个看起来很神秘的S99test,99到底代表什么?为什么非得是S开头?能不能改成K?重启后脚本为啥没执行?别急,这篇文章不讲抽象概念,不堆术语,就用最直白的方式,带你从零完成整个流程。无论你是刚接触Linux的新手,还是临时需要验证脚本的老手,都能照着一步步操作,亲眼看到脚本在系统启动时自动跑起来。

我们用的是预置镜像“测试开机启动脚本”,它已经为你准备好基础环境,省去系统差异带来的干扰。整个过程在CentOS和Ubuntu上完全通用,不需要额外安装任何工具,也不用改配置文件权限(除非你主动动过)。下面我们就从最开始的准备说起。

1. 确认你的脚本已就位

在开始建软链接前,先确保你的测试脚本真的存在、可执行,并且位置正确。

你的脚本必须放在/etc/init.d/目录下,这是传统SysV init系统约定的“服务脚本存放地”。假设你的脚本名叫mytest.sh,那么它的完整路径就是:

/etc/init.d/mytest.sh

你可以用下面这条命令快速检查它是否存在:

ls -l /etc/init.d/mytest.sh

如果看到类似这样的输出,说明脚本已就位:

-rwxr-xr-x 1 root root 234 Jan 15 10:20 /etc/init.d/mytest.sh

注意看最前面的-rwxr-xr-x—— 这表示它有执行权限(x)。如果没有x,脚本建了也运行不了。补救方法很简单:

sudo chmod +x /etc/init.d/mytest.sh

如果你还没写这个脚本,这里提供一个最小可用版本,复制粘贴保存即可(记得用root权限):

#!/bin/bash ### BEGIN INIT INFO # Provides: mytest # Required-Start: $local_fs $network # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Test startup script # Description: A simple test script for boot sequence ### END INIT INFO case "$1" in start) echo "mytest.sh started at $(date)" >> /var/log/mytest.log ;; stop) echo "mytest.sh stopped at $(date)" >> /var/log/mytest.log ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0

把它保存为/etc/init.d/mytest.sh,再执行sudo chmod +x /etc/init.d/mytest.sh,就齐活了。

2. 查清系统当前运行级别

软链接不是随便往哪个rcX.d目录里一扔就行的,它必须放进系统实际使用的那个启动级别目录里。而这个级别,由系统当前的“运行级别”(runlevel)决定。

别被名字吓到,它其实就是一个数字,代表系统当前处于哪种工作状态。开机自启脚本,只会在系统进入多用户图形或命令行界面时加载,对应的就是 runlevel 2、3、4 或 5。

执行这行命令,立刻知道答案:

runlevel

你会看到类似这样的输出:

N 5

这表示:系统刚启动(N),现在运行在级别 5。绝大多数带桌面的Ubuntu和CentOS默认就是5;纯服务器环境常用3。重点来了:你看到的第二个数字,就是你要进的目录名。

所以,如果输出是N 5,你就进/etc/rc5.d/;如果是N 3,就进/etc/rc3.d/。这个数字决定了脚本何时被调用。

小知识卡片
/etc/init.d/是所有服务脚本的“老家”,统一存放;
/etc/rcX.d/(X是数字)则是“调度室”,里面全是软链接,告诉系统:“在X级别启动时,按顺序执行哪些脚本”。
它们不是两个独立系统,而是一套分工明确的协作机制。

3. 进入正确的rcX.d目录

确认了运行级别是5,那就直接切换过去:

cd /etc/rc5.d/

然后列出当前目录内容:

ls -l

你会看到一堆以SK开头的文件,比如S10sysklogdS20sshK90network……它们全都是指向/etc/init.d/下真实脚本的软链接。

这些名字不是随意起的,而是有严格格式:[SK][两位数字][服务名]

  • S表示 Start(启动时执行)
  • K表示 Kill(关机或切换级别时执行)
  • 两位数字(00–99)代表执行顺序,数字越小越早执行,越大越晚
  • 后面的名字只是个标识,方便人看,不影响功能

所以S99test的含义就很清楚了:这是一个用于启动的脚本链接,序号是99,名字叫test。它会在所有S00S98的脚本之后执行。

为什么推荐99?
因为你的测试脚本大概率不依赖其他复杂服务(比如数据库、网络服务)。但如果你的脚本要读取网络配置、连接远程API,那最好把序号设大一点(比如95以上),确保它在网卡、DNS等基础服务就绪后再运行。99是安全的“压轴位”。

4. 创建S99test软链接

这才是本文的核心动作。命令只有一行,但每个参数都值得细说:

sudo ln -s /etc/init.d/mytest.sh S99test

逐个拆解:

  • sudo:必须用root权限,否则没权限在系统目录下创建文件
  • ln -sln是创建链接的命令,-s表示“软链接”(symbolic link),不是硬链接
  • /etc/init.d/mytest.sh:这是“源文件”,即你真正写的脚本,必须写绝对路径
  • S99test:这是“链接名”,会出现在当前目录(/etc/rc5.d/)下,名字必须以SK开头,否则系统不会识别为启动项

执行完后,再用ls -l看一眼:

ls -l S99test

你应该看到:

S99test -> /etc/init.d/mytest.sh

箭头->就是软链接的标志,说明它成功指向了你的脚本。

常见错误提醒
错误1:写成ln -s S99test /etc/init.d/mytest.sh(源和目标颠倒)
错误2:漏掉sudo,提示 Permission denied
错误3:在/etc/rc5.d/外执行命令,链接建到了错误位置
正确姿势:先cd /etc/rc5.d/,再sudo ln -s /etc/init.d/mytest.sh S99test

5. 验证链接是否生效

建完链接不等于万事大吉。我们得验证两件事:
第一,系统能否识别它为合法启动项;
第二,它是否真能在开机时运行。

5.1 检查启动项注册状态

很多系统提供了chkconfig(CentOS)或update-rc.d(Ubuntu)这类工具来管理启动项。虽然我们手动建了链接,但用工具检查更直观:

  • 在CentOS上运行:

    sudo chkconfig --list | grep mytest

    如果看到mytest 0:off 1:off 2:on 3:on 4:on 5:on 6:off,说明已在2/3/4/5级启用。

  • 在Ubuntu上运行:

    sudo update-rc.d mytest defaults

    这条命令会自动为你生成标准的SK链接(如果你之前没手动建,它会建;如果已存在,它会跳过)。它本身不破坏你已建的S99test,反而是个双重保险。

5.2 手动触发一次,看日志有没有记录

不用等重启,我们可以立刻模拟一次启动过程:

sudo /etc/init.d/mytest.sh start

然后检查日志:

cat /var/log/mytest.log

如果看到类似mytest.sh started at Mon Jan 15 10:25:33 CST 2024的记录,恭喜,脚本本身没问题,执行逻辑通了。

6. 最终测试:重启并确认

前面所有步骤都是铺垫,真正的验收时刻来了——重启。

执行:

sudo reboot

等待系统完全重启、登录进去后,第一时间检查日志:

cat /var/log/mytest.log

你应当看到至少两条记录:一条是上次手动执行的,另一条是本次开机自动触发的,时间戳明显是重启后的新时间。

如果只有一条,或者日志为空,说明软链接没生效。这时请按顺序排查:

  • runlevel输出是否仍是5?如果不是,你可能进了错的rcX.d目录
  • ls -l /etc/rc5.d/S99test是否显示正确指向?箭头是否消失?
  • /etc/init.d/mytest.sh是否仍有执行权限?ls -l看看有没有x
  • 日志路径/var/log/mytest.log所在目录是否有写入权限?(一般/var/log是root可写,没问题)

只要每一步都按本文操作,99%的情况都能一次成功。

7. 进阶提示:不只是S99test

你可能已经发现,S99test只是一个命名习惯,不是强制规则。理解了原理,你就能灵活应对各种需求:

7.1 想让它关机时也执行?

那就再建一个K01test,指向同一个脚本:

sudo ln -s /etc/init.d/mytest.sh /etc/rc0.d/K01test sudo ln -s /etc/init.d/mytest.sh /etc/rc6.d/K01test

rc0.d对应关机,rc6.d对应重启。K01表示它是最早被停止的服务之一。

7.2 想换名字,比如叫S99mystart?

完全可以。只要保持S+ 数字 + 名字的格式,系统就认:

sudo ln -s /etc/init.d/mytest.sh S99mystart

名字只是给人看的,系统只关心S和数字。

7.3 Ubuntu新系统用systemd怎么办?

本文镜像基于传统SysV init,所以rcX.d方式完全适用。但如果你在较新Ubuntu(16.04+)或CentOS 7+上操作,底层已是systemd。此时rcX.d仍被兼容支持,但更推荐写.service文件。这不是本文范围,但可以告诉你:S99test在新系统里依然有效,无需改动。

总结

到这里,你应该已经彻底搞懂S99test软链接是怎么回事了。它不是魔法,也不是黑箱,而是一套清晰、稳定、沿用几十年的Linux启动机制。我们梳理一下关键点:

  • 脚本必须放/etc/init.d/,且有执行权限
  • runlevel命令告诉你该进/etc/rcX.d/中的哪一个
  • S开头表示启动时执行,K表示停止时执行,数字决定先后顺序
  • ln -s 源文件 链接名是唯一命令,顺序不能错,必须用绝对路径
  • 重启不是唯一验证方式,start手动触发 + 查日志更快定位问题

你不需要记住所有细节,只需要记住这个心法:链接是桥梁,rcX.d是路口,S/K+数字是通行牌号,而你的脚本,永远安静地待在/etc/init.d/这个起点站。

现在,关掉这篇教程,打开终端,亲手敲一遍ln -s。当你在日志里看到那行属于你自己的启动记录时,那种掌控感,比任何理论都来得实在。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:00:46

企业宣传新思路!员工形象统一卡通化展示方案

企业宣传新思路!员工形象统一卡通化展示方案 1. 为什么企业需要卡通化员工形象? 在数字化传播时代,企业宣传早已不满足于千篇一律的工装照和标准简历照。你是否遇到过这些场景: 员工介绍页面全是相似的正面免冠照,缺…

作者头像 李华
网站建设 2026/4/16 12:21:21

Python 3.13字节码反编译技术全解析:从原理到实践的进阶指南

Python 3.13字节码反编译技术全解析:从原理到实践的进阶指南 【免费下载链接】pycdc C python bytecode disassembler and decompiler 项目地址: https://gitcode.com/GitHub_Trending/py/pycdc 技术演进:Python字节码反编译的挑战与突破 Python…

作者头像 李华
网站建设 2026/4/14 21:37:56

多场景验证GPEN人像修复能力,表现 consistently 好

多场景验证GPEN人像修复能力,表现 consistently 好 你有没有遇到过这些情况:老照片泛黄模糊、手机自拍光线不足、监控截图人脸像素糊成马赛克、社交媒体上传的证件照被压缩失真……传统修图软件靠手动涂抹、图层叠加、反复调参,耗时又难还原…

作者头像 李华
网站建设 2026/4/16 12:25:35

ChatGLM3-6B-128K进阶教程:自定义Prompt工程技巧

ChatGLM3-6B-128K进阶教程:自定义Prompt工程技巧 1. 为什么需要专门学Prompt工程——不是“随便问就行”的模型 很多人第一次用ChatGLM3-6B-128K时,会直接在Ollama界面里输入:“帮我写个周报”,然后发现生成内容泛泛而谈、重点模…

作者头像 李华
网站建设 2026/4/16 12:28:46

Wireshark抓包实战:从安装到协议分析的完整指南

1. Wireshark入门:网络世界的显微镜 第一次接触Wireshark时,我把它比作网络工程师的"听诊器"。这个开源的网络协议分析器能让你看到所有流经网卡的数据包,就像医生用听诊器聆听心跳一样直观。记得刚开始用Wireshark排查一个网页加载…

作者头像 李华