use*_*684 173 command-line dpkg rm
只是为了好玩,我想我会在运行 Raspbian 的 Raspberry Pi 上使用这个命令:
sudo rm -f /bin/rm
Run Code Online (Sandbox Code Playgroud)
我以为我可以重新安装coreutils:我错了!
apt-get install --reinstall coreutils给出了一个错误dpkg,说它无法删除包。从源代码编译不起作用,因为Makefile使用rm.
我怎样才能找回工作rm?
Bra*_*iam 196
sudo touch /bin/rm && sudo chmod +x /bin/rm
apt-get download coreutils
sudo dpkg --unpack coreutils*
Run Code Online (Sandbox Code Playgroud)
再也不会了。
为什么不将 sudo 与 apt-get 一起使用?
因为download命令不需要它:
download
download 会将给定的二进制包下载到当前目录中。
因此,除非您位于某个无法写入的目录中,否则您不需要使用sudo,并且稍后可能会出现问题,因为您需要root删除/移动包的权限。
Sté*_*las 108
debian及其衍生物(可能还有大多数其他发行版)随附busybox在initramfs.
busybox 将大多数核心命令行实用程序捆绑在一个可执行文件中。
您可以临时符号链接/bin/rm到/bin/busybox:
ln -s busybox /bin/rm
Run Code Online (Sandbox Code Playgroud)
得到一份工作rm(之后你可以做你的apt-get install --reinstall coreutils)。
相同的方法可用于包含的所有其他实用程序busybox。该列表因部署而异。您可以使用busybox --list.
但是请注意,它们是相应实用程序的有限版本。它们有时支持 GNU 扩展,但通常不支持,其中一些甚至不支持所有标准/POSIX 功能(某些功能可以在编译时启用/禁用)。
或者,您可以使用zsh的内置 rm:
#! /bin/zsh
zmodload zsh/files
rm "$@"
Run Code Online (Sandbox Code Playgroud)
该zsh/files模块提供了一些额外的内置命令(rm、mv、ln、mkdir、rmdir、chown、chmod、sync)。它在这种情况下很有用,或者当您不能分叉更多进程但确实有交互式zsh运行时。
ksh93也有许多额外/可选的命令 buitin,但不在rm其中(basename, chmod, dirname, getconf, head, mkdir, logname, cat, cmp, cut, uname, wc, sync)。您可以通过以下方式调用它们:
command /opt/ast/bin/the-command
Run Code Online (Sandbox Code Playgroud)
在ksh93脚本中。
小智 29
在情况apt-get或dpkg需求rm,并没有rm重新安装不posssible,那么你可以模拟rm与perl:
cat > /bin/rm << "EOF"
#!/usr/bin/perl
foreach (@ARGV) { unlink $_ or warn "$@:$!"; }
EOF
chmod +x /bin/rm
Run Code Online (Sandbox Code Playgroud)
Mat*_*hid 14
我会尝试rm从另一台机器获取正确的二进制文件,然后使用scp或其他东西将其复制到 Pi。这当然只有在scp已经安装的情况下才有效......
如果scp不可用,则nc发送端的(又名 netcat)和/dev/tcp/HOST/PORT接收端重定向的bash也可能工作。
如果您没有另一台 Raspbian 机器,您可以检索coreutils 包(获取.deb正确版本的),并使用dpkg-deb(在 Debian/Ubuntu/Mint/... 上,即使它不在 Pi 上)解压它:
dpkg-deb --fsys-tarfile coreutils*.deb | tar xf - ./bin/rm
Run Code Online (Sandbox Code Playgroud)
如果您没有另一台带有 dpkg 的机器,您可以使用ar(来自 binutils 开发工具)和 tar提取文件:
ar p coreutils*.deb data.tar.gz | tar xzf - ./bin/rm
Run Code Online (Sandbox Code Playgroud)
小智 13
因为它是 debian(或 ubuntu),所以有一个简单的方法来获取文件:
mkdir /tmp/coreutils
sudo dpkg-deb --extract /var/cache/apt/archives/coreutils_ [tab complete for correct version].deb /tmp/coreutils
sudo cp /tmp/coreutils/bin/rm /bin
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为 apt-get 在尝试安装之前下载了 coreutils.deb,并且 dpkg-deb 保证存在于基于 debian 的系统上。
不要直接解压到 /tmp,它会更改父目录的权限。
如果你打算玩,你可能想要安装包 busybox-static,即使你破坏了其他一切,它也能工作。
| 归档时间: |
|
| 查看次数: |
38673 次 |
| 最近记录: |