Lo primero que necesitamos es tener una cuenta. Cuando el administrador
del sistema nos abre una cuenta nos dará un username y un
password. Para entrar en la cuenta escribimos nuestro
username
donde pone login. Luego nos pide el password. Tanto el username
como el password son sensibles a mayúsculas o minúsculas.
Una vez dentro de la cuenta utilizamos una terminal (por ejemplo una
xterm) para ejecutar los comandos.
Podemos empezar por cambiar el password que nos ha dado el administrador
del sistema con el comando:
nispasswd que nos pedirá nuestro password anterior y el nuevo (lo
pide dos veces para evitar errores). La elección del password,
por razones de seguridad, debe evitar palabras de diccionarios, es conveniente
mezclar números con letras o algún caracter especial.
Sintaxis de los comandos
La forma básica de un comando unix consta de tres partes aunque
no todas tienen que estar presentes. La primera, que es necesaria siempre,
es el nombre del comando. Luego vienen las opciones que son letras que
se ponen precedidas del signo - y que le indican al comando que
opción deseamos (algunas de estas opciones requieren un argumento).
Por último están los argumentos del comando que pueden ser
opcionales o no dependiendo del comando en concreto. Si cometemos errores
en la sintaxis, como una opción inexistente, se nos indicará
por pantalla cual es la sintaxis de ese comando con sus opciones y argumentos,
indicando entre corchetes [] los que son opcionales. También
podemos ver la sintaxis en la ayuda del comando. Un ejemplo de comando
con opciones y argumentos es:
ls -la dir1l
Comandos más usados
Hay una serie de comandos que se usan muy frecuentemente que se describen
brevemente en las siguientes secciones.
man
Nos permite obtener ayuda sobre cualquier comando (man nos muestra la página
del manual correspondiente al comando).
Típicamente las secciones que trae la ayuda son:
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
ENVIRONMENT
EXAMPLES
FILES
SEE ALSO
WARNINGS
DIAGNOSTICS
BUGS
por ejemplo ejecutando:
man man
Se nos muestra la página de ayuda sobre el comando man. En la
sección SYNOPSIS se nos muestra las distintas opciones que tiene
el comando.
Utilizando la opción -k en el comando
man y una
palabra clave o frase entre comillas, mostrará el nombre de todos
los comandos que en la sección name incluyen esa palabra
o frase. Por ejemplo para buscar que comandos pueden servir para copiar
ficheros:
man -k 'copy files'
Otra forma de consultar el manual es con el comando xman que nos
abre una ventana donde tendremos diferentes opciones. También podemos
utilizar en las SUNs el comando answerbook que nos abre un "navegador"
donde podemos consultar diferentes documentos no sólo de UNIX (en
la nueva versión de Solaris instalada en el instituto ya no esta
disponible este comando sino answerbook2 que nos saca la ayuda en
Netscape).
Comandos básicos relacionados con directorios
pwd
Nos muestra el directorio en que estamos trabajando.
ls
Nos muestra los ficheros contenidos en un directorio. Tiene varias opciones
muy útiles como -l para un formato largo con una serie de
características de cada fichero. La opción -a muestra
los ficheros ocultos (ficheros que empiezan por el caracter .).
Se puede ordenar la salida por diferentes opciones como por fecha o alfabéticamente.
La información que nos muestra cuando empleamos la opción
-l es:
Una serie de 10 caracteres donde el primero nos informa del tipo de fichero
que es y los nueve restantes sobre los permisos que tiene el fichero.
Un número que indica el número de links al fichero.
El propietario.
El grupo al que pertenece.
El tamaño en bytes
La fecha de la última modificación
El nombre del fichero (si es un link simbólico se muestra
también el fichero al que hace referencia).
Este comando y otros como cp, rm, etc pueden usar una serie
de caracteres llamados "wildcards" que nos permiten seleccionar
ficheros que siguen un cierto patrón en su nombre. Estos caracteres
son:
* Representa cualquier cadena de carcteres
? Representa un sólo caracter
[...] Podemos poner dentro una lista de caracteres que son los
posibles para un solo caracter.
Ejemplos:
cp * ~/textos
Copia todos los ficheros del directorio actual al subdirectorio textos
de mi home.
Si tenemos una serie de ficheros cap1.tex cap2.tex cap3.tex capitulo.tex,
el comando
mv cap?.tex ~
nos moverá los tres primeros a nuestro home.
ls b[Aa]*
Nos hará una lista de todos los ficheros cuya segunda letra
sea una A o a y empiecen por b. En los corchetes puede incluirse un rango
como por ejemplo [0-5] [a-z] [A-Z], que respectivamente significan cualquier
número del 0 al 5, cualquier letra minúscula y cualquier
letra mayúscula.
mkdir
Nos crea un nuevo directorio.
rmdir
Borra un directorio.
cd
Cambia de directorio. Se puede dar la ruta completa al directorio (cd
/home/...) o podemos darla relativa al directorio en que estamos (este
directorio se representa por el caracter . mientras .. representa
el inmediatamente superior). También podemos dar la ruta relativa
a nuestro home con el caracter ~ (cd ~/texto). Para ir a nuestro
home basta con ejecutar cd sin argumentos.
Comandos básicos relacionados con el manejo de ficheros
cp
Es el comando para copiar ficheros, por ejemplo:
cp unix.tex ~/curso/texto.tex
copia el fichero unix.tex a /home/fcabrera/curso/ cambiandole el nombre
a texto.tex . La opción -i nos preguntará si queremos
que sobreescriba en el caso de que el nombre del fichero coincida con el
de otro fichero que ya existe. La opción -r permite copiar
directorios incluyendo todos los ficheros y directorios que cuelgan de
él.
mv
Es similar al comando anterior pero no hace una copia sino mueve el fichero
(lo cambia de nombre). También está disponible la opción
-i.
rm
Borra ficheros. También está la opción -i que
nos pide confirmación para borrar cada fichero y la opción
-r para borrar todos los ficheros que cuelguen de un directorio.
ln
Permite realizar links entre ficheros. Cada fichero tiene un inode
number y al menos un nombre. La correspondencia entre un inode
y el nombre es un link y podemos asociar varios nombres a un mismo
fichero. Para crear un link ejecutamos el comando:
ln filename1 linkname
Se puede también hacer un link de varios ficheros a un
directorio. Sin embargo no podemos hacer links entre directorios,
esto sólo lo puede hacer el super-user. Si queremos hacer un link
entre directorios hay que utilizar la opción -s que crea
lo que se llama un link simbólico. Por ejemplo para hacer
un link simbólico a un directorio llamado /net/oso/scratch/fcabrera
desde nuestro home llamandolo scratch sólo tenemos que situarnos
en nuestro home y ejecutar:
ln -s /net/oso/scratch/fcabrera scratch
Ahora tendremos en el home un directorio scratch que al acceder a él
acccedemos a
/net/oso/scratch/fcabrera . No es una copia de este
directorio sino que físicamente sólo existe el directorio
en el disco. También es necesario usar la opción -s
entre ficheros normales, si se encuentran en dispositivos físicos
distintos. Para borrar un link se usa el comando rm que no
borra el fichero sino el link a ese fichero. Por ejemplo:
rm scratch
no borra el directorio sino el link a /net/oso/scratch/fcabrera.
find
Permite buscar un fichero en la estructura de directorios. Hay varias opciones
de busqueda como por ejemplo para buscar los ficheros con un determinado
nombre, ficheros que tengan un determinado tamaño, que hayan sido
modificados en los últimos n dias etc. Por ejemplo:
find . -name text
buscará cualquier fichero que se llame text que se encuentre
en el directorio actual o cualquiera que cuelgue de él.
Otro ejemplo que muestra una sintaxis más complicada es el siguiente:
find . \( -name a.out -o -name '*.o' \) -mtime -3 -exec rm {} \;
Que borrara los ficheros a.out y los que terminen en .o que han sido
modificados en los últimos 3 dias. La barra \ antes del paréntesis
es para evitar que la shell le de un significado especial, las comillas
son necesarias cuando se utilizan wildcards en los patrones de busqueda.
Comandos útiles para trabajar con ficheros de texto son:
page y more
Para mostrar un fichero por pantalla de forma que espere cuando el terminal
este lleno a que pulsemos alguna tecla.
cat
Encadena una lista de ficheros escribiendolos uno a continuación
de otro en la salida estandar.
grep
Busca un patrón de caracteres en uno o varios ficheros. Nos mostrara
las lineas en que encuentre el patrón y si la busqueda se realiza
en más de un fichero nos indica primero el nombre del fichero. Por
ejemplo el comando:
grep -i galaxia *.tex
Nos motrara cada linea que contenga la palabra galaxia en cualquier
fichero con extensión .tex, indicando en que fichero se encuentran.
La opción -i indica que no importa si es en mayusculas o
minusculas.
sort
Permite ordenar las líneas de uno o varios ficheros, hay varias
opciones para realizar la ordenación. Por ejemplo:
sort l1 l2 +1
ordena los ficheros l1 y l2 por la segunda palabra (+1) y la salida
es dirigida a la salida estandar.
diff
Muestra las diferencias línea pínea de dos ficheros de
texto.
cmp
Compara dos ficheros y nos muestra el byte y número de línea
donde ocurre la primera diferencia.
head y tail
El comando head muestra las n primeras líneas de un fichero
y tail las últimas líneas.
Comandos útiles para examinar el espacio en disco memoria, procesos,
usuarios, etc
df
Para ver la cantidad de espacio en disco. La opcion -k nos lo da
en kilobytes.
du
Nos da la cantidad de disco usado por el directorio y todos los subdirectorios
que cuelgan del directorio especificado. La opción -k nos
lo da en kilobytes.
quota
Con la opción -v nos muestra la cantidad de espacio que tenemos
de cuenta en el home y la que tenemos ocupada.
top
Nos muestra en pantalla los procesos que ocupan más CPU con el porcentaje
correspondiente, así como otras informaciones como memoria de la
máquina, memoria utilizada. La información se va actualizando
periodicamente.
ps
Nos permite ver los procesos que se están ejecutando.
who
Para saber quien está conectado a la máquina en la que estamos
trabajando.
rusers
Nos muestra quien está en cada máquina del sistema. La opción
-l nos da información más detallada de cada uno.
whereis o which
Localiza un comando, es decir nos muestra la ruta de acceso del fichero
ejecutable.
finger
Muestra información sobre los usuarios como username, nombre
completo, cuando a leido su mail por última vez, si está
o no conectado y desde donde, etc. Podemos crear un fichero en nuestro
home con el nombre
.plan cuyo contenido se mostrará cuando
alguien haga un finger. Podemos utilizar el username si lo sabemos,
o bien buscar por el nombre o apellidos reales.
Redirección de comandos y pipes
Redirección de comandos
Cualquier dispositivo conectado al sistema (impresoras, terminal, dispositivo
de audio, mouse, etc), es considerado por UNIX como un fichero.
Los comandos pueden necesitar leer y escribir información. Normalmente
lo hacen en la standard input y standard output que es el
terminal. Sin embargo ambas pueden redireccionarse a otros ficheros, tanto
ficheros normales como dispositivos físicos.
Para redireccionar la entrada estandar se usa < seguido del
nombre del fichero. Por ejemplo:
mail fcabrera < file1 Envía un mail a fcabrera tomando como texto el cotenido del
fichero file1.
Para redireccionar la salida estandar hay varias opciones (>, >&,
>!, >&!, >>, >>&, >>!, >>&!) seguido del fichero al que
se dirige la salida.
> Envía el resultado del comando a un fichero reescribiendolo,
si se añade & se envían también los erroes,
si se añade ! se asegura que se pueda escribir al fichero
aunque tengamos definida la variable noclobber que evita la sobrescritura.
>> Envía el resultado a un fichero pero añadiendolo
al final. En este caso si esta definida la variable noclobber se
produciría un error si el fichero no existe previamente, a menos
que añadamos !.
Ejemplos:
cat sound.au > /dev/audio
Enviará el fichero de sonido sound.au a /dev/audio, que
es el fichero asociado al dispositivo de audio.
crypt zyxst < texto > texto.crypt
Este comando toma como entrada el fichero texto, lo codifica
con la clave zyxst y lo escribe en el fichero texto.crypt.
Pipes
Se denomina un "pipeline" a una serie de comandos separados por
| o |&. En el primer caso la salida estandar del primer
comando es direccionada a la entrada del segundo, mientras |&
redirecciona la salida estandar y los errores.
Los pipelines y los comandos pueden separarse por ; y
se ejecutan secuencialmente, o pueden separarse con condicionales. &&
ejecuta el segundo pipe si el primero se ejecuta sin errores (standard
error es 0). || ejecuta el segundo pipe si se produce
un error en la ejecución del primero (standard error distinto
de 0).
Ejemplos:
Para contar el número de usuarios de la máquina en que
estamos trabajando
who | wc -l who tiene como salida una línea con información
por cada usuario conectado a la máquina. Esto es enviado a la entrada
del comando wc -l, que cuenta el número de líneas.
El siguiente ejemplo muestra los procesos ordenados por el porcentaje
de CPU que emplean.
ps -feao ruser,pid,pcpu,etime,comm | sort -r +2 | more
ps muestra los procesos en un determinado formato, el resultado
es ordenado por el comando sort y se muestra por pantalla empleando
el comando more.
El ejemplo:
tar -cvf /dev/rmt/0lbn . || (tar -cvf /scfratch/fcabrera/backup
.; compress backup; cp ) & Primero produce un backup del directorio en que estamos en un dispositivo
magnético. En caso de que fallara se haría un backup al disco
de scratch y lo comprime para ahorrar espacio.
El uso de las comillas en UNIX
UNIX trata de forma diferente los caracteres especiales dependiendo de
si sencuentran entre comillas, y del tipo de comillas que sean. Vamos a
ver varios ejemplos utilizando el comando echo, que simplemente
escribe sus argumentos en la salida estandard separados por espacios y
terminando con un retorno de línea.
Las dobles comillas
Veamos los siguientes ejemplos:
echo * echo "*"
En el primer caso la shell sustituye * por los nombres de todos
los ficheros en ese directorio separadeos por espacios. En el segundo caso
el resultado nos muestra por pantalla el caracter *. Esto se debe
a que las comillas impiden la sustitución de * por nombres
de ficheros tratandolo como un caracter sin significado especial.
Otros caracteres que pierden su significado especial entre las comillas
son *, ?, >, <, >>, |. Además las dobles comillas también
mantienen el significado de los espacios en blanco.
Comillas simples
El uso de las comillas simples puede producir resultados diferentes como
por ejemplo:
echo $shell
echo "$shell"
echo '$shell'
Los dos primeros casos tienen el mismo efecto y muestra por pantalla el
valor de la variable shell. Esto se debe a que el caracter $, que
sirve para referirse al valor de una variable, no pierde su significado
dentro de las dobles comillas. Sin embargo esto si sucede dentro de las
comillas simples y el resultado en el tercer caso es mostrar por pantalla
$shell.
También pierden su signicado los caracteres especiales que pierden
su significado en las dobles comillas, así como las dobles comillas.
El caracter \
Este caracter sirve para quitar cualquier significado especial que tenga
para la shell el caracter que va a continuacion de \ . Por ejemplo:
echo \$shell
como resultado muestra por pantalla $shell.
Las comillas simples invertidas
El significado de las comillas invertidas es completamente diferente. Se
emplea encerrando en estas comillas un comando y el resultado es ejecutar
el comando insertando la salida en el punto de la línea de comandos
donde se encuentra el comando. Por ejemplo:
echo La fecha de hoy es `date` man `ls`
En el primer caso se ejecuta el comando date insertando el resultado
al final de la frase. El segundo dará probablemente error, pues
tratará de buscar una página del manual de ayuda para comandos
que se llamen como cada uno de los ficheros del directorio. A no ser que
algún fichero tenga nombre de comando, el resultado será
que no encuentra la página del manual para cada nombre de fichero.
Las comillas invertidas mantienen su significado dentro de las dobles comillas,
pero no dentro de las comillas simples.