Laboratorio 0

Anuncio
Primera vez con un SO en serio*
Ignacio Vissani
28 de enero de 2014
Resumen
Esta clase es una introducción al menjo básico de la consola de Linux
para un usuario.
1.
Intro
Hoy vamos a ver algunas cosas básicas para manejarnos en el shell. Empecemos por ver qué es un shell.
“Un shell de Unix es un intérprete de comandos y un ambiente de scripting
que provee una interfaz tradicional para el sistema operativo Unix y para los
sistemas operativos del estilo de Unix. El usuario comanda la opeartoria de la
computadora ingresando comandos en forma de texto para que el intérprete de
lı́nea de comandos lo ejecute o mediante la creación de scripts de texto formados
por uno o más comandos de este tipo.”
Es decir que es una interfaz provista por algunos sistemas operativos (la gran
mayorı́a) en modo texto que permite la ejecución de comandos o secuencias de
comandos.
Un shell es también un programa. Un mismo sistema operativo puede proveer
varios shell s distintos. Existen por ejemplo el Bourne-shell (sh) , el C-shell (csh),
el Korn-shell (ksh), etc., todos shell s del sistema Unix. Hoy en dı́a uno de los
más difundidos es el Born again shell (bash) que es el shell por defecto de Linux.
2.
Primeros pasos
Para poder movernos sin problemas tenemos que saber algunos comandos
básicos. El primer comando que vamos a aprender es el man.
Ejercicio 1. En la consola tipee el comando man man.
¿Qué ocurre?
Ahora que ya sabemos cómo pedir ayuda, la idea es probar algunos comandos
básicos. En cada ejercicio lo que deberı́an hacer es primero consultar las páginas
del manual del comando para ver cómo se usa, qué opciones tiene, etc., y después
hacer lo que pide el ejercicio.
* Esta clase fue preparada originalmente como introducci’on para la materia Sistemas Operativos
1
Ejercicio 2.
1. ls Enumere los archivos y directorios que se encuentran
dentro del directorio /home/<user> incluyendo los archivos ocultos.
2. pwd Indique qué directorio pasa a ser su directorio actual si ejecuta:
a) cd /usr/bin
b) cd
c) ¿Cómo explica el punto anterior?
3. cat ¿Cuál es el contenido del archivo /home/<usuario>/.profile?
4. find Liste todos los archivos que comienzan con vmlinuz.
Estos archivos son imágenes del kernel Linux.
5. locate Liste todos los archivos cuyo nombre contiene vmlinuz. ¿Qué diferencia hay entre este comando y el find?
6. mkdir Genere un directorio /home/<usuario>/tp.
7. cp Copie el archivo /etc/passwd al directorio /home/<usuario>/tp.
8. grep
Muestre las lı́neas que tienen el texto “localhost” en el archivo /etc/hosts.
Muestre todas las lı́neas que tengan el texto “POSIX” de todos los archivos
(incluyendo subdirectorios) en /etc. Evite los archivos binarios y aquellos
archivos y directorios que no tienen permiso de lectura para su usuario.
9. passwd Cambie su password.
10. rm Borre el archivo /home/<usuario>/tp/passwd
11. ln
Enlazar el archivo /etc/passwd a los archivos /tmp/contra1 y /tmp/contra2.
Hacer un ls -l para ver cuantos enlaces tiene /etc/passwd.
Estos enlaces se llaman “hardlinks”. Cada nuevo enlace referencia el mismo espacio ocupado del disco rı́gido, y por lo tanto cada hardlink es igual
de representativo de esos bytes ocupados del disco rı́gido. El espacio ocupado solamente se liberará cuando todos los enlaces hayan sido borrados.
Ahora enlace el archivo /etc/passwd de manera “soft” al archivo contra3.
Verifique con ls -l que no aumentó la cantidad de enlaces de /etc/passwd.
Estos enlaces se llaman “softlinks” y apuntan no a los bytes del disco
rı́gido sino a la ruta del archivo a ser enlazado. Operar sobre el softlink es
igual que operar sobre el archivo, sin embargo los softlinks no cuentan en
la cantidad de enlaces (ya que no apuntan a los bytes ocupados del disco
rı́gido) y pueden ser borrados sin afectar al archivo original, aunque si
se borra el archivo original el softlink quedará huérfano y no apuntará a
nada.
12. df ¿Qué espacio libre tiene cada uno de los filesystems montados?
2
13. ps ¿Cuántos procesos de usuario tiene ejecutando? Indique cuántos son
del sistema.
14. uptime ¿Cuanto tiempo lleva ejecutando su máquina virtual?
15. uname ¿Qué versión del kernel de Linux está utilizando?
3.
Entrada y Salida standard
Ahora que ya sabemos movernos por el filesystem vamos a ver algunas cosas
más avanzadas.
Muchas veces queremos que la salida de un comando sea la entrada de otro.
Para eso usamos el caracter pipe ( | ó | ) que hace justamente eso. Es decir que
comando1 | comnado2 ejecuta comando1 y luego ejecuta comando2 pasándole
por la entrada standard la salida de comando1.
Ejercicio 3. cat+wc Diga cuántos usuarios hay definidos en el sistema (Pista:
todos los usuarios están definidos en /etc/passwd)
También podrı́amos querer guardar la salida de un comando en un archivo para poder verla más tarde. Para eso existe > que redirecciona la salida
standard. Es decir que comando1 >/home/<usuario>/pepe guarda la salida de
comando1 en el archivo /home/<usuario>/pepe.
Investigue la diferencia entre usar > y usar >> para redireccionar la salida
standard.
Ejercicio 4.
1. seq Genere el archivo /home/<usuario>/1000-lineas que
debe contener 500 lı́neas y en cada una de ellas debe estar el número de
lı́nea. Es decir que debe ser de la forma
1
2
..
.
500
2. seq Agrege al archivo /home/<usuario>/1000-lineas las 500 lı́neas que
faltan para completar las 1000.
Ahora unos ejercicios un poco más interesantes:
Ejercicio 5.
1. STDOUT
a) Conserve en el archivo /home/<usuario>/tp/config la salida del
comando ls que muestra todos los archivos del directorio /etc y de
los subdirectorios bajo /etc.
b) Presente cuantas lı́neas, palabras y caracteres tiene /home/<usuario>/tp/config.
c) Agregue el contenido, ordenado alfabéticamente, del archivo /etc/passwd
al final del archivo /home/<usuario>/tp/config.
d) Presente cuantas lı́neas, palabras y caracteres tiene /home/<usuario>/tp/config.
2. Pipes
3
a) Liste en forma amplia los archivos del directorio /usr/bin que comiencen con la letra “a”. Del resultado obtenido, seleccione las lı́neas
que contienen el texto apt e informe la cantidad de caracteres, palabras y lı́neas.
Está prohibido, en este ı́tem, usar archivos temporales de trabajo.
4.
4.1.
Editores (nano, vi)
vi
Si bien podemos crear un archivo de texto usando el comando cat en general
resulta vital para el uso de cualquier sistema operativo contar con un editor de
textos. Vamos a ver someramente los comandos básicos de dos de los editores
más populares de los entornos del tipo Unix.
Empecemos con el vi que es el editor por defecto de los sistemas Unix.
Para aprender a usar vi vamos a crear un peque no programa en C. Pero
primero veamos algunas cosas básicas para poder manejarnos con el vi.
Lo primero que debemos saber es que el vi tiene dos modos de operación.
El modo comando y el modo inserción.
Para ingresar al vi simplemente ejecutamos el comando vi <nombre archivo>.
Una vez adentro para salir del editor ejecutamos el comando :q (notar que todos
los comandos en vi se ejecutando estando, naturalmente, en el modo comando).
Al iniciarse vi se enecuentra en modo comando. Para pasar del modo comando al modo inserción existen varios comandos. Los más usados son i, a,
o.
Para pasar del modo inserción al modo comando se usa la tecla ESC ó CTRL+[.
El vi es un editor muy poderoso con muchos comandos. Sólo voy a mencionar
los básicos para poder editar un archivo decentemente.
Pedir ayuda
:help
Desplazamiento
h,j,k,l ó ←, ↓, ↑, →
Más desplazamiento
$ (fin de lı́nea), ∧ (comienzo de lı́nea),
G (fin de archivo), gg (comienzo de archivo)
:] (GOTO lı́nea número ])
Edición
x (borrar caracter bajo el cursor), dd (borrar lı́nea)
r (reemplazar caracter), R (reemplazar desde cursor)
cw (cambiar palabra)
Búsqueda
/<texto>, n (próxima coincidencia), N (anterior coincidencia)
Archivo
:w (guardar), :e (abrir), :q (salir), :wq (guardar y salir)
4
4.2.
nano
El nano es un editor más “visual”. Al abrirlo vamos a ver que la pantalla
tiene tres secciones.
1. Superior: Se indica la versión de nano, el nombre del archivo que está siendo editado y si ha habido cambios o no.
2. Centro: Se muestra el contenido que está siendo editado.
3. Inferior: Se muestra cierta información importante y los atajos más aproppiados dependiendo del contexto.
Acá no hay mucho que explicar ya que el editor es bastante autoexplicativo.
Vale la pena mencionar que en los atajos que se muestran en la parte inferior
el circunflexo (∧) representa a la tecla CTRL y la eme mayúscula representa a la
tecla ALT o Meta.
Para tener una idea, sumaricemos algunos atajos básicos.
Pedir ayuda
CTRL-G
Desplazamiento
CTRL-B,CTRL-N,CTRL-P,CTRL-F ó ←, ↓, ↑, →
Más desplazamiento
CTRL-E (fin de lı́nea), CTRL-A (comienzo de lı́nea),
ALT-/ (fin de archivo), ALT-\ (comienzo de archivo)
CTRL- (GOTO lı́nea,columna)
Edición
CTRL-D (borrar caracter bajo el cursor), CTRL-K (cortar lı́nea)
Búsqueda
CTRL-W (buscar una cadena), ALT-W (repetir última búsqueda)
Archivo
CTRL-O (guardar), CTRL-R (abrir), CTRL-C (salir),
CTRL-X sobre archivo modif. (guardar y salir)
Ejercicio 6.
1. less Muestre el contenido del archivo 1000-lineas.txt por
pantalla de manera que pueda desplazarse hacia adelante y hacia atrás en
el mismo.
2. / Sin salir de less busque todas las apariciones de la cadena “50” en el
archivo 1000-lineas.txt
3. v Sin salir de less edite el contenido del archivo. Busque y reemplace
todas las apariciones de la cadena “50” por la cadena “11”.
4. q Salga del editor. ¿A dónde vuelve? ¿Qué pasó con la búsqueda que habı́a
realizado anteriormente?
Ejercicio 7.
1. Usando el editor que prefiera tipee el siguiente programa en
lenguaje C:
loop.c
#include <stdio.h>
/* Use su número favorito. */
#define MODULO 10
int main() {
int i, c;
5
while(1) {
c = 48 + i;
printf("%d", c);
i++;
i = i % MODULO;
}
return 0;
}
2. Compı́lelo utilizando el compilador gcc y el compilador icc.
3. Ejecute ambas versiones y compruebe que se obtiene el mismo resultado.
5.
Conexión remota
En la actualidad existen diversas formas de acceder a una computadora de
manera remota. Tal vez la forma más difundida de obtener una terminal remota
sea a través del protocolo ssh. La caracterı́stica fundamental de este protocolo
es que permite general un canal seguro (encriptado) sobre un medio no seguro
como una red, Internet, etc. ssh (o secure shell ) es un protocolo de red que
permite:
Transmisión segura de datos,
login remoto,
ejecución remota de comandos,
etc
En la materia nos va a interesar fundamentalmente para poder acceder remotamente a otras máquinas, transferir archivos desde y hacia las mismas y
ejecutar comandos. Para ello vamos a estudiar dos comandos: a) ssh (secure
shell ) y b) scp (secure copy). Nótese que en este caso con ssh nos referimos
al comando (programa) que implementa la obtención de una terminal remota a través del protocolo ssh. Asimismo, scp es un comando que permite la
transferencia de archivos utilizando el protocolo ssh.
La sintaxis del comando ssh para obtener una terminal remota es
ssh <usuario>@<servidor>
Alternativamente se puede invocar como
ssh <servidor>
en caso de que el usuario con el que estemos logueado en la máquina donde
invocamos a ssh se llame igual que el usuario con el queremos conectarnos a la
máquina remota.
Ejercicio 8.
1. Conéctese como alguno de los usuarios de la materia (orga1v##
donde ## es un número entre 01 y 46) al servidor montecito (montecito.exp.dc.uba.ar).
2. Liste el contenido del directorio /home en el servidor montecito
3. Desconéctese de montecito. Si no sabe cómo, piense qué nombre le pondrı́a
al comando que permite salir de una sesión remota.
6
La sintaxis del comando scp es
scp <usuario>@<servidor>:<ruta al archivo a copiar> <usuario>@<servidor>:<ruta de destino>
aunque tı́picamente lo vamos a usar para copiar archivos desde la máquina donde
estamos tipeando (“acá”) hacia la máquina remota (“allá”) o viceversa. En esos
casos la sintaxis se puede simplificar de la siguiente forma:
scp <usuario>@<servidor>:<ruta al archivo a copiar> <ruta de destino en la máquina local>
scp <ruta del archivo a copiar> <usuario>@<servidor>:<ruta de destino en la máquina remota>
Una vez más, el nombre de usuario puede omitirse si es el mismo con el que
estamos logueados “acá”.
Ejercicio 9.
1. Copie el archivo loop.c del Ej 7 al servidor montecito utilizando el usuario cuyo número coincida con el número de la máquina del
laboratorio en la que está sentado o sentada.
2. Compile el programa loop.c en el servidor montecito.
3. Copie el binario generado en montecito a la computadora local e intente
ejecutarlo ¿Qué sucede?
7
Descargar