cmp
cmp és una ordre de la família dels sistemes operatius Unix. Aquest realitza una comparació binària, byte a byte, entre dos fitxers i mostra el resultat en la sortida estàndard. En cas que s'indiqui un sol fitxer, pren l'entrada estàndard com a font per fer la comparació.[1]
Tipus | utilitat UNIX |
---|---|
Mode d'ús
modificaLa invocació de l'ordre cmp té el següent format:
Cmp [PARÀMETRES] ... Fitxer1 [fitxer2 [SALTEAR1 [SALTEAR2]]]
On fitxer1 és un fitxer que s'ha d'indicar obligatòriament, i si en canvi no s'indica fitxer2,cmp utilitza l'entrada estàndard com a font per fer la comparació. També és possible fer això usant el guionet (-).
Si s'invoca l'ordre passant-li només els dos fitxers, i aquests arribessin a ser diferents,cmp mostra en pantalla la posició del primer byte on difereixen. En cas contrari no mostra res en pantalla.
D'altra banda és possible indicar a l'ordre que se salteu una quantitat de bytes del començament de cada fitxer, això es defineix on s'indiquen SALTEAR1 i SALTEAR2 respectivament.
És important aclarir, que la posició (o nombre) dels bytes mostrats en pantalla, es comença a comptar a partir d'un (1) i són relatives a la comparació i no del fitxer original. Això implica que si s'indica saltar n bytes d'un fitxer, la primera posició (1) de cmp correspon a la posició n dins de l'fitxer.
La comparació binària es realitza fins al final dels fitxers, sempre que la quantitat de bytes a comparar és la mateixa. Si no finalitza tot just troba la marca de fi de fitxer, i cmp indica en pantalla amb què fitxer ocórrer.
Els paràmetres possibles a utilitzar són:
-B, - print-bytes
- Imprimeix els bytes com text. Útil per a fitxers que continguin text.
-I n, - ignore-initial = n
- Saltar n bytes del començament dels dos fitxers.
-I n1: n2, - ignore-initial = n1: n2
- Especifica saltar n bytes del començament de cada fitxer respectivament.
-L, - verbose
- Llista cada byte que difereix, indicant la seva posició i el seu valor en decimal.
-N MÀXIM, - bytes = MÀXIM
- Compara fins a un MÀXIM de bytes.
-S, - quiet, - silent
- No mostra res en pantalla. Útil per quan es vol aprofitar el valor de retorn
Valors retornats
modificaEls valors retornats per 'cmp' després de la seva execució pot ser algun dels següents:[2]
- 0
- Els fitxers són idèntics.
- 1
- Els fitxers són diferents.
- 2
- Error de lectura o amb els paràmetres.
Exemples
modificaTenint en compte els següents fitxers, dues de text i dos binaris, es desenvoluparan les comparacions entre fitxers d'igual tipus:
Fitxer1 | Fitxer2 | hex1 | hex2 |
Hola món! | sol món | 0x00 0x01 0x02 0x10 | 0x01 0x01 0x02 0x02 |
1. Comprovar si són idèntics:
$ cmp Fitxer1 Fitxer2 |
$ cmp hex1 hex2
|
Resultat: | |
Fitxer1 Fitxer1 son diferents: byte 1, línia 1 |
hex1 hex2 son diferents: byte 1, línia 1 |
2. Llistar les diferències mostrant els bytes, sent més útil última opció per als fitxers de text:
$ cmp -lb Fitxer1 Fitxer2 |
$ cmp -lb hex1 hex2
|
Resultat: | |
1 150 h 163 s 4 141 a 157 o 11 41 ! 12 ^J cmp: fi de fitxer trobat a fitxer2 |
1 0 ^@ 1 ^A 4 20 ^P 2 ^B |
Nota: cada diferència es llista en una línia (línia) indicant: nombre de byte (posició), i per cada fitxer el valor en decimal i caràcter ascii del byte analitzat. |
3. Llistar les diferències, saltant doble byte del començament de cada fitxer i processar com a màxim un sol byte:
$ cmp -n 1 -i 2 Fitxer1 Fitxer2 |
$ cmp -n 1 -i 2 hex1 hex2
|
Resultat: No mostra res, ja que els bytes a comparar són idèntics per a tots dos casos. Els bytes involucrats són el caràcter 'l' i el valor hexadecimal 0x02. |