开那台机器,得挑时间。
时间不是挑出来的,是算出来的。老阙算的。他坐在板凳上,把伤腿搁在另一条腿上,一根手指在膝盖上点,点一下,说一句。
“先说楼。行政楼夜里一点半,保洁巡楼。从一楼开始,一层一层往上,巡到三楼是三点四十,四点下楼。中间这一段,二楼没人。”
“两个半小时。”老檀说。
“两个半小时。”老阙说,“门禁是电磁锁,断电就开。配电箱在一楼楼梯间,灰的,嵌在墙里。”
“断电以后监控呢?”
“监控有后备电源,撑二十分钟。二十分钟以后,摄像头还在拍,只是没人看。”
孙鹏一直没说话。这时候他把手里的笔放下。
“我说一句。”他说,“这不是去借东西。这是闯楼。断电、撬门、开机,一样一样数下来,哪一样碰上都是处分。咱们现在身上已经有一份‘挂靠资格被收’了,再来一份‘擅自进入行政区域’,学校连劝退都不用找理由。”
“我知道。”老檀说。
“你知道你还去?”
“我去。”老檀说,“你不去。”
孙鹏看了他一会儿,把笔又拿起来,在指间转。
“我不去。”他说,“但我把话放这儿。你要是进去了,出来的时候别让人看见脸。这不是怂,这是算账。一个人被抓住,北枢还有六个人;七个人一起被抓住,北枢就没了。”
“这话对。”老檀说。
“那你去几个人?”
“两个。”老檀说,“我,花班。”
“老阙呢?”
老阙抬起头。
“我去。”他说,“我只到配电箱。不上楼。”
“你的腿。”孙鹏说,“一点半到四点,你从北枢走到行政楼,二十分钟;配电箱在一楼,你蹲下去拨一个开关,再站起来,一分钟。真要跑,你跑不了。”
“我不用跑。”老阙说,“我拨完就走。走不动我就坐在楼梯口,说我是来看腿的。”
“谁信?”
“楼下保安信。”老阙说,“他认识我。我在这栋楼里待过三年。”
老檀看着他。
“你怎么知道配电箱第七个是机房?”
老阙没有立刻答。他把伤腿从另一条腿上放下来,脚在地上试了试,才站住。
“2021年冬天,”他说,“暖气管道爆了,一楼淹了半尺。那天夜里我在这儿值班,跟着维修队下去关总闸。开关上贴着标签,我一个个看过。”
他停了一下。
“我记东西慢。看过的东西,就忘不掉。”
周二,凌晨一点十分。
行政楼一楼楼梯间,比外面冷。水泥地上一层薄灰,脚踩上去有声。配电箱在楼梯拐角底下,灰色的铁皮门,门上贴着一张打印纸,四个字:非专业人员禁止操作。
老阙蹲下去。他蹲得很慢,先弯左腿,再把伤腿慢慢放平,一只手扶着墙。蹲稳了,他从口袋里摸出一个小手电,用牙咬住,光打在箱门上。
箱门上的锁是个小挂锁,没锁死,挂着。
“谁最后一个走的,忘了锁。”花班小声说。
“不是忘。”老阙说,“这锁三年没人用过。里面全是空气开关,关了推上去就行,锁它干什么。”
他把挂锁摘下来,放进自己口袋,把箱门拉开。
里面两排开关,一排十二个,每个下面一条白色标签,字是手写的,有的褪了色。老阙把手电往上抬了抬,一行一行往下找。
第一排:一层走廊照明。一层卫生间。报告厅。档案室。
第二排:二层办公。二层机房•门禁/照明。三层。
他找到第七个。标签上写着:二层机房•门禁/照明。
老阙伸出右手,两根手指捏住那个开关的扳手,往下拨。
“啪。”
声音很轻,像有人在外面弹了一下指甲。
整栋楼,灭了一半。
楼梯间的灯灭了,只剩墙角那个安全出口的牌子,绿光,照着三个人的鞋。
楼上没有声音。一楼值班室里,电视还在响,是深夜重播的球赛,解说员的声音隔着一道门,含含糊糊。
老檀站在楼梯口,抬着头,听。
三十秒。
“走。”他说。
二楼走廊尽头,机房的门。
门边一个读卡器,指示灯灭着。
老檀在门前停了半秒。
他大一在北区旧实验楼搬过服务器。进楼出楼,也是这样的读卡器,滴一声,亮一下绿灯。他刷了两个月的卡,那时候他不知道,每滴一声,系统里就多一行记录。
他伸手推门。
门开了。电磁锁断电以后,锁舌是缩回去的,门只剩一道闭门器在拽着,推开的时候有一点阻力,像推一扇很重的木门。
机房里黑。窗外的路灯照进来,在地板上铺了三条长长的高光。
老檀站在门口,没有立刻进去。他闭了一下眼,睁开,又闭一下。眼睛适应黑暗要时间,他给了它十秒。
十秒以后,他看清楚了。
三排机柜,每排八台。机柜上的标签是打印的,白底黑字,从第一台排到第二十四台。
第三排,第七台。
他走过去,蹲下。
机器的高度到他胸口,老式塔式服务器,铁壳,前面板上一排硬盘指示灯。全灭。
花班蹲在他旁边,声音压得几乎听不见。
“标签上写的什么?”
“SRC-DATA-07。”老檀说。
“跟咱们楼里那台07,是一台吗?”
“不是。”老檀说,“楼里那台是他们的开发机。这台是仓库。”
“仓库里放什么?”
“放了三年。”老檀说。
他伸出手,按电源键。
按下去的时候,他心里想的是开不了。三年没通电的机器,电源可能烧了,硬盘可能卡死了,主板上的电池早没电了,CMOS 一清空,机器连自己是谁都不记得。
手指压下去,松开。
“嗡。”
风扇转起来。
那声音在空机房里不是声音,是撞击。花班整个人往后一坐,一屁股坐在地上。
“响了。”她说,“三年了它还响?”
老檀没有答。他蹲在那儿看前面板。
硬盘灯一颗一颗亮起来,六颗,从左到右,亮到第六颗的时候,机器里“嘀”了一声。
自检通过。
屏幕上跳出一行一行的白字,在最上面停住:
江城大学学生科创平台 • 数据服务器 • SRC-DATA-07
Copyright (C) 2019 Workshop Team
Login:
花班从地上爬起来,凑到屏幕前。
“工坊。”她说,“开机画面还是工坊的。”
“没人改过。”
“三年了没人改?”
“改这个要动系统。”老檀说,“动系统要报备。报备要填表。”
花班没接话。她伸手在机箱侧面摸了一下,摸到一层灰,指头在灰上划出一道白印。灰下面是一张手写的标签,胶带黄了,字还看得清:工坊项目组•07。
“这标签谁贴的?”
“贴的人已经走了。”老檀说。
登录是个问题。
Login: 后面那个光标在闪。
老檀没有密码。他试了三个:空的,admin,workshop。三次都返回同一行字。
3 failed attempts. 30s lockout.
“锁了。”花班说,“三十秒以后呢?”
“再试三次。”老檀说,“再锁。”
“那试到什么时候?”
老檀没有答。他蹲在那儿,看着那行红字,手指在膝盖上敲。
然后他做了一件事。他从口袋里掏出手机。
手机有电,没信号。机房里装了屏蔽,屏幕左上角那个位置空着,什么都不显示。
他打开相册,往下翻。翻到三天前的一张。
那是东门肯德基门口。周野坐在台阶上,笔记本电脑摊在膝盖上,屏幕亮着。老檀当时站在他侧后方,隔着两步,用手机拍的。照片拍得歪,一半是周野的肩膀,一半是屏幕。
他把照片放大。放大到最大,屏幕上的字开始糊,只剩轮廓。
花班凑过来:“看什么呢?”
“他的屏幕。”
“他屏幕上有密码?”
“不知道。”
老檀把照片往右上角拖。拖到边缘,那里有一段被终端窗口挡住一半的东西。
一行注释。字符很小,但还没糊透:
\# remember: data07 5665
老檀的呼吸停了一下。
“5665。”他说。
“什么5665?”
老檀把手机举给她看。
“周野自己的屏幕上,”他说,“留了一行备忘。data07,后面一串数字。”
“data07是这台机器。”花班说,“5665是密码?”
“不知道。试试。”
老檀转过身,在键盘上敲。用户名他早就知道了,README 里、目录的属主里、每一行日志里,到处是那个词。
Login: workshop
Password: 5665
回车。
屏幕停了半秒。
Last login: Wed Jun 17 22:41:07 2020 from 10.20.31.88
花班整个人僵在那儿。
“进去了。”她说,“檀哥,进去了。”
老檀盯着那行字。
2020年6月17日。晚上十点四十一分。
“檀哥,”花班的声音发抖,“周野说他那天十一点多去的打印店。”
“他十点四十一还在这儿。”老檀说,“先在这儿干完,才去的打印店。”
花班咽了口唾沫。
老檀敲了一条命令。
df -h
/dev/sdb1 3.6T 3.4T 180G 96% /data
“三点四T。”花班的嗓子一下劈了,“用了三点四T!”
老檀敲:
ls /data
七个目录,一列排下来:
raw/
cleaned/
labeled/
augmented/
formats/
benchmark/
bin/
花班一个一个念,念到第六个停住。
“前面五个是数据。”她说,“raw 是原始,cleaned 是清洗过的,labeled 是打过标的,augmented 是扩出来的,formats 是各种格式。第六个 benchmark,测试基准。”
“第七个。”老檀说。
“bin。”
老檀看着那三个字母。
“花班。”
“嗯。”
“进 bin。”
cd /data/bin
ls -la
总用量 40
drwxr-xr-x 2 workshop workshop 4096 2020-06-17 22:38 .
drwxr-xr-x 2 workshop workshop 4096 2020-06-17 22:38 ..
-rwxr-xr-x 1 workshop workshop 21408 2020-06-17 22:38 loader
-rw-r--r-- 1 workshop workshop 2871 2020-06-17 22:38 loader.py.bak
-rwxr-xr-x 1 workshop workshop 1180 2020-06-17 22:39 README
花班盯着那三行。
“loader 在这儿。”她说,“他不是说删了吗?仓库里那个。”
“他删的是仓库里的。”老檀说,“这份是编译好的。编译完的东西,删源码删不掉它。”
“时间呢?”
“十点三十八。”
花班自己算。她算得很慢,嘴唇动。
“十点三十八留了 loader,十点四十一退出去,十一点多到打印店。”她抬起头,“他临走前二十分钟,还在往这台机器上放东西。”
“是。”
“他为什么不放仓库?”
“仓库是公开的。”老檀说,“谁都能看,谁都能改,谁都能删。”
“这份呢?”
“这份在这台机器上。”
老檀把手电往下压了压,光照在机箱侧面那道灰印上。
“这台机器,他们进不来。”
为什么进不来,写在 README 里。
老檀敲:
cat /data/bin/README
一千一百八十个字节。前面几行是这样:
本目录下 loader 为 data 模块的读取器。
编译时间:2020-06-17 22:38:14
校验方式:读取时校验调用方进程的可执行段哈希。
若哈希不匹配,loader 拒绝输出,并写入 /var/log/loader_refuse.log。
花班把这几行看了两遍。
“它校验调用方。”她说,“什么叫校验调用方?”
“不是谁都能用它读数据。”老檀说,“它先看你是谁,再看你要什么。”
他把屏幕往下滚。
校验目标:
1. 调用进程不得名为 python、java、node、go、rustc;
1. 调用进程的可执行段哈希,须与编译时记录的某一个匹配;
1. 编译时记录了 7 个哈希。
“七个。”花班说。
“工坊第五批七个人,七台机器。”老檀说,“他们编译 loader 那晚,在场的机器都记了一份。”
“那……”花班的手在裤子上蹭了一下,“那咱们读不了?”
老檀把屏幕继续往下滚。滚到最后,还有三行。
另:若七台机器均已不可用,
可凭 /data/bin/verify_provenance 重新登记一台。
登记条件见该文件。
花班猛地抬头。
“能重新登记?”
“能。”
“什么条件?”
老檀敲:
cat /data/bin/verify_provenance
屏幕上出来一段代码。不长,一百多行,前面几十行是注释。
花班看了两遍。看完,脸白了。
那段代码做的事,跟内核里那个校验是同一套逻辑,只是换了三把锁。
第一把:查调用方有没有推倒重写的历史。
第二把:在提交记录里找一次满足“删掉的行数大于新增行数的六成,且新增行数超过两百”的提交。
第三把,写在最里面,用注释包着:
def require_rewrite(history):
"""
核心要求:调用方必须有过至少一次
“推倒重写”行为,且该行为发生在
接触本数据之后。
即:不允许“先写好代码,再来取数据”。
"""
花班盯着那几行。
“檀哥,它要求,先取数据,再写代码。咱们已经写了啊,苦栗写了,承露也写了。写了十个月了。”
老檀没有立刻答。他把手电搁在机箱上,光打在天花板上,机房里有了一小块圆的白。
“你上个月,”老檀说,“删了那两千三百行。”
花班整个人僵在那儿。
“我删了。那次删的是注意力那一块,跟数据没关系。”
老檀转过头看她。
“有关系。”
“什么关系?”
“它不问你删的是什么。”老檀说,“它只问你舍不舍得删。”
机房里静了几秒。风扇在转,硬盘在响,声音很细,像很远的地方有雨。
花班蹲在那儿,手撑在膝盖上。
“两个月前我删的时候,我以为我在删一堆没用的东西。”
她抬起头。
“我不知道它在看着。”
老檀把手电从机箱上拿起来,照键盘。
“试。”他说。
花班站起来,走到机器前面,把键盘接过来。她敲得很慢,一个字母一个字母敲。
cd /data/bin
./verify_provenance --history /wolfdew/.git/log
回车。
屏幕上滚起来。滚的是北枢的提交记录,从第一行开始,一直滚到最后一次,滚了二十秒。
停住。
Scanning 214 commits...
Found candidate:
f3c8a71 “重写数据清洗,去掉第三方脚本依赖”
ins=1204 dels=1893 ratio=1.57
→ PASS (dels > 0.6*ins, ins > 200)
Rewrite count: 1
Requirement: >= 1
──────────────────
STATUS: PASS
──────────────────
Registering caller...
Machine ID: BEISHU-3F-2011
Registered.
You may now read /data.
花班盯着 STATUS 后面那个 PASS。
十秒。
“檀哥,过了。就因为那一次?”
“就因为那一次。”
花班低下头,用手背在眼睛上擦了一下。擦完,她抬起头,声音是哑的。
“那一次是两个月前。我删的时候,还在心里骂了一句,说这破代码谁写的。”
“你写的。”
“我写的。”花班说,“我删自己写的东西,删得下手。”
“它就要这个。”老檀说。
他看着屏幕上那行 Machine ID。
“记下来。这台机器的编号。”
“BEISHU-3F-2011?”
“北枢,三楼,2011年那台双路机器。”老檀说,“从今天起,它是第八台。”
花班愣了一下。
“第八台?”
“前面七台,是工坊那七个人的。”老檀说,“现在多了一台。”
“这算……加进去了?”
“这算它认了。”老檀说。
花班转过身,又扑回键盘前。
./loader --list /data/cleaned | head -50
屏幕滚出来一串名字:
jd_papers_2019.txt
jd_forms_2020.txt
jd_reports_2020.txt
NewsCrawl_zh_2018.txt
滚了五十行。
“檀哥,”花班说,“这些是……”
“数据。”
“多少?”
./loader --count /data/cleaned
Files: 4,217
Records: 128,553,904
花班看着那个数字,嘴唇动了两下,没出声。
“一亿两千八百五十五万条。”老檀说。
“咱们苦栗用了多少?”
“十二万。”
“十二万对一亿两千八。”花班说,“这是一千倍。”
她把手从键盘上拿开,放在自己腿上。
“檀哥,咱们之前是在用一口井。”
“嗯。”
“这儿是一片湖。”
老檀看着那个数字,看了七八秒。
然后他伸手,把花班从键盘前拉开。
“别跑了。”
“什么?”
“今天不读。”老檀说,“现在两点四十。保洁四点上来。”
“读十分钟也行啊。”
“十分钟读不完一个目录。”老檀说,“读一半,走的时候机器上留着痕迹。你愿意为十分钟,把这条道堵死?”
花班没说话。她把椅子往后退了半步。
“而且,”老檀说,“这份数据在这儿躺了三年零五个月。”
他抬头看了看机柜顶。
“它不差这几个小时。”
花班坐在那儿,看着屏幕上那个数字。
“好。”她说。
她伸手,敲了:
sync
shutdown -h now
屏幕黑了。风扇的声音一级一级往下掉,最后停住。
机房里只剩窗外的路灯光。
两个人往外走。走到门口,花班忽然停住。
“檀哥,我刚才想到一件事。那个 loader,它校验调用方。三年了,它一直开着。那这三年,有没有人试过?”
老檀站在门口。
他转过身,走回那台机器前面,蹲下,重新按了电源键。
“嗡。”
风扇又转起来。等登录界面出来,他敲:
Login: workshop
Password: 5665
cat /var/log/loader_refuse.log | wc -l
311
“三百一十一次。”花班说。
老檀敲:
tail -8 /var/log/loader_refuse.log
八行,每一行都有时间、有进程名、有机器编号。
他一行一行往下看。看到第六行,停住。
2023-04-08 14:22:31 REFUSE pid=4471 proc=python3 machine=SRC-ADMIN-02 reason=hash_mi**atch
2023-04-08 14:22:33 REFUSE pid=4471 proc=python3 machine=SRC-ADMIN-02 reason=hash_mi**atch
2023-04-08 14:22:35 REFUSE pid=4471 proc=python3 machine=SRC-ADMIN-02 reason=hash_mi**atch
三条,相隔两秒。同一天,三天前。
“SRC-ADMIN-02。”老檀说,“哪台?”
花班想了想。
“ADMIN,行政楼的管理机。”她说,“学生会那台。”
老檀敲:
grep -c “SRC-ADMIN” /var/log/loader_refuse.log
287
“三百一十一里,二百八十七次。”花班说,“都是他们。他们试了三年,每次都被拒。为什么?”
老檀看着那一行 reason=hash_mi**atch。
“因为他们从来没重写过自己的代码。”
机房里静下来。风扇还在响。
花班蹲在那儿,蹲了很久。
“檀哥,他们不是读不了数据。”
“那是什么?”
花班抬起头。
“他们是读不懂‘重写’这两个字。”
老檀站在那儿,看着屏幕上那三行。
然后他伸手,敲了最后一条命令。
shutdown -h now
屏幕黑了。风扇停了。
“走。”
二楼走廊,安全出口的绿光。
下到一楼,老阙还蹲在配电箱前面,一只手扶着墙。看见他们下来,他把手伸上去,把第七个开关推回去。
“啪。”
楼梯间的灯亮了。楼上,一楼值班室的电视还在响。
三个人出楼。门在身后合上,锁舌“咔”一声弹回去。
外面天没亮。东门方向有一盏路灯坏了,一闪一闪。
走到操场边上,花班忽然说:“檀哥。”
“嗯。”
“今天的事,一个字都不能往外说。”
“我知道。”
“老阙、灰贝也不说?”
“不说。”老檀说,“不是信不过。”
他把嘴里那根没点着的烟拿下来,看了看,又叼回去。
“他们要是知道了,夜里睡不着。”
“那咱们呢?咱们睡得着吗?”
老檀没有答。他走了几步,忽然停住。
“花班。”
“嗯。”
“回去以后,你干一件事。把你在北枢删过的东西,都记下来。哪天删的,删了多少行,为什么删。一条一条记。”
花班愣住了。
“记这个干什么?”
“因为今天我们知道了一件事。”老檀说,“有人一直在数我们删过多少次。”
他往前走。
“我们也得自己数。”
花班站在原地,从口袋里摸出一个皱巴巴的小本子,翻开第一页,用铅笔头写:
四月十一日。两千三百行。删的是我自己写的。
写完她抬头,前面老檀已经走出十几步,背影在路灯下一段一段地亮,一段一段地暗。
本书首发来自17K小说网,第一时间看正版内容!
1 永夜
作者: 江火香猫
科幻末世 1042417 字
永夜:浩劫余生,终见光明
2 校花别沾边,重生的我只想搞钱
作者: 十万字
都市小说 789066 字
都重生了,还不好好搞钱?
3 我死后,姐姐们才开始爱我
作者: 木马非马
都市小说 80082 字
我死后,全家人才开始知道爱我,可我已经死了
4 上门狂婿
作者: 狼叔当道
都市小说 8171953 字
上门赘婿,受辱三年,期约一到,强者归来!
5 武圣之上
作者: 任我独行侠
玄幻奇幻 201339 字
这是个废材靠着金手指,逆天改命的故事!
6 60年代:开局荒年,我带着全村吃肉
作者: 妞妞骑牛
都市小说 415929 字
穿越60年代:开局荒年,我带着全村吃肉
7 这位诗仙要退婚
作者: 人世几春秋
历史军事 1194814 字
这位诗仙要退婚:文韬武略
8 玄幻:遇强则强,我的修为无上限
作者: 史上最帅作者
玄幻奇幻 1481875 字
获得遇强则强系统,我直接啪啪给了天道两个大嘴巴子
9 红豆缘:炮灰也要长命百岁
作者: 翘褚
古代言情 271116 字
开局炮灰剧本怎么办?不慌,苟着苟着就到大结局了
10 神龙诀之九龙剑诀
作者: 光环美男
仙侠武侠 1003350 字
江湖传闻要是得到《神龙诀》,就可以称霸武林!
《第十二章 第三排第七台》最新评论
评论本章还没有人发表评论哦~
我来说两句