Si es un usuario de Linux y su trabajo implica trabajar en varias distribuciones de Linux, puede haber ocasiones en las que se encuentre escribiendo comandos en un sistema Linux sin GUI. Esto significa que ya no podrá acceder a sus aplicaciones GUI favoritas, por ejemplo, Gedit para editar archivos, que suele utilizar para su trabajo habitual.
Independientemente de si es un administrador de sistemas o un desarrollador, la comparación de archivos es una tarea común en el trabajo de casi todos. ¿Qué sucede si necesita comparar dos archivos mientras trabaja en un sistema Linux solo CLI? Su herramienta de comparación basada en GUI favorita obviamente no estará a su disposición. No hace falta decir que tendrá que conformarse con una utilidad de línea de comandos para hacer su trabajo.
En Linux, el comando diff se puede usar para comparar dos archivos, pero la cuestión es que hay una pequeña curva de aprendizaje involucrada con esta utilidad. Si no sabe cómo funciona diff y está buscando un tutorial rápido para comenzar, no busque más, ya que en este artículo, discutiremos los conceptos básicos de este comando junto con algunos ejemplos fáciles de entender.
Antes de continuar, tenga en cuenta que todos los ejemplos de este tutorial se probaron en Ubuntu 14.04 con Bash versión 4.3.11(1) y diff versión 3.3.
Comando de diferencias de Linux
En lugar de saltar directamente a los ejemplos, es bueno saber un poco sobre el comando primero. La página man del comando diff revela que la herramienta compara archivos línea por línea. Su sintaxis es:
diff [OPTION]... FILES
Mientras [OPCIÓN] representa las diversas opciones de línea de comando que ofrece la herramienta, ARCHIVOS suele ser un par de nombres de archivo. Aunque la página de manual de diff contiene información útil sobre el comando, la documentación completa para diff se mantiene como un manual de Texinfo. Si la información y diferencia programas están correctamente instalados en su sitio, el comando
info diff
debería darle acceso al manual completo.
Uso de diferencias/Ejemplos
Ahora analicemos cómo se usa diff. Para ello, comencemos con un ejemplo básico. Supongamos que los siguientes son los dos archivos que queremos comparar:
archivo1:
test
test2
test3
archivo2:
test
test23
test3
Así es como puede usar el comando diff para comparar estos dos archivos:
diff file1 file2
Y aquí está el resultado que produce el comando anterior:
2c2
< test2
---
> test23
La salida parece críptica, ¿verdad? Llegaremos a eso en un momento. Primero comprendamos la estructura básica de la salida que produce diff en general.
Lo primero que debe tener en cuenta es que la salida representa los cambios necesarios para transformar el archivo 1 (generalmente el archivo original) en el archivo 2 (el archivo nuevo o modificado). La salida generalmente consta de líneas que comienzan con un número (o un rango) seguido de un alfabeto (a, d o c) y otro número (o rango). Por ejemplo 2c2 (de la salida anterior).
El primer número representa la línea (o rango de líneas) del archivo 1 (archivo original), mientras que el último número representa la línea (o rango de líneas) del archivo 2 (el archivo nuevo). En cuanto al alfabeto intermedio, a representa agregado , d es para eliminado, y c representa cambiado .
Por lo tanto, 2c2 significa que la segunda línea del archivo original ha cambiado y debe reemplazarse con la segunda línea del nuevo archivo para que los archivos sean iguales. Si compara manualmente los dos archivos (archivo 1 y archivo 2), verá que ese es exactamente el caso.
En cuanto a las tres líneas que siguen a 2c2 en el ejemplo mencionado anteriormente, la que comienza con '<' no es más que la segunda línea del archivo 1, y la que comienza con '>' no es más que la línea en cuestión del archivo 2. Los tres guiones entre ellos (---) son solo para propósitos de separación.
¿Hay alguna necesidad de revisar el resultado del primer ejemplo ahora? Lo más probable es que no, ya que la explicación anterior debería haberlo explicado por sí misma. Ahora, tomemos otro ejemplo.
Entonces, aquí está el archivo1:
Hi all,
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.
Aquí está el archivo2:
Hi all,
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.
Aquí está el comando (que sigue siendo el mismo):
diff file1 file2
Y aquí está el resultado:
2,4c2,4
< This is a diff command tutorial
< from HowtoForge.
< Hope you'll benefit from it.
---
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
Entonces puede ver que en este caso, la salida principal - 2,4c2,4 - consta de múltiples números tanto antes como después del alfabeto. Estos son básicamente rangos:2, 4 representa el número de línea 2, 3 y 4. Por lo tanto, el resultado significa que los números de línea 2 a 4 en el archivo original (archivo 1) han cambiado y deben reemplazarse por los números de línea 2 a 4 de file2 para que los archivos sean iguales.
Continuando, cambiemos un poco el contenido de los archivos. Mientras que el archivo1 sigue siendo el mismo, el archivo2 ahora se convierte en:
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.
Ahora, si ejecuta el comando diff, se producirá el siguiente resultado:
0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>
Entonces puede ver que la herramienta reconoció inmediatamente que el segundo párrafo en el archivo2 no es más que lo que contiene todo el archivo1. Entonces, la salida dice que las líneas 1 a 5 del archivo 2 deben agregarse al comienzo del archivo 1 para que los dos archivos sean iguales.
Y si elimina la última línea ("Gracias") del archivo 2, este es el resultado:
0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>
4d8
< Thanks.
Puede ver que la salida ahora también contiene 4d8, lo que significa que la cuarta línea en el archivo 1 debe eliminarse para que ambos archivos estén sincronizados a partir de la línea número 8. Por supuesto, esto es después de abordar el cambio 0a1,5 que se menciona primero.
Conclusión
De acuerdo, el resultado del comando diff no es fácil de comprender, pero la curva de aprendizaje no es tan pronunciada. Pase un par de horas con la herramienta y seguramente se sentirá cómodo con ella. En cuanto al tutorial, solo hemos arañado la superficie aquí. Eche un vistazo a la página de manual del comando y se dará cuenta de que hay mucho más que aprender sobre diff, algo que haremos en la siguiente parte de esta serie de tutoriales.