奇怪的问题,但情况是这样的。我在 Ubuntu 16.04 上的 VLC 中播放视频。我在播放视频时不小心删除了视频。我仍然可以移动到 VLC 中视频流的任意位置并播放它,但物理文件已从磁盘中删除。
有办法恢复这个缓存吗?我仍然打开着 VLC。
根据评论编辑:
lsof | grep vlc | grep dvgrab
返回
vlc 2671 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2674 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2676 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2677 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2686 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2689 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2692 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2694 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2695 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2696 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2697 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2698 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2699 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
vlc 2671 2700 peter 31r REG 0,40 1048560000 45 /mnt/server/Vid projects/2017/01 January/22 Home/dvgrab-003.dv (deleted)
答案1
正如@ridgy 在评论中指出的那样:
只要文件正在使用,它就不会真正被删除,而是从目录中移除。文件的 inode 仍在使用中。您可以通过发出 来查找 inode 编号
lsof | grep vlc
;这将显示一个没有名称的文件,并显示消息(已删除)。inode 编号是该编号前面的数字。然后,您可以使用 将文件重新链接到目录ln <inode#> <filename>
。
后来:
inode 是 45(文件路径前面的数字)。但我刚刚意识到 ln 不适用于 inode(无法使其工作..)。但正如您所看到的,该文件由 vlc 使用,文件描述符 # 31(参见 REG 之前的 31r),您可以执行
cat /proc/2671/fd/31 > file_to_save
,这会将内容复制到新文件。2671 是 vlc 的进程号(vlc 后面的数字)。
确实,跑步
cat /proc/2671/fd/31 > file_to_save
抓取文件并将其存储到我的硬盘中。谢谢!