systemd-tmpfiles-clean.service 会删这种东西么 0.0
离线
看描述挺像是 systemd-tmpfiles 干的。不过我检查了一下,systemd-216/src/tmpfiles/tmpfiles.c 第 310 行已经对挂载点作了处理,systemd-tmpfiles 不会清理挂载点内的文件。不过这是 systemd 216 的行为,不知道之前的版本怎样。
离线
cd /tmp
-------------------------------------------------------------------------
touch --date=1999-09-09 -a -m test_1999-09-09
修改系统时间为1999年或者比今年更早几年的时间
touch test_1999-09-09
stat test_1999-09-09 查看时间
-------------------------------------------------------------------------
同上方法创建另一个文件,仅修改 sudo chown root:root 新文件
运行 systemd-tmpfiles --clean
离线
可以做个测试,我准备拿个u盘来测试,用上面的方法
一定要修改 atime, ctime, mtime, 目前修改ctime只有修改系统时间的办法
tmpfile.c的代码大致看了一下遇到s.st_uid==0的时候会跳过,所以像root属主的文件是会被保留的
目前像用户挂上去的u盘之类的,如果使用 pcmanfm-qt之类的自动挂载会被挂到 /run下面,/run其实也是个tmpfs不过创建的方式不一样
$ mount| grep run
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=800064k,mode=700,uid=1000,gid=1000)
像这种会被保护,查看/run下的目录属主基本上都是root
离线
/etc/tmpfiles.d/tmpdir.conf 文件的内容
#Type Path Mode UID GID Age Argument
#d /run/user 0755 root root 10d -
#L /tmp/foobar - - - - /dev/null
d /tmp/debian 0755 arch arch 10d -
d /tmp/mmc 0755 arch arch 10d -
d /tmp/iso 0755 arch arch 10d -
d /tmp/arch64 0755 arch arch 10d -
d /tmp/android 0755 arch arch 10d -
我的debian挂在 /tmp/debian目录下
离线
测试结果出来了
挂了一个u盘,文件是跟我debian分区的一样都是ext4
修改系统时间,创建几个文件时间是很早前的,用stat来确认所有的atime,mtime, ctime (ctime非常关键)
然后运行systemd-tmpfile --clean ,其实systemd-tmpfiles-clean.service 也就是被 那个timer定时去执行一下,默认是15分钟执行一次
结果是我的u盘和我的debian挂载分区上的旧文件全部给干掉,竟然把我故意在/tmp/debian目录下创建属主为root的临时文件也给干掉了
离线
通过代码发现会去解析好几个目录下的配置文件,其中/etc/tmpfiles.d就是其中一个
测试发现跟/etc/tmpfiles.d/tmpdir.conf配置关系很大
我将/etc/tmpfiles.d/tmpdir.conf中的 /tmp/mmc目录给注释了,然后在u盘上创建很老的文件,挂在/tmp/mmc下,此时执行systemd-tmpfile --clean是不会清掉旧文件的
当将 d /tmp/mmc 0755 arch arch 10d - 开启后,再运行清理时,文件就消失了
之前创建/etc/tmpfiles.d/tmpdir.conf 是图个方便,开起自动创建tmp目录,看来还得换回rc.local的旧方式才行 rc-locale.service
离线
通过代码发现会去解析好几个目录下的配置文件,其中/etc/tmpfiles.d就是其中一个
测试发现跟/etc/tmpfiles.d/tmpdir.conf配置关系很大
我将/etc/tmpfiles.d/tmpdir.conf中的 /tmp/mmc目录给注释了,然后在u盘上创建很老的文件,挂在/tmp/mmc下,此时执行systemd-tmpfile --clean是不会清掉旧文件的
当将 d /tmp/mmc 0755 arch arch 10d - 开启后,再运行清理时,文件就消失了之前创建/etc/tmpfiles.d/tmpdir.conf 是图个方便,开起自动创建tmp目录,看来还得换回rc.local的旧方式才行 rc-locale.service
你为什么要自己写那么个 /etc/tmpfiles.d/tmpdir.conf 呀。是想自动建立那几个目录吗?那你别写 Age 选项呀。那个就是告诉 systemd 去删掉比 Age 值老的文件的。
离线
就是根据Age 来比较,之前抄的/run的一个配置来了,就是想自动创建/tmp/下的目录,现在改成/etc/rc.local老方式了
man tmpfiles.d 查看Age里面有提到,不应该设置时间,弄成 - 就可以避免这个问题
还是比较粗心了
离线