Su Linux (e sulla maggior parte degli altri sistemi, sebbene POSIX non ti dia questa garanzia a meno che lo spostamento non avvenga attraverso i file system), questo avrebbe aggiornato il loro ctime, quindi assumendo nessuno degli altri in /usr/bin
sono stati toccati nelle ultime 24 ore, dovresti essere in grado di spostarli indietro con:
find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
echo mv -i "[email protected]" /bin' sh {} +
Rimuovi il echo
se sembra giusto. Nota che non sarai in grado di recuperare i file che esistevano con lo stesso nome in /bin
e /usr/bin
(quelli originali in /usr/bin
sarebbe andato perduto)
Un potenziale avvertimento:se alcuni file fossero hard link in entrambi /bin
e /usr/bin
, tutti gli hard link in /usr/bin
verrebbe spostato in /bin
.
Ora, potresti pensare che dal /bin
e /usr/bin
sono nel $PATH
predefinito e /bin
è disponibile su /boot
almeno prima di /usr
è montato, non dovrebbe importare se gli eseguibili sono in /bin
invece di /usr/bin
.
Ma ciò significherebbe trascurare il fatto che molti comandi codificano in modo rigido i percorsi degli eseguibili e si aspettano che siano in un caso specifico. Un caso comune è la frangia. Tutti gli script che hanno:
#! /usr/bin/env bash
non funzionerà dopo aver eseguito mv /usr/bin/env /bin/env
. A questo proposito, avere i comandi in entrambe le posizioni è più sicuro in quanto non romperà quegli script.
Il mio Ubuntu è in uno stato rotto adesso?
Sì, il tuo Ubuntu è rotto
Hai incasinato qualcosa di importante per la gestione dei pacchetti.
Quindi, in pratica, fai il backup dei tuoi dati importanti (almeno /etc
e /home
), forse anche l'elenco dei pacchetti installati, ad es. output di dpkg -l
e reinstalla Ubuntu.
Potrei solo ammettere di aver sbagliato a reinstallare l'intera partizione Linux.
Questo è probabilmente ciò che consumerebbe meno del tuo tempo. Mantenere il tuo sistema attuale con l'aiuto di altre risposte significa mantenerlo in uno stato molto disordinato (che ti darebbe mal di testa in futuro).
Dato che stai riformattando il tuo disco, considera di inserire /home
in una partizione separata (quindi tali errori futuri non perderanno i tuoi dati). Prima di farlo stampa su carta l'output di df -h
e df -hi
e fdisk -l
(danno informazioni sullo spazio su disco -sia usato che disponibile- ...). Sii saggio avere una partizione di sistema abbastanza grande (il file system di root); se te lo puoi permettere 100 Gbyte sono più che sufficienti.
Avrei dovuto spostare il contenuto della cartella bin del software in /usr/bin
(terminologia:Unix ha directory, non "cartelle").
Che (in movimento a /usr/bin/
) è molto sbagliato. O migliora il tuo $PATH (preferibilmente) o al massimo aggiungi link simbolici in /usr/bin/
e preferibilmente spostare (o aggiungere collegamenti simbolici) eseguibili a /usr/local/bin/
.
L'approccio saggio è di non cambiare mai /usr/bin/
, /bin
, /sbin
, /usr/sbin/
al di fuori degli strumenti di gestione dei pacchetti (ad es. dpkg
, apt-get
, aptitude
, eccetera...). Leggi l'FHS.
-
La tua installazione dovrebbe essere per lo più OK; non dovrebbero esserci file diversi con lo stesso nome in
/usr
e/usr/bin
(che risponde al tuo 2.1), quindi avere tutti i file in entrambi/bin
e/usr/bin
non romperà nulla (fino a quando non aggiorni i pacchetti). L'unico problema che potresti avere ora sono i collegamenti simbolici interrotti, se sovrascrivi un file binario con un collegamento simbolico ad esso. Per risolvere questo problema, cerca collegamenti simbolici interrotti:find -L /bin /usr/bin -type l -ls
e reinstallare tutti i pacchetti corrispondenti ai file elencati (ad esempio, se
/usr/bin/zsh
risulta danneggiato,dpkg -S /bin/zsh /usr/bin/zsh
ti dirà da quale pacchetto proviene il file; reinstallalo conapt --reinstall install zsh
). -
Puoi mostrare e ordinare per ctime per vedere i file che sono stati modificati di recente (che includeranno i file che hai spostato):
ls -ltc /bin
-
L'approccio migliore per annullare ciò che hai fatto è utilizzare il
cruft
pacchetto ed eliminare i file che trova in/bin
o/usr/bin
che non provengono da un pacchetto:sudo apt install cruft sudo cruft -d "/ /usr"
a meno che i file non siano collegamenti simbolici a file in
/etc/alternatives
(nel qual caso dovresti lasciarli in pace).