V tomto krátkém tutoriálu se naučíme, jak obnovit nebo obnovit smazané příkazy v Linuxu pomocí coreutils
a busybox
.
Obvykle používáme rm
příkaz k odstranění věcí v Linuxu, že? Ano. Co když použijeme rm
do rm
rm
? Jinými slovy, co když odstraníme /bin/rm
soubor pomocí rm
příkaz? Vždy jsem přemýšlel, co by se stalo, kdybych to skutečně udělal na počítači s Linuxem. Rychle jsem tedy roztočil virtuální počítač Ubuntu a smazal /bin/rm
soubor spuštěním následujícího příkazu:
$ sudo rm /bin/rm
Myslel jsem, že mohu snadno obnovit smazaný rm
přeinstalováním Gnu coreutils
balíček, protože rm
příkaz je součástí coreutils
balíček, že?
Zkusil jsem tedy přeinstalovat coreutils
balíček pomocí apt
správce balíčků jako níže:
$ sudo apt install --reinstall coreutils
Páni, mýlil jsem se! apt
správce balíčků vyžaduje rm
, takže nemůže přeinstalovat coreutils
balík.
Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded. Need to get 1249 kB of archives. After this operation, 0 B of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu focal/main amd64 coreutils amd64 8.30-3ubuntu2 [1249 kB] Fetched 1249 kB in 2s (747 kB/s) dpkg: warning: 'rm' not found in PATH or not executable dpkg: error: 1 expected program not found in PATH or not executable Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin E: Sub-process /usr/bin/dpkg returned an error code (2)

Zkoušel jsem to také zkompilovat ze zdroje, ale ani to nefunguje, protože Makefile
používá rm
. Doposud jsem nevěděl, že přeinstalace není možná bez rm
příkaz.
Myslel jsem, že obnovení smazaných příkazů je triviální. V tomto konkrétním případě jsem však nemohl obnovit rm
příkaz. Nakonec jsem po několika vyhledáváních na webu našel řešení. Pokud jste někdy omylem odstranili rm
(doufám, že to neuděláte), můžete jej obnovit pomocí kterékoli z následujících metod. Nejen rm
Tento postup můžete použít k obnovení téměř všech smazaných základních příkazů poskytovaných coreutils
balíček.
Odmítnutí odpovědnosti:
TOTO NESMÍTE PROVÁDĚT NA VÝROBNÍM SYSTÉMU . Je to výhradně pro vzdělávací účely!.
Obnovení smazaných příkazů v Linuxu pomocí coreutils
Pro ty, kteří nevědí, Gnu coreutils
balíček poskytuje základní základní příkazy, jako je cat
, ls
, rm
, mkdir
, rmdir
, touch
, a mnoho dalších. Dodává se předinstalovaný s většinou distribucí GNU/Linux.
Chcete-li obnovit smazaný rm
Nejprve vytvořte prázdný binární soubor s názvem "rm"
pod /bin/
umístění:
$ sudo touch /bin/rm
Udělejte jej spustitelným:
$ sudo chmod +x /bin/rm
Stáhněte si coreutils
zabalit pomocí příkazu:
$ apt download coreutils
Upozorňujeme, že nemůžeme přeinstalovat coreutils
ale stáhněte si to. Také nemusíme používat sudo
oprávnění ke stažení balíčku.
Rozbalte stažený balíček pomocí následujícího dpkg
příkaz:
$ sudo dpkg --unpack coreutils_8.30-3ubuntu2_amd64.deb
Výše uvedený příkaz jednoduše rozbalí coreutils
balíček, ale nebude jej konfigurovat.

Hotovo! Nyní můžete začít používat rm
příkaz. Pro ověření funkčnosti rm
příkaz je obnoven, jednoduše odstraňte jakýkoli nechtěný soubor. Například jsem smazal coreutils
balíček, který jsem si dříve stáhl:
$ rm coreutils_8.30-3ubuntu2_amd64.deb

Skvělý! Funguje to!
A prosím, nikdy to nedělejte na produkčním systému!!
Obnovení smazaných příkazů pomocí busybox v Linuxu
BusyBox je softwarová sada, která poskytuje mnoho běžných unixových utilit do jediného malého spustitelného souboru. Poskytuje náhradu za většinu utilit, které obvykle najdete v GNU fileutils, shellutils atd. Ve výchozím nastavení je k dispozici v Debianu a jeho derivátech, jako je Ubuntu a mnoho dalších distribucí Linuxu.
Můžete si prohlédnout seznam základních nástrojů příkazového řádku, které poskytuje busybox
pomocí příkazu:
$ busybox --list
Ukázkový výstup:
[ [[ acpid adjtimex ar arch arp arping ash awk basename bc blkdiscard blockdev brctl bunzip2 busybox bzcat bzip2 cal cat [..]

Na mém desktopu Ubuntu 20.04 LTS poskytuje busybox přibližně 263 nástroje příkazového řádku.
Nyní obnovíme smazaný rm
dočasným vytvořením symlinku k tomu. Spusťte následující příkaz pro dočasný symbolický odkaz /bin/rm
do /bin/busybox
:
$ ln -s busybox /bin/rm
Poté znovu nainstalujte coreutils
zabalit pomocí příkazu:
$ sudo apt install --reinstall coreutils
A je to. Výše uvedený příkaz obnoví rm
příkaz.
Jak bylo uvedeno dříve, tento postup není pouze pro obnovu rm
příkaz. Myslím, že pomocí těchto metod můžeme obnovit téměř všechny příkazy Linuxu. Zkontrolujte to sami na virtuálním počítači a uvidíte, že to funguje! Opět toto nedělejte v produkčním systému . Byli jste varováni!
Přečtěte si také:
- Obnovte oprávnění ke spustitelnému souboru pro příkaz Chmod v systému Linux
- Moreutils – sbírka užitečnějších unixových nástrojů