Está en la página 1de 78

Índice de contenido

UNIDAD 1 Conceptos e Historia de Linux...............................................................................................5
¿Qué es el Software Libre?....................................................................................................................6
Orígenes de Linux..................................................................................................................................8
¿Que son las distribuciones?..................................................................................................................8
El proyecto CentOS...............................................................................................................................9
Requisitos de sistema...........................................................................................................................10
UNIDAD 2 El sistema de ficheros...........................................................................................................11
Conceptos del sistema de ficheros de Linux........................................................................................12
El directorio de trabajo........................................................................................................................12
Nombres de ficheros y directorios.......................................................................................................12
Rutas absolutas y relativas...................................................................................................................13
Cambiar el directorio de trabajo..........................................................................................................13
Ver el contenido de un directorio........................................................................................................13
Copiar, mover, crear y eliminar ficheros y directorios........................................................................13
Uso de exploradores de archivos.........................................................................................................14
Determinar el tipo de contenido de un fichero....................................................................................15
El sistema de ficheros de Gnu/Linux en profundidad..........................................................................15
Particiones y sistemas de ficheros (formato de discos).......................................................................15
Inodos y directorios.............................................................................................................................15
cp, mv, rm, e inodos.............................................................................................................................16
Enlaces duros y simbólicos..................................................................................................................17
Los siete tipos fundamentales de ficheros...........................................................................................17
Comprobar el espacio libre en disco....................................................................................................18
Montar CDs, DVDs, dispositivos USB...............................................................................................18
Empaquetar y desempaquetar ficheros................................................................................................18
Comprimir y descomprimir ficheros...................................................................................................19
Buscar y procesar ficheros...................................................................................................................19
locate....................................................................................................................................................19
find.......................................................................................................................................................20
UNIDAD 3 Uso Básico de Linux.............................................................................................................22
Ingreso en CentOS Linux....................................................................................................................23
Inicio de consola y acceso a shell desde entorno gráfico.....................................................................23
Cambiar la Clave.................................................................................................................................23
root el usuario administrador...............................................................................................................23
Administrar privilegios........................................................................................................................23
Edición de ficheros de texto................................................................................................................38
UNIDAD 4 Los editores vi y vim............................................................................................................39
Introducción a VIM.............................................................................................................................40

Linux Básico LP001 Ver.1 1-1


Uso básico de vim................................................................................................................................40
Abrir, modificar y guardar ficheros.....................................................................................................40
El modo comando................................................................................................................................41
Deshacer cambios................................................................................................................................42
El modo visual.....................................................................................................................................42
Dividir pantalla....................................................................................................................................42
Configuración de vi y vim...................................................................................................................43
UNIDAD 5 ­ Comandos y uso de ayuda..................................................................................................44
Ejecutar comandos...............................................................................................................................45
Utilizar la ayuda...................................................................................................................................45
El comando whatis y la opción ­­help.................................................................................................45
Los comandos man e info....................................................................................................................46
La documentación................................................................................................................................47
Entrada y salida de comandos estándar y pipes...................................................................................47
Entrada y salida estándar.....................................................................................................................47
Redirigir la entrada y salida estándar...................................................................................................47
Combinando salidas y errores..............................................................................................................48
Scripting: para bucles..........................................................................................................................49
Scripting: para bucles continuos..........................................................................................................50
Comandos para procesar texto.............................................................................................................50
Comandos para extraer, analizar y manipular texto............................................................................50
Caracteres especiales...........................................................................................................................51
Comandos básicos...............................................................................................................................52
UNIDAD 6 Shell BASH..........................................................................................................................55
Introducción, historia y características de bash...................................................................................56
Comodines...........................................................................................................................................56
El historial de comandos......................................................................................................................57
Expansión de comandos......................................................................................................................57
Terminales...........................................................................................................................................58
Configuración del shell BASH............................................................................................................58
Variables en bash.................................................................................................................................58
Variables locales, de entorno, de configuración e información, Alias................................................58
Expansión de variables y evitar la expansión, cómo funciona la expansión en bash..........................59
Scripts de inicio y parada de bash........................................................................................................60
Tipos de shells, variables en shell scripts............................................................................................60
UNIDAD 7 Configuración y Administración básica del sistema............................................................61
Ajustar Fecha y hora............................................................................................................................62
Configuración de Impresoras...............................................................................................................62
Configuración de la red.......................................................................................................................63
¿Qué es un proceso, demonio y tarea?.................................................................................................64
Ver el estado de un proceso.................................................................................................................64

Linux Básico LP001 Ver.1 1-2


Enviar señales a un proceso.................................................................................................................65
Terminar un proceso............................................................................................................................66
Modificar la prioridad de un proceso...................................................................................................66
Herramientas interactivas de gestión de procesos...............................................................................66
Ejecutar procesos en segundo plano....................................................................................................66
Suspender un proceso..........................................................................................................................66
Ver la lista de procesos en segundo plano o suspendidos....................................................................67
Comandos compuestos........................................................................................................................67
Planificar la ejecución de un proceso en fecha y hora concreta o ejecución periódica.......................69
El formato del fichero crontab.............................................................................................................69
Instalación del sistema.........................................................................................................................69
Administración de paquetes.................................................................................................................70
Asegurando el sistema.........................................................................................................................71
UNIDAD 8 Administración de usuarios, grupos y permisos...................................................................72
Usuarios y grupos................................................................................................................................74
Tipos de permisos................................................................................................................................74
Ver los permisos de ficheros y directorios...........................................................................................75
Cambiar permisos usando representaciones simbólicas y numéricas..................................................75
Cambiar permisos usando el explorador de archivos..........................................................................76
Conceptos avanzados sobre usuarios, grupos y permisos....................................................................77
Identificadores numéricos de usuarios y grupos..................................................................................77
Los ficheros /etc/passwd, /etc/shadow, y /etc/group............................................................................77
Usuarios y grupos del sistema.............................................................................................................77
Cambios en el usuario..........................................................................................................................77
Comandos para obtener información sobre usuarios y grupos............................................................77
Permisos por defecto............................................................................................................................77
Permisos especiales.............................................................................................................................77
UNIDAD 9 Aplicaciones  de acceso a la red...........................................................................................79
Comunicaciones cifradas con ssh y scp...............................................................................................81
rsync: Eficiente sincronización de archivos.........................................................................................82
Autentificación basada en clave OpenSSH.........................................................................................82
Herramientas de diagnóstico de problemas de la red..........................................................................83
Conceptos fundamentales para la administración de Linux................................................................83

Linux Básico LP001 Ver.1 1-3


UNIDAD 1 Conceptos e Historia de Linux

Linux Básico LP001 Ver.1 1-4


¿Qué es el Software Libre?
La Definición de Software Libre
El software libre es una cuestión de libertad, no de precio. Para entender el concepto, se debería
pensar en libre como en libre expresión, no como en barra libre (cerveza).
El software libre es una cuestión de la libertad de los usuarios de ejecutar, copiar, distribuir, estudiar,
cambiar y mejorar el software. Más precisamente, significa que los usuarios de programas tienen las
cuatro libertades esenciales.
• La libertad de ejecutar el programa, para cualquier propósito (libertad 0).
• La libertad de estudiar cómo trabaja el programa, y cambiarlo para que haga lo que
usted quiera (libertad 1). El acceso al código fuente es una condición necesaria para
ello.
• La libertad de redistribuir copias para que pueda ayudar al prójimo (libertad 2).
• La libertad de distribuir copias de sus versiones modificadas a terceros (la 3ª libertad).
Si lo hace, puede dar a toda la comunidad una oportunidad de beneficiarse de sus
cambios. El acceso al código fuente es una condición necesaria para ello.
Un programa es software libre si los usuarios tienen todas esas libertades. Entonces, debería ser
libre de redistribuir copias, tanto con o sin modificaciones, ya sea gratis o cobrando una tarifa por
distribución, a cualquiera en cualquier parte. El ser libre de hacer estas cosas significa, entre otras
cosas, que no tiene que pedir o pagar el permiso.
También debería tener la libertad de hacer modificaciones y usarlas en privado, en su propio trabajo u
obra, sin siquiera mencionar que existen. Si publica sus cambios, no debería estar obligado a
notificarlo a alguien en particular, o de alguna forma en particular.
La libertad de ejecutar el programa significa la libertad para cualquier tipo de persona u organización
de usarlo en cualquier tipo de sistema de computación, para cualquier tipo de trabajo y propósito, sin
estar obligado a comunicarlo a su programador, o alguna otra entidad específica. En esta libertad, el
propósito de los usuarios es el que importa, no el propósito de los programadores. Como
usuario es libre de ejecutar un programa para sus propósitos; y si lo distribuye a otra persona,
también es libre para ejecutarlo para sus propósitos, pero usted no tiene derecho a imponer sus
propios propósitos. La libertad de redistribuir copias debe incluir las formas binarias o ejecutables del
programa, así como el código fuente; tanto para versiones modificadas como para las que no lo
están. (Distribuir programas en forma de ejecutables es necesario para que los sistemas operativos
libres se puedan instalar fácilmente). Resulta aceptable si no existe un modo de producir una formato
binario o ejecutable para un programa específico, dado que algunos lenguajes no incorporan esa
característica, pero debe tener la libertad de redistribuir dichos formatos si encontrara o programara
una forma de hacerlo.
Para que la 1ª y 3ª libertad, para realizar cambios y publicar versiones mejoradas, tengan sentido;
debe tener acceso al código fuente del programa. Por consiguiente, el acceso al código fuente es una
condición necesaria para el software libre.

La 1ª libertad incluye la libertad de usar su versión modificada en lugar de la original. Si el programa


se entrega con un producto diseñado para ejecutar versiones modificadas de terceros, pero rechaza

Linux Básico LP001 Ver.1 1-5


ejecutar las suyas, una práctica conocida como «tivoization» o «arranque seguro» (mediante listas
negras); la 1ª libertad se convierte más en una ficción teórica que en una libertad práctica. Esto no es
suficiente. En otras palabras, estos binarios no son software libre, incluso si se compilaron desde un
código fuente que es libre.
Una manera importante de modificar un programa es fusionando sub-rutinas y módulos libres
disponibles. Si la licencia del programa dice que no puede fusionar un módulo existente con una
debida licencia, así como si le requiere ser el titular de los derechos de autor de lo que agregue,
entonces la licencia es demasiado restrictiva para calificarla como libre.
La 3ª libertad incluye la libertad de usar sus versiones modificadas liberadas como software libre. Una
licencia también puede permitir otras formas de re-licenciarlas, en otras palabras, no tiene que ser
una licencia de copyleft. No obstante, una licencia que requiera que las versiones modificadas no
sean libres, no se puede considerar como una licencia libre.
Para que estas libertades puedan ser reales, deben ser irrevocables siempre que usted no cometa
ninguna equivocación; si el programador del software tiene el poder de revocar la licencia, o de
cambiar retroactivamente sus términos, sin que usted se haya equivocado para justificarlo, el
software no es libre.
Sin embargo, ciertos tipos de reglas sobre la manera de distribuir software libre son aceptables,
cuando no entran en conflicto con las libertades principales. Por ejemplo, el copyleft (definido muy
resumidamente) es la regla en base a la cual, cuando redistribuye el programa, no puede agregar
restricciones para denegar a las demás personas las libertades principales. Esta regla no entra en
conflicto con las libertades principales; más bien las protege.
Software libre no significa que no sea comercial. Un programa libre debe estar disponible para el uso
comercial, la programación comercial y la distribución comercial. La programación comercial de
software libre ya no es inusual; tal software libre comercial es muy importante. Puede haber pagado
dinero para obtener copias de software libre, o puede haber obtenido copias sin costo. Pero sin tener
en cuenta cómo obtuvo sus copias, siempre tiene la libertad de copiar y modificar el software, incluso
de vender copias.
Si una modificación constituye una mejora es un asunto subjetivo. Si sus modificaciones se limitan,
en esencia, a los cambios que otra persona considera una mejora, eso no se trata de libertad.
Sin embargo, las reglas sobre cómo empaquetar una versión modificada son aceptables si no limitan
sustancialmente su libertad de publicar versiones modificadas, o su libertad de hacer y usar versiones
modificadas en privado. Las reglas estilo si usted hace disponible su versión de tal modo, debe
hacerla disponible en tal otro modo pueden ser aceptables también, bajo la misma condición. (Note
que dicha regla todavía le deja la elección sobre si publicar su versión.). Las reglas que requieran la
publicación del código fuente a los usuarios para versiones que haya puesto en uso público también
son aceptables. También es aceptable para la licencia requerir que, si distribuyó una versión
modificada y un programador anterior le pide una copia, le deba enviar una, o que identifique como
propias sus modificaciones.
En algunos casos las regulaciones de control de exportación y las sanciones comerciales pueden
limitar sus libertades de distribuir copias de programas intencionalmente. Los desarrolladores de
software no tienen el poder de eliminar o pasar por alto estas restricciones, pero lo que pueden y
deben hacer es rechazar imponerlas como condiciones para el uso del programa. De este modo, las
restricciones no afectarán a las actividades ni a las personas fuera de las jurisdicciones de dichos
gobiernos. Por ende, las licencias de software libre no deben requerir la obediencia a ninguna
regulación de exportaciones como condición de cualquiera de las libertades esenciales.

Linux Básico LP001 Ver.1 1-6


Cuando se habla de software libre, es mejor evitar usar términos como regalar o gratuito, porque
dichos términos implican que el asunto pasa por el precio, no la libertad.
Más allá del software
Los manuales de software deben ser libres, por las mismas razones que el software debe ser libre, y
porque en efecto los manuales son parte del software.
Los mismos argumentos también tienen sentido para otros tipos de trabajos de uso práctico; es decir,
trabajos que incorporen conocimiento útil, tal como trabajos educativos y de referencia. Wikipedia es
el ejemplo más conocido.
Cualquier tipo de trabajo puede ser libre, y la definición de software libre se ha extendido a una
definición de trabajos culturales libres aplicable a cualquier tipo de trabajo.
¿Código abierto?
Otro grupo ha comenzado a usar el término código abierto (del inglés open source) que significa algo
parecido (pero no idéntico) a software libre. Preferimos el término software libre porque, una vez que
ha escuchado que se refiere a la libertad en lugar del precio, le hace pensar en la libertad. La palabra
abierto nunca se refiere a la libertad.

Orígenes de Linux

1984: El proyecto GNU y la Free Software Foundation, Crean una versión open source de utilidades
de UNIX.
Crean la General Public License (GPL), Licencia de software

1991: Linus Torvalds


Crea núcleo de tipo Unix de código abierto, publicado bajo la licencia GPL
Porta algunas utilidades GNU, solicita asistencia en línea.
Kernel de Linux + utilidades GNU = completo como sistema operativo UNIX de código abierto
Empaquetado para grupos específicos, como distribuciones

¿Que son las distribuciones?


Una distribución GNU/Linux (coloquialmente llamadas distros) es una distribución de software basada
en el núcleo Linux que incluye determinados paquetes de software para satisfacer las necesidades de
un grupo específico de usuarios, dando así origen a ediciones domésticas, empresariales y para
servidores. Por lo general están compuestas, total o mayoritariamente, de software libre, aunque a
menudo incorporan aplicaciones o controladores propietarios.
Además del núcleo Linux, las distribuciones incluyen habitualmente las bibliotecas y herramientas del
proyecto GNU y el sistema de ventanas X Window System. Dependiendo del tipo de usuarios a los
que la distribución esté dirigida se incluye también otro tipo de software como procesadores de texto,

Linux Básico LP001 Ver.1 1-7


hoja de cálculo, reproductores multimedia, herramientas administrativas, etcétera.
Existen distribuciones que están soportadas comercialmente, como Fedora (Red Hat), openSUSE
(Novell), Ubuntu (Canonical Ltd.), Mandriva, y distribuciones mantenidas por la comunidad como
Debian y Gentoo. Aunque hay otras distribuciones que no están relacionadas con alguna empresa o
comunidad, como es el caso de Slackware, wendyx, etc.
Entre las distribuciones más antiguas se incluían:
• Dos discos denominados H J Lu's "Boot-root" con el núcleo y un mínimo de herramientas
para utilizar.
• MCC Interim Linux, que se podía descargar en un servidor público FTP de la Universidad de
Mánchester en febrero de 1992.
• TAMU, creado por entusiastas de la Universidad de Texas A&M al mismo tiempo que SLS
• SLS (Softlanding Linux System).
• Yggdrasil Linux creó el primer CD-ROM de una distribución GNU/Linux.
SLS no estuvo bien mantenida; así pues, Patrick Volkerding lanzó una distribución basada en SLS a
la que llamó Slackware; lanzada el 16 de julio de 1993. Esta es la distribución más antigua que está
en desarrollo activo.
El proyecto CentOS
CentOS (Community ENTerprise Operating System) es un clon a nivel binario de la distribución Linux
Red Hat Enterprise Linux RHEL, compilado por voluntarios a partir del código fuente liberado por Red
Hat.
Red Hat Enterprise Linux se compone de software libre y código abierto, pero se publica en formato
binario (CD-ROM o DVD-ROM) solamente a suscriptores pagados. Como es requerido, Red Hat
libera todo el código fuente del producto de forma pública bajo los términos de la Licencia pública
general de GNU y otras licencias. Los desarrolladores de CentOS usan ese código fuente para crear
un producto final que es muy similar al Red Hat Enterprise Linux y está libremente disponible para ser
bajado y usado por el público, pero no es mantenido ni asistido por Red Hat. Existen otras
distribuciones también derivadas de los fuentes de Red Hat.
CentOS usa yum para bajar e instalar las actualizaciones, herramienta también utilizada por Fedora
Cada versión de CentOS es mantenida durante 7 años (por medio de actualizaciones de seguridad).
Las versiones nuevas son liberadas cada 2 años y actualizadas regularmente (cada 6 meses) para el
soporte de hardware nuevo.

Linux Básico LP001 Ver.1 1-8


Requisitos de sistema
Hardware recomendado para operar:
• Memoria RAM: 64 MB (mínimo).
• Espacio en Disco Duro: 1024 MB (mínimo) - 2 GB (recomendado).

Arquitectura:
CentOS soporta casi las mismas arquitecturas que Red Hat Enterprise Linux:
• Intel x86-compatible (32 bit) (Intel Pentium I/II/III/IV/Celeron/Xeon, AMD K6/II/III, AMD Duron,
Athlon/XP/MP).
• Advanced Micro Devices AMD64(Athlon 64, etc) e Intel EM64T (64 bit).

Las versiones 3.x y 4.x (pero no la 5.0 y posteriores) además soportaron:


• Intel Itanium (64 bit).
• PowerPC/32 (Apple Macintosh PowerMac corriendo sobre procesadores G3 o G4 PowerPC).
• IBM Mainframe (eServer zSeries y S/390).
También se tuvo soporte para dos arquitecturas no soportadas por Red Hat Enterprise Linux.
• Alpha procesador (DEC Alpha) (sólo en CentOS 4)
• SPARC (beta en CentOS 4)

Linux Básico LP001 Ver.1 1-9


UNIDAD 2 El sistema de ficheros

Linux Básico LP001 Ver.1 1-10


Conceptos del sistema de ficheros de Linux
La jerarquía de archivos Linux
Archivo y directorio son organizados en una estructura de árbol invertido con "una sola raíz"
El sistema de archivos comienza en el directorio raíz, representado por un único carácter / (barra
oblicua invertida).
Nombres son sensible a mayúsculas y minúsculas, rutas de directorios son delimitadas por /
Algunos Directorios Importantes
Directorios de inicio: /root,/home/username
Ejecutables de usuario: /bin, /usr/bin, /usr/local/bin
Ejecutables de sistema: /sbin, /usr/sbin, /usr/local/sbin
Otros Puntos de montaje: /media, /mnt
Configuración: /etc
Archivos Temporales: /tmp
Núcleos y gestor de arranque: /boot
Datos de servicios: /var, /srv
Información del Sistema: /proc, /sys
Librerías compartidas: /lib, /usr/lib, /usr/local/lib

El directorio de trabajo
Cada entorno de trabajo y proceso del sistema tiene un directorio de trabajo actual (cwd, current
working directory)
pwd Despliega la ruta absoluta a el directorio de trabajo actual

Nombres de ficheros y directorios


Los nombres pueden ser hasta 255 caracteres, todos los caracteres son validos, con excepción de la
barra oblicua invertida, puede ser aconsejable utilizar ciertos caracteres especiales en nombres de
archivo o directorio, Algunos de los caracteres deben estar protegidos con comillas cuando se hace
referencia a ellos, los nombre son sensibles a mayúsculas y minúsculas.

Ejemplo: MAIL, Mail, mail, y mAiL

Linux Básico LP001 Ver.1 1-11


Rutas absolutas y relativas
Rutas Absolutas
Comienzan con una barra oblicua invertida (/), es un completo "mapa de ruta" para la ubicación del
archivo, puede ser utilizado en cualquier momento que desee especificar un nombre de archivo.
Rutas relativas
No comienzan con una barra oblicua invertida, se especifica una ubicación en relación al directorio de
trabajo actual, puede ser utilizado como un camino más corto para especificar un nombre de archivo

Cambiar el directorio de trabajo


cd cambiar de directorio
Para una ruta absoluta
cd /home/constanza/trabajo
O una ruta relativa:
cd proyectos/documentos
Para un directorio un nivel hacia la raíz (/):
cd ..
Al directorio home:
cd y cd ~
Al directorio de trabajo anterior:
cd -

Ver el contenido de un directorio


Muestra el contenido del directorio actual o un directorio especifico
Utilizar:
ls [opciones] [archivos_o_directorios]
Ejemplo:
ls -a (incluir los archivos ocultos)
ls -l (muestra detalles de las características de los archivos)
ls -R (recursivamente a través de los directorios)
ls -ld (información sobre directorios y enlaces simbólicos)

Copiar, mover, crear y eliminar ficheros y directorios


cp – copiar archivos y directorios
Utilizar:
cp [opciones] archivo destino

Linux Básico LP001 Ver.1 1-12


Más de un archivo puede ser copiado de una vez si el destino es un directorio:
cp [opciones] archivo1 archivo2 directorio
Si el destino es un directorio, la copia se coloca allí, si el destino es un archivo, la copia sobrescribe el
destino, si el destino no existe, se renombra la copia.

Moviendo y renombrando archivos y directorios


mv - mueve y/o renombra archivos y directorios
Utilizar:
mv [opciones] archivo destino
Más de un archivo puede ser movido a la vez si el destino es un directorio:
mv [opciones] archivo1 archivo2 destino
Destino funciona como cp

Creando y removiendo archivos


touch – crea archivos vacíos o actualiza marcas de tiempo del archivo ó directorio
rm - remueve archivos
Utilizar:
rm [opciones] <archivo>...
Ejemplos:
rm -i archivo (interactivo)
rm -r directorio (recursivo)
rm -f archivo (fuerza)

Creando y removiendo directorios


mkdir crea directorios
rmdir remueve directorios vacíos
rm -r quita recursivamente árboles de directorios

Uso de exploradores de archivos


Gnome explorador gráfico de sistema de archivos
Puede ejecutar en modo espacial o navegador, se accede a través de:

Los iconos del escritorio o Inicio: El directorio de inicio, equipo: sistema de archivos raíz, los recursos
de red y de medios extraíbles

Linux Básico LP001 Ver.1 1-13


Aplicaciones-> Herramientas del Sistema-> Explorador de archivos

Moviendo y copiando en Nautilus


Arrastrar y soltar
Arrastrar: Mover el mismo sistema de archivos, copia en el sistema de archivos diferentes
Ctrl + Arrastrar: Siempre copia
Arrastre + Alt: Pregunta si desea copiar, mover o crear un enlace simbólico (alias)
Menú contextual
Haga clic para cambiar el nombre, cortar, copiar o pega

Determinar el tipo de contenido de un fichero


Archivos pueden contener muchos archivos de datos, se verifica el tipo de archivo antes de abrirlo
para determinar comando adecuado o aplicación para que utilice
file [opciones] <nombre_archivo>...
Las unidades de disco se divide en particiones, las particiones están formateadas con sistemas de
archivos que permite a los usuarios almacenar datos.

Sistema de ficheros por defecto: ext3, el sistema de ficheros Linux extendido, otros sistemas de
ficheros comunes:
ext2 y msdos (típicamente usado para floppy)
iso9660 (típicamente usado para CD)
GFS y GFS2 (típicamente para SANs)

El sistema de ficheros de Gnu/Linux en profundidad


Particiones y sistemas de ficheros (formato de discos)
Las unidades de disco se divide en particiones, las particiones están formateadas con sistemas de
archivos que permite a los usuarios almacenar datos, el sistema de ficheros por defecto: ext3 y ext4,
el tercer sistema extendido de ficheros de Gnu/Linux.
Otros sistemas de archivos comunes son: ext2 y msdos (típicamente utilizados en los disquetes),
iso9660 (usado para Cds), GFS y GFS2 (normalmente para redes SAN)

Inodos y directorios
Inodos, Una tabla de inodos contiene una lista de todos los archivos en un sistema de ficheros ext2
o ext3, un inodo (nodo índice) es una entrada en la tabla, que contiene información sobre un archivo
(los metadatos), entre ellos:
Tipo de archivo, permisos, UID, GID
El conteo de enlaces (recuento de los nombres de ruta que apunta a este archivo)
El tamaño del archivo y varias marcas de tiempo
Punteros a los bloques de datos del archivo en el disco
Otros datos sobre el archivo

Linux Básico LP001 Ver.1 1-14


Directorios,la referencia del sistema para obtener un archivo es el número de inodo, la forma
humana para hacer referencia a un archivo es el nombre de archivo

Nombre
Asociado con un inodo de directorio padre

Inodo de metadatos
Propiedades y un puntero a los bloques en el disco

Contenidos
Para directorios: nombre/Lista de inodos (muestra)
Para los archivos: datos arbitrarios

cp, mv, rm, e inodos


cp e inodos
El comando cp :
1. Asigna un número de inodo libre, coloca una nueva entrada en la tabla de inodos
2. Crea una entrada en el directorio, asocia el nombre con el número de inodo
3. Copia de datos en el nuevo archivo
Un directorio es una correspondencia entre el nombre humano para el archivo y el número de inodo
del sistema

mv e inodos
Si el destino del comando mv es el mismo sistema de archivos como la fuente, el comando mv:
1. Crea una nueva entrada de directorio con el nombre de archivo nuevo
2. Elimina la entrada del directorio viejo con el nombre de archivo viejo
No tiene ningún impacto en la tabla de inodos (a excepción de un sello de tiempo) o la ubicación de
los datos en el disco: se mueve sin datos!
Si el destino es un sistema de archivos diferentes, los actos mv como copiar y eliminar

Linux Básico LP001 Ver.1 1-15


rm e inodos
El comando rm:
1. Disminuye el conteo de enlaces, liberando así el número de inodo para ser reutilizado
2. Lugares bloques de datos en la lista libre
3. Elimina la entrada de directorio
Los datos no se quitan, pero se sobrescribirán cuando los bloques de datos son utilizados por otro
archivo

Enlaces duros y simbólicos


Un enlace duro agrega una ruta adicional para hacer referencia a un único archivo, solo un archivo
físico en el sistema de ficheros, cada una de las referencias de directorio es el mismo número de
inodo, se incrementa el conteo de enlace, el comando rm reduce el conteo de enlace, el archivo
existe siempre y cuando al menos un enlace se mantiene, cuando el conteo de enlaces es cero, se
elimina el archivo, no se puede extender sobre unidades o particiones
Sintaxis:
ln nombre_archivo [nombre_enlace]
Un enlace simbólico apunta a otro archivo
ls -l muestra el nombre del enlace y el archivo de referencia
lrwxrwxrwx 1 joe joe 11 Sep 25 18:02 pf -> /etc/passwd
Tipo de archivo: l para enlace simbólico
El contenido de un enlace simbólico es el nombre del archivo que es de referencia
Sintaxis:
ln -s nombre_archivo nombre_enlace

Los siete tipos fundamentales de ficheros

Símbolo ls -l Tipo de archivo


- Archivo regular
d directorio
l enlace simbólico
b archivo especial de bloque
c archivo especial de carácter
p archivo especial de pipe
s archivo especial de socket

Linux Básico LP001 Ver.1 1-16


Comprobar el espacio libre en disco

df - informa espacio de disco utilizado


Informa total de kilobytes, kilobytes usados, kilobytes libre por sistema de archivo
-h y -H despliega las unidades en tamaños más fácil de leer
du – Informa uso de espacio en disco, informa Kilobytes utilizados por el directorio, incluye los
subtotales de cada subdirectorio
-s informa solo resumen de solo el directorio
También toma las opciones -h y -H

Montar CDs, DVDs, dispositivos USB


Montar significa poder acceder a un sistema de archivos externo, como si fuera parte del árbol
de directorios principal. Antes de acceder, los medios deben ser montados, antes de retirar, los medio
deben ser desmontados, por defecto, los usuario no-root, pueden montar ciertos dispositivos (CD,
DVD, disquete, USB, etc), los puntos de montaje generalmente están bajo /media

Montando CDs y DVDs


Automáticamente son montados en Gnome/KDE, de lo contrario deben ser montados manualmente
CD/DVD (Lector) | CD/DVD (grabador)
mount /media/cdrom | mount /media/cdrecorder
El comando eject desmonta y expulsa el CD/DVD, eject -t retrae la bandeja del CD/DVD

Montando medio USB


Es detectado por el núcleo como dispositivo SCSI
/dev/sdaX o /dev/sdbX o similar
Se montará automáticamente en Gnome/KDE, un icono sera creado en el escritorio, sera montado
en /media/ID_Dispositivo, el ID_Dispositivo, es creado en el dispositivo por el proveedor

Empaquetar y desempaquetar ficheros


Almacena archivos de muchos lugares en un archivo de destino, haciendo más fácil hacer copias de
seguridad, almacenar y transferir
tar – comando estándar de Linux para almacenaje, los archivos son normalmente
comprimidos, un algoritmo es aplicado para comprimir el archivo, la descompresión restaura el
archivo original, tar de forma nativa soporta la compresión con gzip y gunzip, o bzip2 y bunzip2

Linux Básico LP001 Ver.1 1-17


Comprimir y descomprimir ficheros
Los argumentos de acción (al menos uno es requerido):
-c crear un archivo
-t lista contenido de un archivo
-x extraer archivos de un archivo
Normalmente se requiere:
-f nombrearchivo nombre del archivo comprimido
Argumentos opcionales:
-z utiliza compresión gzip
-j utiliza compresión bzip2
-v muestra detalles

Creando archivos comprimidos: Otras herramientas


zip y unzip, soportan archivos compatibles con pkzip
Ejemplo:
zip etc.zip /etc
unzip etc.zip
file-roller Gráfico, herramienta de compresión multi-formato

Buscar y procesar ficheros


locate Consulta una base de datos pre-construida de las rutas de acceso de los archivos en el
sistema, la base de datos debe ser actualizada por el administrador, la ruta de acceso completa es
buscada, no sólo el nombre de archivo, puede solo buscar en directorios, donde el usuario tiene
permisos de lectura y ejecución.
Ejemplos de locate
locate foo
Busca archivos con "foo" en el nombre o la ruta
locate -r '\.foo$'
Expresión regular que busca archivos que finalicen en ".foo"
Opciones mas usadas
-i realiza una búsqueda sensible a mayúsculas y minúsculas
-n X lista solo las primeras X coincidencias

Linux Básico LP001 Ver.1 1-18


find
find [directorio...] [criterio...]
Busca en el árbol de directorio en tiempo real, mas lento pero más preciso que locate, CWD
es usado si no hay directorio de inicio indicado, todo los archivos son verificados si no se da un
criterio, se puede ejecutar comandos en los archivos encontrados, se puede solo buscar en
directorios, donde el usuario tiene permisos de lectura y ejecución.

Ejemplos Basicos find


find -name snow.png
Busca por archivos de nombre snow.png
find -iname snow.png
Búsqueda sensible a mayúsculas y minúsculas de archivos de nombre snow.png,
Snow.png, SNOW.PNG, etc
find -user joe -group joe
Búsqueda de archivos cuyo propietario es el usuario joe y el grupo es joe

find y operadores Logicos


El criterio es AND por defecto.
Puede ser OR o negado con -o y -not
Paréntesis puede utilizarse para definir orden lógico, pero debe ser escapado con barra oblicua (\).
find -user jose -not -group jose
find -user jose -o -user juana
find -not \( -user jose -o -user juana \)
find y permisos
Puede coincidir con la propiedad por nombre o ID
find / -user jose -o -uid 500
Puede coincidir los permisos octal o simbólico
find -perm 755 coincidencia si los permisos son exactamente 755
find -perm +222 coincidencia si cualquiera puede escribir
find -perm -222 coincidencia si todos pueden escribir
find -perm -002 coincidencia si otros pueden escribir

Linux Básico LP001 Ver.1 1-19


find y criterios numéricos
Muchos criterios find toman valores numéricos
find -size 1024k
Archivos con un tamaño de exactamente 1 megabyte
find -size +1024k
Archivos con un tamaño sobre 1 megabyte
find -size -1024k
Archivos con un tamaño menor que 1 megabyte
find y fechas de acceso a los archivos
find puede buscar coincidencia por marca de tiempo del inodo
-atime cuando fue leido por ultima ves el archivo
-mtime cuando fue modificado por ultima ves los datos del archivo
-ctime cuando fue modifica por ultima ves los datos o metadatos del archivo
Los valores son en días
find -ctime -10
Archivos modificados hace menos de 10 días atrás
Ejecutando comandos con find
Comandos pueden ser ejecutados cuando se encuentra archivos, comandos debe ir precedido con
-exec o -ok
. -ok instrucciones antes de actuar en cada archivo
Comando debe terminar con Espacio\;
Puede utilizarse {} como un nombre de archivo marcador de posición
find -size +102400k -ok gzip {} \;

Ejemplos de ejecución con find


. find -name "*.conf" -exec cp {} {}.orig \;
Copia de seguridad de archivos de configuración, agregando una extensión .orig
. find /tmp -ctime +3 -user jose -ok rm {} \;
Pregunta por los archivos en /tmp de Jose que tienen sobre 3 días de antigüedad
. find ~ -perm +o+w -exec chmod o-w {} \;
Fija otros con permisos de escritura a los archivos en tu directorio de trabajo

Linux Básico LP001 Ver.1 1-20


UNIDAD 3 Uso Básico de Linux

Linux Básico LP001 Ver.1 1-21


Ingreso en CentOS Linux
Registro a un sistema Linux
Existen dos tipos de pantallas de registro: Consolas virtuales (basadas en texto) y registros gráficos
(llamados administrador de sesión)
El registro es usando nombre de usuario y clave
Cada usuario tiene un directorio de inicio para el almacenamiento de archivos personales

Inicio de consola y acceso a shell desde entorno gráfico


Alternar entre consolas virtuales y el entorno gráfico
En un sistema Linux típico se ejecutará seis consolas virtuales y una consola gráfica, en los sistemas
de servidor a menudo se tienen sólo las consolas virtuales.
Computadores de escritorio y estaciones de trabajo suelen tener ambos.
Podemos cambiar entre las consolas virtuales tecleando: Ctrl-Alt-F [1-6] y acceder a la consola
gráfica pulsando Ctrl-Alt-F7
En algunos sistemas, el servidor X se inicia automáticamente al arrancar el sistema, por el contrario,
si los sistemas inician con consolas virtuales, los usuarios deben iniciar el servidor X de forma
manual.
El servidor X debe ser pre-configurados por el administrador del sistema, registrarse en una consola
virtual y ejecutar startx.

Cambiar la Clave
Cambie la contraseña la primera vez que se conecte, cambie con regularidad a partir de entonces,
seleccione una contraseña que sea difícil de adivinar.
Para cambiar la contraseña usando GNOME, vaya a Sistema-> Preferencias-> Acerca de mí y
luego haga clic en Contraseña.
Para cambiar la contraseña en una terminal usar el comando: passwd

root el usuario administrador


Usuario root: es una cuenta administrativa especial, que algunos llaman super usuario (pero no hace
milagros), tiene un control casi total sobre el sistema... y una capacidad casi ilimitada para ¡hacer
daño!
No ingresar como root a menos que sea necesario, hágalo como un usuario normal (sin privilegios,
potencial para hacer daño es más limitada).

Administrar privilegios
Cambio de Identidades

su - permite acceder a un nuevo shell como otro usuario en la sesión activa. Es decir, nos
permite asumir la identidad de otro usuario (si conocemos su password):
Para terminar la sesión bastaría con presionar Ctrl + D (fin de fichero) o tecleando exit.

Linux Básico LP001 Ver.1 1-22


Importante
En caso de no indicar ningún usuario con el comando su se supone que se está intentando asumir la
identidad de root.
La diferencia entre utilizar su - usuario y su usuario , es que cuando se utiliza su - se hace login de
la misma forma que si se registrará en la consola, cargando todos los ficheros de configuración de su
perfil.
Es posible ejecutar comandos como si fuéramos otro usuario utilizando su:
[usuario@maquina]$ su usuario -c ''rm -Rf /home/directorio''

sudo ejecuta un comando como root, permite implementar un control de acceso altamente
granulado de que usuarios ejecutan que comandos. Si un usuario normal desea ejecutar un comando
de root (o de cualquier otro usuario), sudo verifica en su lista de permisos y si está permitido la
ejecución de ese comando para ese usuario, entonces sudo se encarga de ejecutarlo. Es decir, sudo
es un programa que basado en una lista de control (/etc/sudoers) permite (o no) la ejecución al
usuario que lo invocó sobre un determinado programa propiedad de otro usuario, generalmente del
administrador del sistema 'root'.
Para fines prácticos se puede dividir en tres partes:
* sudo, el comando con permisos de SUID, que los usuarios usan para ejecutar otros comandos a
los que se les permite usar.
* visudo, el comando que permite al administrador modificar /etc/sudoers.
* /etc/sudoers, el archivo de permisos que le indica a sudo que usuarios ejecutan cuáles
comandos.
sudo lo ejecuta un usuario normal, al que se supone tiene permisos para ejecutar cierto comando.
Entonces, sudo requiere que los usuarios se autentifiquen a si mismos a través de su contraseña
para permitirles la ejecución del comando. Veamos un ejemplo:
$ sudo /sbin/ifconfig
Password: ....
Como se podrá observar se usa el comando sudo seguido del comando (con toda su ruta si es que
este no esta en el PATH del usuario) al que se tiene permiso. sudo pregunta por la contraseña del
usuario que ejecuta el comando y listo.
Por defecto, después de hacer lo anterior tendrás 5 minutos para volver a usar el mismo comando u
otros a los que tuvieras derecho, sin necesidad de ingresar la contraseña de nuevo. Si se quiere
extender el tiempo por otros 5 minutos usa la opción sudo -v (validate). Por el contrario, si ya
terminaste lo que tenías que hacer, puedes usar sudo -k (kill) para terminar con el tiempo de gracia
de validación.
Ahora bien, ¿Qué comandos son los que puedo utilizar?, pues la opción -l es la indicada para eso:
$ sudo -l
User usuario may run the following commands on this host:
(root) /sbin/ifconfig
(root) /sbin/lspci

Linux Básico LP001 Ver.1 1-23


En el caso anterior se ejecutó un comando de root, pero no tiene que ser así, también es posible
ejecutar comandos de otros usuarios del sistema indicando la opción -u:
$ sudo -u otto /comando/de/otto

Una de las opciones más interesantes es la que permite editar archivos de texto de root (claro, con el
permiso otorgado en 'sudoers' como se verá más adelante), y esto se logra con la opción -e, esta
opción esta ligada a otro comando de sudo llamado sudoedit que invoca al editor por defecto del
usuario, que generalmente es 'vi'.
$ sudo -e /etc/inittab
(Permitirá modificar el archivo indicado como si se fuera root)
Cuando se configura sudo se tienen múltiples opciones que se pueden establecer, estás se consultan
a través de la opción -L

$> sudo -L
Available options in a sudoers ``Defaults'' line:
syslog: Syslog facility if syslog is being used for logging
syslog_goodpri: Syslog priority to use when user authenticates successfully
syslog_badpri: Syslog priority to use when user authenticates unsuccessfully
long_otp_prompt: Put OTP prompt on its own line
ignore_dot: Ignore '.' in $PATH
mail_always: Always send mail when sudo is run
mail_badpass: Send mail if user authentication fails
mail_no_user: Send mail if the user is not in sudoers
mail_no_host: Send mail if the user is not in sudoers for this host
mail_no_perms: Send mail if the user is not allowed to run a command
tty_tickets: Use a separate timestamp for each user/tty combo
lecture: Lecture user the first time they run sudo
lecture_file: File containing the sudo lecture
authenticate: Require users to authenticate by default
root_sudo: Root may run sudo
...
(varias opciones más)

Linux Básico LP001 Ver.1 1-24


Bastante útil, ya que nos muestra las opciones y una pequeña descripción, estás opciones se
establecen en el archivo de configuración 'sudoers'.
Una de las opciones más importantes de consulta es -V, que permite listar las opciones (defaults)
establecidas por defecto para sudo todos los usuarios, comandos, equipos, etc. Más adelante
veremos como establecer opciones específicas para ciertos usuarios, comandos o equipos. NOTA:
tienes que estar como 'root' para usar esta opción.
# sudo -V
Sudo version 1.6.9p5

Sudoers path: /etc/sudoers


Authentication methods: 'pam'
Syslog facility if syslog is being used for logging: local2
Syslog priority to use when user authenticates successfully: notice
Syslog priority to use when user authenticates unsuccessfully: alert
Send mail if the user is not in sudoers
Lecture user the first time they run sudo
Require users to authenticate by default
Root may run sudo
Log the hostname in the (non-syslog) log file
Allow some information gathering to give useful error messages
Visudo will honor the EDITOR environment variable
Set the LOGNAME and USER environment variables
Reset the environment to a default set of variables
Length at which to wrap log file lines (0 for no wrap): 80
Authentication timestamp timeout: 5 minutes
Password prompt timeout: 5 minutes
Number of tries to enter a password: 3
Umask to use or 0777 to use user's: 022
Path to log file: /var/log/sudo.log
...
(varias opciones más listadas)
Truncamos el listado anterior en la línea "Path to log file: /var/log/sudo.log", donde se indica cual es
el archivo 'log' o de registro por defecto de sudo, en este archivo se registra absolutamente todo lo
que se haga con sudo, que usuarios ejecutaron que, intentos de uso, etc.

Linux Básico LP001 Ver.1 1-25


visudo
Permite la edición del archivo de configuración de sudo sudoers. Invoca al editor que se tenga por
defecto que generalmente es 'vi'. visudo cuando es usado, bloquea el archivo /etc/sudoers de tal
manera que nadie más lo puede utilizar, esto por razones obvias de seguridad que evitarán que dos o
más usuarios administradores modifiquen accidentalmente los cambios que el otro realizó.
Otra característica importante de visudo es que al cerrar el archivo, verifica que el archivo este bien
configurado, es decir, detectará si hay errores de sintaxis principalmente en sus múltiples opciones o
reglas de acceso que se tengan. Por esta razón no debe editarse /etc/sudoers directamente
(perfectamente posible ya que es un archivo de texto como cualquier otro) sino siempre usar visudo.
Si al cerrar visudo detecta un error nos mostrará la línea donde se encuentra, y la pregunta "What
now?":
>>> sudoers file: syntax error, line 15 <<<
What now?

Se tienen tres opciones para esta pregunta:


* e - edita de nuevo el archivo, colocando el cursor en la línea del error (si el editor soporta esta
función.)
* x - salir sin guardar los cambios.
* Q - salir y guarda los cambios.
Por defecto el archivo de configuración es /etc/sudoers pero se pueden editar otros archivos que no
sean ese y que se aplique la sintaxis de sudo, y esto se logra con la opción -f (visudo -f
/otro/archivo).
Si tan solo se desea comprobar que /etc/sudoers esta bien configurado se usa la opción -c, toma
por el archivo de configuración por defecto o si no se indica algún otro.
#> visudo -c
/etc/sudoers file parsed OK

La opción -s activa el modo 'estricto' del uso de visudo, es decir no solo se comprobará lo sintáctico
sino también el orden correcto de las reglas, por ejemplo si se define el alias para un grupo de
comandos y este se usa antes de su definición, con esta opción se detectará este tipo de errores.

Linux Básico LP001 Ver.1 1-26


Sudoers
Archivo de configuración de sudo, generalmente ubicado bajo /etc y se modifica a través del uso de
visudo. En este archivo se establece quien (usuarios) puede ejecutar que (comandos) y de que
modo (opciones), generando efectivamente una lista de control de acceso que puede ser tan
detallada como se desee.
Es más fácil entender sudo si dividimos en tres partes su posible configuración, estás son:
* Alias
* Opciones (Defaults)
* Reglas de acceso
Por extraño que parezca ninguna de las secciones es obligatoria, o tienen que estar en algún orden
específico, pero la que al menos debe de existir es la tercera, que es la definición de los controles o
reglas de acceso. Se detallará cada uno de estos en un momento. Para los que les gusta saber más
la cuestión técnica es interesante saber que la construcción de un archivo sudoers esta basado en la
forma BNF (Backus-Naur Form), concretamente en versión extendida (EBNF), si estudiaste algún
curso de informática universitario seguramente entenderás esto ultimo. EBNF describe de una forma
precisa y exacta la gramática de un lenguaje, esta se va creando a través de reglas de producción
que a la vez son la base para ser referenciadas por otras reglas. Afortunadamente no se necesita
saber nada de esto, solo entender como se aplican estas reglas.

Alias
Un alias se refiere a un usuario, un comando o a un equipo. El alias engloba bajo un solo nombre
(nombre del alias) una serie de elementos que después en la parte de definición de reglas serán
referidos aplicados bajos cierto criterio. Es decir, regresando a EBNF estamos creando las reglas de
producción inicial. La forma para crear un alias es la siguiente:
tipo_alias NOMBRE_DEL_ALIAS = elemento1, elemento2, elemento3, ... elementoN
tipo_alias NOMBRE1 = elemento1, elemento2 : NOMBRE2 = elemento1, elemento2

En el segundo caso, separado por ":" es posible indicar más de un alias en una misma definición.
El tipo_alias define los elementos, es decir, dependiendo del tipo de alias serán sus elementos. Los
tipo de alias son cuatro y son los siguientes:
* Cmnd_Alias - define alias de comandos.
* User_Alias - define alias de usuarios normales.
* Runas_Alias - define alias de usuarios administradores o con privilegios.
* Host_Alias - define alias de hosts o equipos.

El NOMBRE_DEL_ALIAS puede llevar letras, números o guión bajo ( _ ) y DEBE de comenzar con
una letra mayúscula, se acostumbra a usarlos siempre en mayúsculas.

Linux Básico LP001 Ver.1 1-27


Los elementos del alias varían dependiendo del tipo de alias, así que veamos por partes así como
varios ejemplos para que comprender esto.

Cmnd_Alias
Definen uno o más comandos y otros alias de comandos que podrán ser utilizados después en alias
de usuarios. Ejemplos:

Cmnd_Alias WEB = /usr/sbin/apachectl, /usr/sbin/httpd, sudoedit /etc/httpd/


Indica que a quien se le aplique el alias WEB podrá ejecutar los comandos apachectl, httpd y editar
todo lo que este debajo del directorio /etc/httpd/, nótese que debe de terminar con '/' cuando se
indican directorios. También, la ruta completa a los comandos debe ser indicada.

Cmnd_Alias APAGAR = /usr/bin/shutdown -h 23\:00


Al usuario que se le asigne el alias APAGAR podrá hacer uso del comando 'shutdown' exactamente
con los parámetros como están indicados, es decir apagar -h (halt) el equipo a las 23:00 horas.
Notar que es necesario escapar el signo ':', así como los símbolos ' : , = \
Cmnd_Alias NET_ADMIN = /sbin/ifconfig, /sbin/iptables, WEB
NET_ADMIN es un alias con los comandos de configuración de interfaces de red ifconfig y de
firewall iptables, pero además le agregamos un alias previamente definido que es WEB, así que a
quien se le asigne este alias podrá hacer uso de los comandos del alias WEB.

Cmnd_Alias TODO_BIN = /usr/bin/, !/usr/bin/rpm


A quien se le asigne este alias podrá ejecutar todos los comandos que estén dentro del directorio
/usr/bin/ menos el comando 'rpm' ubicado en el mismo directorio. NOTA IMPORTANTE: este tipo de
alias con un permiso muy amplio menos '!' algo, generalmente no son una buena idea, ya que
comandos nuevos que se añadan después a ese directorio también podrán ser ejecutados, es mejor
siempre definir específicamente lo que se requiera.

User_Alias
Definen a uno o más usuarios, grupos del sistema (indicados con %), grupos de red (netgroups
indicados con +) u otros alias de usuarios. Ejemplos:

User_Alias MYSQL_USERS = andres, natalia, hector, %mysql


Indica que al alias MYSQL_USERS pertenecen los usuarios indicados individualmente más los
usuarios que formen parte del grupo 'mysql'.

Linux Básico LP001 Ver.1 1-28


User_Alias ADMIN = luis, andrea
'luis' y 'andrea' pertenecen al alias ADMIN.

User_Alias TODOS = ALL, !manuel, !daniel


Aquí encontramos algo nuevo, definimos el alias de usuario TODOS que al poner como elemento la
palabra reservada 'ALL' abarcaría a todos los usuarios del sistema, pero no deseamos a dos de ellos,
asi que negamos con '!', que serían los usuarios 'manuel' y 'daniel'. Es decir, todos los usuarios
menos esos dos. NOTA IMPORTANTE: este tipo de alias con un permiso muy amplios menos '!' algo,
generalmente no son una buena idea, ya que usuarios nuevos que se añadan después al sistema
también serán considerados como ALL, es mejor siempre definir específicamente a los usuarios que
se requieran. ALL es válido en todos los tipos de alias.

User_Alias OPERADORES = ADMIN, alejandra


Los del alias ADMIN más el usuario 'alejandra'.

Runas_Alias
Funciona exactamente igual que User_Alias, la única diferencia es que es posible usar el ID del
usuario UID con el carácter '#'.
Runas_Alias OPERADORES = #501, constanza
Al alias OPERADORES pertenecen el usuario con UID 501 y el usuario 'constanza'

Host_Alias
Definen uno o más equipos u otros alias de host. Los equipos pueden indicarse por su nombre (si se
encuentra en /etc/hosts) por nombre de dominio, si existe un resolvedor de dominios, por dirección
IP, por dirección IP con máscara de red. Ejemplos:

Host_Alias LANS = 192.168.0.0/24, 192.168.0.1/255.255.255.0


El alias LANS define todos los equipos de las redes locales.

Host_Alias WEBSERVERS = 172.16.0.21, web1 : DBSERVERS = 192.168.100.10, dataserver


Se define dos alias en el mismo renglón: WEBSERVERS y DBSERVERS con sus respectivas listas
de elementos, el separador ':' es válido en cualquier definición de tipo de alias.

Opciones (defaults)
Las opciones o defaults permiten definir ciertas características de comportamiento para los alias
previamente creados, para usuarios, usuarios privilegiados, para equipos o de manera global para
todos. No es necesario definir opciones o defaults, sudo ya tiene establecidas el valor de cada uno, y

Linux Básico LP001 Ver.1 1-29


es posible conocerlas a través de sudo -V (ver en la sección sudo de este manual).
Sin embargo, la potencia de sudo está en su alta granularidad de configuración, así que es
importante conocer como establecer opciones específicas.
Las opciones o defaults es posible establecerlos en cuatro niveles de uso:
* De manera global, afecta a todos
* Por usuario
* Por usuario privilegiado
* Por equipo (host)

Se usa la palabra reservada 'Defaults' para establecer las opciones y dependiendo del nivel que
deseamos afectar su sintaxis es la siguiente:
* Global: Defaults opcion1, opcion2 ...
* Usuario: Defaults:usuario opcion1, opcion2 ...
* Usuario Privilegiado: Defaults>usuario opcion1, opcion2 ...
* Equipo: Defaults@equipo opcion1, opcion2 ...

La lista de opciones es algo extensa, pueden consultarse en las páginas del manual (man sudoers)
o en el manual sobre sudo del sitio http://www.rpublica.net/sudo/indice.html#defaults, está en
español y define muy claramente lo que significa cada opción. En este manual nos concentraremos
a mostrar varios ejemplos del uso de establecer opciones.
Los defaults los divide el manual (man sudoers) en cuatro: flags o booleanos, enteros, cadenas y
listas. Veamos entonces algunos ejemplos de uso para cada uno de ellos:

flags o booleanos
Generalmente se usan de manera global, simplemente se indica la opción y se establece a 'on' para
desactivarla 'off' se antepone el símbolo '!' a la opción. Es necesario consultar el manual para saber el
valor por defecto 'on' o 'off' para saber si realmente necesitamos invocarla o no.

Defaults mail_always
Establece a 'on' la opción 'mail_always' que enviara un correo avisando cada vez que un usuario
utiliza sudo, a la vez, este opción requiere que 'mailto_user' este establecida.

Defaults !authenticate, log_host


Desactiva 'off' el default 'authenticate' que por defecto esta activado 'on' e indica que todos los
usuarios que usen sudo deben identificarse con su contraseña, obviamente esto es un ejemplo y
sería una pésima idea usarlo realmente, ya que ningún usuario necesitaría autenticarse, esto es
porque estamos usando Defaults de manera global. La segunda opción 'log_host' que por defecto

Linux Básico LP001 Ver.1 1-30


está en 'off' la activamos y registra el nombre del host cuando se usa un archivo (en vez de syslog)
como registro de sudo.

Defaults:catalina !authenticate
Aquí se aprecia algo más lógico, usamos opciones por usuario en vez de global, indicando que el
usuario 'catalina' no requerirá autenticarse. Pero todos los demás si.

Defaults>ADMIN rootpw
Opciones para usuarios privilegiados, en vez de usar una lista de usuarios, usamos un alias 'ADMIN'
que se supone fue previamente definido, y establecemos en 'on' la opción 'rootpw' que indica a sudo
que los usuarios en el alias 'ADMIN' deberán usar la contraseña de 'root' en vez de la propia.

Enteros
Tal como su nombre lo indica, manejan valores de números enteros en sus opciones, que deben
entonces usarse como opción = valor.
Defaults:fernando, renata passwd_tries = 1, passwd_timeout = 1

Ejemplo donde se aprecia el uso de opciones con valores enteros. En este caso se establecen
opciones para los usuarios 'fernando' y 'renata' solamente, que solo tendrán una oportunidad de
ingresar la contraseña correcta 'passwd_tries' el valor por defecto es de 3 y tendrán un minuto para
ingresarla 'passwd_timeout' el valor por defecto son 5 minutos.
La mayoría de las opciones de tiempo o de intentos, al establecerlas con un valor igual a cero
entonces queda ilimitado la opción.

Defaults@webserver umask = 011


Se establecen opciones solo para los usuarios que se conectan al servidor 'webserver' y el valor
'umask' indica que si mediante la ejecución del comando que se invoque por sudo es necesario crear
archivos o directorios, a estos se les aplicará la máscara de permisos indicada en el valor de la
opción.

Cadenas
Son valores de opciones que indican mensajes, rutas de archivos, etc. Si hubiera espacios en el valor
es necesario encerrar el valor entre comillas dobles (" ").
Defaults badpass_message = "Intenta de nuevo: "
Para todos los usuarios, cuando se equivoquen al ingresar la contraseña, es el mensaje que saldría.
En este caso la opción por defecto es "Sorry: try again".

Linux Básico LP001 Ver.1 1-31


Listas
Permite establecer/eliminar variables de entorno propias de sudo. Los 'Defaults' para variables es de
los menos usados en las configuraciones de sudo y ciertamente de los más confusos. Para entender
como se aplican es más fácil si primero ejecutas como 'root' el comando sudo -V, y al final del listado
encontrarás en mayúsculas las posibles variables de entorno que se pueden establecer o quitar y que
vienen del shell.
Solo existen tres opciones de listas: env_check, env_delete y env_keep, las listas pueden ser
remplazadas con '=', añadidas con '+=', eliminadas con '-=' o deshabilitadas con '!'. Con un par de
ejemplos quedará más claro.

Defaults env_delete -= HOSTNAME


Elimina la variable de entorno 'HOSTNAME', (pero preserva todas las demás que hubiera) y
comandos que se ejecuten bajo sudo y que requieran de esta variable no la tendrían disponible.

Defaults env_reset
Defaults env_check += DISPLAY, PS1
La primera opción 'env_reset' reinicia las variables de entorno que sudo utilizará o tendrá
disponibles, y solo quedan disponibles LOGNAME, SHELL, USER y USERNAME. La siguiente línea
indica que agregue (+=) a lo anterior, también la variable de entorno DISPLAY a su valor establecido
antes del reset.

Reglas de acceso
Aunque no es obligatorio declarar alias, ni opciones (defaults), y de hecho tampoco reglas de
acceso, pues el archivo /etc/sudoers no tendría ninguna razón de ser si no se crean reglas de
acceso. De hecho podríamos concretarnos a crear solamente reglas de acceso, sin opciones ni alias
y podría funcionar todo muy bien.
Las reglas de acceso definen que usuarios ejecutan que comandos bajo que usuario y en que
equipos. La mejor manera de entender y aprender a configurar sudoers es con ejemplos:
usuario host = comando1, comando2, ... comandoN

Sintaxis básica, 'usuario' puede ser un usuario, un alias de usuario o un grupo (indicado por %),
'host' puede ser ALL cualquier equipo, un solo equipo, un alias de equipo, una dirección IP o una
definición de red IP/máscara, 'comandoX' es cualquier comando indicado con su ruta completa. Si
se termina en '/' como en /etc/http/ entonces indica todos los archivos dentro de ese directorio.
daniela ALL = /sbin/iptables
Usuario 'daniela' en cualquier host o equipo puede utilizar iptables.
ADMIN ALL = ALL

Linux Básico LP001 Ver.1 1-32


Los usuarios definidos en el alias 'ADMIN' desde cualquier host pueden ejecutar cualquier comando.
%gerentes dbserver = (director) /usr/facturacion, (root) /var/log/*

Un ejemplo más detallado. Los usuarios que pertenezcan al grupo del sistema llamado 'gerentes'
pueden en el equipo llamado 'dbserver' ejecutar como si fueran el usuario 'director' la aplicación
llamada 'facturacion', además como usuarios 'root' pueden ver el contendido de los archivos que
contenga el directorio /var/log.
Lo anterior introduce algo nuevo, que en la lista de comandos es posible indicar bajo que usuario se
debe ejecutar el permiso. Por defecto es el usuario 'root', pero no siempre tener que así. Además la
lista 'hereda' la primera definición de usuario que se indica entre paréntesis ( ), por eso si se tiene
más de alguno hay que cambiar de usuario en el comando conveniente, el ejemplo anterior también
sería válido de la siguiente manera:
%gerentes dbserver = /var/log/*, (director) /usr/facturacion

No es necesario indicar (root) ya que es el usuario bajo el cual se ejecutan los comandos por
defecto. También es válido usar (ALL) para indicar bajo cualquier usuario. El ejemplo siguiente da
permisos absolutos.
enrique ALL = (ALL) ALL
Se establece permiso para el usuario 'enrique' en cualquier host, ejecutar cualquier comando de
cualquier usuario, por supuesto incluyendo los de root.

SUPERVISORES PRODUCCION = OPERACION


Una regla formada solo por alias. En el alias de usuario 'SUPERVISORES' los usuarios que esten
indicados en ese alias, tendrán permiso en los equipos definidos en el alias de host 'PRODUCCION',
de ejecutar los comandos definidos o listados en el alias de comandos 'OPERACION'.
En este último ejemplo se aprecia lo útil que pueden ser los alias, ya que una vez definida la regla,
solo debemos agregar o eliminar elementos de las listas de alias definidos previamente. Es decir, se
agrega un equipo más a la red, se añade al alias 'PRODUCCION', un usuario renuncia a la empresa,
alteramos el alias 'SUPERVISORES' eliminándolo de la lista, etc.

felipe ALL = /usr/bin/passwd *, !/usr/bin/passwd root


Este es un ejemplo muy interesante de la potencia y flexibilidad . Al usuario 'felipe', desde cualquier
equipo, tiene permiso de cambiar la contraseña de cualquier usuario (usando el comando 'passwd'),
excepto '!' la contraseña del usuario 'root'. Lo anterior se logra mediante el uso de argumentos en los
comandos. En el primer ejemplo '/usr/bin/passwd *' el asterisco indica una expansión de comodín
(wildcard) que indica cualquier argumento, es decir, cualquier usuario. En el segundo caso
'!/usr/bin/passwd root', si indica un argumento específico 'root', y la '!' como ya se sabe indica
negación, negando entonces el permiso a cambiar la contraseña de root..
Cuando se indica el comando sin argumentos: /sbin/iptables sudo lo interpreta como 'puede usar
iptables con cualquiera de sus argumentos'.

Linux Básico LP001 Ver.1 1-33


maria ALL = "/sbin/lsmod"
Al estar entre comillas dobles un comando, entonces sudo lo interpreta como 'puede hacer uso del
comando lsmod pero sin argumentos'. En este caso el usuario 'maria' podrá ver la lista de módulos
del kernel, pero solo eso.

Tags (etiquetas de comandos)


Cuando se definen reglas, en la lista de comandos, estos pueden tener cero (como en los ejemplos
anteriores) o más tags. Existen 6 de estas etiquetas o tags,

NOPASSWD Y PASSWD
Por defecto sudo requiere que cualquier usuario se identifique o autentifique con su contraseña.
Aprendimos en la sección de 'Opciones' o 'Defaults' que es posible indicar que un usuario o alias de
usuario no requiera de identificación. Pero el control granular propio de sudo, permite ir aun más lejos
al indicar a nivel de comandos, cuáles requieren contraseña para su uso y cuáles no.
genaro webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, /etc/httpd/conf/
Usuario 'genaro' en el equipo 'webserver' no requerirá contraseña para los comandos listados. El tag
se hereda, es decir no solo el primer elemento de la lista de comandos, sino los subsiguientes.
Suponiendo que el último '/etc/httpd/conf/' elemento, que permite modificar cualquier archivo
contenido en el directorio, si deseamos que use contraseña, lo siguiente lo conseguirá:
genaro webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, PASSWD: /etc/httpd/conf/

Aunque ya que solicitar contraseña es el default o defecto preestablecido, lo anterior también


funcionará de la siguiente manera:
genaro webserver = /etc/httpd/conf/, NOPASSWD: /bin/kill, /usr/bin/lprm,

NOEXEC Y EXEC
Este es un tag muy importante a considerar cuando sobre se otorgan permisos sobre programas que
permiten escapes a shell (shell escape), como en el editor 'vi' que mediante el uso de '!' es posible
ejecutar un comando en el shell sin salir de 'vi'. Con el tag NOEXEC se logra que esto no suceda,
aunque no hay que tomarlo como un hecho, ya que siempre existe la posibilidad de vulnerabilidades
no conocidas en los múltiples programas que utilizan escapes a shell. Al igual que los tags anteriores,
el tag se hereda y se deshabilita con su tag contrario (EXEC), en caso de que en la lista de
comandos hubiera varios comandos.
valentina ALL = NOEXEC: /usr/bin/vi

SETENV Y NOSETENV
Una de las múltiples opciones que pueden establecerse en la sección 'Defaults' u 'opciones' es la
opción booleana o de flag 'setenv' que por defecto y para todos los usuarios esta establecida en 'off'.
Esta opción si se activa por usuario (Defaults:sergio setenv) permitirá al usuario indicado cambiar el

Linux Básico LP001 Ver.1 1-34


entorno de variables del usuario del cual tiene permisos de ejecutar comandos, y como generalmente
este es 'root' pues es obvio que resulta bastante peligrosa esta opción. A nivel de lista de comandos,
es posible entonces especificar el tag 'SETENV' a un solo comando o a una pequeña lista de estos y
solo cuando se ejecuten estos se podrán alterar su entorno de variables. Es decir, en vez de
establecerlo por usuario, sería mas conveniente establecerlo por comando a ejecutarse solamente.
ADMIN ALL = SETENV: /bin/date, NOSETENV ALL

A los usuarios definidos en el alias de usuario 'ADMIN' en cualquier host, pueden alterar las variables
de entorno cuando ejecuten el comando 'date' (que puede ser útil por ejemplo para cambiar variables
del tipo LOCALE), y cualquier otro comando, no tendrá esta opción al habilitar el tag contrario
'NOSETENV'. Y ya que este es el default, también sería válido de la siguiente manera y harían lo
mismo:
ADMIN ALL = ALL, SETENV: /bin/date

Archivo /etc/sudoers de ejemplo

Para concluir este manual, veamos un pequeño ejemplo de un archivo /etc/sudoers:


# ***********************
# ejemplo de un archivo sudoers
# enrique.herreranoya@gmail.com
# ***********************
# ***********************
# DEFINCION DE ALIAS
# ***********************
# administradores con todos los privilegios
User_Alias ADMINS = luis, andrea
# administradores de red - network operators
User_Alias NETOPS = marcelo, andres
# webmasters -
User_Alias WEBMAS = cristina, esteban
# supervisores de producción (todos los del grupo de sistema supervisores)
User_Alias SUPPRO = manuel, %supervisores
# usuarios que pueden conectarse desde Internet
User_Alias INETUS = NETOPS, ADMINS, manuel
# servidores web

Linux Básico LP001 Ver.1 1-35


Host_Alias WEBSERVERS = 10.0.1.100, 10.0.1.101
# servidores de aplicaciones
Host_Alias APLICACIONES = WEBSERVERS, 10.0.1.102, 10.0.1.103, mailserver
# comandos de red permitidos
Cmnd_Alias REDCMDS = /sbin/ifconfig, /sbin/iptables
# comandos de apache
Cmnd_Alias APACHECMDS = /usr/sbin/apachectl, /sbin/service httpd *
# ***********************
# DEFINCION DE OPCIONES
# ***********************
# Los usuarios administradores, requieren autentificarse con la contraseña de 'root'
Defaults>ADMINS rootpw
# Para todos los usuarios, tienen hasta dos intentos para ingresar su contraseña y 3 minuto para que
esta expire
Defaults passwd_tries = 4, passwd_timeout = 1
# Los usuarios que se conectan desde Internet, solo tienen una oportunidad y cero timeout lo que
# implica que cada comando que usen a través de sudo requerira siempre de autentificación.
Defaults:INETUS passwd_tries = 1, passwd_timeout = 0
# Máscara de directorios y archivos por default, para los que ejecuten sudo en los servidores web
Defaults@WEBSERVERS umask = 022
# ***********************
# DEFINCION DE REGLAS
# ***********************
# administradores todo se les permite en cualquier equipo (¡¡¡¡¡cuidado con esto en la vida real!!!!!
ADMINS ALL = (ALL) ALL
# administradores de red, en todos los equipos, los comandos de red
NETOPS ALL = REDCMDS
# webmasters, en los servidores web con los comandos indicados en apachecmds y además sin
# necesidad de contraseña acceder a las bítacoras de apache y reiniciar los servidores.
WEBMAS WEBSERVERS = APACHECMDS, NOPASSWD: /var/log/apache/, /sbin/reboot
# supervisores, pueden ejecutar los comandos indicados en los equipos indicados en el alias
# aplicaciones y además son ejecutados bajo el usuario apps.
SUPPRO APLICACIONES = NOEXEC: (apps) /usr/local/facturacion.exe, /usr/local/ventas.exe,

Linux Básico LP001 Ver.1 1-36


/usr/local/nomina.exe
# no definidos por alias previos, sino directamente
# renata es de recursos humanos y puede cambiar contraseñas de cualquier usuario menos de root
renata ALL = /usr/bin/passwd *, !/usr/bin/passwd root
# daniel, puede apagar los equipos de aplicaciones
daniel APLICACIONES = /sbin/shutdown, /sbin/halt
# El equipo firewall de la red puede ser reiniciado (no apagado) por felipe que es asistente de redes
felipe firewall = /sbin/shutdown -r now

Comando id muestra información sobre el usuario actual

Edición de ficheros de texto


El editor nano, es fácil de aprender, fácil de usar, no tiene tantas características como algunos
editores de textos avanzados

Otros editores:

Kate es un editor gráfico sencillo

vim un avanzado editor lleno de características

Linux Básico LP001 Ver.1 1-37


UNIDAD 4 Los editores vi y vim

Linux Básico LP001 Ver.1 1-38


Introducción a VIM
● La versión mas nueva de vi, el editor estándar de Linux
● Ventajas:
Velocidad: Se hace mas con menos tecleos
Simplicidad: No depende de un mouse/GUI
Disponibilidad: Incluido con la mayoría de los sistema operativos tipo Unix
● Desventajas
Dificultad: Mas empinada curva de aprendizaje que editores mas simples y asociaciones de
teclas enfatiza mas en la velocidad que en la intuición
● El comportamiento de lo tecleado depende del “modo” de vim
● Son tres modos principales:
Modo comando (por defecto): Mover cursor, cortar/pegar texto, cambiar modo
Modo de Inserción: Modificar texto
Modo ejecución: Guardar, salir, etc
● Esc sale modo actual
● EscEsc siempre vuelve al modo comando

Uso básico de vim


● Para usar vim, debe al menos ser capaz de
Abrir un archivo
Modificar un archivo (modo inserción)
Guardar un archivo (modo ejecución)
Abrir, modificar y guardar ficheros
Abriendo un archivo en vim
● Para arrancar vi:
vim nombredearchivo
Si el archivo existe, el archivo se abre y se muestra el contenido, si el archivo no existe, vi lo
crea cuando las modificaciones se guardan por primera vez.

Modificando un archivo Modo Inserción


● i comienza el modo de inserción en el cursor
● Muchas otras opciones existen
A agrega al final de la linea
I inserta al comienzo de la linea
o inserta una nueva linea (abajo)
O inserta una nueva linea (encima)

Linux Básico LP001 Ver.1 1-39


Guardando un archivo y Saliendo de Modo ejecución
● Entrar en Modo ejecución con :
Crea un prompt de comando en la parte inferior izquierda de la pantalla
● Comando comunes de escribir/salir:
:w escribir (guardar) el archivo en el disco
:wq escribir y salir
:q! salir, incluso si perdiendo los cambios (Forzar)

El modo comando
Usando el modo comando
● Modo por defecto de vim, claves describe el movimiento y los comandos de manipulación
de texto
● Comandos se repiten cuando es precedido por un número
● Ejemplo
Flecha derecha mueve a la derecha un carácter
5, Flecha derecha mueve a la derecha cinco caracteres

Desplazarse por el modo comando


● Mover por carácter: teclas de flechas, h, j, k, l
No Teclas flechas útil para conexiones remotas a los sistemas más antiguos
● Mover por palabra: w, b
● Mover por frase: ), (
● Mover por párrafo: }, {
● Saltar a la linea x: xG
● Saltar al final: G

Buscar y reemplazar Modo comando


● Búsqueda en less
/, n, N
● Buscar/Remplazar como en sed
Afecta a la linea actual por defecto, utiliza rango x,y o % para todo el archivo
:1,5 s/cat/dog/ # ( desde la linea 1 a la 5 )
:% s/cat/dog/g # (t odo el archivo )

Linux Básico LP001 Ver.1 1-40


Manipulando Texto Modo comando
Cambiar (remplazar) Borrar (cortar) Yank (copiar,tirar)
Linea cc dd yy
Letra cl dl yl
Palabra cw dw yw
Frase adelante c) d) y)
Frase anterior c( d( y(
Párrafo arriba c{ d{ y{
Párrafo debajo c} d} y}

Deshacer cambios
Deshacer Cambios Modo comando
● u deshacer cambios más recientes
● U deshacer todos los cambios de la línea actual desde el lugar donde esta cursor en la linea
● Ctrl-r Rehacer último cambio "deshecho"

El modo visual
● Permite la selección de bloques de texto
v comienza destacado orientado al carácter
V comienza destacado orientado a la linea
Activado con el mouse en gvim
● Teclas visuales se pueden utilizar en conjunto con las teclas de movimiento:
w, ), }, arrows, etc
● Texto destacado puede ser borrado, copiado, cambiado, filtrado, buscado/reemplazado, etc.
Dividir pantalla
Usando múltiples "ventanas"
● Múltiple documentos pueden ser vistos en una sola pantalla vim
Ctrl-w, s divide horizontalmente la pantalla
Ctrl-w, v divide la pantalla verticalmente
Ctrl-w, Arrow se mueve entre ventanas
● Modo ejecución siempre afecta a las instrucciones de la ventana actual
● ventana :help muestra mas ventana de comandos

Linux Básico LP001 Ver.1 1-41


Configuración de vi y vim
● Configurando al vuelo
:set o :set all
● Configurando permanentemente
~/.vimrc o ~/.exrc
:set number
:set autoindent
:set textwidth=65 (solo vim)
:set wrapmargin=15
:set ignorecase
● Unos pocos elementos de configuración común
● Ejecutar opción :help para una lista completa

Linux Básico LP001 Ver.1 1-42


UNIDAD 5 - Comandos y uso de
ayuda

Linux Básico LP001 Ver.1 1-43


Ejecutar comandos
Los comandos tienen la siguiente sintaxis:
comando opciones argumentos

Cada elemento va separado por un espacio, las opciones modifican el comportamiento de un


comando.
Opciones de una letra usualmente son precedidas por: -
Pueden ser pasadas como -a -b -c o -abc
Opciones con palabras completas usualmente son precedidas por: --
Ejemplo: --help

Los argumentos son nombres de archivos u otros datos necesarios para el comando, múltiples
comandos pueden estar separados por ;

Algunos comandos simples:


date despliega fecha y hora
cal despliega un calendario

Utilizar la ayuda

¡No hay que tratar de memorizar todo!, existen muchos niveles de ayuda.
Ejemplo:
whatis
comando -help
man comando
info comando

También se puede encontrar información en /usr/share/doc/

Se puede acceder a la documentación de Gnu/Linux, en Internet o impresa.

El comando whatis y la opción --help


El comando whatis, despliega una descripción corta de los comandos. Utiliza una base de datos que
se actualizan cada noche, a menudo no están disponibles inmediatamente después de instalar
$ whatis cal # muestra un calendario
cal (1)

Linux Básico LP001 Ver.1 1-44


La opción --help , muestra un resumen del uso y una lista de argumentos, es utilizado por la mayoría,
pero no todos, los comandos.
$ date --help
Uso: date [OPTIONES]... [+FORMATO] o:
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Muestra la hora actual dado FORMATO, o establece la fecha del sistema.

Un resumen de lectura de uso, es impreso por --help, el man de los comandos y otros
Se utiliza para describir la sintaxis de un comando
Argumentos en [ ] son opcionales
Argumentos en MAYUSCULAS o <> son variables
Texto seguido por ... representan una lista.
x|y|z significa "x o y o z"
-abc significa "cualquier combinación de -a, -b o -c"

Los comandos man e info


El comando man, proporciona documentación de los comandos, casi todos los comandos tienen una
"página" man.
Las paginas están agrupadas en “capítulos”, son referidas en forma colectiva como el Manual de
Linux
man [<capitulo>] <comando>
Navegando por las paginas man: Mientras estamos viendo una pagina man
Navegamos con las teclas de flechas, PgUp, PgDn, con /text buscamos coincidencias de text, n/N
va a siguiente/previa coincidencia, q para salir.
man -k palabraclave (lista todas las páginas coincidentes)
Usa la base de datos de whatis, la búsqueda en el Man.
El comando info, tiene una profundidad semejante al man, pero a menudo es más
Ejecutar info sin argumentos lista todas las páginas, las páginas de info están estructurados como
un sitio web, cada página está dividida en "nodos" y los enlaces a los nodos están precedidos por: *
info [comando]

Navegando por las paginas info: Mientras vemos una pagina info, navegamos con las teclas de
flecha, PgUp, PgDn; Tab nos mueve al siguiente enlace, Enter sigue el enlace seleccionado, n/p/u
va al siguiente/previo/hasta_el_nodo,
s text búsqueda para text (por defecto: ultima búsqueda), q salir de info

Linux Básico LP001 Ver.1 1-45


La documentación
Hay una extensa documentación, tenemos en el directorio /usr/share/doc, los sub-directorios para la
mayoría de los paquetes instalados, ademas es la localización de documentos que no caben en otro
lugar, también están los archivos de configuración por ejemplo.
También hay documentación en formatos HTML/PDF/PS y detalles de la licencia.

Documentos disponibles en CD o sitio web de CentOS

Guía de instalación

Guía de implementación

Guía de Virtualización

Entrada y salida de comandos estándar y pipes


Entrada y salida estándar
Linux provee tres canales I/O a los programas
Entrada estándar (STDIN) – teclado por defecto
Salida estándar (STDOUT) – ventana de terminal por defecto
Errores estándar (STDERR) - ventana de terminal por defecto
Redirigir la entrada y salida estándar
STDOUT y STDERR pueden ser enviados a archivos, los operadores admitidos son:
comando operador archivo
> redirige STDOUT a un archivo
2> redirige STDERR a un archivo
&> redirige todas las salidas a un archivo
Los contenidos de los archivos son sobre escritos por defecto, con >> se agrega.
El comando find genera una salida y errores, cuando se ejecuta como usuario no root:
$ find /etc -name passwd
Operadores pueden ser usados para almacenar la salida y errores:
$ find /etc -name passwd > find.out
$ find /etc -name passwd 2> /dev/null
$ find /etc -name passwd > find.out 2> find.err

Linux Básico LP001 Ver.1 1-46


El comando find nos permite realizar una búsqueda de uno o varios archivos dentro de la jerarquía
de directorios. Y no sólo podemos buscar, además podemos ejecutar acciones sobre lo encontrado
por el comando find. Por otro lado, podemos realizar la búsqueda mediante varios criterios.
Operadores Importantes de redirección
Operador Significa
< archivo Toma como entrada estándar desde archivo.
> archivo Escribe la salida estándar al archivo.
>> archivo Agrega la salida estándar al archivo.
>&2 Escribe la secuencia de salida estándar para la secuencia de error estándar.
2> archivo Escribe la secuencia de error estándar al archivo.
2>&1 Escribe la secuencia de error estándar a la secuencia de salida estándar.
x|y Procesa y toma como entrada el resultado del proceso x.
Direccionamiento de STDOUT a un programa (Piping)
Pipe (el carácter |) puede conectar comandos: comando1 | comando2
Envía STDOUT del comando1 para STDIN del comando2 en ves de a la pantalla, STDERR no es
transmitido a través de pipe, se utiliza para combinar la funcionalidad de múltiples herramientas
comando1 | comando2 | comando3... etc
Ejemplos:
less: Ver entrada de una página a la vez:
$ ls -l /etc | less
En la entrada se puede buscar con /
mail: enviar una entrada vía email:
$ echo "correo de prueba" | mail -s "prueba" user@example.com
lpr: enviar entrada a la impresora
$ echo "prueba de impresión" | lpr
$ echo "prueba de impresión" | lpr -P printer_name

Combinando salidas y errores


Algunos operadores afectan tanto a STDOUT y STDERR
&> Redirecciona todas las salidas:
$ find /etc -name passwd &> find.all
2>&1 Redirecciona STDERR a STDOUT
Útiles para el envío de todas las salidas a través de una tubería
$ find /etc -name passwd 2>&1 | less

Linux Básico LP001 Ver.1 1-47


() Combina STDOUTs de múltiples programas
$ ( cal 2007 ; cal 2008 ) | less

Direccionamiento de múltiples destinos (tee)


$ comando1 | tee archivo | comando2
Almacena STDOUT del comando1 en archivo, a continuación, envía al comando2
Uso: Soluciona problemas complejos, las tuberías permite la visualización simultánea, y registro de
salida.

Redirecciónar STDIN desde un archivo.


Redirecciónar la entrada estándar con: <, algunos comandos puede aceptar los datos redirigido
desde STDIN a un archivo:
$ tr 'A-Z' 'a-z' < .bash_profile
Este comando cambia los caracteres en mayúscula de .bash_profile a minúsculas
Equivalente a:
$ cat .bash_profile | tr 'A-Z' 'a-z'
El comando cat despliega por la salida estándar STDOUT el contenido de un archivo.

Envío de múltiples líneas de STDIN


Redirecciónar varias líneas de teclado para STDIN con <<PALABRA
Todo el texto hasta PALABRA es enviado a STDIN, a veces llamado como heretext
$ mail -s "Por favor llamanos" joan@ejemplo.cl <<END
>Hola Joan,
>Por favor llamame cuando este aquí. Necesitamos
>realizar un mantenimiento al servidor1.
>Cuando llegues llamanos,
>Enrique
>END

Scripting: para bucles


Realiza acciones en cada miembro de un conjunto de valores
Ejemplo: for NAME in joe jane julie
do
ADDRESS="$NAME@ejemplo.info"
MESSAGE='Los proyectos terminan hoy!'

Linux Básico LP001 Ver.1 1-48


echo $MESSAGE | mail -s Recordatorio $ADDRESS
done

El comando for asigna a la variable NAME el valor de lo que se indique después de in que pueden
ser una lista de valores, salida de comandos, listas de archivos.

Scripting: para bucles continuos


También se puede utilizar comandos de salida y listas de archivos:
for num in $(seq 1 10)
Asigna 1-10 a $num
seq X Y imprime los números X hasta Y
for file in *.txt
Asigna nombre de archivos de texto a $file

Comandos para procesar texto


Comandos para extraer, analizar y manipular texto

Para ver contenido de archivos: less y cat


cat: vuelca uno o mas archivos a STDOUT
Múltiples archivos son concatenados a la vez

less: ver un archivo o STDIN una pagina a la ves.


Se puede usar comandos mientras visualizamos el archivo:
/text busca text
n/N salta a la siguiente/previa coincidencia
v abre el archivo en un editor de texto
less es el paginador usado por man

Para extraer información de archivo: head y tail


head: Despliega las primeras 10 lineas de un archivo
Use -n para cambiar el numero de lineas desplegadas

tail: Despliega las ultimas 10 lineas de un archivo


Use -n para cambiar el numero de lineas desplegadas

Linux Básico LP001 Ver.1 1-49


Use -f para "seguir" en forma subsecuente las adiciones a el archivo
Muy usado para el monitoreo de archivos de registro (log)!

Para extraer por palabras claves: grep


Imprime lineas de un archivo o STDIN cuando coincide un patrón
$ grep 'john' /etc/passwd
$ date --help | grep year
Use -i para búsquedas no sensibles a mayúsculas y minúsculas
Use -n para imprimir números de linea de coincidencias
Use -v para imprimir lineas que no contienen coincidencias
Use -AX para incluir las X lineas después de cada coincidencia
Use -BX para incluir las X lineas antes de cada coincidencia

Para extraer información por Columnas: cut


Despliega columnas especificas de un archivo o datos de STDIN
$ cut -d: -f 1 /etc/passwd
$ grep root /etc/passwd | cut -d: -f7
Use -d para especificar la columna que delimita (por defecto es TAB)
Use -f para especificar la columna para imprimir
Use -c para cortar por caracteres
$ cut -c2-5 /usr/share/dict/words

Caracteres especiales

Caracteres especiales para búsquedas complejas. Expresiones regulares


^ representa el inicio de linea
$ representa el fin de linea
Clases de caracteres como en bash:
[abc], [^abc]
[[:upper:]], [^[:upper:]]
Usados por:
grep, sed, less, otros

Linux Básico LP001 Ver.1 1-50


Comandos básicos
wc (word count)
Contar palabras, lineas, bytes y caracteres
Puede actuar sobre un archivo o STDIN
$ wc story.txt
39 237 1901 story.txt
Use -l para solo contar lineas
Use -w para solo contar palabras
Use -c para solo contar byte
Use -m para solo contar caracteres (no desplegados)

sort (ordenar)
Ordena el texto y envía a STDOUT – archivo original no es modificado
$ sort [opciones] file(s)
Opciones comunes
-r realiza un ordenamiento inverso (descendente)
-n realiza un ordenamiento numérico
-f ignora diferencias de mayúsculas o minúsculas en cadena
-u (único) remueve lineas duplicadas en la salida
-t c utiliza c como un separador de campo
-k X ordena por campo X definido
Puede ser utilizado en múltiples ocasiones

Eliminando lineas duplicadas


sort y uniq
sort -u: elimina lineas duplicadas de la entrada
uniq: elimina lineas duplicadas contiguas de la entrada
Utilizar -c para contar el numero de ocurrencias
Utilizar con sort para un mejor resultado:
$ sort userlist.txt | uniq -c

Comparando archivos (diff)


Compara dos archivos buscando diferencias

Linux Básico LP001 Ver.1 1-51


$ diff foo.conf-broken foo.conf-works
5c5
< use_widgets = no
---
> use_widgets = yes
Denota una diferencia (cambio) en la linea 5
Utilizar gvimdiff para diff gráfico, proporcionado por el paquete vim-X11

Duplicación de cambios en archivos patch


La salida de diff es almacenada en un archivo que es llamado "patchfile"
Utilizar -u para "unificar" diff, lo mejor en patchfiles
Cambios duplicados de patch en otros archivos (utilizar con cuidado!)
Utilizar -b para automáticamente respaldar archivos cambiados
$ diff -u foo.conf-broken foo.conf-works > foo.patch
$ patch -b foo.conf-broken foo.patch
patch el archivo de revisión contiene un listado de diferencias producidas por el programa diferencias
y aplica a esas diferencias de uno o más archivos originales, produciendo versiones parcheadas.
Normalmente, las versiones parcheadas, se colocan en lugar de los originales. Las copias de
seguridad se puede hacer, ver la opción -b o --backup.
Los nombres de los archivos a reparar se toman generalmente del fichero de parche, pero si hay un
solo archivo a reparar puede ser especificado en la línea de comando como archivo original.
Corrector ortográfico con aspell
Comprobar ortografía de archivos interactivamente:
$ aspell check letter.txt
De forma no interactiva lista de palabras escritas desde STDIN
$ aspell list < letter.txt
$ aspell list < letter.txt | wc -l

Herramientas para manipular texto: tr y sed


Alterar (traducir) Caracteres: tr
Convierte caracteres en un conjunto de caracteres correspondientes en otro conjunto, solo lee los
datos de STDIN
$tr 'a-z' 'A-Z' < lowercase.txt

Linux Básico LP001 Ver.1 1-52


Alterar cadenas de caracteres: sed (stream editor)
Realiza la búsqueda/reemplazo operando en una secuencia de texto, normalmente no altera el
archivo de origen

Use -i.bak para respaldar y alterar el archivo fuente

Ejemplos de sed (¡entrecomillar búsqueda y reemplazar instrucciones! )

sed addresses

sed 's/dog/cat/g' pets

sed '1,50s/dog/cat/g' pets

sed '/digby/,/duncan/s/dog/cat/g' pets

Múltiples instrucciones sed

sed -e 's/dog/cat/' -e 's/hi/lo/' pets


sed -f myedits pets

Linux Básico LP001 Ver.1 1-53


UNIDAD 6 Shell BASH

Linux Básico LP001 Ver.1 1-54


Introducción, historia y características de bash
Introducción: bash es un intreprete de Unix (intérprete de comandos de Unix) escrito para el
proyecto GNU. Su nombre es un acrónimo de bourne-again shell (otro shell bourne) — haciendo un
juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los
primeros shells importantes de Unix. Hacia 1978 el shell Bourne era el shell distribuido con el Unix
Version 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el shell
Bourne original. Brian Fox escribió el shell bash en 1987. En 1990. Chet Ramey se convirtió en su
principal desarrollador. Bash es el shell por defecto en la mayoría de sistemas GNU/Linux, además
de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo unix.

Características: La sintaxis de órdenes de bash es un super conjunto de instrucciones basadas en la


sintaxis del intérprete Bourne. La especificación definitiva de la sintaxis de órdenes de bash, puede
encontrarse en el bash Reference Manual distribuido por el proyecto GNU.
La mayoría de los shell scripts (guiones de órdenes) Bourne pueden ejecutarse por bash sin ningún
cambio, con la excepción de aquellos scripts de shell Bourne que hacen referencia a variables
especiales de Bourne o que utilizan una orden interna de Bourne. La sintaxis de órdenes de bash
incluye ideas tomadas desde el Korn Shell (ksh) y el C Shell (csh), como la edición de la línea de
órdenes, el historial de órdenes, la pila de directorios, las variables $RANDOM y $PPID, y la sintaxis
de substitución de órdenes POSIX: $(...). Cuando se utiliza como un intérprete de órdenes interactivo,
bash proporciona auto completado de nombres de programas, nombres de archivos, nombres de
variables, etc, cuando el usuario pulsa la tecla TAB. La sintaxis de bash tiene muchas extensiones
que no proporciona el intérprete Bourne.
Probablemente el shell en un sistema Unix o Linux, sea el primer programa con el cual un usuario
ínteractua. La palabra "Shell" es una terminología Unix que define la interfaz de usuario mediante el
cual se puede enviar instrucciones al sistema operativo o bien recibir respuestas o resultados del
mismo. Se dice que el shell cumple una doble función:
Proteger al usuario de ínteractuar directamente con el kernel (imagínese indicando al sistema que
usted quiere borrar el contenido de un directorio completo sin poder utilizar una herramienta tan
simple como el metacarácter *, para hacer referencia a todos los archivos contenidos en ese
directorio, y tener que especificar archivo por archivo...)
Proteger al kernel de errores de sintaxis mientras el usuario escribe las instrucciones, por lo que el
shell decide realmente enviar aquellas ordenes que sean sintácticamente correctas al sistema
operativo. A continuación veremos algunas características básicas, pero muy potentes del shell bash,
quizás el más popular de los shells modernos de Linux.

Comodines
Comodines globales de expansión:
* - coincidencias de cero o más caracteres
? - coincidencias cualquier carácter individual
[0-9] - coincidencias de un rango de números
[abc] - coincidencias con cualquier de los caracteres en la lista
[^abc] – todas las coincidencias, excepto los caracteres en la lista

Están predefinidas las clases de caracteres que pueden ser utilizados

Linux Básico LP001 Ver.1 1-55


El historial de comandos
Ingresando el comando history, el sistema devuelve la lista de comandos ejecutados hasta el
momento por el usuario actualmente registrado, esto incluye tanto la sesión actual, como sesiones
anteriores, por lo tanto podemos intentar encontrar el comando en la lista completa, mirando linea por
linea o hacer una búsqueda un poco mas específica, si es que recordamos algún fragmento de lo que
necesitamos encontrar. Supongamos que recuerdo que utilice el comando "who"; podría invocar al
historial para consultar todos aquellos comandos ejecutados que incluyeran la palabra "who":
storage:~# history | grep who
502 who
503 who | cut -c1-8 | sort -u
504 who | cut -c1-8 | sort -u | wc -l

Una vez encontrado el comando buscado, se puede invocar para ejecutarlo por el numero de indice
de la siguiente forma: (!numero de comando)
maquina:~# !504
who | cut -c1-8 | sort -u | wc -l

Simplemente el shell expande la expresión !numero de comando por la cadena literal que encuentre
en ese índice del archivo del historial y envía la ejecución de la misma, obteniendo el mismo resultado
que si se hubiera tipeado el comando completo.
También es posible invocar a un comando recordando directamente parte de su nombre, por ejemplo
Ejecutar el ultimo comando que comience con " mysql "
storage:~# !mysql
mysql -u user -p

● Utilizar las teclas de arriba y abajo para desplazarse a través de los comandos anteriores
● Tipear Ctrl-r para buscar por un comando en el historial de comandos
r (reverse-i-search)`':
● Para recordar el último argumento del comando anterior:
Esc,. (la tecla de escape seguida de un periodo)
Alt-. (mantenga presionada la tecla ALT mientras presiona el período)

Expansión de comandos
● Tilde ( ~ )
Para referirse a su directorio home:
$ cat ~/.bash_profile
● Para referirse a directorios home de otros usuarios:
$ ls ~julie/public_html
● Expansión de comandos: $() o ``
Imprime la salida de un comando como argumento para otro:
$ echo "El nombre del sistema es $(hostname)"
El nombre del sistema es server1.example.com
● Llaves de expansion: { }

Linux Básico LP001 Ver.1 1-56


Abreviatura para la impresión de cadenas repetitivas
$ echo file{1,3,5}
file1 file3 file5
$ rm -f file{1,3,5}
● Ctrl-a mueve al inicio de linea
● Ctrl-e mueve al final de linea
● Ctrl-u elimina al comienzo de linea
● Ctrl-k borra al final de linea
● Ctrl-arrow mueve a la izquierda o la derecha de la palabra

Terminales
● Aplicaciones->Accesorios->Terminal
● Emulador gráfico de terminal que soporta múltiples "pestañas" de shells
Ctrl-Shift-t crea una nueva pestaña
Ctrl-PgUp/PgDn cambia a la pestaña siguiente/anterior
Ctrl-Shift-c copia el texto seleccionado
Ctrl-Shift-v pega el texto en la salida estándar

Configuración del shell BASH


Variables en bash
● A las variables se le asignan valores
Útiles para almacenar datos o la salida de un comando
● Se definen con VARIABLE=VALOR
● Se hace referencia con $VARIABLE
$ HI="Hola, y bienvenido a $(hostname)."
$ echo $HI
Hola, y bienvenido a estationX.

Variables locales, de entorno, de configuración e información, Alias


● Variables son locales a un solo shell por defecto, variables de entorno son heredadas por las shell
hijas
Se establece para exportar VARIABLE=VALOR, consultado por algunos programas para la
configuración.

Linux Básico LP001 Ver.1 1-57


● Las variables de configuración
PS1: Aspecto del prompt de bash
PATH: Directorios para buscar ejecutables en ellos
EDITOR: Editor de texto por defecto
HISTFILESIZE: Numero de comandos en .bash_history
● Variables de Información
HOME: Directorio de trabajo de los usuarios
EUID: UID efectivo del usuario
● alias permite crear accesos directos a los comandos
$ alias dir='ls -laF'
● Utilizar solo alias para ver todo el conjunto de alias
● Utilizar alias seguido por un nombre de alias para ver el valor del alias
$ alias dir
alias dir='ls -laF'

Expansión de variables y evitar la expansión, cómo funciona la expansión en bash


Cómo se expande una línea de comandos bash
1.- Divide la linea en palabras
2.- Expande alias
3.- Expande declaraciones en llaves ({})
4.- Expande declaraciones de tilde (~)
5.- Expande variables ($)
6.- Sustitución de comandos ($() y ``)
7.- Divide la linea en palabras nuevamente
8.- Expande comodines globales de archivos (*, ?, [abc], etc)
9.- Prepara direccionamiento de I/O (<, >)
10.-¡Ejecuta el comando !

Impedir la Expansión
● Barra oblicua invertida ( \ ) hace el siguiente carácter literal
$ echo El costo: \$5.00
El costo: $5.00
● Comillas impide la expansión
Comillas simples (') inhibe toda expansión
Comillas dobles (") inhibe toda expansión, excepto:
● $ (signo moneda) - expansión de variable
● ` (comillas invertidas) - substitución de comandos

Linux Básico LP001 Ver.1 1-58


● \ (barra oblicua invertida) - carácter de inhibición individual
● ! (signo de exclamación) - substitución de historial

Scripts de inicio y parada de bash


Tareas de inicio Bash: profile
● Almacenados en /etc/profile (global) y ~/.bash_profile (usuario)
● Se ejecuta solo para registrarse en los entornos de trabajo
● Utilizado para: Configuración de variables de entorno; la ejecución de comandos (ej: script
verificador-de-correo)

Tareas de inicio Bash: bashrc


● Almacenado en /etc/bashrc (global) y ~/.bashrc (usuario)
● Ejecutado por todas las shells
● Utilizado para: Configurar variables locales y definir alias

Tareas de termino
● Almacenados en ~/.bash_logout (usuario)
● Se ejecuta cuando termina un registro de shell
● Utilizado para: Crear respaldos automáticos, limpieza de archivos temporales

Tipos de shells, variables en shell scripts


Scripting: Toma de entrada con parámetros de posición
● Los parámetros posicionales son variables especiales que contienen los argumentos de la línea de
comandos del script.
● Los parámetros disponible de posición son $1,$2, $3, etc. . Estos son normalmente asignados para
los nombre de variables mas significativas para mejorar la claridad
● $* contiene todos los argumentos de linea de comandos
● $# contiene el número de argumento de línea de comando

Scripting: Tomando la entrada con el comando read


● Utilizar read para asignar valores de entrada a una o más variables de shell:
-p designa prompt para mostrar
read lee de la entrada estándar y asigna una palabra para cada variable
Cualquier palabra sobrante es asignada a la ultima variable
read -p "Ingrese un nombre de archivo: " ARCHIVO
read lee una línea desde la entrada estándar, o desde el descriptor de fichero suministrado como
argumento para la opción -u.

Linux Básico LP001 Ver.1 1-59


UNIDAD 7 Configuración y
Administración básica del sistema

Linux Básico LP001 Ver.1 1-60


Ajustar Fecha y hora
● GUI: system-config-date
Sistema->Administración->Fecha y Hora
Puede configurarse fecha/hora manualmente o usar NTP, servidores adicionales NTP
pueden ser agregados, puede usarse hora local o UTC
● CLI: date [MMDDhhmm[[CC]YY][.ss]]
# date 02071345 $ febrero 7, 13:45
# date 030417002011.05 $ marzo 4, 17:00:05, 2011
Configuración de Impresoras
● Las impresoras pueden ser locales o de red
● Las peticiones de impresión son enviadas a colas
● Los trabajos en colas son enviados a la impresora en el orden de llegada
● Los trabajos pueden ser cancelados antes o durante la impresión

system-config-printer
● Sistema->Administración->Impresoras
Local (paralela o usb)
Servidor de impresión Unix/Linux
Servidor de impresión Windows
Servidor de impresión Netware
HP JetDirect
● La configuración es almacenada en /etc/cups/printers.conf
Comandos de impresión
● lpr envía un trabajo a la cola para ser impreso
Acepta ASCII, PostScript, PDF, otros
● lpq ve el contenido de una cola
● lprm remueve un trabajo desde la cola
● Los comandos de impresión System V como lp, lpstat y cancel también son soportados

Utilidades de impresión
● evince ver documentos PDF
● lpstat -a lista las impresoras configuradas
● ps2pdf convierte PostScript a PDF

Linux Básico LP001 Ver.1 1-61


Configuración de la red
● Configuraciones importantes de red:
Configuración IP , activación de dispositivo
Configuración de DNS
Pasarela por defecto (Gateway)
● Las interfaces de red son nombradas secuencialmente: eth0, eth1, etc
Múltiples direcciones pueden ser asignadas a un dispositivo con alias
Los alias son etiquetados como: eth0:1, eth0:2, etc.
Los alias son tratados como interfaces separadas
● Vemos la configuración de la interface con ifconfig [ethX]
● Habilitamos la interface con ifup ethX
● Inhabilitamos la interface con ifdown ethX

Configuración gráfica de la red system-config-network


● Sistema->Administración->Red
Activar/Desactivar interfaces
Asignar dirección IP ó DHCP
Modificar configuración DNS
Modificar dirección de pasarela (gateway)
Network Configuration Files Ethernet Devices
● La configuración de los dispositivos son almacenados en archivos de texto
/etc/sysconfig/network-scripts/ifcfg-ethX
Una completa lista de opciones hay en /usr/share/doc/initscripts-*/sysconfig.txt

Configuración Dinámica Configuración Estática


DEVICE=ethX DEVICE=ethX
ONBOOT=yes ONBOOT=yes
BOOTPROTO=dhcp BOOTPROTO=static
HWADDR=00:02:8A:A6:30:45 HWADDR=00:02:8A:A6:30:45
IPADDR=192.168.0.213
NETMASK=255.255.255.0
GATEWAY=192.168.0.6

Linux Básico LP001 Ver.1 1-62


Archivos de configuración de red Otras configuraciones globales de Red
● Configuraciones globales en /etc/sysconfig/network
Muchos serán proveídos por DHCP
GATEWAY puede ser reemplazado en archivo ifcfg
NETWORKING=yes
HOSTNAME=servidor1.ejemplo.org
GATEWAY=192.168.0.6

Archivos de configuración de Red Configuración DNS


● El Domain Name Service (Servicio de Nombres de Dominio) traduce nombres de maquinas
en direcciones de red
● La dirección del servidor es especificado por dhcp o en /etc/resolv.conf
search ejemplo.org lamer.info
nameserver 192.168.0.213
nameserver 192.168.1.254

¿Qué es un proceso, demonio y tarea?


● Un proceso es un conjunto de instrucciones cargadas a la memoria
Un ID de proceso numérico (PID) es usado para identificarlo
UID, GID y contexto de SELinux determina el acceso al sistema de archivos
● Normalmente heredado del usuario que ejecuta

Ver el estado de un proceso


● Ver información de los procesos con ps
Muestra los procesos del terminal actual por defecto
-a incluye los procesos en todos los terminales
-x incluye los procesos que no están adjunto a un terminal
-u imprime información de procesos del usuario
-f imprime información completa de los procesos
-o PROPERTY,... imprime información personalizada:
pid, comm, %cpu, %mem, state, tty, euser, ruser

Linux Básico LP001 Ver.1 1-63


Buscando procesos
● Más flexible: ps opciones | otros comandos
ps axo comm,tty | grep ttyS0
● Por patrones predefinidos: pgrep
$ pgrep -U root
$ pgrep -G estudiante
● Por exactamente el nombre del programa: pidof
$ pidof bash

pidof encuentra el ID del proceso de un programa en ejecución e imprime los id en la salida


estándar.

Enviar señales a un proceso


Señales
● Lo más fundamental comunicación inter-procesos
Enviada directamente a los procesos, no es requerida la interface del usuario
Programas asocian acciones con cada señal
Señales son especificado por nombre o numero cuando se envía:
Señal 15, TERM (por defecto) – Termino limpio
Señal 9, KILL - Terminar inmediatamente
Señal 1, HUP – Re-leer archivo de configuración
man 7 signal muestra lista completa

Terminar un proceso
● Por patrón: pkill [-señal] patrón
● Por nombre: killall [señal] nomb ...
● Por PID: kill [señal] pid ...

Modificar la prioridad de un proceso


Programación de prioridad
● La programación de prioridad determina el acceso a la CPU
● Prioridad es afectado por un valor nice de proceso
● Los valores van desde -20 a 19 por defecto es 0

Linux Básico LP001 Ver.1 1-64


Un bajo valor nice significa mayor prioridad de CPU
● Ver con ps -o com,nice
Alterando la programación de prioridad
● Los valores nice pueden ser alterados...
Cuando se inicia un proceso:
$ nice -n 5 comando
Después de iniciado:
$ renice 5 PID
● Solo root puede disminuir el valor de nice
Herramientas interactivas de gestión de procesos
● CLI: top
● GUI: gnome-system-monitor
● Capacidades
Desplegar en tiempo real información de los procesos
Permite ordenar, matar y re-nicing

Ejecutar procesos en segundo plano


● Ejecutar un proceso en background
Anexar un símbolo de unión (&) a la linea de comandos: firefox &

Suspender un proceso
● Temporalmente detiene la ejecución de un programa
Use Ctrl-z o envie señal 17 (STOP)

Ver la lista de procesos en segundo plano o suspendidos


● Administrar tareas (job) en background o suspendida
Lista numero y nombre de tareas: jobs
Continuar en background: bg [%jobnum]
Continuar en primer plano: fg [%jobnum]
Enviar una señal: kill [-SEÑAL] [%jobnum]

Linux Básico LP001 Ver.1 1-65


Comandos compuestos
● Dos caminos para agrupar comandos:
Compuesto: date; who | wc -l
Ejecutar comandos back-to-back
Subshell: (date; who | wc -l) >> /tmp/trace
Todas las salidas son enviados a un solo STDOUT y STDERR

Estado de salida
● Procesos informan éxito o fracaso con una salida de estado
0 para éxito, 1-255 para fracaso
$? Almacena la salida de el mas reciente comando
exit [num] termina y establece el estado de num
● Ejemplo:
$ ping -c1 -W1 station999 &> /dev/null
$ echo $?
2

Ejecución condicional de operadores


● Los comandos pueden ser ejecutados condicionalmente basados en el estado de salida
&& representa el condicional AND THEN || representa condicional OR ELSE
● Ejemplos:
$ grep -q no_such_user /etc/passwd || echo 'Este usuario no existe'
Este usuario no existe
$ ping -c1 -W2 station1 &> /dev/null \
> && echo "estación1 esta arriba" \
> || $(echo 'estación1 esta inalcanzable'; exit 1)
estación1 esta arriba

La prueba de comandos
● Evalúa declaraciones booleanas para el uso en la ejecución condicional
Retorna 0 para verdadero
Retorna 1 para falso

Linux Básico LP001 Ver.1 1-66


● Ejemplos en formato largo:
$ test "$A" = "$B" && echo "Cadenas son iguales"
$ test "$A" -eq "$B" && echo "Enteros son iguales"
● Ejemplos en notación abreviada:
$ [ "$A" = "$B" ] && echo "Cadenas son iguales"
$ [ "$A" -eq "$B" ] && echo "Enteros son iguales"
Pruebas de archivos
● Pruebas de archivos:
-f pruebas para ver si un archivo existe y es un fichero regular
-d pruebas para ver si un archivo existe y es un directorio
-x pruebas para ver si un archivo existe y es un ejecutable
[ -f ~/lib/functions ] && source ~/lib/functions

source lee y ejecuta comandos desde archivo en el entorno de la shell actual

Scripting: Declaraciones if
● Ejecutar instrucciones basadas en el estado de salida de un comando
if ping -c1 -w2 estacion1 &> /dev/null; then
echo 'estación1 esta ARRIBA'
elif grep "estación1" ~/mantenimiento.txt &> /dev/null; then
echo 'estación1 esta realizando tareas de mantenimiento'
else
echo 'estación1 esta inesperadamente ABAJO!'
exit 1
fi

Linux Básico LP001 Ver.1 1-67


Planificar la ejecución de un proceso en fecha y hora concreta o ejecución periódica
● Para tareas a ejecutar: una sola vez usar at, en forma recurrente usar crontab
Crear at time crontab -e
Listar at -l crontab -l
Detalles at -c jobnum N/A
Remover at -d jobnum crontab -r
Editar N/A crontab -e
● No-redireccionada la salida es enviado por correo al usuario
● root puede modificar tareas en otros usuarios
El formato del fichero crontab
● Entradas consiste en cinco espacios - campos delimitados seguido de una línea de
comandos, una entrada por linea, no hay limite del largo de linea
● Los campos son minutos, horas, día del mes, mes, y día de la semana
● Lineas comentadas se inician con #
● Ver man 5 crontab para detalles
Instalación del sistema
Planificando una instalación
● ¿Que hardware tiene el computador?, verificar compatibilidad de hardware
● Leer el archivo RELEASE-NOTES en el primer CD o en http://www.centos.org
Donde se proporciona valiosa síntesis de características

Realizando una instalación


● El instalador puede ser iniciado desde:
CD-ROM o DVD-ROM, Dispositivo USB, Red (PXE)
● Soporta las siguientes fuentes de instalación:

Linux Básico LP001 Ver.1 1-68


Administrar Servicios
● ¿Que es un Servicio?
● Interface gráfica para administrar servicios
system-config-services
● Interface de linea de comando para administración de servicios
service
chkconfig

Administración de paquetes
● El Software es proveído como paquetes RPM
Fácil instalación y des instalación
Información del Software es almacenado en una base de datos local
● Los paquetes son proveídos por múltiples repositorios de CEntOS
Administración centralizada de múltiples sistemas
Fácil recuperación de errores de paquetes
Repositorios de paquetes personalizados también se puede utilizar
La herramienta YUM para la administración de paquetes
● Interfaz de rpm, remplaza up2date
● Configuración en /etc/yum.conf y /etc/yum.repos.d/
● Utilizado para instalar, remover y listar software
yum install nombre_paquete
yum remove nombre_paquete
yum update nombre_paquete
yum list available
yum list installed
Administración gráfica de paquetes
● pup
Aplicaciones->Herramientas de Sistema->Actualización de Software
Listar e instalar actualizaciones de software
● pirut
Aplicaciones->Agregar/Remover Software
Ver, instalar y remover otros paquetes

Linux Básico LP001 Ver.1 1-69


Asegurando el sistema
● Principios básicos de seguridad: Evitar correr servicios que no se necesitaran, limitar el
acceso a los servicios que se ejecutan, evite el uso de los servicios que envían datos sin encriptar
sobre la red como mensajería instantánea, pop, imap, y telnet

SELinux
● Sistema de seguridad a nivel de Núcleo
● Todos los procesos y archivos tienen un contexto
● Una política SELinux dicta cómo los procesos y los archivos pueden ínteractuar en función
del contexto, reglas de políticas no pueden ser reemplazadas, políticas por defecto no se aplica a
todos los servicios

Administrando SELinux
● SELinux errores son registrado en el sistema de registro
● SELinux puede ser deshabilitado en una emergencia
● Deshabilitar SELinux ¡no se recomienda!
● Sistema->Administración->Nivel de Seguridad y Corta Fuego, Pestaña SELinux

Filtrado de Paquetes
● El trafico de red es divido en paquetes
● Cada paquete tiene origen/destino de datos
● Los cortafuegos bloquean selectivamente paquetes

Configuración de CortaFuego y SELinux system-config-securitylevel


● Sistema-> Administración->Nivel de Seguridad y Cortafuego
Selectivamente permitir conexiones entrante por puerto, especificar las interfaces a confiar
todo el tráfico, las respuestas a las preguntas de salida siempre se acepta
● Mas configuración avanzada es posible con otras herramientas

Linux Básico LP001 Ver.1 1-70


UNIDAD 8 Administración de
usuarios, grupos y permisos

Linux Básico LP001 Ver.1 1-71


Usuarios y grupos
Usuarios
● A cada usuario se asocia un único número de ID de usuario (UID)
UID 0 identifica a root
● Nombre de usuarios y UID son almacenados en /etc/passwd
● Un directorio de trabajo es asignado a los usuarios y un programa que es ejecutado cuando
inician sesión (usualmente un shell)
● Usuarios no pueden leer, escribir o ejecutar los archivos de los demás sin permiso
Grupos
● Los usuarios son asignados a un grupo, cada grupo se le asigna un único numero ID de
Grupo (gid)
● GID son almacenados en /etc/group
● Cada usuario tiene su propio grupo primario, puede ser agregado a otros grupos para
accesos adicionales
● Todos los usuarios en un grupo pueden compartir archivos que pertenecen al grupo

Seguridad de archivos de Linux


● A cada archivo se asocia un UID y un GID
● Cada proceso se ejecuta con un UID y uno o mas GID
Usualmente determinado por quién ejecuta el proceso
● Tres categorías de acceso:
Procesos que se ejecutan con el mismo UID de el archivo (usuario)
Procesos que se ejecutan con el mismo GID de el archivo (grupo)
Todos los demás procesos (otro)
Prioridad de permisos
● Si coincide el UID, permisos de usuario son aplicados
● De otra manera, si coincide el GID, permisos de grupo son aplicados
● Si tampoco coincide, permisos de otros son aplicados
Tipos de permisos
● Cuatro símbolos son usados cuando se despliegan los permisos:
r: permiso para leer un archivo o listar el contenido de un directorio
w: permiso para escribir en un archivo o crear y remover archivos de un directorio
x: permiso para ejecutar un programa o cambiarse a un directorio y hacer un listado
largo del directorio
-: sin permiso (en el lugar de r, w, o x)

Linux Básico LP001 Ver.1 1-72


Ver los permisos de ficheros y directorios
● Los permisos de los archivos pueden ser vistos usando ls -l
$ ls -l /bin/login
-rwxr-xr-x 1 root root 19080 Apr 1 18:26 /bin/login
● EL tipo de archivo y permisos están representados por una cadena de 10 caracteres
Interpretando los permisos:
-rwxr-x--- 1 joel pingux 2948 Oct 11 14:07 miarchivo
● Lectura, escritura y ejecución para el propietario, joel
● Lectura y ejecución para los miembros del grupo pingux
● Sin permisos para todos los otros usuarios
Cambiar permisos usando representaciones simbólicas y numéricas
Cambiando propietario de un archivo

● Solo root puede cambiar el propietario a un archivo


● Solo root o el propietario puede cambiar el grupo a los archivos
● El propietario es cambiado con chown:
chown [-R] nombre_usuario archivo|directorio
● El grupo es cambiado con chgrp:
chgrp [-R] nombre_grupo archivo|directorio
Cambiando permisos – Método Simbólico
● Para cambiar los premisos de acceso:
chmod [-R] permisos archivo
● Donde los permisos pueden ser:
u,g,o ó a para usuario, grupo, otros y todos
+ ó - para conceder o negar (= para asignar de acuerdo a un patrón)
r, w ó x para lectura, escritura y ejecución
● Ejemplos:
ugo+r: Concede acceso de lectura para todos
o-wx: Niega escritura y ejecución para otros
Cambiar permisos – Método numérico
● Utiliza tres dígitos para definir numero para asignar permisos
El primer dígito especifica los permisos del propietario
El segundo dígito especifica los permisos de grupo

Linux Básico LP001 Ver.1 1-73


El tercer dígito representa permisos de los otros
● Los permisos se calculan sumando:
4 (para lectura)
2 (para escritura)
1 (para ejecución)
●Ejemplo:
chmod 640 miarchivo

Conceptos avanzados sobre usuarios, grupos y permisos


Identificadores numéricos de usuarios y grupos
● Los nombres de usuario se mapean a números de identificación de usuario
● Los nombres de Grupo se mapean a números de identificación de grupo
● Los datos almacenados en el disco duro se almacena numéricamente

Los ficheros /etc/passwd, /etc/shadow, y /etc/group


● la información de Autentificación es almacenada en archivos de texto plano:
/etc/passwd
/etc/shadow
/etc/group

Usuarios y grupos del sistema


● Ejecución de programas de esta manera limita la cantidad de daños de estos programas
que por separado puede hacer para el sistema
● Los programas de servidor como el servidor web o servidores de impresión normalmente se
ejecutan como usuarios sin privilegios, no como root
Ejemplos: daemon, mail, lp, nobody
● Ejecución de programas de esta manera limita la cantidad de daño que cualquier programa
puede hacer al sistema

Cambios en el usuario
● Herramientas gráficas
system-config-users
● Linea de comandos
useradd usermod userdel [-r]

Comandos para obtener información sobre usuarios y grupos


● Usuarios conectados: w
● Ingresos recientes: last, lastb

Linux Básico LP001 Ver.1 1-74


Permisos por defecto
● Los permisos por defecto para los directorios es 777 menos umask
● Los permisos por defecto para los archivos son los permisos por defecto para directorio sin
permisos de ejecución
● umask se establece con el comando umask.
●Para los usuarios el umask es 022, los archivos tendrán los permisos de 644, los directorios
tendrán los permisos de 755.
● root umask es 022

Permisos especiales
● Permisos especiales para archivos ejecutables:
suid: se ejecuta el comando con permisos del propietario del comando, no con los
permisos del ejecutor del comando
sgid: se ejecuta el comando como parte del grupo del comando y no como parte del
grupo del ejecutor
● Permisos especiales para directorios:
sticky bit: archivos en los directorios con el sticky bit sólo pueden ser removidos por
el propietario y root, independiente de los permisos de escritura del directorio
sgid: los archivos creados en los directorios con el sgid se asigna como grupo el
grupo del directorio

Linux Básico LP001 Ver.1 1-75


UNIDAD 9 Aplicaciones de acceso a
la red

Linux Básico LP001 Ver.1 1-76


Comunicaciones cifradas con ssh y scp
OpenSSH: Seguro shell remoto
● Seguro reemplazo para viejas herramientas de acceso remoto
● Permite autenticado, acceso encriptado a sistemas remotos
ssh [usuario@]maquina
ssh [usuario@]maquina comando
scp: Transferencia segura de archivos
● Seguro remplazo para rcp
● Otra capa por encima de ssh
scp fuente destino
Archivos remotos pueden ser especificados usando:
[user@]host:/ruta/al/archivo
Usar -r para permitir recursividad
Usar -p para preservar los tiempos y permisos
Usar -C Para comprimir flujo de datos
Clientes Xorg
● Todas las aplicaciones gráficas son clientes X, se pueden conectar a servidores X remotos
vía tcp/ip
Los datos no son encriptados pero pueden ser enviados por un túnel seguro sobre una
conexión ssh
ssh -X usuario@maquinaB xterm &
● xterm se mostrara en el servidor X de la maquinaA
● Los datos transmitidos se codifican a través de la conexión ssh

rsync: Eficiente sincronización de archivos


● Copia los archivos de manera eficiente y también de sistemas remotos
● Usa conexiones ssh segura para el transporte
rsync *.conf wendy:/home/jose/varios/
● Más rápido que scp – copia las diferencias en los archivos
rsync -avc -rsh=ssh origen destino

Autentificación basada en clave OpenSSH


● Opcional, autentificación sin contraseñas, pero aun seguro
● Utiliza dos claves generados por ssh-keygen:

Linux Básico LP001 Ver.1 1-77


Clave privada se mantiene en tu sistema
Usualmente contraseña protegida (recomendado)
Clave publica es copiada en el destino con ssh-copy-id
ssh-copy-id [usuario@]maquina
● Un agente de autentificación almacena las claves privadas descifradas
Por lo tanto, la contraseña solo es necesario ser ingresada un ves
Un agente es proveído automáticamente en GNOME
De lo contrario, ejecuta ssh-agent bash
● Las claves son agregadas al agente con ssh-add

Herramientas de diagnóstico de problemas de la red


● ping ● traceroute ● host ● dig
● netstat ● gnome-nettool (GUI)

Conceptos fundamentales para la administración de Linux


● Instalar un nuevo sistema ● Manejar usuarios y grupos
● Mantener el software al día ● Configurar la red
● Configurar servicios ● Mantenimientos de seguridad
● Casi todo lo demás!

Linux Básico LP001 Ver.1 1-78

También podría gustarte