cmp
Tipus | utilitat UNIX |
---|---|
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]
Mode d'ús
[modifica]La 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
[modifica]Els 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
[modifica]Tenint 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. |