0% encontró este documento útil (0 votos)
236 vistas105 páginas

Linux

Este documento provee una guía detallada para instalar y configurar Linux, incluyendo la creación de máquinas virtuales, particionado de discos, instalación de sistemas operativos, estructura básica de archivos, comandos fundamentales, administración de usuarios y grupos, y configuración de permisos. El objetivo es cubrir todo el material de un curso semestral de introducción a Linux para estudiantes de informática.

Cargado por

christiancastro
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
236 vistas105 páginas

Linux

Este documento provee una guía detallada para instalar y configurar Linux, incluyendo la creación de máquinas virtuales, particionado de discos, instalación de sistemas operativos, estructura básica de archivos, comandos fundamentales, administración de usuarios y grupos, y configuración de permisos. El objetivo es cubrir todo el material de un curso semestral de introducción a Linux para estudiantes de informática.

Cargado por

christiancastro
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 105

Guía para pasar Linux con el prof.

Coello
[email protected]

December 7, 2017

1
Introducción.

Éste documento intenta cubrir el material para un curso semestral de Linux. El objetivo es dar respuesta
a los problemas que ha generado su enseñanza en las carreras de informática en la sede Santiago Centro de
Inacap. Éste documento es esencialmente, todo el material que el prof. Coello expone en su curso de Linux,
pero profundizado los contenidos que nos han parecido más importantes. Hemos hecho un énfasis en la ma-
teria que es evaluada pero que no se pasa y los temas que se tratan rápidamente en el aula, de los que no
queda registro y sobre los cuales no se puede volver a estudiar.

La increíble tasa de reprobación en la sección impartida por el prof. Coello es injustificable. Con un prome-
dio histórico del 10% de estudiantes aprobados por semestre es la más alta en toda la carrera y probablemente
de todo Inacap. Situación incomprensible pues, a nivel introductorio, Linux no es difícil. Todo se resume a
comprender la estructura básica del sistema de ficheros en Linux y saber qué es lo que exactamente hace cada
comando.

Las versiones que se utilizan en éste documento son CentOS 6.9 y Red Hat Enterprise Linux 7.3; no existe
mayor diferencia entre ambas. De hecho, CentOS deriva de Redhat. Lo único un poco distinto es la forma en
que se instalan los servidores. El detalle de la instalación de 19 servicios (que constituye la tarea de final del
curso con el prof. Coello) se entrega en la última parte del documento.

Trabajamos Linux en forma virtualizada bajo VMWare 12 PRO.

C.C. Santiago, 5 de Noviembre del 2017.

2
Contents
1 Poniendo a punto la máquina 7
1.1 Creación de una máquina virtual en 16 pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Cuando VMWare se detiene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Instalación de Red Hat Enterprise Linux 7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Instalación de CentOS 6.9 en un disco particionado . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 La instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 El particionado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.3 Últimas configuraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.4 Ejercicio n°1. Genere una instalación personalizada con las siguientes características:
(Primera prueba del primer semestre del 2017) . . . . . . . . . . . . . . . . . . . . . . . 11

2 Lo básico, la estructura de archivos de linux y 39 comandos 13


2.1 Lo básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 La tilde , el /home y el directorio raíz (/) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2 Las terminales en linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.3 En linux, no es lo mismo la mayúscula que la minúscula . . . . . . . . . . . . . . . . . . . 14
2.1.4 Volver al directorio raíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.5 Uso de man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.6 Interrupción de procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.7 El editor de textos Nano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.8 El autocompletar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.9 Para deslogearnos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.10 Apagar y reiniciar CentOS de manera ordenada . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.11 Para reiniciar nuestro SO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Configuraciones básicas de la consola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Cambio de sus colores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.2 Configuración de un mensaje de bienvenida permanente . . . . . . . . . . . . . . . . . . . 16
2.2.3 Configuración de la fecha a nuestro equipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.4 Darle un nombre a nuestro equipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 La estructura de archivos en linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.1 Las rutas relativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.2 Construcción de una estructura jerárquica de varios niveles . . . . . . . . . . . . . . . . . 20
2.3.3 Ejercicio n°2: Construya una estructura jerárquica. (Primera prueba del primer semestre
del 2017) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 39 Comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4.1 Ejercicio n°3. Practique la comandería básica. (Primera prueba del primer semestre
del 2017) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3 Variables de entorno 29

4 Usuarios y grupos 29
4.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Comandos para la administración de usuarios y grupos . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 El identificador de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4 UGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.5 Creación de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.6 Práctica con usuarios y grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.7 Lo que sucede al crear usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.7.1 El comando chage. (Primera prueba del primer semestre del 2017) . . . . . . . . . . . 43

3
4.8 Los ficheros /sbin/nologin y /bin/false . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.8.1 Ejercicio n°4. Cree un usuario PEPITO con las siguientes características: (Primera
prueba del primer semestre del 2017) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.9 El fichero /etc/login.defs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.10 El fichero /etc/skel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.10.1 Ejercicio n°5. Genere un guión tipo bash que sea aplicable para todos los futuros usuarios
creados. (Primera prueba del primer semestre del 2017) . . . . . . . . . . . . . . . . . 46
4.11 Consideraciones finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5 Administración de permisos para archivos y directorios 47


5.1 Permisos en archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.2 Permisos en directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3 Cambiar de propietario archivos o directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4 Cambiar de grupo archivos o directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5 La estructura binaria de los permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.6.1 Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.6.2 Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

6 Programación de Scripts 51
6.1 Introducción a la Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.2 Ejercicio: construya un script que despliegue información cada vez que inicie un nuevo usuario
su sesión Segunda prueba del primer semestre del 2017 . . . . . . . . . . . . . . . . . . . . . . 52
6.3 Nuestro primer Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7 Empaquetar y comprimir archivos 58


7.1 Empaquetar archivos con el formato tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.1.1 Empaquetar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.1.2 Desempaquetar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.1.3 Ver el contenido de los archivos sin desempaquetar . . . . . . . . . . . . . . . . . . . . . . . 58
7.1.4 Ejemplo: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2 Comprimir archivos con el formato gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2.1 Comprimir un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2.2 Descomprimir un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3 Comprimir y empaquetar archivos con el formato tar.gz . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3.1 Comprimir y empaquetar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3.2 Descomprimir y desempaquetar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.3.3 Ver el contenido de un archivo comprimido y empaquetado . . . . . . . . . . . . . . . . . 60
7.4 Comprimir archivos y directorios con el formato zip . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.5 Comprimir archivos con el formato bz2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.6 Respaldos (backups) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

8 Agendamiento con el demonio Cron 61


8.1 Modos de arranque en linux y configuración del arranque de Cron . . . . . . . . . . . . . . . . . . 61
8.2 Configuración de la hora y fecha de nuestro sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.3 Agendando una tarea en Cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.3.1 Editando el archivo /etc/crontab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.4 Segunda prueba del primer semestre del 2017: Scripts, Compresiones, empaquetamien-
tos y Crond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4
8.4.1 Programe un script de nombre backups.sh y posiciónelo en: /programas. Éste script
debe ser capaz de respaldar de manera comprimida y empaquetada todo el directorio
/etc. El nombre resultante del archivo debe ser:
Backups[Nombre del Servidor][Ruta del directorio respaldado][HH-MM-SS][DD-MM-
AA].tar.gz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.4.2 La siguiente pregunta fué algo que nunca se vió en clases: ejecutar el cron el
penúltimo día de cada mes. Programar una tarea cron que permita ejecutarla
en el penúltimo día de cada mes del año (en una sola línea) a las 23:00 horas,
enviando un email al término de la ejecución a la cuenta [email protected]. . . . 65
8.4.3 Desarrollar una tarea /programas/fecha.sh que permita imprimir la fecha y la hora en
formato DD-MM-AAA-HH-MM-SS-NOMBRE-SERVIDOR-USUARIO (sic) en un archivo
llamado /programas/fecha.log y programar un cron que se ejecute cada 5 minutos (a
partir del minuto 0), todas las horas impares, de todos los meses impares y siempre y
cuando sea jueves o viernes. /respaldodiario.sh . . . . . . . . . . . . . . . . . . . . . . . . 66

9 Formas de ver la información del sistema 66

10 Dispositivos: tipos y forma de montarlos 66

11 Particiones y formateo de discos 66

12 Instalación de 19 servicios en Linux 67


12.1 Instalación de CentOS 6.9 como servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
12.1.1 Primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
12.1.2 El particionado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
12.1.3 Configuración de CentOS como servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
12.2 Configuración de red en Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
12.2.1 NAT y Bridge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
12.2.2 Configurar la tarjeta de red en Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
12.2.3 El comando service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
12.2.4 El comando chkconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
12.2.5 El comando kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
12.2.6 Levantar el cortafuegos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
12.3 Nociones básicas de direccionamiento IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
12.4 Instalación del DNS (falta el dinámico: DDNS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
12.4.1 Teoría: como funciona un dns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
12.4.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
12.5 SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
12.5.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
12.5.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
12.6 Instalación del HTTPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.6.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.6.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.7 HTTPS con un certificado digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.7.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.7.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.8 Instalación desatendida kickstart Redhat Boot desde la red sin intervención. . . . . . . . . . . . . 83
12.8.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
12.8.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
12.9 DHCPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
12.9.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

5
12.9.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
12.10SAMBA (bidireccional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.10.1Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.10.2La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.11Motor de correo vía la web (SQmail) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.11.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.11.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.12Servidor de virtualización VMWare (con instancias virtuales funcionando) . . . . . . . . . . . . 92
12.12.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
12.12.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
12.13TOMCAT (Con apps en JAVA funcionando) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.13.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.13.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.14MOTOR BD ORACLE (+consulta) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.14.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.14.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.15Firewall (programado con reglas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.15.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.15.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.16SQUID (proxy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.16.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.16.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.17Vsftpd (Usuario Enjaulado.) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
12.17.1Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
12.17.2La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
12.18Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.18.1Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.18.2La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.19Antivirus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
12.19.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
12.19.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
12.20WINE (Ambiente de trabajo emulado para correr apps con tecnología MS) . . . . . . . . . . . . 100
12.20.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
12.20.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
12.21VNC server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
12.21.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
12.21.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
12.22Configuración SElinux (privación ejecución módulos kernel) . . . . . . . . . . . . . . . . . . . . . 102
12.22.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
12.22.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

Appendix A Listado de las variables de entorno en linux 104

Appendix B Listado de los formatos para los comandos de fecha y hora 105

6
1 Poniendo a punto la máquina
1.1 Creación de una máquina virtual en 16 pasos
(Tiempo estimado: 2 minutos)
En VMWare Worstation 12 PRO hacemos:

1. Click en File

2. Click en New Virtual Machine

3. Se abre el wizard
¿Qué tipo de configuración desea?:
Seleccionamos: Custom (advanced)
Click en next

4. Se abre el wizard de compatibilidad


Elegimos Compatibilidad de hardware de la máquina virtual: Workstation 12.0
Click en next

5. Instalación del sistema operativo invitado:


Seleccionamos: I will install the OS later
Click en next

6. Sistema operativo invitado y su versión:


Seleccionamos Linux Versión Red Hat Enterprise Linux 7 64-bit ó CentOS 64-bit
Click en next

7. Nombramos nuestra máquina virtual como:


nombre.apellido.cl
y la locación la dejamos tal cual
Click en next

8. La configuración del procesador la dejamos como sigue:


Number of processors: 2
Number of cores per processor: 1
Click en next

9. Memoria de la máquina virtual:


Seleccionamos 2048 Mb
Click en next

10. Tipo de red:


Seleccionamos Use bridged networking
Click en next

11. Seleccione tipos de controlador de I/O:


Elegimos LSI Logic
Click en next

12. Seleccione un tipo de disco:


Elegimos SCSI
Click en next

7
13. Seleccione un disco. Qué disco quieres usar?:
Seleccionamos Create a new virtual disk
Click en next

14. Especifique la capacidad del disco:


Seleccionamos 20 Gb y Split virtual disk into multiple files
Click en next

15. Se muestra donde se almacenará el archivo de disco con extensión .vmdk


Click en next

16. Se despliegan las características de la maquina a crear.


Revísalas.
Demos click en finish

1.1.1 Cuando VMWare se detiene


Podemos liberar VMWare cuando se detiene y no permite hacer nada con: Control+C.

1.2 Instalación de Red Hat Enterprise Linux 7.3


1. Repitamos los pasos del punto 1.3, hasta el número 3, en donde reemplazamos CentOS por Red Hat.

2. Recién ahora se enciende la máquina virtual


Click en Power on the virtual machine.

3. Click en Install Red Hat Enterprise Linux 7.3

4. Elegimos como idioma Español y Chile.


Click en Continuar.

5. Damos click en SELECCIÓN DE SOFTWARE, eligimos Instalación mínima y damos click a Listo.

6. Demos click a DESTINO DE LA INSTALACIÓN, seleccionemos nuestro disco virtual de 20 Gb y damos


click a Listo.

7. Damos click a Empezar instalación. Se deberían copiar 386 archivos y el proceso no debería tardar
más de 10 minutos.

8. Mientras nuestro SO se instala, podemos configurar la contraseña del usuario root y crear un usuario.
Sea la contraseña del root: 123456 y el usuario: miguel con contraseña 123456. Dejemos a éste último
como administrador.

1.3 Instalación de CentOS 6.9 en un disco particionado


1.3.1 La instalación
(Tiempo estimado: 15 minutos)

1. Click en VM

2. Click en Settings

3. En Hardware damos click a CD/DVD y en Connection, seleccionamos Use ISO image file.
Aquí buscamos y seleccionamos el CentOS 6.9 que se supone ha descargado previamente.
Click en OK

8
4. Recién ahora se enciende la máquina virtual
Click en Power on the virtual machine.

5. Se abre el instalador CentOS


click en: Install or upgrade an existing system enter
Y CentOS empieza a cargar

6. ¿Se quiere probar el disco antes de instalar?:


Seleccionamos skip
Para ellos damos tab y enter
Comienza a correr Anaconda.

7. Click en next.

8. ¿Qué idioma te gustaría usar durante el proceso de instalación?:


Seleccionamos: English
Click en next.

9. Elija el teclado apropiado para el sistema:


Seleccionamos Latin American
Click en next.

10. ¿Qué tipo de dispositivos considerará tu instalación?:


Seleccionamos: Basic Storage Devices
Click en next.

11. El dispositivo de almacenamiento indicado abajo quizás contenga datos.


Seleccionamos: Yes, discard any data

12. Se nos pide un nombre para nuestro computador.


Ingresamos: miguel.mov.cl
Click en next.

13. Debemos seleccionar una ciudad.


Seleccionamos: America Santiago
Click en next.

14. Debemos seleccionar una contraseña para el root.


Ingresamos: 123456 2 veces
Click en next.

15. Se nos advierte que la contraseña es muy básica. ¿La usamos de todas formas?
Seleccionamos: Use Anyway

16. ¿Qué tipo de instalación nos gustaría?


Seleccionamos: Create Custom Layout
Click en next.
En este momento llegamos de forma automática al creador de particiones de CentOS.

1.3.2 El particionado
(Tiempo estimado: 5 minutos)

Supongamos que queremos obtener el siguiente particionado:

9
Particionado
PARTICIÓN ESPACIO PUNTO DE FILE SYSTEM
MONTAJE
Primaria 8000 MB / ext4
Arranque 250 MB /boot ext3
Memoria virtual temporal Remanente swap swap

Please Select a Device

1. click en Create
2. click en Standard Partition
click en Create
3. Seleccionar: Mount point: /
Seleccionar: File System Type: ext4
Seleccionar: Size (MB): 8000
Seleccionar: Fixed size
Seleccionar: Force to be a primary partition
Click en ok.

1. click en Create
2. click en Standard Partition
click en Create
3. Seleccionar: Mount point: /boot
Seleccionar: File System Type: ext3
Seleccionar: Size (MB): 250
Seleccionar: Fixed size
Click en ok.

1. click en Create
2. click en Standard Partition
click en Create
3. Seleccionar: Mount point: no aplica
Seleccionar: File System Type: swap
Seleccionar: Size (MB): no aplica
Seleccionar: Fill to maximun allowable size
Click en ok.

1.3.3 Últimas configuraciones


(Tiempo estimado: 10 minutos)
1. Click en Next
2. Advertencia de formateo.
Damos click en Format
3. Advertencia de borrado de datos preexistentes.
Seleccionamos: Write changes to disk
CentOS ahora está creando las particiones ...

10
4. Debemos indicar la partición donde instalaremos el boot.
Seleccionamos: Install boot loader on /dev/sda y CentOS 6 /dev/sda2
Damos click en Next

5. Seleccionamos el tipo de instalación.


Queremos personalizarla a la mínima posible.
Para ello seleccionamos abajo a la derecha:
Customize now
Damos click en Next

6. Seleccionamos el tipo de instalación.


Dejemos TODOS los cuadros en blanco a excepción de en:
Base System:
Base
Compatibility libraries
Console Internet tools
y de Languaje:
English (UK) Support

Damos click en Next


Deberían estar siendo descargados en este momento 409 paquetes.
El proceso no debería tardar más de 15 minutos. Damos click en Reboot

1.3.4 Ejercicio n°1. Genere una instalación personalizada con las siguientes características: (Primera
prueba del primer semestre del 2017)
Instalación: Mínima
Password root: 123456
Nombre de máquina: SUNOMBRE.SUAPELLIDO.CL

Partición Espacio File/System


/ 8 GB Ext4
/boot 250 MB Ext3
/Azul 31 GB Ext2
/Rojo 31 MB Ext4
/Amarillo 31 GB Ext3
/Verde 31 MB Ext2
/swap 2 veces RAM Swap

Solución:

Trampa 1: Podemos darle un espacio insuficiente a nuestra máquina virtual y quedarnos sin tiempo al
tener que volver a empezar desde cero. Para evitar ésto, calculemos inmediatamente el espacio que
necesitaremos en nuestro disco duro.
Trampa 2: En un disco duro solo puede haber cuatro particiones primarias, si necesitamos más ten-
emos que crear una partición extendida, y dentro de ella las particiones lógicas que necesitemos.

Con 80 gigas de HD y 2048 de RAM estamos bien. A la partición swap le daremos entonces 4096 Mb.

11
1 Para crear la máquina virtual son los mismos pasos que el punto 1.1 a excepción del 7, donde nombramos
la máquina: NOMBRE.APELLIDO.CL.

2 La instalación del CentOS virtualizado es igual a la que se hace en el punto 1.2. Ahora, ¿por nombre
de máquina se refiere al del computador o al de la máquina virtual? Evitémonos polémicas y nombremos a
nuestro computador también como NOMBRE.APELLIDO.CL

3 El particionado.

Please Select a Device

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /


Seleccionar: File System Type: ext4
Seleccionar: Size (MB): 8000
Seleccionar: Fixed size
Seleccionar: Force to be a primary partition
click en ok

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /boot


Seleccionar: File System Type: ext3
Seleccionar: Size (MB): 250
Seleccionar: Fixed size
click en ok

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: no aplica


Seleccionar: File System Type: swap
Seleccionar: Size (MB): 4096
Seleccionar: Fixed size
click en ok

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /Azul


Seleccionar: File System Type: ext2
Seleccionar: Size (MB): 31000
Seleccionar: Fixed size
click en ok

12
1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /Rojo


Seleccionar: File System Type: ext4
Seleccionar: Size (MB): 31
Seleccionar: Fixed size
click en ok

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /Amarillo


Seleccionar: File System Type: ext3
Seleccionar: Size (MB): 31000
Seleccionar: Fixed size
click en ok

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /Verde


Seleccionar: File System Type: ext2
Seleccionar: Size (MB): 31
Seleccionar: Fixed size
click en ok

Importante: Observemos que sda sólo se divide en 4 particiones: sda1, sda2 y sda3. La cuarta, sda4 se
extiende y dentro de ella se crean 4 más: sda5, sda6,sda7 y sda8. La explicación para ésto lo veremos más
adelante.
Nos sobran 7506 Mb y damos click en Next.

4 Las últimas configuraciones son iguales al punto 1.3.3

2 Lo básico, la estructura de archivos de linux y 39 comandos


2.1 Lo básico
2.1.1 La tilde ~, el /home y el directorio raíz (/)
En los ambientes Windows, al superusuario se le denomina administrador; en linux, root. En linux, el símbolo
gato (#) indica que estamos en la consola como root y el símbolo peso ($) indica que lo estamos como usuario.

La estructura de archivos en linux es jerárquica y corresponde a una árbol de directorios (que también se
pueden llamar carpetas como en Windows aunque no es lo usual) cuya raíz está en /. Dentro de los directo-
rios se ubican los archivos (si sus nombres comienzan por punto se les denomina "ocultos"). Los comandos de

13
administración del root están en un directorio; los de un usuario normal en otro.

EN LINUX TODO ES UN ARCHIVO, INCLUYENDO LOS DIRECTORIOS MISMOS.

Archivo y fichero son sinónimos.

En la consola, los archivos se presentan en color blanco, y los directorios en azul.

Al iniciar como root en una consola linux, entramos a una shell por defecto llamada bash (la interfaz por
defecto de CentOS) a un modo llamado directorio de inicio, el cual despliega una tilde:

~]#, cuando debiésemos estar en la raíz: /]#.

Lo que sucede es que al ingresar al sistema por primera vez, linux siempre nos lleva al home del usuario.
Nuestro caso es particular, porque somos superusuario o usuario root, cuyo home es: /root. En otras palabras,
el home del root se simboliza como:

~]#.

Con pwd (print working directory) podemos ver que el directorio donde nos encontramos es /root:

~]# pwd
/root

El directorio: /root contiene 3 ficheros. Podemos usar ls para listarlos.

~]# ls
anaconda-ks.cfg install.log install.log.syslog

Vámonos de vuelta al directorio root:

~]# cd ..

y ahora estamos en root: (/)

/]#

2.1.2 Las terminales en linux


En linux hay 6 terminales virtuales en las que se puede trabajar simultáneamente, lo que resulta muy útil
cuando creamos usuarios y deseamos ingresar a la cuenta de varios de ellos simultáneamente. Podemos cam-
biar de terminal (suponiendo que estamos en la cuenta de root) con:

ctrl + atl + F2...F6 (de F2 a F6)


(la cuenta del terminal es el F1)

Con Ctrl + alt + F1 volvemos a la primera consola virtual.

2.1.3 En linux, no es lo mismo la mayúscula que la minúscula


Por ejemplo, los comandos en linux se escriben todos en minúsculas.

14
2.1.4 Volver al directorio raíz
Siempre, encontrémonos donde nos encontremos, podemos volver al directorio raíz con el comando:

/]# cd /

2.1.5 Uso de man


Podemos acceder a una biblioteca con el comando man. Con man + argumento, desplegamos el manual para
cada comando. Presionando q, volvemos a nuestro sistema de directorios.

Por ejemplo:
/]# man ls
despliega el manual para el comando que lista los directorios: ls.

Una alternativa es escribir – –help (dos guiones seguidos) después del comando:
/]# rm – –help

Otra opción es utilizar el comando pinfo antes de un comando para desplegar información:
/]# pinfo rm

2.1.6 Interrupción de procesos


Es muy útil cuando entramos a un loop o linux no responde, poder detener todos los procesos y volver al
directorio raíz. Ésto se logra con :

Control+c ó Control+z.

2.1.7 El editor de textos Nano


Más adelante nos veremos en la necesidad de editar el contenido de muchos ficheros en linux. Para lograr
ello, utilizaremos el editor de texto Nano, cuya ejecución de su sintaxis nos llevará inmediatamente al archivo
listo para ser editado:

/]# nano nombredelarchivo

Si tal archivo no existe, nano lo crea.

Con ctrl + x: guardamos y salimos

2.1.8 El autocompletar
Una herramienta muy útil es la que nos permite autocompletar el nombre de los archivos o directorios que
necesitemos. Ésto se logra con el tabulador (tab). Al ingresar una letra y dar tab + tab, se despliegan todas las
posibles alternativas a tal comando. Cuando un conjunto de letras sea suficiente para determinar un comando,
un sólo tab bastará.

2.1.9 Para deslogearnos


/]# exit o bien
/]# logout

15
2.1.10 Apagar y reiniciar CentOS de manera ordenada
/]# shutdown -g0
/]# poweroff

Otras opciones son:


/]# halt
/]# shutdown -h now

2.1.11 Para reiniciar nuestro SO.


/]# reboot

2.2 Configuraciones básicas de la consola


2.2.1 Cambio de sus colores
Con el comando setterm (con m final) podemos configurar algunas características de la consola mientras se
permanece en la sesión (los cambios no resultan permanentes). Por ejemplo, podemos cambiar el color de
fondo a amarillo:

/]# setterm -background yellow


(El color que se despliega es naranja.)

o podemos cambiar el color de letra de la consola a rojo:


/]# setterm -foreground red

Éstos cambios permanecen mientras estemos logeados. Al salir y volver a ingresar éstos desaparecerán.

2.2.2 Configuración de un mensaje de bienvenida permanente


Para hacer cambios permanentes en nuestra consola debemos editar el archivo: /etc/motd.
Por ejemplo, para configurar un mensaje de bienvenida hacemos:
/]# nano /etc/motd

una vez dentro de él escribimos cualquier mensaje, por ejemplo: "Bienvenido, usuario!", guardamos con con-
trol + o, enter, salimos con control + x, nos deslogeamos y volvemos a entrar para verificar los cambios
efectuados.

2.2.3 Configuración de la fecha a nuestro equipo


Asignémosle a nuestra máquina la siguiente hora y fecha:
1 de Enero del 2018 a las 11 am.

Hacemos:
/]# date – –set "2018-01-01 11:00:00"

También podemos utilizar el comando hwclock.


/]# hwclock – –set – –date "2018-01-01 11:00"
/]# hwclock – –set – –date "21 sep 2017 20:00:00"

16
2.2.4 Darle un nombre a nuestro equipo
En CentOS 6.9 debemos editar el siguiente archivo:
/]# nano /etc/sysconfig/network

cambiar la siguiente línea:


HOSTNAME= nuevonombre

y reiniciar:
/]# reboot

Redhat:

En Redhat podemos cambiar temporalmente el nombre de usuario con:


/]# hostname miguel

Pero para hacerlo permamentementde debemos editar el archivo hostname ubicado en /etc:
/]# nano /etc/hostname

2.3 La estructura de archivos en linux


CentOS 6.9 posee la siguiente estructura de archivos:

17
/

bin

boot

dev
etc

home

lib

lib64

lost+found

media

mnt
opt

proc

root

sbin

selinux
srv
sys

tmp

usr

/bin

/sbin

/local

var /bin

/sbin

Para dirigirnos a cualquier archivo en linux a través de sus subdirectorios, los vamos señalando con /:
Por ejemplo:
/]#/urs/local/bin

1. /etc
Acá no hay programas. Sólo archivos de texto. Acá se guardan las configuraciones de los equipos y
servicios.

18
2. /var
Acá se guardan todas las variables del equipo, como por ejemplo: /var/spool/mail/sebastian

3. /proc
Acá están los procesos. Se pueden ver porque son archivos.

4. /dev
Acá van los dispositivos (nuestro hardware)

5. /bin
Contiene programas que pueden ser ejecutados tanto por root, como por el usuario.

6. /sbin
Acá hay programas que sólo pueden ser ejecutados por root.
/bin y /sbin son software de desarrollo propio de CentOS.

7. /usr/bin
Contiene programas que pueden ser ejecutados tanto por root, como por el usuario. Son software
desarrollado por terceros.

8. /usr/sbin
Acá hay programas que sólo pueden ser ejecutados por root. Son software desarrollado por terceros.

9. /usr/local/bin
Contiene programas que pueden ser ejecutados tanto por root, como por el usuario. Son software
utilitarios.

10. /usr/local/sbin
Son software utilitarios. Acá hay programas que sólo pueden ser ejecutados por root.

2.3.1 Las rutas relativas


Al querer acceder a los archivos en el directorio donde nos encontramos, podemos hacerlo sólo con el nombre
de archivo correspondiente, pero al intentar hacer ésto con archivos y directorios que están fuera del directorio
actual, debemos utilizar sus nombre con rutas, las cuales le indican a Linux cómo llegar al directorio apropiado.

Rutas absolutas.
Las rutas absolutas especifican la ruta que conduce a un directorio o archivo, empezando por el directorio
raíz. La ruta consiste en una lista secuencial de directorios, separados por barras, que conducen al directorio
o archivo al que se desea llegar. Por ejemplo:

/]# pwd
/home/raf/andreas

Rutas relativas.
Ahora, las rutas relativas especifican directorios y archivos comenzando por el directorio de trabajo actual.
Supongamos que estamos en el directorio adorno, esto es: /escuela/frankfurt/adorno
si desde aquél directorio quisiéramos acceder a /sociedad, debemos escribir como ruta relativa:
../frankfurt/horkheimer/sociedad.
La siguente nomenclatura nos ayudará a orientarnos:
.. : indica que pasamos a un nivel directamente superior.
Podemos listar los directorios del nivel inmdiatamente superior al cual nos encontramos con:
/]# ls ..

19
Así, por ejemplo, si nos encontramos en el directorio /personalidad:
/]# ls ..
adorno marcuse fromm horkheimer ../.. : indica que pasamos a un nivel dos veces más arriba.
Por ejemplo si estamos en adorno: /adorno
../../adorno nos deja en el directorio escuela.
../../.. : indica que pasamos a un nivel tres veces más arriba y así sucesivamente.

escuela

frankfurt

/adorno /marcuse /fromm /horkheimer

/personalidad /dialectica /critica /sociedad

2.3.2 Construcción de una estructura jerárquica de varios niveles


Construya la siguiente estructura jerárquica:

/trabajo

1 2 3 4 5 6

7 8 9 10 11 12 13 14 15 16 17 18

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

34 35 36 37 38 39 40 41 42 43

Solución:

No hay nada más simple que crear estructuras de directorios en linux: la barra seguida por el corchete
indica que se bajará un nivel, y las comas entre los directorios que están dentro de los corchetes establecen que
los elementos que separan estarán en el mismo nivel. Lo único que se requiere es ser cuidadoso (no tenemos
herramientas para copiar y pegar desde un block de notas).

mkdir -p permite crear varios niveles de directorios a la vez. Crea los directorios padre que falten para
cada argumento directorio:

/]# mkdir -p trabajo/{1/{7/{19,20},8/{21,22}},


2/{9/{23,24/{34,35}},10/25},
3/{11,12/{26/{36,37},27}},

20
4/{13,14/{28/{38,39},29}},
5/{15,16/{30,31/{40,41}}},
6/{17,18/{32,33/{42,43}}}
}
Importante: No deje ningún espacio en blanco.
Ejercicio es con los comandos cd, cd .., y ls revisar que toda la estructura sea la correcta.

2.3.3 Ejercicio n°2: Construya una estructura jerárquica. (Primera prueba del primer semestre del
2017)
Primera p

1. Cree el siguiente árbol de archivos y directorios vía comandos a partir del directorio /Trabajo:
gra

apuntes documentos harley2 prácticas

informática inglés harley elespacio

Solución:

1. Lo que nos están pidiendo en realidad es ésto:


(nótese que se plantea el ejercicio con acentos y un directorio raíz extra para confundir).

/Trabajo

/gra

/apuntes /documentos /harley2 /practicas

/informatica /ingles /harley /elespacio

21
Entonces:

mkdir -p Trabajo/
gra/{
apuntes/{informatica,ingles},
documentos,
harley2,
practicas/{harley,elespacio}
}
(La trampa consiste en caer en el error de agregar un { después de Trabajo/: Trabajo/{ )

2.4 39 Comandos básicos


Con 39 comandos hay suficiente para un curso básico.

La estructura de comandos en linux es la siguiente:

/]# <Comando> <Opciones> <Argumento>

Por ejemplo:
/]# head -1 /etc/passwd >> dos.txt

1. /]# clear
Limpia la pantalla.
Lo mismo hace ctrl + l.

2. /]# cd /etc/sysconfig
Nos cambiamos de directorio: /etc/sysconfig.
/]# cd ..
Nos devolvemos al directorio precedente. Cuando cd se ejecuta sin parámetros, nos devuelve al direc-
torio home del usuario.

3. /]# echo
Es muy importante, pues nos permite imprimir tanto en la pantalla como en un archivo por medio del
redireccionamiento » -un poco más adelante veremos ésto-. Pregunta de prueba.

4. /]# more
Recordemos cuando queremos desplegar la información de nuestros directorios con el comando:
/]#ls -R
la lista es enorme. Es deseable detener la información en la pantalla para poder leerla e ir desplegando
las líneas con consecutivos enter. Para ello sirve el comando more, el cual despliega las primeras 25
líneas de un archivo, y luego permite ir desplazándose por las siguientes con sólo presionar enter.
Va precedido por la pipa (|) y lo antecede el comando que despliega la información. Dos ejemplos a
continuación:
/]#ls -la | more
/]#ls -R | more

(Recordemos que cualquier proceso en consola pude detenerse con Control+z para volver a la estructura
de directorios).

22
5. /]# less
Con el comando less podemos desplazarnos en todos los sentidos cuando se despliega algún contenido
en la terminal.

6. /]# chage (Pregunta de prueba)


Permite cambiar o establecer parámetros de las fechas de control de la contraseña. Esto lo veremos un
poco más adelante pero desde ya es muy importante recordarlo.

7. /]# mkdir
Con mkdir podemos crear nuevos directorios. La opción -p permite crear varios niveles de directorios a
la vez. Con el comando:
/]# mkdir miguel

creamos un directorio.

Con el comando:
/]# rm -R miguel

lo borramos en forma recursiva (se nos preguntará a cada nivel si queremos borrar. Si es lo que deseamos
escribimos cada vez "y" y enter.)

8. /]# rmdir
Borra directorios sólo si están vacíos.

9. /]# rm
Sirve para borrar archivos o directorios.

Opciones para directorios:


~]#rm -d : permite borrar directorios vacíos.
~]#rm -r : permite borrar directorios no vacíos eliminando los archivos dentro de los directorios y el
directorio contenedor.

Opciones para generales:


~]#rm -i : pide confirmación para eliminar un fichero.
~]#rm -f se usa para omitir la confirmación.
~]#rm -r / Se borra todo el filesystem (en Windows esto no se puede).

Con:
~]#rm -r /
podemos borrar todo el filesystem (en Windows esto no se puede).

10. /]# date


Muestra hora y fecha actual

11. /]# bc
Abre una calculadora

12. /]# cal


Despliega información de las fechas en formato de un mes calendario.

23
/]# cal
despliega el mes actual.

/]# cal 2017


despliega un año completo.

/]# cal 30 08 1972


muestra una fecha específica.
13. /]# touch miguel.txt:
Su uso más frecuente es para crear archivos. Si el archivo no existe, touch lo crea.
14. /]# cp
Se utiliza para copiar ficheros o directorios. Permite:

(a) Copiar un archivo a otro manteniendo el original (con el comando cp se destruye el original):
/]# cp carlos.txt miguel.txt
Si miguel.txt no existe, lo crea. Si existe, lo sobrescribe.
(b) Copiar archivos a un directorio:
/]# cp carlos.txt /home/usuario/Downloads
Copiar archivos a un directorio usando rutas relativas:
Al usar rutas relativas es muy importante terminar el nombre de directorio con una barra
porque así estamos indicando que es un directorio. Cuando la ruta es de un archivo NUNCA
se pone la / al final.
/]# cp miguel.txt ./Downloads/
(c) Copiar dos archivos simultáneamente a un directorio:
/]# cp miguel.txt program.py ./Downloads/
(d) Copiar de todos los archivos .txt a un directorio a un directorio:
/]# cp *.txt Directorio
(e) Copia de todos los archivos de un directorio a otro directorio:
/]# cp trabajo/miguel/* Trabajo/carlos

15. /]# mv
Es usado para mover o renombrar archivos y directorios del sistema de archivos. A diferencia de cp, el
archivo original es borrado. Es por ello que también es utilizado para renombrar archivos. Si no existe
el archivo de destino, mv lo crea.
Su sintaxis es:
/]# mv archivo1 archivo2 ... /Directorio
16. /]# rename
Permite renombrar archivos de manera masiva
Sintaxis:
/]# rename perlexpr [archivos]
donde perlexpr es una expresión regular en lenguaje Perl.
Ejemplo: supongamos que queremos cambiar la extensión de los archivos .txt del directorio actual por
.csv:
/]#rename ’s/\.txt/\.csv/’ *.txt
17. /]# cat
Despliega el contenido de un archivo.
Pero muchas veces se despliega muy rápido. Acá resulta útil el comando more.
/]# cat miguel.txt | more

24
18. /]# head
Éste comando por defecto despliega las 10 primeras líneas de un archivo de texto. Pero podemos des-
plegar las que queramos con la opción n. Por ejemplo:

/]# head -15 /Trabajo/carlos.txt


Desplegará las primeras 15 líneas del archivo.
19. /]# tail
Éste comando por defecto despliega las 10 últimas líneas de un archivo de texto. Pero podemos des-
plegar las que queramos con la opción n. Por ejemplo:

/]# tail -15 /Trabajo/carlos.txt


Desplegará las últimas 15 líneas del archivo.
20. /]# passwd
Permite cambiar o asignar una password. El super-usuario o root (#) puede cambiarle la contraseña a
todo. El usuario ($) sólo al usuario concurrente.
21. /]# history
Lista las pulsaciones de las teclas que se han ejecutado. Por ejemplo:
/]# history | more
22. Redireccionamiento.
/]# >

El redireccionamiento permite enviar la información desplegada por un comando a un archivo. Se


ejecuta de izquierda a derecha.

Por ejemplo, supongamos que deseamos enviar la información de toda nuestra estructura de archivos al
fichero carlos.txt de nuestro subdirectorio Trabajo ya creado.

Primero creamos el archivo posicionándonos dentro del directorio Trabajo:


Trabajo]# touch carlos.txt

Ahora vamos al root y desde ahí redireccionamos la salida:


/]# ls -Ra > /Trabajo/carlos.txt

Otros ejemplos:
/]# cal > agosto.txt
/]# ls /home > home.txt

Cree un archivo de texto que contenga los meses de Enero 2018, Enero 2019 y Enero del 2020.

Cree un archivo de texto que contenga la primera y la última línea del archivo passwd que está en el
directorio /etc.
/]# head -1 /etc/passwd > dos.txt
/]# tail -1 /etc/passwd » dos.txt

Si el archivo de destino no existiera, el comando de direccionamiento lo crea.

El direccionamiento sobreescribe sobre un archivo ya existente. Si lo que deseáramos fuese sólo agregar
al final del contenido del archivo nueva información, podemos usar el comando >>

25
23. /]# wc
Éste comando despliega tres valores: líneas, palabras y caracteres (en ese orden).

Por ejemplo, aplicado al archivo de texto que hemos creado llamado carlos.txt en el directorio Tra-
bajo nos entrega:

/]# wc /Trabajo/carlos.txt
109916 101509 1161474 /Trabajo/carlos.txt

donde el primer valor muestra el número de caracteres, el segundo el número de palabras y el ter-
cero el número de líneas.

éstas opciones se pueden obtener por separado:


/]# wc -c /Trabajo/carlos.txt despliega el número de caracteres.
/]# wc -w /Trabajo/carlos.txt despliega el número de palabras.
/]# wc -l /Trabajo/carlos.txt despliega el número de líneas.

Asimismo se pueden procesar varios archivos, al final de los cuales nos muestra la cuenta total, por
ejemplo:
/]# wc /etc/shells /etc/hosts
6 6 61 /etc/shells
2 18 158 /etc/hosts
8 16 219 total

24. /]# hwclock


Despliega la fecha y la hora.

25. /]# grep


Se asocia a pipa ( | ) y nos entrega la información que coincida con el parámetro entregado a grep, por
ejemplo:
/]# cat /etc/passwd | grep miguel
nos entrega las coincidencias con la palabra miguel.

26. /]# pwd


Ya lo hemos visto.

27. /]# ls
Sin argumentos lista todos los archivos (incluyendo directorios) del directorio donde el usuario está
posicionado.

Las opciones que nos entrega ls son:

(a) ~]#ls -a: lista todos los archivos, incluyendo los ocultos
(b) ~]#ls -l: lista los archivos junto a sus permisos
(c) ~]#ls -R: lista los contenidos de todos los directorios recursivamente (haga ésto sólo cuando tenga
tiempo, porque el despliegue es enorme)
(d) ~]#ls -la f*.* | more: lista los archivos que comienzan con la letra f (más adelante veremos lo
que significa el comando | more)
(e) Se pueden escribir varios parámetros juntos, como por ejemplo:
~]#ls -la

26
Al ejecutar el comando ls -la se despliega una serie de archivos cuya cuyo primer carácter de la
primera columna si es:
-. : significa que es un archivo normal.
d. : significa que es un directorio.

28. /]# man


Ya lo hemos visto.

29. /]# file


Ése comando sirve para ver las propiedades de los archivos, por ejemplo, saber si son directorios. Por
ejemplo:

/]# file bin


bin : directory

/]# file /etc/passwd


/etc/passwd : ASCII text

30. /]# ifup eth0


Levanta una interfaz, dejándola disponible para enviar y recibir datos. Lo mismo para ifdown.

31. /]# yum


Permite bajar programas desde internet. Por ejemplo:

/]# yum -y install nano

32. /]# ps
El comando process muestra los procesos que ha iniciado el usuario, por ejemplo:

/]# ps
/]# ps au
/]# ps aux
muestra los procesos desde qe el equipo se encendió.

33. /]# who


Muestra a todos los usuarios y el root.

34. /]# lscpu


Muestra características de la CPU.

35. /]# lspci


Muestra información del bus pci del equipo.

36. /]# pstree


Muestra los procesos en forma de árbol.

37. /]# df
Muestra el contenido de los archivos del filesystem.

38. /]# du
Estima el espacio de uso de los ficheros.

27
Tanto a df como a du le podemos agregar las opciones:
-m: para desplegar la información en megabytes.
-k: para desplegar la información en kilobytes.

39. startx
En Redhat, con: startx cargamos la interfaz gráfica.

2.4.1 Ejercicio n°3. Practique la comandería básica. (Primera prueba del primer semestre del 2017)
Consideremos la estructura de archivos ya creada del ejercicio n°2:

/Trabajo

/gra

/apuntes /documentos /harley2 /practicas

/informatica /ingles /harley /elespacio

1. Listar el contenido de todo el directorio de archivos (desde /) y redirigir su salida al archivo: Resul-
tado.txt.

/]# ls -Ra > Resultado.txt

2. Contar la cantidad de líneas de Resultado.txt y redirigir la salida a: Líneas.txt.

/]# wc -l Resultado.txt > Lineas.txt

3. Copiar: Lineas.txt, a: /gra/documentos /apuntes/ingles


/]# cp Lineas.txt /Trabajo/gra/documentos
/]# cp Lineas.txt /Trabajo/gra/apuntes/ingles

4. Eliminar: /gra/practicas
/]# rm -R Trabajo/gra/practicas

5. Renombrar el directorio /gra como: /RESULTADO


Nos movemos al directorio /Trabajo y:
Trabajo]# mv gra RESULTADO

28
3 Variables de entorno
Las variables de entorno se cargan junto con el sistema, sus valores son dinámicos, están en la RAM y pueden
ser utilizadas por varios procesos a la vez.

Directo en la consola podemos desplegarlas con el comando echo, por ejemplo:

/]# $BASH
/bin/bash

Podemos imprimir en pantalla la fecha en formato: DD/MM/AAAA:


/]# FECHA=$(date +"%d-%m-%Y")
/]# echo $FECHA
08/15/2017

Podemos imprimir en pantalla la hora de conexión en formato: HH:MM:SS:


/]# HORA=$(date +"%H:%M:%S")
/]# echo $HORA
19:30:54
Éstas variables, FECHA y HORA se denominas alias.

Todas las variables de entorno son importantes, pero las que más lo son:

$BASH (ruta de bash)


$HOME (ruta del home del usuario)
$KERNEL
$MACHTYPE (tipo de maquina)
$PATH (ruta para los scripts)
$PWD (ruta donde se esta)
$SHELL
$UID: la user id
$USER (usuario)
$HOSTNAME (servidor)
$MAIL (el correo asociado al usuario)
$HOME (el workspace asociado al usuario)

4 Usuarios y grupos
4.1 Introducción
Un usuario es un objeto1 UGO -un poco más adelante veremos que significa ésto-, un usr, que sirve como
una cuenta para hacer uso de los servicios de un sistema operativo de manera restringida. En la consola, los
usuarios son precedidos por el signo peso $:
/]$

mientras que como ya hemos visto, el root va precedido del signo gato: #:
/]#
Importante: Desde una cuenta de usuario podemos pasar a la del root con el comando:

1
recordemos que un objeto posee atributos y métodos.

29
/]# su
Donde se nos pedirá la contraseña del superusuario.

4.2 Comandos para la administración de usuarios y grupos


1. /]# useradd
Es el comando más importante en la administración de usuarios y grupos. El comando useradd per-
mite añadir un usuario indicando como parámetros la información particular para crear el usuario en la
misma líne de comandos.

Sus parámeros son:


-g: Grupo principal que queremos tenga el usuario (debe existir previamente)
-d: Carpeta home del usuario. Suele ser /home/nombre-usuario
-m: Crear carpeta home si es que no existe.
-s: Intérprete de comandos (shell) del usuario. Suele ser /bin/bash

Por ejemplo, si deseamos crear un usuario llamado ’miguel’ cuyo grupo principal sea ’movimiento’, cuya
carpeta home sea /home/miguel y su intérprete de comandos sea /bin/bash, ejecutaremos el siguiente
comando:
/]# useradd -g movimiento -d /home/miguel -m -s /bin/bash miguel

Si no utilizamos la opción -m, no se creará la carpeta home del usuario; en tal caso tendríamos que
crearla manualmente.

Tan solo nos quedará establecer su contraseña con el comando passwd:


/]# passwd miguel (la cuenta de los usuarios recién creados necesita de una contraseña para
desbloquearse)
Una vez estamos como un usuario, con el comando exit salimos y podemos logearnos nuevamente como
root o como otro usuario.

2. /]# usermod
Permite cambiar el nombre del usuario, su carpeta home, su intérprete de comandos, los grupos a los
que pertenece y algunos otros parámetros.

Por ejemplo, si queremos cambiar el home de un usuario:


/]# usermod -d /home/carpeta_miguel miguel

3. /]# userdel
Eliminamos un usuario. Con la opción -r también se eliminará su carpeta home, por ejemplo:
/]# userdel -r pedro

4. /]# groupadd
Éste comando permite añadir un grupo indicando como parámetro el nombre del grupo.
Por ejemplo, si deseamos crear un grupo llamado ’movimiento’ ejecutaremos:
/]# groupadd movimiento

5. /]# groupmod
Permite modificar el nombre de un grupo o el gid del mismo. La sintaxis es: groupmod [-g nuevo-gid]
[-n nuevo-nombre] nombre-grupo, ejemplo:

Cambiar el gid del grupo movimiento


/]# groupmod -g 2000 movimiento

30
6. /]# groupdel
Eliminamos un grupo, por ejemplo:
/]# groupdel movimiento
Si algún usuario tuviera dicho grupo como grupo primario, el comando groupdel no eliminará el grupo.
Más adelante veremos lo que significa un grupo primario y un grupo suplementario.

7. /]# adduser Se utiliza el comando adduser seguido del nombre del usuario y del nombre del grupo al
cual lo queremos añadir, por ejemplo:
/]# adduser miguel movimiento

8. /]# deluser Se utiliza el comando deluser seguido del nombre del usuario y del nombre del grupo del
del cual lo queremos retirar, por ejemplo:
/]# deluser juan profesores

Comandos de consulta:

1. /]# id
Con éste comando consultamos las características de un usuario en particular. Por ejemplo del root:

/]# id root
uid = 0(root) gid = 0(root) groups = 0(root)
/]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

2. /]# groups usuario


Podemos conocer los grupos a los que pertenece un usuario.

3. /]# passwd usuario


Asigna una contraseña al usuario

4. /]# gpasswd grupo


Asigna una contraseña al grupo

4.3 El identificador de usuario


En los sistemas linux, los usuarios son representados por un identificador de usuario(uid o user id). sus valores
comprenden el rango [0-32767].
El root siempre va a tener un uid=0.
Al sistema se le reservan los valores entre el rango [1-499]. Acá se encuentran los usuarios especiales. Son
cuentas del sistema, van asociadas al concepto de no-login.

El archivo /sbin/nologin es sumamente restrictivo. Ni siquiera se puede ingresar al sistema. A los usuar-
ios se les asignan los números del 500 en adelante (en Red Hat, a los usuarios nuevos se les asignan los
números del 1000 en adelante), por ejemplo, cuando creamos por primera vez un usuario en nuestro sistema,
linux le va a asignar automáticamente los valores respectivos:
U: 500
G: 500
O: 500

Mientras más nos alejamos del 0, menos permisos va a tener el usuario.

Con el comando: /]# who

31
desplegamos la información de todos los usuarios y superusuarios.

Con el comando: /]# whoami


desplegamos la información del usuario desde donde se hace la consulta..

4.4 UGO
En linux, todos los objetos se rigen bajo la funcionalidad: Users, Groups, Other, (también denominado Mid,
gid y GID) lo que se denomina UGO. Esto es muy importante, porque !es una obligación de los usuarios el
tener que pasar por UGO! Sólo pasando por UGO un usuario puede ingresar al sistema.

Así es como:
/]# useradd miguel
no es interesante para el sistema. El sistema requiere su paso por UGO.

A un usuario se le pueden asignar valores para GID, Gid y Uid: Para modificar el UID, utilizamos ‘usermod’con
el parámetro -u seguido del UID a asignar:

/]# usermod -u 1001 carlos

Para modificar el GID utilizamos el comando ’groupmod’ con el parámetro -g seguido del GID a asignar:

/]# groupmod -g 1001 carlos

4.5 Creación de usuarios


Al crear un usuario, por ejemplo miguel:
/]# useradd miguel
su configuración se guarda en un archivo denominado: /etc/passwd.

Podemos ver los valores UGO del usuario recién creado con:
/]# id miguel
y podemos ver que a cada uno de ellos se les asignó el valor 500 en forma automática.

No es necesario ahora crear un grupo para miguel, pues cada vez que se crea un usuario se crea un UGO,
con un userid único e inequívoco guardado en: /etc/passwd.

Cualquiera sea el tipo de usuario, todas las cuantas se encuentran definidas en el archivo de configuración
passwd ubicado en el directorio /etc. Éste archivo es de tipo ASCII y contiene 1 línea para cada usuario.

Observemos la información almacenada en los archivos /etc/passwd, /etc/shadow y /etc/group relativa


a nuestra usuario recién creado miguel:

/]# cat /etc/passwd | grep miguel


miguel:x:500:500::/home/miguel:/bin/bash
la x es un puntero al shadows (es sólo de lectura).

/]# cat /etc/shadow | grep miguel


miguel:!!:17392:0:99999:7:::

32
!!: indica un bloqueo doble (política de retención de password)

/]# cat /etc/group | grep miguel


miguel:x:500:

Nuestro usuario miguel está bloqueado por no tener contraseña. Asignémosle la contraseña: 123456:
/]# passwd miguel

Ahora volvamos a revisar el archivo /etc/shadow:


/]# cat /etc/shadow | grep miguel
miguel:una-serie-de-garabatos:17392:0:99999:7:::
el segundo valor representa la contraseña encriptada con un algoritmo (SHA)

Ahora, los grupos también utilizan passwords, que se almacenan en le archivo: /etc/gshadow.

Observemos que para nuestro usuario miguel su contraseña de grupo es:


/]# cat /etc/gshadow | grep miguel
miguel:!::

Asignémosle entonces una contraseña: 123456 al grupo:


/]# gpasswd miguel

Y volvamos a desplegar el contenido del archivo /etc/gshadow asociado a nuestro usuario miguel:
/]# cat /etc/gshadow | grep miguel
miguel:una-serie-de-garabatos::

Ahora vemos que el segundo campo, asociado a la contraseña del grupo, despliga una larga serie de letras,
números y caracteres.

4.6 Práctica con usuarios y grupos


1. Cree 10 usuarios con el formato: usuario1...usuario10.

/]# useradd usuario1


*
*
*
/]# useradd usuario10

2. A todos los usuarios creados asígneles la contraseña: 123456.

/]# passwd usuario1


123456
*
*
*
/]# passwd usuario10
123456

33
3. Cree 10 grupos con el formato: grupo1...grupo10.

/]# groupadd grupo1


*
*
*
/]# groupadd grupo10

4. A todos los grupos creados asígneles la contraseña: 123456.

/]# gpasswd grupo1


123456
*
*
*
/]# gpasswd grupo10
123456

5. A todos los usuarios pares asígneles un user id 5001 o superior.

Hagamos uso de la ayuda en línea.


/]# man usermod

descubrimos que con el parámetro -u podemos asignarle un nuevo valor a la id del usuario.

Podemos ir verificando éstos valores con:


/]# cat /etc/passwd | grep usuario

Entonces hacemos:

/]# usermod -u 5001 usuario2


/]# usermod -u 5002 usuario4
/]# usermod -u 5003 usuario6
/]# usermod -u 5004 usuario8
/]# usermod -u 5005 usuario10

6. A todos los usuarios impares asígneles una fecha de expiración.

Con el parámetro -e especificamos la fecha en que la cuenta de un usuario será deshabilitada en un


formato YYY-MM-DD.

Entonces hagamos que cada cuenta impar sea deshabilitada el 1 de Mayo del 2018:

/]# usermod -e 2018-05-01 usuario1


/]# usermod -e 2018-05-01 usuario3
/]# usermod -e 2018-05-01 usuario5
/]# usermod -e 2018-05-01 usuario7
/]# usermod -e 2018-05-01 usuario9

34
El comando chage con el parámetro -l nos sirve para verificar la fecha de expiración:

/]# chage -l usuario1

Last password change : Sep 03, 2017


Password expires : never
Password inactiva : never
Account expires : May 01, 2018
Minimum number of days between password change :0
Maximum number of days between password change : 99999
Number of days of warning before password expires :7

Para linux, epoch indica un día específico: el 1 de Enero de 1970. A partir de ese momento se cuentan
los días en que una cuenta existirá antes de caducar. Aparece en el campo 8 de las líneas del archivo:
/etc/shadow. Podemos verificar que éste valor para los usuarios que acabamos de modificar es de 17652.

7. Agregue a cada usuario a su grupo respectivo: usuario1 -> grupo1 y así sucesivamente.

Primero debemos saber lo que es un grupo primario y un grupo suplementario.


Cada usuario debe pertenecer por lo menos a un grupo. Por defecto, en la mayoría de distribuciones
GNU/Linux y otros sistemas tipo Unix, como Red Hat y Ubuntu, cuando creamos un usuario nuevo,
un nuevo grupo con el mismo nombre del usuario es creado también. Éste nuevo usuario es el único
miembro de dicho grupo.
Debemos tener en cuenta que los grupos a los cuales agregaremos el usuario deben existir previamente.
La creación de un único grupo para cada usuario viene del esquema User Private Group (UPG). Este
constituye un modelo flexible para manejar los permisos de los grupos.
En nuestro caso el primer usuario: usuario1, automáticamente pertenece a un grupo llamado usuario1,
el cual es conocido como grupo primario. Dicho usuario también puede pertenecer a otros grupos, y
estos grupos adicionales se denominan grupos suplementarios.
Cada usuario y grupo de un sistema tiene un único uid y gid. Ningún usuario o grupo puede ser creado
con un uid o gid ya existente. Linux asigna automáticamente dichos números para evitar conflictos.
Para conocer detalles sobre a cuáles grupos pertenece un usuario tenemos el comando id. Por ejemplo:

/]# id root
uid=0(root) gid=0(root) groups=0(root)

/]# id usuario1
uid=501(usuario1) gid=501(usuario1) groups=501(usuario1)

-a: agrega un usuario a su(s) grupo(s) suplementario(s) sin removerlo de su(s) otro(s) grupo(s). Debe
utilizarse con la opción: -G.
-G: provee una lista de grupos suplementarios de los cuales el usuario es miembro.

Sintaxis:
/]# usermod -aG grupo usuario

Ahora, ejecutemos la instrucción de asignación al grupo y veamos que despliega la información del
usuario1 utilizando el comando id:

35
/]# usermod -a -G grupo1 usuario1

/]# id usuario1
uid=500(usuario1) gid=500(usuario1) groups=500(usuario1),510(grupo1)

Vemos que nuestro usuario está dentro de su grupo primario(usuario1) y dentro de un grupo suple-
mentario(grupo1).

Recordemos que podemos ver los grupos a los que pertenece un usuario con el comando groups:

/]# groups usuario1


usuario1 : usuario1 grupo1

Hagamos lo mismo para todos los usuarios:

/]# usermod -aG grupo2 usuario2


/]# usermod -aG grupo3 usuario3
/]# usermod -aG grupo4 usuario4
/]# usermod -aG grupo5 usuario5
/]# usermod -aG grupo6 usuario6
/]# usermod -aG grupo7 usuario7
/]# usermod -aG grupo8 usuario8
/]# usermod -aG grupo9 usuario9
/]# usermod -aG grupo10 usuario10

Si utilizáramos sólo -g el usuario pierde la pertenencia a su grupo primario. Por ejemplo:


/]# usermod -g grupo10 usuario10

Comprobémoslo:
/]# id usuario10
uid=5005(usuario10) gid=519(grupo10) groups=519(grupo10)

/]# groups usuario10


usuario10 : grupo10

pero el grupo: usuario1 todavía existe, así dejemos su situación tal cual estaba:
/]# usermod -aG usuario10 usuario10

8. A todos los usuarios pares cámbieles su loginname a: miguel2, miguel4,...

-l: cambia el nombre a un usuario.

Sintaxis:
/]# usermod -l nuevo_loginname viejo_loginname

Entonces:

/]# usermod -l miguel2 usuario2


/]# usermod -l miguel4 usuario4
/]# usermod -l miguel6 usuario6

36
/]# usermod -l miguel8 usuario8
/]# usermod -l miguel10 usuario10

Veamos qué muestra el comando id para miguel2:

/]# id miguel2
uid=5001(miguel2) gid=501(usuario2) groups=501(usuario2),511(grupo2)

También podemos cambiar el nombre de un grupo con groupmod -n:

Sintaxis:
/]# groupmod -n nuevo_nombre_de_grupo viejo_nombre_de_grupo

Por ejemplo, cambiémosle el nombre al grupo2:


/]# groupmod -n movimiento2 grupo2

Veamos que información se despliega al aplicarle el comando id al usuario miguel2:

/]# id miguel2
uid=5001(miguel2) gid=501(usuario2) groups=501(usuario2),511(movimiento2)

Dejemos el nombre original al grupo:

/]# groupmod -n grupo2 movimiento2

9. A todos los usuarios asócieles un comentario descriptivo.

El comentario descriptivo también es usado para asignarle el nombre completo a un usuario.


-c: asigna un comentario a un usuario.

Sintaxis:
/]# usermod -c "comentario" usuario

Asignémosle un comentario entonces a todos los usuarios. Recordemos que los usuarios pares han
cambiado de nombre:

/]# usermod -c "es de conce" usuario1


/]# usermod -c "es medico" miguel2
/]# usermod -c "es de conce" usuario3
/]# usermod -c "es medico" miguel4
/]# usermod -c "es de conce" usuario5
/]# usermod -c "es medico" miguel6
/]# usermod -c "es de conce" usuario7
/]# usermod -c "es medico" miguel8
/]# usermod -c "es de conce" usuario9
/]# usermod -c "es medico" miguel10

Verifiquemos con:
/]# cat /etc/passwd | grep usu

37
El comando anterior sirve, pues la palabra usu está como subdirectorio del home en todos los usuarios.
Vemos que el comentario está insertado en todos los usuarios en el quinto campo de cada línea.
En el quinto campo del archivo /etc/passwd están los comentarios o el nombre completo del usuario.

10. Asignar al usuario1 derechos de superusuario.

-u: permite cambiar la uid de un usuario.


-o: éste parámetro combinado con -u permite cambiar la uid de un usuario a un valor no único. Se
necesita ésto pues recordemos que en nuestro sistema tenemos al root que también tiene una uid=0.

Sintaxis:
/]# usermod -ou 0 usuario
Con ésta instrucción le asignamos un uid=0 al usuario.

En nuestro caso:
/]# usermod -ou 0 usuario1

Verifiquemos:

/]# id usuario1
uid=0(root) gid=500(usuario1) groups=0(root),510(grupo1)

Debemos hacer su grupo también root. ¿por qué?

-g: permite cambiar la GID de un grupo.


-o: éste parámetro combinado con -g permite cambiar la GID de un grupo a un valor no único. Se
necesita ésto pues recordemos que en nuestro sistema tenemos al root que también tiene una GID=0.

/]# groupmod -og 0 grupo1

Verifiquemos:

/]# cat /etc/group | grep grupo1


grupo1:x:0:usuario1

/]# id usuario1
uid=0(root) gid=500(usuario1) groups=0(root)

11. A todos los usuarios impares asígneles una cuenta bloqueada.

-L: bloquea la password de un usuario.

Sintaxis:
/]# usermod -L usuario

/]# usermod -L usuario1


/]# usermod -L usuario3
/]# usermod -L usuario5
/]# usermod -L usuario7

38
/]# usermod -L usuario9

Verifiquemos:

/]# cat /etc/shadow | grep usuario


usuario1:!una-serie-de-garabatos:17397:0:99999:7::17652:
usuario3:!una-serie-de-garabatos:17397:0:99999:7::17652:
usuario5:!una-serie-de-garabatos:17397:0:99999:7::17652:
usuario7:!una-serie-de-garabatos:17397:0:99999:7::17652:
usuario9:!una-serie-de-garabatos:17397:0:99999:7::17652:

El signo de exclamación antes de la serie de garabatos indica que la password está bloqueada.

12. Cambie el gid de los grupos pares por 5000 y superior (grupo2, grupo4,...).

-g: cambia el gid del grupo.

Sintaxis:
/]# groupmod -g nueva_gid grupo

/]# groupmod -g 5000 grupo2


/]# groupmod -g 5001 grupo4
/]# groupmod -g 5002 grupo6
/]# groupmod -g 5003 grupo8
/]# groupmod -g 5004 grupo10

Verifiquemos:

/]# cat /etc/group | grep grupo


grupo1:x:0:usuario1
grupo3:x:512:usuario3
grupo4:x:5001:miguel4
grupo5:x:514:usuario5
grupo6:x:5002:miguel6
grupo7:x:516:usuario7
grupo8:x:5003:miguel8
grupo9:x:518:usuario9
grupo10:x:5004:miguel10
grupo2:x:5000:miguel2

13. Cambiar el nombre de los grupos pares a gramna2, gramna4,...

-n: cambia el nombre de un grupo.

Sintaxis:
/]# groupmod -n nuevo_nombre_del_grupo nombre_del_grupo_viejo

/]# groupmod -n gramna2 grupo2


/]# groupmod -n gramna4 grupo4

39
/]# groupmod -n gramna6 grupo6
/]# groupmod -n gramna8 grupo8
/]# groupmod -n gramna10 grupo10

Verifiquemos:

/]# cat /etc/group | grep gramna


gramna2:x:5000:miguel2
gramna4:x:5001:miguel4
gramna6:x:5002:miguel6
gramna8:x:5003:miguel8
gramna10:x:5004:miguel10

14. Crear dos grupos llamados par e impar. Asignar a todos los usuarios pares al grupo par y a los impares
al grupo impar.

/]# groupadd par


/]# gpasswd par
123456

/]# groupadd impar


/]# gpasswd impar
123456

Supongamos que queremos que los usuarios permanezcan también en los grupos donde ya están.

/]# usermod -aG impar usuario1


/]# usermod -aG par miguel2
/]# usermod -aG impar usuario3
/]# usermod -aG par miguel4
/]# usermod -aG impar usuario5
/]# usermod -aG par miguel6
/]# usermod -aG impar usuario7
/]# usermod -aG par miguel8
/]# usermod -aG impar usuario9
/]# usermod -aG par miguel10

Verifiquemos por ejemplo con el usuario3:

/]# id usuario3
uid=502(usuario3) gid=502(usuario3) groups=502(usuario3),512(grupo3),5006(impar)

15. Crear un usuario con otro directorio personal.


Por defecto, al crear un usuario, el comando useradd le asigna un directorio bajo el directorio /home
con el nombre del mismo (asignar no es lo mismo que crear, hablamos de la entrada en /etc/passwd).
Por ejemplo, si creamos el usuario miguel, se le asigna el directorio /home/miguel.
Se puede cambiar este parámetro con la opcion -d y la ruta del nuevo directorio de usuario.
Por ejemplo, el siguiente comando añadirá al usuario bautista con directorio de usuario /srv/ftp/bautista.
/]# useradd -d /srv/ftp/bautista bautista

40
verifiquemos:

/]# grep bautista /etc/passwd


ghost:x:505:505::/srv/ftp/bautista:/bin/bash
Por defecto, useradd crea la entrada correspondiente al directorio de usuario en el fichero /etc/passwd,
pero no crea dicho directorio ni asigna permisos. Para ello hay que usar la opción -m, de la siguiente
forma:
/]# useradd -m -d /srv/ftp/bautista bautista

16. Crear un Usuario sin directorio personal.


Es posible crear un usuario sin asignarle un directorio personal. En ese caso, si el usuario inicia sesión,
su directorio actual será la raiz del sistema, / .
Para crear un usuario sin su directorio personal se usa la opción -M. Por ejemplo, el siguiente comando
creará un usuario llamado miguel, sin directorio personal.
/]# useradd -M miguel

17. Crear un usuario cuya contraseña posea fecha de expiración.


Con la opción -f se define el número de días tras los cuales la contraseña expirará. Un valor de 0 des-
activa la cuenta de usuario tan pronto como la contraseña expira. Por defecto, este campo tiene el valor
-1 , que significa que nunca expira. En este ejemplo, vamos a crear una cuenta llamada conce, cuya
contraseña expire en 45 días , con las opciones -e y -f:

/]# useradd -e 2017-02-20 -f 45 conce

18. Crear un Usuario y Cambiar la Shell.


A veces se añaden usuarios que no tienen que iniciar sesión, o simplemente se les quiere asignar otras
terminales (shells). Podemos decidir todo esto en el momento de la creación del usuario con la opción
-s.
Creemos un usuario llamado ulrike sin shell de inicio e.g. /sbin/nologin. (No podrá iniciar sesión)

/]# useradd -s /sbin/nologin ulrike

Verifiquémoslo:

/]# grep ulrike /etc/passwd


ulrike:x:1002:1002::/home/ulrike:/sbin/nologin

4.7 Lo que sucede al crear usuarios


Con el comando useradd podemos agregar un usuario:

/]# useradd miguel

pero lo anterior no es interesante para linux. El sistema operativo requiere de UGO.


Los valores UGO de un usuario los podemos ver con el comando id:

/]# id miguel

41
el cual despliega la siguiente información almacenada en el archivo /etc/passwd y donde podemos obser-
var que los valores de uid, el group id y GID (otros) se asigna en forma automática en 500:

uid=500(miguel) gid=500(miguel) groups=500(miguel)

La creación de un usuario es un proceso complejo en el cual suceden muchas cosas. Es importante com-
prender cada una de ellas:

1. Son afectados 4 archivos:

a) /etc/passwd La utilidad de éste fichero radica en que mantiene la información principal de cada
cuenta. Es aquí donde se guarda la configuración de cada usuario creado: nombre de usuario, UID,
GID, login shell, directorio home, etc. Cualquiera sea el tipo de usuario, todas las cuentas se encuentran
definidas en el archivo de configuración passwd ubicado en el directorio /etc. Éste archivo es del tipo
ASCII y contiene 1 línea para cada usuario.
Este archivo es de texto tipo ASCII, se crea al momento de la instalación con el usuario root y las cuentas
especiales, más las cuentas de usuarios normales que se hayan indicado al momento de la instalación.
Observemos qué nos dice el archivo /etc/passwd respecto al usuario miguel, desplegando sus coincien-
cias con la palabra: miguel. Recordemos que para hacer esto podemos usar el comado grep:
/]# cat /etc/passwd | grep miguel
Se despliega lo siguiente:

b) etc/group información sobre los grupos definidos en el sistema. nombre del grupo, GID y miem-
bros del mismo. Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del
sistema, contiene una línea para cada usuario con tres o cuatro campos por usuario.

c) etc/shadow en sistemas actuales, fichero sin permiso de lectura que guarda las contraseñas en-
criptadas. Anteriormente (en sistemas Unix) las contraseñas cifradas se almacenaban en el mismo
/etc/passwd. El problema es que ’passwd’ es un archivo que puede ser leído por cualquier usuario
del sistema, aunque solo puede ser modificado por root.

Con cualquier computadora potente de hoy en día, un buen programa de descifrado de contraseñas
y paciencia es posible "crackear" contraseñas débiles (por eso la conveniencia de cambiar periódica-
mente la contraseña de root y de otras cuentas importantes). El archivo ’shadow’, resuelve el problema
ya que solo puede ser leido por root. Considérese a ’shadow’ como una extensión de ’passwd’ ya que no
solo almacena la contraseña encriptada, sino que tiene otros campos de control de contraseñas.

d) etc/gshadow contraseñas para grupos (no suele usarse)


2. Al usuario le es asignada una uid: user id. En los sistemas tipo UNIX, los usuarios son representados
por un identificador de usuario (uid o User ID). Sus valores van desde 0 al 32767. El usuario root
siempre le es asignado un uid = 0. Al sistema se le reservan los valores del 1 al 499, éstos son los
usuarios especiales. A las cuentas del sistema va asociado el concepto de no-login asociados al archivo
/sbin/nologin. Éstas son sumamente restrictivas. Ni siquiera se puede ingresar al sistema y no tienen
password asociadas. A los usuarios corrientes se les asigna desde el valor 500 en adelante.
3. Al usuario le es asignado un espacio de trabajo: workspace Suponiendo que creamos un usuario
llamado enriquez:

/]# useradd enriquez

/home/enriquez éste es el espacio de trabajo (workspace del usuario creado)

42
4. Al usuario se le asigna una cuenta de correo.
Ésta cuenta de correo se ubicará en: /var/spool/mail/nombre_del_usuario.

5. Al usuario se le entregan las políticas de contraseña a través del comando chage.

6. Al usuario se le crean 4 archivos de configuración: Los usuarios normales y root en sus directorios
de inicio tienen varios archivos que comienzan con "." es decir están ocultos.

Archivos de configuración:

a) .bash_profile: Éste es el primer archivo que se ejecuta al hacer login. Aquí podremos indicar los
alias, variables, configuración del entorno, etc. que deseamos iniciar al principio de la sesión.

b) .bashrc segundo archivo que se ejecuta al hacer login. permite ejecutar sentencias de comando
(ejecuta programas)

c) .bash_history se crea al acceder a la cuenta y guarda las últimas 2000 líneas antes de hacer un
enter.

d) .bash_logout: Es el último programa que se ejecuta en la sesión el cual guarda la hora y fecha
de salida, con el fin de registro, control, catastro. Aquí podremos indicar acciones, programas, scripts,
etc., que deseemos ejecutar al salirnos de la sesión.

7. Al usuario se le asigna una shell.

4.7.1 El comando chage. (Primera prueba del primer semestre del 2017)
Con el comando chage podemos administrar la política de passwords de los usuarios.
A continuación tenemos la función de cada uno de sus parámetros:

Sintaxis:
/]# chage -parámetro valor usuario

1. /]# chage -l usuario1


Muestra la política de contraseñas del usuario.
Con éste comando puede ir verificando que sus configuraciones sean las correctas (y con éste
comando le van a revisar su prueba).

2. /]# chage -m 4 usuario1


Establece el mínimo número de días entre cambios de contraseña a 4. No es muy relevante esta infor-
mación. Sólo nos dice que no podremos cambiar nuestra contraseña antes de que hayan transcurrido 4
días desde el último cambio.

3. /]# chage -d 2020-9-28 usuario1


Establece la fecha del último cambio de contraseña a 2020-9-28.

4. /]# chage -E 2020-5-12 usuario1


Establece la fecha de caducidad de la cuenta del usuario al 2020-5-12.

5. /]# chage -h
Muestra la ayuda.

43
6. /]# chage -I 1 usuario1
Éste comando hace que la cuenta se desactive después de 1 día desde la fecha de expiración de
la contraseña.

7. /]# chage -M 30 usuario1


Establece el periodo de vigencia de la contraseña.
Lo hace estableciendo el máximo número de días que deben transcurrir para que obligatoriamente sea
cambiada. En nuestro ejemplo, la vigencia de la contraseña para el usuario1 es de 30 días.

8. /]# chage -W 15 usuario1


Establece el número de días para que aparezca una advertencia antes de que la password expire
según lo establece el punto 7. En nuestro ejemplo, se emite una alerta a los 15 días antes de que
expire la contraseña.

4.8 Los ficheros /sbin/nologin y /bin/false


Puede ser que queramos que un usuario no tenga ninguna shell válida. Para hacer esto, GNU/Linux nos ofrece
dos posibilidades: una es emplear /bin/false y la otra emplear /sbin/nologin. Cualquiera de las dos hace "lo
mismo", pero una es mucho más restrictiva que la otra.
La shell /bin/false cierra cualquier tipo de entrada por consola, ssh, telnet y ftp al sistema. Por el contrario,
/sbin/nologin hace lo mismo, pero no evita el acceso vía ftp. Además, si un usuario tiene el primer tipo de
shell directamente no podrá acceder al sistema y no le aparecerá ningún tipo de información. Mientras que
con la segunda sí se puede conseguir mostrar un texto, por defecto "This account is currently not available",
que se configura en el fichero /etc/nologin.txt.
Por ejemplo, creemos un usuario llamado rafael sin shell de inicio e.g. /sbin/nologin. (No podrá iniciar
sesión)

/]# useradd -s /sbin/nologin rafael

Corroborémoslo:

/]# grep rafael /etc/passwd


rafael:x:1002:1002::/home/rafael:/sbin/nologin

4.8.1 Ejercicio n°4. Cree un usuario PEPITO con las siguientes características: (Primera prueba del
primer semestre del 2017)
Solución:

Observemos que la pregunta relacionada al cuadro "Inactividad" está planteado de una forma extremada-
mente ambigua. Por lo que se pregunta es por el tiempo en que se quiere que la cuenta sea desactivada luego
de la fecha de expiración de la contraseña.

/]# useradd PEPITO


/]# passwd 123456

Si bien todo lo que sigue podríamos escribirlo en una sola línea lo haremos paso a paso por razones de claridad.

/]# usermod -c "Usuario Válido" PEPITO

/]# usermod -d /casa/PEPITO PEPITO

44
Comentario Usuario Válido
Work Space /casa/PEPITO
Fecha Expiración 30-04-2018
Bloqueo si
GID 5000
Gid 3000
Uid 4000
Shell /sbin/nologin
Grupo Otro_Grupo
Vigencia Pass 30 días
Warning 15
Inactividad 1 día

(no es necesario crear antes el directorio.)

/]# usermod -e 2018-05-01 PEPITO


/]# usermod -L PEPITO

No sé como asignar el GID

/]# usermod -u 4000 PEPITO


/]# groupmod -g 3000 PEPITO
/]# useradd -s /sbin/nologin PEPITO

Hay que crear un grupo llamado: Otro_Grupo y asignarle una contraseña:


/]# groupadd Otro_Grupo
/]# gpasswd Otro_Grupo
123456

Utilicemos -g para que PEPITO pierda su pertenencia a su grupo primario.


/]# usermod -g Otro_Grupo PEPITO

/]# chage -M 30 PEPITO


/]# chage -W 15 PEPITO
/]# chage -I 1 PEPITO

4.9 El fichero /etc/login.defs


Este fichero configura las opciones del login de usuarios de forma permanente.Los usuarios existentes no se
ven afectados. Es útil si queremos modificar los valores utilizados por defecto a la hora de crear cuentas de
usuario como por ejemplo limitar el número de inicio y fin de los UID y GID o administrar las políticas de
contraseñas de manera permanente.

Por ejemplo, podemos configurar:

PASS_MAX_DAYS (número)
El máximo número de días que una contraseña puede ser usada. Si la contraseña es mayor a lo indicado, un

45
cambio de contraseña será forzado. Si no se especifica nada, la política de retención de la contraseña será
-1: lo cual deshabilita la restricción. (una política de retención=0 significa: cambie la contraseña cuando y
donde quiera)

PASS_MIN_DAYS (número)
El mínimo número de días permitida entre cambios de contraseña. Cualquier intento de cambio en un plazo
menor al indicado será rechazado.Si no se especifica nada, la política de retención de la contraseña será -1:
lo cual deshabilita la restricción.

PASS_WARN_AGE (número)
El número de días antes de que expire una contraseña en el cual se desplegará un mensaje de advertencia. Un
cero indica que la advertencia se lanzará el día de la expiración,un valor negativo indica que no hay adver-
tencia para emitir. Si no es especificado, ninguna advertencia será desplegada. PASS_WARN_LEN (número)
Indica la extensión mínima de los caracteres de la contraseña.

UID_MIN (número)
UID_MAX (número)
Indican los valores máximos y mínimos para la asignación automática de uid con el comando useradd.

GID_MIN (número)
GID_MAX (número)
Indican los valores máximos y mínimos para la asignación automática de gid con el comando groupadd.

4.10 El fichero /etc/skel


Tanto la shell como el entorno gráfico y otras aplicaciones mantienen configuraciones personalizadas para
cada usuario que se almacenan en el directorio personal. Es labor del administrador crear y mantener ficheros
de configuración adecuados y copiarlos en los directorios personales. La orden useradd copia el contenido del
directorio /etc/skel en el directorio personal de cada uno de los usuarios que crea. El directorio /etc/skel es
bastante simple de configurar y usar. Proporciona una forma de estar seguro de que todos los nuevos usuarios
de tu sistema LFS tienen la misma configuración inicial. El directorio /etc/skel es usado por el programa
/usr/sbin/useradd.
Para más información, consulta man useradd. skel puede servirnos como un poderoso generador de plan-
tillas para los nuevos usuarios que creemos, evitándonos tener que hacer tareas duplicadas y ahorrándonos
un tiempo considerable; especialmente si hablásemos de un número alto de nuevos usuarios.

4.10.1 Ejercicio n°5. Genere un guión tipo bash que sea aplicable para todos los futuros usuarios
creados. (Primera prueba del primer semestre del 2017)
Lo que se pide es que cada vez que creemos un nuevo usuario, en la pantalla que se abra se despliegue la
información pedida de la tabla:
(La trampas son dos:
1. No se dispone de la información relativa a todas las variables de entorno. En el anexo se entrega
una lista completa de éstas.
2. El formato para el despliegue tanto de fecha como de la hora requiere de un carácter especial: ‘, que
se obtiene presionando la tecla alt gr + la tecla que contiene } y ])

Solución:

46
Fondo Rojo
Fuentes Amarillo
Bienvenido usuario Variable
Al servidor Variable
UD. Realiza la conexión a las HH:MM:SS
De la fecha DD/MM/AAAA
El tipo de Shell en ejecución es Variable
El tipo de terminal en ejecución es Variable
Su cuenta de correo es Variable
Su work Space es Variable

El ejercicio es extremadamente sencillo. Lo único que debemos hacer es editar el archivo: /etc/skel/.bash_profile
y agregar las líneas que se detallan:

/]# nano /etc/skel/.bash_profile

setterm -background red


setterm -foreground yellow
El fondo de la pantalla no cambia a amarillo, sino a naranjo. No le pueden evaluar mal ésto, pues es
un problema del S.O. ¡no suyo!
echo Bienvenido usuario $USER
echo Al servidor $HOSTNAME
HORA=$(date +"%H:%M:%S")
echo UD. Realiza la conexión a las %HORA
FECHA=$(date +"%d-%m-%Y")
echo De la fecha $FECHA
echo El tipo de Shell en ejecución es $SHELL
echo El tipo de terminal en ejecución es $TERM
echo Su cuenta de correo es $MAIL
echo Su workspace es $HOME

Como ejercicio adicional, haga que la salida muestre si la hora es pm o am.

4.11 Consideraciones finales


1 Cuando se crea un usuario no es necesario crearle un grupo, pues cada vez que se crea un usuario se crea
un UGO con un userid único e inequívoco guardado en /etc/passwd.
2 Mientras más nos alejamos del 0, menos permisos va a tener el usuario; por el contrario, mientras más cerca
está del uid=0, más poder tiene.
3 Las cuentas de los usuarios creados están bloqueadas por defecto. Necesitan de una contraseña para des-
bloquearse.

5 Administración de permisos para archivos y directorios


En linux, los permisos se asignan por medio de los grupos.
El usuario root puede cambiar los permisos a cualquier elemento del sistema de archivos.
Para desplegar los archivos y directorios de un usuario con sus respectivos permisos utilizamos el comando ls
con la opción l:

47
/]# ls -l
dr-xr-xr-x. 2 root root 4096 Jul 31 18:39 bin

La tercera columna es el usuario propietario del elemento. El cuarto elemento es el grupo de usuarios que
tienen permisos sobre el elemento.

Los primero que se lista a la izquierda es una serie de 10 caracteres terminados por un punto. El primer
carácter nos indica si se trata de un archivo (-) o un directorio (d).
Las siguientes tríos son los permisos. Los primeros son los permisos del usuario, los segundos del grupo al que
pertenece el usuario y el tercero son los permisos de los usuarios que están fuera del grupo del usuario (en
ese orden).
Tienen la siguiente estructura:
rwx rwx rwx, donde:
r: read
x: write
x: execution

5.1 Permisos en archivos


r: Si tienes permiso de lectura de un archivo, puedes ver su contenido.
w: Si tienes permiso de escritura de un archivo, puedes modificar el archivo. Puedes agregar, sobrescribir o
borrar su contenido.
x: Si el archivo tiene permiso de ejecución, entonces puedes decirle al sistema operativo que lo ejecute como
si fuera un programa. Si es un programa llamado “foo” lo podremos ejecutar como cualquier comando. O
un script (interprete) que necesita permiso de lectura y ejecución, un programa compilado solo necesita ser
lectura.

5.2 Permisos en directorios


r: Si un directorio tiene permiso de lectura, puedes ver los archivos que este contiene. Puedes usar un “ls (list
directory)” para ver su contenido, que tengas permiso de lectura en un directorio no quiere decir que puedas
leer el contenido de sus archivos si no tienes permiso de lectura en esos.
w: Con el permiso de escritura puedes agregar, remover o mover archivos al directorio.
x: Ejecución te permite usar el nombre del directorio cuando estas accediendo a archivos en ese directorio, es
decir este permiso lo hace que se tome en cuenta en búsquedas realizadas por un programa, por ejemplo, un
directorio sin permiso de ejecución no seria revisado por el comando find.

5.3 Cambiar de propietario archivos o directorios


/]# chown <usuario> "archivo o directorio"
/]# chown <usuario> -r <directorio> "directorio y todo su contenido"
El primero solo modifica un archivo, el segundo modifica a todos los archivos que contiene dentro ese direc-
torio.

5.4 Cambiar de grupo archivos o directorios


/]# chgrp <grupo> <carpeta> "archivo o directorio"
/]# chgrp <grupo> -r <directorio> "directorio y todo su contenido"

48
5.5 La estructura binaria de los permisos
000 0 ---
001 1 --x
010 2 -w-
011 3 -wx
100 4 r--
101 5 r-x
110 6 rw-
111 7 rwx

Si deseamos cambiar los privilegios de algún directorio o carpeta usamos:


/]# chmod <permisos> <opciones> <archivo o carpeta>

Por ejemplo:
/]# chmod 705 Datos.txt

5.6 Ejercicios
5.6.1 Ejercicio 1
Cree 4 usuarios, dos hombres y dos mujeres y cambie los permisos de los directorios personales para que cada
usuario tenga control total sobre su directorio privado (home) y el resto sólo permisos de lectura sobre los
directorios de todos los demás.

Creemos los usuarios y asignémoles sus passwd:

/]# useradd pedro


/]# passwd pedro

/]# useradd carolina


/]# passwd carolina

/]# useradd juan


/]# passwd juan

/]# useradd luisa


/]# passwd luisa

Observemos que al crear 4 usuarios desde el root, todos, el root y los 4 usuarios poseen en sus carpetas
/home los directorios home de los 4 usuarios recién creados. Desde root hacemos:

/]# chmod 705 pedro


/]# chmod 705 carolina
/]# chmod 705 juan
/]# chmod 705 luisa

Dándole al tercer trío permisos r - x: 5, logramos que todos los usuarios tengan acceso al directorio home
de todos.
Ahora creemos dos grupos: alumnos y alumnas y asignemos los alumnos según corresponda (sin eliminar
el grupo de origen):

49
/]# groupadd alumnas
/]# groupadd alumnos

/]# usermod -G alumnos pedro


/]# usermod -G alumnos juan
/]# usermod -G alumnas carolina
/]# usermod -G alumnas luisa

Verifiquemos:

/]# id pedro
uid=500(pedro) gid=500(pedro) groups=500(pedro),505(alumnos)

Para ver los grupos y los usuarios asociados a ellos tenemos:


/]# tail /etc/group

Para acceder al archivo que contiene el nombre de nuestros usuarios:


/]# tail /etc/passwd

Creemos dos directorios:


/]# mkdir archivos de alumnos
/]# mkdir archivos de alumnas

Asignemos permisos para que el grupo alumnos pueda ingresar a "archivos de alumnos" y lo mismo con
las niñas:
/]# chgrp alumnos archivos de alumnos
/]# chgrp alumnas archivos de alumnas

Ahora viene algo interesante. Queremos que sólo los alumnos entren a "archivos de alumnos" y los mismo
para las niñas. Entonces, desde el root:

/]# chmod 770 archivos de alumnos


/]# chmod 770 archivos de alumnas

5.6.2 Ejercicio 2
Agregue el nombre completo a lo usuarios. Cree en el directorio /home del root los siguientes directorios:
Gerencia
Personal
Empleados

Haga que cada usuario tenga el control total sobre su directorio privado y el directorio del grupo al cual
pertenece y de sólo lectura para el resto de los directorios.

Nombre Usuario Contraseña Grupo


Pablo B pbarriaz Pb487 Gerencia
Jonathan D jdelvallem Jd955 Personal
Mauricio G mgarridom Mg361 Personal
Nicolas G nguajardoc Ng317 Empleados
Patricio P pparrag Pp476 Gerencia

50
Vivente R vrivasa Vr186 Empleados

6 Programación de Scripts
6.1 Introducción a la Shell
Shell es simplemente un intérprete de C. Programar un script no es nada más que abrir uno de los tantos
ficheros que componen la estructura de archivos de linux con un editor de textos como nano, y escribir un
programa dentro de él en un C puro. Éste archivo se interpreta (se ejecuta) mediante un proceso denominado
shell. Ahora, existen muchas shells, siendo la que posee linux por defecto denominada bash, ubicada en el
fichero /bin/bash, pudiendo accederse a ella tanto desde root ($), como desde el usuario (#).

En etc/shells se guardan las referencias de los tipos de shell que soporta nuestra máquina. Estando den-
tro de un archivo de texto la programación se hace mucho más fácil si utilizamos comentarios, los que van
precedidos de un símbolo #:

#: Éste es un comentario. Recordemos algunos conceptos:


Una Shell de Unix o simplemente Shell, es el término usado para referirse a un intérprete de comandos para
Linux en C; la interfaz de usuario tradicional de los sistemas operativos basados en Unix y similares como
GNU/Linux.
En nuestro sistema, la Shell se encuentra en /bin/bash
Un Script es un programa escrito en un lenguaje C puro interpretado por nuestra Shell.
Importante: Si bien es cierto C es muy similar a C# y Java, también tiene diferencias importantes, por
lo que debe ser muy cuidadoso en respetar los espacios y la sintaxis correcta.
Sin darnos cuenta, ya hemos programado Scripts en una forma rudimentaria. Veamos ésto a continuación:
Recordemos que al crear un usuario en Linux se generan automáticamente 4 archivos:

.bash_profile
.bashrc
.bash_history y
.bash_logout

y que podemos editar cualquiera de ellos (en realidad, cualquier archivo), con Nano, de la forma:

/]# nano .bash_profile

Con echo podemos imprimir literales como "hola":

/]# echo "hola"

o variables. Por ejemplo, supongamos que deseamos imprimir la fecha con el comando date. Para ello primero
debemos convertir el dato de la fecha en una variable.

/]# h=$(date)
/]# echo $h

51
6.2 Ejercicio: construya un script que despliegue información cada vez que inicie un
nuevo usuario su sesión Segunda prueba del primer semestre del 2017
Edite un archivo tal que cada vez que se inicie un usuario se cree el directorio:

/home/$USER/$UID/$FECHA/$HORA

Vamos al archivo /etc/skel y editamos el archivo .bash_profile

/]# cd /etc/skel
skel]# nano .bash_profile

Una vez dentro del archivo, agregamos al final del código las siguientes líneas:

echo "Su UID es:" $UID


echo "su cuenta de correo es:" $MAIL
echo "Su workspace es:" $HOME
hora=‘date +%H%M%S‘
Acá usamos el acento grave, en código ASCII el número 96: ‘. En el teclado, se encuentra en la misma
tecla donde está el símbolo de cierre del corchete.
Los espacios debe establecerlos exactamente como se indica.
fecha=‘date +%d%m%Y‘

mkdir /home/$USER/$UID/$fecha/$hora -p

Creemos un nuevo usuario:


/]# useradd miguel
/]# passwd miguel

salgamos del sistema y volvamos a ingresar como miguel.


Vemos que se despliega la información y se generaron el directorio especificado.

6.3 Nuestro primer Script


Programar un Script en Linux es extremadamente sencillo. Sólo debemos crear un archivo con nano y darle
una extensión .sh. Ésto último no es necesario pero es una buena práctica.

/]# nano script1.sh

Con chmod le asignamos al archivo todos los permisos.

/]# chmod 777 script1.sh

¿Cómo corremos los Scripts? Hay dos formas:

1 Escribiendo la ruta absoluta, por ejemplo:


/]# /trabajo/script/script1.sh

2 Utilizando Scripts que ejecuten Scripts:


/]# sh script1.sh

52
Creemos un Script que nos pregunte nuestro nombre y apellido y luego los despliegue en la pantalla.
Por un asunto de orden primero construyamos un directorio donde iremos almacenando todos nuestros Scripts:

/]# mkdir scripts


/]# cd scripts
scripts]# nano script1.sh

Dentro del archivo escribimos las siguientes líneas:

#! /bin/bash
echo "Hola estimado"
echo "Ingrese su nombre:"
read NOM
echo "Ingrese su apellido:"
read APE
echo "Su nombre completo es:"$NOM$APE

Guardemos y salgamos con:


control+o
control+x

despleguemos los archivos del directorio scripts:

scripts]# ls -la

vemos que se despliega script1.sh en blanco. Otorguémosle todos los permisos:

scripts]# chmod 777 script1.sh

y despleguemos nuevamente el contenido de archivos:

scripts]# ls -la

y vemos ahora que script1.sh se despliega en verde.

Ejecutemos el Script: scripts]# sh script1.sh

6.4 Ejercicios
1. Escriba un Script que reciba dos números y obtenga la suma de ellos. Además, que posea un fondo verde
y que las letras sean amarillas.

#! /bin/bash
echo "Ingrese el primer número"
read a
echo "Ingrese el segundo número"
read b
c=$((a+b))
echo "La suma de los números ingresados es: " $c

2. Construya un Script que permita realizar las cuatro operaciones básicas (uso del case).

53
#! /bin/bash
echo "Ingrese el primer número:"
read a
echo "Ingrese el segundo número:"
read b
echo "Elige la operación:"
echo "1. Suma"
echo "2. Resta"
echo "3. Multiplicación"
echo "4. División"
read op
case $op in
1) res=$((a+b));;
2) res=$((a-b));;
3) res=$((a*b));;
4) res=$((a/b));;
esac
echo "El resultado es: " $res

3. Agregue al ejercicio anterior dos acciones:


1 ¿Desea seguir?
2 Que después de ejecutar una operación se limpie la pantalla.

#! /bin/bash
a=1
while(($a<=1))
do
echo "Ingrese el primer número:"
read a
echo "Ingrese el segundo número:"
read b
echo "Elige la operación:"
echo "1. Suma"
echo "2. Resta"
echo "3. Multiplicación"
echo "4. División"
read op
case $op in
1) res=$(($a+$b));;
2) res=$(($a-$b));;
3) res=$(($a*$b));;
4) res=$(($a/$b));;
esac
echo "El resultado es: " $res
echo "Desea seguir?"
echo "1.SI"
echo "1.NO"
read x
case $x in
1) a=1;;

54
2) a=2;;
esac
clear
done

4. Construya un script que cree usuarios y grupos, que asigne usuarios a grupos y que despliegue la infor-
mación.
#! /bin/bash
#Éste programa crea usuarios y grupos#
echo "Ingrese nombre: "
read NOM
echo "Ingrese grupo: "
read GRU
useradd $NOM
passwd $NOM
123456
groupadd $GRU
usermod -G $GRU $NOM
echo "La información del usuario creado es:"
echo "UID" $UID
echo "Lista de grupos a los que pertenece el usuario actual:" $GROUPS

ACÁ HAY UN ERROR PORQUE SE DESPLIEGA EL UID Y EL GRUPO DEL USUARIO ROOT, NO DEL
QUE SE CREA

5. Cree un programa que permita ingresar:


1 Nombre de usuario.
2 UID a asignar.
3 Comentario.
4 Fecha de expiración.
5 Tipo de Shell a asignar.
y que despliegue los valores para demostrar que esto quedó bien.
#! /bin/bash
echo "Ingrese nombre del usuario"
read A
echo "Ingrese UID a asignar"
read B
echo "Ingrese comentario a asignar"
read C
echo "Ingrese fecha de expiración"
read D
echo "Ingrese tipo de Shell"
read E
useradd -u$B -c$C -e$D -s$E $A
echo "Usted creó al usuario: " $A
echo "Su comentario y su shell son: " cat /etc/passwd | grep "$A"
echo "Su información de password es: " chage -l $A
No me resulta

55
6. Cree un programa que permita ingresar el nombre de un usuario y una cantidad, los cree automática-
mente y los liste:

usuario1
.
.
.
usuarion

#! /bin/bash
echo "Ingrese nombre: "
read nom
echo "Ingrese cantidad de usuarios: "
read can
for ((i=1;i<=can;i++))
do
usedadd $nom$i
echo "Usted creó al usuario: " id $nom$i
done

7. Cree un script que permita ingresar un nombre de usuario, un nombre de grupo, una cantidad y que a
cada usuario se le asigne su grupo respectivo:

usuario1 -> grupo1


usuario2 -> grupo2
.
.
.
usuarion -> grupon

#! /bin/bash
echo "Ingrese nombre de usuario: "
read usu
echo "Ingrese nombre de grupo: "
read gru
echo "Ingrese cantidad: "
read can
for ((i=1;i<=can;i++)) do
useradd $usu$i
groupadd $gru$i
usermod -G $gru$i $usu$i
echo "Usted creó al usuario: " id $usu$i
done

8. Crear un script que permita ingresar un nombre de usuario, una cantidad de usuarios y que al momento
de ser creados los usuarios se creen directorios al estilo:

xxx1 /home/xxx1/AAAAMMDD/HHMMSS
xxx2 /home/xxx2/AAAAMMDD/HHMMSS

56
.
.
.
xxx30 /home/xxx30/AAAAMMDD/HHMMSS

#! /bin/bash
echo "Ingrese nombre de usuario:"
read nom
echo "Ingrese cantidad de usuarios:"
read can
hora=$(date +"%H%M%S")
fecha=$(date +"%Y%m%d")
for ((i=1;i<=can;i++)) do
useradd $nom$i
mkdir /home/$nom$i/$fecha/$hora -p
echo "Usted creó el usuario: " id $nom$i
done

9. Ingrese un nombre de usuario, una cantidad de usuarios y una UID base (por ejemplo=5000) de la
siguiente forma:

uid usuario

5000 usuario0
5001 usuario1
.
.
.
5010 usuario10

a los usuarios pares asignarles un bloqueo de cuenta y a los impares asignarles comentarios:

#! /bin/bash
echo "Ingrese nombre de usuario: "
read nom
echo "Ingrese cantidad de usuarios: "
read cant
echo "Ingrese UID base: "
read ident
for((i=$ident;i<($ident+$cant);i++)) do
let resto=i%2
#respete los espacios en la sentencia if:#
if [ $resto -eq 0 ]; then
useradd $nom$i
usermod -L $nom$i
echo $nom$i
else
useradd -c "usuarios impares" $nom$i
echo $nom$i

57
fi
done

7 Empaquetar y comprimir archivos


Empaquetar (crear un archivero) es agrupar en un solo archivo varios archivos y/o directorios, en cambio,
comprimir significa aplicar un algoritmo que hará que el archivo ocupe menos espacio en el disco.

7.1 Empaquetar archivos con el formato tar


La utilería tar crea archiveros para archivos y directorios. tar se desarrolló originalmente en los primeros días
de Unix con el fin de realizar copias de seguridad de archivos en dispositivos de almacenamiento basados en
cinta. Posteriormente se formalizó como parte del estándar POSIX, y hoy se usa para recopilar, distribuir y
archivar archivos, al tiempo que conserva los atributos del sistema de archivos, como permisos de usuarios
y grupos, fechas de acceso y modificación y estructuras de directorios. En el argot, un tarball es un archivo
comprimido con tar.

7.1.1 Empaquetar archivos


Para poder empaquetar ficheros, utilizamos el siguiente comando:

/]# tar cvf fichero_empaquetado.tar fichero_a_empaquetar

Donde:
c (create) : indica a tar que cree un nuevo archivero.
v (verbose) : muestra el progreso del archivo .tar.
f (final) : indica el nombre de archivo del archivo de almacenamiento: fichero_empaquetado.tar.

7.1.2 Desempaquetar archivos


Para poder desempaquetar los ficheros .tar utilizamos el siguiente comando:

/]# tar xvf fichero_empaquetado.tar

Donde:
x (extract) : indica a tar que desempaquete el fichero_empaquetado.tar.

7.1.3 Ver el contenido de los archivos sin desempaquetar


Si se quiere ver el contenido de un fichero_empaquetado.tar, se utiliza el siguiente comando:

/]# tar tf fichero_empaquetado.tar

Donde:
t (list) : Lista el contenido del fichero_empaquetado.tar

7.1.4 Ejemplo:
Empaquetemos en el fichero box.tar todo el contenido del directorio etc:

58
/]# tar cvf box.tar etc

Recordemos que el directorio etc contiene los archivos de configuración para todos los programas que se
ejecutan en el sistema Linux.

Ahora veamos el contenido sin desempaquetar del fichero box.tar, pero sólo aquellos componentes que posean
la palabra cron:

/]# tar tf box.tar | grep cron*

7.2 Comprimir archivos con el formato gzip


El comando gzip crea archivos comprimidos con extensión .gz.
Importante: gzip es una herramienta de compresión pura, es decir, solo comprime archivos indivi-
duales (no directorios) y, a diferencia de zip, no permite comprimir a varios dentro de un sólo archivo
comprimido.
Tenemos que situarnos en la carpeta dónde se encuentran los ficheros que queremos comprimir.

7.2.1 Comprimir un archivo


/]# gzip 9 fichero

donde:
1. . . 9: Comprime los archivos con el ratio de compresión deseado. 1 es el factor de compresión más rápido
pero la compresión obtenida es bastante pobre; 9 es el factor de compresión más lento, pero el archivo resul-
tante está muy bien comprimido.

7.2.2 Descomprimir un archivo


/]# gzip d fichero.gz

7.3 Comprimir y empaquetar archivos con el formato tar.gz


Debido a que es muy usual primero archivar con tar un conjunto de archivos y posteriormente comprimirlos
con gzip, existe una opción del comando tar que empaqueta y comprime ficheros simultáneamente. La opción
z automáticamente comprime con gzip. (Por convención, a los ficheros comprimidos con el comando gzip se
les da la extensión .gz).

De esta manera, las siguientes instrucciones son equivalentes:


/]# tar zcvf box.tar.gz /etc
/]# gzip box.tar

7.3.1 Comprimir y empaquetar archivos


Para comprimir y empaquetar ficheros en formato tar.gz, se utiliza el siguiente comando:
/]# tar zcvf fichero_comprimido_y_empaquetado.tar.gz fichero_a_comprimir_y_empaquetar

z : indica a tar que comprima un archivo utilizando el compresor gzip.

59
7.3.2 Descomprimir y desempaquetar archivos
Para descomprimir ficheros con extensión tar.gz, se usa el siguiente comando:
/]# tar zxvf fichero_comprimido_y_empaquetado.tar.gz

7.3.3 Ver el contenido de un archivo comprimido y empaquetado


Para poder ver el contenido de un fichero comprimido y empaquetado en tar.gz, se usa el siguiente comando:
/]# tar tzf archivo.tar.gz

7.4 Comprimir archivos y directorios con el formato zip


Para comprimir un directorio:
/]# zip -r nombre_nuevo.zip nombre_del_directorio

Para comprimir archivos:


/]# zip nombre_nuevo.zip archivo1 archivo2 archivo3

Para descomprimir:
/]# unzip archivo.zip

Para listar todos los archivos o directorios contenidos en el paquete archivador.zip:


/]# unzip -l archivo.zip

7.5 Comprimir archivos con el formato bz2


bz2 comprime archivos utilizando un algoritmo de compresión de texto de ordenamiento por bloques Burrows-
Wheeler y codificación Huffman. bz2 es más moderno y con un mayor índice de compresión que gzip. Ten-
emos que situarnos en la carpeta dónde se encuentran los ficheros que queremos comprimir.

Importante: Al igual que gzip, bz2 es una herramienta de compresión pura, es decir, solo comprime
archivos individuales (no directorios) y, a diferencia de zip, no permite comprimir a varios dentro de
un sólo archivo comprimido.

Para comprimir un fichero cualquiera en bzip2, la sentencia a utilizar es la siguiente:


/]# bzip2 -z archivo

Una vez se tiene el archivo comprimido con la extensión bz2, en este caso archivo.bz2, se puede hacer un
test de la integridad del mismo con el comando t. Si todo está OK, no habrá ningún output.
/]# bzip2 t archivo.bz2

Para descomprimir el fichero que se ha generado como resultado de la compresión en bzip2, se utiliza la
expresión que sigue:
/]# bzip2 d archivo.bz2

7.6 Respaldos (backups)


Cuando se hace el respaldo de manera rutinaria de un archivo, empaquetándolo y comprimiéndolo, se van
borrando sus versiones previas al ser sobreescrito el archivo una y otra vez. Para solucionar ésto, se le agrega
al nombre del archivo la fecha y la hora.
Podemos construir un script que respalde (empaquete y comprima) la información del directorio etc en otro

60
directorio.

#! /bin/bash
hora=$(date +"%H%M%S")
fecha=$(date +"%Y%m%d")
tar czvf /home/miguel/$fecha/$hora.tar.gz etc

Se puede crear un directorio donde sea a su vez éste archivo desempaquetado y descomprimido.

8 Agendamiento con el demonio Cron


El nombre cron viene del griego chronos que significa “tiempo”. En el sistema operativo Unix, cron es un
administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos
regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la
que deben hacerlo se especifican en el fichero crontab.
Cron es un software que aparece en el autoarranque del S.O. y corre en segundo plano.

8.1 Modos de arranque en linux y configuración del arranque de Cron


El término runlevel o nivel de ejecución se refiere al modo de operación en los sistemas operativos que
implementan el estilo de sistema de arranque de iniciación tipo UNIX System V.
En términos prácticos, cuando el computador entra al runlevel 0, está apagado, y cuando entra al runlevel
6, se reinicia. Los runlevels intermedios (1 a 5) difieren en relación a qué unidades de disco se montan, y qué
servicios de red son iniciados. Los niveles más bajos se utilizan para el mantenimiento o la recuperación de
emergencia, ya que por lo general no ofrecen ningún servicio de red. Los detalles particulares de configuración
del runlevel varía bastante entre sistemas operativos, y ligeramente entre los administradores de sistema.

Nivel de ejecución Descripción


0 Alto o cierre del sistema (Apagado).
1 No configura la interfaz de red o los demonios de inicio.
2 Multiusuario sin soporte de red.
3 Inicia el sistema normalmente.
4 Igual que el 3.
5 Similar al nivel de ejecución 3 + display manager.
6 Se reinicia el sistema.

Table 1: Niveles de ejecución típicos en Linux.

Nos interesa tener crond con los niveles 3 y 5 on; el resto en off.

El comando chkconfig permite configurar que servicios arrancan o se detienen en cada nivel de ejecución.
Con la opción – –list nos da una lista completa de todos los servicios instalados y para cada nivel si arrancará
(on) al entrar a ese nivel o se detendrá (off) o simplemente no se iniciara. Nótese que al final de la lista vienen
los servicios que dependen del superservidor xinetd:
/]# chkconfig – –list

Pero volvamos a lo nuestro. Primero, veamos los niveles de ejecución que actualmente posee el demonio crond:

/]# chkconfig – –list crond

61
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Dejémoslos todos en off:


/]# chkconfig – –level 0123456 crond off

encendamos los 3 y 5:
/]# chkconfig – –level 35 crond on

Verifiquemos:
/]# chkconfig – –list crond
crond 0:off 1:off 2:off 3:on 4:off 5:on 6:off

Para saber si el demonio crond se está ejecutando utilizamos el siguiente comando:


/]# ps -fea | grep crond

Para saber si crond está corriendo:


/]# service crond status

Para detener el servicio crond:


/]# service crond stop

Para rearrancar crond:


/]# service crond restart

8.2 Configuración de la hora y fecha de nuestro sistema


La función de crond es agendar tareas o scripts a determinadas horas y fechas, por lo que primero debemos
asegurarnos de tener correctos estos datos en nuestro sistema:

Veamos la configuración actual de hora y fecha:


/]# date
Wed Nov 1 05:05:16 CLST 2017

Establezcamos una hora correcta:


/]# date – –set "2017-11-01 09:30:00"
Wed Nov 1 09:30:00 CLST 2017

Ahora configuremos la hora del hardware:


/]# hwclock
Wed 01 Nov 2017 05:11:58 AM CLST -0.572915 seconds

/]# hwclock – –set – –date "2017-11-01 09:30:00"


Wed 01 Nov 2017 09:30:05 AM CLST -0.926040 seconds

8.3 Agendando una tarea en Cron


Crond cada 1 minuto va a revisar la agenda.

Hay dos maneras de usar cron.


La primera es colocando dentro de los directorios:

62
cron.hourly
cron.daily
cron.weekly
cron.monthly
todos ellos que a su vez están dentro del directorio /etc, un archivo tipo script, el cual se ejecutá cada hora,
día, semana o mes respectivamente.
Para que el archivo pueda ser ejecutado tiene que ser algo similar a lo siguiente:

#!/bin/sh
#script que genera un respaldo
cd /usr/documentos
tar czf * respaldo
cp respaldo /otro_directorio/.

Como segundo modo de ejecutar o usar cron es a través de manipular directamente el archivo /etc/crontab.
Nosotros utilizaremos ésta última forma.

8.3.1 Editando el archivo /etc/crontab


La fecha y hora del agendamiento se define por medio de 5 arteriscos correspondientes a los minutos, horas,
días, mes y días de la semana respectivamente.

* * * * *
minutos horas días del mes meses del año días de la semana
[ 0-59 ] [ 0-23 ] [ 0-31 ] [ 1-12 ] [ 0-7 ]

Tomemos como ejemplo el caso de los minutos.

Éstos se pueden indicar individualmente:


[ 0, 5, 17, 18 ]

Se puede establecer un rango:


[ 0-7 ]

Se pueden indicar valores individuales y rangos simultáneamente;


[ 1, 5, 18, 20-25 ]

Se pueden establecer incrementos:


[ 2/10 ] : indica que se parte en 2 con incrementos de 10: 2, 12 ,22, 32, 42, 52.

y se pueden integrar todos éstos formatos en una sola expresión:


[ 0, 5, 7-9, 12/2 ]

Un asterisco * en cualquiera de los primeros cinco campos, indica que que consideran todos sus valores.
Así, un * en el campo de los minutos indicará todos los minutos.

En incrementos, un arterisco indica el comienzo del campo. Por ejemplo, en el campo de minutos: */15
indica cada 15 minutos. ¿Se considera el primer elemento del campo?

63
Construyamos un directorio llamado Programas y dentro de él un archivo llamado reapaldodiario.sh

/]# mkdir /Programas -p


/]# cd /Programas
Programas]# nano respaldodiario.sh

#!/bin/bash
# Éste script genera un respaldo diario
tar -czvf /datos/respaldodiario.tar.gz /bdatos/.
mailto -s "Respaldo OK" [email protected]
# Fin del script

guardamos y salimos.

Creamos los directorios:


/]# mkdir /datos
/]# mkdir /bdatos

Copiamos el sistema de ficheros de linux en bdatos para que no esté vacío:


/]# cp */ /bdatos

Le entregamos permisos al script:


/]# chmod 777 respaldodiario.sh

Pero el archivo siempre va a sobreescribirse. Para evitar ésto agregamos la fecha y la hora.

# Éste script genera un respaldo diario


#!/bin/bash
hora=$(date +"%H%M%S")
fecha=$(date +"%Y%m%d")
tar -czvf /datos/respaldodiario$fecha-$hora.tar.gz /bdatos/.
mailto -s "Respaldo OK" [email protected]
# Fin del script

Ejercicio: Genere respaldos cada minuto en el directorio miguel:

1 Editamos el archivo /etc/crontab:

* * * * * root sh /respaldodiario.sh

2 Ahora creamos un directorio miguel:


/]# mkdir miguel

y dentro de él creamos el siguiente script:

#!/bin/bash
hora=$(date +"%H%M%S")
fecha=$(date +"%Y%m%d")
tar -czvf nuevo_respaldo-$fecha-$hora.tar.gz /miguel
cp nuevo_respaldo-$fecha-$hora.tar.gz /miguel

64
# Eliminamos el fichero creado en /:
rm nuevo_respaldo-$fecha-$hora.tar.gz -R -f

Ejercicio: Configure el cron para que haga respaldos el último día de cada mes:

Construímos el siguiente script:


hoy=(date +%d)
manana=$(date +% -d "1 day" )
if [ $manana -lt $hoy ]; then
tar -czvf nuevo_respaldo-$fecha-$hora.tar.gz /miguel
cp nuevo_respaldo-$fecha-$hora.tar.gz /miguel
# Eliminamos el fichero creado en /:
rm nuevo_respaldo-$fecha-$hora.tar.gz -R -f
fi

Y en el cron:

* * * * * root sh /respaldodiario.sh

8.4 Segunda prueba del primer semestre del 2017: Scripts, Compresiones, empaque-
tamientos y Crond
8.4.1 Programe un script de nombre backups.sh y posiciónelo en: /programas. Éste script debe ser
capaz de respaldar de manera comprimida y empaquetada todo el directorio /etc. El nombre
resultante del archivo debe ser:
Backups[Nombre del Servidor][Ruta del directorio respaldado][HH-MM-SS][DD-MM-AA].tar.gz
Recordemos que la variable de entorno para el nombre del servidor es: $hostname y que $pwd nos entrega la
ruta del directorio actual.

8.4.2 La siguiente pregunta fué algo que nunca se vió en clases: ejecutar el cron el penúltimo día de
cada mes. Programar una tarea cron que permita ejecutarla en el penúltimo día de cada mes
del año (en una sola línea) a las 23:00 horas, enviando un email al término de la ejecución a la
cuenta [email protected].
Notemos que la instrucción de la pregunta: en una sóla línea nos impide programar en un script (o al menos
eso es lo que se dá a entender). La respuesta en el comando L(last) que indica el último elemento de cada
campo. Entonces es cosa de configurar el cron como sigue:

* * L-1 * * root sh /respaldodiario.sh

65
8.4.3 Desarrollar una tarea /programas/fecha.sh que permita imprimir la fecha y la hora en for-
mato DD-MM-AAA-HH-MM-SS-NOMBRE-SERVIDOR-USUARIO (sic) en un archivo llamado /pro-
gramas/fecha.log y programar un cron que se ejecute cada 5 minutos (a partir del minuto 0),
todas las horas impares, de todos los meses impares y siempre y cuando sea jueves o viernes.
/respaldodiario.sh

9 Formas de ver la información del sistema


Existen muchos comandos para ver la información del sistema pues la filosofía de Linux es

10 Dispositivos: tipos y forma de montarlos

11 Particiones y formateo de discos

66
12 Instalación de 19 servicios en Linux
Para instalar todos los servicios siempre debemos hacerlo desde el superusuario.

12.1 Instalación de CentOS 6.9 como servidor


12.1.1 Primeros pasos
1. Configuremos una máquina virtual igual a como lo hicimos en el punto 1.1

2. Instalemos CentOS como lo hicimos en el punto 1.3.1 hasta el momento de particionar.

3. En este momento llegamos de forma automática al creador de particiones de CentOS.

12.1.2 El particionado
Supongamos que queremos obtener el siguiente particionado:

Particionado
PARTICIÓN ESPACIO PUNTO DE FILE SYSTEM
MONTAJE
Primaria 15000 MB / ext4
Arranque 200 MB /boot ext4
Memoria virtual temporal 4000 MB swap swap
Remanente Remanente /box ext4

Please Select a Device

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /


Seleccionar: File System Type: ext4
Seleccionar: Size (MB): 15000
Seleccionar: Fixed size
Seleccionar: Force to be a primary partition
Click en ok.

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /boot


Seleccionar: File System Type: ext4
Seleccionar: Size (MB): 200
Seleccionar: Fixed size
Click en ok.

1. click en Create

67
2. click en Standard Partition
click en Create

3. Seleccionar: Mount point: no aplica


Seleccionar: File System Type: swap
Seleccionar: Size (MB): 4000
Seleccionar: Fixed size
Click en ok.

Queda un resto de 1279 Mb:

1. click en Create

2. click en Standard Partition


click en Create

3. Seleccionar: Mount point: /box


Seleccionar: File System Type: ext4
Seleccionar: Size (MB): no aplica
Seleccionar: Fill to maximun allowable size
Click en ok.

12.1.3 Configuración de CentOS como servidor


1. Click en Next

2. Advertencia de formateo.
Damos click en Format

3. Advertencia de borrado de datos preexistentes.


Seleccionamos: Write changes to disk
CentOS ahora está creando las particiones ...

4. Debemos indicar la partición donde instalaremos el boot.


Seleccionamos: Install boot loader on /dev/sda y CentOS 6 /dev/sda2
Damos click en Next

5. Seleccionamos el tipo de instalación.

Queremos la versión servidor.


Seleccionamos: Basic server.
Seleccionamos: Customize now.
Click en Next

Seleccionamos los siguientes paquetes:

Aplications
Emacs
Opcional packages: todos
Internet Applications
Internet Browser
Base System
Base

68
Opcional packages: todos
Compatibility libraries
Opcional packages: todos
Console internet tools
Opcional packages: todos menos lo que contenga email
Debugging Tools
Opcional packages: todos
Java Platform
Opcional packages: todos
Legacy UNIX compatibility
Opcional packages: todos
Network file system client
Opcional packages: todos
Networking tools
Opcional packages: nmap
Performance Tools
Opcional packages: los que vienen por defecto
Perl Support
Opcional packages: los que vienen por defecto
Databases
No seleccionamos nada
Desktops
Desktop
Opcional packages: todos
Remote Desktop Clients
Opcional packages: los que vienen por defecto
Development
No seleccionamos nada
Servers
CIFS file server
Opcional packages: los que vienen por defecto
E-mail server
Lo desactivamos todo
FTP Server server
Opcional packages: los que vienen por defecto
NFS file server
Network Infraestructure Server
Opcional packages: bind-9.8.2
dhcp
quagga
tftp-server
System administration tools
Opcional packages: lshw
lsscsi
screen
tree
Web Services
PHP Support
Opcional packages: los que vienen por defecto
Web Server

69
Opcional packages: squid

Damos click en Next


Tiempo estimado para llegar a este punto desde cero: 15 minutos.

Deberían estar siendo descargados en este momento 1040 paquetes.


El proceso no debería tardar más de 30 minutos.
Damos click en Reboot

12.2 Configuración de red en Linux


Recordemos algunos conceptos básicos. Todo terminal está conectado a un switch con una IP única y una
puerta de enlace (el gategay). La IP se puede recibir de forma automática de un DHCP.

12.2.1 NAT y Bridge


La configuración de red NAT hace que una red privada pueda salir a una red pública. NAT (Traducción de
Direcciones de Red) fue creado para traducir las IPs privadas de la red en una IP pública para que la red
pueda enviar paquetes al exterior y traducir luego esa IP pública de nuevo a la IP privada del pc que envió el
paquete, para que pueda recibirlo una vez que llega la respuesta. Es el modo por defecto de la tarjeta de red
virtual. Este modo permite al huésped navegar por Internet, descargar ficheros y leer el correo electrónico sin
necesidad de configurar el sistema operativo huésped.

En el modo Bridge la red virtual se conecta directamente a la red física y se pueden probar los servicios
desde el equipo host físico al servidor Linux virtualizado (no es necesario generar otra máquina virtual). Al
crear un DHCP en modo Bridge en la máquina virtual se genera un conflicto y se cae la red. Un bridge
añade un nivel de inteligencia a una conexión entre redes. Conecta dos segmentos de red iguales o distintos.
Podemos ver un bridge como un clasificador de correo que mira las direcciones de los paquetes y los coloca
en la red adecuada. en este modo, se crea un tarjeta de red virtual en el anfitrión que intercepta el tráfico de
red y puede inyectar paquetes en la red, de manera que el huésped se configura como si estuviera conectado
por un cable a la tarjeta de red virtual del anfitrión.

Tanto en Bridge como en NAT se puede hacer una conexión desde un CentOS virtualizado a internet, la
diferencia es que con Bridge se conectan en una misma red nuestra máquina host física Windows y nuestro
Linux virtualizado.

12.2.2 Configurar la tarjeta de red en Linux


Con el siguiente comando podemos ver las interfaces de red y su direccionamiento:
/]# ip addr

Ahora, para editar la configuración de las interfaces de red en Linux ingresamos en el siguiente archivo:
/]# /etc/sysconfig/network-scripts/

Dentro de él hay dos archivos importantes, uno correspondiente a ethernet:


ifcfg-ens33 y el otro al loopback: ifcfg-lo

Con nano (o bien cat o e el editor vi) podemos ingresar a editar cada uno de ellos. Editemos ifcfg-ens33:
/]# nano ifc-ens33

dentro de éste archivo hay varias líneas importantes:

70
ONBOOT: "yes" indica si la interfaz de red se activa automáticamente cuando la máquina se activa.

Para activar o desactivar las interfaces por líneas de comandos podemos hacer en RedHat:
/]# ifup ifcfg-ens33
/]# ifdown ifcfg-ens33

En CentOS:
/]# ifconfig eth0 up
/]# ifconfig eth0 down

ahora bien, en el mismo archivo ifc-ens33 podemos dejar ONBOOT en "yes":

debemos bootear el sistema:


/]# reboot

El archivo de configuración de las tarjetas de red en Linux es ifcfg-ens33:

Sólo los siguientes son importantes. Los demás se pueden incluso borrar:
BOOTPROTO: static o dns- SE le da direccionamiento estático con static y se le puede agregar entonces la IP,
la máscara de red, la dirección de red y el broadcast:
HOSTNAME= Se puede cambiar y el nuevo nombre queda en forma permanente.
DEVICE= ens33
ONBOOT= yes (es el up!)
IPADDR= 172.16.0.5
NETMASK=255.255.0.0
GATEWAY= 172.16.0.0
DNS1=192.168.7.1
DNS2= 4.4.4.4
Gateway y los dns se pueden llenar con cualquier información porque no llevan a ninguna parte.

Para cambiar el nombre HOSTNAME en CentOS editamos el archivo:


/etc/sysconfig/network

Pero para cambiar el HOSTNAME sólo en la sesión, utilizamos el comando:


/]# hostname Pero rebootear no siempre es necesario, pues tenemos el comando service.

12.2.3 El comando service


Supongamos que tenemos un servicio x cualquiera. Puede ser network, sshd, httpd, o cualquier otro. Con el
comando service tenemos el control total de sus estado:

1. service network stop: detenemos el servicio.

2. service network start: levantamos el servicio.

3. service network status: vemos el estado del servicio.

4. service network restart: detiene el servicio y luego lo levanta.

5. service network reload: mientras se vuelven a cargar los archivos de configuración el servicio no se
detiene, lo que entrega continuidad operativa. Los usuarios no se dan cuenta del cambio en el servicio,
no se caen las conexiones.

71
12.2.4 El comando chkconfig
Para establecer el estatus de un servicio podemos utilizar el comando chkconfig:

1. /]# chkconfig x on: cada vez que la máquina se encienda, el servicio se iniciará automáticamente.

2. /]# chkconfig x off: lo apaga.

12.2.5 El comando kill


A veces no podemos descargar o instalar un paquete porque hay otro proceso utilizando yum. Podemos ter-
minar este proceso que nos fastidia con el comando kill. Seguido con un -9 acaba con todos los procesos en
ejecución.

/]# kill -9 pid

Siendo pid el Process ID, el identificador de un proceso, un número que identifica de manera inequívoca
a un proceso.

12.2.6 Levantar el cortafuegos


A veces nuestros servicios no responden de la forma esperada debido a que el cortafuegos de Linux lo impide.
Para levantar el cortafuegos de manera total ejecutamos el siguiente comando:

/]# iptables -F

12.3 Nociones básicas de direccionamiento IP

72
12.4 Instalación del DNS (falta el dinámico: DDNS)
12.4.1 Teoría: como funciona un dns
12.4.2 La comandería
Debemos tener dos tarjetas de red en nuestra máquina virtual: una que nos de conexión a internet y otra para
configurar nuestra red interna, la que utilizará nuestro servidor DNS.

1. Configuración de la red de nuestro servidor DNS La tarjeta de red de la máquina virtual dbe estar en
bridge! Debemos asignar una @IP estática a la tarjeta de red que dará servicio a nuestra red.
Primero veamos como tenemos configuradas nuestras tarjetas:
/]# ifconfig

Luego editamos el siguiente archivo y agregamos una IP estática cualquiera:


/]# cd /etc/sysconfic/network-scripts

/]# nano ifcfg-eth0

DEVICE= "eth0"
ONBOOT= yes
BOOTPROTO= static
IPADDR= 192.168.1.10
NETMASK=255.255.255.0

y reiniciamos el servicio de red:


/]# service network restart

2. Instalamos el servidor DNS (Bind) Debemos estar conectados a internet para descargar los paquetes
de Bind. Bind (Berkeley Internet Name Domain) es un software libre de código abierto que cumple
las funciones de DNS en un sistema. Gracias a él contamos con una plataforma estable y segura que
cumple a cabalidad con todos los estándares de DNS. La tarjeta de red de la máquina virtual debe estar
configurada en BRIDGE. Verifiquemos nuestra conexión a internet haciendo un ping a google:
/]# ping google.com

3. Actualicemos todos los paquetes de CentOS:


/]# yum update

4. Descarguemos el servidor DNS (Bind) en Linux (-y para que no pida confirmación):
/]# yum -y install bind*

5. Configuramos el servidor DNS editando el archivo de configuración principal de Bind: /etc/named.conf:


/]# nano /etc/named.conf

(a) Hay que editar la línea:


listen-on port 53 {127.0.0.1;};
Hay que poner la dirección IP de una interfaz física. Reemplazamos la línea anterior por:
listen-on port 53 {192.168.1.10;};
(b) Debe permitirse que host externos realicen peticiones, que funcione a nivel de red y no sólo inter-
namente. Para ellos hay que cambiar:
allow-query { localhost ;};
por:
allow-query { any ;};

73
(c) Debemos configurar las zonas directa e inversa:

Editamos la zona directa modificando las siguientes líneas:


zone "." IN {
type hint;
file "named.ca";
};
por:
zone "murillo.com" IN {
type master;
file "murillo.lab.com";
};

Y agregamos la zona inversa. Agreguemos las siguientes líneas:

zone "1.168.192.in-addr.arpa"{
type master;
file "murillo.inv.com";
};

Borramos las siguientes líneas:


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Guardamos.

6. Los archivos de configuración de las zonas directa e inversa deben estar en el directorio: /var/named,
que está definido en el archivo /etc/named.com en la línea:
directory "/var/named";

/]# cd /var/named/
Creamos el archivo de la zona directa:
named]# touch murillo.lab.com
Creamos el archivo de la zona inversa:
named]# touch murillo.inv.com

Empezamos a editar la zona directa:


named]# nano murillo.lab.com

el punto final en murillo.com. es fundamental!


$ORIGIN murillo.com.
$TTL 3D
@ SOA dns.murillo.com. root.murillo.com. (12 4h 1h 1w 1h)
@ IN NS dns.murillo.com.
dns IN A 192.168.1.10
www IN A 192.168.1.11
moodle IN A 192.168.1.12

Guardamos y salimos:

Empezamos a editar la zona inversa:

74
named]# nano murillo.inv.com

el punto final en 1.168.192.in-addr.arpa. es fundamental!


$ORIGIN 1.168.192.in-addr.arpa.
$TTL 3D
@ SOA dns.murillo.inv. root.murillo.com. (12 4h 1h 1w 1h)
@ IN NS dns.murillo.inv.
10 IN PTR dns.murillo.com.
11 IN PTR www.murillo.com.
12 IN PTR moodle.murillo.com.

Guardamos y salimos.

7. Editamos el archivo donde esta configurado el servidor que utilizaremos como DNS.

named]# nano /etc/resolv.conf

lo borramos todo y escribimos:


nameserver 192.168.1.10

Guardamos y salimos.

8. Ahora podemos inicializar el archivo named por primera vez. Esto puede tardar varios minutos mientras
named genera el archivo rndc.key, que solo se produce en la primera ejecución.
/]# service named restart

9. Una vez que named se haya iniciado correctamente, nos aseguramos de que esté habilitado como un
servicio de inicio, ejecutando lo siguiente:
/]# chkconfig named on

10. Su servidor de nombres debería estar ahora en funcionamiento. Puede verificar que BIND funciona cor-
rectamente ejecutando el comando nslookup:
/]# nslookup

> www.murillo.com
debe desplegarse:
Server: ::1
Address: ::1#53

Name: www.murillo.com
Address:192.168.1.11

¿Cómo enlazar un cliente windows?

75
12.5 SSH
12.5.1 Teoría
SSH (Secure SHell), es un protocolo de administración remota que permite el intercambio de datos sobre un
canal seguro entre dos computadoras. SSH usa técnicas de cifrado que hacen que la información que viaja por
el medio de comunicación vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y
contraseña de la conexión ni lo que se escribe durante toda la sesión. SSH usa criptografía de clave pública
para autenticar el equipo remoto y permitir al mismo autenticar al usuario si es necesario. SSH viene por
defecto habilitado en Linux, porque cuando se instala el S.O. se configura SSH en forma automática.

SSH utiliza el puerto 22 y que permite a los usuarios controlar y modificar sus servidores a través de In-
ternet. El servicio se creó como un reemplazo seguro para el Telnet sin cifrar y utiliza técnicas criptográficas
para garantizar que todas las comunicaciones hacia y desde el servidor remoto sucedan de manera encriptada.
Proporciona un mecanismo para autenticar un usuario remoto, transferir entradas desde el cliente al host y
retransmitir la salida de vuelta al cliente. Puede ejecutar comandos shell de la misma manera que lo haría si
estuviera operando físicamente el equipo remoto. Cualquier usuario de Linux o macOS puede hacer SSH en
su servidor remoto directamente desde la ventana del terminal.

Los usuarios de Windows pueden aprovechar clientes SSH como Putty.

12.5.2 La comandería
Instalemos un servidor con GUI CentOS 7 en una máquina virtual cuya tarjeta de red esté configurada en
modo NAT. De este modo tenemos conexión automática a internet.

No necesitamos instalar SSH, pues viene cargado en forma automática en Linux. Lo que haremos será probar
su funcionamiento por medio de una máquina cliente Windows utilizando Putty.

1. Verifiquemos que el servicio ssh esté corriendo:


/]# service sshd
Nos indica que está active

2. Debemos tener la máquina virtual con CentOS y la física con Windows en la misma red, por lo que
debemos configurar la tarjeta de red de VirtualBox a Bridge (adaptador puente). Importante: debemos
seleccionar junto con "Adaptador puente", la tarjeta de red de nuestra máquina física, en nuestro
caso, Realtek PCIe GBE Family controller.

3. Reiniciemos los servicios de red:


/]# service network restart
puede que falle la primera vez. Reinténtelo!

4. Asignémosle una dirección IP estática a nuestro CentOS configurando la tarjeta enp0s3. Puede identi-
ficar cuál es la tarjeta que debe configurar haciendo inmediatamente después del punto 1 un
/]# ifconfig
y luego del punto 3 nuevamente
/]# ifconfig
para ver cual IP cambió. Esa debe ser la que configurará ahora.

5. Nos vamos al directorio contenedor de las tarjetas de red:


/]# cd etc/sysconfig/network-scripts

6. Editamos el archivo de nuestra tarjeta de red:


/]# nano ifcfg-enp0s3

76
7. Cambiamos el parámetro de BOOTPROTO a static:
BOOTPROTO="static"
Y agregamos las siguiente dos líneas:
IPADDR=172.16.0.5
NETMASK=255.255.0.0
Guardamos y salimos.

8. Reiniciemos los servicios de red:


/]# service network restart
Tenemos listo nuestro CentOS. Ahora configuremos la tarjeta de red de nuestro Windows para que las
dos máquinas estén tanto dentro del mismo segmento como dentro de una misma red.

9. En Windows debemos configurar la tarjeta llamada "Ethernet" la debe estar físicamente conectada a
un cable que provea de internet. entregándole los siguientes parámetros:

Dirección IP: 172.16.0.6


Máscara de subred: 255.255.0.0

La puerta de enlace la dejamos vacía y seleccionamos "Usar las siguientes direcciones de servidor DNS",
aunque dejamos sus espacios en blanco.

10. No es necesario hacer nada con los cortafueegos ni de CentOS ni de Windows. En CentOS el puerto 22
viene habilitado por defecto y el cortafuegos activo en Windows no causa problemas.

11. En Putty ingresamos la dirección IP de nuestro servidor CentOS, nos aseguramos que estén seleccionadas
la opciones Port: 22 y Connection type: SSH. Puede aparecer un mensaje de advertencia la primera vez
que intentemos establecer la conexión. Podemos ignorarla dándole un Si, y ya podemos ingresar con
un usuario y contraseña a nuestra máquina CentOS.

77
12.6 Instalación del HTTPD
12.6.1 Teoría
Lo que se pide es montar el servidor web Apache (acrónimo de "a patchy server"). El servidor Apache HTTP ,
también llamado Apache, es un servidor web HTTP de código abierto para la creación de páginas y servicios
web. Es un servidor multiplataforma, gratuito, muy robusto y que destaca por su seguridad y rendimiento. El
servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache Software Foundation.

12.6.2 La comandería
La tarjeta de nuestra máquina virtual debe estar configurada en NAT para que nos permita conección a internet.
No olvide ejecutar después de modificar cualquier configuración relacionada a las tarjetas de red el comando:
/]# network service restart

1. Desde la consola instalamos el servidor con el comando:


/]# yum -y install httpd

2. Verifiquemos que el servicio httpd esté corriendo:


/]# service httpd status
Vemos que está inactivo.

3. Lo levantamos:
/]# service httpd start

4. Corroboremos que el servicio funcione bien. Recodemos que tenemos una IP de loopback que por defecto
es 127.0.0.1. Utilicemos ésta para las pruebas. Abramos el navegador Firefox y el la barra de direcciones
ingresemos 127.0.0.1. Debe desplegarse una página que informa el funcionamiento correcto de Apache
HTTP llamada: "Testing 123..."

5. Podemos deseñar una página web completa y alojarla en la dirección 127.0.0.1. Recordemos que la
página de inicio debemos llamarla index.html.

Para ellos vamos a la ruta pública de httpd donde se guardan los archivos que lee Apache para pre-
sentar en un navegador:

/]# cd /var/www/html

html]# echo "Bienvenido al servidor del MOV" >> index.html


y le damos permisos: html]# chmod 644 index.html

O bien podemos simplemente crear un archivo index.html y editalo con nano:


html]# nano index.html

Carguemos de nuevo localhost en el navegador y veremos que despliega el mensaje.

6. Ahora debemos poder ver la página desde nuestro navegador en la máquina física Windows. Para ello
cambiamos la configuración de nuestra máquina virtual pasando nuestra tarjeta de red a modo Bridge
y seleccionando la tarjeta de red física que tenemos cableada.

7. Reiniciamos nuestro servicio de red:


/]# network service restart

78
8. Veamos la IP que tenemos ahora asignada a la tarjeta enp0s3. En nuestro caso es la 192.168.1.186/24 Si
ingresamos ésta IP en la barra de direcciones del navegador Firefox dentro de nuestro CentOS podemos
ver la página que hemos creado. Debe ocurrir lo mismo pero desde nuestra máquina Windows.

9. Le asignamos a nuestra tarjeta de red Ethernet cableada en Windows una dirección que esté dentro del
mismo segmento de red que nuestro CentOS, digamos 192.168.1.187/24

10. Debemos abrir el puerto que está bloqueado en el firewall de CentOS para http. En CentOS vamos a:
Aplicaciones
Varios
Cortafuegos. Damos click
Seleccionamos http y le damos un ticket.
Cerramos.

11. En el navegador Google Chrome de Windows ingresamos 192.168.1.186 y debemos visualizar la página
que hemos creado.

12. Hagamos algo interesante. Vayamos a una página cualquiera desde Firefox en nuestro CentOS, digamos
www.emol.com. Demos click derecho sobre el cuadro de tres líneas arriba a la derecha. Demos click a
"Guardar página" para descargar los archivos (que serán dos) en /var/www.html, renombrado el archivo
.html como index y borrando (o sobreescribiendo) el archivo index.html que ya teníamos.

13. Hagamos algún cambio en el archivo .html con un editor de textos (por ejemplo gedit) y guardemos.

14. Movamos la carpeta y el html que hemos descargado al directorio /var/www/html y reemplacemos el
html que ya tenemos creado.

15. Ahora, ingresando la IP 192.168.1.186 desde un navegador en CentOS virtualizado o el Windows an-
fritión, debemos poder visualizar la página modificada.

79
16. Iniciamos el servicio httpd:
/]# service httpd start Una vez iniciado el servidor Apache, vamos a configurarlo para que inicie desde
modo boot. Así cada vez arranque Linux, se va a iniciar el servidor. Verifiquemos el estado del servidor
con el siguiente comando:
/]# chkconfig – – list httpd

nos salen todos off.


/]# chkconfig httpd on

Verifiquemos otra vez:


/]# chkconfig – – list httpd

Ahora el 2, 3, 4 y 5 están activados. Estamos OK.


17. Revisemos que el servicio se esté ejecutando y hagamos una prueba de funcionamiento:
/]# service httpd status

httpd (pid 3103) is running...

Lo detenemos:
/]# service httpd stop

Abrimos el navegador y vamos a la dirección del localhost: Firefox no se puede conectar a localhost
porque Apache no está iniciado.

Iniciémoslo:
/]# service httpd start

y recargemos la página. Debe aparecer la página de prueba de Apache que nos indica que el servi-
cio está activo.
18. Rutas de los documentos que exhibe y el archivo de configuración de Apache
(a) Rutas de los documentos exhibidos
\var\www\html

Efectivamente aquí encontramos nuestro archivo index.html con el texto plano: Bienvenido al
servidor del MOV
(b) Ruta del archivo de configuración de Apache
\etc\httpd\conf\httpd.conf

Donde encontramos:

El correo del administrador


ServerAdmin root@localhost

El nombre del servidor y el puerto que está escuchando


#ServerName www.example.com:80

El comando para editar el puerto que ha de escuchar Apache para empezar a comunicar los docu-
mentos que se encuentran en HTML.
Listen:80

80
12.7 HTTPS con un certificado digital
12.7.1 Teoría
¿Qué es SSL?
Un certificado SSL sirve para brindar seguridad al visitante de su página web, una manera de decirles a sus
clientes que el sitio es auténtico, real y confiable para ingresar datos personales. Las siglas SSL responden
a los términos en inglés (Secure Socket Layer), el cual es un protocolo de seguridad que hace que sus datos
viajen de manera íntegra y segura, es decir, la transmisión de los datos entre un servidor y usuario web, y en
retroalimentación, es totalmente cifrada o encriptada. El que los datos viajen cifrados, nos referimos a que
se emplean algoritmos matemáticos y un sistema de claves que sólo son identificados entre la persona que
navega y el servidor. Al tener un certificado SSL confiable, nuestros datos están encriptados, en ese momento
podemos asegurar que nadie puede leer su contenido. Todo esto nos lleva a entender que la tecnología que
brinda un certificado SSL es la transmisión segura de información a través de internet, y así confirmar que los
datos están libres de personas no deseadas. Para poder utilizar un certificado SSL, en su página web, es de
vital importancia que el servidor de Internet que usted contrató, soporte SSL.

12.7.2 La comandería
/]# yum install -y mod_ssl openssl

El siguiente comando genera una clave:


/]# openssl genrsa -out ca.key 1024

El siguiente comando genera el inicio de sesión del certificado de la solicitud de la clave:


/]# openssl req -new -key ca.key -out ca.csr

LLenamos los campos con la siguiente información:


CL
Santiago
Santiago
MOV
analista
miguel
[email protected]
123456
IZQ

Verificamos nuestra firma con el siguiente comando:


/]# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Copiamos nuestras clave:


/]# cp ca.crt /etc/pki/tls/certs
/]# cp ca.key /etc/pki/tls/private/ca.key
/]# cp ca.csr /etc/pki/tls/private/ca.csr

Echemos un vistazo al archivo de configuración del SSL:


/]# less /etc/httpd/conf.d/ssl.conf
Salgamos
Editemos el siguiente archivo:
/]# nano +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf

81
Comentemos la siguiente línea:
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
E inmediatamente debajo de ella escribamos:
SSLCertificateFile /etc/pki/tls/certs/ca.crt

Comentemos la siguiente línea:


#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
E inmediatamente debajo de ella escribamos:
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

Guardemos y salgamos.

Reiniciemos Apache:
/]# service httpd restart

Verifiquemos que SSH esté instalado:


/]# ssh root@localhost

Debe aparecer la siguiente información:

The authenticity of host ’localhost (::1)’ can’t be established.


RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Are you sure you want to continue connecting (yes/no)?

SSL se puede verificar de alguna otra forma?

82
12.8 Instalación desatendida kickstart Redhat Boot desde la red sin intervención.
12.8.1 Teoría
¿Qué es kickstart?
El método de instalación Kickstart de Red Hat es usado principalmente (pero no de forma exclusiva) por el
sistema operativo Red Hat Enterprise Linux para realizar la instalación desatendida y la configuración del
sistema operativo de forma automática.

12.8.2 La comandería
1. Lo primero que haremos será copiar todos los archivos de la ISO CentOS 6.9 en una carpeta llamada
centos en nuestro escritorio.

2. La llevamos al directorio: \var\www\html

3. Vamos al directorio donde están los repositorios de CentOS:


/]# cd etc
etc]# cd yum.repos.d

4. Los copiamos a /tmp:


yum.repos.d]# cp * /tmp

5. en yum.repos.d creamos y editamos un repositorio propio llamado: centos.repo:


yum.repos.d]# nano centos.repo

En el cual escribimos:

[cent os6]
name=CentOS 6 Repositorio
baseurl=file:///var/www/html/centos
gpgcheck=0
enabled=1

Guardamos y salimos.

6. Actualizamos los repositorios:


yum.repos.d]# yum repolist

7. Desde root instalamos los siguientes servicios:


/]# yum install httpd dhcp tftp-server syslinux system-config-kickstart -y

8. Creamos los siguientes directorios:


/]# mkdir -p /tftpboot/images
/]# mkdir -p /tftpboot/pxelinux.cfg

9. Copiamos los siguientes directorios:


/]# cp /var/www/html/centos/images/pxeboot/vmlinuz /tftpboot/images
/]# cp /var/www/html/centos/images/pxeboot/initrd.img /tftpboot/images

10. Modificamos el fichero: tftp:


/]# cd /etc
etc]# cd xinetd.d
xinetd.d]# nano tftp

83
Modificamos las siguientes dos líneas (debe quedar como sigue):
server args = -s /tftpboot
disable = no

guardamos y salimos.

11. Volvamos a root, reiniciemos y encendamos los siguientes servicios::


/]# service xinetd restart
/]# chkconfig tftp on

12. Copiemos los siguientes archivos:


/]# cp /usr/share/syslinux/menu.c32 /tftpboot/
/]# cp /usr/share/syslinux/pxelinux.0 /tftpboot/
/]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

Damos yes a: overwrite?

13. Editemos el archivo dhcpd.conf:


/]# nano /etc/dhcp/dhcpd.conf

borremos todo lo que contiene y escribamos:

authoritative;
log-facility local7;
###Servidor DHCP###
subnet 192.168.8.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option domain-name "example.com";
range dynamic-bootp 192.168.8.11 192.168.8.254;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.8.1;
filename "pxelinux.0";
}

Guardemos y salgamos.

14. Configuremos nuestra tarjeta de red:

/]# cd /etc/sysconfig/network-scripts
/]# nano ifcfg-eth0
BOOTPROTO=static
IPADDR=192.168.8.1
NETMASK=255.255.255.0
y reiniciemos los servicios:

/]# service network restart


/]# service dhcpd restart
/]# chkconfig dhcpd on

15. Creamos el GRUB de arranque de nuestro sistema

84
/]# cd tftpboot/
tftpboot]# cd pxelinux.cfg

Creamos un fichero llamado default


pxelinux.cfg]# nano default

y dentro de él escribamos:

default menu.c32
prompt 0
timeout 100
MENU TITLE INSTALACIONES DESATENDIDAS
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #00000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
LABEL CentOS 6.9 x64 EDITION
MENU LABEL CentOS 6.9 x64 EDITION
KERNEL images/vmlinuz
append initrd=images/initrd.img Linux ks=http://192.168.8.1/centos/ks.cfg
Guardamos y cerramos.

16. Reiniciamos los servicios: pxelinux.cfg]# service httpd restart


pxelinux.cfg]# chkconfig on

17. Ahora creamos el fichero para que tenga una instalación desatendida: Vamos a la raíz y ejecutemos el
siguiente comando:
/]# system-config-kickstart

Se abre la ventana de configuración gráfica de Kickstart.


Creemos una configuración (es fundamental que dentro del método de instalación seleccionemos "Re-
alizar nueva instalación", elijamos "Configuración de red DHCP" y que marquemos HTTP con los parámet-
ros: 192.168.8.1 y /centos. Démosle un formateo básico y seleccionemos paquetes mínimos) y guardé-
mosla en documentos como: ks.cfg

Guardemos el archivo ks.cfg en el escritorio.


Salgamos del editor gráfico.

18. Copiamos el ks.cfg que tenemos en el escritorio dentro de la carpeta CentOS que tenemos en el directorio
/var/www/html

19. Debemos configurar el Firewall de Linux


/]# yum install system-config-firewall

Si es necesario instalémoslo (no olvide dejar la tarjeta de red en static)


/]# system-config-kickstart

En servicios confiables damos un ticket a www (HTTP)

85
Vamos a otros puertos y en añadimos dando un ticket a Definido por el usuario:
Puerto: bootps
protocolo: udp
Damos a aplicar y yes.

Vamos a otros puertos y en añadimos dando un ticket a Definido por el usuario:


Puerto: tftp
protocolo: udp
Damos a aplicar y aceptar.

20. Ahora debemos desactivar SELinux


/]# setenforce 0

21. Le entregamos permisos al archivo ks.cfg

Primero ubiquémosnos en el directorio adecuado:


/]# cd /var/www/html/centos
centos]# chmod 644 ks.cfg
Ahora, desde otra máquina vitual en VMWare debemos hacer la instalación desatendida.

22. Abrimos otra máquina virtual en VMWare sin SO.


Configuramos su tarjeta de red como:
En network connection
Damos click a Custom: Specific virtual network
Seleccionamos: VMnnet4

Y en nuestro servidor:
Configuramos su tarjeta de red como:
En network connection
Damos click a Custom: Specific virtual network
Seleccionamos: VMnnet4

23. La máquina cliente debe ser encendida desde la BIOS. Para ellos seleccionamos:
Power
Power Om to BIOS
Aparece la Bios
En Boot, subimos : En primer lugar Hard Drive
En segundo lugar Network boot from..
le damos a F10 y listo!!!

86
12.9 DHCPD
12.9.1 Teoría
blabla

12.9.2 La comandería
blabla

87
12.10 SAMBA (bidireccional)
12.10.1 Teoría
blabla

12.10.2 La comandería
1. Anotamos la IP de nuestra máquina física que va a ser el cliente de nuestro servidor: 192.168.1.157/24

2. La máquina virtual debemos configurarla en modo adaptador puente y nos fijamos que el adaptador sea la
cableada física de nuestra máquina cliente, en nuestro caso: Realtek PCIe GBE Family Controller.

3 Con ifconfig podemos ver la IP de nuestra tarjeta enp0s3 de CentOS 7 y la anotamos: 192.168.1.188

4 Surge generalmente un problema en la máquina virtual porque asigna la misma IP en forma masiva.
Debemos cambiar la MAC.

Vamos a:
Máquina
Configuración
Red
Avanzadas
Y en Dirección MAC damos a refrescar

5 Instalamos Samba:
/]# yum -y install samba samba-common samba-client

6 Los archivos de configuración están en:


/]# cd /etc/samba

7 Primero vamos a modificar el archivo lmhosts


samba/]# nano lmhosts

Debe aparecer sólo la IP de loopback.


Vamos a añadir primero la IP de la máquina CentOS seguido de SERVERCASTRO, luego la IP de nuestra
máquina física con el nombre de nuestra máquina física, que en Windows 10 está en:

Panel de control
Sistema y seguridad
Sistema

Debe quedar así:

127.0.0.1 localhost
192.168.1.188 SERVERCASTRO
192.168.1.157 DESKTOP-JNED12L

Guardamos y salimos.

8 El archivo que mantiene la configuración del servicio es el smb.conf, pero como una ayuda a la configu-

88
racion está el archivo smb.conf.example, que lo copiamos:

samba/]# cp smb.conf.example smb.conf


Damos sí a sobreescribir.

9 Ahora, editamos el archivo smb.conf


samba/]# nano smb.conf

9.1 Editamos la línea que contiene la palabra workgroup y le ponemos GRUPOCASTRO

9.2 La línea netbios name es muy importante, porque es el nombre con el que las máquinas Microsoft se
identifican dentro de una red. Nosotros ponemos el nombre del servidor que asignamos como windows:
SERVERCASTRO.
No se olvide de borrar el punto y coma que antecede a la línea.

9.3 Grabamos y salimos.

9.4 Ahora creamos una cuenta del usuario windows en el equipo.

samba/]# useradd -s /sbin/nologin Christian

Agregamos la contraseña del sistema Samba, no la habitual para linux.


samba/]# smbpasswd -a Christian

Ingresamos como contraseña: 123456

9.5 Ahora abriremos el acceso al servicio para que lo esté externamente con setsebool:
samba/]# setsebool -P samba_enable_home_dirs on

9.6 Abrimos los puertos:


samba/]# iptables -F

9.7 El servicio Samba en realidad consiste de dos. Uno es el que comparte los archivos y el otro es el que
propaga los nombres de las máquinas a través de la red de Microsoft para que se hagan visibles. Entonces hay
que iniciar dos servicios:

El que transmite los nombres (que están en el archivo lmhosts) a la red Microsoft:
samba/]# service nmb start

El servicio del servidor propiamente tal:


samba/]# service smb start

9.8 Los configuramos para que se inicien automáticamente:


samba/]# chkconfig nmb on
samba/]# chkconfig smb on

9.9 Probemos la conectividad desde nuestro Windows cliente haciendo a un ping a la IP del servidor:
SERVERCASTRO (esto último indicaría que el servicio nmb está funcionando correctamente).

Observe que debe resultar con la IP y el nombre del servidor:

89
>ping 192.168.1.188
>ping SERVERCASTRO

9.10 Desde la máquina windows cliente vamos a:

Este equipo
Red
Damos click a nuestro PC
Damos click a la barra del navegador, donde debe aparecer el nombre de nuestro equipo. Escribimos la direc-
ción de nuestro server inmediatamente después de las dos barras.
Se nos debe pedir las credenciales de red.
Ingresamos: Christian y la contraseña: 123456 y entramos a la carpeta home dentro del servidor Samba,
llamada Christian.

9.11 Podemos guardar cualquier cosa en esta carpeta y podemos verificar que queda en /home/Christian
de nuestro servidor con:

samba/]# cd /home/Christian

Christian/]# ls

90
12.11 Motor de correo vía la web (SQmail)
12.11.1 Teoría
blabla

12.11.2 La comandería
blabla

91
12.12 Servidor de virtualización VMWare (con instancias virtuales funcionando)
12.12.1 Teoría
blabla

12.12.2 La comandería
blabla

92
12.13 TOMCAT (Con apps en JAVA funcionando)
12.13.1 Teoría
blabla

12.13.2 La comandería
blabla

93
12.14 MOTOR BD ORACLE (+consulta)
12.14.1 Teoría
blabla

12.14.2 La comandería
blabla

94
12.15 Firewall (programado con reglas)
12.15.1 Teoría
blabla

12.15.2 La comandería
blabla

95
12.16 SQUID (proxy)
12.16.1 Teoría
blabla

12.16.2 La comandería
blabla

96
12.17 Vsftpd (Usuario Enjaulado.)
12.17.1 Teoría
blabla

12.17.2 La comandería
blabla

97
12.18 Telnet
12.18.1 Teoría
blabla

12.18.2 La comandería
blabla

98
12.19 Antivirus
12.19.1 Teoría
blabla

12.19.2 La comandería
blabla

99
12.20 WINE (Ambiente de trabajo emulado para correr apps con tecnología MS)
12.20.1 Teoría
blabla

12.20.2 La comandería
blabla

100
12.21 VNC server
12.21.1 Teoría
blabla

12.21.2 La comandería
blabla

101
12.22 Configuración SElinux (privación ejecución módulos kernel)
12.22.1 Teoría
SELinux o "Security-Enhanced Linux" es un mecanismo que proporciona políticas de control de acceso obli-
gatorio al sistema operativo, estas políticas definen como las aplicaciones y los usuarios pueden acceder a los
archivos, directorios, etc. De esta manera se incorpora una capa de protección adicional, asignando un "Con-
texto de seguridad" a cada archivo, directorio y proceso; cuando un proceso accede a un archivos esta capa
de seguridad verificará que el contexto de seguridad del mismo sea compatible con el contexto de seguridad
del archivo al que desea acceder.

12.22.2 La comandería
blabla

102
References
[1] Petersen, R. (2009). Linux: Manual de referencia, México DF, México: McGraw-Hill.

[2] Apuntes de clases de Taller de Sistemas Operativos I: Linux, con Rubén Coello, Otoño del 2017, Inacap
sede Santiago centro.

[3] http://www.ereborlog.eu/10-ejemplos-del-comando-useradd-en-linux/

[4] http://linuxsuperuser07.blogspot.cl/2011/09/rhel-6-file-system.html

[5] https://travesuras.wordpress.com/category/comandos/

[6] https://computernewage.com/2015/06/14/el-arbol-de-directorios-de-linux-al-detalle-que-contiene-
cada-carpeta

[7] http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m1/administracin_de_usuarios_y_grupos.html

[8] http://fraterneo.blogspot.cl/2012/01/administracion-de-usuarios-y-grupos.html

Variables de entorno:

[9] https://manuais.iessanclemente.net/index.php/Variables_de_contorno_en_Linux

[10] https://travesuras.wordpress.com/2011/12/19/20111219-1/

Controles de formato para fecha y hora.

[11] https://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/

Claves y usuarios en linux:

[12] http://rm-rf.es/comando-chage-tiempo-de-vida-de-claves-y-usuarios-en-gnulinux/

[13] //dep.fie.umich.mx/ stinoco/archivos/RutasAbsolutasYRelativas.pdf

[14] //www.computerhope.com/unix/utar.htm

[15] https://blog.desdelinux.net/cron-crontab-explicados/

[16] https://www.alvarolara.com/2014/05/12/diferencias-entre-bridge-nat-red-interna-y-adaptador-en-
virtualbox/

[17] https://www.linuxtotal.com.mx/?cont=info_admon_006
DNS

[18] https://www.youtube.com/watch?v=Z7N2Na-7T6Y
HTTPD

[19] https://www.youtube.com/watch?v=3dXhLPiAUqg
HTTPS

[20] https://www.youtube.com/watch?v=8Qz5MILdxR4
Kickstart

[21] https://www.youtube.com/watch?v=PI2VQ51UTLM

103
Appendix A Listado de las variables de entorno en linux
CDPATH: Una lista de directorios separados por el signo ’:’ usada como ruta de acceso por el comando cd.
HOME: El directorio principal del usuario.
MAIL: Email del usuario.
PATH: Una lista de directorios, separados por comas, en los cuales el intérprete de comandos busca por co-
mandos.
BASH: La ruta de acceso completa usada para ejecutar la instancia actual de bash.
BASH_VERSION: El numero de versión de bash usada.
GROUPS: Una matriz que contiene la lista de los grupos a que pertenece el usuario actual.
HISTCMD: El índice del comando actual en la historia de comandos.
HISTCONTROL: Define si un comando es añadido a la historia de comandos.
HISTFILE: El nombre del fichero en el cual se graba la historia de comandos de comandos. El valor por defecto
es /.bash_history.
HISTFILESIZE: El número máximo de líneas contenidas en la historia de comandos, por defecto 500.
HISTIGNORE: Una lista separada por comas de los patrones usados para definir que comandos deben de
grabarse en la historia de comandos.
HISTSIZE: El máximo numero de comandos a recordar en la historia de comandos, por defecto 500.
HOSTFILE: Contiene el nombre de un fichero en el mismo formato que /etc/hosts que debería de usarse
cuando el intérprete de comandos necesita completar un nombre de máquina (hostname).
HOSTNAME: El nombre de máquina actual.
OLDPWD: Directorio previo definido por el comando ’cd’.
PWD: Directorio actual definido por el comando ’cd’.
RANDOM: Cuando se llama esta variable un número entero entre 0 a 32767 es generado.
SECONDS: Número de segundos desde que Bash fue arrancado.
UID: El valor numérico real del usuario actual.

104
Appendix B Listado de los formatos para los comandos de fecha y hora
%%: a literal
%a: locale’s abbreviated weekday name (e.g., Sun)
%A: locale’s full weekday name (e.g., Sunday)
%b: locale’s abbreviated month name (e.g., Jan)
%B: locale’s full month name (e.g., January)
%c: locale’s date and time (e.g., Thu Mar 3 23:05:25 2005)
%C: century; like %Y, except omit last two digits (e.g., 21)
%d: day of month (e.g, 01)
%D: date; same as %m/%d/%y
%e: day of month, space padded; same as %_d
%F: full date; same as %Y-%m-%d
%g: last two digits of year of ISO week number (see %G)
%G: year of ISO week number (see %V); normally useful only with %V
%h: same as %b
%H: hour (00..23)
%I: hour (01..12)
%j: day of year (001..366)
%k: hour ( 0..23)
%l: hour ( 1..12)
%m: month (01..12)
%M: minute (00..59)
%n: a newline
%N: nanoseconds (000000000..999999999)
%p: locale’s equivalent of either AM or PM; blank if not known
%P: like %p, but lower case
%r: locale’s 12-hour clock time (e.g., 11:11:04 PM)
%R: 24-hour hour and minute; same as %H:%M
%s: seconds since 1970-01-01 00:00:00 UTC
%S: second (00..60)
%t: a tab
%T: time; same as %H:%M:%S
%u: day of week (1..7); 1 is Monday
%U: week number of year, with Sunday as first day of week (00..53)
%V: ISO week number, with Monday as first day of week (01..53)
%w: day of week (0..6); 0 is Sunday
%W: week number of year, with Monday as first day of week (00..53)
%x: locale’s date representation (e.g., 12/31/99)
%X: locale’s time representation (e.g., 23:13:48)
%y: last two digits of year (00..99)
%Y: year
%z: +hhmm numeric timezone (e.g., -0400)
%:z: +hh:mm numeric timezone (e.g., -04:00)
%::z: +hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::z: numeric time zone with : to necessary precision (e.g., -04, +05:30)
%Z: alphabetic time zone abbreviation (e.g., EDT)

105

También podría gustarte