Se movió el contenido / bin a / usr / bin, ¿es posible deshacerlo?

18

Al ejecutar Ubuntu 17.04, estaba instalando un software desde una distribución que no es de repositorio, se suponía que debía mover el contenido de la carpeta bin del software a / usr / bin (que ya era un consejo dudoso)

Es uno de esos días, así que lo que hice en su lugar:

mv /bin/* /usr/bin

Así que me equivoqué y accidentalmente moví todos los archivos en bin a / usr / bin y / bin estaba vacío. Como tomo que / bin es crítico para el sistema, para una solución rápida, copié / usr / bin contenidos en / bin.

Ahora mis / bin y / usr / bin son idénticos y ambos contienen los archivos originalmente en / bin y / usr / bin separados.

  1. ¿Mi Ubuntu está en un estado roto ahora? (Todavía no intenté reiniciar la computadora, ahora todo parece funcionar)
  2. ¿Hay alguna manera de saber qué archivos se han movido / copiado a / usr / bin más recientemente, por lo que podría encargarme de la situación manualmente? 2.1 ¿Hay archivos superpuestos en / bin y / usr / bin?
  3. ¿Hay otras formas de deshacer lo que hice?

No tengo instalado Timeshift, por lo que restaurar copias de seguridad no es una opción, pero actualmente no hay nada crítico en la computadora, por lo que podría admitir que atornillar reinstalar toda la partición de Linux.

uno de esos días
fuente
2
dpkg-query -l | awk '{system ("dpkg-query -L" $ 2 "| grep -E \" ^ / usr / bin /.*$ \ "")}' Esto le dará todos los archivos inicialmente en / usr / bin basados ​​en los paquetes instalados
Raman Sailopal
77
@ SatōKatsura /bines crítico para el sistema. Su contenido debe estar presente en las primeras etapas de arranque. No desea crear un enlace simbólico a una partición ( /usraquí) que no se puede montar en el arranque.
xhienne
1
@xhienne Nunca dije que sobreviviría a un reinicio. Es una solución temporal, para obtener la funcionalidad suficiente para poder reparar el sistema.
Satō Katsura
1
@xhienne que depende de cómo configure la distribución. Arch, por ejemplo, no mantiene una separación /binpor defecto. La partición predeterminada de Ubuntu no crea /usrparticiones separadas . Tengo curiosidad por saber cuántas personas realmente hacen una separación /usrcon una distribución moderna.
Muru
1
@muru Toma mi comentario como genérico. Puede suponer lo que quiera en la cantidad de particiones, prefiero no hacerlo y le advierto que no enlace / usr / bin / * a / bin, que en el mejor de los casos es completamente inútil y, en el peor de los casos, puede inutilizar el sistema en el próximo arranque . Ningún sistema que siga el FHS debe contener enlaces simbólicos a / usr / bin. Se recomendó a OP que copiara los archivos.
xhienne

Respuestas:

19

¿Mi Ubuntu está en un estado roto ahora?

Sí, tu Ubuntu está roto

Arruinaste algo importante para la gestión de paquetes .

Entonces, en la práctica, haga una copia de seguridad de sus datos importantes (al menos /etcy /home), tal vez también la lista de paquetes instalados, por ejemplo, salida dpkg -ly reinstale Ubuntu.

(un novato podría tratar de manejar, como en otras respuestas, pero entonces no habría cometido un error tan grande y básico)

Podría admitir que atornillar reinstalar toda la partición de Linux.

Eso es probablemente lo que consumiría menos tiempo. Mantener su sistema actual con la ayuda de otras respuestas es mantenerlo en un estado muy desordenado (lo que le daría dolores de cabeza futuros).

Como está reformateando su disco, considere colocar /homeuna partición separada (para que en el futuro tales errores no pierdan sus datos). Antes de hacer que la letra impresa en el papel de la salida df -he df -hiy fdisk -l(que dan información sobre -tanto espacio de disco utilizado y disponible- ...). Tenga cuidado de tener una partición del sistema lo suficientemente grande (el sistema de archivos raíz); si puedes permitírtelo, 100 Gbytes es más que suficiente.

Se suponía que debía mover el contenido de la carpeta bin del software a / usr / bin

(Terminología: Unix tiene directorios, no "carpetas").

Eso ( mudarse a /usr/bin/) está muy mal. O bien mejorar su $ PATH (preferiblemente) o en la mayoría añade enlaces simbólicos en /usr/bin/y preferentemente mover (o añadir enlaces simbólicos) ejecutables a /usr/local/bin/.

El enfoque prudente es no cambiar nunca /usr/bin/, /bin, /sbin, /usr/sbin/ fuera de las herramientas de gestión de paquetes (por ejemplo dpkg, apt-get, aptitude, etc ...). Lee el FHS .

Basile Starynkevitch
fuente
44
Voy a aceptar esta respuesta: parece que después de intentar recuperarlo funcionó hasta reiniciar, que ya no pudo iniciar ninguna sesión de entorno de escritorio. En lugar de tratar de arreglar eso, admitiré mi error total y simplemente reinstalaré la partición de Linux. Como todo estaba en el control de versiones y había usado el sistema durante solo una semana, todo lo que realmente perdí fue mi dignidad y tuve un pequeño ataque de pánico, pero eso parece ser normal cuando la vida me enseña una lección.
oneOfThoseDays
1
Como /biny /usr/binahora son idénticos, no estoy seguro de por qué se arruinaría la gestión de paquetes. ¿Hay realmente un caso donde /bin/fooy /usr/bin/fooson a la vez proporciona un paquete (s). Si no, solo hay algunos archivos adicionales flotando.
StrongBad
3
@Basile no, no sería (ser infeliz); la administración de paquetes solo se preocupa por los archivos que conoce, no se quejará por los archivos que no conoce. Incluso para los archivos que no conocemos, que no se ve particularmente afectada si han cambiado ...
Stephen Kitt
2
@Basile también no contaría con la última parte "(un novato podría tratar de manejar, como en otras respuestas, pero entonces no habría cometido un error tan grande y básico)". Es cierto ;-). ¡Incluso los expertos se equivocan a veces!
Stephen Kitt
1
FWIW La /partición de mi sistema principal es de 12 GB y nunca me encontré con un problema de espacio a pesar de usarlo para el desarrollo (leer archivos de encabezado y muchas herramientas), oficina y diseño (leer herramientas pesadas), en KDE (leer no el más delgado). Agregue 4 GB más si no se divide /var, infle en un 25% si desea un margen mayor que el que tengo, y con 20 GB es más que bueno.
espectras
36

En Linux (y en la mayoría de los otros sistemas, aunque POSIX no le brinda esa garantía a menos que el movimiento fuera a través de los sistemas de archivos), eso habría actualizado su ctime, por lo que suponiendo que ninguno de los otros /usr/binhaya sido tocado en las últimas 24 horas , deberías poder moverlos de nuevo con:

find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
   echo mv -i "$@" /bin' sh {} +

Elimine el echosi se ve bien. Tenga en cuenta que no podrá recuperar los archivos que existían con el mismo nombre en /biny /usr/bin(los originales en /usr/binse habrían perdido)

Una advertencia potencial: si algunos archivos estuvieran vinculados de forma rígida en ambos /biny /usr/bin, todos los vínculos rígidos /usr/binse moverían a /bin.

Ahora, puede pensar que, dado que /biny /usr/binestá en el valor predeterminado $PATH, y /binestá disponible /bootal menos antes de que /usresté montado, no debería importar si los ejecutables están en /binlugar de /usr/bin.

Pero eso sería pasar por alto que muchos comandos codifican las rutas de los ejecutables y esperan que sean en algún caso específico. Un caso común es she-bangs. Todos los guiones que tienen:

#! /usr/bin/env bash

dejará de funcionar después de que lo hagas mv /usr/bin/env /bin/env. En ese sentido, tener los comandos en ambas ubicaciones es más seguro ya que no romperá esos scripts.

Stéphane Chazelas
fuente
3
Como se mencionó anteriormente (eliminé mi comentario, ya que tenía un error grave que intentaría mover todo a un directorio llamado - ¡lo isiento!) En sistemas GNU / Linux como Ubuntu que uno puede usar, find /usr/bin/. ! -name . -prune -ctime -1 -exec echo mv -it /bin {} +ya que GNU Coreutils esmv compatible -t. Otros sistemas operativos generalmente no lo admiten , ni funciona en la alternativa mvproporcionada por BusyBox .
Eliah Kagan
17
  1. Su instalación debería ser mayormente correcta; no debería haber diferentes archivos con el mismo nombre /usry /usr/bin(que responde a su 2.1), por lo que tener todos los archivos en ambos /biny /usr/binno romperá nada (hasta que actualice los paquetes). El único problema que puede tener ahora es enlaces simbólicos rotos, si sobrescribió un binario con un enlace simbólico. Para solucionar esto, busque enlaces simbólicos rotos:

    find -L /bin /usr/bin -type l -ls
    

    y reinstale los paquetes correspondientes a los archivos enumerados (por ejemplo, si /usr/bin/zshaparece como roto, dpkg -S /bin/zsh /usr/bin/zshle indicará de qué paquete proviene el archivo; reinstale con apt --reinstall install zsh).

  2. Puede mostrar y ordenar por ctime para ver los archivos que se modificaron recientemente (que incluirán los archivos que movió):

    ls -ltc /bin
    
  3. El mejor enfoque para deshacer lo que hizo es usar el cruftpaquete y eliminar los archivos que encuentra /bino /usr/binque no provienen de un paquete:

    sudo apt install cruft
    sudo cruft -d "/ /usr"
    

    a menos que los archivos sean enlaces simbólicos a archivos en /etc/alternatives(en cuyo caso debe dejarlos solos).

Stephen Kitt
fuente
Excepto los guiones que comienzan con #! /bin/sho similar.
Satō Katsura
@ SatōKatsura aún funcionarían bien si shestá en ambos /biny /usr/bin(todos los archivos están duplicados ahora).
Stephen Kitt
1
No cruftes necesario un toolk especial para este trabajo porque el administrador de paquetes también realiza un seguimiento de los archivos instalados. Ver unix.stackexchange.com/questions/153260/… .
Ned64
1
comm -12 <(ls /bin) <(ls /usr/bin)mostrar algunas entradas en un sistema Ubuntu en el que lo probé. Algunos con un /bin/foo -> /usr/bin/foomedio que foose habría perdido.
Stéphane Chazelas
@ Stéphane ah sí, mover el enlace podría destruir el original ...
Stephen Kitt
6

Puede ser educativo elaborar por qué su sistema está, en mayor o menor medida, 'roto'.

  1. Como señala @ basile-starynkevitch, el sistema de gestión de paquetes tiene el potencial de confundirse terriblemente si encuentra binarios /bincuando deberían estar /usr/bin, y viceversa.
  2. Algunos scripts (posiblemente importantes) pueden estar programados para encontrar un binario en particular en un directorio u otro (en algunas circunstancias es una buena práctica, por ejemplo, desde un punto de vista de seguridad, no confiar en el contenido del $PATH).
  3. La razón por la que hay una distinción entre /biny /usr/bines que el primero puede estar potencialmente en una partición que se monta en una etapa anterior del arranque. En este contexto (es decir, al arrancar el sistema), no solo se haría /bin/xxxreferencia a los binarios mediante una ruta completa, sino que el directorio /usr/binpodría no estar disponible en el sistema en ese momento. (Si usted df /biny df /usr/binusted pueden ver el mismo sistema de archivos en la lista, o diferentes; probablemente la mayoría de las instalaciones predeterminadas, en estos días, dejan ambos directorios en la misma partición).

Por lo tanto, puede ver que, si tiene los mismos binarios en ambos /biny /usr/bin, entonces no ocurrirán los problemas 2 y 3, y el daño de 1 podría ser menor. Re 1, por ejemplo, los paquetes podrían no desinstalarse correctamente si intenta eliminarlos; y las actualizaciones podrían quedar confusas, si la actualización intenta actualizar la copia en el lugar "correcto", pero ignora la copia en el lugar "incorrecto". Por lo tanto, si los remedios anteriores parecen demasiado drásticos o complicados, puede salirse del sistema en este estado.

Pero si este es un sistema importante, realmente no confiaría en eso.

Una regla general (de nuevo haciendo eco en @ basile-starynkevitch) es nunca molestarse con amigos /usr/bin, /biny ellos 'pertenecen' a la distribución, y un paquete que sugiere hacerlo como parte de su instalación normal ... no es un buen paquete.

Editar: Relevante al punto 3, hay una discusión en el contexto de systemd / Fedora y amigos de por qué tiene sentido para mover todo el contenido de /bina /usr/bin, y simbólicamente los directorios primera a la segunda. Esto es , no una recomendación que haga esto, usted mismo - que la página está dirigida a las personas que realizan distribuciones - pero incluye algo de la historia de por qué existe esta distinción (y por implicación por eso que ahora es tradición meramente polvo).

Gris normando
fuente