Linux的用户与管理

很久以来,我对Linux用户的概念都很模糊,只知道如果碰到“Permission Denied”就用sudo来执行,甚至在服务器上跑的很多东西都是用root来跑的。今天花时间学习了一下Linux用户有关的知识,记一下笔记。

本文所有代码都是在virtualbox虚拟机中进行,环境:Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-87-generic x86_64),用户名vagrant,密码vagrant。

一、用户与用户组

1.Linux是如何分辨每一个用户的

Linux并不是通过用户名来分辨每一个用户的,而是通过UID(计算机认识数字比较容易,而人类认识单词比较容易),我们平时所说的用户名只是便于人类操作和记忆。

对于每个文件,记录的其实是一个UID,之所以显示成用户名“vagrant”、“root”,是因为在/etc/passwd中存储了有关的用户信息,ls程序在显示的时候,会根据此文件将对应的UID显示成用户名。如果我们在/etc/passwd这个文件中将UID修改,那么ls将显示的是一个UID,而不是用户名。

用户登录Linux的流程如下:

  1. 寻找/etc/passwd是否有这个用户名,如果有,读出对象的UID和GID(group ID),以及主目录和配置
  2. 读取/etc/shadow,核对密码
  3. 进入shell

2. passwd文件和shadow文件

Linux所有的用户都保存在/etc/passwd文件中,格式如下:

每一行代表一个账户,通过:来分割信息。数一数会发现一共有7个字段,这7个字段分别代表:

  1. 账户名称
  2. 密码,可以看到所有的密码都是x,这是因为很多程序会读/etc/passwd,将用户名和密码放在一起很不安全,后来密码移动到 /etc/shadow文件中了,/etc/passwd文件只留一个x占位。
  3. UID
  4. GID
  5. 用户信息说明
  6. 主目录(即登录之后立即所在的位置)
  7. shell 登录之后启动的shell,这里有一个特殊的shell就是nologin,上面的例子中,像是backup这种账户是无法登录shell的。所以当我们新建一些系统服务的账号,类似apache,Jenkins等都可以让它们不要登录系统

/etc/shadow文件的格式如下:

可以看到,这也是用:来分割的,一共有9列,每一列代表的意思如下:

  1. 账户名称
  2. 密码
  3. 最近改动密码的日期(相对于第0天,也就是1970年1月1日的偏移天数)
  4. 密码不可改动的日期,如果是0则可以随时修改
  5. 密码需要重新更改的日期,如果不改账户将会变为过期。可以看到默认设置是99999=273年
  6. 字段5前几天进行提醒
  7. 密码过期后的宽限时间,字段5+本字段天数之后依然没有更改才算过期。宽限时间内用户登录会被强制要求修改密码
  8. 账户失效日期,到期无法使用
  9. 保留字段

3.有效用户组与初始用户组

每一个用户都有一个用户组,和UID一样,Linux分辨用户组也是通过GID的,而不是通过名字。和/etc/passwd /etc/shadow一样,对于用户组有 /etc/group /etc/gshadow

先来看/etc/group

一共四个字段:

  1. 用户组名字
  2. 用户组密码,其实很少用,和passwd一样,用x占位了
  3. GID
  4. 此用户组的用户列表,逗号分搁,没有空格(一个用户组可以有多个用户,一个用户可以在多个用户组)

/etc/gshadow的内容几乎和/etc/group一样:

要注意的事第二个字段,是密码,如果第二个字段是!,表明该用户组没有用户组管理员。不过由于sudo的存在,其实用户组管理员的功能很少使用了。

  1. 用户组名字
  2. 密码列
  3. 用户组管理员的账号
  4. 该用户组的所属账号

仔细观察你可能发现这样一个问题:在/etc/passwd里面说某一个用户的用户组ID是a,但是在/etc/group的a用户组ID下并没有看到这个账户的名字啊?

这是因为,passwd里面的用户组叫做“初始化用户组”,就是你登录到shell的用户组。这个用户组不需要写到groups里面。

如果一个用户属于很多用户组,这么这些用户组的权限,该用户都会有。那么创建一个文件,默认的用户组应该是哪个呢?

答案是“有效用户组”,通过groups命令,可以查看当前用户的所在用户组,其中,排在第一个的是有效用户组,如果创建文件就会模式使用这个用户组。

下面的命令演示了有效用户组以及用户组的切换:

需要注意的是,newgrp是通过新开一个shell来赋予用户新的用户组的权限,通过exit可以回到之前的用户组。

二、创建与管理用户

1.useradd

了解了用户和用户组的概念,接下来开始讲用户的管理。

创建一个新的账户的命令是useradd,执行这个命令需要读写/etc/passwd等文件,所以一般需要root账户来执行。

上面的代码新建了一个tom账户,可以看到,系统并没有默认为tom创建一个home目录。在CentOS中,使用useradd,系统一般会默认帮你做这几件事:

  1. /etc/passwd中创建一行与账号相关的数据
  2. /etc/shadow创建相关数据,但是密码为空
  3. /etc/group创建一个与用户名一模一样的名称
  4. /home下创建一个和用户名一样的目录,权限700

我们简单的使用useradd命令,Linux会帮我们自动配置一些参数,这些参数是参考的哪里呢?见下面两条命令的输出就明白了:

2.passwd

创建用户用useradd,然后需要为用户创建密码,使用passwd命令。需要注意的有以下几点:

  1. passwd修改自己账户的密码,普通用户需要输入旧密码,root用户不需要
  2. root用户可以修改其他用户的密码而不需要输入旧密码
  3. 普通用户在创建密码时会经过PAM模块检查密码的强度,而root无需遵守强度检查

3.其他一些修改账户的命令(sudo)

chage命令可以修改密码参数有关的信息。

usermod可以修改有效用户组、初始用户组、主目录等与用户有关的信息。

userdel可以删除用户。这个命令非常危险,将会从/etc/passwd/etc/shadow,中删除用户,也会删除/home/user用户目录。一般情况下,我们暂停某个账户可以只将账户的状态设置为不可用,例如/etc/shadow第八个字段(账号失效日期)设置为0即可。如果确实需要删除用户,也可以用userdel -r username,这样会先删除find / -user username,然后再删除用户。

4.用户可以使用的一些命令

上面介绍的都是sudo用户对账户的管理,还有一些命令普通用户就可以使用:

  1. finger查阅用户有关的信息
  2. chfn change finger,修改用户的详细信息
  3. chsh 改变默认登录的shell
  4. id可以用来查询用户的id

5.用户组的管理

在上面我们已经认识了用户和用户组,以及用户的管理。其实用户组的管理也是类似,只不过是/etc/group/etc/gshadow而已。要注意的是,newgrp是新开启一个shell,用新的环境来登录用户和用户组的。仔细想想, 这是一个很有趣的问题。正好我在写这篇文章的第三天(本文估计要写一个周),Julia写了一篇博客:How do groups work on Linux? 这篇博客正好说明了newgrp的行为:Linux运行的进程都保存着有效组GID的属性,当进程想要通过组权限(这里略去了UID检查过程)读一个文件的时候,当看一个文件是否可以读的时候,Linux检查一下此进程的有效组里面是否有等于文件的组的,如果有那么就可以读。Julia之前误认为是:Linux检查一下此进程的用户是否可以读文件,如果不可以,就看一下用户所在的组,是否有等于文件所属的组的。——这样的话,就要每次去读/etc/passwd了!

另外有关用户组还要知道的一个命令是gpasswd,这个命令可以分配组管理员。组管理员可以添加或删除用户到某一个用户组。有点像论坛的版主的意思。

三、精确的权限控制ACL

我们知道,Linux的文件系统有三组权限,分别是“owner group other”,这样无法做到对同一group的成员,或对都是others的成员控制权限。所以就有了ACL(Access Control List)。ACL可以针对单一用户、单一文件或目录进行rwx的权限设置。这是一个UNIX-Like操作系统权限外的支持项目,需要文件系统的支持(mount | grep acl)。

这里没有啥需求所以没有仔细研究,更多的资料读者可以自行搜索,推荐IBM Linux ACL 体验

四、用户切换su, su – 和sudo

su用来切换用户,使用方法是 su - username-的意思是环境变量。比如说su - vagrant那么会以vagrant来登录shell,所有的环境变量都会变成vagrant的。如果不加-那么就只是id变成vagrant,进去之后如果收MAIL,还会是原来的用户的。

su - root就可以登录root账户了!其实root可以省略,su - 就是登录root账户的意思。使用某个账户临时运行一下命令:su - root -c command,这里的root也可以省略。注意如果root账户没有密码的话,会出现 Authentication failure。

su是简单的切换命令。现在有一个问题,如果每个人都有用root账户权限的需求,那么就要有很多人知道root账户的密码,这很不安全,所以就有了sudo命令。sudo可以让你用其他用户(通常是root账户)来执行命令。使用sudo的账户必须在/etc/sudoers里面。系统验证sudo的过程如下:

  1. 当用户执行sudo命令时,系统先从/etc/sudoers文件中检查用户是否有执行权限
  2. 如果有,让用户输入自己的密码
  3. 执行sudo后面的命令

sudoers文件支持对用户组授权(以%开头)。格式如下:

其中,可以修改最后一列为NOPASSWD:ALL来免除每次运行sudo都需要的密码操作。(设置之后简直每天可以多好几秒呢!)

好了,基本的管理和操作到这里差不多了,上面的学习过程都是参考的鸟哥的Linux私房菜第三版(这本书讲的挺细的但是有点啰嗦,让人摸不透重点)。其余还提到了一些内容,下面就只列一下,有需要的可以去了解:

  1. PAM模块,对密码强度的的检查就是这个模块实现的,基本上就是个API
  2. 查询在线用户与登录日志: w, who, last, lastlog
  3. 用户之间发送消息: write, mesg, wall
  4. 发送mail:MAIL
  5. 一些用户有关的检查工具:pwck, pwconv, pwunconv, chpasswd
  6. 如何批量创建账号? passwd --stdin

本文完结!(接下来是废话了)写这篇博客花了三个星期!好吧,虽然中间有各种各样别的事情来分心。之前有人在论坛上说,《鸟哥私房菜》这本书草草看了一遍但是不想再看了,又没学到什么东西。我也有差不多类似的感受,这本书好是好,但是太详细,实践又比较少,写的比较像手册(很多书都写的像手册)。学习的过程中不要怕慢,自己多试试就好了,多记笔记。感慨一下,人家制作出来的东西,我们竟然要花这么多时间去学习,差距啊。另外Linux的东西还是要扎扎实实学,多少年过去了,这些知识都没怎么变!

 

Vagrant入门

Vagrant(流浪汉)是通过虚拟机提供的接口来控制虚拟机的一种技术。例如我们想要在多台机器上尝试一下saltstack的部署,难道要买三台VPS来尝试吗?有了vagrant,就可以在本地控制虚拟机自动化起三台机器(参考这个项目)。

谈到虚拟化技术,就不得不提Docker,Vagrant类似于Docker的boot2Docker(Docker compose),Vagrant控制虚拟机,Boot2Docker控制Docker。关于虚拟机和Docker的区别,在Docker的官网已经说的很明白了:

容器在应用层虚拟

虚拟机在物理层虚拟化

本质上,Docker是应用层的抽象,封装进程,多个应用公用内核,应用层隔离。而虚拟机则是物理层的隔离(虚拟化的内存、CPU),不同的虚拟机运行在不同的操作系统中。虚拟机更加重量,不能共用资源,但是物理层面的虚拟化有一个好处就是不依赖与宿主机,可以虚拟出任何系统。

Docker与虚拟机,类似于线程与进程。并不是说谁要取代谁,而是取决于应用场景。拿上面提到的SaltStack例子来说,显然我们要尝试的是三台机器的部署,Vagrant来控制虚拟机更合适。虽然你也可以用Docker,但是场景却不一样了,变成了三个进程。换句话说,比如你想写一个爬虫开多个线程抓取,也当然可以开多个进程。只是合适不合适的问题。

一、安装

Vagrant通过自动化空盒子虚拟机来工作,本身不会提供虚拟化,所以你需要一个后端你的虚拟机,我用的VirtualBox,Vagrant可以通过在官网下载最新的二进制来安装。

二、Box

类似Docker的commit,Vagrant使用Box的概念来控制虚拟机的系统。但是下载box一直都有网速问题……所以最好准备好一个代理。

三、VagrantFile

和Dcoker的DockerFile一样,Vagrant自动化的步骤写在了VagrantFile里面。语言是Ruby,但是Vagrant的用户大多不会Ruby,所以你不会也没关系,用到的基本上都是一些简单的赋值语句。

Vagrant的命令是以vagrant开头的,具体的命令参考--help吧。

VagrantFile的搜索顺序是(如果启动路径是/home/mitchellh/projects/foo):

Vagrant允许多个文件,会自动进行loading和merge,顺序如下(如果一步没有找到VagrantFile,就进行下一步。

  1. box的VagrantFile
  2. home目录的~/.vagrant.d,这样你可以定制一些自定义的配置,比如Vim啦啥的
  3. 项目的VagrantFile
  4. Multi-machine(如果有)
  5. Provider-specific(如果有)

新的settings会覆盖旧的。

四、VagrantFile语法

VagrantFile的内容都写在类似下面的代码块中。

其中,”2″表示语法的版本。也可以使用”1″,不过建议用最新的。VagrantFile语法使用的Ruby,但是又和Ruby不太一样,Ruby比较适合用来构建小巧的DSL。

可以将代码块看做是接受一个参数(即|config|)的回调函数。

针对虚拟机的一些配置通过config.vm来执行。例如调整硬件的配置:

比较好理解,config.vm.provider的第一个参数是提供者,这里的后端用的virtualbox,然后第二个参数就是一个回调函数,provider命令会传一个参数给回调函数。在回调函数内我们可以进行一系列的配置。例如内容,cpu等。

再举个例子,安装软件。安装软件叫做“provision”,用的是config.vm.provision命令,如下:

这里的inline可以写其他的shell脚本。我们也可以使用path来直接执行一个shell内容。

五、其他内容

vagrant还支持多虚拟机配置(有点像Docker-compose),独立的网络ip(可以直接向路由器申请,同host在同一级网络内),同步文件夹等。这些内容都可以参考官方的文档找到。额,就不详细写了,文档写的蛮好的,没什么难点。

我对照文档写了一个开wordpress的虚拟机,从一个ubuntu安装mysql,nginx,php然后配好数据库密码啥的,一个vagrant up就能看到wordpress了。github地址

其实这样还有一个好处是,让配置都透明了。下次在虚拟机上配,可以看看各个东西是怎么安装配置的,比各种教程博客上的内容还干净。

这篇文章很久之前就开了头了,今天才完成。我发现很多东西光看很不好理解,但是自己上手写写,跑一下,效果是完全不一样的。自然而然就理解了,东西还是那些东西,怎么说呢,纸上得来终觉浅吧!

另外,感觉Docker是个好东西,虚拟机太占资源了,虚拟机能做的事情,Docker基本都能做。实用还是Docker实用一些。

 

阈值,阙值和阀值

阈值

出现最早的词。也是比较规范的正统的词。

读音:yù
释义
1. 门坎:“立不中门,行不履阈”。
2. 界限:视阈。听阈。

阈不能与“阀(拼音[fá],注音:ㄈㄚˊ )”混淆。 “阀值”“霍值”是“阈值”一词常见的错误写法。(维基百科

阀值

这个词最早是没有的,后来国家的咬文嚼字工作组通过统计全国人民使用词语的习惯,发现了阀值这个词。这个词本身是错误的一个词,他的产生是由于把阈值误写成“阀值”。所以早期的阀值和阈值是一个概念。后来社科院的语言研究所在编制汉语词典的时候把阀值这个词收录了,最早的意思是指界定两种不同事物。再后来,阀值这个词除了具有界定两种不同事物这个意思外还具有标准线的意思。(来自知乎

基本上就是个误用。

阙值

这个词就有意思了。很多地方都是这么说的:

阙值主要在某些图像处理软件中又称为临界值,或者是差值,而这些说法都生动地表明了阙值的真正意义:它并不是一个单独存在的概念,而是两个像素之间的差值,而且,这个差值是个从低限到高限的范围。 我们决定阙值的目的正是要制定出一个范围,告诉软件只处理这个范围内的部分,而阙值之外的部分则不予处理以保持原样。

什么意思,比如说Photoshop要锐化图像,你告诉PS一个阙值,比如是10,那么相邻像素之间差值超过10就不会处理,差值在10之间的就做锐化处理。如果阙值设置为0,那么就锐化全图。

但有意思的是,很多地方在将“阙值”这个词的时候,和阈值混用了。上一段还在说的是阙值,下一段讲的是阈值。

总之,最正统的词还是“阈值”,比较推荐使用“临界值”,一定没有歧义。

社会在变化,语言也在变化。语言的功能就是人类之间沟通和交流,大家明白意思、没有歧义才是最主要的。

参考资料:

  1. https://www.guokr.com/question/92733/
  2. http://blog.csdn.net/proplume/article/details/77937261
 

家庭和梦想——看《寻梦环游记》

妹妹推荐我去看《寻梦环游记》这个电影,不知道为什么突然跟我说起这个,今天就去看了,看完回来,才明白她的用意。这的确是一部非常好的电影,可能是看过最好看的电影了。不愧是迪士尼出品,音乐、美术、设定和创意都和教科书一样。

本文涉及剧透,建议观看完电影之后再来阅读。

影片讲述的是,小男孩米克的太太爷爷为了音乐梦想抛弃家庭,太太奶奶不得不用做鞋的手艺抚养起整个家庭,太太奶奶为此非常恨音乐,规定以后家庭不能跟一点音乐沾边。后来这个家庭成为墨西哥有名的鞋匠家族,可能也是最不喜欢音乐的一个家庭。但是米可不喜欢做鞋子,偏偏喜欢音乐,而且幻想着成为歌王德拉库斯一样的大歌星,为全世界歌唱。米克崇拜德拉库斯,他的鸡汤金句”抓住你的时刻!”米克都铭记在心。他想偷偷背着憎恨音乐的全家人去偷歌王德拉库斯的吉他,因为音乐的诅咒,不小心在拿到吉他之后,进入到了亡灵的世界。

这个世界是这样设定的:人在死后如果被活着的人记住,就会在亡灵的世界继续存在。在每年的亡灵节,如果死人的照片如果被活人供奉,那么就可以过桥,看看活着的人。如果被遗忘了,那么就会“最终死亡”。

进入了亡灵的世界,在经历波折之后,米克竟然发现,自己的父亲是被歌王德拉库斯害死的!歌王德拉库斯和米克的父亲赫克特在表演最成功的时候,赫克特思念自己的家庭了,想要退出,却被德拉库斯毒死,德拉库斯拿走他的吉他,抢走他的歌,自己成为歌王,获得名誉。而赫克特被毒死之后,被家庭憎恨,将要被世界遗忘,面临自己的“最终死亡”。影片是一个大团圆的结局,真相公布于众,米克得到家人的祝福,死去的祖先们也原谅了赫克特。

迪士尼用老少皆宜的动画片探讨了一个非常复杂的问题:个人理想的实现和家庭之间的关系问题。本片的观点从曾曾奶奶的口中说出:“Nothing is more important then family!”家庭的意义就是给你支持,家庭是你的后盾,但也是你的责任。

我想,在决定自己要做什么这个问题上,几乎每个人都或多或少会面临与家里人的矛盾。高中毕业,很多人听家里人的决定报了志愿;大学毕业,找对象要听家里人的意见;找工作要听家里人的意见。父母也是带着自己的生活经验一起生活的,你说一家之主为了音乐放弃了家庭,把整个家庭的重担留给了一个女人,还如何让后辈再接受音乐呢?要改变父母的想法,是很困难的。《寻梦环游记》其实对这个问题讨论的很深刻了,家庭是要对孩子的想法给予理解和支持的,不要那么固执(想想其实我们也有做父母的一天),孩子呢,如果你真的有梦想,就要做好为梦想牺牲的准备。不是像歌神德拉库斯那样牺牲自己的好朋友,牺牲自己的家庭。你要吃苦啊,证明给你家里的人看,自己可以做得到,要获得他们的支持,但不要与他们为敌,不要叫他们看着,自己不需要家庭也会幸福。其实对于婚姻也是一样,家里的反对并不可怕,努力生活呀,让家庭看见,自己可以和他(她)过的很幸福啊,让爸爸妈妈祝福你们啊。

王尼玛在暴走大事件36期(Youtube观看地址)最后说:

有的家长会认为公务员就是铁饭碗,他们甚至愿意花十几万走关系,给你在公路收费站买一个月薪3000块的收费员岗位。有的家长就是认为棍棒下出孝子,他们动不动就对你施暴啊,是真心希望你将来出人头地。还有的家长就是笃信算命先生的铁齿铜牙,认定你男朋友的属相,长相,户口所在地会给你的婚姻带来不幸,都是为你好,也都是打着我是为你好这面大旗来强迫你。

但是可怜之人必有可恨之处啊,你喊着不想考公务员你想考研,谁拦得住你嘛,你自己打工赚钱给自己考研啊。你死活要娶她,谁拦得住你嘛,几十万礼金和房子你自己奋斗,不要用父母的养老金嘛。你怪你父母扔你的狗,谁拦得住你嘛,你自己租房子自己去养咯。

我是很担心你们呀,不要动不动就来求尼玛老公抱。我是不能永远坐在这里解答你的困惑的,动动脑子呀,你得反抗嘛。你父母半辈子建立起来的价值观呐,不是你顶几句嘴就可以撼动的。动动脑子,你好好商量,实在是无法沟通呢,你就靠自己嘛。证明你的选择是对的,证明你可以过得很幸福。反抗啊,知道吧,反抗啊,朋友。

魔兽争霸3的中国选手李晓峰(Sky)可以说是一个榜样了。Sky的爸爸让他做一个医生,Sky跟父亲说去打比赛,打输了回来做学医,打赢了就走自己的路。后来成了家喻户晓的传奇人物,“人皇Sky”。

那时候SKY他们都没有收入,每天只吃一顿饭,白天网吧要营业,他们只能晚上训练,睡觉的地方是网吧后面的一个小仓库,进仓库的口只有1米高,里边有一张只能睡上铺的架子床SKY每天和一个体型很大的朋友挤在那一张床上,这样的日子持续了3个月。

毛姆笔下有很多人物是一种极端,抛下自己的家庭追寻自己的梦想的。比如说《月亮与六便士》的毛姆。其实这种做法的确是很不服责任的,但是毛姆笔下的人,包括《刀锋》里面的主人公,好像都有自己的一套价值观,没有家庭的概念。可能个人理想非常崇高了吧。

另外一个影片特别感动我的地方是,人死后会快乐地生活在另一个世界,只要活着的人记住他们。唉,能这样想,算是挺大的一种安慰吧。只要我们被记住,那么也算作是一种活着。对在那个世界的人,能做的也只有是记住他们吧。

既然死去的人有世界,那么现实的世界中没有被伸张的正义,就还有时间,比如赫克特经历了那么多年无法见到自己的女儿的痛苦,最后终于让真相公布于世。

今年,社会上发生了太多让人痛心的事情。

江歌案

江歌案于2016年11月3日凌晨发生于日本东京都中野区,指法政大学研究生江歌收留闺蜜刘鑫同住,遭闺蜜前男友陈世峰跟踪上门用刀捅死的凶案。由于三人均为中国留学日本的研究生,并涉及学生住房安全的问题,凶案在留学生圈中引起回响。从案发至庭审相隔约一年,期间江歌母亲江秋莲一直为亡女追责,事件一直在互联网受关注。由于案发后刘鑫逃避与江母见面,其家人对江歌亲属冷言冷语,其漠视受害者并推卸责任的态度在中国互联网上遭到猛烈批评。一些很有影响力的微信公众号就带头对刘鑫进行“道德审判”,而疑凶陈世峰反而受到较少关注。

杭州保姆纵火案:

事情的起因是女主发现莫某偷表偷钱,想要解雇她。莫某怀恨在心,离开前还把宝宝们的金手镯等值钱物品带走。遂又想一个妙计,用“放火”的方式,掩盖偷盗的行为以表忠心,结果这场火灾,在封闭式的豪宅里成为了这个家庭最大的悲剧。最终女主和三个孩子从此离开了这个世界。(保姆纵火事实证据确凿,动机为网上流行的说法)。

以及知乎上赵先森的父亲遇车祸,肇事者却冷漠无情:《人呐 要比想象的耐艹!

杭州保姆纵火案的受害者林先生太可怜了,几乎都是《海边的曼彻斯特》现实版了,那一幕男主人说“I can’t , I just can’t”我还记忆尤新,这坎怎么过的去呢。希望他能看一下这部电影,得到一点心里的安慰,坚强的活下去吧。

以下感人的段落摘录自林先生的微博@老婆孩子在天堂

10月5日中秋节:

初识小贞那一年冬天杭州下起了雪,天好像还蒙蒙亮我就打电话给她:“下雪了下雪了,你快出来看雪”。小贞见到我就笑:“还以为什么事呢,下个雪你也大惊小怪的。”我有些难为情,嘿嘿一笑:“这可是我第一次看见雪,福建从来没下过雪的。”后来我们在雪地里牵着手走了好久好久,漫天飞雪和小贞低头抿笑的样子在那一刻,在我的心里定格了。

婚后的小贞热爱生活,也很有仪式感,每逢佳节都要把家里布置一番,圣诞节会有圣诞树,万圣节会有南瓜灯,春节就会挂上大红灯笼,去年中秋家里到处都摆放的鲜花盆景,芳香四溢。

我爱她的婉约也喜欢她的恬静。她好像是诗词中的颜如玉,清丽脱俗,对生活有自己的理解,不逐流,不强求。闲暇的时候喜欢看书、弹古筝、插花、听音乐。她每天早上六点起床常常去阳台做瑜伽练气功,或者跟我们一起去楼下做运动,傍晚我们一家五口常常在钱塘江边跑步。她的闺蜜都说她的生活状态不像是这个浮躁时代的人。

小贞的生活永远围绕着我跟孩子们。三个聪明乖巧的孩子是她内心最大的成就,阳阳更是她的骄傲,所有见到阳阳的人都会夸赞她:“你怎么那么漂亮呀?”她都会不好意思的笑一笑。小贞经常跟我说:“我们再生一个吧,下一个肯定是女儿。”我说不要了,生了三个孩子我都很心疼了,可不想她再辛苦,而且只要阳阳一个漂亮就好了。

记忆中十多年来我跟小贞从来没有单独旅游过,以前我们经常带着孩子们去万象城吃饭,吃完饭去书店,孩子们每人挑一本他们最喜欢的书,找一个角落安静的看书。柽一照看弟弟妹妹,我们或逛街或看电影,享受片刻的二人世界,再回去接他们。

有时候晚上也会让孩子们自己在家里,平时他们都睡在各自的床上,这个时候就谈起条件来了,三个人要睡在一张床上。等我们回到家,就看见三个孩子睡得东倒西歪,小贞会给他们盖好被。再点上自己调配的精油香薰,我们窝在床上追剧,看书。

有一次她说:“老公,如果有那么一天,一定要我先走,你会比我坚强,但我会受不了。”我说:“那下辈子我们还做夫妻,下辈子再遇见,我们约一个暗号(你怎么也在这里)。”她说:“我一定会先认出你。”

已经想不起当时为什么会有这样一段对话,或许一切都是命中注定。零五年我一人只身来到杭州,之后与小贞相识相爱结婚生子,一生中最幸福的日子都是与她一起。十二年,一个轮回。仿佛时光机把我拖拽回去,一切回原点,却没有抽离走记忆。

3月14日是她的生日,那一天我给她了一个惊喜。我回到家跟她说:“走,给你买生日礼物去。”车路过了好几个商场也没停,她以为我故意在逗她还假装生气:“林生斌,不是要去商场买单反吗?要去哪里呀?”最后车子在4s店停下我说:“单反随时都可以买,送你车要不要啊?”她一下子就笑了“要,不要白不要。”新车订了三个月才到,6月18日提的车,她只开了三天。

出事的前不久我还给她剪了发,镜子前坐好,我们互相调侃。她说:“我可是你唯一的vip。”我说:“我可是有四个vip,但你是vvip。”她说,最喜欢我给她剪头发,有一种古代丈夫给妻子画眉的幸福感。

对小贞的爱和感激,愧疚与自责都会伴随我一生,不会忘更不会淡。对她的亏欠和承诺,只有等来世再补。下辈子在某个街头,是谁先跟对方说:“你怎么也在这里?” 她说是她,我想是我。

明月圆,人残缺。中秋过去了,我把它当成了普通的一天,也没有太难熬。每一天都是普通的一天,节日而已,有人欢庆才是节

10月26日 阳阳生祭:

每年的十月下旬都是我们全家最热闹的时候,也是我最开心的一段日子。22日阳阳生日,24日潼潼生日,25日结婚纪念日。

我有意错过这几天,可发现根本忘不掉,越想忘记越深刻。不知道怎么熬过的那三个日子,一眨眼房间都是灰色的,再睁开,就像有一大面玻璃爆裂碎了一地,阳光再次照进房间,照进现实。

22日是阳阳的,生祭。逝去的人的生日叫生祭,往年我都是给她过生日的。现在,日子记得,只能记得。去年阳阳乌黑的长发戴着生日帽对着蜡烛默默许下的心愿是想快快长大,这是她偷偷告诉我的。

怀阳阳的时候小贞反应跟怀柽一时差不多,我们以为也是个男孩,柽一以前的名字是林睿哲,老二就打算叫林睿阳,所以后来她的小名就是阳阳。当时准备的所有衣物都是男孩子的,医生从产房出来告知是女儿的时候,我完全懵了毫无准备。等我反应过来的时候内心一阵狂喜。

我一直想要个女儿,都说女儿是爸爸上辈子的情人,在见到阳阳第一面时我就深有体会,视线都不舍得离开她,医生都说哪有小孩子刚出生就这么漂亮的,眼睛睁的又大又圆,睫毛也很长,鼻子高高的。那时候喂奶换尿布我都要抢着做,半夜也会起床帮忙,这些事情在生柽一那会儿虽然也做,但是对女儿我会更主动的想要去做。我太爱她。太爱太爱。

阳阳和柽一小时候长得非常像,她又长得比较高,很多人误以为他们是龙凤胎,有一次在车库还闹了个笑话。我们先把柽一抱上楼,接着把阳阳抱下来,有邻居看见就问:诶?你们怎么刚把孩子抱上去又抱下来了?”他俩在一起的时候很多人都以为她是姐姐,阳阳就很得意的说:“爸爸,他们都说我才是姐姐,哈哈,哥哥,以后你要叫我姐姐了。”

阳阳的老师常夸她组织能力强,平时在学校里像个小班长一样,帮老师很多忙。她也非常会照顾比她小的孩子,经常教弟弟画画看书,家里如果有小表妹小朋友做客,阳阳就会把自己漂亮衣服拿出来给她们打扮一番,教她们跳舞和她们一起做游戏。

她喜欢跳舞和画画,每次接她放学的时候都舍不得走,总是最后一个离开,总是让我再等她一下:“爸爸你再等等我,马上就画好了,不能半途而废。”阳阳的很多优点都是小贞的教育成果。她很注重课外兴趣以及性格方面的培养,几乎每个周末都带他们三个去看画展、听音乐会、逛书店,带他们陶冶艺术情操培养审美观念。只要有时间我就会陪着他们一起去,住一个晚上再回来。

平时小贞比较注意孩子饮食,很少在家里放零食,冰淇淋也不让吃,我经常带着她出去开小灶。下午三点左右上完舞蹈课我就陪她去喝下午茶,带她吃爱吃的薯条,爱喝的饮料。每次她都美滋滋的跟我说:“爸爸这是我们俩的小秘密哦。”

阳阳也是我们童装的小模特,拍画册她都是表现最好的那个,动作表情也自然,总是拍的最快的。结束后她都会给她算工资,那时候她就最开心。总是问我:“爸爸,什么时候再拍画册呀,赚钱还真辛苦呀,等我攒多一点要给妈妈买漂亮衣服的。”

我以前时常想阳阳长大后婷婷玉立的样子,一定是善良美丽,开朗幽默,落落大方。以前每次想到阳阳长大会离开我的怀抱,跟她的男朋友步入婚礼殿堂我就强制自己不再往下想。那时候我还幻想过在什么样的场景下什么样的心境把阳阳的手搭在她未来老公的手上。

阳阳,爸爸的心都要疼死了。爸爸不忍心也开不了口祝你生日快乐。你已经不在了。你带给了爸爸太多太多的快乐太多太多的幸福,可是还不够,再多都不够。再多都不够。

我的阳阳生于2009年10月22日,还未满八周岁。那天我没有祝她生日快乐。阳阳,生祭。祝爸爸坚强吧。

11月28日:

一直想让自己坚强,今天我真的没办法再坚强下去。一直以来的克制隐忍,今天我真的我崩溃了,我无法再欺骗我自己,你们真的离开我了。

柽一,你是爸爸妈妈心中的男子汉。一直帮忙爸爸妈妈照顾弟弟妹妹,你一直是爸爸的骄傲,爸爸很想很想你。

阳阳,你是爸爸上辈子的小情人。爸爸前天梦到你了,你微笑的用英语和朋友们介绍了自己。你长高了很多,爸爸都抱不动了,你知道的,爸爸最宠爱的是你。

潼潼,你陪爸爸的时间最短。爸爸很想很想多陪陪你。你很聪明,很懂事,你要听妈妈哥哥姐姐的话。大家都很宠爱你

小贞,还有很长很长的路我们没有走完,太多太多的诺言我们没有兑现,约好白发苍苍,一起到老,可惜你不能陪我一起走下去了。

我们相处了十二年,一个轮回。我相信,下一个轮回,我们还会再遇见。我给你和孩子手背上都做了记号,遇见的时候,我会认得你和孩子,你们也记得我。我们还是一家人,永永远远的一家人。

希望正义得到伸张。


2021年07月13日更新:

4 年之后,林生斌的人设竟然崩塌,他在微博上卖惨营销的苦情男形象,或是代笔。以消费亡妻卖惨进行营销,诈捐,从中获利千万。并且有纵火案事发前就已经出轨的嫌疑。

读者请自行判断。