¿Alguien puede explicarme este comando rsync?


11

¿Alguien puede decirme qué hace esto?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

¿Elimina bkp01y offbk2envía un registro a offbkp01.log?


No puede leer páginas de manual. ¿Qué te hace pensar que él está leyendo las respuestas aquí? XD
Twinkles

2
¿Quién necesita páginas de manual cuando tienes explicahell.com/… ?!
Tom

Respuestas:


33

Para dividir esto en partes, hay dos secciones principales, seguidas de un resumen y notas:

  • El rsynccomando:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • La redirección de salida realizada por el shell que ejecuta el comando rsync:
    rsync-command > ~/offbkp01.log

rsync mando:

Comando base:

  • rsync - Supongo que esto no necesita explicación (pero proporcionará si se solicita).

Opciones de comando:

  • -uva - Un conjunto de opciones de un solo carácter, siendo (se muestra la forma corta y larga):

    • -u --update- Le dice a rsync que todas las modificaciones solo deberían aplicarse a los archivos en el destino que tengan la misma edad (y diferentes tamaños) o más antiguos que los de la fuente. Es decir, rsync solo debe transmitir los cambios desde el origen que actualizarían el destino, pero no debe realizar ningún cambio que haga que un archivo de destino se convierta en una versión anterior.

      Hay algunas excepciones Las diferencias de tipo (por ejemplo, una es un archivo, la otra es un directorio) provocarán una actualización independientemente de las fechas. Los enlaces simbólicos y otros archivos especiales ignoran esta opción. Y, lo que es más importante, esto no afecta qué archivos se eliminan.

    • -v --verbose- Aumenta la cantidad de información que rsync imprime mientras se ejecuta. Sin esto, rsync no imprimirá (¿casi?) Nada. Con esta opción tal cual, rsync le dirá qué archivos se están transfiriendo y pondrá un resumen al final. Más vs aumentan la información impresa, aunque la página del manual dice que más de dos vs solo deben usarse al depurar.
    • -a --archive- Esto es equivalente a varias otras opciones ( -rlptgD) empaquetadas juntas. Como su nombre largo sugiere, es una forma rápida de configurar muchas opciones comunes para archivar archivos y directorios. Va a:
      • -r --recursive- Le dice a rsync que copie directorios recursivamente. Sin esto, o la -d --dirsopción más particular , rsync simplemente omitiría cualquier directorio que encontrara (y le informaría al respecto en su salida).
      • -l --links- Cuando el origen es un enlace simbólico, cree un enlace simbólico en el destino. Dependiendo de otras opciones, los enlaces simbólicos pueden omitirse o convertirse en una copia completa separada (es decir, un directorio verdadero con contenido (u otra copia del archivo) en lugar del enlace simbólico).
      • -p --perms - Establece los permisos de los archivos de destino a los mismos que los archivos de origen.
      • -t --times- Establece los tiempos de modificación de los archivos de destino a los mismos que los archivos de origen. Dado que mantener estos tiempos sincronizados hace que el algoritmo rsync sea más eficiente, generalmente siempre desea que se use, explícita o implícitamente.
      • -g --group- Establece el atributo de grupo del destino al mismo que el origen. Se asocia por nombre de forma predeterminada, pero volverá al número de identificación del grupo en algunas circunstancias. Si el rsync receptor no se ejecuta como superusuario (o lo simula --fake-super), solo se pueden configurar los grupos de los que es miembro el usuario que invocó rsync en el lado receptor . De lo contrario, el grupo se establecerá en el grupo predeterminado del mismo usuario mencionado anteriormente.
      • -D- Equivalente a las opciones --devicesy --specialsjuntas. Significan:
        • --devices- Se transfieren los archivos de caracteres y dispositivos de bloque. No tiene ningún efecto si el rsync receptor no se ejecuta como superusuario (o si lo está simulando --fake-super).
        • --specials - Se transfieren archivos especiales (como sockets) (de lo contrario, no lo serían).
  • --delete- Le dice a rsync que elimine los archivos que están en el destino, pero no en la fuente. Esto NO se ve afectado por la opción de actualización establecida anteriormente (de hecho, ¿cómo podría ser, ya que la mayoría de los sistemas de archivos no retendrán los datos necesarios para ver qué acción era más nueva?). Esta opción actúa en las fuentes después de la expansión comodín / glob, por lo que dir / * no es lo mismo que dir /. Algunas notas importantes:
    • Esto es, obviamente, peligroso. Probablemente debería probarlo --dry-runprimero con la opción, que hará una transferencia simulada que le permitirá asegurarse de que no se realicen cambios no deseados.
    • Si hay algún error de E / S (entrada / salida), es decir, si algo sale mal al transferir, leer o escribir cambios, la eliminación se ignorará a partir de ese momento. Esto se puede anular con la --ignore-errorsopción, aunque probablemente no quieras / no quieras hacer eso.
    • Existen varias variaciones en el algoritmo de eliminación, sobre las cuales puede leer más en la página del manual. Cuando el rsync receptor es la versión 3.0.0 o posterior (al momento de escribir esto) --delete-duringse usa el algoritmo. Si el receptor es más antiguo, entonces --delete-beforese usa. Si es importante que los archivos mantengan un cierto tipo de coherencia en caso de que ocurra un error (como no eliminar nada hasta que se realicen todos los demás cambios), debe usar una opción más específica que la predeterminada.

Ubicaciones de comando:

  • /srv/bkp01- El archivo o directorio fuente. Hay algunas reglas detalladas sobre lo que significa si hay / no hay una barra diagonal al final del directorio, y si existe el otro directorio. Puede ver la sección USO de la página del manual para obtener detalles, pero aquí la falta de una barra diagonal significa que este directorio se copiará en el destino, en lugar de que los contenidos de este directorio se copien en el destino. Lo mismo si se trata de un archivo en lugar de un directorio.
  • /srv/offbk2/- El directorio de destino. En general, este siempre será el último elemento listado en la sección de comando rsync a menos que se use una opción para especificarlo en otra parte del comando.

Redirección de salida de Shell:

Comandos de Shell:

  • >- Esto redirige stdout (la salida estándar) de lo que está a la izquierda al archivo a la derecha, convirtiéndose en su contenido y creando el archivo (si es posible) si aún no existe. Algunas notas:
    • También puede redirigir stderr (la salida de error estándar) al mismo archivo agregando 2>&1al final del comando anterior. El orden es importante, así que tenga cuidado al generalizar dónde colocar eso. El número mágico se 1refiere a stdout, se 2refiere a stderr, &es (esencialmente) "la dirección de", y el fragmento de comando completo significa "redirigir la salida de stderr al flujo stdout".
    • Si desea agregar al archivo de registro en lugar de reemplazarlo, puede usarlo >>. El método para redirigir stderr al mismo lugar sigue siendo el mismo.
    • Puede enviar stdout y stderr a diferentes lugares utilizando 1> stdout_file 2> stderr_file. También puede usar en >>lugar de >ese comando para hacerlo agregando en lugar de reemplazar.

Variables de shell / símbolos especiales:

  • ~ - Esto es una abreviatura para el directorio de inicio del usuario actual y forma parte del siguiente bit.

Ubicaciones a nivel de shell:

  • ~/offbkp01.log- el archivo offbkp01.log dentro del directorio de inicio del usuario actual. Aquí es donde se colocará la salida del comando rsync debido a la redirección con >.

Resumen:

En resumen, este comando:

  • Copie todos los archivos normales, directorios, enlaces simbólicos, archivos especiales y archivos de dispositivos
  • así como la mayoría, si no todos, los atributos de archivo importantes ,
  • desde /srv/bkp01 ,
  • a /srv/offbk2/bkp01 ,
  • y eliminará todo lo /srv/offbk2/que no esté dentro/srv/bkp01 , con las siguientes condiciones:

    • Si un archivo regular, directorio o enlace simbólico (?) Tiene un tiempo de modificación de /srv/offbk2/ que es más reciente que su tiempo de modificación en /srv/bkp01, no se actualizará , si ambos elementos siguen siendo del mismo tipo (archivo regular, directorio o enlace simbólico (? )).
  • Además, rsync imprimirá cierta información sobre lo que está haciendo (específicamente, qué archivos se están transfiriendo y un resumen final ), que el shell escribirá en el archivo ~/offbkp01.log . Ese archivo de registro se creará nuevamente si aún no existe, y se sobrescribirá si ya existe.


NB: --fake-superes una opción utilizada para hacer que rsync simule actividades de superusuario. Lo hace mediante el uso de los atributos extendidos de los archivos para almacenar los atributos que no podría establecer sin tener mayores privilegios. La versión real de cada atributo se establece en lo que tenga sentido dadas las opciones y los privilegios disponibles. Si bien esto hace que sea conveniente realizar algunas copias de seguridad, incluso si no tiene privilegios de superusuario, también se debe tener en cuenta que puede presentar un riesgo de seguridad mayor que el uso de rsync en general, ya que los atributos de seguridad reales pueden no establecerse correctamente, a pesar de que la información sobre ellos fue respaldada.


Fuente: mucho tiempo trabajando con rsync y leyendo su página de manual .


8
Esa es una impresionante primera publicación. ¡Espero que te quedes!
terdon

Yo segundo @terdon .. ¡Maldición! Está en llamas. Sigan con el buen trabajo compañero. Esta es de hecho una respuesta impresionante.
AzkerM

La respuesta parece ser "Sherlock Holmes", me encanta tu estilo de explicación ..
Rahul Patil

9

Del manual:

--Eliminar

Esto le dice a rsync que elimine los archivos extraños del lado receptor (los que no están en el lado emisor), pero solo para los directorios que se están sincronizando. Debe haber pedido rsync para enviar todo el directorio (por ejemplo, "dir" o "dir /") sin usar un comodín para el contenido del directorio (por ejemplo, "dir / *"), ya que el comodín expande el comodín y rsync recibe una solicitud para transferir archivos individuales, no el directorio principal de los archivos. Los archivos que se excluyen de la transferencia también se excluyen de la eliminación a menos que use la opción --delete-excluded o marque las reglas como solo coincidentes en el lado de envío (consulte los modificadores de inclusión / exclusión en la sección REGLAS DE FILTRO).

Por lo tanto, eliminará los archivos del destino que no forman parte del directorio original si no utilizó comodines.

Directorio de origen:

1.txt
2.txt
3.txt

Directorio de destino:

4.txt

4.txt desaparecerá después de rsync y 1.txt, 2.txt y 3.txt estarán en el destino.


En cuanto a las otras cosas:

uva
  • actualizar archivos
  • detallado: resultados de eco al terminal (es decir, redirigirlo a su archivo de registro, así que sí a la última pregunta)
  • archivo: modo de archivo; es igual a -rlptgoD (no -H, -A, -X)


3

No, solo elimina archivos extraños del bkp01directorio.

También:

  • -u, --update- omita los archivos que son más nuevos en el receptor
  • -v, --verbose- aumentar la verbosidad
  • -a, --archive- modo de archivo; es igual a -rlptgoD (no -H, -A, -X)

La salida del rsync -uva --delete /srv/bkp01 /srv/offbk2/comando se envía al ~/offbkp01.logarchivo utilizando el operador de redirección ( >) en lugar de imprimirse en su terminal. Si el archivo no existe, se creará. Si el archivo existe, el contenido anterior se borrará.

Ver man rsyncpara más información.


3
No elimina nada de bkp01. Simplemente elimina archivos extraños, es decir, aquellos que no existen en la fuente, del destino.
Matt Nordhoff

No se eliminarán archivos de bkp01.
Xavier J

1
rsync 

Copia remota de archivos: sincronice árboles de archivos en discos locales, directorios o en una red.

-u update 

-v verbose

-a archive


--delete --> delete

Aquí eliminará archivos dentro de offbk2 .

Luego, la salida del resultado (exitoso o no) se redirigirá a ese archivo de registro.


No se eliminarán archivos de bkp01.
Xavier J
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.