## 第二十八章:南宫珩的失控前兆(他开始主动制造偶遇)
周四上午闻人屿走进公司大堂的时候,前台那个姑娘正在低头吃一盒酸奶。他刷卡过闸,电梯门刚好打开,里面站着两个他不认识的人。他走进去站在靠门的位置,看着楼层数字从一到八逐次亮起,中途那两个人分别在四楼和六楼下了。电梯里只剩他一个人的时候,他抬眼看了下轿厢壁面映出的自己,头发稍微长了点,衣领翻得还算整齐,然后电梯在八楼停住,门开了。
他到工位的时候那台新显示器还在原位。他上周三收到它,拆箱的时候外包装上贴着一张手写的标签——"总部测试机剩余,已清数据"——字迹不是南宫珩的,但他认得那个标签上的工号章样式,是技术部资产管理组的惯例格式。他坐在椅子上把显示器开机,屏幕亮起来的时候他调整了一下仰角,把亮度降了两档,色温从冷色调往暖色调拨了一点。做完这些之后他打开工单系统,今天排在前面的有三条,都是关于固件升级后节点注册异常的,他扫了一遍问题描述,然后开始处理第一条。
第一条工单做到一半的时候内通系统弹出一条消息。他侧头看了一眼屏幕右下角,南宫珩的头像亮了,灰色底、白色线条的侧脸轮廓。消息内容是一段技术文档的链接,后面跟了一行说明:"这套固件版本号的比较框架你可能用得上。总部这边刚更新了一版,和之前你看到的那个格式有改动。"
他点开链接。页面加载了两秒,弹出一份PDF文档,标题是"固件版本号比较框架v4.2.1"。他快速扫了一遍结构,和之前见过的v4.1.3相比确实有变化,主要是版本号字段的解析逻辑重构了,后面还多了一组校验位生成规则的附录,之前那个版本没有这部分。他把文档保存到本地,命名为"2026.08.20_固件比较框架_v4.2.1",然后切回对话框回了一个"好的"。
回完之后他把手指搭上键盘继续处理工单。但当他开始敲第一行注释的时候注意到一件事:他今天早上没有刻意去调整右手无名指的落键力度,可它已经自然地落在了那个新位置上。几周之前他还在跟自己的手指较劲——每一次敲击都要确认角度对不对、力度合不合适——现在那个位置像是被踩实了的土路,走过去的时候脚自动就找到了应该踩的地方。比几周前轻了一些,也准了一些。他低头看了一眼自己的手,指腹贴着键帽,然后继续打字。
十一点二十分,第二条消息来了。这次是一个压缩包附件,文件名写着"固件底层映射表_修正版_20260819.7z"。附件大小不大,下载花了不到三秒。他解压之后看到一份Excel表格,行数比之前那份多了四十二行,每一行都是一个底层映射条目的修正记录。他打开表格快速浏览了一遍,把它和本地存着的那份旧版做了并排对照,旧版他上周刚核对过,每一行都看过。新版和旧版之间有七处不同,分布在第三张表的第五、第七、第十二行,以及第四张表的第一、第六、第九和第十八行。他标记出这些差异之后在对话框里打了一行字:"这份修正版是今天刚出的?"
那边回得很快。他打完字还没切回表格界面,对话框就已经弹出了新内容:"昨晚出的。我看了一下,和你之前分析的那几条路径有重叠,你应该能用上。"
闻人屿看着"你应该能用上"这五个字。他把手机从支架上拿下来放在桌面上,端起杯子喝了口水。水是早上接的,已经凉透了,他喝了一口之后把杯子放回去,杯底碰到桌面的时候发出一声很轻的磕响。他没有回"谢谢",也没有回"好的",甚至没有回任何字。他只是看着那行字在对话框里待了一会儿,然后把对话框最小化,继续处理工单。
他处理完第二条工单的时候已经快十二点了。第三条工单涉及到一个跨机房的节点转发问题,需要调几段日志出来看,他打了个标签准备下午再继续。站起来的时候他拿了杯子往茶水间走,走廊里铺着浅灰色的地砖,墙面刷的是那种办公楼里最常见的米白色乳胶漆,有几处墙角已经被来往的人蹭出了浅灰色的污迹。他走到茶水间门口的时候里面有人,他就在外面等了一下,等里面那个人端着杯子走出来之后他才进去。
他接了一杯温水。水从龙头里流出来的时候带着一股轻微的金属气味,是这栋楼的管道老化了还是什么原因,他也说不清,但他已经习惯了。他端着杯子站在茶水间的小窗前往外看了一眼,楼下是个窄小的天井,堆着几台淘汰下来的旧空调外机,铸铁支架上锈迹斑斑,有几根藤蔓植物从墙角的裂缝里长出来沿着排水管往上爬。他看了大约十秒,然后端着杯子往外走。
走回工位的路上,在走廊拐角处他遇到了南宫珩。
那个人穿着一件深灰色的薄外套,拉链拉到胸口的位置,里面是一件黑色的圆领衫。他手里拿着一个黑色的保温杯,杯身上没有任何标识,看起来用了有些年头了。他从楼上那个方向走下来,手里握着杯子,步子不快不慢。看到闻人屿之后他既没有加快也没有放慢脚步,保持同样的节奏走到了距离他大约一米的位置,然后侧了一下身,把路让出来。
"下午的固件表看了吗。"南宫珩问。他的语气和上次在技术部会议室里说"你把线路理了一遍"的时候一样,平稳的,不高不低,不带什么额外的情绪。
"看了。"闻人屿停下来。走廊在这里刚好是一个拐角,他停的位置在拐角的外侧,南宫珩站在拐角的内侧,两个人之间隔着一个直角。
"有用就行。"南宫珩说。他说完这四个字之后没有立刻走。他先拧开了保温杯的盖子,把杯口凑到嘴边喝了一口。这个动作做得很自然,但闻人屿注意到他喝水的这个停顿比正常路过时停下来喝一口水要长——大约两到三秒,杯口离开嘴边之后他没有马上拧盖子,而是先把杯子放低了一些,像在等那一口水咽下去。然后他才把盖子拧上,朝闻人屿的方向微侧了一下头,没说"走了"也没说"再见",只是侧了一下头,然后继续沿着走廊往电梯方向去了。
闻人屿端着杯子走回工位。他坐下来之后没有立刻开始敲键盘,先看了一眼窗外。阴天的光均匀地铺在楼群的上方,没有阴影,没有强光,整片天空都被一层厚而平的云层覆盖着,像是有人把一块巨大的灰色毛毡平平整整地铺在了城市上空。走廊里的脚步声已经从电梯口方向消失了,他才把视线从窗外收回来,手指搭上键盘。
第三条工单的日志调出来之后他看了大约二十分钟,发现问题的根源可能不在本地的转发配置上,而是上游的一个路由表条目被人动过。他把怀疑的那条路由标出来,在旁边写了注释,然后把工单状态改成"待与上游确认",存了草稿。
处理完这些的时候已经快四点了。他起身去了一趟洗手间,洗手的时候看了眼镜子里的自己,眼睛下面有一道很浅的青色,昨晚睡得不算好,但也不算差。他擦了手走回工位的路上经过门口的时候,听到走廊里有脚步声往大办公室方向来。那脚步声不重,鞋底踩在地砖上的声音有一种特定的节奏,不快不慢,每一步之间的间隔几乎一样。他侧头看了一眼,南宫珩站在门口。
那个人站在门框旁边,右手拿着一个浅灰色的文件夹,左手插在裤兜里。他站在那个位置像是刚到,也像是已经站了几秒了,正在往办公室里扫视。视线从门口附近的工位开始往里面移动,扫过一排之后落到了闻人屿的位置上,然后他走了进来。
"总部那边多了一份机房底层权限的审计副本。"他走到闻人屿桌前,把文件夹放在桌面上。放下去的时候他的指尖在封面上叩了一下,力度很轻,像是确认东西放稳了,也像是无意识的习惯动作,"我想着你可能有需要就带下来了。里面有几段配置记录和你之前做的封堵路径评估是同一批节点的。你可以先看看,用完了不用还。"
"好。"闻人屿说。
他看着那个文件夹放在桌面上。浅灰色的封面,没有印任何标识或标签,只在左上角贴着一张白色的小纸条,上面用圆珠笔写着几个数字编码,是他不认识的格式。封面右下角有一道折痕,从边角往里延伸了大约四厘米,像是被人反复翻折过,那道折痕处的纸面微微发白,比其他地方薄了一些。他没有立刻翻开,先抬头看了南宫珩一眼。
南宫珩没有多停留的意思。他放完文件夹之后往后退了半步,转身往门口走,步伐和来的时候一样,不快不慢。走到门口的时候他侧过身,像想起来什么似的补了一句:"那台显示器的亮度和色温设置你调了吗。"
"调了。降了两档亮度。"
"好。"他说完就走了。
脚步声沿着走廊往电梯方向去,闻人屿听着它逐渐变远,从清晰变得模糊,然后被走廊尽头那扇门的开合声截断了。他把视线从门口收回来,低头看着桌面上的文件夹。他伸手翻开封皮的时候封面那道折痕在他的手指底下滑过去,触感微微凸起。里面的配置记录一共六页,打印在白色A4纸上,每一页右上角都盖着总部机房的电子印章复印件。他扫了一遍内容,确实是和他之前做过的封堵路径评估相关的节点权限记录,有几条他甚至在系统的公开界面上从来没有看到过——那些节点的端口号段和网关映射关系只在内部审计系统里可见,普通运维账号的权限根本查不到。他的目光在那几行配置记录上多停了一会儿,然后合上了文件夹。
下班之前他没有再打开内通系统。他把那个文件夹收进抽屉里,收拾了桌面上的东西,站起来把椅子推回桌下。走出工位的时候走廊里已经没什么人了,大办公室另一头的灯关了两排,剩下的几排亮着,照着空了大半的座位。他穿过走廊走到电梯口按了下行键,电梯从一楼升上来用了十几秒,门打开的时候里面站着一个保洁阿姨,正在用抹布擦轿厢壁上的手印。他走进去站在另一侧,电梯下行的时候轿厢里很安静,只有保洁阿姨手里那块湿抹布碰到金属壁面时发出的那种黏湿的摩擦声。
走出写字楼的时候天色暗了大半。路灯还没有亮,但街边商铺的灯已经开了,便利店的白光、水果摊的暖黄光、小面馆门口的红色灯箱,几种颜色的光从不同的玻璃门里透出来,在人行道上铺成一片斑驳的色块。他走下台阶之后没有立刻往地铁站走,在台阶下方的平地上停了一步,像是脚自己先踩实了地面然后才决定往哪个方向走。就在他停下来的那一两秒里,他从余光里看到一个人影站在大楼侧面的入口处。
那个人影背对着街道,正低头看着手机。他站在侧门入口处的光晕里——那盏灯是嵌在门框上方的,照下来一圈椭圆形的白光,刚好把门口那块区域罩住——手机屏幕的冷光映在他侧脸上,让他下颌线和颧骨边缘的轮廓在冷光里显出一道清晰的边缘。他低头看着屏幕,拇指偶尔滑动一下,像是在读什么东西,也像是在刷什么列表。
闻人屿认出那个侧脸轮廓了。南宫珩。
他站在那个位置的时间点,刚好是闻人屿走出大堂之后的一两分钟。两栋楼之间那条窄道上的距离不到十米,闻人屿站在台阶下方的平地上,南宫珩站在侧门入口的光晕里,两个人之间隔着一块大约八九米宽的空地,中间有一棵种在方形花坛里的矮树挡了一部分视线。南宫珩没有抬头,也没有转过来看闻人屿的方向。他只是站在光晕里低头看着手机,姿态松散,肩微微垮着,像一个在等人接电话或者等什么人出来的人。
闻人屿站在原地看了大约两秒。然后他转身往地铁站方向走,步伐均匀,没有加快也没有放慢。走到街角的时候他侧了一下头,余光扫过侧门那边——那个人影还站在光晕里,手机屏幕还亮着,姿势没怎么变,拇指搭在屏幕边缘像是刚停下滑动。
他走过街角之后就把那个画面从脑子里翻了一页,放到了"观察到"的那一叠里,没有给它贴标签,也没有下判断,只是存着。
回到出租屋之后他换了衣服洗了手。厨房水龙头里的水是凉的,他冲完之后把手在围裙上擦了擦,然后坐在桌前把那本文件夹里的配置记录从头到尾又看了一遍。这次看的时候他拿了一支红笔,把每一页里和自己现有档案有差异的地方都圈出来,又把之前归档的封堵路径评估文档打开,两份文件并排放着,左右对照着看。里面有两条路径信息确实是他之前维护的封堵路径评估里缺失的——一条涉及五号机房到七号机房的一条转发路径,另一条是二号机房备用网关的一个非标准端口的映射记录——这两条信息如果早到手一周,他上周三做的那次路径评估就能多覆盖两个节点。
他把这些新信息和现有档案做了合并,在加密笔记里录入更新,然后在新增条目的备注栏里记了一行:"配置记录已整合。来源:纸质副本,总部机房底层权限审计文档。"他写完之后把红笔盖好放在笔记本的右侧,合上文件夹放在桌角。
合上笔记本的时候他看到了桌角的手机。屏幕暗着,没有亮,没有消息提示灯闪烁。他没有拿起来看,也没有去刷新内通系统的对话框。他站起来去厨房倒了杯水,凉水壶里的水是中午烧好放凉的,倒出来的时候壶口附近有一股细微的氯气味,他端着杯子走到窗边慢慢喝完。
窗外的天黑透了。路灯的黄光在楼下的街道上铺成长长的一排,每一盏灯之间的距离都是一样的,那种均匀的间距让整条街在夜里看起来像一条被精确计算过的线——灯与灯之间的暗区长度相同,每一段暗区的中间位置都有一棵行道树,树干在灯光边缘投出一道斜长的影子,那些影子的方向和长度也几乎一样,因为每一盏灯的高度和每一棵树的位置都是在同一套规划标准下确定的。他看着其中一道影子在地面上从长变短又变长,因为风把树冠吹动了,灯光穿过晃动的叶片时落在地面上的阴影边缘就在轻微地抖动。
他看了大约半分钟,然后端着空杯子回到桌前。他坐下来,把杯子搁在桌面上,双手放在膝盖上。今天从早上到现在,南宫珩一共出现在他面前四次——上午线上传输了固件比较框架文档,午间走廊里"偶遇"并停顿喝水,下午亲自送来审计文件夹并在封面上叩了一下手指,傍晚站在侧门的光晕里看手机。四次接触贯穿了从十一点到下班后的整个时间跨度,每一段之间隔了两到三个小时,像一个人在用某种有规律的间隔来填满一天中的分界点:上午和中午之间、中午和下午之间、下午和傍晚之间。
他坐在椅子上把这些时间点在脑中排成一列,给每一点旁边标注了对应的内容。固件文档。修正映射表。审计副本。侧门光晕。四个点之间的间距分别是两小时二十分、三小时四十分、一小时五十分——并不完全相等,但都在同一个数量级上。他注视着这条时间轴上排列的四个点,它们从远处看分散,但拉近了看,每一个都恰好落在当天中那些"可能产生接触"的窗口里,像是有人提前看过了他的日程——他虽然没有什么固定的日程,但每天的工作节奏是有规律的,上午处理工单、午间接水、下午继续、傍晚下班——四个点刚好插进了这些节奏的缝隙里。
他端起杯子又喝了口水。水已经凉了,杯壁的温度和室温差不多了。他把杯子握在手里,指腹沿着杯口边缘慢慢滑了一圈,然后放下来。周五还有一天,他想。他不知道明天南宫珩会以什么理由出现几次,但他知道那个人的节奏已经建立起来了——第一天是试探,第二天是铺开,明天应该会在同样的窗口里继续填充新的理由。那些理由每一个单拿出来都站在"正常"的界内,像一个人在一张纸上画一条线,每一笔都不越界,整条线也看不出偏斜,但如果你把其中任何一段放大来看,会发现笔尖在纸面上的压力比画别的线时稍微重了一点点,重到肉眼看不出来,只有纸本身能感受到。
他推开椅子站起来。走到厨房把杯子冲了一下倒扣在沥水架上,然后回到卧室换了睡衣。躺下来的时候天花板上的灯还没关,他伸手够到开关按了一下,黑暗从灯口的位置开始像水一样漫下来填满了整个房间。窗外的路灯透过窗帘边缘的缝隙照进来一道窄窄的黄光,落在对面墙壁上,像一条被均匀拉伸开的细线。他盯着那条线看了一会儿,闭上了眼睛。
周五早上他比闹钟先醒。醒的时候天已经亮了,窗外的光透过窗帘变成一种柔和的灰白色。他起来洗了脸刷了牙换了衣服,出门的时候在楼道里碰见了隔壁的老太太正在拿牛奶箱里的奶,他侧身让了一下,老太太说了声谢谢,他说没事。走出楼门的时候外面是一个和昨天差不多的阴天,云层比昨天薄一些,天光里透出一点浅金色的底子,但太阳还是看不见。
到公司之后他在工位坐下来开了机。电脑启动的那几十秒里他看了一眼桌角——那个浅灰色文件夹还在昨晚他放的位置,没有被动过,他也知道不会被被动过,但还是一眼扫过去确认了。然后他打开内通系统,对话框列表里南宫珩的头像显示在线,绿色的圆点亮着。没有新消息。昨天那条"核对速度比平时快"之后,没有再出现新的文字。
他处理完上午的工单之后站起来去茶水间接水。端着水杯往回走的路上经过走廊那扇窗,他放慢了一步,看到窗玻璃上映出自己的倒影。阴天的光从外面透进来,玻璃表面的倒影不算清晰,轮廓的边缘有些虚,但他能看到自己的肩线是平直的,手里的杯子里水面也在倒影里以同样的角度倾斜着。他站在窗前往外看了一眼,楼下天井里那些旧空调外机还是昨天的样子,锈迹和藤蔓都没什么变化。他看着那个倒影停了一下,然后继续走回工位。
下午两点零三分,他收到一条新消息。南宫珩的头像旁边弹出一行字:"那份配置记录里第三页的端口映射字段和你在封堵评估文档里标注的那条可能有偏差。你核对一下,如果有出入告诉我。"
他打开文件夹翻到第三页。那一页的第四行是一组端口映射字段,他把自己之前归档的版本调出来并排放在屏幕上,一列一列地对过去。从第一列到第六列数值一致,第七列他标注的是"4",文件夹里打印的是"7"。他把光标停在那个数字上,又看了一眼自己档案里那条记录的来源——那是上个月他从系统里导出的公开数据,应该不会出错。他在对话框里回复:"第三位数字应该是7不是4。你那份可能是旧版本的备份。"
"看到了,我等下更新。"南宫珩回完这条之后过了大约三秒又跟了一条,"你核对的速度比平时快。"
闻人屿看着这行字。昨天那条"核对速度比平时快"之外,这已经是第二次了。他坐在椅子上看着屏幕,没有立刻回。他想过回"因为我已经看过好几遍了"或者"那个字段记得比较熟",但无论哪一句都会把对话往"你是怎么知道我平时核对速度的"那个方向推。他最终回了一句:"因为确实有出入。"
那边没有再回。
下班的时候他收拾东西走出写字楼。今天天色比昨天稍亮一些,西面的天际线在云层边缘透出一道窄窄的金红色,那道光的宽度大约只有两三指宽,在灰蓝色的云底上像一道被刀划开的细缝。他走下台阶之后没有停步,直接往地铁站方向走。走了大约十米之后他侧了一下头,目光扫过大楼侧门的位置——那道入口今天没有站着人,椭圆形光晕里空空的,只有门边的绿植被晚风吹着微微晃动了一下,叶片翻卷的时候露出背面的浅绿色,比正面更亮一些。
他收回视线继续走。地铁站入口在街角下方,他走完那一段台阶的时候风从隧道深处涌上来,温度比地面上的空气低了好几度,那种凉意从脸侧擦过去的时候带着一种隧道里特有的味道——铁轨摩擦后的铁锈气味、混凝土的潮气、还有一点点机油的气息。他刷了闸机走进站台,站台上等车的人不算多,大约七八个人分散在站台的不同位置上。他在靠边的位置站定,列车进站的震动从铁轨深处传上来,透过鞋底传进脚掌的时候是一种持续的低频嗡鸣。列车停稳之后车门打开,他走进去在靠门的位置坐下。车门关上之前他看了一眼站台上的灯箱,那一面广告海报他上次看到的时候还是一个月前,现在换了一张新的,卖的是一个他没听过的品牌的饮品,瓶身上印着鲜亮的橙色。
列车启动之后车窗玻璃上映着他自己的脸。隧道壁上的灯牌以固定的间隔从窗外掠过,每一次掠过都在玻璃表面切出一道亮光,让映在玻璃上的脸在明暗之间交替切换。他看着那些明暗的片段在玻璃表面持续地出现和消失,每一段亮起来的时长都差不多,像是有人设定好了频率。列车在隧道里穿行了七站,他中途换了两次线,到站的时候车厢里的人已经多了起来,他站起来挤到门口下了车。
走回出租屋的路上他在便利店停了一下。自动门滑开的时候门铃响了一声短促的电子音,他走进去拿了盒牛奶和一袋速食面,又拿了一根火腿肠。收银台后面的店员是之前那个年轻女孩,今天戴着耳机,低头看手机,扫码的时候甚至没有抬头看他。他付了钱拎着塑料袋走出来,塑料袋的提手勒在手指上留下一道红痕。上四楼的时候楼道灯坏了,他摸黑上了两层,在第三层才重新亮起来。开门进屋换鞋脱外套,动作是每天重复的那一套,连贯但不需要思考。他把牛奶放进冰箱,速食面搁在桌面一角,然后坐在椅子上。
椅背托住后背的时候他轻轻吐了口气。桌面上那本浅灰色的文件夹还摊开着,翻在第三页的位置。他在下午已经确认完了那条端口映射字段的差异,但此刻他重新打开文件夹看着那一页,视线在那行"第三位数字应该是7"的位置上停了两秒。然后他合上文件夹放在桌角,站起来去厨房烧水。
水烧开的时候他站在灶台前面。蒸汽从壶口升起来,在他脸前形成一小片温暖的白雾,那片雾在他脸上扑了一下然后散开了,散开之后他看到灶台上方那扇小窗里映出他自己的脸,模糊的,有些变形,眼角的位置被窗框上的污迹挡住了。他低头看着壶里的水在沸腾的边缘翻涌,气泡从壶底升上来的时候成串的、密集的,到了水面炸开的时候发出持续的、细碎的声响。
他把火关了,端起壶倒了一杯热水。杯壁的热度从指腹传上来,沿着掌心的纹路向手掌的各个方向扩散,那种温度是一点一点渗进去的,从表皮到真皮到更深的组织,像一种缓慢的浸润。他端着杯子回到桌前,没有喝,只是握着。杯壁的温度在最初的烫手感过去之后变成一种持续的温热,握在手里像是握着一个稳定的热源。他坐在桌前面,没有开笔记本,也没有翻手机,只是握着那杯水,看着窗外。
窗外的天已经黑透了。对面楼的窗灯零星地亮着,每一扇亮着的窗户都是一个小方形的光斑,嵌在灰黑色的楼体立面上,像一块深色底布上零零落落地钉了一些浅色的纽扣。他看着其中一扇窗户看了很久——那扇窗户里没有人影,灯光是那种普通的室内照明色,暖白偏黄,窗台上似乎放着一盆什么植物,但距离太远看不清楚。那扇窗的灯一直亮着,没有熄灭,也没有变暗,只是稳定地、均匀地亮着。
他低头看了眼手里的杯子。水温已经降了一些,杯壁不那么烫了,他端起来喝了一口。水从口腔经过咽喉落到胃里的路径清晰而平稳——口腔里是温的,咽下去的时候食道里有一股暖流经过,到了胃里的时候那种暖意散开,变成一种整体的、遍布的温热。那条路径他每天都要走好几遍,已经熟悉到不需要去感知它了,但此刻他刻意地感受着它,感受着每一段温度的变化,感受着水在体内经过的那些位置和顺序。
但他知道路的另一头正在发生变化。那种变化不剧烈,不突然,甚至无法准确地说出它是什么时候开始的——上周六的"三年了"还是昨天的"核对速度比平时快"还是今天傍晚空无一人的侧门——但他知道它确实存在,像夜里温度下降时木材收缩发出的细微咔嗒声,轻到只有紧贴着它的人才能听到,但一旦听到了,就再也无法假装它不存在。他握着空杯子又坐了一会儿,然后站起来,关了灯,走进卧室。
黑暗里那条从窗帘缝隙漏进来的黄光还在墙壁上躺着,和昨晚一样的位置,一样的宽度,一样的颜色。他躺下来看着那条光,直到眼皮变沉,把它慢慢遮住了。