我用的某台服务器是Ubuntu14.04,现在我在里面误删了两个文件夹,导致除了一下问题。
按照正常的思路,想找回收站,从回收站中再mv回来。但是网上转了一圈,似乎都说是在 /.Trash或者/.local/xxx 这样的目录下,但是我这没有这些目录啊,貌似这是桌面版的吧?
所以请问有没有什么简单的方法能恢复回来的?
PHP中文网2017-04-17 14:36:05
linux 上
請不要刪東西
請不要刪東西
請不要刪東西
修改檔案前先備份:
cp yourfile{,`date +"%Y%m%d"`}
如果要刪除檔案:
mv yourfile{,bak}
可刪的檔案只有一種: 無用的日誌檔案
可刪的檔案只有一種: 無用的日誌檔案
可刪的檔案只有一種: 無用的日誌檔案
巴扎黑2017-04-17 14:36:05
方法1:
當進程打開了某個檔案時,只要該進程保持打開該檔案,即使將其刪除,它依然存在於磁碟中.
這意味著,進程並不知道檔案已經被刪除,它仍然可以向打開該檔案時提供給它的檔案描述符進行讀取和寫入.
除了該進程之外,這個檔案是不可見的,因為已經刪除了其對應的目錄索引節點.
查看已刪除但仍開啟的檔案:
sudo lsof|grep deleted 例如返回:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 3000 www-data 2w REG 251,0 15284 287237 /var/log/apache2/error.log.1 (deleted)
apache2 3000 www-data 7w REG 251,0 576513 287219 /var/log/apache2/access.log.1 (deleted)
其中3000是進程PID,其中2w中的2就是已經被刪除的檔案的error.log.1的檔案描述符(FD).
例如執行下面命令可見:
ls -l /proc/3000/fd/2
l-wx------ 1 root root 64 2016-03-21 08:30 /proc/3000/fd/2 -> /var/log/apache2/error.log.1 (deleted)
這個檔案可以嘗試使用檔案描述子(fd)還原:
sudo cp -L /proc/3000/fd/2 ./error.log.1
sudo cp -L /proc/3000/fd/7 ./access.log.1
方法2:
使用rm需要格外小心.
在不小心刪除後,最好及時卸載分區,避免資料覆蓋寫入.
如果必須掛載,可以使用唯讀模式.
extundelete可用於還原ext3或ext4分割區上rm刪除的檔案.
http://extundelete.sourceforge.net/
http://www.gnutoolbox.com/extundelete/
基于文件恢复:
extundelete /dev/sdb1 --restore-files /etc/passwd
基于目录恢复:
extundelete /dev/sdb1 --restore-directory /var/lib/mysql
基于磁盘恢复:
extundelete /dev/sdb1 --restore-all