如何删除损坏的 glibc 安装

How to remove a broken installation of glibc

我刚刚尝试将 glibc 版本 2.19 安装到我的计算机,如下所示:

1) 我用

克隆了 glibc git 仓库
$ cd ~
$ git clone git://sourceware.org/git/glibc.git

2) 我用

检查了版本 2.19
$ git co tags/glibc-2.19

3) 我在我的主目录中创建了一个目录 objdir,并在那里构建了安装

$ cd ~/objdir
$ ~/glibc/configure --prefix=$HOME
$ make

4) 我用

测试了 make
$ make check

这给了我一个错误,但是我通过 Google 搜索找到的一些网页告诉我这个特殊的错误不是什么大问题。 (我希望我能记住错误和网页是什么,但我不能,而且我是使用我现在无法访问的计算机找到该网页的,所以它不在我现在输入的网络历史记录中.)

5) 我试图用

安装 glibc
$ make install

这就是让我疯狂的地方。安装中途失败,现在使用损坏的 glibc,我的用户帐户完全停止工作。

幸运的是,我的系统管理员能够移动我的 .bashrc——它指向我的主目录下损坏的 glibc——并将我恢复为默认 .bashrc .这样我就可以再次登录我的帐户并执行操作了。

我的问题是,我应该怎么做才能完全删除驻留在我的主目录下的损坏的 glibc 安装?

what should I do to completely remove the broken installation of glibc that resides under my home directory

cd && ls -lrt

将显示已安装的文件和目录。可能您有 include/lib/(或 lib64/)、etc/,可能还有更多。只需删除这些目录,就可以了。

您可能还想阅读 this answer

更新:

that command shows me all the directories in my home directory, of which there are many.

它按时间顺序列出它们(最新的最后),所以最近修改的所有文件都在底部。这些是您要删除的。

given that i've installed things besides glibc to my home directory

我希望您现在意识到将 任何东西 安装到您的主目录是一个坏主意(TM)。

假设您在 glibc 安装失败后没有安装任何东西,并且您的 glibc 安装失败发生在最近 3 天内,以下命令可能会产生令人满意的结果:

find include lib etc -mtime -3 | egrep -v '^(include|etc|lib)$' |
  tee /tmp/to-delete

现在检查 /tmp/to-delete 是否有任何您不想删除的文件(如果我的假设成立,则不应有任何此类文件)。

最后,删除它们:

cat /tmp/to-delete | xargs rm -rf 

更新2:

unfortunately, i don't think your "last 3 days" heuristic is going to work here. i installed a bunch of C libraries yesterday -- MPFC, GMP, MPC, and glibc -- and it's not at all clear to me which files are part of glibc and not the others.

那好吧。您要做的是找到属于 glibc 安装一部分的文件列表。你可以这样做:

cd glibc-2.19-src; mkdir build;
cd build; ../configure --prefix `pwd`/../install
make -j12 all && make install

您现在在 glibc-2.19-src/install 中有一个 "cleanly installed" 目录。您可以在那里获得文件列表:

cd ../install; find . -type f > /tmp/to-delete

您终于准备好清理了:

cd; cat /tmp/to-delete | xargs rm -f

这可能仍然会留下一些空目录,但这通常没什么大不了的。如果你也想删除它们:

cd ~/glibc-2.19-src/install
find . -type d > /tmp/dirs-to-delete
cd; cat /tmp/dirs-to-delete | xargs rm 2>/dev/null

(最后一条命令将无法删除任何非空目录,这正是您想要的。)