ただ面白くするために、Raspbianを実行しているRaspberry Piでこのコマンドを使用すると思いました。
Sudo rm -f /bin/rm
coreutils
を再インストールするだけでいいと思った:間違っていた!
apt-get install --reinstall coreutils
は、パッケージを削除できなかったというdpkg
からのエラーを表示します。 Makefile
はrm
を使用するため、ソースからのコンパイルは機能しません。
正常に動作するrm
を戻すにはどうすればよいですか?
Sudo touch /bin/rm && Sudo chmod +x /bin/rm
apt-get download coreutils
Sudo dpkg --unpack coreutils*
そして二度と。
Apt-getでSudoを使用しなかったのはなぜですか?
download
コマンドはそれを必要としないので:
download
downloadは、指定されたバイナリパッケージを現在のディレクトリにダウンロードします。
したがって、書き込みできないディレクトリにいない限り、Sudo
を使用する必要はありません。削除/移動するにはroot
権限が必要になるため、後で問題が発生する可能性がありますその包み。
debian
とその派生物(そしておそらく他のほとんどのディストリビューション)には、busybox
で使用されるinitramfs
が付属しています。
busybox
は、ほとんどのコアコマンドラインユーティリティを単一の実行可能ファイルにバンドルします。
一時的に/bin/rm
を/bin/busybox
にシンボリックリンクできます。
ln -s busybox /bin/rm
動作するrm
を取得するには(その後、apt-get install --reinstall coreutils
を実行できます)。
同じ方法が、busybox
に含まれる他のすべてのユーティリティに使用できます。そのリストは、デプロイメントごとに異なります。リストはbusybox --list
で取得できます。
ただし、これらは対応するユーティリティの限定バージョンであることに注意してください。 GNU=拡張機能をサポートすることもありますが、一般的にはサポートしておらず、一部の機能はすべての標準/ POSIX機能をサポートしていません(コンパイル時に有効/無効にできる機能もあります)。
または、zsh
の組み込みrmを使用することもできます。
#! /bin/zsh
zmodload zsh/files
rm "$@"
zsh/files
モジュールには、いくつかの追加の組み込みコマンド(rm
、mv
、ln
、mkdir
、rmdir
、 chown
、chmod
、sync
)。このような状況や、これ以上プロセスをforkできないが、インタラクティブなzsh
を実行している場合に役立ちます。
ksh93
にもいくつかの追加/オプションコマンドbuitinがありますが、それらの中にはrm
がありません(basename
、chmod
、dirname
、getconf
、head
、mkdir
、logname
、cat
、cmp
、cut
、uname
、wc
、sync
)。あなたはそれらを呼び出すことができます:
command /opt/ast/bin/the-command
ksh93
スクリプト内。
万一に備えて apt-get
またはdpkg
にはrm
が必要であり、rm
がないと再インストールは不可能であり、rm
をPerl
でエミュレートできます。
cat > /bin/rm << "EOF"
#!/usr/bin/Perl
foreach (@ARGV) { unlink $_ or warn "$@:$!"; }
EOF
chmod +x /bin/rm
別のマシンから正しい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
Dpkgを使用する別のマシンがない場合は、ar
(binutils開発ツールから)とtarを使用してファイルを抽出できます。
ar p coreutils*.deb data.tar.gz | tar xzf - ./bin/rm
これは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
これは、apt-getがインストールを試みる前にcoreutils.debをダウンロードし、dpkg-debがdebianベースのシステムに存在することが保証されているため機能します。
/ tmpに直接抽出しないでください。親ディレクトリの権限が変更されます。
いろいろ試してみる場合は、busybox-staticパッケージをインストールすることをお勧めします。これは、他のすべてを壊しても機能します。