断电后 Bash 历史记录损坏

断电后 Bash 历史记录损坏

我去了商店,回来后发现我忘了给笔记本电脑插上电源,它因电池电量不足而死机了。当我重新启动时,我惊讶地发现我的 bash 历史记录不再包含我的终端命令,而是如下所示:

don@don-Dell-PowerbookBook-777w:~$ �$6:�P!^G����^^B)A|E1����t^E���@=(�|0H�^N�s����+�����C�Ώ)p��s�  pn�ǡ!�ǝ\��"^H�n^M^Rs��$u�^[���^S����![�0^R&^R���@��T���v��8^T^N��^ZJ�O�*�Y$:�A�^[6��jٸ�EIl>��^L�ژ���^^^Xw^T^[��/^Q^Aw       ߨ~�>���s"�6d��^\�U%�a^M/p^P��iޠ��\^M^Z^9��^_l�]*�Ų���J͜��^UK�u�  ����N^S���^G5^B^D�p^^^E��4�&�Qi�^U^?�T^T��- 

当我运行的时候gedit .bash_history,我得到了这个:

打开文件“/home/dave/.bash_history”时出现问题。

您打开的文件包含一些无效字符。如果继续编辑此文件,可能会损坏此文档。您也可以选择其他字符编码,然后重试。

字符编码:当前区域设置 (UTF-8)

进而:

\D3Q\F6 \98ڵ\9B\A8a\9B\97\C7׬\A2\B5\F7\B0,.\B4\FD\E4N\A9͈\FEK\EF蓪*,q\D5HbI\C6!iB\BC\D33\A7\C5\EC\E3\\AE|\D1<%Hx9a\FEI\BE\93f\84\92\C1\AF\B7Ed,6DI<\B5\F9* t\00\DB]PZ\AE\EB\D2\A1e\8C\D4\F8\B4'\8A\CD\00F-\89\CBs\FD;k\CBUv\E1\F8߱y\D0;\BB\9E ůLteE\94\9B\D1\00\E7\CF)\\E51,\9C\81}\E6\96=\C7l\D8v.#s\CE\D5\C2%2\8EZ\93\93<\DD'oIKl.\CC81~\80\DC\F9\A5ȡ@6\E0\DA\F8\92j%\D2;: b(\BE\F5Dv\86\CD"\A0vCc\EC\A2\F8oP\88\CEG\ED~y\866\B9\AF\BF\BF\DC}\8F\94\CF\DB\C9\D6\DC\D9\E7\E4\DC-\94H\B3\A7\F3\DF\EB\9DS+\E5\C8 \81p\8FK\E2\88h\E7f \A8\809\B4 \FBo}&aa\FA;\B7q\E8\8D\DE\B5 \B5\DE{\EB\A3\F9D\BB\E8 \80\A0\FA\F2\F6\A2\BB\C6\D1\CEaN?*H8\91\BD\B83y\FF\BA)\DDl)\87vn\97D\EF\EEOS\F5\FB\B0U\83\94\E7D\E0:\A3R\94\EC\B9O\D9wr^D,Q\8B2\C1\9A;l\9Db\86@C*$\D4=\B7v\86ۉ\85\B5\D0g\85 \C0{Cb\EA;\ACK\87q\FE\BA\83\B7\86\C0\DF

数百行代码。有什么办法可以挽救吗?还是我应该咬紧牙关,将其全部删除?

答案1

这个问题有答案列出了在根分区上执行一致性检查的各种方法。如果您提到的重新启动没有执行一致性检查,则fsck在根分区上运行可能是有意义的。fsck完成后(无论是在重新启动期间已经发生,还是您明确执行),您的元数据将保持一致,但不能保证文件内容正确。输出日志fsck可能会提供有关损坏程度的一些见解。

您的 bash 历史文件的特定问题看起来错误地包含属于完全不同文件的数据。最好的情况可能是块已分配给历史文件,但在断电之前未写入,在这种情况下,当前文件内容可能只是在分配给您的 bash 历史文件之前释放的块所包含的任何内容。对这些文件内容的更悲观的解释是元数据已损坏(在这种情况下fsck可能是行动方案)。您可能需要留意可能受到影响的任何其他文件。在最好的情况下,只有修改时间足够近的文件才会有问题。

至于挽救 bash 历史记录的剩余部分,一种简单的方法可能是将其提供给命令strings(这应该会过滤掉大部分看起来像二进制内容的内容)。如果这样做,覆盖--bytes( -n) 的默认值可能是有意义的,使其更接近可能的最小命令长度。根据您的 bash 历史记录文件的大小以及其虚假内容的根本原因,那里可能存储了任何实际命令,也可能没有。

重命名您的 bash 历史文件而不是立即删除它可能更有意义,这样您可以推迟挽救工作,并且拥有不会对 bash 的正常运行造成麻烦的 bash 历史记录。

相关内容