Na Linuxu (a na většině ostatních systémů, i když vám POSIX tuto záruku nedává, pokud přesun nebyl mezi systémy souborů), by to aktualizovalo jejich ctime, takže za předpokladu, že žádný z ostatních v /usr/bin
se jich za posledních 24 hodin dotklo, měli byste být schopni je přesunout zpět pomocí:
find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
echo mv -i "[email protected]" /bin' sh {} +
Odstraňte echo
jestli to vypadá správně. Všimněte si, že nebudete moci obnovit soubory, které existovaly pod stejným názvem v /bin
a /usr/bin
(původní v /usr/bin
byl by ztracen)
Potenciální upozornění:pokud by některé soubory byly pevně propojeny v obou /bin
a /usr/bin
, všechny pevné odkazy v /usr/bin
bude přesunuto na /bin
.
Nyní si můžete myslet, že od /bin
a /usr/bin
jsou ve výchozím nastavení $PATH
a /bin
je k dispozici na /boot
alespoň před /usr
je připojeno, nemělo by záležet na tom, zda jsou spustitelné soubory v /bin
místo /usr/bin
.
To by však přehlíželo, že mnoho příkazů pevně kóduje cesty ke spustitelným souborům a očekává, že budou v nějakém konkrétním případě. Častým případem je ona-bang. Všechny skripty, které mají:
#! /usr/bin/env bash
po provedení mv /usr/bin/env /bin/env
nebude fungovat . V tomto ohledu je mít příkazy v obou umístěních bezpečnější, protože tyto skripty neporuší.
Je moje Ubuntu nyní v nefunkčním stavu?
Ano, vaše Ubuntu je nefunkční
Zpackali jste něco důležitého pro správu balíků.
V praxi tedy zálohujte důležitá data (alespoň /etc
a /home
), možná také seznam nainstalovaných balíčků, např. výstup dpkg -l
a přeinstalujte Ubuntu.
Mohl bych jen přiznat, že jsem zpackal přeinstalaci celého linuxového oddílu.
To je pravděpodobně to, co by vám zabralo méně času. Udržování vašeho současného systému pomocí jiných odpovědí ho udržuje ve velmi chaotickém stavu (což by vám v budoucnu způsobilo bolesti hlavy).
Protože přeformátujete disk, zvažte vložení /home
v samostatném oddílu (takže budoucí takové chyby neztratí vaše data). Než to uděláte, vytiskněte na papír výstup df -h
a df -hi
a fdisk -l
(poskytují informace o místě na disku - využitém i dostupném - ...). Je rozumné mít dostatečně velký systémový oddíl (kořenový souborový systém); pokud si to můžete dovolit, 100 GB je více než dost.
Měl jsem přesunout obsah složky softwaru bin do /usr/bin
(terminologie:Unix má adresáře, nikoli "složky").
To (pohyb na /usr/bin/
) je velmi špatně. Buď vylepšete svou $PATH (nejlépe), nebo nanejvýš přidejte symlinky v /usr/bin/
a nejlépe přesunout (nebo přidat symbolické odkazy) spustitelné soubory do /usr/local/bin/
.
Moudrý přístup je nikdy neměnit /usr/bin/
, /bin
, /sbin
, /usr/sbin/
mimo nástroje pro správu balíčků (např. dpkg
, apt-get
, aptitude
, atd...). Přečtěte si FHS.
-
Vaše instalace by měla být většinou v pořádku; v
/usr
by neměly být různé soubory se stejným názvem a/usr/bin
(což odpovídá vašemu 2.1), takže mít všechny soubory v obou/bin
a/usr/bin
nic nezlomí (dokud neupgradujete balíčky). Jediný problém, který teď můžete mít, jsou nefunkční symbolické odkazy, pokud jste přepsali binární soubor symbolickým odkazem na něj. Chcete-li to opravit, vyhledejte nefunkční symbolické odkazy:find -L /bin /usr/bin -type l -ls
a přeinstalujte všechny balíčky odpovídající uvedeným souborům (například pokud
/usr/bin/zsh
zobrazí se jako nefunkční,dpkg -S /bin/zsh /usr/bin/zsh
vám řekne, ze kterého balíčku soubor pochází; znovu jej nainstalujte pomocíapt --reinstall install zsh
). -
Můžete zobrazit a seřadit podle ctime, abyste viděli soubory, které byly nedávno změněny (což bude zahrnovat soubory, které jste přesunuli):
ls -ltc /bin
-
Nejlepší způsob, jak vrátit zpět to, co jste udělali, je použít
cruft
zabalit a odstranit soubory, které najde v/bin
nebo/usr/bin
které nepocházejí z balíčku:sudo apt install cruft sudo cruft -d "/ /usr"
pokud soubory nejsou symbolické odkazy na soubory v
/etc/alternatives
(v tom případě byste je měli nechat na pokoji).