Taller 5 Linux PDF
Taller 5 Linux PDF
Taller 5 Linux PDF
Ya en talleres anteriores se ha visto algunos comandos útiles. Ahora van otros cuantos más
que conviene conocer. La descripción que se hace aquí de ellos es bastante básica, pero
siempre puedes recurrir a su página man.
head y tail
head sirve para mostrar (o redirigir a otra parte) el principio de un fichero o de la información
prove- niente de un pipe o tubería. tail tiene exactamente el mismo cometido, con la
diferencia de que este último, lo que muestra es el final. Ejemplos:
$ head mifichero ¹
$ head -n 30 mifichero | less ²
$ tail mifichero ³
$ tail -n 35 mifichero > final_de_mifichero ₄
² La opción -n se usa para indicar a continuación el número de líneas que se deben mostrar
desde el principio del fichero (o como en este caso, enviar a less).
³ Cumple exactamente la misma función que head, a diferencia de que mostrará las 10
últimas líneas del fichero.
Además de leer desde un fichero, estos dos comandos pueden leer desde stdin, así que se
puede "conectarlos" a pipes o tuberías. Suponga que se está instalando un programa desde
un paquete de código fuente, y que se ejecuta make. Imagine que, por cualquier motivo,
make produjese una larguísima salida de errores, tantos que no se pudiese ver cuál es el
primero de ellos. Pero se necesita saber cuál fue el primer error emitido para poder
solucionar el problema.
Atención a la primera parte del comando. Recordando que las redirecciones de este tipo se
procesan de derecha a izquierda (las de 1>... 2>...), lo que se hace primero es despreciar
la salida normal, y posteriormente, enviar stderr(la salida con errores) a la salida estándar,
que con el pipe se convierte en la entrada estándar del comando head, que lee
automáticamente de ella, obteniendo así el resultado.
Una opción realmente útil de tail es la opción -f. Con ella, tail escribirá el final del fichero en
stdout y además permanecerá activo. Si algo se añade al fichero desde otro sitio también
lo mostrará. Por ejemplo, abre una terminal y escribe:
$ touch fichero
$ for i in a b c d e f; do echo $i >> fichero; done
$ tail -f fichero
a
b
c
d
e
f
Mantén esta terminal abierta y pásate a otra terminal. En esta otra escribe:
Vuelve ahora a la primera terminal y observa como hoooooola también ha sido sacado por
pantalla por tail -f. Esta opción es especialmente útil para examinar ficheros de log (registro
de actividad) del sistema mientras se hace cambios en él como se ve en su momento.
El comando cut
cut tiene como uso principal mostrar una columna de una salida determinada. La opción -d va
seguida del delimitador de los campos y la opción -f va seguida del número de campo a
mostrar. Por ejemplo:
El "delimitador" por defecto es el tabulador, se cambia con la opción -d. Tiene algunas
otras opciones útiles, consulta su página man.
El uso que harás de estos comandos será más bien esporádico, por lo que simplemente se
cita. En sus respectivas páginas man encontrarás opciones específicas para ellos.
df
df (Disk Free) se informa del espacio disponible de las unidades de disco (locales o de red)
que se tenga montadas.
# df
S.ficheros 1K-blocks Used Available Use%
Montado en
/dev/hdd1 6040288 3247924 2485528 57% /
/dev/hda2 11719052 3526412 8192640 31% /home
None 128008 0 128008 0%
/dev/shm
Una opción útil de la que dispone es -m, que mostrará el espacio en MegaBytes.
En primer lugar, se entiende cómo se gestiona la memoria física del sistema en Linux. El
kernel tiende a tomar, primeramente, la memoria que necesitan los procesos que corre.
Conforme el sistema está en marcha más tiempo, el kernel toma prácticamente la totalidad
de la memoria física existente, dejando solamente unos cuantos MB de memoria
físicamente libres. Muchas veces esto lleva a los principiantes en Linux a confusión,
llegando a creer que la gestión de la memoria que hace Linux no es eficiente.
¿Y para qué usa esa memoria restante Linux? Pues la usa como buffers, esto es, guarda
datos para un más rápido acceso al disco duro, datos de programas que se abrieron, por si
se vuelven a abrir, que se invierta mucho menos tiempo en ello, etc. En definitiva, aprovecha
la memoria físicamente libre para agilizar tareas básicas. Por otro lado, esto es bastante
lógico... ¿para qué te sirve tener una gran cantidad de memoria RAM física libre? ¿Y si la
usamos para hacer que el sistema vaya más rápido? Mucho mejor ;-), ¿no te parece?
Si la carga de tareas (procesos) que el sistema tiene que soportar lo carga y estos procesos
(o programas ejecutándose) necesitan esta memoria que se está usando como buffers,
Linux borra estos buffers de la memoria y la asigna a las nuevas tareas que la necesiten.
En definitiva, ¿cómo podemos saber la memoria que tenemos libre y lo que ocupa cada cosa
(procesos por un lado y buffers por otro)? La respuesta se tiene en el comando free (la
salida por defecto es en KBs).
# free
En el equipo de este ejemplo, hay 256 MB de RAM física instalada. De ellos, solamente 4
MB están libres (de lo que se deduce que la máquina lleva tiempo encendida y que se han
escrito buffers en parte de la RAM). En la línea -/+ buffers/cache se tiene en used la cantidad
de memoria estimada que los procesos del sistema están usando, y en free, la suma de la
memoria usada para buffers y caché más la físicamente libre. Así, los procesos sólo están
necesitando 60 MB de RAM, y el resto de memoria usada está simplemente agilizando el
sistema.
Ahora se fija en la última línea. Ahí se tiene el uso de la partición SWAP de intercambio de
datos. Esta es una buena medida para saber lo "cargado" que está el sistema. En este caso
hay escritos menos de 3 MB en la memoria SWAP, lo que pone de manifiesto que la máquina
anda holgada.
El comando du indica el espacio que ocupa un directorio del sistema de ficheros y todo lo
que tiene debajo de él.
Con él puede comprobar dónde se acumula la mayor cantidad de espacio en disco del
sistema.
mc
Este es un programa que ofrece una interfaz de usuario basada en texto bastante cómoda,
generalmente para hacer operaciones con ficheros (especialmente réplicas de un directorio
y todo lo que haya debajo de él o copias grandes de una gran parte del sistema de ficheros),
o tener una "vista de pájaro" del sistema de ficheros.
Su uso es intuitivo (y todavía más sencillo si tenemos habilitados los servicios de ratón en
la consola), y por ello no merece mucha más explicación. Recuerda este comando porque
será útil en el futuro.
file
Este comando indicará qué tipo de datos contiene el fichero que le pase como primer
argumento.
gcc, el compilador de C
Si quieres hacer alguna cosa en C y no sabes todavía cuál es el compilador en Linux, gcc
es el GNU C Compiler. Si no lo tienes, necesitarás instalarlo desde los discos de tu
distribución. La mayoría de los sistemas UNIX responderán al comando cc como C
Compiler, y ejectuarán el compilador que haya instalado en el sistema, en este caso, gcc.
Para crear un ejecutable desde los ficheros de código C, basta con que se haga:
uname
Indica nombre y versión del sistema operativo. Usado con la opción -a muestra toda la
información.
$ uname -a
Linux hostname 2.4.21 #1 SMP Thu Sep 4 20:50:32 CEST 2003
i686 unknown
which
Le pasa como primer argumento un comando, y dirá, de los directorios que existen en
$PATH, en cuál de ellos está, por ejemplo:
$ which ls
/bin/ls
touch
touch cambia la fecha de creación o de modificación de un archivo. Si no existe, lo crea
vacío. Lo más conveniente es leer su página del manual: man touch
$ w
19:05:51 up 50 min, 4 users, load
average: 0.00, 0.02, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
use :0 - 18:16 ?xdm? 0.0 ? -
r1 0s
use pts/0 :0.0 18:18 0.00s 0.0 0.00 w
r2 9s s
use pts/1 :0.0 18:31 4.00s 4.0 4.06 vim
r2 8s s chapter09.xm
l
use pts/2 :0.0 18:33 32:03 6.9 0.02 -bash
r 0s s
$ who
ricardo :0 Sep 5 18:16
user1 pts/0 Sep 5 18:18 (:0.0)
user2 pts/1 Sep 5 18:31 (:0.0)
user2 pts/2 Sep 5 18:33 (:0.0)
El comando uptime informará del tiempo que lleva la máquina encendida, además de
algunos otros datos:
$ uptime
19:09:19 up 53 min, 4 users, load average: 0.00, 0.00,
0.04
El comando date mostrará la hora del sistema y, además, permite cambiarla con la opción
-s.
En Linux se tiene dos opciones si se quiere buscar archivos en los discos. Difieren en que
son conceptos totalmente distintos que a su vez cumplen necesidades distintas. En primer
lugar, find es el comando que se usa para buscar normalmente en el sistema de ficheros, y
lo examina cada vez que se quiere hacer una búsqueda.
El comando locate se complementa con el comando updatedb. Este último comando,
cuando se ejecuta (sin opciones ni argumentos), crea una especie de “base de datos” de
todos los ficheros y directorios del sistema. De este modo, cuando se quiere buscar algo
con locate, simplemente este programa busca en esta base de datos, lo cual es mucho más
rápido que buscar en el sistema de archivos directamente. Obviamente esto tiene un
inconveniente; si no se actualiza esta base de datos con updatedb, la información que dará
locate no será cierta.
Uso de find
El primer argumento (directorio) es el directorio desde el que se quiere que se busque (la
búsqueda es recursiva por defecto, buscará también en todos los directorios que haya por
debajo), la opción (- name) es el modo de búsqueda (en este caso por nombre), y el tercer
argumento (en este caso nombre) son los criterios de búsqueda. Algunos ejemplos:
Nota que para poder usar los wildcards que se conocen, simplemente se debe encerrar el
criterio entre comillas simples. Se puede buscar por criterios de muchísimos tipos, para más
detalles, mira la página man. Recuerda que puedes detener la búsqueda igual que se
detiene cualquier otro comando con Control+C, y redirigir la salida como también se ha
aprendido; find puede ser muy útil en tus scripts.
Cuando siendo usuarios normales se buscan ficheros fuera del directorio personal, se
mostrarán algunos mensajes de error porque habrá directorios a los que no tendrá permiso
para entrar a buscar (p.e. /root). Estos mensajes de error despistarán a la hora de interpretar
la salida, así que se puede enviar stderr a /dev/null (ya sabes, find ... 2>/dev/null).
Uso de locate
A continuación, el uso de locate no es nada del otro mundo. Además, es mucho menos
flexible que find (lo cual es perfectamente comprensible una vez que se han explicado su
forma de funcionar). locate sólo sirve para buscar ficheros por nombre, y en todo el sistema
de archivos. Ejemplos:
# locate so
[... muuucha salida ...]
# locate ’*.so’
[... las librerías del sistema ...]
La similitud con find es que los criterios con wildcards deben ser entrecomillados con
comillas sim- ples. Las diferencias son: no permite especificar directorio, busca en toda la
ruta al fichero (no sólo en el nombre del fichero), y además, si se le pasa un criterio sin
wildcards, devolverá todos los nombres de fichero cuya ruta completa contenta ese criterio,
a diferencia de find que sólo devolvería los ficheros con ese nombre exacto.
Ya se viene usando esta útil funcionalidad algún tiempo. Es muy útil disponer de
documentación en formato electrónico en el sistema, de esta forma no hay que memorizar
las opciones de un comando de memoria.
Existen varias secciones en el manual del sistema, cada una de ellas destinada a un tipo
de comandos. También, hay páginas que documentan funciones de lenguajes de
programación si esta documentación está instalada. Puedes ver cuáles son estas
categorías con man man; además ahí hay mucha información interesante.
Puede ocurrir que existan dos páginas del manual que se llamen igual y que estén en
secciones distintas. man sólo mostrará la primera de ellas, así que, si se quiere una
específica, se debería indicar su sección (man SECCION comando).
Algunas distribuciones de Linux no traen instaladas las páginas del manual en castellano
por defecto, pero pueden tener ese paquete en los discos de instalación o en Internet,
llamado generalmente manpages-es o nombres similares.