Professional Documents
Culture Documents
Índice de contenido
Introducción al sistema operativo LINUX...............................................................................3
Introducción al sistema operativo LINUX...............................................................................4
Conceptos básicos.................................................................................................................4
Organización del árbol de archivos........................................................................................5
Introducción a la línea de comandos......................................................................................5
Manipulación de archivos........................................................................................................7
Navegando el árbol de directorios..........................................................................................8
Listar el contenido de directorios............................................................................................9
Comodines de la línea de comandos.....................................................................................9
Comprobando espacio disponible........................................................................................11
Manipulación de archivos y directorios................................................................................12
Permisos de acceso a archivos y directorios.......................................................................15
El sistema de archivos...........................................................................................................18
Sistema de archivos.............................................................................................................19
Enlaces duros.......................................................................................................................19
Enlaces simbólicos...............................................................................................................20
Búsqueda de archivos..........................................................................................................22
Copias de seguridad.............................................................................................................23
Redirecciones y tuberías.......................................................................................................25
Redireccionando la entrada, salida y error estándar...........................................................26
Filtros y procesamiento de cadenas.....................................................................................27
Filtros y procesamiento de cadenas.....................................................................................28
El editor de flujo sed.............................................................................................................31
Procesando texto con awk...................................................................................................32
Scripts del shell.......................................................................................................................34
Scripts del shell.....................................................................................................................35
Impresión y comunicación.....................................................................................................44
Impresión..............................................................................................................................45
Comunicación.......................................................................................................................45
Control de procesos y herramientas del sistema...............................................................47
Control de procesos..............................................................................................................48
Herramientas del sistema.....................................................................................................50
1
Introducción al sistema operativo LINUX
Introducción al sistema operativo LINUX
Conceptos básicos
1. ¿Qué se entiende por “free software”?.
Linux es el núcleo, el programa del sistema que asigna los recursos de la máquina
a los otros programas que se ejecuten. El núcleo es una parte esencial de todo
sistema operativo, pero inútil por sí sólo; sólo puede funcionar en el contexto de un
sistema operativo completo. La mayoría de las distribuciones de sistemas
operativos que utilizan Linux como núcleo son básicamente versiones modificadas
del sistema operativo GNU. GNU comenzó a desarrollar en 1984, años antes de
que Linus Torvalds escribiera su núcleo. Linux no es un paquete GNU; esto es, no
fue desarrollado bajo el auspicio del Proyecto, ni contribuido al Proyecto GNU de
forma específica. Por tanto, el sistema operativo debería ser conocido como
GNU/Linux.
4. En LINUX cada usuario pertenece a un grupo. ¿Para que son utilizados los grupos
de usuarios? ¿Que es el UID y GID?
Cada usuario debe tener un nombre de inicio de sesión o “login” para ingresar al
sistema y pertenece a uno o más grupos. Los grupos permiten organizar usuarios
de funciones o características similares de tal modo que puedan definirse
permisos de acceso sobre los archivos y directorios en base a los grupos. Esto
● Día-Mes-Año
● Año-Mes-Día
3. Si usted ha dejado por descuido su sesión abierta, y otro usuario toma el control de
su terminal e intenta cambiar la contraseña, ¿podrá realizarlo?
Las probabilidades son bajas ya que para realizarlo debería conocer su contraseña
actual, puesto que al ejecutar el comando “passwd”, se solicitará la contraseña
actual para definir una nueva.
Al iniciar sesión por defecto se ubicará en un directorio por debajo del /home cuyo
nombre es igual al nombre de usuario utilizado. Es conocido como directorio
HOME.
Una ruta absoluta indica el camino a seguir para ubicar un archivo a partir de la raiz
del sistema de archivos, ejemplo:
/boot/grub/grub.conf
La ruta relativa indica el camino que debe ser seguido para ubicar un archivo a
partir de la ubicación actual, utilizando “.” y “..” para indicar el directorio actual o
superior respectivamente, por ejemplo, suponiendo que se encuentra en su
directorio HOME, para localizar el mismo archivo anterior:
../../boot/grub/grub.conf
Suponiendo que su directorio actual es jose, que comando debe utilizar para
cambiarse al directorio tmp usando la ruta absoluta?
$ cd /tmp
6. Suponiendo que su directorio actual es /tmp, que comando debería utilizar para
acceder al directorio /usr/share/doc utilizando la ruta relativa?
$ cd ../usr/share/doc
3. Sin moverse de su directorio HOME, liste el contenido del directorio /boot ordenado
por fecha de modificación del archivo.
$ ls -lat /boot
todos los archivos del directorio /etc cuyo nombre comienzan con “h” y terminan
con “s”.
$ ls -lad /etc/h*s
El comando listaría todos los archivos cuyo nombre tiene exactamente dos
caracteres y se encuentran en el directorio /usr/bin o /usr/sbin.
2.30321876719250726600
El porcentaje que ocupa el directorio /usr/bin con respecto al espacio total del
sistema de archivos que lo contiene, es 2.3%.
Para este caso, este directorio HOME ocupa apenas 0.19 % del total del sistema
de archivos.
.
|-- docs
| |-- informes
| `-- planillas
| |-- enero
| |-- febrero
| `-- marzo
`-- reportes
|-- culminados
`-- en_proceso
10. Copie todos los archivos del directorio /etc que comienzan con p al directorio
temporal
$ cp /etc/p* temporal
El comando cat no permite visualizar el archivo pagina por pagina o linea por
linea, more y less si lo permiten, less ademas permite utilizar las flechas de
dirección para visualizar el documento y resalta las coincidencias de una
búsqueda, sin embargo, se debe tener en cuenta que el comando less no existe
en todos los sistemas operativos Unix.
14. Como puede hacer para buscar una cadena de texto dentro al visualizar un archivo
$ mkdir docs
$ chmod 775 docs
$ mkdir docs/planillas
$ chmod 755 docs/planillas
$ mkdir docs/planillas/enero
$ mkdir docs/planillas/febrero
$ mkdir docs/planillas/marzo
$ chmod 775 docs/planillas/*
$ mkdir reportes
$ chmod 700 reportes
$ mkdir reportes/culminados
$ mkdir reportes/en_proceso
$ chmod 700 reportes/*
2. ¿Que permisos debería tener un archivo para permitir que el propietario pueda leer
y escribir en el, el grupo leer y los otros ningún permiso? ¿Con qué comando
puede establecer esos permisos?
3. Que permisos debería tener un archivo para permitir al propietario leer, escribir y
ejecutar un archivo, al grupo y los otros solamente ejecutar? ¿Con qué comando
puede establecer esos permisos?
4. Cual debería ser el valor del umask para que los directorios se creen con los
siguientes permisos rwxrwxr-x?
5. Cual debería ser el valor del umask para que los directorios se creen con los
siguientes permisos rwxr-xr-x?
6. Cual debería ser el valor del umask para que los directorios se creen con los
siguientes permisos rwxr-x---?
7. Cual debería ser el valor del umask para que los directorios se creen con los
siguientes permisos rwx------?
8. Cual deberia ser el valor del umask para que los archivos se creen con los
siguientes permisos rw-rw-r--?
9. Cual debería ser el valor del umask para que los archivos se creen con los
siguientes permisos rw-r--r--?
10. Cual debería ser el valor del umask para que los archivos se creen con los
siguientes permisos rw-------?
11. Describa la función de los permisos SUID, SGID y Sticky con un ejemplo de cada
uno.
SUID sobre un archivo ejecutable permite que el programa se ejecute bajo los
privilegios del usuario propietario. Por ejemplo, es posible crear un programa
llamado startdb cuyo propietario sea el usuario oracle y el bit SUID activo, es
decir, permisos 4755, cualquier usuario que ejecute el programa, lo ejecutara como
si fuese el usuario oracle.
El permiso SGID sobre un directorio permite que los archivos que se crean dentro,
hereden el grupo propietario del directorio, en lugar de ser creados bajo el grupo
primario del usuario creador. Esto permite a miembros del mismo grupo modificar
archivos creados por otros usuarios del mismo grupo.
Ejemplo, si el directorio /contab pertenece a root del grupo contab, y los permisos
son 775:
Sin embargo, si el directorio /contab pertenece a root del grupo contab, y los
permisos son 2775, es decir SGID activo:
12. Que permisos deben ser establecidos a directorios que permiten la escritura a
todos?
Sistema de archivos
1. Explique con sus propias palabras el concepto de sistema de archivos.
Refiérase a http://es.wikipedia.org/wiki/Sistema_de_archivos
Enlaces duros
1. Ejecute las siguientes acciones y evalúe el resultado. Anote sus observaciones.
Son exactamente iguales los atributos ya que apuntan al mismo inodo. El contador
de enlaces se incremento en 1.
10. Visualice el contenido del archivo hosts2. ¿El contenido puede ser visualizado?
¿Por que?
$ cat hosts2
Si, el contenido puede ser visualizado, ya que al eliminar el archivo hosts, solo se
ha eliminado un enlace, no el archivo en si. Es posible notar que el contador de
enlaces esta nuevamente en 1.
Enlaces simbólicos
1. Ejecute las siguientes acciones y evalúe el resultado. Anote sus observaciones.
10. Visualice el contenido del archivo hosts. ¿El contenido puede ser visualizado?
¿Por que?
$ cat hosts
cat: hosts: No existe el fichero o el directorio
Búsqueda de archivos
1. Realice las siguientes búsquedas.
6. Buscar archivos que fueron modificados hace 30 días o mas a partir del directorio
actual.
$ find . -type f -mtime +30 -ls
7. Buscar archivos que fueron modificados hace 30 días o menos a partir del
directorio actual.
$ find . -type f -mtime -30 -ls
8. Buscar archivos cuyo nombre termine en ".log" que fueron modificados hace
30 días o mas y moverlos al directorio /tmp/backup.
$ find . -type f -name "*.log" -mtime +30 -exec mv {} /tmp/backup \;
9. Buscar archivos a partir del directorio actual cuyo nombre termine en ".log" que
fueron modificados hace 30 días o mas y comprimirlos con el comando gzip.
$ find . -type f -name "*.log" -mtime +30 -exec gzip {} \;
10. Buscar archivos cuyo tamaño sea mayor a 100 MB en el directorio /usr.
$ find /usr -type f -size +100m -ls
11. Buscar todos los archivos dentro del directorio /etc que contengan el
texto localhost.
$ find /etc -type f -exec grep -l localhost {} \;
Copias de seguridad
1. Realice una copia de seguridad de todo el directorio docs creado en su HOME. El
nombre del archivo tar debe ser /tmp/<usuario>.tar. Utilice las variables
de entorno USER y HOME en el comando.
$ tar cvf /tmp/$USER.tar $HOME
5. Identifique el tamaño que ocupa todo su directorio HOME. Realice una copia de
seguridad de su directorio home con el comando tar a un archivo
dentro del directorio /tmp, verifique el tamaño del archivo tar creado y
compárelos.
$ cd
$ du -sk .
$ tar cvf /tmp/$USER.tar $HOME
$ ls -la /tmp/$USER.tar
7. Elimine el archivo tar creado y ejecute nuevamente una copia de seguridad con el
comando tar comprimiendo los datos con bzip2 y verifique el tamaño del archivo
tar creado.
$ rm /tmp/$USER.tgz
$ tar jcvf /tmp/$USER.tz2 $HOME
$ ls -la /tmp/$USER.tz2
● /dev/nst0
El comando:
$ mt -f /dev/nst0 rewind
Retrocede la cinta
El comando:
$ mt -f /dev/nst0 fsf 1
9. ¿Existe algún beneficio en utilizar compresión por software, por ejemplo, utilizando
las opciones -j o -z del comandor tar, cuando se realiza backup a un dispositivo de
cinta?
3. Busque con el comando find en el directorio /var todos los archivos que
terminen en ".log". Los mensajes de error deben ser completamente
ignorados redireccionando el error estándar a /dev/null.
$ find /var -type f -name "*.log" 2> /dev/null
4. Busque con el comando find en el directorio /var todos los archivos cuyo
propietario no sea root. Redireccione la salida estándar y el error estándar al
mismo archivo.
$ find /var -type f ! -user root -ls > find.log 2>&1
6. Busque todos los archivos de tipo bloque del directorio /dev y a través de una
tubería, visualice el resultado con el comando more.
$ find /dev -type b -ls | more
● Contraseña (obsoleto)
● UID
● GID
● Directorio HOME
● Shell
Utilice el siguiente archivo passwd de ejemplo. Puede crear un archivo con este
contenido en su directorio home:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
gnarwl:x:390:390:Email autoreply agent:/var/lib/gnarwl:/bin/false
juan.perez:x:515:516::/home/juan.perez:/bin/bash
ogomez:x:516:517::/home/ogomez:/bin/bash
NOTA: Todos estos ejercicios requieren que la expresión regular inicie con ^ y
termine con $.
1. Utilizar el comando cut para obtener el nombre de todos los usuarios del sistema
listados en el archivo passwd.
$ cut -f 1 -d ":" passwd
2. Utilizar el comando cut para obtener el nombre de todos los usuarios, su UID y
GID del sistema listados en el archivo passwd.
3. Utilizar el comando cut para obtener el nombre de todos los usuarios, su UID y
GID del sistema listados en el archivo passwd y mostrar la salida separada por un
tabulador utilizando el comando tr.
$ cut -f 1,3,4 -d ":" passwd | tr “:” “\t”
línea ($).
9. Utilizar una combinación del comando egrep con expresiones regulares y cut
para obtener el nombre de todos los usuarios del sistema listados en el archivo
passwd cuyo UID sea menor a 20.
$ egrep "^.*x:1?[0-9]:.*$" passwd | cut -f 1 -d ":"
10. Utilizar una combinación del comando egrep con expresiones regulares y cut
para obtener el nombre de todos los usuarios del sistema listados en el archivo
passwd cuyo nombre de login contenga un punto, por ejemplo juan.perez.
$ egrep "^.+\..+x:.*$" passwd | cut -f 1 -d ":"
11. Utilizar una combinacion de los comandos, ls, grep y alias, para crear un alias
llamado lld, el cual listara en formato largo unicamente los directorios del
directorio actual.
$ alias lld="ls -la | grep ^d"
12. Utilizar una combinacion de los comandos, ls, grep, cut y alias, para crear un
alias llamado lsd, el cual listara en formto corto (solo el nombre) únicamente los
directorios del directorio actual.
$ alias lsd='ls -la | grep ^d | tr -s " " | cut -f 9 -d " "'
13. Utilizar una combinación de los comandos head y tail para mostrar únicamente
la quinta línea del archivo passwd
$ head -5 passwd | tail -1
14. Utilizar el comando egrep con expresiones regulares para obtener la lista de todos
los usuarios del sistema listados en el archivo passwd cuyo UID sea mayor a 500.
$ egrep "^.*x:([1-9]+[0-9]+|[5-9]+)[0-9]+[0-9]+:.*$" passwd
Esta expresión regular relativamente compleja busca números que van desde 500-
999 o 1000 hasta 9999, siendo:
Modifique todas las líneas que contienen /bin/false como shell por
/bin/nologin.
$ sed 's/\/bin\/false/\/bin\/nologin/' passwd
2. Modifique el shell de todos los usuarios cuyo nombre de login contenga un punto
por /bin/nologin.
$ sed '/^.*\..*x:.*$/ s/\/bin\/bash/\/bin\/nologin/' passwd
5. Muestre solamente las líneas que corresponde con usuarios que no tienen como
shell /bin/nologin.
$ sed -n '/^.*nologin$/! p' passwd
8. Muestre el nombre de login, el UID, el GID de cada usuario que tiene como shell
/sbin/nologin.
$ awk -F ":" '/^.*\/sbin\/nologin$/ { print $1,$3,$4}' passwd
9. Muestre el nombre de login, el UID, el GID de cada usuario cuyo nombre de login
contiene un punto.
$ awk -F ":" '/^.+\..+$/ { print $1 }' passwd
En esta sección, creará un script para realizar copias de seguridad. Iniciará con un
script simple el cual irá modificando hasta obtener el resultado deseado.
Guarde el archivo. Para poder ejecutar el script, debe establecer los permisos
correcto, para ello ejecute el comando:
$ chmod 755 script1.sh
Ahora, agregará al script la sección que permite al usuario seleccionar una opción
del menú, con el comando interno read. Copie el archivo script1.sh a
script2.sh
$ cp script1.sh script2.sh
echo "============="
echo
echo "1- Crear backup"
echo "2- Listar backup"
echo "3- Restaurar backup"
echo “0- Salir”
echo
# El usuario ingresa una opcion
echo -n "Seleccione una opcion: "
read OPCION
# Mostramos al usuario que opcion ha seleccionado
echo "Usted selecciono la opcion $OPCION"
En este punto, usted debe poder seleccionar una opción del menú y el script
mostrará la opción seleccionada.
exit 0
;;
1)
echo "Creando backup de $HOME para $USER"
tar cf /tmp/$USER.tar $HOME
echo "Backup Finalizado"
;;
2)
echo "Listando backup"
tar tf /tmp/$USER.tar
;;
3)
echo "Recuperando backup"
cd /tmp
tar xvf /tmp/$USER.tar
;;
*)
echo "Opcion invalida"
;;
esac
VALIDO=0
En este punto, si ingresa una opción incorrecta, debe volver a solicitar que ingrese
una opción válida.
Establezca los permisos apropiados y ejecute el script sin argumentos, luego con
las opciones -c y -l
$ chmod 755 script5.sh
$ ./script5.sh
$ ./script5.sh -c
$ ./script5.sh -l
1. Cree un script para identificar el nombre del último día del mes.
#!/bin/bash
DIA=Viernes
;;
7)
DIA=Sabado
;;
esac
#!/bin/bash
ARCHIVO_TEMP=/tmp/df.log
ALERTA=$(cat /tmp/df.log | tr -d "%" | grep -v Uso | awk '$5 > 90 { print $0 }' |
wc -l)
if [ $ALERTA -ne 0 ]
then
echo "ALERTA! Uno de los sistemas de archivos supera el 90% de utilizacion"
mail -s "ALERTA de espacio libre" $USER < /tmp/df.log
fi
4. Tarea avanzada. Investigar sobre los comandos dd, stty y tty. Preparar un script
que pueda diferenciar si el usuario presionó ENTER o si ingreso otro caracter.
#!/bin/bash
echo -n "Introduzca un caracter: "
stty raw
TTY=$(tty)
readchar=$(dd if=${TTY} bs=1 count=1 2> /dev/null)
stty -raw
if [ $readchar = "^M" ] <--- ^M se obtiene con “ctrl+v, enter”
then
echo
echo "Usted presionó la tecla ENTER"
else
echo
echo "Usted presionó la tecla '${readchar}'"
fi
exit 0
Impresión
1. Utilice el comando pr para formatear y mostrar las 2 primeras paginas del archivo
/etc/samba/smb.conf, enviando la salida al comando lpr, imprimiendo 2
copias.
$ pr +1:2 /etc/samba/smb.conf | lpr -# 2
Agregar:
export PRINTER=hplj
Grabar y salir.
Comunicación
1. Envíese a usted mismo una copia del archivo /etc/hosts como cuerpo de
mensaje utilizando el comando mail, con el asunto "archivo host".
$ mail -s "archivo host" $USER < /etc/hosts
2. Una vez ingresado el comando mail, identifique las ordenes requeridas para:
Deberá ejecutar:
● 10 [ENTER]
● 1-20 d [ENTER]
● * d [ENTER]
● h [ENTER]
Control de procesos
1. En una terminal, identifique el tty asociado.
$ tty
10. En la segunda terminal, envíe la señal SIGKILL al proceso yes con el comando
killall.
$ killall -9 yes
Presionar CTRL+C
13. En la primera terminal, con el comando find, busque todos los archivos de tipo
bloque en el directorio /dev, envíe el resultado al archivo /tmp/find.out, los
errores deben ser enviados a /dev/null. Envíe la búsqueda a segundo plano.
$ find /dev -type b -ls > /tmp/find.out 2> /dev/null &
14. Verifique los trabajos ejecutándose en segundo plano con el comando jobs.
$ jobs
16. Utilice el comando time para identificar cuanto tiempo demora el comando:
17. Utilizando el comando "w", identifique usuarios que han estado inactivos mas de
una hora.
$ w
Agregar:
0 19 * * * $HOME/backup.sh
Guardar y salir.
2. Agende en cron una tarea que se ejecute todos los domingos a las 01:00 y busque
todos los archivos que pertenecen a usted en el directorio /tmp y los borre.
$ crontab -e
Agregar:
0 1 * * 0 /bin/find /tmp -user $LOGNAME -exec rm {} \;
Guardar y salir.
Agregar:
1 0 27 * * /usr/local/bin/reporte.sh
Guardar y salir.
4. Agende en cron una tarea que se ejecute los lunes, miercoles y viernes, enviando
por mail un reporte de los archivos con tamaño mayor a 50 MB encontrados en el
directorio /tmp.
$ crontab -e
Agregar:
1 0 * * 1,3,5 /bin/find /tmp -size +50m -ls | /bin/mail -s "Archivos grandes"
$LOGNAME
Guardar y salir
*/5 * * * * /usr/local/sbin/check_database.sh
9. Cree un script dentro de su directorio ~/bin para borrar todos los archivos de
nombre *.txt mas viejos a 30 dias que se encuentran en su HOME con el
nombre dirclean.sh. Con el comando at, ejecute el script dirclean.sh, el día
domingo a las 18:00 Horas.
$ vi $HOME/bin/dirclean.sh
Agregar:
find $HOME -type f -name "*.txt" -mtime +30 -exec rm {} \;
Guardar y salir.
$ at 18:00 sunday
$HOME/bin/dirclean.sh
Presionar CTRL+D.