我去了商店,回来后发现我忘了给笔记本电脑插上电源,它因电池电量不足而死机了。当我重新启动时,我惊讶地发现我的 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
我偶尔会遇到这种情况,通常我会删除该文件,因为损坏的文件通常很难甚至不可能恢复。
问题是数据似乎已损坏。这解释了当您期望可读文本时出现随机十六进制代码、Unicode 字符等的原因。此类数据损坏通常是无法恢复的,因此除非您真的需要您运行过的完整命令历史记录,否则您可能只想硬着头皮删除文件以便重新开始。
如果愿意,您还可以重命名文件以保留内容,但数据仍然损坏并且可能无法恢复。
答案2
尝试
tr < {original_file} -d '\000' > {backupfile}
来源:https://askubuntu.com/a/738854/600169
此外,zsh 似乎比 bash 更擅长处理这个问题。它通常只会损坏一行。我找不到 zsh 中损坏较少的具体来源,但它的历史记录功能总体上确实更好。