Utilidades de ficheros - Departamento de Lenguajes y Sistemas

Anuncio
Utilidades de ficheros: Texto, binarios y genéricas - Revision : 1,9
Herramientas de Programación— Cuadernos de Prácticas
Soluciones
14 de diciembre de 2004
Resumen
Ejercicios sobre la aplicación de las diferentes utilidades para el tratamiento de ficheros.
Dpto. Lenguajes y Sistemas Informáticos
Universidad de Alicante
Índice
1. Utilidades de texto
1.1. Utilidad grep . . . .
1.2. Utilidad sed . . . . .
1.3. Utilidad sort . . . .
1.4. Utilidad cut . . . . .
1.5. Utilidad join . . . .
1.6. Utilidad cat . . . . .
1.7. Utilidad uniq . . . .
1.8. Utilidad split . . . .
1.9. Utilidad tr . . . . . .
1.10. Utilidad wc . . . . .
1.11. Utilidades more/less
1.12. Utilidades head/tail
1.13. Utilidad diff . . . . .
1.14. Utilidad patch . . .
1.15. Utilidad m4 . . . . .
1.16. Utilidad indent . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
4
4
4
4
5
5
5
5
5
6
6
6
6
7
2. Utilidades para ficheros binarios
2.1. Utilidades ar/ranlib . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Utilidad nm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. Utilidad size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
8
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2.4. Utilidad strip . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5. Utilidad strace . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
9
3. Utilidades genéricas
10
3.1. Utilidades gzip/bzip . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2. Utilidad tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3. Utilidad find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2
1.
1.1.
Utilidades de texto
Utilidad grep
1.
grep alu /etc/passwd
2.
grep ’^a’ /etc/passwd
3.
grep ’^[ar]’ /etc/passwd
4.
grep ’^[^:]*u:’ /etc/passwd
5.
grep ’bash$’ /etc/passwd
6.
grep -v ’bash$’ /etc/passwd
7.
grep ’^[^aeiou]’ /etc/passwd
8.
grep ’^[A-Z]’ /etc/passwd
9.
grep ’^[^:]*:[^:]*:[0-9]:’ /etc/passwd
10.
grep -E ’:[0-9]{3,5}:’ /etc/passwd
11.
grep -E ’^([^:]*:){3}[0-9]{3}:’ /etc/passwd
12.
grep -E ’^(root|ftp):’ /etc/passwd
13.
grep -r MAXDOUBLE /usr/include
14.
grep -ri bash /usr/include
1.2.
Utilidad sed
1.
sed -n -e ’/^a/p’ /etc/passwd
2.
sed -e ’s/alu/alumno/’ /etc/passwd
3.
sed -e ’s/a/A/g’ /etc/passwd
4.
sed -e ’s/\/bin\/sh/\/bin\/bash/’ /etc/passwd
También puede hacerse:
sed -e ’s %/bin/sh %/bin/bash %’ /etc/passwd
5.
sed -e ’/^a/ s %/bin/bash %/bin/sh %’ /etc/passwd
6.
sed -e ’3,10 s/sh/bash/’ /etc/passwd
7.
sed -e ’/^a/,$ s/sh/bash/ /etc/passwd
8.
sed -e ’/^a/! s/sh/bash/’ /etc/passwd
9.
sed -e ’s/:/\t/g’ /etc/passwd
3
10.
sed -e ’y/aeiuo/AEIOU/’ /etc/passwd
11.
sed -e ’/\/bin\/sh$/d’ /etc/passwd
12.
sed -e ’s/^\([^:]*\):\([^:]*\):/\2:\1:/’ /etc/passwd
1.3.
Utilidad sort
1.
sort /etc/passwd
2.
sort -r /etc/passwd
3.
sort -f /etc/passwd
4.
sort -t ’:’ -k 3 /etc/passwd
5.
sort -t ’:’ -k 3 -n /etc/passwd
6.
sort -t ’:’ -k 4 -n -u /etc/passwd
1.4.
Utilidad cut
1.
cut -d ’:’ -f 4 /etc/passwd
2.
cut -d ’:’ -f 1,7 /etc/passwd
3.
cut -d ’:’ -f 1,3,5-7 /etc/passwd
1.5.
1.
1.6.
Utilidad join
sort -k 4 -t ’:’ -n /etc/passwd >passwd
sort -k 3 -t ’:’ -n /etc/group >group
join -t ’:’ -1 4 -2 3 passwd group >res
cut -d ’:’ -f 2,8 res
Utilidad cat
1.
cat /etc/passwd
2.
cat -n /etc/passwd
3.
cat /etc/passwd /etc/group
4
1.7.
1.
Utilidad uniq
Primero obtenemos una lista de los intérpretes de comandos utilizados:
cut -d ’:’ -f 7 /etc/passwd >aux1
A continuación los ordenamos para que los que son iguales aparezcan juntos: sort aux1 >aux2 y eliminamos los repetidos y los sustituimos por
una cuenta
uniq -c aux2 >aux3
Por último ordenamos según la cuenta siguiendo un orden numérico inverso:
sort -n -r aux3
1.8.
Utilidad split
1.
split -l 100 /usr/include/stdio.h
2.
split -b 1000 /usr/include/stdio.h std-
1.9.
Utilidad tr
1.
tr a A </etc/passwd
2.
tr aeiou AEIOU </etc/passwd
3.
tr a-z A-Z </etc/passwd
4.
tr a-z b-za </etc/passwd
1.10.
Utilidad wc
1.
wc -l /usr/include/stdlib.h
2.
wc -c /usr/include/stdlib.h
3.
wc -L /usr/include/stdlib.h
1.11.
Utilidades more/less
1.
more es una versión reducida de less. more tan sólo permite ver los ficheros
moviéndose hacia delante.
2.
less /usr/include/stdio.h
3.
Pulsando h
4.
Pulsando q
5.
Pulsando 100G
6.
Pulsando G
5
7.
Pulsando /SEEK y la tecla de retorno de carro.
8.
Pulsando n
9.
Pulsando N
10.
Pulsando /<.*>
1.12.
Utilidades head/tail
1.
head -n 5 /usr/include/stdio.h
2.
tail -n 5 /usr/include/stdio.h
3.
tail -f sal o tail -F sal si pensamos que hay momentos en los que
el fichero puede ser borrardo o truncado.
1.13.
Utilidad diff
1.
Basta con ejecutar diff ordenar1.c ordenar2.c.
Las lı́neas que aparecen precedidas por el carácter < sólo están en el primer
fichero (fichero ordenar1.c), y las que aparecen precedidas por el carácter
> sólo están en el segundo fichero (ordenar2.c)
2.
Con diff -c ordenar1.c ordenar2.c si queremos verlo con el contexto copiado, o con diff -u ordenar1.c ordenar2.c si queremos que el
contexto esté unificado.
3.
Basta con ejecutar: diff -r Dir1 Dir2
1.14.
Utilidad patch
1.
diff -u ordenar1.c ordenar2.c >patch ordenar1-2.diff
2.
patch ordenar1.c patch ordenar1-2.diff
3.
diff -Nur Dir1 Dir2 >patch Dir1-2.diff
4.
Atención: primero hay que eliminar el directorio destino (rm -r Dir2).
Luego ejecutad:
patch -p0 <patch Dir1-2.diff
1.15.
Utilidad m4
1.
define(saluda,hola)
2.
define(saluda,hola $1)
3.
define(saluda,‘hola $1’)
4.
6
define(saluda,
‘ifelse(‘$1’,‘Jose’,
‘Hola, viejo amigo.’,
‘Hola, ‘$1’.’)’)
saluda(‘Jose’)
1.16.
Utilidad indent
1.
indent -gnu memoria.c
2.
indent -kr memoria.c -o memoria-kr.c
3.
indent -orig memoria.c -st
7
2.
2.1.
Utilidades para ficheros binarios
Utilidades ar/ranlib
1.
ar -t /usr/lib/libm.a o
ar -tv /usr/libm.a si se desea información suplementaria.
2.
ar -x /usr/lib/libm.a e pow.o
3.
ar -r libmmia.a e pow.o
4.
ar -s libmmia.a o ranlib lib.a
5.
ar -d libmmia.a e pow.o
2.2.
Utilidad nm
1.
nm e pow.o
2.
nm /usr/lib/libm.a
3.
nm /usr/lib/libstdc++XXX.a o
nm -C /usr/lib/libstdc++XXX.a si se quiere ver en formato de C++
2.3.
Utilidad size
1.
size ordenar.o
2.
size ordenar
3.
Porque estamos incluyendo la memoria usada por las librerı́as.
4.
Porque una cosa es lo que ocupa el programa cuando se almacena en disco y
otra cosa es la memoria que necesitará en un principio para funcionar.
2.4.
1.
Utilidad strip
gcc -Wall ordenar1.c -o ordenar1
ls -l ordenar1
nm ordenar1
strip ordenar1
ls -l ordenar1
nm ordenar1
8
2.5.
Utilidad strace
1.
strace -o sal ordenar1
2.
Entre otras se puede observar una lı́nea que dice: open(/lib/tls/libc.so.6",
O RDONLY) = 3
3.
Ejecutad strace -o sal vi y salid inmediatamente del editor. A continuación inspeccionad el fichero sal en busca de llamadas a la función para
abrir ficheros (open).
4.
Primero hay que averiguar su PID y luego ejecutar:
strace -p PID
9
3.
3.1.
Utilidades genéricas
Utilidades gzip/bzip
1.
gzip stdio.h
2.
gzip -l stdio.h.gz
3.
gzip -d stdio.h.gz o gunzip stdio.h
4.
gzip -c /usr/include/stdio.h >stdio.h.gz
5.
Para comprimir midiendo el tiempo:
time gzip -# grande
donde # es un número del 1 al 9 según la velocidad elegida.
Para ver la tasa de compresión: gzip -l grande.gz
6.
Para comprimir midiendo el tiempo:
time bzip2 -# grande
donde # es un número del 1 al 9 que indica la velocidad elegida.
7.
gzip -t grande.gz
8.
gzip -t mal.gz
3.2.
Utilidad tar
1.
tar -cf include.tar /usr/include
2.
tar -tf include.tar
3.
tar -xf include.tar
4.
tar -czf include.tgz /usr/include
5.
tar -cjf include.tar.bz2 /usr/include
6.
tar -tf include.tar */stdio.h
7.
tar -xf include.tar */linux
8.
tar -cMf /dev/fd0 include.tgz
9.
tar -xf /dev/fd0 o tar -xMf /dev/fd0 si viene en varios disquetes.
10.
tar -tf include.tgz -N ’2003-01-01’
11.
tar -tf include.tgz -N ’50 days ago’
10
3.3.
Utilidad find
1.
find /usr/include -name iostream.h
2.
find /usr/include -size +50k
3.
find /usr/include -size +50k -not -name ’*.h’
4.
find /usr/include -not -name ’*.h’ -type f
5.
find /usr/include -name ’*.h’ -exec grep MAXDOUBLE ’{}’ ’;’ -print
6.
find . -name ’core.*’ -exec rm ’{}’ ’;’
11
Descargar