GNU/Linux >> Linux Esercitazione >  >> Linux

Spostato il contenuto di /bin in /usr/bin, è possibile annullare?

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.


  1. 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 con apt --reinstall install zsh ).

  2. 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
    
  3. 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).


Linux
  1. Perché /bin/sh punta a /bin/dash e non a /bin/bash??

  2. Node.js Conflitti:/sbin/node Vs /usr/bin/node?

  3. autorizzazione negata per il compositore in /usr/local/bin/

  4. cmake --version punta a /usr/bin/cmake mentre which cmake punta a /usr/local/bin

  5. Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Differenza tra /bin/false e /sbin/nologin

/usr/bin Vs /usr/local/bin Su Linux?

Linux – /sbin/init non esiste?

Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

Quando devo usare #!/bin/bash e quando #!/bin/sh?

Differenza tra /bin e /usr/bin