意外移动了“/tmp”——替换不会保留

意外移动了“/tmp”——替换不会保留

sudo mv /tmp /var/lib/apt/lists没有意识到它会移动整个文件夹而不仅仅是内容。

我从此以后就这么做了(正如意外删除了 tmp 文件夹

sudo mkdir -m 1777 /tmp

启动时,但过了一会儿它又消失了。我该怎么办?我该如何调试?

似乎/tmp被重命名为/snapshot.0(或者如果其他快照已经存在,则使用更高的索引)。

重启不能解决问题。但是关机时没有问题,启动时会有/tmp新的。然而在 4 分钟内它被重命名为另一个快照。/tmp

没有 /tmp 会发生什么:

  • Bash 中有时没有制表符补全
  • chromium-browser 和 system monitor 等程序无法启动
  • apt-get 似乎也依赖 /tmp

我目前sudo mv /snapshot.0 /tmp每当/tmp消失时都会执行。

实验:

我启动计算机(正如我们将看到的,/tmp它仍然存在,显然它在重启后仍然存在)并打开一个终端,在其中执行:

$ while true; do 
   t=$(date +%H:%M:%S);      #timestamp as hour minute seconds
   date;ls -lt / | head -3;  print out date and most recent folders in /
   ls -l /tmp        > ~/Desktop/ls.tmp.log.${t}; 
   ls -l /snapshot.0 > ~/Desktop/ls.snap.log.${t}; 
   sleep 60; 
done;

我没做其他事!登录终端:

Di 23. Jun 19:44:12 CEST 2020
total 2097264
drwxrwxrwt  18 root root       4096 Jun 23 19:44 tmp
drwxr-xr-x  34 root root       1000 Jun 23 19:42 run
ls: cannot access '/snapshot.0': No such file or directory
Di 23. Jun 19:45:12 CEST 2020
total 2097264
drwxrwxrwt  18 root root       4096 Jun 23 19:44 tmp
dr-xr-xr-x  13 root root          0 Jun 23 19:44 sys
ls: cannot access '/snapshot.0': No such file or directory
Di 23. Jun 19:46:12 CEST 2020
total 2097264
drwxrwxrwt  18 root root       4096 Jun 23 19:44 tmp
dr-xr-xr-x  13 root root          0 Jun 23 19:44 sys
ls: cannot access '/snapshot.0': No such file or directory
Di 23. Jun 19:47:12 CEST 2020
total 2097264
drwxrwxrwt  18 root root       4096 Jun 23 19:44 tmp
dr-xr-xr-x  13 root root          0 Jun 23 19:44 sys
ls: cannot access '/snapshot.0': No such file or directory
Di 23. Jun 19:48:12 CEST 2020
total 2097264
drwxrwxrwt  18 root root       4096 Jun 23 19:44 tmp
dr-xr-xr-x  13 root root          0 Jun 23 19:44 sys
ls: cannot access '/snapshot.0': No such file or directory
Di 23. Jun 19:49:13 CEST 2020
total 2097264
drwxrwxrwt  18 root root       4096 Jun 23 19:48 snapshot.0
dr-xr-xr-x  13 root root          0 Jun 23 19:44 sys
ls: cannot access '/tmp': No such file or directory

因此在 5 分钟内 /tmp 被重命名为 /snapshot.0。

ls.tmp.log.19:4[4-8]:12 之间没有区别,ls.tmp.log.19:48:12和之间也没有区别,ls.snap.log.19:49:13所以它不可能是 的内容/tmp

进步:

当我希望找到一个解决方案,让一切恢复原样(无需重新安装系统)时,Giorgos Saridakis'建议符号链接确实很有帮助。但是我仍然无法启动系统监视器:

$ gnome-system-monitor 
cannot create temporary directory for the root file system: Permission denied

尽管设置了所有权限:

$ ls -lt /
total 2097264
drwxrwxrwt   8 root root       4096 Jun 27 15:21 snapshot.0
-rw-r--r--   1 root root          0 Jun 27 15:10 lifesign
...
lrwxrwxrwx   1 root root         11 Jun 23 22:12 tmp -> /snapshot.0

我想我终究还是得写一个恶魔……

我写了一个脚本:

#!/bin/bash
while true;
do
    if [ ! -d "/tmp" ];
    then mv /snapshot.0  /tmp 2>> /home/t/tmp.rename.bg.err;
     date >> /home/t/tmp.rename.bg.log;
    fi;
    sleep 10;
done

执行

sudo bash tmp.rename.sh &

登录后。这不是理想的情况,但我还不必开始编写守护进程。

答案1

看来您偶然发现了内核的一个持久部分,我相信无法通过正确的方式解决这个问题。

如果不想重新安装整个系统,为什么不尝试从 /snapshot.0 到 /tmp 创建一个符号(或硬)链接:

sudo ln -s /snapshot.0 /tmp 

如果这不起作用,我会制作一个小守护进程来不断检查 /tmp 是否存在,如果找不到则创建它(可能具有锁定权限)。

困难的情况,我深表同情:)

答案2

只需在启动后删除创建的目录,然后创建一个新的 tmp 目录,如下所示:

sudo mkdir -m 1777 /tmp
chown root:root /tmp

这里的-m称为目录创建模式,将新创建的目录的文件权限位设置为指定的模式值。

执行上述命令后,现在运行以下命令来检查目录的权限。

ls -ld /tmp

它看起来应该是这样的

截屏

相关内容