Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

lunes, 30 de mayo de 2016

¿Por qué escoger LVM y no el particionado "tradicional"?

Hola a todos; hoy quiero hablaros sobre la tecnología LVM, comúnmente denominada Linux Volume Manager. Más de uno, a la hora de realizar una instalación de una distribución de Linux desde 0, veréis que tenéis la posibilidad de hacer un particionado normal, o uno con LVM configurado, pudiendo causar confusión a más de uno... ¿Qué aporta dicha tecnología que no aporte el particionado tradicional? ¿Hay algún motivo para usarlo? O más importante... ¿Existe algún motivo para NO usarlo? Es por ello que hoy quiero arrojar algo de luz sobre dicho tema, pues considero que es un concepto que a más de uno le puede llegar a interesar. 

Portada_LVM

Uno de los mayores dilemas de los recién iniciados en Linux, es la gestión de las particiones a la hora de realizar una instalación desde 0... Mucha gente opta por el particionado guiado en el que te particiona todo automáticamente en una única partición y únicamente configura una partición extra para la memoria swap que, dependiendo de la memoria RAM que tengamos en el equipo, será mayor o menor... Generalmente dicha configuración es perfectamente válida para la gran mayoría de usuarios, tengan el nivel que tengan, pero a veces dicha configuración no es la deseada, ya sea porque quieren separar la carpeta home en otra partición para futuras actualizaciones/re-instalaciones (recomendable)   o bien porque necesitan aislar algunos recursos en otra partición por el motivo que sea...

El particionado manual puede llegar a ser muy eficiente, pero uno de sus mayores "defectos" es que al dejar todo en manos del usuario final, deja la gestión del disco en manos del factor humano, con sus correspondientes consecuencias... Una mala gestión de las particiones puede hacer que por ejemplo, particiones importantes, tengan demasiado poco espacio libre, haciendo que el funcionamiento de estas sea deficiente o que incluso por accidente acaben colapsadas... Es por ello que a veces es necesario redimensionarlas. Para ello existen dos opciones: La primera sería recurrir a una herramienta de terceros como G-Parted; la cual generalmente resuelve esos problemas, pero que a veces, por un motivo u otro, deja la partición corrupta; la otra opción sería el tener configurado LVM en los discos...

LVM permite redimensionar las particiones a placer sin tener que recurrir a G-Parted u otras herramientas, además de que permite añadir nuevas particiones sin conflicto alguno, con lo que es una opción muy a tener en cuenta a la hora de instalar un sistema desde 0. Aún así, supongamos que hemos añadido un nuevo disco duro a nuestro sistema y queremos que éste también tenga LVM... ¿Cómo lo haríamos?

Lo primero y 100% necesario, sería tener instalado, obviamente, el paquete LVM en el sistema; cosa tan sencilla como realizar:

apt-get install lvm2

Tras la instalación, hemos de tener en cuenta que todas las particiones que manipulemos de aquí en adelante, DEBEN de estar desmontadas, así que es muy importante ser muy cuidadosos en dicho aspecto. Además también daré por hecho que ya conocéis cómo añadir un disco duro "normal" al sistema... En caso de no conocer dicho procedimiento os recomiendo que leáis este artículo, en el que ya expliqué los pasos a seguir para lograr dicho fin. Con todo preparado, tendríamos un escenario parecido a este:

discos_lvm

Con el disco duro preparado, lo primero que haríamos sería iniciar el disco duro nuevo (/dev/sdb1) como un volumen físico, lo cual es tan sencillo lograremos mediante el comando pvcreate tal que así:

pvcreate /dev/sdb1

Con el volumen físico creado, ahora crearíamos un grupo de volúmenes, pues éstos están compuestos por volúmenes físicos (uno o varios).  En este caso el grupo de volúmenes estaría compuesto únicamente por /dev/sdb1 así que haríamos lo siguiente:

vgcreate mi_grupo /dev/sdb1

El nombre mi_grupo sería el nombre del grupo de volumenes, mientras que /dev/sdb1 sería volumen físico que formaría parte del grupo de volumenes. En caso de querer añadir más de un volumen físico, únicamente tendríamos que poner el nombre de cada uno de estos por separado (por ejemplo vgcreate mi_grupo /dev/sdb1 /dev/sdb2).

Esto que hemos hecho ahora no sería suficiente, ahora tenemos el disco preparado para crear diferentes volúmenes lógicos (lo equivalente a una partición "normal), que es lo que LVM es capaz de reconocer. Esta creación se realizaría gracias a lvcreate que tendría la estructura:

lvcreate -L tamaño -n nombre_volumen $nombre_grupovolumenes

En este caso en concreto he creado 3 volúmenes lógicos: volumen1, volumen2 y volumen3; Un volumen sería de 10 megabytes, otro de 20 megabytes y otro de 5 gigabytes. Los tamaños quedarían representadas como B (bytes) K (Kilobytes) M (Megabytes) y G (Gigabytes).

  1. lvcreate -L 10M -n volumen1  mi_grupo
  2. lvcreate -L 20M -n volumen2  mi_grupo
  3. lvcreate -L 5G -n volumen3 mi_grupo

Con esto ya tendríamos todo listo... Obviamente más de uno se preguntará: ¿Bien, y ahora qué? ¿En qué me ha beneficiado todo esto? Tal y como decía antes, la gran ventaja que ofrece LVM es el redimensionamiento de las particiones (en este caso volúmenes) que puede realizar sin necesidad de herramientas de terceros... Esta redimensión se haría mediante el comando lvresize que tiene la estructura:

lvresize -L $tamaño /dev/$grupo_volúmenes/$nombre_volúmen

Por ejemplo para hacer que el volumen volumen2 sea de 2 gigabytes, haríamos:

lvresize -L 2G /dev/mi_grupo/volumen2

Fácil, rápido y sencillo. Como podéis ver, si bien el hecho de configurar LVM lleva algo de tiempo y esfuerzo; las ventajas que ofrece son obvias, mientras que el particionado tradicional la única ventaja que ofrece es su facilidad de implantación, con lo que podemos considerar esta configuración como un esfuerzo que merecerá la pena en términos de flexibilidad y fiabilidad a largo plazo.

Espero que os haya resultado útil.

Saludos.

lunes, 23 de mayo de 2016

Cómo solventar el problema initframs en Ubuntu y derivados

Después de una larga y ajetreada semana, hoy os quiero venir con un pequeño articulo que en mi opinión puede resultarle muy útil a más de uno. En ocasiones, a la hora de realizar un clon de un sistema operativo con herramientas como Clonezilla, o simplemente al hacer una actualización del sistema operativo que conlleve cambios importantes como pueden ser el kernel o algunas librerías, veremos que al arrancar el sistema, éste no logra arrancar con normalidad, impidiéndonos poder siquiera usarlo. En concreto veremos un error como este:

  1. Busybox v1.13.3 (Ubuntu 1:1.13.3-1ubuntu7) built-in shell (ash)
  2.  Enter ‘help’ for a list of built-in commands
  3.  (initramfs) _

Esto generalmente significa que initframs está siendo incapaz de ejecutarse correctamente, cosa que impediría el arranque del sistema. Para vuestra información, initframs es, a modo de resumen, un recurso que carga los componentes del kernel en la RAM, componentes que serían necesarios para el arranque y sin los cuales el sistema queda inservible, siendo así un recurso indispensable durante el proceso de arranque del sistema operativo... Si este falla, es imposible hacer gestión alguna en el sistema, ni arrancando de forma "normal" ni en modo "a prueba de errores".

portada_ubuntu

Aquí se nos plantearían dos alternativas: La primera y la más brusca, sería el formateo del sistema operativo; cosa poco recomendable, especialmente cuando tenemos información importante almacenada en éste... La otra opción que, si bien es un poco laboriosa, puede salvarnos la vida, sería mediante este sencillo procedimiento de a continuación.

Para empezar necesitaríamos un live CD o USB con G Parted; a modo de recomendación personal sería preferible el uso de un USB debido a su mayor accesibilidad y debido a que podemos usar una herramienta llamada UNetbootin que nos puede facilitar muchísimo la creación de dicho Live USB, si bien esto último es cuestión de gustos.

Después de eso habría que arrancar el equipo desde el Live USB para que cargue G Parted en vez del propio sistema operativo; esto evitaría que éste se cargase, permitiéndonos hacer varias operaciones sobre el disco duro sin impedimentos.

Una vez cargado todo lo necesario, abriríamos una terminal y escribiríamos nos aseguraríamos de que nuestro disco duro ha sido correctamente identificado mediante el comando:

fdisk -l

Generalmente este comando dará como resultado algo parecido a /dev/sda1 o /dev/hda1, algo parecido a lo siguiente.


Con la unidad correctamente identificada (en este caso sda1), ejecutaríamos este simple pero efectivo comando:

fsck -f /dev/sda1

Este comando lo que haría sería forzar la revisión del sistema de ficheros (independientemente de que lo considere necesario o no). Lo normal sería que encontrase errores, pues el sistema tiene sectores erróneos que impiden que initframs se ejecute adecuadamente; con cada error que encuentre la utilidad, se nos pedirá nuestra confirmación para la reparación de éste, cosa que tendremos que hacer para poder realizar la reparación de forma exitosa.

Tras unos pocos minutos, finalmente tendríamos el sistema arreglado, tras lo cual únicamente habría que reiniciar el equipo pero esta vez de forma normal, sin necesidad de live CD o USB alguno, pudiendo disfrutar de nuestro sistema operativo sin impedimentos.

Espero que os haya resultado útil.

Saludos.

lunes, 9 de mayo de 2016

Cómo usar Ubuntu bash en Windows 10

Ubuntu y Windows tienen, para bien o para mal, una relación más estrecha cada día, lo cual ayuda a crear utilidades que antes eran impensables... Usar comandos de Bash directamente desde el propio equipo de Windows sin tener que recurrir a herramientas de terceros que únicamente hacen de emuladores de comandos es algo que hasta hace poco parecía utópico, pero hoy en día dicho fenómeno se ha convertido en toda una realidad. Así es, ahora es posible usar la shell de Ubuntu en un equipo de Windows (Windows 10) sin intermediarios ni herramientas de terceros, toda una hazaña que está dando muchísimo que hablar. Si bien es cierto que en Windows existe powershell, éste ha demostrado no ser tan potente como bash, pues está bastante limitado y no permite ese "control total" que te dan las distribuciones Linux, siendo considerada una consola bastante "pobre"; así que es lógico querer importar la potencia de la consola de Linux a Windows 10 aún siendo dos sistemas antagónicos. De momento esta consola se encuentra en fase beta, así que es importante tener en cuenta que de momento se encuentra MUY limitada... Aún así puede ser interesante echarle un vistazo a dicha consola.

Winlux

Antes de empezar a explicar cómo hacer usable dicha consola, es importante tener en cuenta que es necesario tener Windows 10 dentro del programa Insider. Dicho programa tiene como objetivo que la gente pueda testear aplicaciones beta (como bash) y dar su opinión sobre éstas, aunque a cambio es importante ser conscientes que al entrar en su programa, estaremos bajo la mirada del ojo que todo lo ve, y que gran parte de la actividad realizada en el equipo será enviada a Microsoft; más de la que ya de por sí daríamos usando un Windows 10 normal. Si sois usuarios de Windows 10 (normal) y queréis mejorar un poco vuestra privacidad, tal vez este artículo os resulte interesante.

Conociendo los requisitos y las consecuencias que tiene el cumplirlos, podemos o: Esperar hasta que salga una versión "estable" que se encuentre disponible para Windows 10 "oficial" o probar la versión beta. En caso de querer optar por la segunda opción continuad leyendo.

Para activar Bash en Windows 10, lo primero que tenemos que hacer es activar el modo desarrollador, para lo cual necesitaremos dirigirnos a Inicio --> Configuración --> Para programadores y seleccionar el Modo Programador.

modo_desarrollo

Con esto activado podremos usar funcionalidades que en un principio no están al alcance de todo el mundo; ya sea por su inestabilidad o por no ser 100% seguras. Ahora tendremos que activar la funcionalidad de Bash, para ello iremos a una sección bastante "oculta" a primera vista que tendremos que buscar desde el menu de inicio. En dicho buscador tendremos que escribir Activar o desactivar caracteristicas de Windows, lo cual nos dirigirá a una sección en la que, como su propio nombre indica, podremos activar o desactivar ciertas características únicas de Windows. Allí veremos desactivada la opción: Windows subsytem for Linux (beta). Sería necesario activarla y reiniciar el equipo para poder tener habilitada dicha característica.

activar_bash

Aún así esto no es suficiente, pues lo que acabamos de hacer ha sido preparar el equipo para poder instalar Bash, no para usarlo en sí. Para instalar Bash tendremos que escribir en el buscador de inicio la palabra cmd, dándonos la opción de usar el símbolo del sistema. Allí simplemente escribiremos la palabra Bash, y confirmaremos pulsando 's' cuando se nos pregunte por nuestra confirmación.

cmd_bash

Tras esperar un buen rato, finalmente se instalará y ejecutará Bash automáticamente. Para poder ejecutar Bash en el futuro, únicamente tendremos que escribir la palabra Bash en el inicio, viendo una aplicación que hará referencia a Bash on Ubuntu on Windows. Únicamente habría que seleccionarla y podríamos usar Bash con normalidad, siempre y cuando seamos conscientes de las limitaciones de la beta. De momento únicamente se pueden usar las funciones más básicas, tales como apt-get, ls, ifconfig, etc... Es decir que no podremos hacer gran cosa; de momento...

Sin duda es una utilidad interesante que será usada por más de un amante de las consolas de entornos Linux; esperemos que salga pronto una versión estable para que esté al alcance de todos sin tener que recurrir a pertenecer al programa Insider.

Espero que os haya resultado útil.

Saludos.

martes, 3 de mayo de 2016

Cómo crear máquinas virtuales Virtualbox con Vagrant en Debian

Las máquinas virtuales son cada día más y más usadas hasta convertirse en prácticamente una necesidad vital; ya sea para testeos, para probar sistemas operativos distintos, o para hacer de "nube". Luego estaría el tipo de máquinas virtuales, que pueden ser containers, virtualización a nivel de kernel(KVM), paravirtualización, etc... Que ya estaría mas relacionado con nuestras necesidades/posibilidades que con el concepto de virtualización en sí... La cuestión está que la creación de dichas máquinas suele llevar bastante tiempo, pues obviamente requiere tener la iso, seguir los pasos de instalación, esperar a que particione el disco, instale el sistema, el GRUB, etc.. Vamos, que generalmente tomará un mínimo de media hora una instalación de dicho tipo, y eso en caso de ser un disco duro pequeño y se haga una instalación ligera, pues en caso contrario difícilmente tomará menos de una hora la instalación en cuestión; lo cual lo convierte en una tarea tediosa y poco productiva; más aún cuando generalmente quieres instalarte una máquina virtual "estándar" que no tendrá ningún instalador especial ni ningún topo de configuración personalizada, o al menos no a nivel de instalación. Para evitar estos largos, y a veces repetitivos procesos, podemos optar por una opción que nos puede crear una máquina virtual basada en Virtualbox en cuestión de pocos minutos y de forma automatizada, convirtiendo dicha tarea en una labor más eficiente. Dicho método se logra gracias a una utilidad que he descubierto hace poco y que me parece muy interesante llamada Vagrant. En este caso he centrado las pruebas en Debian y Ubuntu, pero los sistemas basados en Red Hat también son perfectamente compatibles con esta herramienta.

Vagrant_portada

Para poder disfrutar de las ventajas de Vagrant, lo primero que habría que hacer sería cumplir los requisitos para usarlo; que en este caso sería el poseer Virtualbox instalado en el sistema, pues en caso contrario Vagrant sería inoperativo... Antes era necesario bajarse manualmente el paquete .deb o .rpm e instalarlo a mano, pero hoy en día está incluido en los repositorios oficiales con lo que simplemente bastaría con hacer:

apt-get install virtualbox

Esto instalará todos los componentes necesarios para usar virtualbox y para que Vagrant considere que se pueden crear máquinas virtuales mediante dicho virtualizados. En caso de tener problemas con la instalación, probablemente se deba a que los repositorios que no están correctamente configurados. Es importante tener en cuenta que todos los repositorios deben acabar en main contrib non-free:

Ejemplo Debian:
deb http://ftp.es.debian.org/debian/ jessie main contrib non-free

Ahora obviamente habría que pasar al siguiente paso: La instalación de Vagrant. Este paquete no es aún todo lo popular que cabría esperar, así que aquí no podemos optar por instalarlo mediante los repositorios sino que tendremos que hacer una descarga manual del paquete; lo cual haremos desde la página oficial para evitar problemas. Aquí podemos ver que tenemos diferentes opciones y que incluso, si queremos, podemos instalar Vagrant en Windows, pero en este caso en concreto descargaremos el paquete .deb para entornos Debian (la arquitectura dependerá de nuestro equipo). Si queremos descargarlo directamente también podemos optar por usar wget o curl; esto se realizaría mediante el siguiente comando (para entornos de 64 bits):

curl -O "https://releases.hashicorp.com/vagrant/1.8.1/vagrant_1.8.1_x86_64.deb"

Ahora solamente quedaría instalarlo manualmente gracias al comando dpkg; cosa tan sencilla como escribir el comando dpkg, seguido del parámetro -i y el nombre del paquete.

dpkg -i vagrant_1.8.1_x86_64.deb

La instalación apenas tomará unos segundos y con esto ya podríamos empezar a crear máquinas en muy poco tiempo pero... ¿En qué consiste dicho proceso? Vagrant tiene unas fuentes desde las que se puede descargar unas máquinas virtualbox "estándar" en muy poco tiempo; máquinas van acompañadas de un fichero llamado Vagranfile que contiene la configuración de ciertos parámetro de la máquina virtual, tales como la ip (entre otros). Esto en un principio no nos influye, pues estas configuraciones son opcionales y están diseñadas para customizar al máximo las máquinas virtuales, pero no son parámetros indispensables.

Ahora bien ¿Qué fuentes son aquellas? ¿De donde se descarga las máquinas virtuales? ¿Existe algún patrón? Esto no aparece demasiado bien documentado en la página oficial, pero indagando un poco he encontrado la fuente donde busca las máquinas virtuales que sería: https://atlas.hashicorp.com/boxes/search. Aquí además tendremos un buscador que nos ayudará a encontrar las máquinas que queramos instalar. Por ejemplo podemos querer instalarnos una máquina Ubuntu 16.04, lo cual mostraría el siguiente resultado:

Boxes_vagrant

Siempre veremos varios resultados, pero yo siempre recomiendo que nos fijemos en el "autor" de dicha máquina virtual; no es lo mismo una máquina subida por Ubuntu que una subida por un "desconocido". Yo en mi caso he optado por la que ha subido Ubuntu cuyo nombre sería ubuntu/xenial64.

A sabiendas del nombre de la máquina que queremos descargarnos, únicamente tendríamos que descargarnos el VagrantFile, lo cual es tan sencillo como escribir el siguient comando como usuario "normal2 (no como root):

vagrant init ubuntu/xenial64

Y por último, con virtualbox abierto, nos la descargaríamos y la iniciaríamos mediante este sencillo comando que tampoco tendría que ser ejecutado por root para evitar problemas:

vagrant up

La descarga tomará apenas unos 5 minutos (dependiendo del ancho de banda que tengamos), tras los cuales ya tendríamos una máquina virtual corriendo y completamente operativa; un proceso que apenas nos habrá llevado 10 minutos la primera vez pero que para futuras instalaciones nos tomará todavía menos tiempo, siendo un proceso muy cómodo y eficiente que nos puede ahorrar mucho tiempo. Cuando finalice el proceso veremos que Virtualbox ha creado una máquina con una nomenclatura tipo ${nombre_equipo}_${default}_${serie_numérica}. Algo parecido a esto:

vagrant_virtualbox

Como podéis observar, virtualizar un sistema es cada día una tarea más ágil y sencilla que no nos tiene que tomar más allá de unos pocos minutos, facilitando nuestras tareas enormemente y permitiéndonos crear y destruir sistemas operativos con mucha facilidad.

Espero que os haya resultado útil.

Saludos.

domingo, 1 de mayo de 2016

Diff vs cmp; cual es mejor?

Hoy quiero veniros con un articulo orientado a la comparación entre dos herramientas para comparar, valga la redundancia, dos ficheros; dichas herramientas son muy conocidas, pero generalmente el uso de una u otra suele estar relacionada más con los gustos y costumbres que con la utilidad en sí; estas herramientas se llaman diff y cmp; herramientas que están instaladas por defecto en todas las distribuciones de Linux.

diff_vs_cmp

Para saber por qué alternativa optar, lo mejor es analizar de forma independiente cada herramienta; es decir, ver cómo funciona cada una y cual ofrece más ventajas y/o facilidades que la otra. Es por ello que comenzaremos viendo uno de ellos: diff.

Probablemente sea el comando más usado de los dos en la actualidad (siendo aún así usado el comando cmp); este comando indica las modificaciones que habría que hacer con exactitud en cada uno de los ficheros para que el contenido de ambos sea idéntico. El comando en cuestión tiene la siguiente sintaxis:

diff [-b] [-e] fichero1 fichero2

Los parámetro -b y -e son opcionales; el primero ignoraría los espacios en blanco, ya que puede que esté el mismo contenido en ambos pero que el espaciado sea diferente, o que haya un salto de línea más en un fichero que en otro; haciendo que el contenido no se considere como el mismo. El parámetro -e en cambio crearía una serie de instrucciones que podemos usar para realizar los cambios y/o sustituciones pertinentes; no es una parámetro especialmente usado, pero es útil conocer su existencia. Sin importar si optamos por la inclusión de dichas instrucciones o no, tenemos que tener en cuenta que todo cambio será representado con la siguiente estructura:

líneatipo_cambio(lineas a cambiar)

Para entender apropiadamente esto, lo mejor es entender el tipo de cambio que se puede requerir. En diff se mostrarían tres tipos de cambios:

  • Append: Esto significa que se tiene que añadir una línea o más para que los dos ficheros tengan que ser iguales; esto se representa con la letra a. Ejemplo: 11a2; Esto significa que a partir de la línea 11 habrían que añadir dos líneas; líneas que generalmente te pondrán debajo cuales son. Generalmente te pondrá el símbolo > o < seguido del contenido de dichas líneas. En caso de poner el símbolo < se haría referencia al fichero1, mientras que con el símbolo > haríamos referencia al fichero2.
  • Delete: Al contrario que la anterior opción, aquí estaríamos suprimiendo líneas con el fin de que ambos ficheros tengan el mismo contenido. Aquí la representación de este tipo de cambio se haría con el carácter d. Ejemplo 11d2. Aquí se estaría diciendo que las dos líneas siguiente a la 11 tienen que ser eliminadas.
  • Change: Aquí estaríamos diciendo qué líneas cambiar; el carácter usado para hacer referencia al cambio sería c, y aquí la sintaxis tiene un significado ligeramente distinto al otro. Ejemplo 11c11; Aquí diríamos simplemente que habría que cambiar el contenido de la línea 11 para que sea igual a la línea 11 del otro fichero. Es decir aquí no se estaría haciendo referencia a las siguientes o anteriores líneas del fichero, sino que se estaría haciendo referencia a la línea del fichero original. Generalmente tiene prioridad el tipo de cambio change sobre el resto
Fichero test1:

  1. Producto        objeto  precio  cantidades
  2. raton           optico  30      15
  3. pantalla        15      120     20
  4. pantalla        17      300     20
  5. teclado         105     450     20
  6. teclado         115     50      20
  7. disco           30      100     15
  8. disco           50      200     30

Fichero test2

  1. Producto        objeto  precio  cantidades
  2. raton           rueda   30      15
  3. pantalla        15      120     20
  4. pantalla        17      300     20
  5. teclado         105     450     20
  6. teclado         115     50      20
  7. disco           duro    100     15
  8. disco           50      200     30
  9. tarjeta         graf    300     10

El resultado de la comparación de estos dos ficheros con diff sería:

  1. root@debian:/tmp# diff test1 test2
  2. 2c2
  3. < raton         optico  30      15
  4. ---
  5. > raton         rueda   30      15
  6. 7c7
  7. < disco         30      100     15
  8. ---
  9. > disco         duro    100     15
  10. 8a9
  11. > tarjeta               graf    300     10

Como podemos ver diff es bastante flexible e intuitivo, ya que nos dice de una forma fácil y legible qué cambios tenemos que realizar ¿Pero qué ocurre con cmp?

Cmp es un comparador mucho más "duro" que diff, pues realiza una comparación completa carácter por carácter. Esto tiene como lado bueno que es extremadamente meticuloso con la comparación, si bien tanta meticulosidad hace que la comparación no sea tan legible como a uno le gustaría. Cmp tiene esta sintaxis:

cmp [-l]  fichero1 fichero2

El comando "simple" sin parámetro nos diría exactamente cual es el primer carácter en el que encuentra una diferencia con respecto al fichero1.

El parámetro -l es recomendable usarlo, pues te detalla la comparación por completo y te dice exactamente que carácter hay que cambiar; es más te muestra que carácter cambiar de tres formas: Por número de carácter, por valor octal en ASCII del fichero1 y por valor octal en ASCII del fichero2. El problema de este tipo de cambio es que, si bien es extremadamente detallado, tal nivel de detalle puede llegara ser un problema realizar una comparación eficiente. 

He aquí la comparación de los dos ficheros, tanto de forma "normal" como de forma detallada; es importante detallar que el resultado del comando detallado no es mostrado por completo con el fin de no hacer el post kilométrico:

  1. root@debian:/tmp# cmp test1 test2
  2. test1 test2 son distintos: byte 42, línea 2
  3. root@debian:/tmp# cmp -l test1 test2
  4.  42 157 162
  5.  43 160 165
  6.  44 164 145
  7.  45 151 144
  8.  46 143 141
  9.  47 157  11
  10.  48  11  63
  11.  49  63  60
  12.  50  60  11
  13.  51  11  61
  14.  52  61  65
  15.  53  65  12

Como podéis ver, el comando cmd ofrece un resutlado detallado al extremo, pero para el uso normal del día a día, nos es más práctico y útil el uso del comando diff. Eso no significa que cmd tenga menos valor, pero a menos que queramos realizar comparaciones extremadamente técnicas, diff nos puede dar un resultado mucho más claro que nos ayudará a determinar con facilidad el origen de la desigualdad de ambos ficheros.

Espero que os haya resultado útil.

Saludos.