Vous êtes sur la page 1sur 5

PRÁCTICA 1 SISTEMAS OPERATIVOS

Daniel Tejedo González


Roberto Amor Marcos

a) Entrar al sistema con el usuario/password conocido.

Encendemos el ordenador, y escogemos linux como sistema operativo. Nos pide que hagamos login con
nuestro usuario (tejedod), e introducimos la contraseña.

b) El sistema sobre un mismo dispositivo tiene varios terminales virtuales o lógicos. A ellos se
accede con control-alt y una tecla de función desde F1 a F5, F7 es el terminal gráfico. Entra y sal
tanto de los terminales de texto como del gráfico. Al final del día de prácticas debes haber salido
de todas las sesiones abiertas.

Presionando ctrl+alt+fx podemos ir accediendo a las diferentes terminales. Para salir de ellas, si no se ha hecho
login, basta con volver a la anterior. Si ha hecho login, hay que escribir el comando logout.

c) Explora el entorno gráfico (gnome) de trabajo y después abre un terminal/ventana (shell) y revisa
donde estás colocado en el sistema de ficheros total. Explora el mismo con los comandos
conocidos de la shell.

La shell se encuentra en Aplicaciones->Accesorios->Terminal. Para saber donde estamos colocados,


escribimos el comando pwd

d) Vete a tu directorio de usuario ($HOME), compruébalo con pwd. Crea un directorio a partir de tu
directorio llamado temporal, entra en él, y compruébalo. Intenta hacer lo mismo desde el
directorio /home ¿Puedes hacerlo? Di porqué.

Para ir a nuestro directorio, basta con escribir cd. Si justo después introducimos el comando pwd, vemos que en
efecto nos encontramos en nuestra carpeta home. Si escribimos lo siguiente, se crea nuestro directorio
temporal:

mkdir temporal

Si lo hacemos en HOME, la terminal nos devuelve un aviso diciendonos que no podemos crear directorios ahí
porque no tenemos permisos.

e) Ve a ~/temporal y con el comando touch (si no sabes que es prueba el man) crea estos ficheros:
“pepe1”, “pepe2”, “pepe3”, “pepe12” y “pipe3” y prueba con ellos los caracteres comodines (“*”,
“?”, “[ ]”) como se hizo en clase.

Nos posicionamos en el directorio escribiendo cd temporal.


touch pepe1.txt (Esto crea el directorio pepe1.txt)

Así creamos todos los directorios que nos manda. Para saber que contenidos tiene, volcamos en cada uno el
calendario de un año diferente, por ejemplo:
cal 2008>pepe1.txt

Si hacemos:
- cat pepe* : Muestra todos menos pipe3
- cat pepe? : Muestra pepe1, pepe2 y pepe3
- cat pepe[12] : Muestra pepe1 y pepe2
f) Comprueba como cuando se hace uso de los paréntesis, se ejecuta lo encerrado en una
subshell (igual que en clase).

Si ejecutamos un comando entre paréntesis, este se ejecutará en una subshell. En nuestra subshell activa no
veremos el resultado.

Ejemplo: (cd ..)


Si hacemos esto, vemos que no hemos cambiado de directorio en absoluto.

g) Copia, mueve y enlaza de dos formas (hardware y software) algún fichero de temporal en su
directorio padre (de forma relativa). Haz un ls largo y describe las diferencias.

mkdir paracopiar
Ahí creamos el directorio donde pondremos los ficheros copiados. Si queremos copiar pepe1 (estando
posicionados en la carpeta temporal):
cp pepe1.txt ../paracopiar/
Si queremos copiarlo en un directorio ubicado fuera de temporal, habrá que poner la ruta de directorio completa.
Para copiarlo en el mismo directorio:
cp pepe1.txt copiado.txt (donde copiado.txt es el nuevo fichero con el mismo contenido que pepe1.txt)

ln hace un enlace hardware


ln –s hace un enlace software

La diferencia entre ellos es que el enlace software es un acceso directo, es decir, si borras el original, el acceso
directo no sirve de nada. El otro es un fichero con el mismo contenido que el original, pero sin estar ligado a él
de ninguna manera.

Al hacer un ls-l, observamos las siguientes diferencias entre ellos:

lrwxr-xr-x 1 danieltejedogonzalez staff 13 10 mar 15:15 texto1.txt -> ../texto1.txt


-rw-r--r-- 2 danieltejedogonzalez staff 0 10 mar 15:14 texto1.txt

Donde el primero es el enlace software y el segundo es el enlace hardware.

h) Usando la redirección de salida crea un fichero calendario con el comando cal, primero de 2008
y después añadiendo el 2009. Mira el contenido del fichero con cat y después con more usando
sus subcomandos (retorno, espacio, b, q, etc.).

cal 2008 > calendario.txt


cal 2009 >> calendario.txt
Con esto he añadido dos calendarios (diferentes para diferenciar) a un fichero de texto. > crea, y >> añade.

cat calendario.txt
more calendario.txt

La diferencia entre more y cat es que con more puedes subir con d y u por lo que ha mostrado el texto.

con more –c podríamos ver solo desde el texto en adelante (no los comandos introducidos anteriormente).

i) Usa el comando ls –l con el directorio /root (o algún otro que no tenga permisos) y desvía la
salida hacia un fichero ¿sale algo por pantalla? ¿A qué es debido? ¿Cómo se podría evitar?
Desvía de forma unificada tanto la salida normal como la de errores en un único fichero.

Nos posicionamos en home (cd), y escribimos lo siguiente:

ls –l /root >salida.txt

El fichero muestra el contenido de ls-l. No hay ningún problema de permisos, ya que el directorio root tiene
permiso de lectura. Sus directorios no son accesibles, pero si se puede hacer un ls –l sobre el, luego no hay
problemas en este apartado. Por pantalla sale el ls-l, lo mismo que si hacemos un cat al fichero.

j) Realizar una pipeline (tubería) con el comando ls (en forma recursiva del directorio /) y el
comando cat. Haz una copia de la información transmitida con el comando tee.

ls –R /
Esto hace un ls recursivo sobre el directorio raíz, o lo que es lo mismo, entra en todos los directorios que tiene
el directorio raiz. Para transmitir el resultado con un cat:

ls –R / | tee apartadoj.txt | cat

Esto vuelca el resultado en apartadoj.txt, y además lo mostramos con pantalla con cat.

k) Ejecuta en background el editor de textos vi. Mira si el proceso se ha creado realmente. Si es


así mátalo (kill). Repítelo con ejecución en foreground y para al proceso (debes saber como
hacerlo). Después, pásalo de nuevo a foreground, páralo de nuevo, pásalo a background (indica
la diferencia entre este estado y el anterior) y finalmente mátalo con killall. Piensa en una
forma de averiguar la shell que estás ejecutando.

vi&
Con esto se ejecuta el background, lo que significa que el vi se está ejecutando pero que nosotros no lo vemos.
Con ps vemos que proceso corresponde al vi, en nuestro caso el 6304
kill 6304
Con esto intentamos matar el proceso, pero no se muere realmente porque esta preparado para ejecutar
señales de sistema. Si ponemos kill -9 6304 muere definitivamente.
Para ejecutar el vi en foreground, simplemente escribimos vi.
Para salir de vi (o sea, pararlo), presionamos escape y tecleamos :q!
Si queremos pasar de foreground a background, ejecutamos el vi, y presionamos ctrl+z
En foreground podemos utilizar el vi, en background sin embargo se está ejecutando y no lo vemos.
Con killall vi matamos el proceso vi.
Para saber que shell estamos ejecutando escribimos:
echo $SHELL
bin/bash es lo que obtenemos

l) Si estás ejecutando una bash, mira el valor de las variables de entorno de shell PS1 y PATH.
Arranca una shell de tipo tcsh y mira el valor esta vez, si están indefinidas piensa el porqué. Sal
de la tcsh. Mira todas las variables que tienes definidas, ¿cómo podrías averiguar la shell que
estás usando de otra manera?

echo $PATH
echo $PS1

PATH es la variable que contiene el directorio absoluto donde nos encontramos


PS1 es la variable que contiene el inductor del bash

echo $PATH hace lo mismo que en bash, pero para que se vea la variable $PS1 hay que escribir echo $prompt.

Con el comando set vemos todas las variables que hay definidas
Con el comando ps vemos que shells estamos usando.

m) Crea una variable de shell para asignar el nombre de un directorio a esa variable, comprueba su
contenido y después úsala con el comando cd.

DIRECTORIO=/remotehome/tejedod/temporal
cd $DIRECTORIO
Así creamos la variable, y escribimos DIRECTORIO para ver su contenido.
Con cd directorio volvemos a temporal
n) Edita con vi un fichero de texto, ese fichero será una macro que servirá para saber el tamaño en
Kb o Mb de una serie de ficheros de un directorio. La macro tomará estos ficheros por argumento
y pedirá el directorio con lectura. Sólo mostrará el tamaño de los ficheros si existen y si está
definida una variable MENSAJE puesta a SI. Ejecútalo de dos maneras: explícitamente con la
shell sh y dándole permisos de ejecución. La variable MENSAJE en un caso estará definida
desde fuera y en el otro caso de forma interna ¿puedes acceder a la variable interna definida en
la macro desde la shell?

Esta es la macro.

MENSAJE="si"
if test ! -f $1
echo "Fichero no existe"
else if test "$MENSAJE" = "si"
then
for i in $*
do
du $1
done
else
echo "Mensaje no vale si"
fi
fi

Para guardar este código con el nombre macro, tecleamos escape en el vi y escribimos:
:wq macro

sh macro coche.java salida.txt EDA-5.zip devuelve la siguiente salida:

4 coche.java
4 salida.txt
28 EDA-5.zip

Si le quiero dar permisos escribimos lo siguiente:

chmod 777 macro

Si luego ejecutamos esto en nuestra terminal:

./macro coche.java salida.txt EDA-5.zip obtendremos la misma salida que antes

o) Averigua los ficheros de configuración que tienes ocultos en tu directorio personal. Modifica el
que se ejecuta cada vez que abres una shell para añadir la definición con alias de ll y dir
como ls –l. Cambia la variable adecuada para redefinir tu inductor (prompt).

ls –a
Esto muestra los ficheros ocultos que tenemos en el directorio actual. Para añadir los alias, tenemos que editar
el fichero de arranque del bash. Para poder editarlo, escribimos lo siguiente:
vi bashrc
Al final del todo, escribimos lo siguiente:
alias ll="ls –l"
alias dir="ls –l"
Ahora, cada vez que ejecutemos el comando ll y dir, haremos un ls –l

p) Elige un fichero y cámbiale los permisos de lectura y escritura para que nadie pueda acceder a
él. Intenta mostrar su contenido por pantalla, ¿qué ocurre?

chmod ugo - rw pepe1.txt


Si intentamos mostrar el contenido por pantalla no nos deja, porque hemos desactivado el permiso de lectura.
q) Con el comando ps mira el dispositivo que estás usando en la shell. Observa el contenido del
directorio /dev hasta encontrarlo. Usa la redirección para mostrar con cat el contenido de un
fichero en el dispositivo que usas (puede ser tty o pts/o) de forma equivalente a como lo
harías con un fichero.

Con el comando ps observamos que el dispositovo usado por la shell es el ttys000.


Creamos un fichero llamado fichero con el contenido del mes actual (cal).
cat fichero > /dev/ttys000
El resultado es, ver por la ventana del bash el mes actual

r) Borra con la opción –r (cuidado) el directorio temporal que creaste. ¿Puedes recuperarlo?

rm –r temporal
No, no podemos recuperarlo.

Vous aimerez peut-être aussi