lunes, 25 de mayo de 2009

Exámen Linux, Jueves 28

Acá están las tres practicas con preguntas y respuestas:

Tema 4

1. Preparar el entorno de trabajo. Si no lo has hecho todavía realiza los siguientes pasos:
  • Cambia el password que puso el administrador del sistema por uno particular.

[andres@redhatserver andres]$ passwd
Changing password for user andres.
Changing password for andres
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
  • Cambia los permisos de tu directorio para que nadie pueda acceder a él.

[andres@redhatserver esi]$ chmod 700 andres
  • Crea el fichero .profile, con al menos lo siguiente: inhabilita mensajes, máscara propia de creación de ficheros, borrar la pantalla, etc.

[andres@redhatserver esi]$ cat >> .bash_profile
mesg n
umask 027
clear
^d
  • Crea un subdirectorio bin , para que contenga los script que creemos.

[andres@redhatserver andres]$ mkdir bin

2. Prácticas de comandos de uso común :
  • Obtén la relación de usuarios conectados y averigua quién eres.

[andres@redhatserver andres]$ who
  • Muestra en pantalla la fecha y la hora actual.

[andres@redhatserver andres]$ date
  • Averigua cuál es la identificación de tu terminal (fichero de dispositivo)

[andres@redhatserver andres]$ tty
  • Habilita tu terminal para recibir mensajes y que tu compañero borre tu pantalla.

[andres@redhatserver andres]$ cd /dev/pts
[andres@redhatserver pts]$ chmod 627 5 (*)

*El número 5 corresponde al terminal.
  • Averigua qué sistema Unix estás utilizando.

[andres@redhatserver andres]$ uname -s
  • Comprueba qué hace la orden: echo.

[andres@redhatserver andres]$ echo “Hola”
Hola

3. Crear dos ficheros que se llamen prueba1 y prueba2. Visualizarlos.

[andres@redhatserver andres]$ cat > prueba1 (Crear)
Este es el fichero uno.
[andres@redhatserver andres]$ cat prueba1 (Visualizar)
Este es el fichero uno.

[andres@redhatserver andres]$ cat > prueba2 (Crear)
Este es el fichero dos.
[andres@redhatserver andres]$ cat prueba2 (Visualizar)
Este es el fichero dos.

4. Unir ambos ficheros en un tercero: prueba3.

[andres@redhatserver andres]$ cat prueba1 prueba2 > prueba3

5. Añadir texto a prueba3 y visualizarlo.

[andres@redhatserver andres]$ cat >> prueba3 (Añadir texto)
Texto añadido
^d

[andres@redhatserver andres]$ cat prueba3 (Visualizar)
Este es el fichero uno.
Este es el fichero dos.
Texto añadido

6. Añadir el contenido de prueba1 al fichero prueba3.

[andres@redhatserver andres]$ cat prueba1 >> prueba3

7. Crear un directorio dirprueba, acceder a él y comprobar con la orden apropiada su situación.

[andres@redhatserver andres]$ mkdir dirprueba (Crear)
[andres@redhatserver andres]$ cd dirprueba (Entrar)
[andres@redhatserverdirprueba]$ pwd/home/esi/andres/dirprueba (Comprobar)

8. Copiar todos los ficheros de prueba creados a dirprueba. Comprobar si se ha copiado correctamente.

[andres@redhatserver andres]$ cp prueba[1..3] dirprueba
[andres@redhatserver andres]$ cd dirprueba
[andres@redhatserver dirprueba]$ ll
total 12
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba1
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba2
-rw-r----- 1 andres esi 86 mar 3 09:34 prueba3

9. Renombrar el fichero prueba3 como prueba.total.

[andres@redhatserver dirprueba]$ mv prueba3 prueba.total

10. Borrar todos los ficheros prueba del directorio home, con una sola orden. Para ello debes saber que el metacaracter * representa a cualquier cadena.

[andres@redhatserver andres]$ rm prueba*

11. Mover todos los ficheros prueba del directorio dirprueba a tu directorio de trabajo. Comprobar el cambio y volverlo a dejar como estaba.

[andres@redhatserver andres]$ mv dirprueba/prueba[1..3] .
[andres@redhatserver andres]$ ll
total 28
drwxr-x--- 2 andres esi 4096 feb 25 10:36 apuntes
drwxr----- 2 andres esi 4096 mar 3 08:49 bin
drwxr----- 2 andres esi 4096 mar 4 09:09 dirprueba
-rw------- 1 andres esi 1477 feb 16 14:46 mbox
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba1
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba2
-rw-r----- 1 andres esi 86 mar 3 09:34 prueba.total

[andres@redhatserver andres]$ mv prueba[1..3] dirprueba

12. Crea un enlace del fichero prueba.total del directorio dirprueba con el fichero prueba3 del directorio home.

[andres@redhatserver andres]$ ln dirprueba/prueba.total prueba3

13. Sin moverse del directorio actual hacer un listado de, solamente los directorios, que hay en el directorio raíz.

[andres@redhatserver andres]$ ll / | grep ^d

14. Con el permiso de un compañero accede a su entorno de trabajo (usuario), sin pasar por login. Comprueba quién eres y después vuelve a tu usuario.

[andres@redhatserver andres]$ su manuel
Password:

[manuel@redhatserver andres]$ who i am
andres pts/0 Mar 6 13:30 (192.168.0.106)

[manuel@redhatserver andres]$ su andres
Password:

15. Eliminar nuestros propios permisos de acceso del fichero prueba1. Intentar visualizarlo después.

[andres@redhatserver dirprueba]$ chmod 000 prueba1
[andres@redhatserver dirprueba]$ cat prueba1
cat: prueba1: Permiso denegado

16. Restaurar solamente el permiso de lectura del fichero anterior y visualizarlo.

[andres@redhatserver dirprueba]$ chmod 400 prueba1
[andres@redhatserver dirprueba]$ cat prueba1
Este es el fichero uno.

17. Sin modificar los permisos, intentar borrar o añadir información al fichero. Restaurar el permiso de escritura y repetir la misma operación.

[andres@redhatserver dirprueba]$ rm prueba1
rm: borrar el fichero regular `prueba1' protegido contra escritura? (s/n) s
[andres@redhatserver dirprueba]$ cat>>prueba1
-bash: prueba1: Permiso denegado

[andres@redhatserver dirprueba]$ chmod 600 prueba1

[andres@redhatserver dirprueba]$ cat>>prueba1
Esto está añadido.
[andres@redhatserver dirprueba]$ cat prueba1
Este es el fichero uno.
Esto está añadido.
[andres@redhatserver dirprueba]$ rm prueba1

18. Buscar en todo el sistema de ficheros el fichero passwd. Visualizarlo.

[andres@redhatserver andres]$ find / -name passwd -type f -exec cat {} \;

19. Realiza los pasos para que el usuario de al lado pueda acceder a nuestro directorio pero no pueda tocar ningún fichero.

[andres@redhatserver esi]$ chmod 710 andres

20. Realiza los pasos necesarios para copiar el fichero prueba.total de un usuario a otro. Son estos:
  • Cambiar permisos del usuario receptor.

[andres@redhatserver esi]$ su ruben
Password:
[ruben@redhatserver esi]$ chmod 770 ruben
  • Copiar el fichero.

[andres@redhatserver andres]$ su andres
Password:
[andres@redhatserver andres]$ cp dirprueba/prueba.total ../ruben
  • Cambiar los permisos para que pueda ser usado por éste.

[andres@redhatserver andres]$ chmod 770 ../ruben/prueba.total
  • Cambiar los permisos del usuario receptor cerrando su entorno de trabajo.

[ruben@redhatserver esi]$ su ruben
Password:
[ruben@redhatserver esi]$ chmod 700 ruben

21. Borrar el directorio dirprueba y todos los ficheros prueba creados en esta sesión de trabajo.

[andres@redhatserver andres]$ rm -r dirprueba

22. Despedir la sesión de Unix.

[andres@redhatserver andres]$ ^d

Tema 7

1. Seguir un proceso desatendido, con nohup y sin él que realice un listado largo recursivo desde el directorio /etc y lo lance a un fichero, los mensajes de error los grabe en otro fichero y al finalizar la ejecución lance un mensaje indicando que se ha terminado.

[andres@redhatserver andres]$ nohup ll -R /etc 1>f1 2>f2 ; echo "Terminado" &

[andres@redhatserver andres]$ ll -R /etc 1>f1 2>f2 ; echo "Terminado" &

2. Lanzar el mismo proceso anterior mediante nohup sin ejecución paralela. Intentar restaurar la normalidad, bien matando ese proceso, bien matando el shell.

Teóricamente esto no es posible, ya que si el proceso no se ejecuta paralelamente, hay que esperar a que finalice para introducir una nueva orden.

3. Crear un script para despedir el terminal. Razonar lo que ocurre si no se puede.

[andres@redhatserver andres]$ vi Ciao
exit
^d

4. Lanzar un script que realice un listado recursivo desde el raíz con nice reduciéndole la prioridad.

[andres@redhatserver andres]$ nice –5 ls –R /

5. Planificar un proceso para que la próxima vez que tengamos clase le aparezca a un compañero un mensaje en pantalla. Avisar antes mediante el correo que se habilite para recibir mensajes.

[andres@redhatserver andres]$ mail gaston
Activá los mensajes con mesg y.
^d

[andres@redhatserver andres]$ crontab
30 08 06 04 1 echo “Perra sudafricana” | write gaston
^d

Tema 8

1. De un fichero que contenga el listado largo del directorio /home. Ordenar por el campo número de Enlaces, de forma numérica en orden inverso.

[andres@redhatserver andres]$ cat fichero1 | tr -s " " | sort -r -n +1 -2

2. Mostrar en pantalla la lista de procesos que se están ejecutando clasificados por dígito identificador de proceso (PID), de mayor a menor uso.

[andres@redhatserver andres]$ ps -a | sort -r -n +0 -1

3. Queremos introducir en una variable el número de caracteres de un fichero.

[andres@redhatserver andres]$ var=`wc -c fichero | tr -s " " | cut -f2 -d " "`

4. Queremos saber de los usuarios que están conectados, lo siguiente:
  • Los que han entrado una vez.

[andres@redhatserver andres]$ who | tr -s " " | sort +0 -1 | cut -f1 -d " " | uniq -u
  • Los que han entrado varias veces.

[andres@redhatserver andres]$ who | tr -s " " | sort +0 -1 | cut -f1 -d " " | uniq -d
  • La lista de los que han entrado y el número de veces.

[andres@redhatserver andres]$ who | tr -s " " | sort +0 -1 | cut -f1 -d " " | uniq -c

5. Realizar un script llamado “ls_mio” que realice un listado largo personalizado de tal forma que, muestre solamente, primero el nombre del fichero y después el tamaño. Debe aparecer clasificado por orden alfabético y con el separador de campo “:” o el tabulador “^I”.

[andres@redhatserver bin]$ vi ls_mio
ls -l | tr -s " " | cut -f5 -d " " > col5
ls -l | tr -s " " | cut -f9 -d " " > col9
paste -d ":" col9 col5

6. Buscar una línea en un fichero que tenga al menos tres caracteres.

[andres@redhatserver andres]$ grep "..." Palabras

7. Localizar ficheros que tengan un nombre de al menos 5 caracteres.

[andres@redhatserver andres]$ ls | grep "....."

8. Realizar un script que traduzca cualquier fichero de minúsculas a mayúsculas. El resultado debe quedar en el propio fichero.

[andres@redhatserver bin]$ vi traductor
tr a-z A-Z < $1 > temporal
mv temporal $1

9. Realizar un script para fusionar dos ficheros de texto delimitados por comas, quedando el fichero resultado ordenado por el tercer campo. Los ficheros deben darse en línea de comandos. No deben aparecer repeticiones. Para realizar esta práctica podemos utilizar el fichero /etc/passwd sustituyendo el separador de campo “:” por “,”, e introduciendo las 10 primeras líneas en un fichero y las 10 últimas en otro.

[andres@redhatserver bin]$ vi fusionar
head passwd | tr : , > 10pri
tail passwd | tr : , > 10ult
cat 10ult>>10pri
cat 10pri | sort -n +2 -3 | uniq –u
rm 10pri 10ult

10. Realizar un script para obtener por pantalla el contenido de un fichero de texto paginado y numeradas sus líneas.

[andres@redhatserver bin]$ vi Paginador
more $1
wc -l $1

11. Script para contar el número de llaves { y } de un programa en C.

[andres@redhatserver bin]$ vi llavero
cat $1 | tr –c “{” “*” | tr –d “*” > llaves_abiertas
cat $1 | tr –c “}” “*” | tr –d “*” > llaves_cerradas
cat llaves_abiertas >> llaves_cerradas
cat llaves_cerradas | wc -c
rm llaves_abiertas llaves_cerradas

12. Script para obtener los ficheros del directorio actual que no cumplan un patrón que dará el operador en línea de comandos.

[andres@redhatserver bin]$ vi nopatron
ls | egrep [^$1]

13. Script para obtener dos listas de ficheros del directorio actual, una de directorios y otra de ficheros. Los campos a obtener son : permisos y nombre.

[andres@redhatserver bin]$ vi listadoble
ls -l | tr -s " " | cut -f1 > perm
ls -l | tr -s " " | cut -f9 > nomb
cat perm
cat nomb
rm perm nomb

14. Script que muestre en pantalla ficheros que tienen una determinada extensión (programas de .c) que dará el operador como argumento en línea de ordenes.

[andres@redhatserver bin]$ vi buscaextension
ls | grep `c$

15. Script para localizar líneas que empiecen por vocal y convierta a mayúsculas toda la línea encontrada.

[andres@redhatserver bin]$ vi buscavocal
cat $1 | grep ^[aeiou] | tr a-z A-Z

16. Shell-script para validar nombres de variables enviadas como argumentos desde línea de órdenes. Serán variables válidas las que cumplan los siguientes requisitos:
  • Tengan al menos 2 letras o números.
  • Empiece obligatoriamente por una letra.
  • La segunda o tercer caracter pueden ya ser letras o números.
  • No tenga más de 3 letras o números.

[andres@redhatserver bin]$ vi validar
echo $1 | egrep '^([a-z]|[A-Z])([a-z]|[0-9])?$'

17. Pasar lista de los alumnos que están conectados y grabarlos en un fichero cuyo nombre sea la fecha del día.

[andres@redhatserver andres]$ vi pasalista
var1= `date | tr –d “ “`
who > $var1

No hay comentarios: