You are on page 1of 20

El shell

1. ¿Qué es un shell (puede haber más de una respuesta


correcta)?

a) Un intérprete de comandos.

b) Un lenguaje de programación.

c) Una herramienta de gestión de archivos.

d) Una consola en el interior de una interfaz gráfica.

2. ¿Cuál es el shell por defecto en Linux?

a) Ksh

b) sh

c) bash

d) tcsh

3. Imaginemos la línea siguiente:


pepito@eeepc:~/Documentos/Fotos>, ¿qué información se
puede obtener?

pepito - el login del usuario

eeepc - el host

~/Documentos/Fotos - la posicion actual

> - usuario sin privilegios


4. La línea siguiente echo "hola, la fecha es " ; date ; exit:

a) Visualiza el texto y luego la fecha y espera una inserción.

b) No hace nada: usted sale.

c) Sale únicamente si el comando date funciona.

d) Como A pero luego deja el shell.

5. Ha insertado un comando que no se detiene (p. ej.: yes).


¿Qué hacer para terminar el programa?

CTRL - C

Historial

1. ¿Cómo volver a llamar al último comando insertado con el


teclado?

Con la flecha de arriba

2. Misma pregunta, pero con el comando fc.

fc -l -1
Gestión de archivos

1. ¿Es un programa ejecutable un archivo especial?

No. Es archivo ordinario.

2. ¿Cuál es la longitud máxima de un nombre de archivo,


extensión incluida?

a) 255 caracteres.

b) 32 caracteres.

c) 255 caracteres más la extensión.

d) La pregunta es errónea.

3. ¿Cuáles de las siguientes rutas son rutas absolutas?

a) ~/Documentos

b) /usr/local/bin

c) /opt/kde3/bin/../lib

d) /home/seb/Documentos

4. Esté donde esté, ¿cuál es el efecto de un "cd" sin


parámetros?

Ir a home del usuario.

5. Para listar de manera recursiva todos los archivos sin


excepción presentes en /usr, ¿qué comando se debe teclear?

cd /usr

ls -Ra → a = todos, R → recursivo


6. En un directorio que contiene una multitud de archivos,
¿cómo visualizar la lista detallada de los archivos, pero de
modo que los últimos modificados aparezcan en último lugar
en la lista (todo en la parte inferior)?

ls -ltR

7. Quiere crear, de la forma más sencilla posible, la ruta


fuentes /C/backup en su directorio personal. Sabiendo que
ninguno de estos directorios existe, inserta:

a) mkdir fuentes/C/backup

b) mkdir -p fuentes/C/backup

c) mkdir fuentes ; cd fuentes ; mkdir C ; cd C; mkdir backup

d) mkdir -p fuentes C backup

8. Quiere suprimir el directorio C de arriba de la manera


siguiente: rmdir C. ¿Va a funcionar?

No, porque hay otro archivo dentro.

9. Como root, tiene que mover un directorio y su contenido,


que pertenecen al usuario "oracle", a otro lugar. ¿Cuáles son
los parámetros de cp que va a utilizar?

cp -rp

10. ¿Cuál es el efecto, como root, del comando rm -rf /*?

borrar TODO.
11. ¿Cuál es el efecto, como simple usuario, del comando rm -
rf /*?

a) Se destruye todo el sistema de archivos.

b) Ningún efecto: no tengo permisos para suprimir la raíz.

c) Se devuelve un error, ya que sólo root puede utilizar este


comando.

d) Se suprimen mis archivos y directorios, estén donde estén,


incluso mi directorio home.

12. ¿Cómo crear un vínculo simbólico de /tmp/seb hacia


/home/seb/tmp?

ls -s /tmp/seb /home/seb/tmp

13. Mi directorio actual contiene tres archivos: fic1, fic2, f3.


¿Qué devuelve el comando ls f*?[13]?

-Todos los archivos que contengan una f y algo mas, en este caso los
3.

-Todos los archivos que contengan un 1 o un 3, en este caso fic1 y


f3.
Búsqueda de archivos

1. Es habitual encontrar archivos core cuando los programas


se cuelgan. ¿Cómo suprimirlos todos?

Find / -name core

exec rm -r {}

2. Quiere listar todos sus archivos avi de más de 650 MB


ubicados en /public/videos y que no ha visto desde hace unos
6 meses. ¿Cómo conseguirlo?

find /public/videos -iname *.avi -size 650000k -atime +180 -type f -


user “nombre”

3. Quiere buscar todas las instancias de un programa llamado


"startappli" dentro del path. ¿Qué comando utiliza?

a) whereis -b startappli

b) which startappli

c) which -a startappli

d) locate startappli

4. Ha perdido un documento que empieza por una letra, en


alguna parte del sistema de archivo. ¿Cómo comprobar que
locate devolverá una información actualizada y cómo obtener
la lista de los archivos que podrían corresponder al que busca?

1º - updatedb

locate [aA-zZ]*
El editor vi

1. ¿Cómo entrar en modo de inserción para insertar algo de


texto en el sitio actual, sea cual sea la palabra anterior?

a) [Esc] i

b) [Esc] a

c) [Esc]: i

d) : i

2. ¿Cómo guardar su documento actual como "newfic"?

:w newfic

3. ¿Cuáles son los tres medios de dejar vi guardando su


archivo?

a) ZZ

b) :q

c) :wq

d) - : x

4. ¿Cómo buscar todas las líneas que empiezan con hola u


Hola?

5. Quiere numerar las líneas. ¿Cómo conseguirlo?

[ESC] :set nu
6. ¿Cómo dirigirse a la línea 112, copiar 8 líneas y ubicarlas
después de la línea 180?

-[ESC] :112

-modo visual - v

- seleccionar lineas

- apretar Y para copiar

-[ESC] :180 y P de pegar.

Más sencilla: [esc] :112 / 8yy / :180 / p

Las redirecciones

1. ¿Cuál es el resultado del comando >fic sin nada delante?

crear fic sin nada.

2. ¿Qué va a mostrar ls -R />lista y qué contendrá lista si


ejecuta este comando como usuario normal?

Lista va a contener la lista detallada de todos los archivos y


directorios a los cuales el usuario tiene el derecho de acceder,
mientras que se visualizarán los errores en la consola: todas las
autorizaciones de acceso denegadas por falta de permisos del
usuario.

3. Como usuario, para listar la totalidad de los archivos del


sistema y colocar todos los resultados, sean cual sean, en una
lista, ¿qué redirección debe indicar?

a) 2>dev/null >lista

b) >lista 2>lista

c) 1>lista 2>&1
d) 2>1 >lista

4. ¿Cómo pasar un mensaje mediante echo por el canal de


error?

echo "mi abuelita" 2>

5. ¿Cómo visualizar el contenido de un archivo con cat y una


redirección en entrada?

cat < archivo

6. ¿Cómo suprimir todos los mensajes de error?

a) 2>/dev/null

b) 2>/dev/zero

c) >/dev/null 2>&1

d) 2>fic ; rm fic

Filtros y herramientas

1. Busque en /etc/passwd la línea correspondiente a su


usuario, y únicamente a éste.

cd /etc/passwd

grep “^pepito” /etc/passwd

2. Busque en /etc/passwd los usuarios que no tienen bash


como shell por defecto. Utilice una tubería (pipe).

Cat /etc/passwd | grep -v “bash$”


3. Usando una simple expresión regular, suprima las líneas
vacías y los comentarios (que empiezan por #) de /etc/hosts.

grep -v -E "ˆ(#|$)" /etc/hosts. Una línea vacía comienza por ˆ y


termina por $.

4. Visualice únicamente la lista de los logins y UID asociados


(campo 3) de /etc/passwd.

cut -d":" -f1,3 /etc/passwd.

5. ¿Qué serie de comandos permite conocer el número real de


líneas (no vacías, y no los comentarios) de /etc/hosts? Utilice
dos veces las tuberías y numere las líneas.

cat -n /etc/hosts | grep -v -E "ˆ(#|$)" | wc -l

6. Seleccione el archivo /etc/group por orden de GID (3a


columna) decreciente.

sort -n -r -t: -k 3 /etc/group

7. Dé la lista de los "diferentes shells utilizados por los


usuarios declarados en su máquina. No debe haber
duplicados.

cut -d: -f7 /etc/passwd | sort | uniq


8. En un archivo de texto de su elección (llamado aquí fic)
sustituya todas las é, è, ê, ë por una e (cuidado: esta pregunta
no funciona en unicode).

cat fic| tr "éèêë" "e"

9. ¿Cómo recuperar la línea 27a de un archivo fic (partiendo


de la idea de que fic contiene más de 27 líneas)?

a) cat -n fic | grep ˆ27 | cut -d" " -f2-

b) grep -n "" fic | grep ˆ27 | cut -d: -f2-

c) tail -27 fic | head -1

d) head -27 fic | tail -1

10. Retome la pregunta 33, pero esta vez haga que toda la
lista esté ubicada y se visualice en un archivo.

> "archivo"

Los procesos

1. ¿Es pertinente el comando tail -f fic &?

No es pertinente porque al estar en segundo plano no ves las


modificaciones.

2. Ha ejecutado un comando que monopoliza la consola sin


que muestre nada, ya que el tratamiento es muy largo. ¿Cómo
pasarlo a segundo plano?

con bg
3. Liste los procesos que pertenecen a root.

ps -u root

4. ¿Cómo visualizar la estructura en árbol de todos los


procesos? El acceso a la ayuda interna de ps puede ayudarle.

Pstree / ps -eH

5. ¿Cómo saber de una manera muy simple si el proceso


firefox está en ejecución?

ps -A | grep firefox / ps -e | grep firefox

6. Aísle los números de los procesos que corresponden a los


diversos shell bash lanzados.

pgrep bash / tr -s “ “ | cut d” “ c1-5

7. Ejecute un comando sleep 100&. Luego termine


correctamente este proceso.

Kill -15

8. ¿Qué ocurre si, como root, usted "mata" de manera abrupta


el proceso 1?

se reinicia el SO.

9. Un proceso recalcitrante se niega a pararse. ¿Cuál es la


única acción posible?

kill -9 sigkill

10. ¿Cómo estar seguro de que un proceso importante no se


parará cuando cierra su consola o terminal?

con "nohup" y &

12. Un proceso de codificación llamado transcode consume


todos los recursos CPU de su máquina, poniendo a prueba su
procesador y haciendo "currar" a su ordenador. ¿Cómo
conocer su prioridad actual? ¿Cómo rebajar la prioridad?

ps -A | grep transcode | renice +20


13. La columna NI visible con el -I de ps le facilita el factor de
incremento del scheduler. A menudo está a 0 (prioridad
máxima por defecto para el usuario). Rebaje la prioridad del
proceso con el comando renice: renice 10 PID.

renice +20

Ejecución condicional

1. Suprima un archivo fic. Si la supresión tiene éxito, haga que


se muestre OK. En caso contrario, haga que se muestre ERROR
y haga un ls -l de este archivo.

rm -r fic && echo "OK" || (echo "ERROR" ; ls -l fic)

Variables

1. Declare una variable VAR que contenga su apellido.

VAR=Sellés

2. Una variable a contiene el valor 2. Inicie desde la misma


consola un segundo bash. Visualice a. ¿Qué contiene la
variable a?

Nada. Se ha olvidado de exportarlo.

3. Cree una variable b que contenga 3 y expórtela. Inicie un


bash hijo e incremente b. Salga y muestre b. ¿Qué contiene?

a) Nada.

b) 4.

c) 3 ya que se incrementó b en un proceso hijo diferente del


padre.

d) 1 ya que ya no existe b en los hijos, se ha vuelto a poner a


0.
4. Al contener texto la variable C, ¿qué muestra echo ${C:
+"cucú"} y qué contiene C?

Cucú y C contendra el valor anterior.

5. Modifique el path por defecto añadiéndole /opt/bin en


primera posición.

1º echo $PATH y copias las direcciones

2º echo $PATH=/opt/bin y copias las direcciones anteriores.

Export PATH=/opt/bin:$PATH

6. ¿Cómo conocer el valor de devolución de una supresión de


archivo?

echo $?

7. Mande la señal 15 al último proceso ejecutado en segundo


plano.

1º hacer un jobs

2º kill -15 ID del proceso en segundo plano

echo $! (para saber la ultima ID del proceso en segundo plano) y kill


-15 ID

8. Dé dos medios de sumar dos variables A y B que contienen


enteros y de ubicar el resultado en A.

typeset -i a

typeset -i b

a=a+b
Prácticas

Gestión de los archivos

Objetivo: efectuar operaciones básicas en el sistema de


archivos.

1. A partir de su directorio personal, cree la estructura


siguiente utilizando un único comando:

|-----carpeta1

| |-----carpeta3

|-----carpeta2

| |-----carpeta4

mkdir -p carpeta1/carpeta3 && mkdir -p carpeta2/carpeta4

mkdir -p /path1/path2 /path3/path4

2. Vaya al directorio carpeta1 con una ruta absoluta y cree el


archivo archivo1 en este directorio.

cd /home/jorge/dirpracticas/carpeta1/

touch archivo1

3. Copie archivo1 en el directorio carpeta3 con una ruta


relativa.

cp -p archivo1 ./carpeta3/
4. Vaya a la carpeta2 utilizando una ruta relativa, y copie el
archivo archivo1 de carpeta3 con el nombre

cd ../carpeta2/

cp ../carpeta1/carpeta3/archivo1 ./archivo2

5. Renombre archivo2 como archivo3 y muévalo al directorio


carpeta3.

mv archivo2 archivo3

6. Suprima archivo1 del directorio carpeta3.

rm archivo1 desde carpeta3

7. Con rmdir suprime carpeta2, luego carpeta1 y todo su


contenido. ¿Es posible? ¿Por qué? ¿Cómo conseguirlo?

No es posible porque hay archivos o directorios dentro de esas dos


carpetas. Se consigue con rm -r

8. ¿Cuál es el objetivo del comando ls -l [a-z]*. ??[ !0-9]?

Listar los archivos que empiecen por una letra de la "a" a la "z"
continúen por cualquier cosa, luego tengan un punto y después del
punto que haya 4 letras y que la tercera letra que no sea ningún
numero de 0-9.

9. Cree un archivo llamado "-i" con una redirección: echo > -i.
Intente suprimirlo.

rm ./-i
Buscar archivos

Objetivo: buscar archivos con find, whereis y locate.

1. Visualice todos los archivos que tienen un tamaño inferior a


400 bytes y los derechos 644.

find . -type f -size -400c -perm -644

2. Visualice todos los archivos en su directorio personal que


tienen un tamaño inferior a 400 bloques.

find /home/jorge/ -type f -size -400

3. Liste en formato largo todos los archivos de su propio


sistema que fueron modificados hace más de 7 días.

find . -atime +7 | ls -l

4. Liste y visualice en formato largo los archivos en su


directorio personal que tienen como propietario guest o que
tienen un tamaño entre 512 y 1024 bytes, ambas cantidades
incluidas.

Da error porque "guest" no es un usuario.

5. Busque todos los archivos vacíos del sistema que no


pertenecen a root e intente suprimirlos. Utilice los parámetros
-empty y -exec para ejecutar un rm en cada archivo
encontrado.

find . -empty -not -user root -exec rm \;

6. Indique dónde se encuentra el comando binario ls.


which ls -> /bin/ls

7. Ha perdido el archivo letra_importante.odf. ¿Dónde está,


sin utilizar find?

-updatedb

-locate letra_importante.odf

cd Las redirecciones

Objetivo: trabajar con las redirecciones de canales.

1. El comando find / devuelve muchos errores si un simple


usuario lo utiliza debido a un problema de permisos. Evite los
mensajes de error redireccionándolos hacia un "agujero
negro":

rm carpeta1 2>agujeronegroto

2. En el caso anterior y a pesar de los errores, sigue teniendo


acceso a muchas ubicaciones y se visualiza una lista muy larga
que, por lo tanto, no se puede aprovechar. Coloque esta lista
en un archivo llamado resultado.

3. Ahora, no se visualiza nada. Finalmente, para saber por qué


no puede acceder a determinados directorios, va a obtener
también los mensajes de error en el archivo resultado, con la
lista de los archivos. Haga una redirección del canal de error
estándar en el canal de salida estándar:

rm c*1 1>resultado 2>&1

4. No se visualiza nada más. Quiere ambas cosas: un archivo y


la visualización de los resultados en pantalla. Se utiliza el
comando tee con una tubería. Permite recuperar un flujo
saliente, colocarlo en un archivo y volver a sacar este flujo
como si no hubiera pasado nada:

ls -l | tee archivo

Los filtros y herramientas

Objetivo: trabajar con filtros y herramientas en un archivo


clásico.

1. El archivo /etc/passwd es un gran clásico en Unix. Se


compone de siete campos separados por ":":
login:passwd:UID:GID:Comentario:homedir:shell. Recupere la
línea del usuario root en /etc/passwd:cat

cat /etc/passwd | grep "^root"

2. En esta línea, recupere el UID de root:

cat /etc/passwd | grep "^root" | cut -d: -f3

3. Cuente el número de usuarios que contiene este archivo


usando una redirección en entrada:

cat -n /etc/passwd > archivo5

wc -l < archivo5

4. Un poco más complicado: recupere la lista de los GID,


ordénelos por orden creciente y suprima los duplicados:cat

cat /etc/passwd | cut -d: -f4 | sort -n | uniq

5. De ahí, extrapole el número de grupos diferentes utilizados:

cat /etc/passwd | cut -d: -f4 | sort -n | uniq | wc -l

6. Convierta todos los logins a mayúsculas:

cat /etc/passwd | cut -d: -f1 | tr "[a-z]" "[A-Z]"

7. Aísle ahora la octava línea de /etc/passwd. Hay varias


soluciones, veamos las dos siguientes:

cat -n /etc/passwd | egrep "^* 8"


Los procesos

Objetivo: gestionar los procesos.

1. Inicie el proceso sleep 1000 en segundo plano. Recupere su


PID.

sleep 100& y te sale el PID

2. Vuelva a colocar este proceso en primer plano, luego párelo


(no lo mate) y de nuevo mándelo a segundo plano.

-fg

- CTRL +Z

-bg

3. Indique los detalles de este proceso:

ps -l y te sale si aun no ha acabado.

4. Modifique la prioridad de este proceso y paselo a un factor


10:

renice -10 [ID del proceso] 9762 en mi caso.

5. Liste de nuevo el detalle de este proceso, pero con formato


largo. Mire el valor de la columna NI:

ps -l | grep "sleep" y la columna NI es -10

6. Mande la señal 15 a este proceso. Esto va a terminarlo.

kill -15 [ID del proceso]

You might also like