如果我无法恢复此文件,我无法解释这将是多么令人沮丧。老实说,我觉得没有,但我需要了解到底发生了什么,所以我可以采取预防措施。基本上,我正在制作一个简单的OOP项目,涉及EMACS中的虚假银行账户,并且在编译期间,.cpp文件包含所有类代码并且消失。
以下是消失文件之前和之后的终端命令:
lin114-11:25% ls
BankAccount.cpp BankAccount.h BankAccount.h~ main.cpp
lin114-11:26% emacs &
[1] 23359
lin114-11:27% g++ -o BankAccount.cpp main.cpp
/tmp/ccEXMM25.o: In function `main':
main.cpp:(.text+0x67): undefined reference to `CheckingAccount::driver()'
main.cpp:(.text+0x78): undefined reference to `CheckingAccount::~CheckingAccount()'
main.cpp:(.text+0xa1): undefined reference to `CheckingAccount::~CheckingAccount()'
main.cpp:(.text+0xcc): undefined reference to `CheckingAccount::~CheckingAccount()'
/tmp/ccEXMM25.o: In function `CheckingAccount::CheckingAccount(double, int,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
main.cpp:(.text._ZN15CheckingAccountC2EdiSs[_ZN15CheckingAccountC5EdiSs]+0x59):
undefined reference to `vtable for CheckingAccount'
collect2: ld returned 1 exit status
lin114-11:28% ls
BankAccount.h BankAccount.h~ main.cpp
正如您所看到的,BankAccount.cpp刚刚启动并在编译后消失。发生了什么事,无论如何要恢复文件?
答案 0 :(得分:16)
执行此操作时:
g++ -o BankAccount.cpp main.cpp
您告诉g++
编译main.cpp
,并将输出写入名为BankAccount.cpp
的文件。所以你用可执行文件覆盖你的源文件。
答案 1 :(得分:2)
根据文件系统的运行方式,仍有(苗条,微小)机会检索部分(或全部)......:
df . #to see which /dev/something partition is holding that current directory
dd if='/dev/something' of=- | cat -v | grep -n 'a_specific_string' 2>/dev/null | less
并且是非常耐心的患者 a_specific_string是一个知道的字符串,在该文件中(如果可能的话,可能在其他任何地方,缩小搜索范围)。
然后,一旦你得到一些行号,你就可以挖掘(注意,如果你的文件超过inode的长度,那么文件,如果仍然在某个地方,可能会被分割在磁盘分区的几个不同区域之间)是完全可能的。 )
然后您可以使用行号来检索整个文件
例如,如果你只在第nnnn行发布它:
dd if='/dev/something' of='-' | cat -v | awk ' ( (NR > (nnnn - 100) ) && (NR < (nnnn+100) ) { print ; }'
(在匹配线后最多100行之前打印99行)
(如果可以的话,更密切地调整它,具体取决于您查找的行及其在文件中的位置)