El Sistema Operativo es un conjunto de programas, cuyo objetivo final es ofrecer una interfaz entre el hardware
y los usuarios, de forma que el usuario no necesite conocer las peculiaridades de utilizacin de las diferentes
componentes del hardware. Su tarea consiste principalmente en gestionar los recursos del sistema informtico
(memoria, procesador, dispositivos de entrada/salida, etc.).
Adems de los programas propios del Sistema Operativo, uno de los programas de aplicacin ms importantes
es el intrprete de comandos shell , puesto que hace las funciones de intermediario entre el usuario y el
Sistema Operativo. La shell se encarga de leer, interpretar y ejecutar las rdenes de los usuarios. Por lo tanto
conociendo el conjunto de comandos que sabe interpretar la shell es posible acceder a todas las prestaciones que
ofrece el sistema.
Linux (as como UNIX) es un sistema que soporta la multitarea esto significa que puede haber varios programas
ejecutndose simultneamente, y multithreading (varios hilos de ejecucin por programa). Adems es un
sistema interactivo, lo que proporciona una comunicacin directa entre el usuario y el sistema (el intermediario
ser la shell) y multiusuario, lo que permite que varios usuarios trabajen simultneamente. Tambin permite que
un mismo usuario trabaje en varias consolas a la vez. En este captulo veremos los comandos ms generales y
tiles en lo que respecta a la administracin del sistema, los comandos elementales para la gestin de archivos y
otros comandos generales.
Nota: Los comandos son programas.
Archivos y directorios
Un archivo es una coleccin de informacin definida por su creador, relacionada y agrupada bajo un nombre
comn. Todo el trabajo que hacemos est almacenado en archivos y stos pueden representar programas, textos,
datos, etc. Para elegir un nombre de archivo normalmente se utiliza una secuencia de caracteres alfanumricos
(letras y dgitos), un punto . y otra secuencia de letras (extensin) que representa el tipo de fichero. Por
ejemplo: pract1.p, donde la extensin p indica que es un programa en Pascal.
Hay que evitar utilizar caracteres en los nombres de fichero que tengan un significado especial para el intrprete
de comandos (la shell), por ejemplo "/", "#", "$", etc.
El sistema operativo ofrece la posibilidad de organizar los archivos en directorios. Bsicamente un directorio es
un contenedor de un grupo de archivos. Adems de archivos los directorios pueden a su vez contener otros
directorios, que a vez pueden contener otros y as sucesivamente.
rbol de directorios, la jerarqua
que conforma al sistema, o lo que /
As es comollamar
podramos se va filesystem.
armando el
La estructura de directorios
jerrquica en forma de rbol, ya
la nombramos en el Captulo 1.
Ya dijimos tambin que el rbol
se va formando debido a que cada bin etc usr
directorio puede bifurcar hacia
otros directorios y archivos.
dev practicas tmp
Cuando un usuario accede al sistema se ubica automticamente en su propio directorio, que se denomina
directorio de trabajo o home directory. A travs de los comandos adecuados se puede desplazar hacia arriba o
hacia abajo en el rbol de directorios, modificando el directorio actual.
/
practicas
4 5 /ad1/usua
rio1/ejem
.p
ejem.p datos practica1
Nota: Pese a que el nombre de un archivo o directorio lo identifica unvocamente, es posible tener nombres
iguales siempre que su nombre de camino desde la raz sea diferente.
No siempre es necesario especificar pathnames completos para hacer referencia a archivos, se puede indicar el
camino relativo a partir del directorio actual o el inmediatamente superior al actual:
Si el pathname empieza por "/" se parte del directorio raz
Si el pathname empieza sin " /" se parte del directorio en que estemos en ese
instante Con "." se indica el directorio actual
Con ".." se indica el directorio inmediatamente superior al actual.
Ciertos caracteres del pathname son interpretados por la shell de una forma
especial: * equivale a cualquier cadena de caracteres.
? equivale a un carcter cualquiera.
[ ] indica uno de entre un conjunto de posibles caracteres.
Ejemplo: suponga que tenemos un directorio con los siguientes archivos: tp1.c, tp2.c, tp3.c, tp4.c, tp1.o,
tp2.o, tp3.o, gdb.
tp* indicara cualquier fichero salvo gdb
* indicara cualquier fichero , , y
tp?.c indicara los ficheros
tp1.c tp2.c tp3.c tp4.c
tp1.? indicara tp1.c y tp1.o
??? indicara gdb (es el nico compuesto de 3 caracteres)
????? indicara cualquiera excepto gdb (el resto tiene 5 caracteres)
tp[123].c indicara tp1.c, tp2.c y tp3.c
tp[14].c indicara tp1.c y tp4.c
tp[1-3].c indicara tp1.c, tp2.c y tp3.c
tp[1-4].c indicara tp1.c, tp2.c, tp3.c y tp4.c
En el caso que se permita el acceso de mltiples usuarios a los archivos, sera deseable controlar quin y en que
forma puede acceder a los mismos. Para ello LINUX asocia a cada archivo y directorio permisos de lectura,
escritura y ejecucin.
Nota: El tema de permisos de archivos y directorios est incluido en el
captulo Administracin de usuarios.
Directorios (directory)
Los archivos directorios son una instancia especial de los archivos normales. Los directorios listan las
localizaciones de otros archivos, algunos de los cuales pueden ser otros directorios. En prrafos anteriores
encontrar una descripcin ms completa.
Nota: un enlace duro no puede existir entre dos archivos de particiones separadas. Esto es debido a que el
enlace duro se refiere al archivo original por i-nodo y el i-nodo de un archivo difiere entre sistemas de archivos
Comandos de Linux
Cuando entramos al sistema, luego de loguearnos, nos encontramos en nuestro directorio de trabajo por
defecto. Si me logue en el sistema como root, estar en /root, si me logue como pepe, voy a estar en
/home/pepe. El home del usuario es el camino relativo o virtual, desde la raz del rbol hasta nuestra ubicacin
actual, es decir el directorio actual. Si ejecutamos la instruccin pwd (print working directory) veremos como
respuesta nuestro home. A partir de ese punto podemos movernos por el rbol de directorios.
-a Nos muestra tambin los archivos ocultos (los que empiezan con .)
-l Hace un listado ms detallado, especificando para cada archivo sus permisos, el nmero de enlaces
rgidos ,el nombre del propietario, el nombre del grupo al que pertenece, el tamao en bytes y la
fecha de modificacin. Para una explicacin ms detallada vea Administracin de usuarios.
-F Coloca al lado de cada nombre listado un asterisco si es un archivo ejecutable (programa), o una
barra si es un directorio.
Ejemplo:
Haciendo un ls tendremos algo similar a lo
siguiente:
$ ls
Shell Shell.sgml
Ejemplos:
$ cp programa.c otro.c el archivo otro.c pasa a tener el contenido de programa.c. El
archivo programa.c no se modifica.
$ cp programa* .. copia todos los ficheros que empiecen por la secuencia de caracteres programa
al directorio superior.
Renombrar y mover ficheros (move): mv [opciones] arch_origen arch_destino
Este comando tiene dos funciones: mover archivos a otro lugar y/o cambiarles el
nombre. Ejemplo:
$ mv arch1 arch2 Si arch2 no existe, equivale a renombrar arch1 como arch2. Si arch2
existe, destruye arch2 y arch1 pasa a llamarse arch2.
Sus opciones principales son:
-f Borra los archivos de destino existentes sin preguntar al usuario. -i
Lo contrario que -f. Pregunta al usuario.
Ejemplo:
$ mv tp.txt tpnuevo.txt el archivo tp.txt pasa a llamarse tpnuevo.txt. Si ya exista un
archivo de nombre tpnuevo.txt, su contenido se pierde.
$ mv tp.txt ../tp.txt traslada el archivo tp.txt al directorio situado encima del actual.
Eliminar un fichero (remove): rm [opciones] archivos(s)
Este comando elimina el archivo (o los archivos) mandados como parmetro. Para que este comando funcione
es necesario tener permiso de escritura y, por lo tanto, de borrado sobre los archivos.
Ejemplo:
$ rm datos.jj elimina el archivo de nombre datos.jj.
Las opciones ms comunes son:
-f Fuerza el borrado de un archivo sin pedir confirmacin.
-i Forma interactiva, ahora s pide confirmacin para archivo o directorio a borrar.
-r Borra los contenidos de directorios recursivamente. Esta opcin se utiliza cuando quiero eliminar un
directorio que contiene informacin. Ms adelante ver la forma de borrar un directorio con otro
comando.
Ejemplo:
$ rm webserver.c repetidor.c elimina los archivos webserver.c y repetidor.c
$ rm -i webserver.c repetidor.c lo mismo, pero pide confirmacin para el borrado.
Ver el contenido de archivos
Los comandos que tenemos para mostrar contenido de archivos son: more, less y cat (del ingls concatenate:
poner uno atrs del otro). Son visores de texto, no editores. Ms adelante veremos el programa editor por
excelencia, el vi.
cat [opciones] [archivo1 [archivoN]]
Vuelca en pantalla el contenido de uno o ms ficheros de texto. Si hay ms de un fichero, el resultado es la
concatenacin de los contenidos de cada uno de ellos. Si el fichero (o los ficheros) no existen, devuelve un
mensaje de error. Si ningn archivo es proporcionado, o se encuentra el argumento - , cat lee de la entrada
standard.
Nota: Se pueden desplegar varios archivos en el monitor uno despus de
otro separando los nombres de archivo por medio de un espacio.
Si el archivo tiene ms lneas que una pantalla, sta se recorrer automticamente hasta que se haya llegado al
final del archivo, para ver el contenido de un archivo por pginas se puede utilizar el comando more.
more archivo(s)
Vuelca en pantalla el contenido de uno o ms archivos, adecuando su presentacin al nmero de lneas de la
terminal. Si hay ms de un archivo, el resultado es la representacin concatenada de los contenidos de cada uno
de ellos. Si el archivo no existe, devuelve un mensaje de error. Con el comando more podemos ver el contenido
del archivo desde el comienzo de ste, y podemos ir bajando en el texto hasta el final. Pero si queremos volver
el comienzo del archivo, no nos deja. En estos casos el comando adecuado es less.
less archivo
Aqu s podemos recorrer el archivo completamente, de principio a fin, y del final al principio.
Podemos scrollear el archivo.
Page-Up o Page-Down se utilizan para o sea, subir y
Nota: Combinando las teclas Shift y pasearse o bajar la pantalla. Esto
navegar en la pantalla, funciona tambin bajo xterm.
Otros comandos
Tenemos en GNU/Linux la posibilidad de concatenar comandos, de redireccionar la salida de un comando a otro, o
a archivos. Esto se llama segn las traducciones al espaol, plomera o fontanera, porque para muchas de estas
tareas se utiliza el smbolo pipe, tambin llamado caera o tubo.
Los smbolos que se utilizan son <, >, >>, |, ;, ` `
$ cat arch1 > arch2 vuelca el contenido de arch1, pero en lugar de hacerlo en pantalla, lo hace en
arch2.
$ ls l > prueba en lugar de mostrar por pantalla el listado "largo" del directorio actual, lo
vuelca al archivo prueba. Si tuviera datos en el archivo prueba, me pisa con
la nueva informacin.
$ ls l >> prueba debe hacer esto si desea que la informacin nueva se agregue a lo que ya
contiene el archivo prueba.
Tambin es posible suministrar los datos de entrada de un programa desde un archivo, y no desde el teclado,
mediante <.
Ejemplo:
$ grep root < /etc/passwd
Ac lo que hace es buscar en el archivo /etc/passwd si hay un usuario llamado
root. (el comando grep se ver mas adelante)
$ ls > arch $
wc < arch
cuenta el nmero de palabras (wc por word count) que hay en arch, y lo que hay
en arch no es ms que el resultado de hacer ls.
Utilizacin de pipes: |
Las pipes son un mecanismo por el cual la salida de un programa se puede enviar como entrada de otro programa.
Los programas individuales se pueden encadenar juntos para convertirse en unas herramientas extremadamente
potentes.
Ejemplo:
$ cat /etc/passwd | less
El comando cat nos muestra el contenido del archivo /etc/passwd. El archivo
se nos va de pantalla, entonces si se lo enviamos a less, podremos navegar por
todo el contenido del archivo.
Nota: Este pipe es muy til para abrir archivos muy grandes.
$ ls -l | more
Aqu hacemos el listado de un directorio y para ir vindolo pantalla a
pantalla, envo la salida a more.
$ comando1 [argumento1] | comando2 [argumento2]
Esta lnea genera el mismo resultado que la siguiente secuencia: $
comando1 [argumentos] > temporal
$ comando2 [argumentos] < temporal $
rm temporal
Si quisiera concatenar comandos, de forma que no tenga que esperar el resultado de un comando para ejecutar el
siguiente, lo que puede hacer es escribirlos todos, separndolos con el smbolo punto y coma ( ;).
Ejemplo:
$ cd /etc ; ls l
Apstrofes de ejecucin
A veces necesitamos ejecutar algn comando que necesita de otro antes. Esto, sobre todo es muy til cuando
programe scripts. Veamos ejemplos para que se entienda mejor.
var1=`ps -ax | grep $1 | cut c=1-5`
En este ejemplo, si no pusiera todo lo que est del lado derecho de la igualdad,
entre apstrofes, el sistema dara error. Los apstrofes lo que hacen, es encerrar
la expresin, de forma que se ejecute completa, y luego lo asigna a la variable
var1.
Veamos otro ejemplo:
kill -9 `cat /var/run/gdm.pid`
En este caso, quiero matar una tarea ( gdm). Pero el programa kill , para
terminar una tarea necesita s o s el nmero de proceso ( pid). Como no lo s, lo
que hago es decirle que lo saque del archivo gdm.pid. El comando cat me
despliega el archivo. Este archivo solo contiene un nmero, que es lo que le llega a
kill -9.