我在 /usr/local 目录中意外发出了“sudo rm -rfd *”。我该怎么做才能至少让它恢复到全新安装(Linux Mint 15)的状态?
答案1
永远不要尝试恢复系统文件
拜托,千万不要推荐对系统文件进行文件恢复!可以尝试对更多文件进行文件恢复独特的文件就像您自己编写的文本一样。
恢复系统文件会带来麻烦。
第一种解决方案
对于您的系统,只需重新安装即可。您无需在安装过程中擦除/格式化任何内容:所有缺失的内容都将被替换。您只需照常升级即可。
但这不是必需的,因为/usr/local
您的系统上肯定是空的。
第二种解决方案
通常,该文件夹中几乎没有任何内容。如果你知道你已在其中安装了某些内容,只需重新安装即可。
最后,一些软件包可能将一些文件放入其中。只需打开终端并检查以下命令是否不输出任何内容:
dpkg --get-selections | cut -f 1 | xargs dpkg -L | grep /usr/local
解释
它的作用非常简单:
dpkg --get-selections
将以以下格式输出系统上安装的软件包列表:
package_name installed
但我们只想要package_name
每一行:
| cut -f 1
|
告诉bash
(在终端中运行的程序)前一个命令的输出不应该显示出来,而应该通过管道传输到下一个程序中(这里cut
)。
cut
,顾名思义,它将把每一行切成单词,并且只保留-f 1
将显示的第一个字段()。
总结,
dpkg --get-selections | cut -f 1
应该返回系统上安装的软件包列表。
现在我们可以通过管道将该列表传递给它,xargs
其作用类似于“对列表中的每个元素执行...”。
这里,
xargs dpkg -L
将执行:
dpkg -L package1
dpkg -L package2
dpkg -L package3
...
对于通过管道指定的每个包名称。
dpkg -L mypackage
列出名为“mypackage”的包中包含的文件。
现在,我们只需要获取该文件列表并检查某个包是否确实将文件放入了/usr/local
。我们使用 来执行此操作,grep
这将过滤掉任何输出不是含有/usr/local
。
因此,如果我们按顺序排列,首先我们得到已安装包的列表,然后我们格式化这个列表以仅保留包名称,然后我们列出包使用的安装文件夹,然后我们过滤它以仅保留其中的内容/usr/local
。
如果命令没有返回任何内容,那么您不必担心。
图形用户界面替代方案
据我所知,没有 GUI 替代品。
答案2
没有必要重新安装操作系统,因为操作系统不应该在/usr/local
或中存储任何内容/opt
(这两个大致相同)。
但是,您自己编译的任何程序或通过包管理器或端口树安装的任何程序都可能最终位于 /usr/local/ 中。
因此:
- 检查您的备份。这些文件夹中有什么。卸载并重新安装这些程序。
- 或者,如果没有备份,请列出所有已安装的软件包,然后将其全部卸载并重新安装。
(使用 apt-get 或 dpkg -l 列出软件包)。