Sug3k Administracion de GNULinux

180
Su|GE3K ADMINISTRACIÓN DE GNU/LINUX Frank Harbey Sanabria Florez @franksanabria Primera Edicion

description

Linux

Transcript of Sug3k Administracion de GNULinux

Su|GE3K

ADMINISTRACIÓN DE

GNU/LINUX

Frank Harbey Sanabria Florez@franksanabria

Primera Edicion

INDICE DE CONTENIDOLicencia......................................................................................................................................................7SOBRE DEL AUTOR................................................................................................................................8Prólogo.....................................................................................................................................................10¿Por Que Gnu/Linux?..............................................................................................................................13¿Donde Esta Linux?.................................................................................................................................15Selección De La Distribución E Instalación............................................................................................17

Recuperar Password de root por GRUB.........................................................................................35Niveles de Ejecución......................................................................................................................36Archivo /etc/inittab.........................................................................................................................36Archivo /etc/init.d/rc.......................................................................................................................37Servicios en /etc/init.d....................................................................................................................38Ventajas Generales..........................................................................................................................38Desventajas Generales....................................................................................................................38Unidades Objetos y Servicios.........................................................................................................39Servicios.........................................................................................................................................39Acciones.........................................................................................................................................40

Sistema De Archivos................................................................................................................................41Trabajando Con Gnu/Linux.....................................................................................................................46

Comando TOP................................................................................................................................49Comando free..................................................................................................................................51Comando w.....................................................................................................................................51Comando vmstat -s.........................................................................................................................51Comando who y whoami................................................................................................................52Comando id y groups......................................................................................................................52Comando lspci................................................................................................................................52Comando lsusb...............................................................................................................................52Comando lscpu...............................................................................................................................53Comando uname.............................................................................................................................53Comando uptime.............................................................................................................................53Comando lshw................................................................................................................................53Comando lsblk................................................................................................................................54Comando df....................................................................................................................................54Comando blkid...............................................................................................................................55Comando fdisk -l............................................................................................................................55Comando last y lastb.......................................................................................................................60Comando du....................................................................................................................................61Comando dmesg.............................................................................................................................61Comando arch.................................................................................................................................61Comando pstree..............................................................................................................................61Comando ps....................................................................................................................................61

2www.sugeek.co

Comandos ifconfig, ip....................................................................................................................62Comando netstat.............................................................................................................................63Comandos route -e y arp -e.............................................................................................................64Archivos de Estado del Sistema.....................................................................................................64Archivo /etc/services......................................................................................................................64Directorios:.....................................................................................................................................65Rutas Absolutas:.............................................................................................................................65Rutas Relativas:..............................................................................................................................65Trabajando con Directorios:...........................................................................................................65Trabajando con Archivos................................................................................................................66Trabajando con Archivos y Directorios..........................................................................................66Trabajando con la familia del comando z.......................................................................................67Shell globbing.................................................................................................................................67Archivos Enlaces............................................................................................................................67

Compilando el Kernel..............................................................................................................................69Comando lsmod..............................................................................................................................70Comando modinfo..........................................................................................................................71Comando depmod...........................................................................................................................71Comando insmod............................................................................................................................71Comando rmmod............................................................................................................................72Comando modprobe........................................................................................................................72Algunas Opciones de Interés..........................................................................................................73

Herramientas GNU/Linux........................................................................................................................74Comando tar....................................................................................................................................77Comando zip y unzip......................................................................................................................77Comando gzip y gunzip..................................................................................................................78

Editor de Texto vi.....................................................................................................................................80Introducción de datos......................................................................................................................80Salir y Guarar..................................................................................................................................81Corrección.......................................................................................................................................81Desplazamiento...............................................................................................................................81Búsqueda de texto...........................................................................................................................82Comandos de sustitución................................................................................................................83Copiar y Pegar................................................................................................................................83Sustitución......................................................................................................................................83Edición avanzada............................................................................................................................83Comando set...................................................................................................................................84

Editor de Texto nano................................................................................................................................85Gestión de paquetes.................................................................................................................................86Administración de Usuarios.....................................................................................................................91

adduser............................................................................................................................................94useradd............................................................................................................................................94passwd............................................................................................................................................94

3www.sugeek.co

chage...............................................................................................................................................95deluser y userdel.............................................................................................................................95Usermod..........................................................................................................................................96groupmod........................................................................................................................................96Chsh................................................................................................................................................97Chfn................................................................................................................................................97

Permisos de Archivos y Carpetas.............................................................................................................99Sticky bit.......................................................................................................................................102set gid y set uid.............................................................................................................................103

Gestión de procesos y Servicios.............................................................................................................104Comando nice:..............................................................................................................................105Comando renice............................................................................................................................105

Redirecciones, Tuberías y Filtros...........................................................................................................107Comando basename y dirname.....................................................................................................108Comando tee.................................................................................................................................108Comando grep...............................................................................................................................109Comando egrep.............................................................................................................................109Comando cut.................................................................................................................................110Comando column..........................................................................................................................110Comando tr....................................................................................................................................111Comando sort................................................................................................................................111Comando uniq...............................................................................................................................112Comando paste..............................................................................................................................112Comando diff................................................................................................................................112Coincidencia con más caracteres..................................................................................................114Ejemplos.......................................................................................................................................114

La Shell en GNU/Linux.........................................................................................................................117Regionalización(l10n)...................................................................................................................117Internacionalización (i18n)...........................................................................................................117Usos Horarios...............................................................................................................................118Codificación de Caracteres...........................................................................................................119Operador &&................................................................................................................................119Operador ||.....................................................................................................................................119Operador &...................................................................................................................................120Operador ;.....................................................................................................................................120Operador \.....................................................................................................................................120Operador #...................................................................................................................................120Agrupación de Comandos.............................................................................................................120Comando echo..............................................................................................................................121Comillas Doble “”.........................................................................................................................121Comillas Simples ' '.......................................................................................................................121Comillas invertidas ` `..................................................................................................................121Declaración de Variables..............................................................................................................122

4www.sugeek.co

Variables Tipadas..........................................................................................................................123Nuestro primer script....................................................................................................................124Control de Flujo............................................................................................................................124

Control If:.................................................................................................................................124Control case:............................................................................................................................126

Ciclos:...........................................................................................................................................126Ciclo for...................................................................................................................................126Ciclo while...............................................................................................................................127Ciclo until.................................................................................................................................128

Funciones......................................................................................................................................128Valores de retorno....................................................................................................................129Variables locales a la función...................................................................................................129Operaciones Aritméticas..........................................................................................................130

Operaciones lógicas y de comparación:.......................................................................................130Interacciones con el Usuario:........................................................................................................131

Administración de Unidades de Almacenamiento.................................................................................133Comando mount...........................................................................................................................138Comando umount.........................................................................................................................139Comando fdisk..............................................................................................................................139Habilitar las Cuotas.......................................................................................................................147Habilitar las Cuotas a Usuarios.....................................................................................................148Habilitar las Cuotas a Grupos.....................................................................................................148Preparar los Discos Duros............................................................................................................149Creando RAID con mdadm..........................................................................................................149Eliminar un RAID del sistema......................................................................................................152Volúmenes Físicos (Physical Volumen)........................................................................................153Grupo Volúmenes (Volumen Group)............................................................................................154Volúmenes Lógicos (Logical Volumen)........................................................................................155Ampliar y Reducir un VG.............................................................................................................156Ampliar y Reducir un LV.............................................................................................................159Mover el contenido de un PV a otro PV.......................................................................................162Suprimir un VG............................................................................................................................165

Administración de Red...........................................................................................................................167Logs del Sistema....................................................................................................................................174

sysklogd........................................................................................................................................174RainerScript..................................................................................................................................176

TAREAS PLANIFICADAS...................................................................................................................179SEGURIDAD EN GNU/LINUX...........................................................................................................182

Archivo /etc/sudoers.....................................................................................................................185Limites del Usuario.......................................................................................................................186

Bibliografía............................................................................................................................................189

5www.sugeek.co

LICENCIA

Esta obra esta bajo licencia de Creative Commons, la cual le permitirá distribuir y copiaresta obra cuantas veces quiera, y si piensa realizar alguna derivación de esta deberá dedar crédito a la obra mencionándola como fuente, y dicha obra derivada debe de estarbajo esta misma licencia o alguna similar, además esta obra no podrá usarse para finescomerciales a menos que cuente con la autorización del autor.

6www.sugeek.co

SOBRE DEL AUTOR

Frank Harbey Sanabria Florez, Nacido en la ciudad deIbague/Colombia el 5 de septiembre de 1989, hijo único de unpadre agricultor y madre ama de casa.

• 8 Años: Inicie clases de sistemas aprendiendo a manejar loque en su momento estaba de moda, el MS-DOS.

• 10 años: Me di cuenta que Windows Millenium no eraestable y se mantenía bloqueando, aprendí a “Formatear” yreemplacé Millenium por el Windows 98 SE.

• 14 años: Conocí el Overlocking básico y como hacerlo,además ya mi Windows 98 SE por ciertas modificaciones que había hecho separecía mas a un Windows XP.

• 15 Años: Inicio mi carrera como técnico en sistemas en un instituto salesiano,destacándome con honores.

• 17 Años: Mi primer trabajo como técnico en sistemas, y a los 3 meses me dan laoportunidad de dirigir el mantenimiento a mas de 500 computadores en unaentidad estatal.

• 19 Años: Inicio mi nueva carrera en el SENA como Tecnólogo enTelecomunicaciones. Ya Windows no se adaptaba a mis necesidades y se habíavuelto aburrido, es en donde descubro el mundo de GNU/Linux con Ubuntu 9.04 yempieza mi travesía. Usando Ubuntu como herramienta para configurar Routers, Switch, a diseñardiagramas de red, me enamoro de la consola y descubro las herramientasnecesarias que me servirían para implementar la red de un hospital estatal.Luego Cambiaría a Ubuntu por Debian y luego este ultimo por eOS, pero usandoDebian como servidor y ocasionalmente CentOS.

• 21 Años: Inicie como tecnico en un Callcenter. A los 5 meses de estar laborando seme asignaron responsabilidades de la administración de los sistemas de datos yredes de la compañía (Dominio, Servidor de Archivos, Sharepoint, Firewall, Switch).

Actualmente laboro en la misma compañía como coordinador de infraestructura, duranteel tiempo que he laborado alli he logrado algunas metas como:

• Migrar Microsoft Share Point a Alfresco • Migrar Servidor de Archvios a SAMBA• Migrar Firewall a Firewall UTM con Endian

7www.sugeek.co

• Migrar Office 2003 de 300 estaciones a LibreOffice• Generar Documentación para ISO27000, ITIL, y ISO9001

Durante mi estadía en la empresa también he realizado actividades como independiente:

• Implementar Infraestructura de Red en NoMoreCards sede Bogota• Instructor del Diplomado en Integración de Redes en Aula Matriz• Instructor para Certificación LPIC-1 en NetSecuritySolutions• Participar en como ponente en diferentes eventos (Flisol, SFD Bogota, Alcaldia de

Bogota).• Vídeos sobre GNU/Linux (https://www.youtube.com/SuGE3K).

“El conocimiento no llega solo, tienes que buscarlo instruyéndote todos los días.”

8www.sugeek.co

PRÓLOGO

La presente Obra se realiza con el fin de que usted, con pocos o medios conocimientos enGNU/Linux pueda desenvolverse en un mercado con una demanda de profesionales cadavez mayor en la utilización de este sistema. GNU/Linux se esta convirtiendo en la mejoralternativa para las Pymes y empresas en crecimiento.

Con esta, Iniciaremos un proceso largo pero interesante, iniciando con los aspectosgenerales de instalación y uso de la consola, hasta poder llegar a armar nuestra propia“Distribución” adaptada a nuestras necesidades.

Esperamos que esta obra sea de su agrado y la aproveche al máximo.

¡IMPORTANTE!Esta obra tiene como requisito que el lector tenga nociones básicas sobre arquitectura decomputadores.

No le presto mucha atención a lo que se hace con otros sistemasoperativos. No compito, Solo me preocupa hacer que Linux se

supere así mismo, no a los otros.

- Linus Torvalds -

9www.sugeek.co

¿Que Es Linux?

Linux por si solo es la base de muchos sistemas operativos, los cuales van desdedispositivos móviles pasando por electrodomésticos, llegando a grandes proyectos comobolsas de valores y misiones espaciales.

Cabe destacar el hecho que Linux no es igual a GNU/Linux ya que como se menciona enel párrafo anterior, Linux es la base y GNU es el software, la fusión de estos dos lo haceun Sistema Operativo funcional para cualquier persona.

Linux es el bien conocido Kernel, el cual es el encargado de hacer la interacción demaquina – software – usuario - software – maquina, y en cualquier distribución llámesecomo se llame tendrá el mismo Kernel, diferenciado uno del otro con las diferentesmodificaciones que cada distribución le haga a este para mejorar ciertos apartados delsoftware usado.

Linux esta licenciado bajo GNUv2 la cual permite que cualquier persona u empresa copie,modifique y realice la actividad que desee con este, dicha libertad permitió que muchasempresas usen Linux hoy en día, como IBM, HP, DELL, Google, Facebook, NASA, Bolsa deValores de NYC, y la misma Microsoft usa Linux en algunos de sus colaboradores.

¿Que Es GNU?

GNU es un proyecto fundado por Richard Stallman el 27 de septiembre de 1983, con elobjetivo de crear un sistema operativo completamente libre, este ya posee la suficientecantidad de Software para completar el sistema operativo, pero le hace falta el Núcleo, lacomunicación entre sus programas y la maquina, para ello crearon el Kernel Hurdbasándose en Unix, pero dicho kernel esta aun muy inmaduro para su correctofuncionamiento, así que se decidió usar el kernel Linux para integrar el software que yaestaba desarrollado.

GNU es el acrónimo de “GNU is not Unix” o en español “GNU no es Unix”

¿Que Es GNU/Linux?

GNU/Linux es la combinación de los anteriores desarrollos mencionados, asi que en pocaspalabras podría indicarse lo siguiente.

GNU Provee el software y herramientas para que Linux sea mas amigable con el→usuario final.Linux Provee el núcleo (Kernel) con el cual estas herramientas se comuniquen con el→Hardware.

Historia

A continuación enumeramos los hitos mas importantes dentro de la historia deGNU/Linux.

10www.sugeek.co

• Desarrollado por Linus Torvalds en la universidad de Helsinki como un hobby y esescrito en lenguaje C

• Basado en minix mas no derivado • Nombre “Interno” inicial Freax• 17 de septiembre de 1991 1ra versión publica • Febrero de 1992 nace MCC Interim Linux la primera distribución de Linux • 1993 Se adapta al proyecto GNU y nace Slakeware la distribución mas antigua • Marzo del '94 lanzada la versión 1 de Linux • 1996 la versión 2 es lanzada soportando gran cantidad de procesadores • 1998 IBM, Compaq (Hoy parte de HP), y Oracle anuncian el soporte oficial a Linux. • Torvalds escoge a Tux como mascota dibujado Por Larry Ewing. • 2002 El primer gusano conocido para Linux. Slapper-worm. • 2007 Google presenta Android el sistema operativo para Smartphones y Tablet's el

Cual esta basado en Linux .• Mayo de 2011 sale la versión 3.0 • 2013 Linux es el sistema base mas usado en todo el mundo

11www.sugeek.co

¿POR QUE GNU/LINUX?

GNU/Linux hoy en día es la mejor opción para muchas empresas/gobierno, educación yusuarios finales, ya sea para trabajos de oficina, juegos, navegación por internet,desarrollos, y prestar servicios como servidores de alto rendimiento.

GNU/Linux en Empresas/Gobierno

En las empresas GNU/Linux esta en la capacidad de prestar la gran mayoría (por no decirel 100%) de los servicios que esta necesita ya sea para estaciones de trabajo oservidores, dándole la oportunidad a esta de no depender directamente de una 3raempresa para soportar su plataforma y la inversión realizada se queda en el país dondese hizo la implementación y no se va para el arca de otros países, ayudando así aldesarrollo.

GNU/Linux es la mejor alternativa para aquellos entes que desean, seguridad, estabilidad,fiabilidad, sumándole a todo esto el ahorro de costos a largo plazo que una empresaobtiene al implementar una solución de software libre.

En 5 puntos que se divide el gasto de una empresa al migrar de una plataforma a otra,GNU/Linux solo requiere la inversión en 3.

En la siguiente tabla se relaciona los gastos que se realiza al implementar softwareprivativo y software libre.

SoftwarePrivativo

Software Libre

Licencia ✔ ✘

Capacitación ✔ ✔

Implementación ✔ ✔

Soporte ✔ ✔

Renovación ✔ ✘

12www.sugeek.co

GNU/Linux en la Educación

Usar GNU/Linux en entes educacionales fomenta el desarrollo mental ya que alienta a losestudiantes a desarrollar o indagar mas sobre dicho sistema, ayudando asi al desarrollointegral del alumno y depender de si mismo y no de un 3ro. Además de dicho desarrollointegral que tendría el alumno, la utilización de herramientas de software libre, hace quelas instituciones inviertan menos en software y mas en material didáctico.

Existen muchas distribuciones GNU/Linux enfocadas a la educación y software para quelos alumnos aprendan el manejo de este sistema, pero GNU/Linux no solo se enfoca en elaprendizaje de su funcionamiento si no que también alienta a los mas pequeños aaprender con software sobre Matemáticas, Física, Calculo, Química y muchas mas áreasde interés según sea el enfoque de cada instituto.

Cabe destacar que la gran mayoría de estar herramientas son gratuitas y acceso publico,se recomienda realizar donaciones a las empresas desarrolladoras de estos software paraalentar dicho trabajo para que asi sigan mejorando dia a dia.

GNU/Linux para Usted

Es y sera la mejor alternativa, ya que el uso normal de los usuarios es la navegación porinternet, cliente de correo, y software de ofimática, todo esto se encuentra en GNU/Linux.GNU/Linux tiene una distribución para cada uno, para el científico, matemático,diseñador, DJ, desarrollador, etc.

Además dejar a un lado la piratería y estar tranquilo de que el software que usa estotalmente legal es otra de las ventajas de GNU/Linux, y mencionar el hecho de que notendrá que preocuparse por los virus, troyanos y demás infecciones que afectan alsoftware privativo, esto no quiere decir que no existan virus y demás en GNU/Linux soloque es mas difícil que sea infectado.

13www.sugeek.co

¿DONDE ESTA LINUX?

Actualmente Linux se encuentra en cualquier dispositivo que imaginemos, solo pormencionar algunos:

• Automóviles• Smartphones• Neveras• Hornos Microondas• Lavadoras• Televisores• Satélites• Servidores• Portátiles• Tablets• Navíos• Y un largo etc.

Además grandes compañías y gobiernos usan hoy en día Software Libre y GNU/Linux.

• Facebook• Google• IBM• Gobierno Alemán• Bolsa de Valores• Ejércitos • El 80% de los sitios web están sobre GNU/Linux• El 98% de los 500 servidores mas poderosos están sobre Linux.

Distribuciones

Como ya mencionamos, GNU/Linux tiene diferentes sabores para cada uno, en estaocasión mencionaremos algunas con sus derivados y a quienes están enfocadas.

• Debian (Servidores y Usuario Final)◦ Ubuntu (Servidores y Usuario Final)

▪ Kubuntu (Usuario Final)▪ Edubuntu (Instituciones educativas)▪ Lubuntu (Usuario Final)▪ Xubuntu (Usuario Final)▪ Ubuntu Studio (Editores Multimedia)▪ Linux Mint (Usuario Final)

14www.sugeek.co

▪ Zentyal (Servidores)▪ ElementaryOS (Usuario Final)

• Slackware (Servidores y Usuario Final)◦ Suse (Servidores)

▪ OpenSUSE (Servidores y Usuario Final)• RedHat (Servidores)

◦ Fedora (Servidores y Usuario Final)◦ Centos (Servidores y Usuario Final)

▪ Elastix (Servidor de Voz IP)

Faltan muchas distribuciones, las cuales las podrá observar en: Distribuciones Linux -Wikipedia.

15www.sugeek.co

SELECCIÓN DE LA DISTRIBUCIÓN E INSTALACIÓNSeleccionar la distribución ideal para lo que deseamos hacer, es muy importante, ya quetodas tengan el mismo núcleo no todas se van a comportar lo mismo. Por mencionaralgunos aspectos, CentOS es la distribución predilecta para servidores y la mejoralternativa para implementar sistemas de PBX con Asterisk ya que la mayoría decontroladores para dichas implementaciones esta desarrollados para esta distribuciónpero no significa que no se pueda usar en otras tareas. La otra distribución por excelenciaes Debian, la cual es la alternativa que en esta ocasión vamos a usar, ya que el personalcapacitado sobre Debian es mayor y la documentación sobre Debian también esabundante.

Ya que tenemos nuestra distribución seleccionada procederemos con la descarga de laimagen y instalación.

La imagen de Debian la podremos descargar dehttp://www.debian.org/CD/http-ftp/#stable.

Antes de iniciar una instalación debemos de tener en cuenta lo siguiente.

Finalidad: Se va usar como servidor o como estación de trabajo? Teniendo en cuentaesto podremos guiarnos adecuadamente, la finalidad de este sera como servidor.

Hardware: En algunas ocasiones Debian no es la mejor opción en cuanto a driversprivativos, por ende debe de tenerse en cuenta si el hardware que tiene nuestro servidores soportado por Debian, CentOS en cambio posee en su interior ya dichos driversprivativos. Además de esto debemos de tener en cuenta cuantos usuarios se van aconectar al servidor y que servicio va a prestar, por que el consumo de un servidor decorreo no es lo mismo que un servidor web o de archivos.

Limitaciones: Si vamos a instalar a nuestro riesgo un servidor (No contratamos a un3ro) y no poseemos la experiencia o conocimiento suficiente sobre la distribución yservicio a implementar, no vamos a tener soporte oficial si no directamente por lacomunidad o foros, los cuales no siempre tienen las mejores soluciones.

16www.sugeek.co

Instalación

Después de haber descargado y grabado en un DVD la imagen de Debian procederemosa realizar la instalación. Al iniciar el computador/servidor con el medio dentro de launidad lectora, aparecerá la ventana de instalación. Debian posee 2 formas de realizar lainstalación (además de la forma avanzada), una es la clásica y la otra es usando unentorno gráfico. Lo primero que vamos a ver es la selección del idioma aquí, seleccionamos el idioma conel cual va a quedar nuestro sistema.

17www.sugeek.co

Luego sigue la selección de ubicación del sistema y la distribución del teclado.

18www.sugeek.co

Esperamos un momento a que algunos componentes se carguen para poder continuarcon la instalación.

Procederá a solicitar nombre de la maquina, configuración de la red (si no posee servidorDHCP), dominio, contraseña para el usuario root, la creación del usuario del sistema y surespectiva contraseña.

19www.sugeek.co

20www.sugeek.co

21www.sugeek.co

Después de un rato que el sistema cargue, nos encontraremos frente al sistema departicionado del sistema.

• Guiado – Utilizar todo el discoEsta opción realiza de forma automatizada el particionado y la instalación delsistema.

• Guiado – Utilizar el disco completo y configurar LVMEsta opción es usar todo el disco y de paso configurar el LVM (Logical VolumeManager)

• Guiado – Utilizar todo el disco y configurar LVM Cifrado.Lo mismo que la opción anterior solo que le agrega cifrado al disco.

• Manual Como su nombre lo indica, es hacer de forma manual las particiones y demás, estaes la que vamos a escoger.

Como vemos en la siguiente imagen, me muestra los discos que se tienen en estemomento configurados, el que se muestra es un SCSI3 en el puerto 0,0,0 y estaidentificado como sda, además cuenta con una capacidad de 8,6GB y es de referenciaVBOX HARDDISK. Procedemos a seleccionarlo y a crear la tabla de particiones. Quedandocomo se muestra en la segunda imagen.

22www.sugeek.co

23www.sugeek.co

Seleccionamos el espacio libre y creamos una nueva partición de 250 MB (Tener cuidadocon las unidades escribir 250 MB tal cual, con el espacio) luego nos preguntara que tipode partición es si primaria o lógica, la seleccionamos como primaria e indicamos que va aser en el principio del disco.

Tendremos una pantalla en la cual nos indicara las propiedades para particionar el disco.

24www.sugeek.co

Esta partición al ser tan pequeña no cabra mucha información pero sera una de las masimportantes, ya que contara con los archivos necesarios para arrancar el sistema.Además desde este apartado podremos crear los Volúmenes Lógicos, los RAIDS porsoftware etc.

• Utilizar Como Ingresamos y seleccionamos el sistema de archivos ext4→• Punto de Montaje En este seleccionamos el path a montar en dicha partición. (En→

esta ocasión seleccionamos el path /boot)• Opciones de Montaje Las dejamos por defecto→• Etiqueta Si desea ingresar un nombre para la partición acá lo podrá hacer.→• Bloques Reservados Lo dejamos tal cual→• Uso habitual Podemos definir que vamos a hacer con esa partición, la dejamos→

tal cual.• Marcar Como Arranque Esta opción la activamos, ya que esta partición es la que→

contiene los archivos de arranque.

Por ultimo seleccionamos “Se ha terminado de definir la partición” y nos devolverá a laconfiguración del disco nuevamente, pero esta vez ya muestra la partición que esta porescribirse.

25www.sugeek.co

Seleccionamos el espacio libre, le asignamos el restante de espacio indicamos que es unapartición lógica, estará al principio del disco y definimos el punto de montaje la raiz (/),indicamos el sistema de archivos ext4 y seleccionamos nuevamente “Se ha terminadode definir la partición”.

Ya con esto, vamos a finalizar el particionado y escribimos los cambios en el disco,aparecerá una advertencia indicando que hace falta definir el área de intercambio o/swap, esta partición es necesaria cuando el equipo tiene poca memoria ram, pero laveremos mas adelante para administrarla mas eficazmente. A dicha advertencia leindicamos que no, y por ultimo me pide confirmación de querer continuar con lainstalación, procedemos con un SI y empezara la instalación. Dicha instalación sedemorara unos 10 minutos dependiendo del computador donde se esta realizando lainstalación.

Luego de esperar un rato, solicitara si deseamos insertar el otro DVD (Decimos que no).Luego seleccionamos la descarga de repositorios por red, aparecerá desde dondequeremos descargar los diferentes repositorios, buscamos nuestro país (o el país mascerca, el cual en ocasiones no es la mejor opción), lo seleccionamos y continuamos con lainstalación. (Algunas ocasiones mostrara mas de un solo servidor en dicho país,seleccionamos el que mejor nos parezca).

26www.sugeek.co

Después de haber esperado un rato, preguntara si deseamos participar enpopularity-contest el cual enviara de forma anónima información a los desarrolladoressobre los paquetes que usamos (Es a criterio de cada uno) y luego listara los programasque podemos instalar, solo seleccionamos Utilidades de sistema y Servidor SSH.

27www.sugeek.co

Ya por ultimo nos preguntara si deseamos instalar el GRUB a lo cual respondemosafirmativamente.

Esperamos a que termine las configuración, procederá a reiniciarse y ya tendremos elsistema listo para loguearnos, ya sea con la cuenta root o con el usuario que hemoscreado durante el proceso de instalación.

Proceso de Arranque de GNU/Linux

• Inicio de la BIOS → Esto es normal en cualquier sistema ya sea Linux o no, laBIOS (Basic Input Output System) es el encargado de reconocer todos losdispositivos que se encuentren conectados al sistema o placa base del servidor o

28www.sugeek.co

computador (Unidades, RAM, Procesador, Bus, Etc) y según la configuración deesta se iniciara con la unidad seleccionada. (Normalmente para ingresar a esta ycambiar algunas configuraciones se oprime F2, o F9, o Supr).

¡IMPORTANTE!Tener cuidado si se ingresa a esta memoria ya que podría dañar el servidor. Se recomienda leer el manual de dicho sistema antes de hacer cualquier actividad.

• Ejecución del Disco con GNU/Linux → Después que la BIOS detecta todos losdispositivos y arranca con la unidad seleccionada, esta buscara dentro del MBR dedicho disco la información necesaria o el encargado de administrar la ejecucióndel(os) sistema(s) como podría ser el GRUB.

• Selección del Sistema y Kernel Luego que el GRUB carga este mostrara (o→puede que no) los distintos sistemas instalado en el servidor, así como lasdiferentes versiones de kernel instalados si es un servidor GNU/Linux.

Trabajando con el GRUB2

(GRand Unified Bootloader) Es el encargado de la gestión de arranque de los distintosKernel o Sistemas Operativos que se encuentren instalados en los discos del sistema.

GRUB2 Presente ya en la gran mayoría de distribuciones GNU/Linux es una versiónreescrita de GRUB, mejorando notablemente la compatibilidad con varios sistemas dediscos, BIOS, etc.

Los archivos de inicio de GRUB2 se encuentra en /boot/grub, la configuración del menúesta en /boot/grub/menu.cfg, pero cuidado, estos archivos NO se editan, ya que sonlos usados por el sistema, para ello vamos a ver donde se configura.

Dentro del archivo /etc/default/grub contiene las variables que define las opciones delGRUB2 y opciones por defecto de los núcleos GNU/Linux.

Variable Significado

GRUB_DEFAULT Entrada del menú, seleccionado por defecto es el 0

GRUB_HIDDEN_TIMEOUT Tiempo de menú Oculto, para después iniciar el sistemapredeterminado, para mostrarlo el usuario tiene que oprimir[ESC] o [SHIFT]

GRUB_TIMEOUT Duración del menú del GRUB2 antes de iniciar el sistema

GRUB_HIDDEN_TIMEOUT_QUIET Define si se muestra o no el contador con true o false

GRUB_DISTRIBUTOR Linea de comandos que define la generación automática deltexto en la entrada del menú

GRUB_CMDLINE_LINUX_DEFAULT Parámetros pasados al núcleo Linux, únicamente para entradas“normales”

GRUB_CMDLINE_LINUX Parámetros por defecto para todos los núcleos Linux

29www.sugeek.co

Variable Significado

GRUB_GFXMODE Resolución utilizada por el GRUB2

GRUB_TERMINAL Sin comentar y con valor console, se activa el modo texto

Los menús se guardan en /etc/grub.d/

root@sugeek:~# ls -l /etc/grub.d/ total 56 -rwxr-xr-x 1 root root 7806 dic 6 05:06 00_header -rwxr-xr-x 1 root root 5522 jul 19 2013 05_debian_theme -rwxr-xr-x 1 root root 7877 dic 6 05:06 10_linux -rwxr-xr-x 1 root root 6449 dic 6 05:06 20_linux_xen -rwxr-xr-x 1 root root 6675 dic 6 05:06 30_os-prober -rwxr-xr-x 1 root root 1388 jul 19 2013 30_uefi-firmware -rwxr-xr-x 1 root root 214 jul 19 2013 40_custom -rwxr-xr-x 1 root root 95 jul 19 2013 41_custom -rw-r--r-- 1 root root 483 jul 19 2013 README

Estos archivos se ejecutan en el orden de listado (orden alfanumérico de formapredeterminada) de ls. Es por este motivo que empieza con un valor numérico. Los dosscripts de interés son 10_linux y 30_os-pober.

Si se verifica el primero, se encontrara como elemento particular los bucles que buscanlos núcleos Linux en /boot y en la raiz, asi como ramdisk iniciales, para detectar losdistintos núcleos Linux y crear automáticamente las entradas asociadas añadiendo losparámetros por defecto.

En el segundo, vera que se ejecuta el comando os-prober, que busca el resto desistemas operativos en los restantes discos o dispositivos, como Windows, Mac OS, Unix,etc.

Se puede agregar uno de forma manual utilizando la plantilla 40_custom y paraactualizar las tablas de grub se usa update-grub

Recuperar Password de root por GRUB

En ocasiones se presenta que por algún motivo y otro se perdió la contraseña del usuarioroot, para poderla recuperar se puede realizar por medio del GRUB, acá explicamoscomo.

Al iniciar nuestro sistema y tener al frente el menú de GRUB, vemos que la opción e nospermite editar las lineas de boot, nos dejara ver las lineas de “booteo”, para elloseleccionamos la que indican kernel y nuevamente presionamos e a lo cual nos dejaraeditarlas, al final de la linea del kernel (La que indica vmlinuz) agregamosinit=/bin/bash (Este cambio es temporal, próximo reinicio el sistema dejara tal cual laslineas), luego solo queda arrancar el sistema con la combinación de tecla [CTRL] + [X].

30www.sugeek.co

Ya dentro del sistema nos queda solo montar la unidades en forma de escritura, ya queestán montadas en forma de solo lectura, para ello ejecutamos el comando mount -n -oremount,rw / ya con esto tenemos funciones de root, y podremos cambiar nuestropassword con el comando passwd.

Después de haberlo cambiado solo queda reiniciar el sistema y listo.

Init System V

El Proceso init es el primer proceso que arranca y el ultimo en ser cerrado al apagarse elsistema, tiene como principal función ejecutar todos los demás procesos de formaOrdenada según sea la necesidad. Se podría decir que el INIT es el proceso padre de losdemás procesos y tiene como PID 1.

Este sistema de arranque de forma secuencial tiene un defecto, el cual demora elproceso de arranque del sistema, dicho problema es solventado con SystemD.

La configuración del init lo podemos encontrar en /etc/inittab, sin este archivo elsistema no podrá arrancar, y se tendría que recuperar desde un medio externo.

¡IMPORTANTE!Init o SystemV fue soportado hasta la versión 7 de Debian, desde la Versión 8 se inicio el proceso de migración a systemd.

Niveles de Ejecución

Existen 6 posibilidades principales de arrancar un sistema GNU/Linux.

◦ Init 0 o runlevel 0 Apaga el Sistema →◦ init 1 monousuario si entorno de red ni gráfico (CLI o GUI).→◦ init 2 Multiusuario sin gestor de red ni gráfico (CLI o GUI).→◦ init 3 Multiusuario sin entorno gráfico pero con entorno de red.→◦ init 4 Sin uso.→◦ init 5 El por predeterminado, con entorno gráfico, de red y multiusuario.→◦ Init 6 Reinicia el sistema→

Dicha formas de arranque se podrán configurar en el archivo /etc/inittab, ademásalgunas distribuciones usan los niveles del 7 al 9 los cuales son totalmente validos.

Archivo /etc/inittab

A continuación se define las variables de dicho archivo, así como su estructura.

Id:Niveles:acción:comando

31www.sugeek.co

Campo Descripción

id Identificador único del proceso

Niveles Muestra los niveles de ejecución a los que se aplica esta entrada.

Acción Identifica el modo en que el proceso que está especificado en el campo delproceso se ejecutará.

Comando Define el comando o la secuencia de comandos para ejecutar.

La acción es muy importante, ya que define las actividades de init durante el arranque ycambio de nivel, las principales acciones son:

Acción Significado

initdefault Define el nivel por defecto durante el boot y el inicio de init

sysinit Se ejecuta una única vez durante el arranque del sistema

boot Idéntico al anterior pero después del sysinit

bootwait Idem, pero init espera el final de la ejecución del comando antes de continuarleyendo el archivo inittab

off Se ignora la linea

once Se ejecuta el comando a cada cambio de nivel para los niveles especificados

wait Idem, pero init espera al final de la ejecución antes de proseguir

respawn El comando se ejecuta para los niveles correspondientes. Si el procesotermina, vuelve a arrancarse de nuevo automáticamente. Es el caso para losterminales si un usuario se desconecta de ellos.

powerwait Inicia el comando si el servidor es alimentado mediante una UPS

powerfail Idem, pero sin esperar el final de ejecución del comando

powerokwait Se ejecuta el comando cuando se restablece la corriente

powerfailnow Comando de ultimo recurso cuando la alimentación de emergencia esta casivacía

ctrlaltdel Init recibe una señal SIGINT procedente de una secuencia [CTRL][ALT][SUPR]

En este archivo también encontramos configuradas las consolas virtuales conocidas comotty, las cuales se acceder con la combinación de teclas [Ctrl ] + [Alt ] + [F1-F6 ] la [F7]en la mayoría de distribuciones esta asociada a la interfaz gráfica.

Archivo /etc/init.d/rc

Dicho archivo o script inicia el nivel de ejecución deseado, es responsable del inicio y dela parada de los servicios asociados cuando el nivel de ejecución cambia.

Después que inicia nuestro sistema con sus respectivos demonios se procede a iniciar elservicio getty el cual es el encargado de iniciar la sesión en una terminal, getty es elencargado de solicitar usuario y contraseña para poder ingresar a CLI, este usuario y

32www.sugeek.co

contraseña getty lo obtiene de los archivos /etc/passwd y /etc/shadow asi como loscorrespondientes mensajes de bienvenida desde /etc/motd . Cuando se cierra la sesiónde un terminal getty realiza un respawn para solicitar nuevamente usuario y contraseña.

Servicios en /etc/init.d

Directorio se define que servicios se iniciaran, pararan, o reinician según el nivelseleccionado. Para cada nivel de ejecución podemos encontrar un directorio.

root@sugeek:~# ls /etc/rc rc0.d/ rc2.d/ rc4.d/ rc6.d/ rcS.d/ rc1.d/ rc3.d/ rc5.d/ rc.local

Cuando el init arranca llamara primero a los scripts dentro del directorio /etc/rcS.d queson servicios single, luego procederá a iniciar el sistema según el runlevel seleccionado.Cuando verifiquemos dichos directorios veremos algo como.

root@sugeek:~# ls /etc/rc5.d/ README S14nfs-common S17acpid S17exim4 S20rc.local S01motd S16rsyslog S17atd S17ssh S20rmnologin S13rpcbind S16virtualbox-guest-utils S17cron S19bootlogs

Como se podrá observar, inicia con una S pero podría iniciar con una K, la S indica queinicia el servicio, la K que lo “Mata”, luego le procede un numero, el cual es el orden deinicio o “Muerte” y por ultimo el servicio que se ve afectado.

Systemd

Este remplazo a init o system v en Debian a partir de la versión 8, aunque ya en algunasdistribuciones como Fedora ya lo implementan, lo malo de este nuevo “Gestor deProcesos”, es el hecho que solo es compatible con Linux, por este motivo hubo un revuelodentro de la comunidad Debian, ya que este no solo tiene núcleo Linux si no tambiénversiones con núcleo BSD y Hurd, haciéndolo completamente incompatible. Podemos vertabla comparativas en http://0pointer.de/blog/projects/why.html

Ventajas Generales

• Ejecución de procesos de inicio de forma asíncrona, permitiendo ejecutar variosprocesos al tiempo aprovechando los hilos del procesador y ejecutando el sistemamas rápido.

• Gestión de dependencias de procesos mas veloz al utilizar invocaciones afunciones en el núcleo Linux.

• Posee interfaz gráfica en GTK para la gestión de procesos

Desventajas Generales

• Solo disponible para núcleo Linux

33www.sugeek.co

• Desarrollo muy Joven• Se cree el Dios todo poderoso de GNU/Linux• Requiere reinicio para aplicar cambios al kernel

Unidades Objetos y Servicios

En Systemd, el concepto de nivel de ejecución ya solo existe para la compatibilidad conSystemV. El estado deseado por el sistema después de haber ejecutado los servicios sellama la unidad objetico o target unit. El componente básico de systemd es launidad o unit. Existen Varias: servicios, sockets, periféricos, objetivos, etc. Un objetivoes básicamente el punto de sincronización entre unidades en espera. De este modo,dispondrá, por ejemplo, de unidades objetivos correspondientes a cada nivel deejecución, pero puede llamarles como desee.

Las definiciones de las distintas unidades se encuentran en /lib/systemd/system. Lasunidades objetivos o los servicios que deben ser gestionados por el sistema durante elarranque se ubican en /etc/system/system, en forma de enlaces simbólicos o copiasde los archivos anteriores.

Puede activar o definir varios objetivos al mismo tiempo no limitarse a uno solo, único ypesado. Por ejemplo, un objetivo contendrá la activación de los servicios de red, otro, losservicios de audio y un ultimo para el inicio del entorno gráfico, etc. Un Objetivo se puedeagrupar en otro.

Servicios

Los servicios acaban con el sufijo .service. A continuación se muestra un ejemplo con elcontenido del servicio bluetooth que representa sus dependencias y su comando deejecución:root@sugeek:/lib/systemd/system# cat bluetooth.service [Unit] Description=Bluetooth service After=syslog.target [Service] Type=dbus BusName=org.bluez ExecStart=/usr/sbin/bluetoothd -n StandardOutput=syslog

[Install] WantedBy=bluetooth.target

La linea WantedBy, esta linea sirve para indicar que este servicio es necesario para elobjetivo bluetooth.target. Un objetivo no define que servicios gestiona, pero cada serviciodefine que unidad es necesario, por lo tanto, es factible construir un árbol dedependencias.

34www.sugeek.co

Acciones

El comando sytemctl permite controla la ejecución de servicios

• Systemctl Lista las unidades activas→• Systemctl –all Muestra todas las unidades (activas, inactivas)→• systemctl stop servicio.service Parar el servicio→• systemctl restart servicio.service Reiniciar el servicios→• systemctl start servicio.service Iniciar el servicios→• systemctl reload servicio.service Recarga la configuración del servicio→

35www.sugeek.co

SISTEMA DE ARCHIVOSGNU/Linux Tiene el sistema de archivos ext de forma predeterminada, este a su ves haido evolucionando para irse adaptando a las necesidades del mercado, ya que en suversión mas reciente ext4 el cual fue desarrollado por Mingming Cao, Dave Kleikamp,Alex Tomas, Andrew Morton y otro grupo de personas, este sistema de archivos cuentacon las siguientes características.

• Considerado un sistema de archivos de transición a btrfs• Maneja volúmenes de hasta 1 Exibyte• Ficheros individuales de hasta 16 Terabytes• Compatibilidad con anteriores y futuras versiones• Soporta hasta 64000 subdirectorios• Desfragmentacion en caliente de forma automática• Chequeo de Archivos mas veloz• Journaling para recuperarse ante desastres

Aunque el sistema de archivos btrfs a la escritura de este documento, aun seencontraba en fase de desarrollo, lo cual no se recomienda para sistemas en producción.

Dentro de las ventajas que tiene este sistema de archivos es:

• Las mismas ventajas del ext4• Posibilidad de Crear snapshots en caliente • Soporte de quotas por default• Verificación de Datos para corroborar integridad• Permite funcionalidades de LVM

◦ Redimencionar las Particiones en Caliente◦ Agregar discos en caliente y adaptarlo a una particion “Virtual

Además GNU/Linux esta en la capacidad de soportar la lectura/escritura de sistemas dearchivos como lo son el NTFS, Fat, Fat16, Fat32, XFS, raiserfs, xfs, y muchos mas.

Directorios y Arquitecturas

GNU/Linux se basa en un orden de sus directorios totalmente jerárquico tomando comoinicio el / “Slash” el cual sera el punto de montaje de los diferentes dispositivos y demásdirectorios.

/ Este es el directorio Raiz, es el directorio principal.

/bin Este directorio contiene los programas ejecutables que cualquier usuario podrá usar oejecutar.

/boot Contiene los archivos encargados del arranque del sistema.

36www.sugeek.co

/dev Archivos especiales o de dispositivos haciendo referencia a los dispositivos físicos.

/etc Contiene los archivos/directorios de configuración de los servicios prestados por lamaquina local, como el dhcp, X11 (Video), dns, etc.

/etc/skel Archivos que al crear una cuenta nueva en el sistema se copian estos archivos aldirectorio home de la cuenta creada.

/home En este directorio se guardan la estructura de directorios/archivos de los usuarios

/lib Este directorio contiene las librerías compartidas que son necesarias para ejecutarprogramas e iniciar el sistema.

/media Este directorio contiene las unidades montadas como CD/DVD.

/mnt Es similar a la anterior, pero a diferencia que en este directorio se montan lasunidades temporales como USB. (No en todas las distribuciones es lo mismo).

/opt Este directorio contiene archivos estáticos o aplicaciones independiente que traen suspropias librerías.

/proc Este directorio contiene información sobre el funcionamiento y el hardware delsistema.

/root home del usuario root.

/sbin Similar al directorio /bin pero a diferencia de este, es que los ejecutables dentro de/sbin son solo ejecutados por usuarios con permisos especiales o root.

/tmp Contiene los archivos temporales del sistema.

/usr Este directorio usualmente contiene la configuración de los usuarios y aplicacionesque este usa.

/var Este directorio los archivos que cambian de tamaño dinámicamente o por intervencióndel usuario, normalmente se encuentra los logs del sistema y aplicativos.

Toda esta información podrá encontrarla escribiendo en su consola el comando man hier

Tipos de Archivos

En GNU/Linux todo son archivos.

• Archivos que tienen los datos del usuario• Los Archivos que contienen y proveen la jerarquia de otros Archivos (Directorios)• Los archivos Enlaces que son como un “Acceso Directo” a otro archivo.• Los archivos de Dispositivos que encontramos en el directorio /dev• Archivos Binarios o Ejecutables

Inodo

Hemos hablado sobre los inodos en el transcurso del libro, pero no hemos entrado adefinirlo a profundidad. En pocas palabras el inodo es el encargado de tener toda lainformación sobre un archivo, excepto el nombre de este, el cual esta asociado dentro dela información que contiene el archivo tipo catalogo o mas conocido como carpeta. Elnumero de un inodo es único dentro de un sistema de archivos, además la cantidad de

37www.sugeek.co

inodos dentro de un sistema de archivos define la cantidad de archivos que se puedencrear.

El inodo tiene como información:

• Tamaño• ID del periférico• Propietario• Grupo Propietario• Número del inodo• Permisos• Fecha de ultimo acceso• Fecha de ultima modificación• Información de ubicación de las partes del archivo dentro del sistema de archivos• Contador de enlaces

Con el comando df -i podremos observar el total de inodos de cada sistema de archivos,asi como los usados y libres.

Además si queremos ver las características de un archivo con respecto a su inodo, bastacon escribir el comando stat.

root@sugeek:~# stat sugeek Fichero: «sugeek» Tamaño: 0 Bloques: 0 Bloque E/S: 4096 fichero regular vacío Dispositivo: fe00h/65024d Nodo-i: 42619 Enlaces: 1 Acceso: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Acceso: 2014-05-06 20:36:14.546982597 -0500 Modificación: 2014-05-06 20:36:14.546982597 -0500 Cambio: 2014-05-06 20:36:14.546982597 -0500 Creación: -

Identificando Dispositivos

La identificación de los dispositivos en GNU/Linux es relativamente fácil, ya que segúnsea el tipo de dispositivo se identifica con letras y según la cantidad, se enumera cadauno.

38www.sugeek.co

Para tomar como ejemplo, utilizaremos un disco sata que es reconocido como sd.

s d a1...... | | |_______El # (Puede ser 1, 2, 3 4, 5 etc) identifica la partición dentro del disco. | |________Identifica el Numero del Disco (a = 1err disco, b = 2do disco, etc) |___________Identifica el tipo de dispositivo.

El resto de dispositivos se enumera de una forma similar (por no decir igual).A continuación listaremos los distintos tipos de dispositivos que reconoce GNU/Linux.

Dispositivo Nomenclatura Descripción

Unidad de Diskette fd

Unidad de Diskette fd0 1ra Unidad de Diskette

Disco Duro / DVD IDE hd

Disco Duro / DVD IDE hda Disco Maestro en el Bus IDE 0 (hda1 1ra partición de hda)

Disco Duro / DVD IDE hdb Disco Esclavo en el Bus IDE 0 (hdb5 5ta partición de hdb)

Unidad SCSI (SATA) sd

Unidad SCSI (SATA) sda 1ra Unidad SCSI conectada al puerto sata0

Unidad SCSI (SATA) sdb 2da Unidad SCSI conectada al puerto sata1

Unidad de DVD SCSI scd

Unidad de DVD SCSI scd0 1ra Unidad de DVD con identificador mas bajo

Puerto Paralelo lp

Terminales o Consolas tty Usuarios Logueados localmente

Terminales Remotas pty Usuarios Logueados de forma remota

Puertos Seriales ttys

Interfaces de Red Cableada

eth

Interfaces de Red Cableada

eth0 1ra interfaz de red

Red Inalámbrica wlan

Red Inalámbrica wlan0 1ra interfaz de red inalámbrica

Periféricos

Todos los dispositivos como teclados, mouse, auriculares, impresoras son asociados a unarchivo, y estos dispositivos son catalogados en archivos especiales según sea el caso yse podrán observar al listar el contenido del directorio /dev/ el primer carácter de lospermisos indican el tipo de archivo (Tema visto mas adelante en permisos).

39www.sugeek.co

• c Dispositivo tipo carácter, envía información bit por bit, o solo un Byte a la vez,→ideal para mouse, teclados, puertos paralelos, puertos de comunicación (com),terminales.

• b Dispositivo tipo bloque, como son las unidades de almacenamiento sea cual→sea.

• s Dispositivo tipo socket, lo cual permite una comunicación entre los distintos→procesos del sistema.

• Otros Archivos Como /dev/null o /dev/zero, el primero es el “Hoyo Negro” de→GNU/Linux, el segundo genera una secuencia de ceros.

Los dispositivos para su reconocimiento y funcionamiento debe de ser cargados durantela carga del sistema o después de esta. El servicio encargado de la carga de losdispositivos es udev (Su respectiva configuración la encontramos en /etc/udev/), elcual crea el archivo solamente de los dispositivos conectados (En caliente o en frío) parala comunicación del sistema con el kernel. Udev fue el remplazo de devfs. Para obtenerinformación de cierto dispositivo, se utiliza el comando udevadm info –query=all–name /dev/dispositivo

¡IMPORTANTE!udev es remplazado por systemd en la versión 8 de Debian.

Al listar el contenido del directorio /dev/ con ls -l en la parte donde normalmente esta eltamaño del archivo, se identifican con el numero mayor, el driver del dispositivo, y el numero menor se suele identificar el periférico o dispositivo.

Como es conocido por la gran mayoría de personas, las USB soporta una inimaginablecantidad de dispositivos, los cuales deben de ser catalogados según su función y versión,ya que no es lo mismo un medio masivo a un teclado, y en ocasiones es necesariobloquear el acceso a medios masivos por USB pero que el teclado siga funcionando, paraello existen unos módulos especializados para este tema, los cuales están integrados auno solo el cual es usbcore. El cual tiene las api para soportar las distintas versiones deUSB como lo son la versión 1, 1.1, 2.0 y 3.0, los cuales se encuentran soportados dentrode la api xhci_hcd (Ultima API desarrollada por Intel para soportar todas las versiones deUSB)

Para obtener mas información al respecto dirigirse a: https://www.kernel.org/doc/htmldocs/usb/

40www.sugeek.co

TRABAJANDO CON GNU/LINUXEl Trabajo con GNU/Linux por consola o shell (CLI), para algunos es el impedimento deusar GNU/Linux, aunque ya muchos saben las ventajas que este tiene, pero existensoluciones como Zentyal la cual es un servidor GNU/Linux basado en Ubuntu con una GUIvia web y su uso es literalmente fácil.

Cuando iniciemos nuestro servidor Debian, nos encontraremos con una solicitud de login,el cual podría ser con root o con el usuario que se creo. Solamente es loguearnos condichas credenciales y ya podemos trabajar con nuestro Debian, tendremos una consolacon la siguiente estructura del prompt.

usuario@nombremaquina:~$ ↓ ↓ ↓↓ 1 2 34

Desglosemos este prompt:

1. Indica el nombre del usuario con el que estamos logueados.2. Indica el nombre del host.3. indica el path o ruta donde nos encontramos el ~ indica que estamos en el home

del usuario.4. Tipo de Usuario, el $ indica un usuario normal, el # indica el usuario root

Los Shells poseen tanto comandos internos como externos (La gran mayoría suministradopor GNU). Para saber si un comando es interno o externo solo es ingresar el comandotype y el comando que deseamos saber. El resultado de esto con el comando cd seria la siguiente:

usuario@sugeek:~$ type cd cd es una orden interna del shell

Y con el comando fdisk:

usuario@sugeek:~$ type fdisk fdisk is /sbin/fdisk

De esta manera sabemos si un comando es interno o externo a la shell.

Los Shell también usan 3 flujos de entrada/salida estándar:

• Stdin Es el flujo de entrada estándar y proporciona los datos de entrada a los→comandos, normalmente el teclado.

• Stdout Es el flujo de salida estándar y muestra los datos de salida de los→comandos, normalmente el monitor.

• Stderr Es el flujo de error estándar y muestra datos de salida de error de los→

41www.sugeek.co

comandos, Normalmente el monitor.

Estructura de los comandos

En GNU/Linux como en todo sistema, la ejecución de ordenes tiene una interpretaciónorganizada en donde, si no se cumple dará como resultado un error en la orden o encasos extremos, daño del sistema.

La sintaxis común para ejecutar un comando es:

comando opciones archivo/directorioafectado ↓ ↓ ↓

rm -r /home/suge3k/*

Las opciones, en la mayoría de ocasiones van precedidas por un guión, como vimos en elejemplo anterior.

Para cancelar la ejecución de un comando basta con realizar la combinación de teclas[ Ctrl ] + [ C ].

Para saber la ubicación de un comando usamos el comando which. Si existen mascomandos con la misma estructura solo indicamos la opción -a.

root@sugeek:~# which fdisk /sbin/fdisk

Comando man

Para conocer mas sobre un comando (también contamos con el comando info o la opción–help del comando), nos ayudamos con la pagina manual de este, man. Por ejemplo lapagina manual del comando rm seria:

man rm

Pero man, también tiene sus opciones, por ejemplo existe el comando passwd el cualsirve para cambiar el password de un usuario, pero al mismo tiempo existe el archivo/etc/passwd el cual contiene información de los usuarios, y uno como el poca relacióntienen. Para diferenciar uno del otro se utilizan secciones, man siempre busca en lasección 1 y va bajando poco a poco hasta encontrar la coincidencia.

42www.sugeek.co

Seccíon Contenido

1 Instrucciones ejecutables o comandos del shell

2 Llamadas del Sistema (API del núcleo)

3 Llamadas de las Librerías (funciones c)

4 Archivos Especiales (contenido de /dev )

5 Formato de ls Archivos (/etc/passwd, /etc/hosts, etc.)

6 Juegos, Salvapantallas, Programas Varios, etc.

7 Varios, Comandos no estándares que no encuentran sitio en otra parte

8 Comandos de Administración del sistema Linux

9 Subprogramas del núcleo (Normalmente vacio)

Ya teniendo en cuenta la anterior tabla, si ejecutamos solo man passwd nos mostrara:

PASSWD(1) User Commands PASSWD(1)

NAME passwd - change user password

SYNOPSIS passwd [options] [LOGIN]

DESCRIPTION The passwd command changes passwords for user accounts. A normal user may only change the password for his/her own account, while the superuser may change the password for any account. passwd also changes the account or associated password validity period.

Pero si ejecutamos man 5 passwd, le estamos indicando que tome como referencia lasección 5, y tendremos como resultado:

PASSWD(5) File Formats and Conversions PASSWD(5)

NAME passwd - the password file

DESCRIPTION /etc/passwd contains one line for each user account, with seven fields delimited by colons (“:”). These fields are:

· login name · optional encrypted password · numerical user ID · numerical group ID · user name or comment field · user home directory · optional user command interpreter

43www.sugeek.co

En ocasiones es normal olvidar el comando exacto, pero sabemos parte de su contenido,así que utilizamos la opción -k indicando el contenido del comando, así que utilizamosman -k passwd tendremos como resultado:

update-passwd (8) - Actualiza /etc/passwd, /etc/shadow y /etc/group de forma segura chgpasswd (8) - update group passwords in batch mode chpasswd (8) - update passwords in batch mode fgetpwent_r (3) - get passwd file entry reentrantly getpwent_r (3) - get passwd file entry reentrantly gpasswd (1) - administer /etc/group and /etc/gshadow grub-mkpasswd-pbkdf2 (1) - generate hashed password for GRUB lppasswd (1) - add, change, or delete digest passwords. pam_localuser (8) - require users to be listed in /etc/passwd passwd (1) - change user password passwd (1ssl) - compute password hashes passwd (5) - the password file passwd2des (3) - RFS password encryption smbpasswd (5) - The Samba encrypted password file smbpasswd (8) - change a user's SMB password SSL_CTX_set_default_passwd_cb (3ssl) - set passwd callback for encrypted PEM file handling SSL_CTX_set_default_passwd_cb_userdata (3ssl) - set passwd callback for encrypted PEM file handling

Vemos los distintos comandos que poseen el contenido de passwd.

Apagar el sistema

• shutdown -h now Apaga el sistema→◦ shutdown -r now Reinicia el Sistema→◦ shutdown -h HORA:MIN & Apagado planificado→◦ shutdown -c Cancelar el apagado planificado→

• reboot Reinicia el sistema→• halt Apaga el sistema→• init 0 Apaga el sistema→

Verificando el estado del Sistema

Es muy importante saber como se encuentra nuestro sistema antes de hacer cualquiercosa, ya sea por que el sistema esta lento o solo para saber conexiones y demás.

Comando TOP

Este comando me mostrara por completo la información del estado del sistema como porejemplo, mostrara el consumo de procesador y memoria ram en tiempo real, así mismocuantos usuarios se encuentran logueados en ese momento, hace cuanto esta encendidala maquina etc. al escribir top en la consola nos aparecerá una pantalla como la

44www.sugeek.co

siguiente.

1. En esta parte mostrara información como: Usuarios logueados, Carga del sistema(Ultimo Minuto, Últimos 5 Minutos, y últimos 15 min), procesos en ejecución, uso deprocesador, memoria ram y swap. En la tercera linea (CPU) muestra informaciónimportante como el porcentaje usado por los usuarios (us) por el kernel (sy), porcentajede procesos con baja prioridad (ni), porcentaje de procesos inactivos (id), el porcentaje deprocesos en espera (wa), Hadware Interrupts (hi) y Software Interrupts (si), el steal time(st) es usado generalmente con VM.

2. Este apartado muestra los procesos que están corriendo en el sistema, con el usuarioque lo esta ejecutando y su respectivo PID (Process ID).

Algunos de los comandos de top son:

• t Muestra u oculta el resumen, la 2da y 3ra linea→• m Muestra u oculta información de la memoria, la 4ta y 5ta linea→• A Ordena los procesos según consumo de recursos→• r Cambia la prioridad de un proceso→• k Mata el proceso indicado→• q Cierra top→• u Busca los procesos del usuario indicado→

El comando htop es por asi decirlo, una interfaz gráfica y mas amigable que top.

45www.sugeek.co

Comando free

Con este comando tendremos información del uso de la memoria ram y swap.

Como podemos observar, este comando muestra la información en kilobytes y enocasiones es difícil leerlo así que para ello usamos la opción m para que muestre lascantidades en sumas redondas como megabytes o la opción g para que los muestre engigabytes.

Comando w

Con este sabremos que usuarios están logueados en nuestro sistema, los procesos queestán corriendo, cuanto tiempo lleva el sistema encendido, la carga del mismo los últimosminutos (1, 5 y 15).

Comando vmstat -s

Este comando es similar que indicar cat /proc/meminfo.

sugeek@sugeek~$ vmstat -s 8079804 K total memory 5013668 K used memory 2318480 K active memory 2387252 K inactive memory 3066136 K free memory 113348 K buffer memory 3087384 K swap cache 7812092 K total swap 0 K used swap 7812092 K free swap 275687 non-nice user cpu ticks 2583 nice user cpu ticks 59034 system cpu ticks 1755387 idle cpu ticks 39844 IO-wait cpu ticks 22 IRQ cpu ticks 7264 softirq cpu ticks 0 stolen cpu ticks 1460577 pages paged in 2548113 pages paged out 0 pages swapped in 0 pages swapped out 14374381 interrupts

46www.sugeek.co

23585894 CPU context switches 1384197460 boot time 191137 forks

Comando who y whoami

El comando who indicara quienes están conectados y por que consola, y whoamimostrara la identificación del usuario actual.

Comando id y groups

Con el comando id obtenemos información sobre el usuario actual, si escribimos idnombreusuario obtenemos información sobre el usuario solicitado, como su id, grupoprincipal y grupos a los cuales pertenece.

uid=0(root) gid=0(root) grupos=0(root)

Con el comando groups, obtendremos información sobre los grupos a los cuales pertenece elusuario actual o solicitado.

Comando lspci

Mostrara la información de las ranuras y adaptadores relacionadas con el bus PCI delsistema. Se puede obtener mayor información agregando la opción v o vv.

Comando lsusb

Mostrara la información de los puertos usb. Podemos mostrar mas información con laopción v

47www.sugeek.co

Comando lscpu

Mostrara información sobre los procesadores.

Comando uname

Este comando es el mas usado para conocer información del sistema, pero por si solo no muestra mucha información así que hay que usarlo con la opción a

Como podemos observar en el resultado del comando, muestra el tipo kernel, el nombre de la maquina, la versión del kernel, fecha y hora, arquitectura del procesador.

Podemos tener información especifica como el hardware (-m) nombre de la maquina (-n) la versión del núcleo (-r) tipo de procesador (-p) versión del sistema (-v) o nombre del sistema -s).

Comando uptime

Este comando es usado para saber cuanto tiempo lleva encendido el sistema.

Como se observa muestra primero la hora actual del sistema, cuanto tiempo ha estadoencendido (1 dia 5 horas y 32 min) Cuantos usuarios se encuentran logueados y la cargadel sistema.

Comando lshw

Este comando similar al comando hwinfo y dmidecode (Este ultimo consultadirectamente a la BIOS, en ocasiones no confiable)el cual mostrara la información de todoel hardware del sistema, como board, procesador, memorias ram, discos duros, unidades

48www.sugeek.co

DVD, etc. Es un comando con una salida muy extensa.

Comando lsblk

Con este comando podremos conocer todos los discos, en forma de árbol, la informaciónes obtenida del sistema de archivos del sistema.

sugeek@sugeek:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 698,7G 0 disk ├─sda1 8:1 0 237M 0 part /boot ├─sda2 8:2 0 7,5G 0 part [SWAP] ├─sda3 8:3 0 46,6G 0 part / └─sda4 8:4 0 644,4G 0 part /home sr0 11:0 1 1024M 0 rom

Comando df

Este comando mostrara el uso de espacio de los discos y unidades de almacenamiento,usando la opción h Podremos entender mucho mejor las unidades de medida.

49www.sugeek.co

Como podemos observar la 1ra partición de mi disco duro principal (sda) tienen untamaño de 76GB y tiene usados 6,8 G y disponibles 65G con un porcentaje de ocupacióndel 10% y la partición 6 del mismo disco duro el cual se encuentra montado home tieneun uso de 420G y libres 155GB.

Comando blkid

Con este comando obtendremos información de los UUID de los discos duros, parapoderlos montar con su respectivo ID, evitando fallas de montaje al arranque del sistema.Este comando es similar al usar ls -l /dev/disk/by-uuid y ls -l /dev/disk/by-label

root@sugeek:~#blkid /dev/sda1: UUID="23287c8d-45f2-4b2c-bf9c-465060141f03" TYPE="ext4" /dev/sda2: UUID="9fe6a649-530f-4ce7-a215-add68169d792" TYPE="swap" /dev/sda3: UUID="9e638ed8-41c1-410f-938b-ba0f3ba6813d" TYPE="ext4" /dev/sda4: UUID="4795786e-ab9d-40d4-abd9-657d026ce0a7" TYPE="ext4"

Comando fdisk -l

Aunque este comando permite particionar, etc. Lo veremos a mayor profundidad masadelante, pero en esta ocasión lo utilizaremos para visualizar información de los discosduros.

Como podemos observar me identifica el disco /dev/sda el cual tiene un tamaño de

50www.sugeek.co

750GB e información de las particiones, sectores, etc.

Comando last y lastb

last muestra un listado de los últimos usuarios logueados al sistema (desde el archivo/var/log/wtmp) e información relevante, lastb, (Obtiene la información de/var/log/btmp) muestra los últimos intentos de logueo al sistema que fracasaron.

Como podemos observar que usuario se logueo, en que terminal, fecha y hora y si seencuentra o no logueado (still logged in).

Con lastb obtenemos los intentos de logueo fallidos. Por ejemplo, en un sistema dondeno existiera el usuario 'fulano' resultaría obvio que alguien esta tratando de obteneracceso remoto, adivinando usuario:contraseña.

Comando du

Este comando permitirá ver el tamaño de una carpeta, archivo, o del contenido de unacarpeta. Con las opciones s y h mostrara el tamaño de la carpeta y de forma legible.

usuario@sugeek:/$du -sh /var 1,3G /var

Comando dmesg

Se usa para desplegar los mensajes que se mostraron en pantalla cuando se inicio (boot)el sistema. Se usa para realizar depuraciones al sistema de como se están cargando losdiversos módulos y componentes al arranque del sistema o ya en ejecución y poder asicorregir posibles errores al iniciar el sistema, además no solo al iniciar al sistema, ya quesigue generando información, por ejemplo cuando conectamos un teclado, o algunaunidad de almacenamiento o cualquier dispositivo conectados en caliente. En pocaspalabras, son los mensajes generados por el Kernel.

51www.sugeek.co

Comando arch

Con este comando sabremos cual es la arquitectura del sistema, lo cual también sepodría obtener con comando uname -i.

Comando pstree

Este mostrara los procesos de manera organizada, mostrando que procesos pertenecen acual servicio. Se recomienda usarlo con las opciones Agu.

Comando ps

Mostrara los procesos que esta ejecutando el usuario actual sobre la consola, para poderver por completo todos los procesos que se están ejecutando se recomienda el uso de lasopciones aux.Sin opciones:

Con opciones:

Comandos ifconfig, ip

Ifconfig además de ser un comando para mostrar información también es un comandopara asignación de dirección IP lo cual veremos mas adelante. Pero por si solo vamos a

52www.sugeek.co

usar algunas opciones.

• Ifconfig -a Mostrara información de todas las interfaces→

• ifconfig interfaz Muestra información sobre la interfaz solicitada. Ej:→ifconfig eth0

ip es un comando también muy completo (mas completo que el ifconfig), con estepodremos saber si la interfaz esta conectada, si esta funcionando, crear rutas etc. Peropara este apartado solo nos interesa saber el estado de las interfaces.

• ip link Mostrara si la interfaz se encuentra arriba o abajo asi el cable este→

conectado.• Ip addr Mostrara además del estado de la interfaz si esta arriba o abajo mostrara→

información extra sobre el direccionamiento ip.

53www.sugeek.co

Comando netstat

Este comando me permitirá verificar las conexiones que posee el sistema, algunas de lasopciones son:

• -i Permite verificar el estado de las tarjetas de red→• -a Permite visualizar todas las conexiones, para todos los protocolos,→

incluidos los puertos de escucha.• -at Lista todas las conexiones TCP.→• -au Lista toda las conexiones UDP.→• -l Lista las conexiones de escucha.→• -s Muestra estadísticas por protocolo como IP, ICMP, TCP, UDP. Se puede→• especificar con -su para udp -st para TCP.• -tp Muestra el ID del proceso que usa el puerto.→• -c Muestra la información cada 5 segundos, se recomienda combinar con→

a o t. Ejem: -cat para mostrar cada 5 seg información de conexiones TCP.• -A Permite especificar el protocolo a consultar, como inet, inet6, unix, ipx,→

ax25, netrom y ddp.• -n Muestra las tablas de enrutamiento.→

Comandos route -e y arp -e

Estos comandos me mostraran en pantalla la tabla de rutas que tiene el sistema y latabla arp del mismo.

Archivos de Estado del Sistema

En el sistema de archivos o path /proc podremos encontrar toda la información delsistema, vamos a listar alguno de los archivos.

• cat /proc/cpuinfo Muestra la información del procesador, similar a → lscpu.• cat /proc/meminfo Muestra información sobre la memoria ram.→• cat /proc/net/dev Muestra información de los dispositivos de red y estadísticas.→• cat /proc/mdstat Muestra el estado de los RAIDS montados.→• cat /proc/scsi/scsi Muestra información de los dispositivos SCSI.→

54www.sugeek.co

Archivo /etc/services

En este archivo podemos encontrar todos los servicios que tiene nuestro sistema y elpuerto de escucha que tiene configurado. Muy útil cuando se crean reglas de firewall.

Alias

Los alias son seudónimos que se asocian a un comando ya sea con las opcionesestablecidas o no. Por ejemplo, el comando ls ya tiene por default un alias.

[email protected]:~$ aliasalias ls='ls –color=auto'

Como vemos la salida al ejecutar alias sin opciones, me mostrara que alias tenemosestablecidos en ese momento. Para poder establecer un alias para dicha shell solo costaescribir el comando alias mas el nuevo comando y que va a hacer al ejecutar, porejemplo vamos a crear un alias llamado update.

[email protected]:~# alias update = 'apt-get update && apt-get upgrade'

Como podemos observar asociamos el nuevo “Comando” update el cual al escribirlo enrealidad ejecutara apt-get update y luego si y solo si el anterior comando se ejecuto deforma correcta (&&) se ejecutara apt-get upgrade.

Los alias son de gran ayuda cuando queremos agilizar un poco los procesos, pero es unarma de doble filo, ya que si la persona usa muchos alias, podría olvidarse la utilizaciónde los comandos verdaderos.

Los cambios solo se mantendrán en la sesión hasta que el equipo sea reiniciadonuevamente, cuando esto sucede dichos alias desaparecen, para solventar esto solo escrear dichos alias en el archivo .bashrc que se encuentra en el home del usuario.

Manejo de Archivos y Directorios

Directorios:

Es una colección de Archivos y otros directorios de forma jerárquica.

/ = Representa el directorio raiz.

Para conocer el listado de directorios principales de la distribución usamos el comandoman hier .

Rutas Absolutas:

Señalan la ubicación de un archivo o directorio desde el directorio raíz del sistema dearchivos. Por ejemplo es una ruta absoluta /home/dir1/arc1.fil que señala la ubicación de

55www.sugeek.co

arc1.fil desde la raíz del sistema de archivos.

Rutas Relativas:

Señalan la ubicación de un archivo o directorio a partir de la posición actual del sistemaoperativo en el sistema de archivos. Por ejemplo es una ruta relativa dir1/arc1.fil queseñala al archivo arc1.fil dentro del directorio dir1 en la ubicación actual.

Trabajando con Directorios:

• pwd Imprime en Pantalla la ruta del directorio actual.→• cd Cambia de un directorio a otro hacia adelante indicando al directorio al→

cual se desea ingresar.◦ cd .. Devuelve al directorio superior.→◦ cd ../.. Devuelve a 2 directorios superiores.→◦ cd Ingresa al directorio del usuario.→◦ cd ~ Ingresa al directorio del usuario.→◦ cd - Devuelve al directorio anterior.→

• ls Lista el contenido de una carpeta.→◦ ls -a Lista todo el contenido incluyendo los archivos ocultos.→◦ ls -h Muestra el contenido con cifras entendibles por nosotros.→◦ ls -i Muestra el ID del inodo. →◦ ls -l Muestra el contenido en modo lista con información adicional como: →

drwxr-xr-x 7 sugeek sugeek 12288 jul 4 09:29 Descargas Permisos Propietario Grupo Size Fecha Mod

Nombre Dir.◦ ls -r Muestra de Forma inversa el contenido listado.→◦ ls -s Muestra el tamaño del archivo o carpeta.→◦ ls -S Organiza la salida de mayor tamaño a menor→◦ ls -t Muestra el contenido por hora/fecha de modificación, mas reciente a→

la mas antigua.◦ ls -R Muestra el contenido de los subdirectorios.→

• mkdir : Crea un directorio. EJ: mkdir dir1◦ mkdir -p: Permite crear directorios y subdirectorios al tiempo. EJ: mkdir -p

dir1/dir2/dir3• rmdir: Permite borrar un directorio si y solo si esta vacío.

◦ rmdir -p: Borra un subdirectorio.

Trabajando con Archivos

• touch Crea un archivo →• file Indica el tipo de archivo→• cat Muestra el contenido de un archivo o varios→• tac Muestra el contenido de un archivo de forma inversa→• head Muestra las 10 primeras lineas de un archivo.→

◦ head -20 Muestra las 20 primeras lineas de un archivo, el 20 puede ser→

56www.sugeek.co

cambiado por cualquier valor numérico entero.• tail Muestra las 10 ultimas lineas de un archivo.→

◦ tail -20 Muestra las 20 ultimas lineas de un archivo, el 20 puede ser→cambiado por cualquier valor numérico entero.

◦ tail -f Va actualizando el archivo a medida que se van generando datos.→• wc Muestra información de lineas, palabras y caracteres de un archivo.→• more Muestra la información de un archivo de texto en forma paginada.→• less Es similar a → more pero a contrario de este, less permite devolverse a

visualizar una parte del archivo que ya ha sido pasada.• strings Permite visualizar los caracteres ASCLL de un archivo ejecutable.→

Trabajando con Archivos y Directorios

• cp Permite copiar un archivo o directorio, su estructura es: → cparchivo/pathacopiar rutadestino◦ cp -i Copia de forma interactiva, solicita confirmación de realizar la copia→

si encuentra un archivo con el mismo nombre.◦ cp -r Copia recursiva, cuando se requiere copiar todo el contenido.→◦ cp -f Copia forzada.→◦ cp -n No sobrescribe archivos con el mismo nombre.→◦ cp -p Perseverante, mantiene la información de los metadatos del archivo→

origen (permisos, fecha, etc)• rm Permite borrar un archivo o directorio →

◦ rm -r Permite borrar de forma recursiva todo el contenido del directorio→indicado.

◦ rm -i Solicita confirmación para eliminar un archivo→◦ rm -f Fuerza la eliminación de un archivo→◦ En ocasiones cuando un archivo inicia con un carácter especial como un

guión, es necesario indicar la finalización de las opciones del comando conguión guión. - -. Por ejemplo para eliminar el archivo “-file.txt” es necesarioescribir rm -r -- -file.txt

• mv Permite mover un archivo o directorio y también es usado para cambiar→nombres, su estructura es: mv archivo/pathamoverrutadestino/nombrenuevo◦ mv -n No sobrescribe si el archivo ya existe.→◦ mv -i Solicita confirmación para mover el archivo.→

Trabajando con la familia del comando z

La familia del comando z permite verificar y trabajar con archivos que se encuentrandentro de un archivo comprimido, se usan indicando z antes del comando a usar, zcat,zless, zgrep, etc.

• zcat miarchivo.txt.tar → Muestra el contenido del archivo comprimido• zdiff miarchivo1.txt.tar miarchivo2.txt.tar Compara los 2 archivos→

comprimidos

57www.sugeek.co

Shell globbing

En ocasiones cuando se esta trabajando con muchos archivos, es necesario utilizar“Comodines” ya sea para buscarlos y modificarlos, o solamente listarlos.

• El asterisco * Es el comodín general el cual es usado para remplazar x cantidad →de caracteres, Ej: ls *.php Listara todo el contenido de la carpeta que tenga archivos con extensión .php. Ej2: ls file.* Listara todos los archivos que se llamen file sin importar su extensión. Ej3: ls *doc.pdf Listara todos los archivos que tengan la extensión .pdf y al finalizar el nombre de este contenga los caracteres doc.

• El Signo de Interrogación ? A diferencia de * el ? Solo remplaza un carácter. Ej:→ ls?ile.txt Listara los archivos que empiecen con a-z ó 0-9 ó A-Z y que continué con la palabra ile.

• Corchetes [ ] Muestra los archivos que contengan cualquier carácter indicado→dentro de los corchetes. Ej: ls file[AB].txt Listara los archivos fileA o fileBcontinuando con la extensión .txt. Ej2: ls file[a-t]* Listara cualquier archivollamado file continuando con una letra dentro del rango a hasta la t, y cualquierextensión.

Archivos Enlaces

Los archivos enlaces simbólicos (softlinks) son aquellos archivos especiales que hacen deacceso directo hacia otro archivo que se ubica en un path diferente. Se identifica que esun archivo enlace cuando posee una L al principio de los permisos.

lrwxr-xr-x 7 sugeek sugeek 12288 jul 4 09:29 Descargas → /root/Descargas

Como podemos observar al principio de la linea nos muestra una l indicando que es unarchivo enlace, y al final indica la dirección en donde se encuentra el archivo original.

La forma para crear un archivo enlace es ln -s archivooriginal nombreenlaceSi listamos el contenido de nuestro directorio con ls -li veremos que este tiene un códigode inodo totalmente distinto al archivo original.

root@sugeek:~# ls -li | grep Descargas 3932179 drwxr-xr-x 7 root root 12288 jul 4 09:29 Descargas root@sugeek:~# ln -s /root/Descargas /home/sugeek/Descargas root@sugeek:~# ls -li /home/sugeek/ | grep Descargas 4922879 lrwxr-xr-x 7 sugeek sugeek 12288 ago 3 12:29 Descargas → /root/Descargas

Además de estos tipos de enlaces tenemos un enlace “duro” o hardlink el cual mantieneel inodo original, a diferencia del enlace normal.

Para crear un enlace duro se usa ln archivoriginal nombreenlace

root@sugeek:~# ls -li | grep Descargas

58www.sugeek.co

3932179 drwxr-xr-x 7 root root 12288 jul 4 09:29 Descargas root@sugeek:~# ln /root/Descargas /home/sugeek/Descargas root@sugeek:~# ls -li /home/sugeek/ | grep Descargas 3932179 drwxr-xr-x 7 sugeek sugeek 12288 jul 4 09:29 Descargas

Como podemos observar, al crear un enlace duro dicho enlace contiene la mismainformación del inodo a diferencia del softlink que lo crea con nueva información deinodo. Para eliminar un Hardlink solo basta con borrar alguno de los 2 archivos, puede serel archivo fuente, no hay problema. Los Hardlinks no se podrán usar entre 2 unidades dealmacenamiento distintas.

59www.sugeek.co

COMPILANDO EL KERNEL

Cuando existen nuevas características, o mejoras de seguridad en Linux, esrecomendable compilar un nuevo kernel, para ello se explicara el paso a paso de comocompilarlo.

Descargar el kernel a nuestro sistema desde www.kernel.org, en esta ocasión se descargael kernel 3.16:

root@sugeek:/usr/src# wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.16.tar.bz2

Después de descargar procedemos a desempaquetarlo:

root@sugeek:/usr/src# tar jxvf linux-3.16.tar.bz2

Ingresamos al directorio

root@sugeek:/usr/src# cd linux-3.16

Limpiamos cualquier configuración previa y copiamos la configuración de nuestrosistema, esto con el fin de “adaptar” mejor nuestro nuevo kernel.

root@sugeek:/usr/src# make mrproperroot@sugeek:/usr/src# cp /boot/config-3.8.0-39-generic /usr/src/ .config

Configuramos nuestro Kernel a instalar según sean nuestros requerimientos.

root@sugeek:/usr/src# make menuconfig

Luego de haber configurado a nuestro gusto el nuevo Kernel, le damos salir y seguimoscon el siguiente comando para compilar el kernel.

root@sugeek:/usr/src# make

Luego a instalarlos.

root@sugeek:/usr/src# make modules_install

Procedemos a instalar el kernel.

root@sugeek:/usr/src# make install

Instalamos la imagen init

root@sugeek:/usr/src# mkinitramfs -o /boot/initrd.img-3.16 3.16

60www.sugeek.co

Actualizamos el Grub.

root@sugeek:/usr/src# update-grub

Por ultimo reiniciamos el sistema.

root@sugeek:/usr/src# reboot

Ya solo el próximo inicio del sistema, este arrancara con el nuevo kernel, lo podemosvalidar con el comando uname -r

Eliminar un Kernel Antiguo

Para poder eliminar un kernel antiguo procedemos con lo siguiente:

¡IMPORTANTE! No eliminar un kernel antiguo si aun no se han realizado todas las pruebas pertinentes, dejarlo por lo menos 1 mes de forma de Backup.

Ejecutamos el comando dpkg –l | grep linux-image y como resultado tendremos loskernels instalados, luego de saber que kernel deseamos desinstalar procederemos aeliminarlo con el comando aptitude remove –-purge linux-image-3.# y por ultimoejecutamos dpkg –l | grep linux-headers y realizamos la misma actividad anteriorpero con el header correspondiente.

El kernel quedo eliminado, pero aun falta la actualización del grub para que tome loscambios, con el comando update-grub.

Gestión de Módulos

Los módulos son archivos que nos permiten gestionar algunas de las características denuestro sistemas, asociados al kernel.

Comando lsmod

La finalidad de este comando es poder verificar que módulos tiene cargados el sistema/lib/modules/mikernel/.

61www.sugeek.co

La primera columna indica el nombre del modulo cargado, La segunda da el tamaño delmodulo, la tercera suministra un contador de utilización (cuantos componentes delsistema acceden al modulo) y la ultima columna proporciona la lista de módulos quedependen del modulo cargado.

En realidad lsmod solo organiza la información contenida en el archivo /proc/modules.

Comando modinfo

Con este comando obtengo información necesaria sobre un modulo.

root@sugeek:~# modinfo asus_wmi filename: /lib/modules/3.8.0-39-generic/kernel/drivers/platform/x86/asus-wmi.ko license: GPL description: Asus Generic WMI Driver author: Corentin Chary <[email protected]>, Yong Wang <[email protected]> srcversion: 62CA511243680BE13E8641A depends: sparse-keymap,wmi,video intree: Y vermagic: 3.8.0-39-generic SMP mod_unload modversions

Comando depmod

Este comando actualiza el árbol de dependencias de cada uno de los módulos ubicadosen el archivo /lib/modules/VersionDelKernel/modules.dep, dicho archivo contiene 2columnas, la 1ra indica el modulo a cargar (ruta) y la 2da indica los modulos que sedeben de cargar para que el 1ro cargue.

Si presentamos problemas con algunos módulos con sus dependencias, debemosreestructurar con el comando depmod -a.

Comando insmod

Este comando permite cargar un modulo que este fallando, pero se debe de tener

62www.sugeek.co

cuidado con las dependencias del modulo, ya que si no se cargan primero no se podrácargar el modulo indicado.

root@sugeek:/lib/modules/3.2.0-61-generic/kernel/fs/fat# insmod fat.koroot@sugeek:/lib/modules/3.2.0-61-generic/kernel/fs/fat# insmod vfat.ko

Como podrá observar, primero se cargo el fat.ko, ya que el modulo vfat.ko depende defat.ko

root@sugeek:/lib/modules/3.2.0-61-generic# grep vfat.ko modules.dep kernel/fs/fat/vfat.ko: kernel/fs/fat/fat.ko

Con la opción -k permite la limpieza automática, liberando al sistema de módulos que noeste utilizando, ganando así un poco de recursos

Comando rmmod

A diferencia de insmod, este los descarga, pero si dicho modulo se encuentra utilizado oasociado a otro modulo no se podrá descargar, para descargar un modulo del sistema, seprocede a quitar primero el modulo principal y luego sus módulos de dependencias, todolo contrario a insmod.

Comando modprobe

Este comando engloba y facilita la carga o descarga de módulos, a diferencia de insmodo rmmod los cuales deben de cumplir ciertos “Pasos” para cargar o descargar losmódulos, con modprobe se carga el modulo y sus dependencias de una sola vez. Con laopción -r permite descargar un modulo del sistema siempre y cuando no este siendoutilizado

Archivo /etc/sysctl.conf y comando sysctl

Sysctl nos permite cambiar parámetros del kernel sin tener que reiniciar el sistema

Los parámetros a modificar se encuentran en /proc/sys/ , algunos de los masinteresantes son:

• dev Establece los parámetros de configuración de los dispositivos conectados→• fs Los parámetros relacionados con los sistemas de ficheros, inodes, quota, etc→• kernel Comportamiento general del kernel→• net Contiene los parámetros para configuración de la red→• vm Se utiliza para la configuración de la memoria virtual.→

La estructura del comando sysctl es :

sysctl opción variable=valor

63www.sugeek.co

Las opciones más habituales son :

• -a Muestra todos los valores disponibles→• -w Establece el valor indicado→• -p Carga en sysctl los valores definidos en el archivo /etc/sysctl.conf→

La opción -w solo permitirá establecer la “característica” en la sesión actual, ydesaparecerá cuando se reinicie el sistema. Para evitar que esto ocurra hay que escribirlos cambios en /etc/sysctl.conf

Algunas Opciones de Interés

Las siguientes configuraciones se realizan directamente al archivo /etc/sysctl.conf,Para que sean aplicados los cambios de este archivos se usa el comando sysctl -p.

• Forwarding de paquetes IP, con el fin de que podamos usar reglas de redireccióncon iptables y nuestro sistema funcione como router.

net.ipv4.ip_forward = 1

• Desactiva las respuesta del kernel a las peticiones ARP. Esta técnica es útil a lahora de configurar dos maquinas con la misma dirección IP.

net.ipv4.conf.eth0.arp_ignore = 1net.ipv4.conf.eth0.arp_announce = 2net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2

• Indicar al sistema que use mas la memoria RAM en ves de la Swap, ideal paraequipos con 8GB de ram o mas. El valor normal es de 60, siendo un valor menor,menos uso de la swap.

◦ vm.swappiness=30

• Si nuestra máquina no tiene varias Ips, es interesante activar el rp_filter, querechaza paquetes cuyo origen no se corresponde con una dirección alcanzable porla interfaz. Esta opción nos puede ayudar a evitar IP spoofing:

◦ net.ipv4.conf.all.rp_filter=1◦ nett.ipv4.conf.default.rp_filter=1

64www.sugeek.co

HERRAMIENTAS GNU/LINUX

Comando find

Buscara archivos o directorios con el argumento escrito. Vamos a observar algunasestructuras “Básicas”, para mas información no dude en consultar el manual delcomando. Man find

• find . Buscara en el directorio actual.→• find path -name “nombrearchivo.txt” Buscar por nombre del archivo tal→

cual.• find path -iname “nombrearchivo” Busca el archivo ignorando mayúsculas→

y minúsculas• find -type Buscara por tipo de archivo (→ L F D) L = Link, F = File, D =

Directory. Ej: find -type F “*.odt” • find /home/Files -iname '*.exe' -delete Busca los ejecutables y procede a→

eliminarlos.• Find . -user usuario Busca todos los archivos perteneciente al usuario→

indicado, se puede hacer lo mismo pero con el grupo indicando -group. • Find -size +100k Buscar archivos mayores a 100k, se puede definir el→

menos (-) para indicar que sea de menor tamaño al indicado.• Find -atime (access time), busca en la fecha del ultimo acceso, se→

entiende acceso como una lectura del archivo o simplemente un listado.• Find -mtime (modification time), busca la fecha de la ultima modificación,→

dicha modificación es directamente al contenido del archivo.◦ Find . -mtime 1 Busca archivos modificados dentro de las pasadas 24→

Horas◦ find . -mtime -3 Busca archivos modificados hace menos de 3 días→◦ find . -mtime +4 Busca archivos modificados mayores a 4 días.→

Buscar tipos de archivos y proceder a copiar a otro directorio.

• find /home/Files -iname '*.avi' -exec cp '{}' /home/Videos \; Busca archivos→con extensión .avi procede a ejecutar el comando cp, toma el resultado dela búsqueda ' {}' y los copia en la carpeta indicada , lo mismo seria paramover archivos, solo seria cambiar cp por mv.

Buscar archivos con mas de 4 días y proceder a borrar, ideal para las “Papeleras” enservidor de archivos.

• Find /home/papelera -mtime +4 -exec rm -r {} \;

Además de los comandos anteriores, es posible utilizar acciones lógicas, como AND (-a) /OR (-o) / NOT ( !).

65www.sugeek.co

• Find . ! -name “*.doc” Busca todos los archivos, excepto los .doc→

Comando locate

Similar a find pero penos “Completo”, solo que este requiere actualizar su base de datospara incluir los archivos nuevos. Para actualizar la base de datos de locate se usa elcomando updatedb.

◦ Estructura del comando → locate archivo/pathabuscar

Comando date

Muestra la hora/fecha del sistema en ingles.

usuario@sugeek:~$ date jue jul 11 16:12:50 COT 2013

• Establecer Hora y fecha al sistema: Para poder establecer la hora y fecha delsistema se debe de tener en cuenta la estructura del comando el cual es.date MMDDhhmmyyyy Donde MM = Mes, DD = Dia , hh = Hora, mm =Minutos y yyyy = Año

Nota: La hora siempre debe de ser en formato de 24H

• Conocer el que día sera dentro de X tiempo:

usuario@sugeek:~$ date -d "3 days" dom jul 14 16:14:20 COT 2013

Como se pudo observar me imprimió que día sera dentro de 3 días, el days sepuede cambiar por week, year, month, hour, minute, second, next, ago,

• Saber que día fue hace X tiempo:

usuario@sugeek:~$ date -d "3 days ago" lun jul 8 16:18:43 COT 2013

Algunos ejemplos que por si solos se explican.

usuario@sugeek:~$ date -d "next monday" lun jul 15 00:00:00 COT 2013 usuario@sugeek:~$ date -d "last monday" lun jul 8 00:00:00 COT 2013 usuario@sugeek :~$ date -d "3 years 2 month 4 weeks 4 days 10 hours 30 minutes 6 seconds" vie oct 14 02:55:32 COT 2016 usuario@sugeek :~$ date -d "48 hours ago" mar jul 9 16:26:09 COT 2013 usuario@sugeek:~$ date -d "-48 hours"

66www.sugeek.co

mar jul 9 16:26:40 COT 2013

Además de eso podremos organizar la salida del comando con el símbolo + y el símbolo%. Para mayor información favor visitar la pagina man de date.

Para modificar la ubicación de nuestro sistema solo basta con ejecutar el comandotzselect el cual modificara el timezone de nuestro sistema con una series de preguntas,el archivo que modificara es el /etc/timezone.

NOTA: Si deseas sincronizar el reloj de la bios con el del sistema escribimos hwclock --hctosys y si deseamos sincronizar el reloj del sistema con el de la bios escribimoshwclock - -systohc.

Comando ntpdate

Network Time Protocol, es el comando que me permite tener los servidores sincronizadosideal para servidores de LDAP, AD, DNS, Archivos, Logs, etc.Para sincronizar el reloj del sistema con un servidor, se utiliza el comando ntpdate -UServer donde server puede ser el nombre del servidor o la IP de este.

Si deseamos configurar un servidor de forma persistente, tendremos que modificar elarchivo /etc/ntp.conf y buscar las lineas que inicien con server y agregar el servidorque deseemos.

Comando cal

Muestra el Calendario según el año seleccionado.

• cal Mostrara el calendario del año actual.→• cal year Mostrara el calendario del año solicitado→• cal month year Mostrara el calendario del Mes/Año Solicitado→

usuario@sugeek:~$ cal 2 2055 Febrero 2055 do lu ma mi ju vi sá 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Comando History

Guarda el historial de comandos de la sesión

• history Muestra el historial d e comandos→• !# Llama el comando que se encuentra en el numero de la linea indicado→• history -c Borra el historial de comandos→

67www.sugeek.co

• .bachrc En este archivo que se encuentra en el home de cada usuario se puede→configurar el tamaño del history (Disminuir o aumentar los comandos recordados,fecha, etc).

• Con el comando: echo "export HISTTIMEFORMAT='%F %T : '" >> $HOME/.bashrc Podremos Indicarle a la shell que guarde el historial con la fecha de ejecución delcomando.

128 2013-10-16 20:29:32 : sudo service minidlna force-reload 129 2013-10-16 20:29:32 : sudo /etc/init.d/vboxdrv setup 130 2013-10-16 20:29:32 : ifconfig 131 2013-10-16 20:29:32 : ping 192.168.2.5 132 2013-10-16 20:29:32 : sudo service minidlna force-reload 133 2013-10-16 20:29:32 : ifconfig

Comando time

Indica cuanto tiempo se demora en ejecutar el comando indicado. Ej: time ls

Comprimir y Descomprimir

Comando tar

Sirve para comprimir y descomprimir archivos en formato tar.

• tar -x Extraer el Contenido de un archivo comprimido .tar→• tar -v Muestra los archivos descomprimidos o procesados.→• tar -f Usa el formato de archivos del comprimido→• tar -z Extraer archivos gzip →• tar -j Extraer archivo bzip2→• tar -A Agrega archivos a otra archivo comprimido→• tar -p Mantiene los permisos del los archivos/carpetas a comprimir→• tar -zxvf Extrae el contenido del archivo gzip2 mostrando los archivo procesados.→• tar -cvzf Nombre.tar.gz archivoacomprimir Crea un archivo con formato gz→• tar -tvf Visualizar el contenido del archivo comprimido→• tar -xtv Directorio/Archivo/Especifico/a/Extraer Extraer un archivo/directorio→

especifico.• tar –backup=t Renombra el archivo si ya se encuentra creado, ideal para realizar→

Backups• tar –exlude=”~*” No toma en cuenta los archivos iniciados por ~, podría ser→

cualquier archivo como *.mp3, no crea backup de archivos .mp3.

Comando zip y unzip

Sirve para comprimir y descomprimir en formato zip

68www.sugeek.co

Comando gzip y gunzip

Comprime y descomprime e formato gzip

Comando wget

Permite descargar archivos desde un servidor. Se puede descargar sitios web completos ydemás.Su sintaxis es: wget -opcion rutadearchivoadescargar

Un ejemplo complejo es:

root@sugeek:/# wget -r -S -b -p -U Mozilla -l1 -H -np -nd -A.xls* -t1 -N -o milog.log -i list

Lo anterior indica:

• r De forma recursiva, descarga todos los directorios y archivos posibles→• S Imprime las respuestas header del servidor→• b Background, el comando se ejecutara en segundo plano→• p Descarga todo lo necesario para mostrar adecuadamente el sitio→• U Indica el tipo de “Navegador” usado, el famoso “user agent”→• l Indica que siga los enlaces pero solo en un primer nivel→• H Indica que descargue los archivos de otros dominios que estén enlazados al→

indicado• np No volver al directorio padre→• nd No cree la estructura de directorios, solo descargue los archivos indicados.→• A Archivos que deseo descargar del sitio →• t Números de intento para descargar un enlace→• N Indica que no descargue el archivo 2 veces→• o Indica el archivo log, ideal si se usa el comando en Background→• i Si tenemos varios dominios para descargar, en un archivo lo podemos escribir y→

wget lo podrá interpretar.

Comando bc

La calculadora que podemos usar desde la consola similar pero mas completa que expr,que aparte de sumar y restar puede realizar cálculos con una precisión de variosdecimales (expr solo muestra resultados enteros), cambiar de base numérica oprogramarla, etc.

root@sugeek:~# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.

69www.sugeek.co

Al escribir bc nos deja el promp listo para trabajar con expresiones matemáticas. Parasalir solo escribimos quit o halt. Con la opción -q ocultamos la leyenda del copyright.

root@sugeek:~# bc -q 5+5 #Suma que realizo10 #Resultadoscale=3 #Indico que quiero trabajar con hasta 3 decimales27/68 #Realizo la división.397 #Resultado de la divisiónquit #Cierro el programa

Además podemos definir las variables para trabajar con estas, pero dentro del entornodel programa tenemos unas ya predefinidas como:

• scale Permite definir cuantos decimales podrá tener el resultado→• last Esta variable almacena el ultimo resultado→• ibase Define la base de entrada, Binario, Decimal, Hexadecimal→• obase Define la base de salida, Binario, Decimal, Hexadecimal, ideal para→

convertir Decimales a Binarios, o a Hexadecimales y viceversa.

root@sugeek:~$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale=5 #Definimos los decimales a tenermyvar=11/myvar #Operacion a resolver utilizando mi variable1.00000 #Resultado de la operación, teniendo en cuenta los decimales indicadosibase=10 #Definimos la base de entradaobase=2 #Definimos la base de salida1+1 #Nuestra operación a base decimal10 #Resultado de nuestra operación a base binario

Si queremos tener operaciones matemáticas más complejas tenemos que ejecutar el bc-l para cargar la librería matemática:

• s (x) Seno de x, en radianes→• c (x) Coseno de x→• a (x) Arcotangente de x→• l (x) Logaritmo neperiano de x→• e (x) Exponencial de x→• j (n,x) → Función de Bessel de un entero de orden n de x

70www.sugeek.co

EDITOR DE TEXTO VIAunque no es el mas fácil de usar, pero si es el editor mas completo de todos en cuanto aconsola, además ya viene instalado de forma predeterminadas en todas las distribucionesGNU/Linux.

VI requiere que se aprendan todos los comandos de memoria, vamos a ver algunos yaque este editor tiene libros dedicados.

Nota: VI ya permite desplazarnos con las teclas de cursor.

Funcionamiento

Existen 3 modos de funcionamiento:

• Comando: Las inserciones representan comandos. Se accede a ellos al presionar[Esc]. Cada tecla o combinación de teclas activa una acción.

• Inserción: Se trata de la inserción de texto clásico, se accede al presionar [i] o[a] desde la ventana comando.

• Linea de Comandos: Una linea en la parte inferior de la pantalla permiteinsertar comandos especiales, validada con la tecla [Intro]. Se accede a ellapresionar, en modo comando la tecla [: ]

Cuando se abre VI, por defecto esta en modo comando. Para empezar a introducir textohay que teclear un comando de inserción de texto.

Comandos

Introducción de datos

Se deben de efectuar las acciones siguientes en modo comando. Antes se debe pulsar[Esc][i] o [Esc][a], o [Esc][:].

Comando Acción

a Añadir después del carácter actual

A Añadir texto al final de la linea actual.

i Insertar delante del carácter actual

I Insertar texto al inicio de la linea

o Añadir una linea debajo de la linea actual

O Insertar una linea encima de la linea actual

71www.sugeek.co

Salir y Guarar

Recuerde que [Esc][:] Significa que el comando se introduce en la linea de comandos, seintroduce el comando y luego se oprime [Intro].

Comando Acción

ZZ Guarda el archivo y Sale

:q! Sale sin guardar

:q Sale si no se modifico el archivo (En caso contrario se usa :q! O :wq O :x)

:w Guarda el Archivo, se puede indicar el nombre

:wq o :x Guarda y Sale

1,10w fichero Guarda las lineas de 1 a 10 en el fichero indicado

Corrección

Así como en los procesadores de texto tenemos retroceso y suprimir, en VI tenemos:

Comando Acción

x Suprimir el carácter debajo del cursor

X Borra el carácter delante del cursor

r<c> Sustituye el carácter bajo el cursor por el carácter indicado <c>

dw Borra la palabra desde el cursor

d$ o D Borra desde el cursor hasta el final de la linea

dO Borra desde el principio de la linea hasta el cursor

df<c> Borra todo hasta el carácter indicado

dG Borra todo hasta la ultima linea, incluyendo la linea actual

d1G Borra todo hasta la linea 1, incluyendo la linea actual

dd Borra la linea actual

u Cancela la ultima acción

:u# Cancela los últimos cambios indicados. :u5 cancela los últimos 5 cambios

Se pueden repetir estos comandos, como 5dd suprime 5 lineas; 4dw, borra 4 palabras;5x, 5 Caracteres, etc.

Desplazamiento

Aunque en las nuevas versiones de VI ya se aceptan las teclas de cursor, aun posee susteclas propias de desplazamiento.

Comando Acción

h Ir a la izquierda

72www.sugeek.co

Comando Acción

l Ir a la Derecha (L minúscula)

k Ir hacia arriba

j Ir hacia abajo

0 (cero) Principio de Linea

:0 Primera linea del archivo

$ Fin de Linea

:$ Ultima linea del archivo

w Ir a la palabra siguiente

b Ir a la palabra anterior

[Ctrl] + f Avanzar una pantalla igual que Av Pag

[Ctrl ] + b Volver una pantalla igual a Re Pág

G Ultima linea del archivo, similar a :$

#G Salta a la linea indicada (10G salta a la 10ma linea)

:# Igual a la anterior, :10 salta a la 10ma linea.

Búsqueda de texto

Esta es una de las características especiales que tiene VI, ya que no solo permite buscarpalabras o frases sencillas, si no que también permite realizar muchos criterios debúsqueda.

Para buscar una palabra se usa en el modo comando insertando el carácter / y luego elcriterio de búsqueda, por ejemplo para buscar Debian en un archivo se escribe /Debian,pero esta búsqueda la realizara desde la posición del cursor, para hacerlo forma inversase usa ? En vez de /.

Lo anterior solo buscara 1 sola vez, para seguir la búsqueda se usa comando n (Haciadelante) y N (Hacia atrás) de forma inversa.

Algunos criterios son:

• /[CcBb]ola Da como resultado las palabras que tengan Cola, cola, Bola y bola→• /[A-Z]e Todo lo que empiece con una mayúscula y continué con una e→• /[A-Za-Z0-9] Todo lo que empiece con una mayúscula, una minúscula o una→

cifra.• /[^a-z] Intervalo negativo, todo lo que NO empieza con una minúscula.→• /co.a El punto sustituye un carácter. Coma, cola, coca, etc.→• /Au*o El * Indica cualquier cantidad de caracteres. Una palabra que inicie con Au→

y termine con “o” sin importar la cantidad de caracteres en medio.• /.* Una cadena cualquiera de tamaño variable→

73www.sugeek.co

• /^Auto El ^ indica que sera buscado y deberá de estar al principio de una linea→• /Auto$ El $ indica que sera buscado y deberá de estar al final de una linea→

Comandos de sustitución

Para sustituir algún texto, hay que colocarse al principio de la cadena a modificar, luegoteclear uno de los comandos siguientes. A continuación, teclee simplemente su texto.

Comando Acción

cw Sustituye la palabra corriente

c$ Sustituye hasta el final de la linea

c0 (Cero) Sustituye hasta el principio de la linea

cf<c> Sustituye hasta el próximo carácter indicado

c/<rech> Sustituye hasta la próxima coincidencia de la cadena indicada

Copiar y Pegar

El comando v permite una selección visual para poder seleccionar el texto a copiarmediante las teclas de cursor, luego se pueden usar los siguientes comandos.

• El comando d corresponde a cortar el texto seleccionado • Nos desplazamos hasta donde deseamos pegar el texto y usamos el comando p

Una manera mas “Rápida” es la utilización de los comandos:

• yy Permite copiar la linea actual→• #yy Permite copiar las siguientes X lineas→

Sustitución

La sustitución permite reemplazar de manera automática varias coincidencias por otracadena.

:1,$s/[Ll]inux/LINUX/g

Sustituye desde la 1ra linea (1) hasta la ultima linea ($), todas las coincidenciasencontradas de Linux o linux y los remplaza por LINUX.

Edición avanzada

Comando Acción

:r fichero Inserta el contenido del fichero indicado desde la posición del cursor

:! cmd Ejecuta el comando indicado

.r! cmd Se inserta el resultado del comando ejecutado en la posición del cursor

74www.sugeek.co

Comando Acción

:e fichero Carga el fichero para editarlo

:e# Conmuta entre los diferentes archivos abiertos, es igual a [Alt ] + [Tab]

Comando set

El comando set permite dotar de características al editor.

• :set all Muestra las opciones posibles→• :set number / nonumber Muestra los números de lineas / Deshabilita los→

números • :set showmode / noshowmode Habilita / Deshabilita la vista del estado del editor→

75www.sugeek.co

EDITOR DE TEXTO NANOEl editor de texto nano es una versión libre del editor pico, a diferencia del editor porexcelencia vi o vim el cual fue ideal para aquellos equipos o teclados donde no se poseíateclas de desplazamiento, pero ya con la masificación de teclados con dichas teclas eleditor vi se volvió “obsoleto” pero aun asi algunas personas lo siguen utilizando pormotivos de facilidad (Para usuarios expertos), ya que vi (como vimos) es un editor muycompleto.

Se recomienda nano para aquellas personas que están acostumbradas a los editores detexto de escritorio o son principiantes en este mundo Linux.

Nano mejoro notablemente la interacción del usuario final con la edición de archivos porconsola (Su funcionamiento es muy similar al editor de texto gráfico como writer), acámencionaremos algunos de los comandos.

• Desplazarse entre párrafos, lineas, frases y demás se realiza con las teclas decursor.

• Ctrl + g (F1) Muestra la ayuda→• ctrl + x (F2) Cierra el archivo actual→• ctrl + o (F3) Guarda el trabajo actual→• ctrl + j (F4) Justificar el Párrafo Actual.→• Ctrl + r (F5) Insertar otro fichero en el actual →• ctrl + w (F6) Buscar una cadena o expresión regular →• ctrl + y (F7) Ir a la pantalla anterior →• ctrl + v (F8) Ir a la siguiente pantalla →• ctrl + k (F9) Cortar la línea actual y guardarla en el cutbuffer →• ctrl + u (F10) Pegar el cutbuffer en la línea actual →• ctrl + c (F11) Mostrar la posición del cursor →• ctrl + t (F12) Invocar el corrector ortográfico (si está disponible) →

Además puedes editar nano para que muestre mas información, en el archivo /etc/nanorcpodremos editar como nano muestra la información.

76www.sugeek.co

GESTIÓN DE PAQUETESEl software en GNU/Linux comparte librerías por ende al descargar o instalar softwaredirectamente, se realiza en un tiempo inferior que utilizar software empaquetado (.deb).Existen 3 maneras de realizar una instalación, mediante repositorios, instalación desdelos binarios empaquetados, o desde sus fuentes.

Comando aptitude y apt

Ambos sirven para instalar, desinstalar software y actualizar el sistema, aunqueaptitude de forma predeterminada no viene en Ubuntu (12.04), pero si en Debian. Ladiferencia principal de aptitude contra apt es que este ultimo tiene muchasherramientas hasta casi olvidarlas, en cambio aptitude lo fusiona todo en una sola.(Aunque aptitude es la “GUI” de apt)

Normalmente tienen la sintaxis muy similar: comando accion software. Ej: aptitudeinstall firefox

• aptitude Por si solo mostrara un menú de instalación de software amigable.→• aptitude install Instala software junto con las dependencias necesarias.→• aptitude remove Elimina paquetes junto con las dependencias que queden→

huérfanas.• aptitude purge Elimina paquetes y dependencias huérfanas junto con los→

ficheros de configuración.• aptitude search Busca paquetes en las listas de paquetes locales de apt.→• aptitude update Actualiza las listas de paquetes locales. →• aptitude upgrade Actualiza los paquetes disponibles. →• aptitude clean Elimina ficheros temporales descargados durante la instalación de→

un software. • aptitude dist-upgrade Actualiza paquetes, incluso si eso significa que debe→

desinstalar otros. • aptitude show Muestra detalles acerca del paquete nombrado.→• aptitude autoclean Elimina los paquetes deb obsoletos.→• aptitude hold Fuerza a que un paquete permanezca en su versión actual, y no se→

actualice.• aptitude reinstall Reinstala el paquete o software en mención.→• aptitude full-upgrade Actualizar paquetes instalados a su versión más reciente,→

instalando o eliminando paquetes si es necesario. • aptitude safe-upgrade Actualiza solo aquellos paquetes indicados.→• aptitude keep-all Cancela cualquier cambio programado.→• aptidude show Muestra información sobre el paquete solicitado.→

Como hemos podido observar con solo aptitude podemos realizar muchas tareas conrespecto al software, con apt también pero este usa otras herramientas.

77www.sugeek.co

• apt-get Instala o desinstala software→◦ apt-get install Instala Software indicado→◦ apt-get remove Desinstala el software indicado→◦ apt-get autoremove - Elimina automáticamente todos los paquetes no usados o

librerías huérfanas.◦ apt-get purge Elimina el software y también archivos de configuración.→◦ apt-get autoclean Limpia completamente los archivos temporales usados→

durante la instalación de un software◦ apt-get clean Limpia los archivos temporales generados durante la→

instalación de un software.◦ apt-get update Consigue listas de paquetes nuevos y actualizaciones.→◦ apt-get upgrade Realiza actualizaciones de los paquetes→◦ apt-get source Descarga archivadores origen →◦ apt-get build-dep Configura las dependencias de compilación para paquetes→

origen ◦ apt-get dist-upgrade Actualiza la distribución.→◦ apt-get check Verifica que no hay dependencias rotas. →◦ apt-get markauto Marca los paquetes dados como instalados→

automáticamente ◦ apt-get unmarkauto Marca los paquetes dados como instalados manualmente→◦ apt-get changelog Descarga y muestra el registro de cambios del paquete→

dado ◦ apt-get download Descarga el paquete binario en el directorio actual →

• apt-cache Busca paquetes dentro del sistema local→◦ apt-cache gencaches Construye el paquete y la caché de origen →◦ apt-cache showpkg Muestra información general para un paquete →◦ apt-cache showsrc Muestra registros del origen →◦ apt-cache stats Muestra algunas estadísticas básicas →◦ apt-cache dump Muestra el archivo entero en formato breve →◦ apt-cache dumpavail Imprime un archivo disponible en la salida estándar →◦ apt-cache unmet Muestra dependencia no conseguidas →◦ apt-cache search Busca una lista de paquetes para un patrón de expresión de→

registro ◦ apt-cache show Muestra un registro legible para el paquete →◦ apt-cache depends Muestra información de dependencia en bruto para un→

paquete ◦ apt-cache rdepends Muestra información de la dependencia inversa para un→

paquete ◦ apt-cache pkgnames Lista los nombres de todos los paquetes en el sistema →

Aunque apt tiene muchas mas herramientas, mencionamos las mas destacadas.La utilización de uno u otro se deja a criterio propio, ya que algunos se sienten mascómodos usando apt y otros aptitude.

78www.sugeek.co

Archivo /etc/apt/sources.list

En este archivo encontramos los sitios de donde se descargan el software, son enrealidad unas urls ya sean http o ftp, seguidas de una “opción” especial.

Un Ejemplo de las lineas que podemos encontrar:

deb http://ftp.us.debian.org/debian stable main contrib non-freedeb-src http://ftp.us.debian.org/debian stable main contrib non-free

Como observamos después de la url tiene unas opciones.

Oldstable | Stable | testing | unstable | experimental: Esta opción indica laversión del sistema, como la versión sin soporte, la versión actual o la estable, lasiguiente versión que esta en pruebas, la que sera lanzada pero no se esta probando aprofundidad, y la experimental que es la que incluye los mas recientes paquetes. Sepodría decir que la versión testing es similar a la version 12.04 de Ubuntu, la unstable ala 13.04 y así sucesivamente. Main: Software para los que hay soporte disponible por parte del equipo Debian.

Contrib: Contiene el software que desarrolladores externos al equipo de Debian hancontribuido para su integración.

Non-free: Software que no esta bajo ninguna licencia de Software Libre (SoftwarePrivativo) y son distribuidos en los repositorios oficiales como lo son flash-player

Comando ldd

Este comando permite ver las librerías dependientes de un ejecutable (Share Object),mostrando la librería y la ruta dependiente, muy útil cuando hacemos jaulas con chroot.

Los directorios por defecto de las librerías son:

• /lib Librerías principales del sistema→• /usr/lib Librerías de usuarios→• /usr/local/lib Librerías de Programas→

root@fsugeek:~# ldd /sbin/fdisk linux-vdso.so.1 => (0x00007fff8d1ff000) libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007fe6b7eb4000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe6b7af4000) libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fe6b78ee000) /lib64/ld-linux-x86-64.so.2 (0x00007fe6b80f9000)

Comando ldconfig

Con este comando podremos reconfigurar la cache de librerías compartidas,

79www.sugeek.co

normalmente las librerías compartidas se encuentran configuradas en /etc/ld.so.confen el cual observaremos que están los directorios donde se encuentran los archivos*.conf que incluyen la información de los distintos paths que contienen las librerías. Cadavez que tengamos un nuevo directorio con librerías nuestras u otro programa deberemosconfigurar el archivo indicando la ruta, y luego ejecutando el comando ldconfig.

Debemos de tener especial cuidado con la librería de c o libc ya que esta librería esesencial para el 90% de los comandos ejecutados y servicios de GNU/Linux.

Comando dpkg

Dpkg Es el gestor de paquetes de las distribuciones basadas en Debian, este no usa losrepositorios estándar que se encuentran en /etc/apt/sources.list si no que es el encargadode administrar e instalar aquellos paquetes ya empaquetados como .deb

• dpkg -i → Instala el paquete indicado• dpkg -r Desinstala el paquete o software que se hace mención pero se mantiene→

la configuración.• dpkg -Ri Instalar todos los paquetes .deb de un directorio.→• dpkg -l Lista todos los paquetes instalados en el sistema.→• dpkg -P Elimina el paquete indicado con su respectiva configuración.→

Aunque dpkg cuenta con mas opciones estas 2 son las mas usadas, para el resto deactividades se recomienda el uso de aptitude o apt.

Además existen otros comandos asociados a dpkg, acá listamos algunos.

• dpkg-architecture Configura y determina la arquitectura para la construcción de→paquetes.

• dpkg-query Muestra los paquetes de la base de datos de dpkg→• dpkg-source Herramienta de manipulación de paquetes fuente de Debian .dsc→• dpkg-reconfigure Reconfigurar un paquete ya configurado como MySql→• dpkg-split Divide/Une el paquete indicado en varias partes→• dpkg-buildpackage Crea un paquete .deb a partir de sus fuentes→• dpkg-name Renombra el paquete según su contenido→• dpkg-scanpackages Escanea y genera un índice de los paquetes dentro de un→

directorio.• dpkg-checkbuilddeps Compruebas las dependencias del paquete y conflictos de→

compilación.• dpkg-deb Administra los paquetes .deb→• dpkg-preconfigure Permite que los paquetes realicen las preguntas de→

configuración.• dpkg-vendor Consulta la información sobre el autor del paquete.→

Instalación desde las fuentes

La instalación desde las fuentes de un programa es la manera mas clásica de instalación,

80www.sugeek.co

ya que requiere cumplir primero con las dependencias del programa (Al contrario de aptque las cumple durante la instalación) para luego proceder con la configuración,compilación e instalación del software.

Los pasos a continuación son aplicables en la mayoría de programas que se instalendesde las fuentes, pero siempre es recomendable leer su manual o documento deinstalación.

1. Confirmar que se cuentan con las dependencias del programa, las esenciales songcc y make

2. Descargar el programa fuente, normalmente viene en formato .tar.gz3. Descomprimir el programa en un directorio con los suficientes permisos para

realizar la configuración.4. Ingresar y configurar el programa con .config o ./configure5. Compilar el programa con el comando make6. Instalar el programa con make install

81www.sugeek.co

ADMINISTRACIÓN DE USUARIOSEn GNU/Linux los usuarios poseen identificadores únicos (UID), los cuales según sufunción se les da dicho identificador, el usuario root siempre tendrá como identificador el0, en cambio los procesos del sistema están dentro del rango 1-99, y servicios de red sepodrán encontrar en un rango de 100-999 (En CentOS van de 100-499), los usuarioscreados se crean con identificadores mayores a 1000 así como los respectivos grupos(GID).

Los nombres de los usuarios o “login” pueden tener de 1 a 32 caracteres.

Los archivos responsables de administrar los usuarios de GNU/Linux son:

• /etc/passwd• /etc/group• /etc/shadow

Además de estos archivos también posee los respectivos comandos para crear(useradd, adduser, groupadd, addgroup), eliminar (userdel, deluser, groupdel,delgroup) y modificar (usermod, groupmod).

Usuario root

El usuario root es el principal usuario dentro de cualquier sistema GNU/Linux, es usuarioque todo lo puede y al mismo tiempo el mas peligroso, por ende debemos de evitar usardicho usuario si no poseemos suficientes conocimientos sobre lo que estamos haciendo ovamos a hacer.

Algunos de los comandos que están “prohibidos” ejecutar con este usuario son:

• rm -rf / o rm -rf /* o rm -r / → Este comando dejara inútil el sistema• mv /home/user/* /dev/null Moverá todos los archivos de dicho home y los→

eliminara si posibilidades de recuperar• : ( ) { : | : & } ; : Es una bomba fork o forkbomb la cual genera procesos de→

forma infinita hasta bloquear el sistema.

Directorio /home/

En este directorio se creara el path de cada usuario nuevo de forma predeterminada, enesta nueva carpeta /home/usuariocreado se copiaran los archivos predeterminadosque se encuentran en /etc/skel.

Directorio /etc/skel/

En este directorio se guardaran los archivos/carpetas predeterminados que se le copiaranen el home de cada usuario nuevo. Normalmente los archivos predeterminados que se

82www.sugeek.co

encuentran dentro de esta carpta y que es copiado a cada usuario nuevo son:

• .bash_logout• .bashrc• .profile

Archivo /etc/passwd

En este archivo encontramos información de las cuentas de usuario del sistema. Unalinea del contenido de dicho archivo seria:

root:x:0:0:root:/root:/bin/bash

Dicha linea corresponde a 7 columnas, cada una separada con dos puntos (:), y lainformación que muestra cada columna se interpreta de la siguiente manera.

1. Nombre de la cuenta2. Password Encriptado. La x indica que la contraseña esta en /etc/shadow, si es un

signo de admiración (!) indica que el usuario esta deshabilitado y si tiene dossignos (!!) indica que la cuenta no tiene contraseña.

3. User ID 4. Group ID5. Comentarios o nombre completo del usuario6. Path del Home7. Shell que se usa (Para no permitir el uso de una shell se usa /bin/false)

Normalmente existen mas cuentas de usuario aparte de la de root y la del usuariopersonal, las demás cuentas son predeterminadas del sistema o de algunos servicios.

Archivo /etc/group

Este archivo contiene la información de los distintos grupos de nuestro sistema y losusuarios pertenecientes a este.

sudo:x:27:sugeek, user

Esta linea solo se divide en 4 columnas, las cuales se separan unas de otras con dospuntos (:).

1. Nombre del Grupo2. Campo Especial3. GID o ID del grupo4. Usuarios pertenecientes a este grupo separados por coma

Para mayor información con respecto a este archivo consultar el manual. man group

83www.sugeek.co

Archivo /etc/shadow

En este archivo se guardan las contraseñas cifradas de los usuarios y información decaducidad de las mismas.

Los valores actuales para el cifrado de contraseñas (Son los primeros caracteres iniciadopor $ y terminado por $).

• $1$ MD5→• $2a$ Blowfish→• $5$ SHA-256→• $6$ SHA-512→

sugeek:$6$ODV71rF1$B4soSzgSJycaC7wi7LK:15764:0:99999:7:::

Como vemos la estructura es similar a los archivos passwd y group, cada camposeparado por dos puntos ( : ).

1. Nombre del Usuario2. Contraseña cifrada.3. Días desde el 1ro de Enero de 1970 cuando se cambio o creo la contraseña.4. Días que quedan para que el contraseña pueda ser cambiada.5. Días después de los cuales la contraseña debe de ser cambiada.6. Días por los cuales se le da aviso al usuario para que cambie la contraseña antes

que este expire.7. Días después de 1 Enero de 1970, en los cuales la cuenta será deshabilitada luego

de que la contraseña expire.8. Espacio Reservado.

Para mayor información con respecto a este archivo consultar el manual. man shadow

Archivo /etc/default/useradd

En este archivo se encuentra la configuración de la creación de un usuario, al escribir elcomando useradd -D también observaremos la configuración predeterminada al crearlos usuarios.

Archivo .bashrc

En este archivo se establecen por default la configuración de las shells genéricas(Variables, Alias, etc) y la shell de cada usuario, en cada home existe un .bashrc.

Comandos useradd, adduser, passwd, chage ,userdel, y deluser

El comando useradd es mas complejo que adduser, ya que el primero se indicanopciones del usuario a crear, en cambio adduser solicita información de forma guiada,como dirección, teléfonos, etc. Y creara la carpeta del usuario dentro de /home/. La

84www.sugeek.co

estructura de ambos comando son: comando usuarioacrear

adduserroot@sugeek:~# adduser sugeek Adding user `sugeek′ … Adding new group `sugeek′ (1003) … Adding new user `sugeek′ (1002) with group `sugeek′ … Creating home directory `/home/sugeek′ … Copying files from `/etc/skel’ …Enter new UNIX password:Retype new UNIX password: passwd: password updated successfully Changing the user information for sugeek Enter the new value, or press ENTER for the default Full Name []: SugeekRoom Number []: 1 Work Phone []: 2 Home Phone []: 3 Other []: 4 Is the information correct? [Y/n] y

useradduseradd sugeek -g group -G Administrativos,Tecnicos -d /home/sugeek -m -s /bin/bash-c cuenta de sugeek

Como hemos visto el comando adduser se podría decir que es mas amigable ya quecrea todo de una sola vez, directorios, comentarios, y contraseña cosa que con useraddno sucede y por ende toca indicarle las diferentes opciones.

• g Identifica el ID del grupo o nombre→• d Identifica el path por defecto de dicho usuario→• m Indica la creación del Home→• s Indica la shell que utilizaría ese usuario→• p Contraseña del usuario, No se recomienda su uso, mejor usar después el→

comando passwd• G Otros Grupos del usuario→• u Indica el UID que se desee→• c Comentario sobre la cuenta del usuario→• k Ruta del directorio skel si se desea usar otro al predeterminado el cual es→

/etc/skel

La configuración de este comando lo encontramos en /etc/default/useradd

passwd

Por si solo indicara que se cambie la contraseña del usuario actual, para cambiar lacontraseña de otro usuario se debe de indicar el usuario.

85www.sugeek.co

Entre sus diferentes opciones encontramos:

• l Lock, bloquea la cuenta indicada→• u unlock, desbloquea la cuenta indicada→• d Suprime el password de la cuenta (Solo root)→• n Duración de vida mínima de vida en días de la contraseña→• x Duración máxima de la contraseña→• i Periodo de gracia antes de la desactivación de la cuenta si ha vencido la→

contraseña• w Numero de días antes del aviso de cambio de contraseña→

passwd -n 5 -x 45 -w 7 sugeek

chage

Este comando es similar al adduser en cuento a su finalidad, dar una guia al usuariosobre el cambio de su pasword y reglas.

root@sugeek:~# chage pruebaCambiando la información de la edad para pruebaIntroduzca el nuevo valor, o presione INTRO para el predeterminado

Duración mínima de la contraseña [0]: 5Duración máxima de la contraseña [99999]: 45 Último cambio de contraseña (AAAA-MM-DD) [2013-11-02]: Aviso de caducidad de la contraseña [7]: 7Contraseña inactiva [-1]: -1Fecha de caducidad de la cuenta (AAAA-MM-DD) [1969-12-31]

root@sugeek:~#

Para ver los detalles de la contraseña de la cuenta usamos chage -l cuenta o passwd-S cuenta

¡IMPORTANTE!Para elaborar contraseñas seguras, se recomienda el uso del comando pwgen con las opciones -S (Password Seguro dificil de recordar) -N (Numero de contraseñas a generar) -y (Incluir Símbolos) y el numero al final indica la longitud del password.

root@debian:~# pwgen -syN2 13 |]R@f>1R:X*@> =+nE,!rN}Mn1,

deluser y userdel

Son comandos similares en su estructura (comando usuarioaborrar) la diferencia principal esque deluser muestra información a medida que se borrar el usuario, y userdel no. Para borrarcon userdel se recomiendo usarlo con la opción -r lo cual es recursivo.

86www.sugeek.co

Comandos groupadd, addgroup, delgroup, groupdel

groupadd y addgroup son comandos similares (comando nombredelgrupo) aunquegroupadd permite crear mejor los grupos como su ID.

groupadd sugeek -g 1004

Con el comando anterior se le indica al sistema que se va a crear un grupo llamado sugeek con elid 1004

groupdel no muestra nada en pantalla al borrar el grupo indicado, en cambio delgroup informaen pantalla el proceso de la eliminación del grupo.

root@sugeek:/# delgroup test6 Eliminando al grupo `test6' ... Hecho.

Comando usermod y groupmod

Después de haber creado algún usuario o grupo, en ocasiones se hace necesariomodificar dichos usuarios/grupos por ende están estos comandos.

Usermod

Si requerimos modificar un usuario, lo realizamos con usermod el cual es un comandoque me permite cambiar el path del usuario, shell, y mucho mas.

root@sugeek:~# usermod sugeek -g 0 -c “Usuario Root” -d /root/sugeek/ -s /bin/sh

• G Cambia los grupos del usuario→• g El GID predeterminado del usuario →• c Cambia el comentario del usuario →• d Cambia el path del home del usuario→• e Fecha cuando espirara la cuenta y quedara deshabilitada.→• s La nueva shell del usuario→

groupmod

Similar a usermod pero para grupos.

root@sugeek:~# groupmod sugeek -g 1104 -n prueba

groupdmod -g Cambia el GID del grupo seleccionado.→Groupmod -n Cambia el Nombre al grupo seleccionado.→

87www.sugeek.co

Comando chsh, chfn

Chsh

Con este comando, el usuario podrá cambiar su consola predeterminada, por ejemplocambiarla de sh a bash.

Su sintaxis es sencilla, chsh -s /bin/newshell , El “newshell” hace referencias a lasshells listadas en /etc/shells

Chfn

Este comando me permite cambiar el comentario de la cuenta, así con este podemos definir elnombre completo, dirección, etc.

Comando su

El Comando su (Substitute User )sin opciones sirve para cambiar hacia el usuario root,pero si indica un nombre de cuenta, este cambiara hacia esta cuenta. Si se esta en elusuario root y se desea cambiar hacia otro usuario, este nos solicitara contraseña, pero sise esta en un usuario estándar y se desea cambiar hacia root u otro usuario estesolicitara la contraseña del usuario al cual se desea acceder.

Para volver al usuario anterior se usa el comando exit.

La estructura del comando es: su nombredeusuario además posee sus propiasopciones.

Además podemos ejecutar comandos con un determinado usuario sin necesidad deacceder a este.

Comando gpasswd

Administra los archivos /etc/group y /etc/gshadow, además permite dar permisos ausuarios para administrar grupos. La estructura del comando es: gpasswd opción usuario grupo

Archivo /etc/login.defs

Muchos comandos, como, por ejemplo, login, useradd, groupadd y passwd, utilizaneste archivo para definir algunos valores por defecto y la validez de los login.

Se recomienda ver la pagina man del archivo con man 5 login.defs

Este archivo típicamente trae entradas como las siguientes: (Existen mas opciones), loinvito a observarlas.

• CHFN_AUTH yes | no Si está puesto a yes, chfn y chsh solicitarán autenticación→

88www.sugeek.co

del usuario• antes de ejecutar cualquier cambio, a menos que se ejecute como root.• CREATE_HOME yes | no Define si es que el programa → useradd deberá crear el

directorio hogar del usuario.• GID_MAX int / GID_MIN int. Rango de ID's para escoger para los grupos.→• UID_MAX int / UID_MIN int. Rango de ID's para escoger para los usuarios.→• UMASK int. La máscara de permisos. Si no se especifica, el permiso será 077.→• FAIL_DELAY int. El retardo en aparecer el prompt de login después de algún→

fallo.• FAILLOG_ENAB yes|no. Gernerar logs de fallas de acceso → /var/log/faillog• LOCK_UNFAIL_ENAB yes|no. Permitir que se guarden en la bitácora los nombres→

de usuarios no conocidos cuando se genere un fallo .• LASTLOG_ENAB yes|no. Permite que se guarde la hora de entrada al sistema en→

los logs /var/log/lastlog

Archivo /etc/nsswitch

Este archivo nos permite buscar cierto tipo de información administrativa (hosts, passwd,group, shadow, etc.), especificando que fuentes queremos comprobar (que Base deDatos) y en que orden se harán estas comprobaciones.

Se recomienda ver la pagina manual del archivo, ya que para configuración de serviciosde red, tener conocimientos básicos de este archivo es esencial.

Man 5 nsswitch.con

Archivos /etc/issue /etc/issue.net /etc/motd

En estos archivos podemos configurar los mensajes que le aparecerán a los usuarioscuando ingresen al sistema. Se recomienda modificar el archivo /etc/motd ya que estees el mensaje mostrado a cada momento cuando se ingresa al sistema, alli podemoscolocar términos legales, etc.

89www.sugeek.co

PERMISOS DE ARCHIVOS Y CARPETASDe forma predeterminada el usuario que crea un archivo o carpeta se convierte enpropietario, y el grupo de este también, pero estas características pueden ser cambiadas,para visualizar los permisos de un archivo o carpeta basta con escribir el comando ls -lnombrearchivo.

drwxr-xr-x 7 sugeek sugeek 12288 jul 4 09:29 Descargas

Teniendo en cuenta esta linea, nos enfocaremos en la columna 1, 3 y 4, las cualesinforman los permisos de la carpeta u archivo.

drwxr-xr-x Esta parte indica el tipo de archivo y los permisos de dicho archivo, una → dindica que es un directorio, un guión – indica que es un archivo, una l indica que es unlink o acceso directo hacia otro archivo.

En cuanto a los permisos (rwxr-xr-x) se divide en 3 partes en grupos de 3 quedandorwx r-x r-x, el primer grupo indica los permisos del propietario, el segundo grupo indicalos permisos del grupo propietario, y el tercer grupo indica los permisos de los demásusuarios.

Según lo anterior podemos indicar lo siguiente.

• r Indica Lectura.→• x Indica ejecución.→• w Indica Escritura.→• - Indica sin permiso.→

Teniendo en cuenta lo anterior se podrían dar permisos a un archivo/carpeta de formarelativa o absoluta

¡IMPORTANTE!Los permisos de una carpeta no son lo mismo que los permisos de un archivo.

Permisos Archivos

r Se puede leer el contenido del archivo, cargarlo en memoria, listarlo y copiarlo

w Se puede modificar el contenido del archivo, se puede escribir mas no significa quese pueda eliminar, este permiso lo da el archivo directorio que lo contiene.

x Se puede ejecutar el archivo desde la linea de comandos si se trata de un programa.

Permisos Carpeta

r Se puede listar el contenido del directorio. Sin este permiso ls y demás comandos de acceso a directorio no tienen efecto, pero se puede acceder al archivo con su

90www.sugeek.co

Permisos Archivos

ruta absoluta.

w Se pueden modificar los elementos del directorio, y es posible crear, renombrar y eliminar archivos en este directorio. Este es el permiso que controla los permisos de eliminacion.

x Se puede acceder al directorio con cd y se puede listar, sin este permiso es imposible acceder al directorio y actuar en su contenido.

Permisos Absolutos

Es mas rápido asignar permisos de forma absoluta.

• --- Sin permisos y su valor octal es 0→• --x Ejecución y su valor octal es 1→• -w- Escritura y su valor octal es 2→• -wx Escritura y Ejecución, su valor octal es 3→• r-- Lectura y su valor octal es 4→• r-x Lectura y Ejecución, Su valor octal es 5→• rw- Lectura y Escritura, Su valor octal es 6 →• rwx Todos los permisos su valor octal es 7→

Teniendo en cuenta lo anterior, y siguiendo con los permisos que tiene nuestro archivo,ya podríamos identificar los valores de cada columna (rwx r-x r-x). La primera columna(rwx) la cual son los permisos del propietario tendrá un valor octal de 7, la segundacolumna (Permisos del Grupo Propietario) tiene un valor de 5 y lo mismo para la terceracolumna (Permisos para los demás usuarios) tiene un valor de 5, resumiendo el valoroctal de dichos permisos es 755.

Permisos Relativos:

Esta forma es la menos usada por la mayoría de administradores, pero no significa queno sea igual de eficiente, esta a diferencia de colocar valores numéricos, usa valoresalfanuméricos, pero la ejecución del comando es mas demorada.

• u Indica el usuario→• g Indica el Grupo→• a Indica a todos→• o Indica otros usuarios→

Seguido de esto se indica si se van a quitar o a agregar permisos con un mas (+) omenos (-), y luego que permisos se darán.

• -/+rxw Quita/Agrega todos los permisos→• -/+r Quita/Agrega permisos de lectura→• -/+x Quita/Agrega permisos de Ejecución→

91www.sugeek.co

• -/+w Quita/Agrega permisos de escritura→• -/+rx Quita/Agrega permisos de lectura y ejecución→• -/+rw Quita/Agrega permisos de Lectura y Escritura→• -/+xw Quita/Agrega permisos de ejecución y escritura→

Volviendo al archivo que teníamos el cual poseía los permisos rwx r-x r-x, usandopermisos relativos seria de la siguiente manera.

u=+rwx,g=+rx,o=+rx

Como vemos el comando se alarga, lo cual es mas fácil escribir 755 (Permisos absolutos).Ademas los permisos relativos permite mayor cantidad de opciones, cosa que lospermisos absolutos no permite.

u=+r-wx,g=-rw+x,o=-rxw

Como vemos en el anterior, estamos dando permisos de lectura (r) al usuario propietarioy quitando los de escritura (w) y ejecución (x) , al grupo propietario le quita los permisosde lectura y escritura (rw) pero permite la ejecución (x), y a los demás les quita todos lospermisos. Pero si usamos permisos absolutos seria lo mismo que escribir 410.

Comando chown

Este comando cambia el usuario y grupo propietario de un archivo/carpeta. Su estructuraes:

chown opciones usuario:grupo archivo Ó chown usuario archivo

Algunas de las opciones que permite este comando son:

• -R De forma recursiva, cambia el propietario de los ficheros y subdirectorios de→una carpeta.

• -c Muestra los archivos que fueron afectados→

Comando chgrp

A diferencia de chown, este solo cambia el grupo propietario. Su estructura es: chgrpopciones grupo archivo

Comando umask

Este comando nos mostrara los permisos predeterminados con los que se crea unarchivo/directorio, si se escribe solo mostrara los permisos de forma octal invertida, y sise agrega la opción -S mostrara los permisos predeterminados de forma relativa.

Por ejemplo, de forma predeterminada en sistemas Debian, al escribir umask tendremoscomo resultado el valor 0022, para saber exactamente que permisos tendrán nuestros

92www.sugeek.co

directorios creados, tomamos los valores 777 de permisos absolutos y le restamos elvalor de umask (Restando Permisos mas no valores), dando como resultado 755, eseseria los permisos por defecto al crear un directorio (Para archivos se toma el valor de666).

Para cambiar los permisos predeterminados solo escribimos umask nuevovalor, estenuevo valor debe de ser invertido, por ejemplo si solo deseemos que los creadores de losarchivos tengan permisos, se establecería el valor del umask 077 teniendo comoresultado unos permisos 700 para carpetas y 600 para archivos. Este cambio estemporal, si se desea de forma permanente para todos los usuarios se edita el archivo/etc/profile pero si es solo para el usuario actual, se edita el archivo ~/.bashrc.

Comando chmod

Ya hemos visto como cambiar el propietario de un archivo/directorio, pero no hemosestablecido los permisos a los archivos, con el comando chmod es donde aplicamos lospermisos relativos o absolutos.

Para asignar permisos a un archivo, debemos de tener en cuenta la siguiente estructuradel comando:

chmod permisosrelativos/absolutos archivo/directorioafectado

Según lo anterior podemos decir que:

chmod 731 /home/sugeek/file

Lo anterior es igual que:

chmod u=+rwx g=wx o=x /home/sugeek/file

Como vemos usamos tanto permisos absolutos como relativos para asignárselos a unarchivo.

Permisos Avanzados

Sticky bit

Solo los propietarios pueden borrar el archivo. Para saber si un archivo/carpeta tienedicha opción, en la columna de permisos del archivo, al final de los permisos de otrosusuarios encontramos una t esta indica que esta marcado como sticky bit, y la forma deagregar un sticky bit a un archivo es: chmod +t archivo.

drwxr-xr-t 2 sugeek sugeek 4096 jul 23 13:57 frank

Como observamos, en la columna de permisos, al final indica una t, esto indica el stickybit

93www.sugeek.co

set gid y set uid

Se aplica a los directorios, y la finalidad de este es que todos los subdirectorios que secrean dentro de este directorio “especial” hereda el grupo propietario del directorioprincipal sin importar el grupo al cual pertenece el usuario que creo el directorio. Laforma de activar dicho permiso es chmod g+s path y desactivarlo chmod g-s path.

El UID es para que herede el usuario propietario.

Con chmod u+s comando permite que un archivo se ejecute con los permisos delpropietario mas no del usuario que lo esta ejecutando. La forma de identificar si unarchivo tiene ese permiso, es verificar los permisos del archivo ya que después de lospermisos del propietario se agrega una s. rwxs r-x r-x Como vemos después de lospermisos del propietario se encuentra la s indicando que se puede ejecutar comopropietario sin importar el usuario.

94www.sugeek.co

GESTIÓN DE PROCESOS Y SERVICIOSLos procesos son ejecutados ya sea, por un software, un script, o demonios y estosprocesos tienen relación unos con otros para el funcionamiento adecuado de dichosoftware.

Con anterioridad vimos los comandos top y ps los cuales muestran información sobre losprocesos que se ejecutan en la actual sesión, o todas las sesiones.

Normalmente los procesos tienen una terminología para poder comprenderlos:

• PPID Parent Process ID, o identificador del proceso padre, de este proceso se→desprenden los demás procesos que se requieran para ejecutar adecuadamentedicho software/servicio. El proceso padre por default es el proceso init.

• PID Process ID o Identificador del proceso, es un ID unico y el sistema es el→encargado de asignarle su PID, con el PID podemos matar, finalizar un proceso.

• Init Es el principal proceso, ya que init es el primero que inicia con el kernel y→podría decirse que es el padre de todos los procesos.

• Daemon Proceso demonio, es un proceso especial, asociado a un servicio en el→servidor como apache (httpd) samba (smbd) etc. La mayoría de demonios seidentifican con una d al final del nombre.

• Zombie Es un proceso que consume memoria pero no puede ser matado, pero→no significa que no se pueda terminar.

• Variable $$ Muestra el PID del proceso que estoy ejecutando.→• Variable $PPID Muestra el PPID del proceso que estoy ejecutando→• fork Es la duplicación del proceso padre para generar el proceso hijo. →

Algunos de los comandos para matar un proceso son:

• Kill Mata un proceso usando su PID. → kill NumeroPID◦ kill -l Muestra las señales que se le pueden enviar a un proceso→◦ kill -1 El proceso se reinicia.→◦ Kill -15 Mata a un proceso, es lo mismo que solo→◦ kill -9 Se usa en procesos zombies→

• pkill Mata un proceso usando el nombre del proceso y los relacionados a este.→pkill nombreproceso

• pgrep → Busca el PID de un proceso, indicando el nombre de este.• exec Ejecuta un proceso sin que se ejecute la función de fork, que es→

básicamente la duplicación del proceso original convirtiendo a este ultimo en unproceso hijo.

Para matar varios procesos Zombies al tiempo escribimos:

root@sugeek:~# kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print$2}' `

95www.sugeek.co

Procesos en Background

Los procesos son ejecutados en la terminal, pero hasta que el comando no termine deejecutarse no se podrá realizar otra actividad, corriendo un proceso en Background esposible ejecutar un comando y aun asi seguir trabajando sobre la shell, sin necesidad deabrir otra, el comando se sigue ejecutando en un segundo plano.

Para pasar un proceso a Background basta con terminar el comando con & o oprimir[Ctrl ] + [Z ] y para pasar un proceso a foreground se usa el comando fg y el jobsID.

Para saber desde el terminal que procesos se corren en background, se escribe en laconsola jobs.

El primer campo indica el jobsID seguido del estado del comando y el comandoejecutado.

root@sugeek:~# jobs [1]+ Ejecutando sleep 20000 & root@sugeek:~#

Procesos en Foreground

Los procesos son ejecutados en la shell directamente hasta que finalicen. El shell nodevuelve el control al usuario hasta no terminar el proceso actual.

Para pasar un comando a background solo es terminar con &. Para llamar un proceso enbackground a foreground escribimos fg y el Jobs id.

Prioridad de los procesos

Para dar prioridades a los procesos existen 2 comandos especiales como lo son nice yrenice.

Comando nice:

Este le brinda prioridad a un proceso antes de ser ejecutado.Los rangos de prioridades van desde -20 hasta 19 en formato entero, todo proceso nuevose ejecuta con un valor nice de 0, asi que menor sea el valor mayor la prioridad, ademássolo el usuario root puede establecer valores menores a cero.

Para ejecutar un proceso con un valor al por defecto (cero) se debe de escribir nice -n+numeroentero programa

Comando renice

Este cambia la prioridad de un proceso que se encuentre en ejecución, se utilizan losmismos valores de nomenclatura de nice. Para cambiar la prioridad de un procesoescribimos renice -n -1 -p PID

96www.sugeek.co

Comando nohup

Como es bien sabido, sido cerramos la terminal o se cierra de forma accidental, elcomando se deja de ejecutar, y si estábamos realizando un comando con un procesodemorado seria un poco molesto que esto sucediera, para evitar esto existe el comandonohup, el cual permite cerrar la terminal pero continuara ejecutando el comandoindicado y la salida del comando lo tendremos en el archivo nohup.out. La sitasix delcomando es:

nohup comando/script a ejecutar.

Comando update-rc.d

Este comando permite añadir, suprimir activar o desactiva los scripts, por nivel deejecución. Para que un servicio o script inicie por default solo se indica update-rc.dservicio defaults

Este comando dejara el servicio que inicie en los runlevels 2 a 5 y pararse para losrunlevels 0 1 y 6.

Pero también podemos indicarle en que runlevels estará, como por ejemplo, leindicaremos que al iniciar estará en el campo 10 y se ejecutara en los niveles 3 4 y 5. Enparada estará en la posición 5 y en los niveles 0 1 y 6.

uptate-rc.d servicio start 10 3 4 5 . stop 05 0 1 6 .

Para poder eliminar un servicio se procede a indicar con el comando update-rc.d -fservicio remove.

Servicios

Para administrar servicios o demonios, como iniciarlo, pararlo, o recargarlo podemosutilizar la estructura:

service nombredelservicio restart | stop | start | reload

Siendo restart y demás posibles estados que se le pueden aplicar al servicio, si no sereconoce dicho servicio, toca indicar la ruta completa del demonio, los cualesnormalmente están en:

/etc/init.d/nombredeldemonio

Y luego indicando la actividad a realizar restart | stop | sart | reload.

97www.sugeek.co

REDIRECCIONES, TUBERÍAS Y FILTROSLas redirecciones son herramientas que me permiten modificar los canales estándar(stdin, stdout y stderr) ya que como sabemos el stdin por default es el teclado, podemoscambiar esta entrada por un archivo, o el resultado de un comando etc, lo mismo con elstdout y stderr. A lo anterior se le denomina canales, los cuales van desde 0 a 9, siendolos 0 al 2 los canales por defecto (stdout, stdin, stdout). El resto de canales (3 al 9) lopodemos usar a nuestro gusto, para crear el 3er canal usamos exec 3>dump.log a locual le estoy indicando que cuando realice direcciones hacia el canal 3, en realidadescribe sobre el archivo indicado. Para usar dicho canal basta con escribir >&3 despuésde la acción a redirigir. Para eliminar el canal creado escribimos exec 3>&-

Redirección de salida con > y >>

Enviar la información que despliega al ejecutar un comando en pantalla en ocasiones esmolesto, por ende esta salida se envía a un archivo para su posterior revisión. Unejemplo:

apt-get update > Informe_de_Actualización

Como observamos hemos ejecutado el comando apt-get update seguido de laredirección de salida > y el nombre del archivo, de forma predeterminada este archivoquedara guardado en el path donde nos encontremos en ese momento, si el archivo noexiste se crea.

Si volvemos a ejecutar otro comando redirigiendo la salida al mismo archivo, y estearchivo contiene información, esta información sera borrada, para ello usamos elredireccionador >> el cual escribirá el resultado después de la ultima linea del archivo.

Pero si deseo que la redirección no me sobre escriba ni borre el contenido del archivo,debemos de activar una opción en el shell que se llama noclobber el cual evitaracualquier sobre escritura del archivo. Para activar dicha opción solo escribimos en laconsola set -o noclobber y si deseamos desactivarlo escribimos set +o noclobber.

Redirección de errores con 2>

Así como direccionamos la salida estándar (stdout) y la salida de errores (stderr) con >,también podemos direccionar solamente los errores y que el resto se muestre enpantalla, esto es ideal cuando necesitamos ver que errores se presentaron al ejecutarseun comando.

apt-get update 2> Errores_de_Actualización

Existe otra opción de direccionar el stdout y stderr, ya que podría presentarse que elstderr lo envié a /dev/null, por ende en ocasiones se usa el 2>&1 el cual indicara que sedireccionara tanto el stdout como el stderr al destino indicado.

98www.sugeek.co

apt-get update > stdoutstderr_de_actualización 2>&1

Con el comando anterior estamos redirigiendo todas las salidas a un archivo. Lo anteriorseria similar a:

apt-get update > Informe_de_actualización 2> Error_de_Actualización

Redirección de entrada con <

Sabemos que la entrada estándar de la shell es el teclado, pero eso lo podemos cambiar si ya tenemos los comandos en archivos.

Redirección con here-documment <<

<< Indica la palabra la cual sera escrita para terminar de ingresar información al archivo.

root@sugeek:~# cat << Final > prueba - esto es una prueba - Final root@sugeek:~# cat prueba esto es una prueba

Tuberías y Filtros

Las tuberías es una herramienta para la ejecución de un comando con el resultado delcomando anterior. Normalmente este se utiliza para filtrar el contenido de una salida decomandos y ubicar con exactitud un argumento descrito.

La tubería se identifica con el carácter ( | ) el cual indicara que la salida del comandoanterior sera la entrada del siguiente comando.

Comando basename y dirname

El comando basename me permite obtener el nombre de un archivo de una rutaespecificada, en cambio el comando dirname permite obtener la información sobre eldirectorio donde se encuentra un archivo.

Comando tee

Este permite copiar la salida de un comando a un archivo y la salida estándar se puedeusar con una tubería.

[email protected]:~# ls -la | tee file | grep apache

El anterior comando me lista el contenido de un directorio ( ls -la ) al tiempo que dichasalida es direccionada al comando tee el cual crea un archivo al tiempo que muestra elcontenido de la salida de ls -la pero esta salida es direccionada al comando grep paraque me muestre solo la linea que contenga apache.

99www.sugeek.co

Comando grep

Este busca una palabra o frase indicada dentro de un archivo para mostrarla en pantallalo encontrado, normalmente se usa con una tubería pero se puede usar por si solo.

[email protected]:~# ls -la | grep apache

En el anterior comando estamos buscando dentro de la salida del comando ls la palabraapache.

[email protected]:~# grep -ri “servidor apache” /home/sugeek/*

El anterior comando estamos usando el comando grep solo, indicando que haga unabúsqueda recursiva ( r ) en todos los directorios y en el contenido de todos los archivos,además que no haga distinción entre mayúsculas y minúsculas ( i ).

• -v Muestra el resultado de forma inversa→• -c Solo devuelve el numero de lineas encontradas, sin mostrarlas, útil para saber→

cuantas coincidencias tiene el termino de búsqueda.• -i No diferencia las mayúsculas de las minúsculas→• -n Indica el numero de la linea donde se encuentra ubicado el termino buscado→

dentro de un archivo.• -l Si son varios archivos en donde se busca, con esta opción indica en que→

archivo se encontraron los términos.

[email protected]:~# grep -i “^f” sugeek

El anterior comando buscara las lineas que inicien con una f si no se define ^ buscaralas lineas que dentro de su frase tenga la letra f.

Comando egrep

Es similar a utilizar grep -E, para realizar búsquedas o filtros mas avanzados.

[email protected]:~# egrep "^[bB]uenas(tardes|noches)$" file

El anterior comando buscara las lineas que inicien con b o B, continué con uenas ytermine con tardes o noches en el archivo file. Ahi no queda todo se pueden usarmuchas mas opciones.

Conjunto Función

| Lógico, la expresión colocada antes o después debe de desaparecer

(...) Agrupación de Caracteres

[...] Un carácter tiene esta posición entre los indicados

. Punto, cualquier carácter

+ Repetición, el carácter colocado antes debe de aparecer al menos una vez

100www.sugeek.co

Conjunto Función

* Repetición, el carácter colocado antes debe de aparecer de 0 a n veces.

? El carácter colocado antes debe de aparecer una sola vez como máximo

{n} El carácter colocado antes debe de aparecer exactamente n veces

{n,} Aparece n veces o mas

{n,n} Aparece entre n y m veces

^ Inicio de la Cadena

$ Final de la cadena

root@sugeek:~# ifconfig wlan0 | egrep '([0-9]{1,3}\.){3}[0-9]{1,3}' Direc. inet:192.168.2.111 Difus.:192.168.2.255 Másc:255.255.255.0

El anterior comando se descompone:

• ifconfig wlan0 Interfaz de red que voy a obtener el direccionamiento→• | El resultado de esto se lo envía al comando → egrep• '([0-9]{1,3}\.){3}[0-9]{1,3}' Obtiene las direcciones →

◦ [0-9] Indica que es un carácter de 0 a 9→◦ {1,3} Indica que se repite de 1 a 3 veces x o xx o xxx→◦ \. Seguido de un punto→◦ {3} En un conjuto de 3 veces xxx.xxx.xxx→◦ [0-9] Indica un carácter de 0 a 9→◦ {1,3} Repetido entre 1 y 3 veces→

Comando cut

Este comando me permitirá delimitar el contenido de la salida de un comando, o de unarchivo para mostrar el contenido de ciertos espacios, muy utilizado en archivos de basesde datos, o que tienen como contenido una base de datos.

[email protected]:~# cut -d “;” -f 1 archivobd

El anterior comando mostrara el contenido del archivobd y suponemos que eldelimitador de dicha db entre los campos es un ( ; ) por ende lo usamos con la opción -d.con la opción -f indicamos que solo nos muestre el contenido de la 1ra columna, sideseamos mostrar mas columnas o columnas distintas separamos dichas columnas conuna coma (-f 1,4,6).

Comando column

El comando column, no se diferencia mucho del comando cut, column me muestra enpantalla el contenido de una tabla con su respectivo separador.

root@sugeek:~#culumn -s: -t /etc/passwd

101www.sugeek.co

La opción -s indica el delimitador, y la -t indica las columnas que se verán.

Comando tr

tr es un filtro que nos permite cambiar una determinada información de un archivo porotra.Cambia cada uno de los caracteres especificados en el conjunto inicial por los caracteresespecificados en el conjunto final.

El fichero de origen o fichero destino lo especificamos con los caracteres de redirección:< ó >.

root@sugeek:~# tr ':' ' ;' < /etc/passwd > usuarios

El comando anterior me esta indicando que estamos buscando el carácter ( : ) y lo vamosa remplazar con ( ; ), dentro del archivo /etc/passwd y lo redirija hacia un archivo llamadousuarios.

Algunos ejemplos:

• cat miarchivo | tr a-z A-Z → Remplazar minúsculas por mayúsculas • echo "This is for testing" | tr -s [:space:] Quitar los caracteres→

repetidos simultáneos (espacios) con la opción -s• echo "the geek stuff" | tr -d 't' Eliminar un carácter con la opción → -t• echo "my username is 432234" | tr -cd [:digit:] → Borrar el todo el

contenido (-d) manteniendo la opción indicada (-c), la opción indicada son losnúmeros

• tr -s '\n' ' ' < file.txt Unir todas las lineas de un archivo, en una sola linea→

Comando sort

Ordena de alfabéticamente o numéricamente el contenido de un archivo o la salida de uncomando.

[email protected]:~# sort /etc/passwd >> usuarios

El anterior comando me listara alfabéticamente el contenido del archivo /etc/passwd y lasalida la redirigirá sin sobrescribir el contenido de usuarios. Si lo deseo organizar deforma inversa dicho contenido solo ingresamos la opción -r.

• -f Este parámetro nos sirve para indicar que las mayúsculas y las minúsculas se→van a tratar de forma diferente y que por tanto se va a seguir un ordenamientoalfabético.

• -n Este parámetro nos sirve para ordenar los campos numéricos por su valor→numérico.

• -r Nos permite realizar una ordenación inversa, es decir, de mayor a menor.→

102www.sugeek.co

• -k numero De este modo especificaremos por qué columna o campo vamos a→realizar la ordenación en las versiones más recientes de Linux.

• -t Indica el delimitador→• -u Nos permite suprimir todas las líneas repetidas después de realizar la→

ordenación.• -o Indica el archivo de salida del comando→

[email protected]:~# sort -t: -k4 /etc/passwd >> usuarios

El Anterior comando me organiza el contenido del archivo /etc/passwd por la 3ra columna(-k4 ) usando el delimitador : (-t:) y a su ves redirija la salida a archivo usuarios si borrarsu contenido.

Comando uniq

Este comando permite remover o mostrar las lineas repetidas que se encuentran dentrode un archivo o salida de un comando.

Es estrictamente recomendable usar uniq a la salida del comando sort.

[email protected]:~# sort file | uniq > file2

Comando paste

El comando paste agrupa n archivos en uno. Para ello, concatena las lineas de cada unode los archivos en una sola linea, linea1 del file1 con la linea 1 del file2.

root@sugeek~# paste -d: file1 file2

Comando diff

Indica las modificaciones que hay existen entre 2 archivos, para que su contenido seaidéntico

diff -b file1 file

Este comando devuelve 3 tipos de resultados:

• APPDEND: 5a6,8 Lo anterior indica que la linea 5 del → file1 hay que insertar laslineas 6 a la 8 de file para que sean idénticos.

• DELETE: 7,9d6 Indica que se debe de suprimir las lineas 7 a la 9 del → file1 paraque sea idendico a file

• CHANGE: 8,12c9,13 Indica que se deben de intercambiar las lineas de 8 a la 12→del file1 contra las lineas 9 a la 13 de file para que estos sean idénticos.

Además la salida del comando devuelve un < y otro >, el < indica el contenido de file1,y > indica el contenido de file, normalmente este comando se utiliza para corroborar los

103www.sugeek.co

datos de un archivo (file1) contra el “Original” (file).

Comando sed

Sería bueno poder automatizar el proceso de editar archivos, de forma que podamos"procesar por lotes" la edición de archivos, e incluso crear macros con la habilidad derealizar cambios sofisticados a archivos existentes. Afortunadamente para nosotros ypara este tipo de situaciones, hay un método mucho mejor -- y este método se denominased.

sed es un ligero editor de flujo que está incluido en casi todos los sabores UNIX, Linuxincluido. sed tiene muchas buenas características. Dado que sed es un editor de flujo,puede editar los datos que recibe de stdin, como aquellos redireccionados. Por lo que nose necesita tener los datos a editar almacenados en un archivo del disco. Dado que losdatos pueden redirigirse a sed, es muy fácil usar sed como parte de un largo y complejoredireccionamiento en un archivo por lotes de nuestro intérprete de comandos.Intentemos hacerlo con nuestro editor favorito.

Sed, escribe sus resultados en la salida estándar (stdout); por lo que no modifica ningunode los archivos de entrada.

Podemos usar expresiones regulares para expresar patrones que podemos encontrar enel texto. Si hemos usado alguna vez el carácter '*' en un comando del intérprete decomandos, hemos usado algo muy similar, aunque no idéntico, a las expresionesregulares. Aquí tenemos los caracteres especiales que pueden usarse en las expresionesregulares:

• ^ Apunta al comienzo de la línea→• $ Apunta al final de la línea→• . Apunta a un único carácter→• * Apunta a cero o más ocurrencias del carácter previo→• [ ] Apunta a todos los caracteres entre los corchetes →

Veamos algunos ejemplos con expresiones regulares para facilitar las cosas. Todos estosejemplos serán aceptados por sed como direcciones válidas que pueden aparecer a laizquierda de cualquier comando:

• /./ Apuntará a cualquier línea que contenga al menos un carácter→• /../ Apuntará a cualquier línea que contenga al menos dos caracteres→• /^#/ Apuntará a cualquier línea que comience con un '#'→• /^$/ Apuntará a cualquier línea en blanco→• /}$/ Apuntará a toda línea que termine con un '}' (sin espacios)→• /} *$/ Apuntará a toda línea que termine con un '}' con cero o más espacios→• /[abc]/ Apuntará a toda línea que contenga una 'a', 'b', o 'c' minúscula→• /^[abc]/ Apuntará a cualquier línea que empiece con 'a', 'b', o 'c'→

104www.sugeek.co

Coincidencia con más caracteres

La sintaxis de expresiones regulares '[ ]' tiene más opciones adicionales. Para especificarun rango de caracteres se puede usar '-', siempre y cuando no esté ni en la primera ni enla última posición, como se muestra a continuación:

'[a-x]*'

Apuntará a cero o más caracteres, siempre que cada uno de ellos sea una 'a','b','c'...'v','w','x'. Además, la clase de caracteres '[:space:]' está disponible para coincidircon espacios en blanco. He aquí una lista bastante completa de clases de caracteres:

• [:alnum:] Alfanumérico [a-z A-Z 0-9]→• [:alpha:] Alfabético [a-z A-Z]→• [:blank:] Espacios o tabuladores→• [:cntrl:] Cualquier carácter de control→• [:digit:] Dígitos numéricos [0-9]→• [:graph:] Cualquier carácter visible (no espacios en blanco)→• [:lower:] Minúsculas [a-z]→• [:print:] Caracteres que no sean de control→• [:punct:] Caracteres de puntuación→• [:space:] Espacio en blanco→• [:upper:] Mayúsculas [A-Z]→• [:xdigit:] Dígitos hexadecimales [0-9 a-f A-F]→

Es una gran ventaja usar clases de caracteres siempre que sea posible, dado que seadaptan mejor a las localizaciones no inglesas (incluyendo caracteres con acentossiempre que sea necesario, etc).

Ejemplos

• Insertar texto en la ultima lineased -i '$a Aqui el texto que ira en la ultima linea' archivo

• Insertar texto en una linea especifica (5ta Linea)sed -i '5i Aqui texto que ira en la 5ta linea' archivo

• Borrar Lineas vacías de un [email protected]:~# sed '/^$/d' fichero

• Cambiar una cadena de texto por otra en la linea 1 a la [email protected]:~# sed '1,10s/cadena1/cadena2/g' fichero

• Mostrar solo las lineas que coincidan con la expresión [email protected]:~# sed -n -e '/root/p' /etc/passwd | less

105www.sugeek.co

• Si únicamente se quiere imprimir la función main() en un archivo de código fuenteen C, se podría teclear: [email protected]:~# sed -n -e '/main[[:space:]]*(/,/^}/p' sourcefile.c | more

Este comando tiene dos expresiones regulares, '/main[[:space:]]*(/' y '/^}/', y uncomando, p. La primera expresión regular apuntará a la cadena "main" seguida decualquier número de espacios o tabuladores, seguida además por un paréntesis abierto.Lo cual debería coincidir con el comienzo de nuestra declaración main() en ANSI C.

En este caso de expresión regular, encontramos la clase de caracteres '[[:space:]]'. Lacual es únicamente una palabra clave especial para sed que le indica a sed que apuntea cualquier espacio o TAB. De haberlo querido, en lugar de teclear '[[:space:]]',podríamos haber tecleado '[', después un espacio literalmente, a continuaciónControl-V, después un TAB literal y un ']' -- Control-V indica a bash que queremosintroducir un TAB "real" en lugar de una expansión del comando. Es mucho másclaro, especialmente en archivos de comandos usar la clase de comandos '[[:space:]]'.

Bien, ahora la segunda expreg. '/^}/' apuntará a algún carácter '}' que aparezca alcomienzo de una nueva línea. Si nuestro código se ha formateado correctamente,toparemos con ello con el final de nuestra función main(). Si no lo está, no lo harácuestión de trabajar con la coincidencia de patrones.

El comando p hace lo mismo que siempre, le dice a sed que imprima explícitamente lalínea, dado que estamos en el modo silencioso '-n'. Si se intenta ejecutar el comando enuna línea de código fuente en C, tratará de mostrar el bloque completo main() { },incluyendo el "main ()" inicial y el '}' final.

Hasta ahora, únicamente hemos realizado una simple sustitución de cadenas. Aunqueesto puede ser muy útil, podemos también buscar expresiones regulares. Por ejemplo, elsiguiente comando sed encontrará una frase que comience con '<' y termine con '>', yque contenga cualquier número de caracteres entremedias. Esta frase se borrará (seráreemplazada por una cadena sin contenido):

[email protected]:~# sed -e 's/<[^>]*>//g' miarchivo.html

En el ejemplo anterior, el '[^>]' especifica un "carácter que no sea '>'" y el '*' despuésdel mismo completa la expresión para significar "cero o más caracteres que no sean '>'".Recomiendo probar este comando con algunos archivos HTML de ejemplo, encauzarloscon more y comprobar los resultados.

• Podemos referirnos a partes o a cadenas enteras con las que coincida la expresiónregular y usar estas partes para construir la cadena de reemplazo. Como ejemplo,digamos que estamos respondiendo a un mensaje. El siguiente ejemplo pondrá elprefijo "Rafa dijo: " a cada frase:

[email protected]:~# sed -e 's/.*/Rafa dijo: &/' msjorig.txt

106www.sugeek.co

En este ejemplo, usamos el carácter '&' en la cadena de reemplazo, que le indica ased que inserte la expresión regular completa con la que coincida. Por lo que todolo que coincidió con '.*' (el mayor grupo de cero o más caracteres en la línea, o lalínea completa) puede ser introducido en la cadena de reemplazo, incluso enmúltiples ocasiones. Esto está muy bien, pero sed es mucho más poderoso aún.

107www.sugeek.co

LA SHELL EN GNU/LINUXComo mencionamos a un principio, GNU/Linux cuenta con muchas CLI por las cuales sepuede administrar nuestro sistema.

El shell bash es uno de los numerosos shells disponibles para Linux. También recibe elnombre de Bourne-again shell, en honor a Stephen Bourne, creador del shell inicial(/bin/sh). Bash es básicamente compatible con sh pero además proporciona variasmejoras tanto en las capacidades de funciones como en las de programación. Bashincorpora características del shell Korn (ksh) y del shell C (csh) y está diseñado enconformidad con el estándar POSIX.

Antes de ahondar en bash, recuerde que un shell es un programa que acepta y ejecutacomandos. También soporta construcciones de programación que permiten la elaboraciónde comandos complejos a partir de partes más pequeñas. Estos comandos complejos, oscripts, pueden guardarse como archivos para convertirse en comandos en sí mismos. Dehecho, muchos de los comandos dentro de un típico sistema Linux son scripts.

Regionalización e Internacionalización

A diferencia de otros sistemas, las distribuciones GNU/Linux vienen adaptadas parafuncionar con múltiples idiomas así como su respectivo software, así que para cumplir unestándar los desarrolladores, si desean que su software este disponible no solo en elidioma natal si no en un idioma global (Ingles) se recomienda utilizar lainternacionalización y regionalización del software.

Regionalización(l10n)

Consiste en facilitar una traducción de un producto que corresponde a la cultura local(Idioma, Moneda, representación simbólica, etc.)

Internacionalización (i18n)

Un solo programa requiere funciones de una API de internacionalización. Una funciónencargada de recuperar una cadena de texto en cualquier idioma, dentro de una baseverificara que idioma se utiliza y sacara la cadena correspondiente a dicha palabra.

En Debian y derivados se utiliza la herramienta dpkg-reconfigure locales paraconfigurar el idioma de la distribución.

La variable del entorno que hace referencia sobre el idioma del sistema es LANG, sueleestablecerse en /etc/profile y se encuentra con el formatoidioma_Pais.norma@Variable , un ejemplo seria Español - Colombia, la variable LANGtendría como valor es_CO.UTF-8.

Con el comando locale -a permite recuperar la información sobre los elementos de

108www.sugeek.co

regionalización soportados por el sistema el cual obtiene la información de/usr/share/locale, al escribirlo obtendremos la siguiente salida:

root@sugeek:~# locale LANG=es_CO.UTF-8 LANGUAGE=es_CO:es LC_CTYPE="es_CO.UTF-8" LC_NUMERIC="es_CO.UTF-8" LC_TIME="es_CO.UTF-8" LC_COLLATE="es_CO.UTF-8" LC_MONETARY="es_CO.UTF-8" LC_MESSAGES="es_CO.UTF-8" LC_PAPER="es_CO.UTF-8" LC_NAME="es_CO.UTF-8" LC_ADDRESS="es_CO.UTF-8" LC_TELEPHONE="es_CO.UTF-8" LC_MEASUREMENT="es_CO.UTF-8" LC_IDENTIFICATION="es_CO.UTF-8" LC_ALL=

Veamos el significado de las variables LC:

• LANG Variable LANG→• LANGUAGE Idioma Predeterminado→• LC_CTYPE Clase de caracteres y conversión→• LC_NUMERIC Formato numérico por defecto (No se incluye la moneda)→• LC_TIME Formato por defecto de la fecha y hora→• LC_COLLATE Reglas de comparación y de ordenación (Caracteres Acentuados)→• LC_MONETARY Formato monetario→• LC_MESSAGES Formato de los mensajes informáticos→• LC_PAPER Formato por defecto del papel para impresión o visualización→• LC_NAME Formato del nombre de una persona→• LC_ADDRESS Formato de Dirección→• LC_TELEPHONE Formato de Teléfono→• LC_MEASUREMENT Formato de Medidas→• LC_IDENTIFICATION Formato de identificacion→• LC_ALL= Reglas para todas las otras variables de LC→

Usos Horarios

GNU/Linux gestiona los husos horarios, por defecto sin configuración de huso, se elige lahora universal UTC (Universal Time Coordinate) invariable en el mundo.

En Debian se define el uso horario en /etc/timezone y se recomienda modificarlo con elcomando tzselect.

109www.sugeek.co

Codificación de Caracteres

Cuando se habla de codificación hace referencia al idioma en el cual esta escrito elarchivo origina, puede ser diferente al de nosotros (o al de nuestra región), se puedehablar el mismo idioma pero los caracteres no son los mismo, por ejemplo se tendría quedescodificar el es_ES si nuestro idioma es es_CO ya que en España se maneja el Euro yen Colombia el Peso, seria aun mas engorroso cuando el idioma de origen es un idiomasimbólico como es el Mandarín.

Estas variaciones de idioma están reguladas por las normas ISO, siguiendo el ejemplo deEspaña la norma ISO es la 8859-1 la cual corresponde a los caracteres de Europa delOeste, y la ISO 8859-15 es el utilizado después del paso al Euro.

GNU/Linux al basarse en los estándares internacionales ayuda a otros sistemas a resolverproblemas de codificación, como es el caso de Windows, el cual no usa dicho estándar sino que crea sus propias tablas. Para remediar este problema se utiliza el estándarunicode el cual es compatible con el estándar ISO 10646.

GNU/Linux por defecto (Como la gran mayoría de herramientas basadas en estándares)utilizan el formato UTF-8.

Con el comando iconv es posible convertir una tabla de x tipo de codificación a y tipo decodificación, ideal cuando estamos tratando con archivos o bases de datos que no estáncodificadas en nuestro formato o región. Con la opción -l se muestran todas las tablassoportadas.

Para convertir un archivo, se utiliza la siguiente sintaxis:

inconv -f FormatoOrigen -t FormatoDestino Archivo

Operadores de Control Shell

Los operadores son encargados establecer los parámetros durante la ejecución de uncomando, por si uno se ejecuta, se ejecutara otro comando, o dos comandos al tiempoetc.

Operador &&

Es el operador si y solo si el cual permitirá la ejecución de un comando siempre ycuando el primero se cumpla.

[email protected]:~# apt-get update && apt-get upgrade && apt-get install samba

Operador ||

Dicho operador significa or, es valido siempre y cuando el comando anterior no seejecuta.

110www.sugeek.co

[email protected]:~# more /var/log/apt/history.log || less /var/log/apt/history.log

Operador &

Permite enviar un proceso o ejecución a background para poder seguir trabajando sobrela shell, para llamar nuevamente dicho proceso al foreground se usa el comando fg sisolo tenemos ese comando en background o verificando el ID del Job con jobs ycolocando dicho ID después de fg.

Operador ;

Este indica que un comando se ejecutara cuando el comando anterior termine sinimportar si se ejecuto bien o no.

Operador \

Si se coloca al final de la linea de un comando, estamos indicando que el comando o lineade comandos que estamos escribiendo continuara en la siguiente linea.

[email protected]:~# more /var/log/apt/history.log || less /var/log/apt/history.log \> echo Aca continuamos con el comando

Además de indicar el final de una linea, también indica la inclusión de un carácterespecial, como una nueva linea, un tabulador, etc.

• \a Alerta→• \b backspace →• \n Nueva Linea→• \r Retorno de Carro →• \t Tabulador Horizontal→• \v Tabulador Vertical→• \\ BackSlash→• \' Comilla Simple→• \" Comilla Doble→• \ Espacio→

Operador #

Este indica un comentario al final de una linea de comandos.

[email protected]:~# more /var/log/apt/history.log || less /var/log/apt/history.log #Esto es un Coment.

Agrupación de Comandos

Se pueden agrupar comandos para luego hacer una sola redirección o una sola accióncon ellos.

111www.sugeek.co

root@sugeek:~# (uname -a ; pwd ; ls -l) > resultado

Lo anterior es igual a root@sugeek:~# uname -a > resultado ; pwd >> resultado ; ls -l >> resultado

Argumentos del Shell

Los argumentos sirven para simplificar, y dar funcionalidades espciales a ciertos scripts, olineas de comandos.

• $# Número de argumentos→• $* Todos los argumentos del shell→• $- Opciones suministradas al shell→• $? Valor de retorno del último comando ejecutado→• $$ Identificación del PID (número de proceso)→• $0 Nombre del script→• $1 Primer argumento→• $n Argumento "n" →

Comando echo

El comando echo Imprime en pantalla los argumentos o frases escritos después de este.

[email protected]:~# echo HolaHola

Comillas Doble “”

Este tipo de comillas tendrá como base la frase o argumento descrito, teniendo en cuentalas variables o caracteres especiales que dentro de esta se escriban.

[email protected]:~# echo “Voy a imprimir mi shell: $SHELL”Voy a imprimir mi shell: /bin/bash

Comillas Simples ' '

A diferencia de las comillas dobles, esta toma el valor ingresado dentro de estas tal cualsin [email protected]:~# echo 'Voy a imprimir mi shell: $SHELL'Voy a imprimir mi shell: $SHELL

Comillas invertidas ` `

Estas comillas se utilizan en especial cuando se asocia un comando a una variable paraque este pueda ser interpretado en un [email protected]:~# myvar=`echo “Hola Mundo”`[email protected]:~# echo $myvarHola Mundo

112www.sugeek.co

Variables Shell

Las variables en la shell de GNU/Linux van precedidas de un $. Recordemos que la variable es un valor que que se le asigna a un nombre simbólico para después ser llamada durante un proceso de ejecución de determinado programa o script, este valor puede o no puede cambiar.

Declaración de Variables

Para declarar una variable en la shell es muy sencillo, solo se estable el nombre de lavariable, y luego su valor.

[email protected]:~# MyVar=”Esta es Mi Variable”[email protected]:~# echo $MyVarEsta es Mi Variable

Viendo lo anterior ya podemos declarar variables temporales en nuestra shell, pero deforma predeterminada tenemos unas variables ya predefinidas en nuestra consola(Variables de Entorno) como lo son:

• $BASH=/bin/bash • $COLUMNS=149 • $DESKTOP_SESSION=gnome-shell • $DISPLAY=:0 • $EUID=1000 • $GDMSESSION=gnome-shell • $HISTFILE=/home/sugeek/.bash_history • $HISTFILESIZE=500 • $HISTSIZE=500• $HOME=/home/sugeek• $HOSTNAME=sugeek• $HOSTTYPE=x86_64 • $LANG=es_CO.UTF-8 • $LANGUAGE=es_CO:en • $MACHTYPE=x86_64-pc-linux-gnu • $OSTYPE=linux-gnu • $PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/

bin• $PWD=/home/sugeek• $SHELL=/bin/bash • $UID=1000 • $USER=sugeek

Para suprimir una variable es suficiente indicando con el comando unset y el nombre dela variable. Si se desea es proteger una variable contra la supresión u modificación sedefine con el comando readonly, la única manera de quitar esa variable de solo lectura

113www.sugeek.co

es saliendo de la shell. Cabe recordar que las variables del sistema son en mayúsculas.

Variables Tipadas

Las variables pueden ser de tipo numérico, entero (integer), con el comando typeset -i.La ventaja es que permite efectuar cálculos y comparaciones sin pasar por expr. elcomando let permite cálculos sobre variables

Operador Función

+ - * / Operaciones Sencillas

% Modulo

< > <= >= Comparaciones, 1 si es verdadero o 0 si es falso

!= == Diferente o Igual

&& || Comparaciones Relacionadas con un operador lógico

& | ^ Lógico binario AND OR XOR

root@sugeek:~# typeset -i operacion root@sugeek:~# operacion=5*5 root@sugeek:~# echo $operacion 25 root@sugeek:~# operacion="Prueba de Texto" -bash: Prueba de Texto: error sintáctico en la expresión (el elemento de error es "de Texto") root@sugeek:~# operacion=operacion*2 root@sugeek:~# echo $operacion 50 root@sugeek:~# typeset -i operacion2 root@sugeek:~# operacion2=2 root@sugeek:~# let operacion=operacion2+8 operacion=operacion*operacion2 root@sugeek:~# echo $operacion 20

Programación en Shell

Ya hemos visto algunas de las variables, comandos y opciones que hacen parte de lashell de GNU/Linux, pero es hora de aprender como agrupamos dichas ordenes en unarchivo para hacer las cosas mas fáciles.

En GNU/Linux podemos programar scripts simples o complejos según sea nuestranecesidad, utilizando en especial la shell bash.

Nota: Un script puede ser escrito el cualquier shell, pero también utilizando programascomo python.

Un shell script es básicamente un programa que llama a otros programas, con laposibilidad de hacer algún tipo de procesamiento propio (como control de flujo,operaciones matemáticas simples, etc).

114www.sugeek.co

Para crear un script podemos usar el editor de texto preferido, por ejemplo vi, nano,emacs o los GUI como gedit, scratch, etc.

Todo script debe de iniciar con la linea #!/bin/bash o el shell por preferencia pudiendo sersh, ksh, csh, etc. Esto con el fin de indicarle a la consola que shell va a ser utilizado en laejecución del script, ya que no todas las shells tiene las mismas funciones y variables.

Nuestro primer script

No estaríamos programando si nuestro primer script no fuera “Hola Mundo” así que acátenemos el contenido de este primer script.

Recordemos utilizar nuestro editor de texto preferido.

#!/bin/bashecho “Hola Mundo” # Escribe en el stdout la palabra “Hola Mundo”

Después que ya tenemos el contenido de nuestro primer script, lo siguiente es darle lospermisos de ejecución.

root@sugeek:~# chmod u+x miscript.sh

Nota: No necesariamente el script tiene que terminar con .sh , puede terminar sinextensión.

Al ejecutarlo tenemos, notemos ./ el cual da la instrucción de ejecutar el script.root@sugeek:~# ./miscript.shHola Mundo

Control de Flujo

No siempre hay un solo camino a seguir y estas proposiciones permiten que el programarealice distintas tareas, según las condiciones de las variables a interpretar.

Control If:

El "if" es un proposición de control que verifica si es verdadera o falsa una condición.

Sintaxis:

if comando-condiciónthen Comandos si la condición es verdaderaelse Comandos si la condición es falsafi

115www.sugeek.co

Es importante que la ubicación de las lineas se mantenga, ya que las proposicionesif/then/else/fi se controlan línea por línea. La parte else es opcional. En caso de quererhacer todo el control en una sola línea, las proposiciones deberán estar separadas por unpunto y coma (;).

Los comandos que estén debajo del then se ejecutarán si la condición dio verdadera.Esto quiere decir que el valor de retorno de la condición fue 0 (cero). En caso contrario seejecutarán los comandos que le siguen al else, si es que se utilizó esta proposición.

En la condición se puede poner un comando, donde la ejecución del mismo (su valor deretorno) definirá qué comandos (de qué proposición) se ejecutarán.

Si se verifica una condición, se deberán utilizar los corchetes para mayor comprensión.

#!/bin/bashif ps ax | grep httpd | grep -v grepthen echo "El web server está funcionando"else echo "El web server NO esta funcionando"fi

#!/bin/bashif [ -w /etc/passwd ]then echo "Tengo permisos de escritura en el archivo /etc/passwd"else echo "NO tengo permisos de escritura en el archivo /etc/passwd"fi

Puede suceder que tengamos que testear mas de una condición, para esto, podemosutilizar la siguiente estructura:

if condición1 then Comando1 Comando2elif condición2 then Comando1 Comando2else Comando-por-defecto #Ninguna de las condiciones anteriores es verdaderafi

Esta es una manera de abreviar varias estructuras if - then - else - if en una sola,pudiendo utilizarse más de dos condiciones.

116www.sugeek.co

La estructura de control if, es muy utilizada con test, que no es más que una operaciónde comparación, en las condiciones que se requieran.

Control case:

El "case" es una proposición que puede analizar y validar varios casos (opciones) delvalor de una variable.

Sintaxis

case variable inpatrón | patrón) Comando; Comando; Comando;;

patrón | patrón) Comando; Comando; Comando;;*)Comandos si ningún otro valor fue igualado;;esac

El case es raramente usado, pero es muy eficiente en algunos casos.

#!/bin/bashcase $mes inene*|Ene*) echo "Mes de Enero";;feb*|Feb*) echo "Mes de Febrero";;mar*|Mar*) echo "Mes de Marzo";;*) echo "Algún otro mes!";;esac

Ciclos:

Los ciclos contienen secciones del programa que se repetirán una determinada cantidadde veces o hasta que alguna condición cambie.

Ciclo for

El for debe ser el ciclo más utilizado, es muy práctico cuando se trabaja con shell scripts.

A diferencia de los lenguajes de programación más comunes, un ciclo for dentro de unshell script realiza una acción dada sobre cada uno de los elementos de una lista, y no

117www.sugeek.co

sobre una variable que se va incrementando en cada ciclo.

La variable utilizada en el for (en este caso $i) es reemplazada por cada una de laspalabras de la lista, en cada ciclo del for.

Sintaxis:

for i in lista de palabrasdo cuerpo del ciclo, $i tiene el valor de elementos sucesivos de la listadone

#!/bin/bashfor i in `ls -1 /tmp`do echo $i rm -i $idone

En este ciclo, el comando ls -1 /tmp, generará una lista de todos los archivos queexisten en el directorio /tmp. Dentro del cuerpo del ciclo imprimimos el contenido de lavariable y luego preguntamos si se desea borrar ese archivo (opción -i del comando rm).

Ciclo while

Este ciclo utiliza la condición de terminación de un comando (valor de retorno) paracontrolar la ejecución de los comando dentro del ciclo. Termina la ejecución del ciclo,cuando el comando devuelve falso (algo diferente a 0).

Sintaxis:

while comandodo cuerpo del ciclo ejecutado a condición de que el comando devuelva verdaderodone

#!/bin/bashwhile sleep 60sdo who | grep danieldone

En este ejemplo, cada 60 segundos (definidos por el comando sleep 60s, puede ser 60mpara minutos, 60h para 60 horas o 60d para 60 dias), verificará si el usuario daniel haingresado al equipo. En caso de que lo haya hecho, el listado del who saldrá por pantalla(cada 60 segundos).

118www.sugeek.co

Ciclo until

Este ciclo se comporta de una manera muy similar al anterior, ya que define su controldependiendo del comando que ejecuta (si éste da verdadero, se sigue ejecutando elciclo).

Sintaxis:

until comandodo cuerpo del ciclo ejecutado a condición de que el comando devuelva falso.done

#!/bin/bashuntil who | grep danieldo sleep 60sdone

En este ejemplo, a diferencia del ejemplo del ciclo while, el ciclo ejecuta primero elcomando, de esta forma no es necesario esperar 60 segundos para saber si el usuarioDaniel esta logueado en el equipo (si el usuario esta logueado, el ciclo termina).

Funciones

Las funciones son un recurso esencial para la buena programación, permiten escribir unasola vez un pedazo de código que se repita varias veces en el script, y así, minimizar elmargen de error y también la cantidad de líneas en el programa.

Para utilizarlas simplemente se hace un llamado a la función. Las funciones pueden estardentro del mismo shell script, o en un archivo aparte. Cuando se escriben las funcionesen un archivo aparte, es muy importante utilizar el comando "." (punto) para cargarlas enmemoria. Si no se cargan en memoria de esta manera, las funciones no estarándisponibles.

#!/bin/bash. /home/funciones.sh #Se cargan las funciones de un archivo externo

La sintaxis para utilizar funciones es muy sencilla y no agrega mayor dificultad. El modode uso se remite a definir la función especificando el nombre y paréntesis que abren ycierran. Todos los comandos que involucran la función se encierran con llaves.

Un ejemplo de la función mas desastrosa en GNU/Linux, es la famosa bomba fork :(){:|:&};:

Expliquemos dicha linea.

119www.sugeek.co

: Nombre de la Función.→{ Abre el contenedor y tareas de la función.→:|: Se llama a si misma y el resultado se lo envía así misma.→& Se envía así misma a un proceso de segundo plano.→} Cierra las actividades de la función.→; Termina la Función.→: Se llama nuevamente→

Como se puede observar es un ciclo repetitivo el cual, si no se cancela colapsa lamemoria del sistema si estamos con root.

Valores de retorno

Las funciones pueden devolver valores de error utilizando el comando "return <valor>".En caso de que no se especifique un valor de retorno de esta forma, el valor retornadoserá el que retorne el último comando ejecutado dentro de la función.Desafortunadamente no es posible asignar el valor retornado en una sola línea, siemprees necesario utilizar la variable especial "$?".

Ejemplo:#!/bin/shfunc () { return $1}func 0echo "ret: ($?)"func 1echo "ret: ($?)"func 2echo "ret: ($?)"func 3echo "ret: ($?)"

Variables locales a la función

Existe la posibilidad de utilizar variables locales a la función, esto significa que la variablesolamente va a existir durante la ejecución de la función.

Para crear una variable local a la función se utilizar el operador "local<nombre_de_variable>".

Ejemplo:#!/bin/shfunc () { local x x=$1 echo "Dentro de la función \$x vale ($x)"}

echo "Antes de ejecutar la función \$x vale ($x)"

120www.sugeek.co

func HOLA!!echo "Después de ejecutar la función \$x vale ($x)"

Operaciones Aritméticas

Existen varias formas de calcular valores dentro de un shell script. Tradicionalmente,estos cálculos se hicieron con programas externos, esto generaba un retardo inmenso enla ejecución del shell script.Hoy los nuevos intérpretes traen la posibilidad de hacer cálculos internamente. Para estose utiliza una sintaxis especial, y es muy importante que los valores de las variables queutilicen para hacer estos cálculos sean números únicamente.

La sintaxis para hacer operaciones aritméticas es la siguiente:

$[<expresión>]

Las operaciones que se pueden realizar son:

• suma $((1+1))• resta $((2-1))• multiplicación $((2*2))• división $((2/2])• otras como suma de bits, sacar el módulo, evaluación de igualdad, etc.

Ejemplo:#!/bin/shx=2tot=$[$x+1]echo "tot: ($tot)"

Operaciones lógicas y de comparación:

Para usar if podemos usar un nuevo elemento, los corchetes que evalúan las condiciones,esto esta basado directamente en test. Y éste nos sirve para comparar variables.

• -lt Menor que →• -eq Igual que →• -gt Mayor que →• -le Menor o igual que →• -ge Mayor o igual que →• -ne No coinciden →• -a Operador lógico and →• -o Operador lógico or →• != Distinto →

Con lo anterior podemos comparar 2 valores o variables con el comando test.root@sugeek:~# test 1 -eq 1 ; echo $?

121www.sugeek.co

0

En el anterior ejemplo estamos probando (test) que 1 es igual a 1 (1 -eq 1) y si esverdadero da como resultado 0 (echo $?). Con esto estamos comparando 2 valores, locual lo podemos hacer dentro de un script usando if.

El siguiente script hace la comprobación si un archivo es ejecutable, lo cual si no esejecutable lo convierte a ejecutable, si es ejecutable arroja un mensaje.

#!/bin/bash if [ ! -x $FILE ] then chmod +x $FILE else echo "$FILE es ejecutable" fi

Interacciones con el Usuario:

En ocasiones es necesario que el usuario interactué con la CLI, ya sea para que indique eldirectorio de instalación del programa o script, o solo para pedir confirmación, para ellousamos read o dialog.

Comando read:El comando read es muy sencillo. Le indicamos que pida el valor de una variable alusuario, el usuario escribe una línea de texto (es decir, cualquier cosa hasta que presioneenter), y la variable toma el valor que el usuario ingresó.

#!/bin/bashecho “Escriba el contenido de la Variable A”read Aecho “Se imprime en pantalla el valor de la variable A”echo $A

Del script anterior tenemos como resultado:

root@sugeek:~# ./script.sh Escriba el contenido de la Variable A www.sugeek.co Se imprime en pantalla el valor de la variable Awww.sugeek.co

Comando dialog:Este comando permite generar una “GUI” dentro del CLI, permitiendo interactuar alusuario con las teclas del cursor, de esta manera el programa o script se vuelve masamigable.

Puede producir preguntas si/no, menú, lista, calendario, barra de progreso, diálogo decontraseña, cuadro de texto, cuadro de mensaje, etc. Se recomienda ver su pagina

122www.sugeek.co

manual man dialog.

123www.sugeek.co

ADMINISTRACIÓN DE UNIDADES DEALMACENAMIENTO

Como ya sabemos, GNU/Linux identifica los distintos dispositivos de almacenamiento(Discos Duros) como es el sd (sda, sdb, etc...) y el hd (hda, hdb, etc...), estos dispositivostienen características especiales como velocidades de escritura/lectura, recordando quelos discos de estado solido o SSD son de mejor rendimiento que los mecánicos o discosduros convencionales. En cuanto a los discos duros mecánicos esta compuestos porplatos, cabezales, pistas, sectores, etc. Asi como lo podremos encontrar tanto paracomputadoras de escritorio, servidores, portátiles, etc.

Dentro de estos discos, encontramos tanto particiones primarias, lógicas, se puedenformar Logical Volumen Manager, RAID's, etc. A continuación vamos a entender elfuncionamiento dentro del sistema de archivo de GNU/Linux y a configurar algunas deestas tecnologías.

Nota: En este apartado no vamos a profundizar ni en conectividad, tipos de discos, ninada lo que respecta al hardware como tal.

¡IMPORTANTE!Los discos duros están divididos por bloques, y un archivo SIEMPRE ocupa un bloque completo sin importar su tamaño, por ende si un archivo pesa solo 1byte y el bloque por defecto es de 4096bytes significa que se están perdiendo 4095bytes, a lo cual lleva comoresultado una ocupación rápida del espacio en disco, tener en cuenta la finalidad del sistema de archivos, no es lo mismo un servidor de archivos, a un servidor de base de datos y a un servidor de hosting web.

Superbloque

Cada sistema de archivos dispone de al menos un superbloque, el cual es el encargadode contener información respecto al sistema de archivos como:

• Tipo• Tamaño• Estado• Otros Superbloques• Tabla de Inodos

GNU/Linux intenta primero leer el superbloque del primer disco. Puede ocurrir que esteúltimo esté corrompido después de malas operaciones o una avería. En este caso, ya nose puede acceder a los datos del disco ya que no es posible saber que tipo de sistema dearchivos es, la cantidad de inodos, etc. GNU/Linux posee una copia de estos superbloquesrepartidos por todo el sistema de archivos, así que si se corrompe es posible que con elcomando fsck se reconstruya la estructura del filesytem.

124www.sugeek.co

MBR

El MBR o Master Boot Record se encuentra en el sector 0 de un dispositivo dealmacenamiento, normalmente en este se guarda información del arranque del SO,tablas de particiones, identificador del disco. El MBR es de 512 Bytes.

En GNU/Linux, podemos realizar un backup del MBRroot@sugeek:~# dd if=/dev/xxx of=mbr.backup bs=512 count=1

Si deseamos restaurar el MBR escribimos root@sugeek:~# dd if=mbr.backup of=/dev/xxx bs=512 count=1

Esto se hace con el fin por si se llega a dañar dicho sector de arranque, que en ocasioneses un problema común.

Particiones soportadas GNU/Linux

GNU/Linux soporta una gran cantidad de tipos de particiones, que se listan acontinuación.

Archivo /etc/fstab

FileSystem Table, o Tabla de sistema de Archivos. En este archivo se encuentran lasdiferentes configuraciones de los sistemas de archivos soportados por GNU/Linux. Estearchivo se usa a menudo cuando se tienen unidades externas y deseamos que se montenal iniciar el sistema operativo. La estructura de este archivo es:

<dispositivo> <punto_de_montaje> <sistema_de_archivos> <opciones> <dump-freq> <pass-num>

• Dispositivo Es el directorio lógico que hace referencia a una partición o recurso→

125www.sugeek.co

• Punto de Montaje Indica donde se va a montar dicho recurso→• Sistema de Archivos Esto va asociado según sea el dispositivo montado.→

◦ Ntfs Cuando es Windows XP o mayores→◦ fat Si la partición es de tipo FAT32→◦ vfat Cuando la partición es de tipo FAT16→◦ iso9660 Para DVD's, CD's y discos ópticos.→◦ Sw Para la partición tipo swap→◦ ext# Sistema por default de Linux ext2 ext3 o ext4→◦ auto Cuando no se esta seguro que tipo de sistema de archivos es.→

• Opciones Se estipulan los parámetros del comando mount, estas opciones deben→de estar separadas por comas ( , ).◦ auto Con esta opción hacemos que el dispositivo que la contenga sea iniciado→

siempre que se inicie el sistema, es decir, cada vez que este sea encendido.◦ no auto Esta es la opción contraria a auto, con ella hacemos que el→

dispositivo no sea montado al iniciarse el sistema, y tan solo sera montado enel momento en el que queramos usarlo; esta opción suele ser utilizada condispositivos como las disqueteras, cd-roms, dvd, pendrives-usb, etc.

◦ async Con esto hacemos que las operaciones que realicemos no se hagan en→el mismo momento en que las realizamos/pedimos, si no que pueden serrealizada mas adelante.

◦ Sync Es la opción contraria a async. Añadiendo la opción sync fijaríamos que→los datos sean transferidos, guardados o borrados, en el momento en quepedimos que se hagan. Esta opción puede servir de mucho, y sobre todoahorrarnos tiempo en la manera en la que se transfieren datos a dispositivoscomo los pen-drives y aquellos que se utilizan mediante conexión usb en loscuales necesitamos acceso/transferencia rápido/a.

◦ Exec Esta opción hace que puedas ejecutar programas, ficheros script→(guiones), o cualquier otra cosa cuyos permisos indiquen que es ejecutable, deese sistema de ficheros.

◦ Noexec Impide la ejecución de cualquier archivo en el dispositivo en el que→esta opción sea activada, esta opción suele ser muy útil cuando en una mismamaquina diversos usuarios tienen acceso a un mismo dispositivo y no queremosque estos puedan ejecutar archivos en los dispositivos, con esto ganamos enseguridad, ya que impedimos que los otros usuarios puedan ejecutar cualquiertipo de archivo “maligno” a través del cual lo que realmente quieren conseguires escalar privilegios en el sistema.

◦ gid=Valor Con esta opción indicamos que tan solo el grupo que posee el Valor→especificado tenga el control sobre los archivos del dispositivo. Puede tratarsede un valor numérico gid=1000 o del nombre del grupo de usuarios(gid=users,gid=usuarioslectordvd).

◦ uid=Valor Con esta opción indicamos que tan solo el usuario que posee el→Valor especificado tenga el control sobre los archivos del dispositivo.

◦ Owner indica que el propietario del sistema de ficheros (el que tiene→derechos a montar y desmontar el dispositivo) será aquel que lo montó (elprimer usuario distinto de root conectado al sistema localmente), peronormalmente sera el usuario root si el sistema de ficheros viene configurado

126www.sugeek.co

para montarse automáticamente durante el arranque.◦ Ro read-only. Con esta opción hacemos que no se pueda escribir en el→

dispositivo, que tan solo se pueda leer. ◦ Rw read-write. Con esto montamos la partición para que sea posible tanto→

leer como escribir en el dispositivo físico, esta opción es muy usada condispositivos que permiten la escritura como por ejemplo los pendrive o losdisquets, ya que sin esta opción, no podríamos guardar datos en dichosdispositivos.

◦ User Permite a cualquier usuario del sistema montar o desmontar un→dispositivo físico sin necesidad de ser root, esta opción es muy útil paradispositivos de uso frecuente, como cd-roms o disquetes. Pero también debetenerse en cuenta, que el usuario que montó el dispositivo, solo el mismousuario podrá desmontar el dispositivo.

◦ Users Indica que cualquier usuario puede montar y cualquiera también,→puede desmontar el dispositivo.

◦ Nouser Debes ser el usuario root para montar el sistema de ficheros, nadie→más que el superusuario podrá hacerlo.

• dump-freq E→ s el comando que utiliza dump para hacer respaldos del sistema dearchivos, si es cero no se toma en cuenta ese dispositivo.

• Pass-num Indica el orden en que la aplicación fsck revisará la partición en busca→de errores durante el inicio, si es cero el dispositivo no se revisa.

Nota: Se recomienda indicar el UUID del dispositivo, ya que de este modo evitaremosfallas al arranque del sistema. Ver el Comando blkid

Comando lsscsi

Este comando me identifica los discos que tenemos instalado en nuestro sistema,normalmente no viene instalado en Debian, pero se puede instalar con aptitude installlsscsi.

La salida del comando es la siguiente:root@sugeek:~# lsscsi [1:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr0 [2:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sda

Comando hdparm

Deforma predeterminada con la opción -I muestra información del disco seleccionadousando la información del sistema, si se usa la opción -i muestra es información obtenidapor el kernel. Dicho comando en ocasiones no se instala de forma predeterminada.

root@sugeek:~# hdparm -I /dev/sda

/dev/sda:

ATA device, with non-removable media Model Number: VBOX HARDDISK

127www.sugeek.co

Serial Number: VB66e02ab6-0256918b Firmware Revision: 1.0

Standards: Used: ATA/ATAPI-6 published, ANSI INCITS 361-2002 Supported: 6 5 4

Configuration: Logical max current cylinders 16383 16383 heads 16 16 sectors/track 63 63 -- CHS current addressable sectors: 16514064 LBA user addressable sectors: 41943040 LBA48 user addressable sectors: 41943040 Logical/Physical Sector size: 512 bytes device size with M = 1024*1024: 20480 MBytes device size with M = 1000*1000: 21474 MBytes (21 GB) cache/buffer size = 256 KBytes (type=DualPortCache)

Capabilities: LBA, IORDY(cannot be disabled) Queue depth: 32 Standby timer values: spec'd by Vendor, no device specific minimum R/W multiple sector transfer: Max = 128 Current = 128 DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 Cycle time: min=120ns recommended=120ns PIO: pio0 pio1 pio2 pio3 pio4 Cycle time: no flow control=120ns IORDY flow control=120ns

Commands/features: Enabled Supported: * Power Management feature set * Write cache * Look-ahead * 48-bit Address feature set * Mandatory FLUSH_CACHE * FLUSH_CACHE_EXT * Gen2 signaling speed (3.0Gb/s) * Native Command Queueing (NCQ)

Checksum: correct

Pero hdparm no solo sirve para obtener información del disco, este también me permiterealizar modificación al disco, como ancho de banda del bus de datos, etc.

Este comando es muy delicado, es recomendable conocer con exactitud el disco, y quetecnologías soporta.

Para mas información, se recomienda utilizar la pagina manual del comando, además conel comando dumpe2fs también se puede obtener suficiente información sobre undispositivo.

128www.sugeek.co

Montar y desmontar una unidad de almacenamiento

Con el comando mount y umount podremos montar y desmontar unidades como USB,Discos Duros Externos, DVD's, Discos Duros Internos y un largo etc. Recordemos queestas unidades las encontramos en el directorio /dev demarcados como sda1 o hda0 etc.

Comando mount

Este comando sirve para montar las unidades que deseemos indicando unas opciones osin estas. La estructura de este comando es:

mount -t tipodesistema -o opciones /dev/dispositivo /carpetadestino

Los sistema de archivos soportados por mount son:

• auto (intenta descubrir automáticamente el sistema de archivos). • iso9660 (sistema de archivos de los CD y DVD). • ext2 (sistema de archivos muy extendido en maquinas Linux). • ext3 (igual que ext2 pero además añade journaling). • ext4 (introdujo significativas mejoras respecto a ext3) • reiserfs (otro sistema muy utilizado en maquinas Linux). • msdos (para dispositivos que usen FAT12 o FAT16). • vfat (para dispositivos que usen FAT32). • ntfs (sistema de archivos NTFS de Windows NT, XP, etc.). • smbfs (sistema de archivos de Samba). • nfs (sistema de archivos de red NFS). • hfs y hfsplus (acceden a sistemas de archivos de Apple Macintosh).

Además las opciones de este son similares (por no decir iguales) a las contenidas delarchivo /etc/fstab ya que en este archivo utiliza el comando mount.

Se recomienda en un sistema de archivos de almacenamiento montar los discos con elUUID (Universal Uniq Identifier) ya que es probable que las “letras” de los discoscambien, pero el UUID es único y no cambia.

Para saber el UUID de un disco se usa el comando blkid.

root@sugeek:~# blkid /dev/sdd1 /dev/sdd1: UUID="fb2f1f0f-9fbc-4f9d-820a-27ea6ad707d8" TYPE="ext4"

Después de tener el UUID del disco se procede a montarlo.

root@sugeek:~# mount -t ext4 -U fb2f1f0f-9fbc-4f9d-820a-27ea6ad707d8 /home/datos

Además de permitir sistemas de archivos como unidades de almacenamiento, tambiénpermite montar imágenes de DVD o CD.

129www.sugeek.co

root@sugeek/:# mount -t iso9660 -o loop dvd.iso /mnt/iso

Comando umount

A contrario del mount este se encarga de desmontar la unidad montada, este comandoes sencillo de usar la estructura es:

umount /dev/dispositivo umount /carpetamontada

Comando lsof

Este comando me permite verificar que archivos están usando el dispositivo (sin opcionesme muestra todos los archivos abiertos y asociados al proceso), ya que en ocasionescuando se desea desmontar un dispositivo arroja el mensaje “Dispositivo Ocupado, no sepuede desmontar”

soporte@sugeek:~$ lsof /dev/sdb1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME pantheon- 25828 soporte 29r REG 8,17 18356 104 /media/SUGEEK/img.jpg

Se podrá terminar el proceso usando su PID, pero también podemos terminar todos losprocesos asociados a dicho dispositivo con fuser -km /media/SUGEEK

Particionar Unidades

Si queremos ver específicamente que particiones tiene nuestro sistema solo basta converificar el archivo /proc/partitions.

root@sugeek:~# cat /proc/partitions major minor #blocks name

8 0 20971520 sda 8 1 194560 sda1 8 2 1 sda2 8 5 20773888 sda5 11 0 1048575 sr0 254 0 1949696 dm-0 254 1 9764864 dm-1

Con el comando fdisk (El comando cfdisk es mas gráfico) podemos crear diferentesparticiones sobre una unidad de disco, ya hemos visto un poco de las características defdisk con la opción -l.

Comando fdisk

!IMPORTANTE¡Con este comando solo podremos crear particiones de máximo 2TB, lo cual se supondría que seria mas que suficiente si vamos a crear RAID+LVM, y aun son pocos los discos que

130www.sugeek.co

superen esta capacidad, para particiones con mayor capacidad se recomienda usar gparted.

Como se menciono en el enunciado anterior, fdisk es un comando completo para laadministración de particiones. Para obtener mas información escribir man fdisk. Laestructura del comando es:

fdisk /dev/dispositivo

Al ingresar allí nos indicara que deseamos hacer, para tener mas claro las diferentesopciones solo oprimimos la tecla m para obtener las distintas opciones de fdisk.(Eliminar, listar, crear, etc)

root@sugeek:~# fdisk /dev/sda El dispositivo presenta un tamaño de sector lógico que es menor que el tamaño de sector físico. Alinear a un límite de tamaño de sector físico (o E/S óptima) es recomendable o se resentirá el rendimiento.

Orden (m para obtener ayuda): m Orden Acción a Conmuta el indicador de iniciable b Modifica la etiqueta de disco bsd c Conmuta el indicador de compatibilidad con DOS d Suprime una partición l Lista los tipos de particiones conocidos m Imprime este menú n Añade una nueva partición o Crea una nueva tabla de particiones DOS vacía p Imprime la tabla de particiones q Sale sin guardar los cambios s Crea una nueva etiqueta de disco Sun t Cambia el identificador de sistema de una partición u Cambia las unidades de visualización/entrada v Verifica la tabla de particiones w Escribe la tabla en el disco y sale x Funciones adicionales (sólo para usuarios avanzados)

Como podemos observar las diferentes opciones de dicho comando me permitirápreparar un disco para diferentes ambientes de producción como lo son RAIDS, LVM, etc.

Vamos a crear una partición sobre el disco /dev/sdb, se recomienda hacer esto en discosdesmontados y no activos, ya que puede llevar a perdida de datos.

root@sugeek:~# fdisk -l | grep sd El disco /dev/sdb no contiene una tabla de particiones válida El disco /dev/sdc no contiene una tabla de particiones válida Disco /dev/sda: 8589 MB, 8589934592 bytes /dev/sda1 * 2048 487423 242688 83 Linux /dev/sda2 487424 16775167 8143872 83 Linux

131www.sugeek.co

Disco /dev/sdb: 8589 MB, 8589934592 bytes Disco /dev/sdc: 8589 MB, 8589934592 bytes

Vemos que el disco es un disco de 8GB, procedemos a seleccionarlo:

root@sugeek:~# fdisk /dev/sdb El dispositivo no contiene una tabla de particiones DOS válida ni una etiqueta de disco Sun o SGI o OSF Building a new DOS disklabel with disk identifier 0x6dfdc02e. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable.

Atención: el indicador 0x0000 inválido de la tabla de particiones 4 se corregirá m9.2. Procedimientos. ediante w(rite)

Luego de haber seleccionado el disco a particionar procedemos a crear las particionesque necesitemos, con la opción l podemos observar los tipos de sistemas de archivossoportados.

Después de conocer los tipos de sistemas de archivos soportados, procederemos a crearla partición tipo Linux.

Con indicando la opción n crearemos una nueva partición, solicitara que tipo de particióndeseamos crear si primaria o lógica, oprimimos p para primaria (Recordemos que en undisco solo se pueden crear 4 particiones primarias y lógicas las que queramos). Despuésde ello me solicitara el numero de la partición, indicamos que 1 y por ultimo el tamañoque le deseo dar, puede ser tipo sectores o tamaño directo indicando si va a ser enKylobytes (K), MegaBytes (M) o Gigabytes (G), pero lo dejaremos tal cual para usar todoel disco.

Orden (m para obtener ayuda): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Número de partición (1-4, valor predeterminado 1): 1 Primer sector (2048-16777215, valor predeterminado 2048): Se está utilizando el valor predeterminado 2048 Last sector, +sectores or +size{K,M,G} (2048-16777215, valor predeterminado 16777215): Se está utilizando el valor predeterminado 16777215

Ya tenemos creada nuestra partición, ahora falta indicar el tipo de archivo que soportara,para ello damos la opción t para indicarle el tipo de sistema de archivos que leconfiguraremos (De forma predeterminada las particiones se crean soportando el sistemade archivos ext.) selecionamos la partición que se va a cambiar el tipo de sistema dearchivos y luego con L vemos los distintos sistemas de archivos soportados, validamos elque queremos, en este momento nos interesa el tipo Linux asi que escribimos 83. Con la

132www.sugeek.co

opción p imprimiremos las particiones que hemos creado en memoria pero que aun nose han escrito en el disco.

Orden (m para obtener ayuda): t Se ha seleccionado la partición 1 Código hexadecimal (escriba L para ver los códigos): 83

Orden (m para obtener ayuda): p

Disco /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders, 16777216 sectores en total Units = sectores of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Identificador del disco: 0x254b8c68

Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/sdb1 2048 16777215 8387584 83 Linux

Como vemos ya el disco sdb tiene una partición creada en memoria mas no en disco(/dev/sdb1), ahora falta escribir dichos cambios en el disco para que tomen efecto, paraque estos cambios se escriban damos la opción w la cual indica Write sobre el disco.

Orden (m para obtener ayuda): w ¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.

Se están sincronizando los discos.

Después de haber particionado nuestro disco lo podemos observar con el comando fdisk-l | grep sdb el cual me mostrara la información de dicho disco y sus particiones.

root@sugeek:~# fdisk -l | grep sdb El disco /dev/sdc no contiene una tabla de particiones válida Disco /dev/sdb: 8589 MB, 8589934592 bytes /dev/sdb1 2048 16777215 8387584 83 Linux

Ya tenemos nuestro disco preparado para ser formateado, y montado sobre un directorio.Ya para eliminar una partición seleccionamos el disco, y luego indicamos la opción dseleccionamos la partición a borrar y por ultimo escribimos los cambios con la opción w.Recordemos que el dispositivo debe de estar desmontado para poder eliminar lasparticiones.Si sobre el disco que estamos trabajando ya cuenta con particiones, y no es posibledesmontarlo, pero aun asi TIENE bloques disponibles para crear una nueva partición, ydicha partición después de crearla no se muestra en el sistema, se usa el comandopartprobe /dev/sdx (la x indica la letra del disco), esto con el fin de que se sincronicenuevamente las tablas de particiones del sistema.

133www.sugeek.co

Formatear Unidades

Después de tener preparado nuestro disco con las particiones, es momento de darle unformato a dichas particiones para que este se pueda usar como medio dealmacenamiento. Para ello usamos el comando mkfs.

En esta ocasión vamos a utilizar el ultimo sistema de archivos Linux que esta disponible,el ext4.La estructura del comando mkfs es:

mkfs -t ext4 -b 1024 -c -i 163384 -m 0 -L “Datos” /dev/dispositivo

Algunas opciones que tiene el comando mkfs es:

• -b Tamaño de los bloques, en múltiplo de 512, se recomienda dejar los bloques→de 1024.

• -c Comprobar el disco por sectores defectuosos →• -i Indica el tamaño del inodo según el disco (un inodo es de 128 bytes), el cual→

puede limitar la cantidad de archivos que se pueden crear, pero permite ganar masespacio. -i 4096: un inodo por cada 4KB.

• -m Porcentaje reservado para root, normalmente el 5% del espacio en disco.→Ponerlo a 0 permite ganar espacio en disco en cuanto al trabajo.

• -L Etiqueta del Disco→

Con el comando e2label me permite cambiar el Label al disco.

Aunque tenemos el comando mkfs.ext# el cual es un poco mas completo y el masusado, asi que procederemos a darle un sistema de archivos a nuestra particion.

root@sugeek:~# mkfs.ext4 /dev/sdb1 mke2fs 1.42.5 (29-Jul-2012) Etiqueta del sistema de ficheros= OS type: Linux Tamaño del bloque=4096 (bitácora=2) Tamaño del fragmento=4096 (bitácora=2) Stride=0 blocks, Stripe width=0 blocks 524288 inodes, 2096896 blocks 104844 blocks (5.00%) reserved for the super user Primer bloque de datos=0 Número máximo de bloques del sistema de ficheros=2147483648 64 bloque de grupos 32768 bloques por grupo, 32768 fragmentos por grupo 8192 nodos-i por grupo Respaldo del superbloque guardado en los bloques:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: hecho Escribiendo las tablas de nodos-i: hecho Creating journal (32768 blocks): hecho

134www.sugeek.co

Escribiendo superbloques y la información contable del sistema de ficheros: hecho Con el comando mkfs.ext4 podremos indicar el tamaño del bloque, el tamaño del inodoy muchas mas características, para ello diríjase a la pagina manual del comando.

Unidad SWAP o memoria de Intercambio

La partición SWAP es la partición que hace sus labores ocasionalmente como si fuese unamemoria ram, cuando es requerida por el sistema, esta memoria “RAM” se encuentra enuna partición especial dentro de nuestro disco duro.Esta se puede crear durante la instalación del sistema o luego en un pendrive, archivo,etc. Para tener la partición SWAT se recomienda lo siguiente.

• Colocarla después de la partición boot.• Si el equipo tiene menos de 1GB de Ram fisica se recomienda la particion SWAP

debe de duplicar la cantidad real de memoria ram, asi que si tenemos 768MB dememoria fisica, la SWAP debe de ser 1536MB, en cambio si supera el 1GB dememoria fisica, la SWAP es igual a esta mas 2GB, por ejemplo tenemos 3GB dememoria física, la swap se recomienda de 5GB.

La Swap tiene como desventaja que al estar en el disco duro, hace que sea demasiadolento las consultas de este, por ende si se tiene un disco duro con RPM menores a 7200se recomienda tener la SWAP en un dispositivo externo u otro disco, pero el sistema solopasara aquellos procesos que estén “Estáticos” o los que demoren mas tiempo enmemoria, los procesos temporales si siguen en la memoria ram.

En algunos ambientes es importante tener una memoria SWAP asignada, como:

• Servidores o estaciones donde ya no se pueda aumentar la memoria física.• Estaciones de Diseño Gráfico o similares, ya que en ocasiones estas estaciones

aunque tengan buena memoria ram, no le es suficiente.• Servidores de Producción intensa esporádica.

Asi que, como vimos durante la instalación, nosotros no configuramos una SWAP, pero ladesventaja de tener la swap directamente sobre una partición en el disco escontraproducente, ya que la swap estará limitada al tamaño del la partición y no podráaumentarse o disminuirse sin llegar a afectar el sistema de algún modo, por ende enservidores de producción se recomienda tener un disco aparte para la swap o en elcomún de los casos tenerla en un archivo para poderla manipular a nuestro gusto cuandoel sistema asi lo requiera (Aumentarle o disminuirle el tamaño).

Verificamos que no tenemos swap en nuestro sistema.root@sugeek:~# free -m total used free shared buffers cached Mem: 502 496 6 0 2 466 -/+ buffers/cache: 27 475 Swap: 0 0 0

135www.sugeek.co

Procederemos a crear el archivo que realizara la labor de swap, recordemos que podemoscrearlo en una USB 3.0.

root@sugeek:~# dd if=/dev/zero of=/swap bs=1024 count=1048576 1048576+0 registros leídos 1048576+0 registros escritos 1073741824 bytes (1,1 GB) copiados, 4,72171 s, 227 MB/sDesglosemos el anterior comando:

• dd Sirve para crear y convertir ficheros→• if Indicamos la entrada estándar la cual va a ser puros ceros (/dev/zero)→• of Indicamos la salida, si el archivo no existe se creación→• bs Indicamos el tamaño del bloque de 1024 bytes→• count Marca hasta donde se deben de crear bloques, es el valor del bs→

multiplicado por la cantidad de MB que le vamos a asociar a la SWAP, en estaocasión le asociamos 1GB a la SWAP.

Ahora vamos a crear la SWAP.

root@sugeek:~# mkswap /swap Setting up swapspace version 1, size = 1048572 KiB no label, UUID=387c7671-ada8-428d-8112-98aff59c8ba6

Activamos la swaproot@sugeek:~# swapon /swap root@sugeek:~# free -m total used free shared buffers cached Mem: 502 496 5 0 2 466 -/+ buffers/cache: 27 475 Swap: 1023 0 1023

Como observamos ya tenemos una swap asociada al sistema, pero esta desaparecerácada vez que reiniciemos el servidor, por tal motivo debemos de dejarla permanente,esto lo hacemos en el archivo fstab.

Echo “/swap swap swap defaults 0 0 ” >> /etc/fstab

Ya de ese modo la swap estaría montada en nuestro sistema y dispuesta a ser usada,pero el sistema la usa demasiado, asi que vamos a disminuir el uso de esta y solo encasos que en realidad se requiera, aumentando asi el rendimiento del sistema.

Para ello escribimos:

echo 10 > /proc/sys/vm/swappiness echo “vm.swappiness = 10 ” >> /etc/sysctl.conf

Ya con lo anterior tenemos optimizado el uso de nuestra swap.

136www.sugeek.co

Verificar el estado del disco con fsck

El comando fsck permite comprobar y arreglar un sistema de archivos.

Antes de verificar un sistema de archivos, el dispositivo no debería de estar montado, ocomo mucho, montado en modo solo lectura.

Similar que mkfs, fsck invoca un comando teniendo en cuenta el sistema de archivospara comprobar, como fsck.ext2 fsck.ext3 fsck.ext4, etc.

Cuando un sistema de archivos se encuentra defectuoso este corregirá los sectores quepueda y preguntara al usuario que hacer (aunque se puede omitir con la opción -y paraaceptar a todo de forma automática), y aquellos que no los pasara a la carpetalost+founds de dicho sistema de archivos u dispositivo.

El siguiente comando indica las opciones -v (verbose) y -f (force) para corroborar elestado del dispositivo.

root@sugeek:~# fsck -fV /dev/sdb1 fsck de util-linux 2.20.1 [/sbin/fsck.ext4 (1) -- /dev/sdb1] fsck.ext4 -f /dev/sdb1 e2fsck 1.42 (29-Nov-2011) Paso 1: Verificando nodos-i, bloques y tamaños Paso 2: Verificando la estructura de directorios Paso 3: Revisando la conectividad de directorios Paso 4: Revisando las cuentas de referencia Paso 5: Revisando el resumen de información de grupos /dev/sdb1: 11/991616 files (0.0% non-contiguous), 104694/3965948 blocks

Las Cuotas de Disco

Las cuotas permiten poner limites al uso del espacio en los sistemas de archivos, estoslimites pueden ser de 2 tipos:

• inodos: Limita el numero máximo de archivos• bloques: Limita el numero de bloques

Se Implementan las cuotas por sistemas de archivos individual (por dispositivo), y nopara un conjunto de sistema de archivos. Se puede gestionar cada usuario o grupo demanera completamente independiente.

En las cuotas, se puede fijar unos limites, estos limites son:

• Limite Duro: Es la cantidad máxima de inodos o bloques utilizados que el usuarioo grupo no podrá superar en ningún caso.

• Limite Suave: Cantidad máxima de inodos o bloques utilizados que el usuario ogrupo pueden superar de manera temporal. En este caso, el usuario o grupo podrásuperar el limite establecido hasta cierto punto determinado por el periodo de

137www.sugeek.co

gracia.• Limite de Gracia: Durante un cierto perido se le permite al usuario trabajar por

encima de su cuota, un tiempo prudente para que este borre o mueva informaciónque no utilice.

Las cuotas se establecen a nivel de nucleo y de sistemas de archivos. Para poderutilizarlas, se deben instalar las respectivas herramientas.

aptitude install quota quota tool

Habilitar las Cuotas

Antes que nada, para poder usar las “quotas” debemos de alistar el dispositivo que va atener estas características, para ello ingresamos al archivo /etc/fstab y modificamos lasopciones del dispositivo.

/dev/sdb2 /Compartida ext3 defaults,usrquota,grpquota 0 2

Como observa se agregaron las opciones userquota (Usuarios) y grpguota (Grupos).Después de modificar el dispositivo y si no lo tenemos ocupados procederemos aremontar el dispositivo con mount -o remount /Compartida.

Luego de haber establecido las características del dispositivo se procede a crear losarchivos de configuración en la raiz del dispositivo que se le habilito las cuotas.

root@sugeek:/# quotacheck -acug /home/Compartida

La opción -a significa que todos los sistemas de archivos no NFS montados en /etc/mtabson chequeados para ver si las cuotas están activadas. La opción -c especifica que losarchivos de cuota deberían ser creados para cada sistema de archivos con cuotasactivadas, la opción -u especifica que se debe verificar por cuotas de usuario, y la opción-g indica verificar por cuotas de grupo.

Si no se especifican ninguna de las opciones -u ni -g, sólo se creará el archivo de cuota deusuario. Si únicamente se especifica la opción -g, sólo se creará el archivo de cuota degrupo.

Luego que se crean los archivos se procede a generar la tabla de uso

root@sugeek:/# quotacheck -avug && quotaon /Compartida

Con el comando quotacheck -avug es muy probable que la primera vez genereadvertencias de archivos que se escribirán, ignoramos dicha advertencia, además si sepresentan problemas con la cuotas se ejecuta dicho comando.

La opción -a Verifica todos los sistemas de archivos montados localmente con cuotasactivadas, -v Muestra detalles informativos a medida que la verificación de cuotas se

138www.sugeek.co

ejecuta (verbose), -u verifica la información de cuota de disco y -g verifica la informaciónde cuota de disco del grupo.

El comando quotaon me activa las cuotas en el disco. El quotaoff me desactiva lacuota

Habilitar las Cuotas a Usuarios

Para habilitar a un usuario a usar las cuotas en un disco solo basta con indicar elcomando edquota usuario.

Nota: Abre con el editor de texto predeterminado y los bloques de las cuotas son de 1KB

Nota 2: Los valores de Blocks e inodes no se deben modificar, ya que es un valordinámico.

Disk quotas for user sugeek (uid 502):Filesystem blocks soft hard inodes soft hard/dev/sbd2 440436 0 0 37418 0 0

Si se desea es que un usuario tenga las misma cuota que otro se ejecuta edquota -psugeek user

La primera columna es el nombre del sistema de archivos que tiene una cuota activada.La segunda columna muestra cuántos bloques está usando el usuario actualmente. Laspróximas dos columnas son usadas para colocar límites de bloques duros y suaves parael usuario del sistema de archivos. La columna inodes muestra cuántos inodes estáusando el usuario actualmente. Las últimas dos columnas son usadas para colocar loslímites duros y suaves para los inodes del usuario en el sistema de archivos.

Si cualquiera de los valores está especificado a 0, ese límite no está configurado.

Para verificar que una cuota ha sido aplicada se usa el comando quota usuario

Habilitar las Cuotas a Grupos

Lo mismo que en usuarios pero indicando la opción -g al comando edquota

root@sugeek:/# edquota -g tecnicos

Lo anterior me mostrara en el editor de texto la cuota para dicho grupo.

Disk quotas for group tecnicos (gid 502):Filesystem blocks soft hard inodes soft hard /dev/sdb2 440400 0 0 37418 0 0

Para verificar que dicha cuota si se aplico al grupo se ejecuta el comando quota -gtecnicos

139www.sugeek.co

Las cuotas pueden ser verificadas y generar un informe con repquota y el comandowarnquota permite se programado en cron para alertar a los usuarios que están a puntode superar o llegar al limite de su cuota.

El comando edquota -t permite asignar cuotas a los usuarios o grupos basándose en lossistema de archivos.

Unidades RAID (Arreglo de Discos)

Antes de iniciar con el tema de las unidades RAID debemos de conocer como funciona,por ende se recomienda ver la Wikipedia (http://es.wikipedia.org/wiki/RAID).

Nota: Utilizar esta herramienta si y solo si nuestro servidor no tiene controladora RAID yno se puede crear RAID por Hardware.

El RAID en GNU por Sistema Operativo es también conocido como RAID por Software, ysolo se puede crear RAID en unidades donde NO este la partición /boot o que contengalos archivos de arranque.

Preparar los Discos Duros

Para poder trabajar con RAID por Software, es necesario alistar nuestros discos duros conel comando fdisk y cambiar el tipo de partición a fd (Linux Raid Auto)

Creando RAID con mdadm

Antes de iniciar con el RAID por Software, debemos de tener en cuenta las variablessobre el uso del servidor, asi que no es lo mismo tener un servidor de custodia deinformación, como un servidor vivo de carpetas compartidas o base de datos. En estaocasión vamos a preparar un RAID para base de datos, así que nuestra configuración va aser un RAID 1+0 o RAID10 (Mínimo 4 Discos del mismo tamaño, preferiblemente de lamisma marca, firmware y versión)

Con el comando mdadm (Se instala con aptitude install mdadm) el cual es unaherramienta del kernel de Linux me permitirá crear el RAID por software.

MDADM permite también configurar los siguientes arreglos No-RAID:

• LINEAR: Concatena unidades de almacenamiento en un sólo dispositivo md.• MULTIPATH: permite múltiples rutas con falla en un sólo dispositivo.• FAULTY: Un dispositivo que emula varios escenarios de falla de disco. Sólo se

utiliza para pruebas y desarrollo.• CONTAINER: Grupo de dispositivos que son gestionados como un único

dispositivo sobre el cual se pueden crear dispositivos RAID.

Creamos el RAID 10

140www.sugeek.co

root@sugeek:/# mdadm --create /dev/md126 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

Como podemos observar tenemos algunas de las opciones básicas para creación deRAID.

• --create Indicamos que vamos a crear el RAID md0 (Puede suceder que cambie a→md126)

• --level Indicamos el nivel de RAID que vamos a crear, →• --raid-devices Cantidad de discos que harán parte del arreglo→

Mientras el arreglo se realiza, se puede verificar su estado con el comando mdadm--detail /dev/md126 o directamente verificando el archivo con cat /proc/mdstat.

Mientras se va construyendo el arreglo, observe que el valor de State es active,resyncing. El valor de Resync Status informará respecto del porcentaje de progreso dela operación. El proceso puede demorar desde unos pocos minutos hasta varias horasdependiendo el tamaño de las unidades de almacenamiento utilizadas.

root@sugeek:/home/soporte# mdadm --detail /dev/md126 /dev/md126: Version : 1.2 Creation Time : Mon Jun 30 17:14:01 2014 Raid Level : raid10 Array Size : 16765952 (15.99 GiB 17.17 GB) Used Dev Size : 8382976 (7.99 GiB 8.58 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent

Update Time : Mon Jun 30 17:14:28 2014 State : active, resyncing Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0

Layout : near=2 Chunk Size : 512K

Resync Status : 31% complete

Name : debian:126 (local to host debian) UUID : 23af9bba:c16e16ed:f7dc9809:a36f4c13 Events : 6

Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1

141www.sugeek.co

2 8 65 2 active sync /dev/sde1 3 8 49 3 active sync /dev/sdd1

root@sugeek:/home/soporte# cat /proc/mdstat Personalities : [raid10] md126 : active raid10 sdd1[3] sde1[2] sdc1[1] sdb1[0] 16765952 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] [=================>...] resync = 87.0% (14595584/16765952) finish=0.1min speed=199853K/sec unused devices: <none>

• Agregar un dispositivo al RAID: mdadm --add /dev/md126 /dev/sdf1

• Quitar un dispositivo del arreglo: mdadm /dev/md126 --remove /dev/sdf1

• Simular falla del RAIDmdadm /dev/md127 -f /dev/sdb1

• Activar un RAID después de haberlo detenido con stopmdadm -AsR /dev/md127

Lo ideal seria tener otro disco para funcionar como hotspare o disco de Backup por siuno de los del arreglo falla.

Para ello seria ejecutar el comando que mencionamos anteriormente de agregar un disconuevo al arreglo y al ejecutar el mdadm –detail /dev/md126 observaremos que alfinal tenemos la linea4 8 81 - spare /dev/sdf1

root@debian:/home/soporte# mdadm --add /dev/md126 /dev/sdf1 mdadm: added /dev/sdf1 root@debian:/home/soporte# mdadm --detail /dev/md126 /dev/md126: Version : 1.2 Creation Time : Mon Jun 30 17:14:01 2014 Raid Level : raid10 Array Size : 16765952 (15.99 GiB 17.17 GB) Used Dev Size : 8382976 (7.99 GiB 8.58 GB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Mon Jun 30 17:32:37 2014 State : clean Active Devices : 4 Working Devices : 5 Failed Devices : 0

142www.sugeek.co

Spare Devices : 1

Layout : near=2 Chunk Size : 512K

Name : debian:126 (local to host debian) UUID : 23af9bba:c16e16ed:f7dc9809:a36f4c13 Events : 20

Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 65 2 active sync /dev/sde1 3 8 49 3 active sync /dev/sdd1

4 8 81 - spare /dev/sdf1

Ya solo queda guardar la configuración con:

root@sugeek:/# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Nuestro RAID queda listo para crear la partición con fdisk, luego formato con mkfs.ext4y montarlo en el /etc/fstab.

Eliminar un RAID del sistema

• Desmontamos la unidad RAID de nuestro sistema umount /dev/md126p1recordemos que dicho dispositivo no debe de estar siendo utilizado, en casocontrario usamos lsof para ubicar los archivos abiertos.

• Eliminamos la linea que hace referencia al RAID en el /etc/fstab• Paramos el RAID con mdadm –-stop /dev/md126 • Editamos el archivo /etc/mdadm/mdadm.conf y eliminamos la linea que haga

referencia al RAID.• Escaneamos el RAID para validar que se borro adecuadamente con mdadm

--detail --scan• Escribimos el/los disco(s) para poderlo(s) utilizar nuevamente mdadm --misc

--zero-superblock /dev/sda

Unidades LVM (Logical Volume Manager)

LVM es un sistema de gestión de volúmenes lógicos, el cual como función principal espoder aumentar o disminuir la capacidad de una unidad lógica y así poder dar espaciosfijos a ciertos grupos, usuarios, o carpetas.

Se recomienda que LVM cuente con un sistema RAID10 para funcionar con un altodesempeño y con sistema de cuotas para una correcta administración y gestión delsistema de archivos.

143www.sugeek.co

Antes de iniciar con la creación y administración de Volúmenes lógicos se recomiendavisitar: http://es.wikipedia.org/wiki/Logical_Volume_Manager de esta manera entenderá amas profundidad su funcionamiento y sus posibles usos.

Volúmenes Físicos (Physical Volumen)

Puede ser un disco duro completo, una partición normal, o en su defecto una unidadRAID. Son la base del LVM.

Para poder preparar un dispositivo y soportar LVM, debemos de seleccionar el tipo departición “Linux LVM” (8e) con el comando fdisk. Luego que se tengan los dispositivoslistos para ser usados con LVM (Mínimo 2), se procederá a crear el Phisical Volumen.

root@sugeek:/home/soporte# pvcreate /dev/md126p1 /dev/sdg1 Writing physical volume data to disk "/dev/md126p1" Physical volume "/dev/md126p1" successfully created Writing physical volume data to disk "/dev/sdg1" Physical volume "/dev/sdg1" successfully created

Como se puede observar utilizamos un dispositivo RAID (/dev/md126) y un dispositivonormal (/dev/sdg). Para poder observar los volúmenes físicos utilizamos el comandopvdisplay -v

root@sugeek:/home/soporte# pvdisplay -v "/dev/md126p1" is a new physical volume of "15,99 GiB" --- NEW Physical volume --- PV Name /dev/md126p1 VG Name PV Size 15,99 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID wTxgJN-nU5h-vmoP-Kjig-GMDi-Ay1g-wAdx2i "/dev/sdg1" is a new physical volume of "8,00 GiB" --- NEW Physical volume --- PV Name /dev/sdg1 VG Name PV Size 8,00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 6W8t6v-Lbmx-SlBk-KkX7-6bU1-N27A-yPaLrE

Si deseamos quitar un dispositivo como dispositivo LVM solo utilizamos el comando

144www.sugeek.co

pvremove /dev/dispositivo.

root@sugeek:/home/soporte# pvremove /dev/sdg1 Labels on physical volume "/dev/sdg1" successfully wiped

Grupo Volúmenes (Volumen Group)

Es la parte superior de la LVM. Es la "caja" en la que tenemos nuestros volúmenes lógicos(LV) y nuestros volúmenes físicos (PV). Se puede ver como una unidad administrativa enla que se engloban nuestros recursos. Hay que hacer notar que mientras un PV no seañada al VG, no podemos comenzar a usarlo.

Para crear un grupo de volúmenes, debe de disponer de al menos un volumen físico.Puede crear un grupo de volúmenes con el comando vgcreate. Un grupo de volúmenesllevara el nombre que se desee.

root@sugeek:/home/soporte# vgcreate vg01 /dev/sdg1 Volume group "vg01" successfully created

El ejemplo anterior le estamos dando como nombre al grupo de vg01 y asociando el pvque ya habíamos creado.

Para visualizar las propiedades de un vg lo realizamos con el comando vgdisplay,podemos usar la opción v para que nos de información mas detallada.

root@sugeek:/home/soporte# vgdisplay -v vg01 Using volume group(s) on command line Finding volume group "vg01" --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 8,00 GiB PE Size 4,00 MiB Total PE 2047 Alloc PE / Size 0 / 0 Free PE / Size 2047 / 8,00 GiB VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA --- Physical volumes ---

145www.sugeek.co

PV Name /dev/sdg1 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey PV Status allocatable Total PE / Free PE 2047 / 2047

En la lineas MAX LV, y MAX PV, las cuales indican el numero máximo de volúmeneslógicos que podemos crear en este grupo de volúmenes, siendo 0 el valor que indicainfinito y el numero máximo de pv que puede ser asociados a dicho vg respectivamente.

La linea de PE Size, Total PE y Free PE indican el tamaño de las extensiones físicas, deun total de 2047 extensiones físicas de las cuales se tienen libre 2047 extensiones físicasrespectivamente.

Además de dicha información, me muestra los pv que se encuentran asociados a dichovg.

Observe con el comando pvdisplay /dev/sdg1 y notara que muestra información conrespecto al vg que hace parte. swr183

Para quitar un vg de nuestro sistema solo basta con ejecutar el comando vgremovedispositivo

Volúmenes Lógicos (Logical Volumen)

Después de tener los dispositivos físicos listos dentro de un VG, es hora de crear eldispositivo lógico para poder darle formato y montarlo como cualquier dispositivo tipoBloques. El LV se podrá crear dependiendo de la cantidad de PE libres que tenga el VG.

Se crea un LV con el comando lvcreate. Un LV lleva un nombre, dispone de un tamañoexpresado en extensiones lógicas (LE) que corresponden en realidad a los PE dentro delLV.

root@sugeek:/home/soporte# lvcreate -n Datos1 -L 8g vg01Logical volume “Datos1” created

El anterior comando me crea un LV usando como nombre con la opción n Datos1, y con eltamaño opción L de 8 Gigabytes (Podemos definir megabytes con m, terabytes con t,petabytes con p o exabytes con e) y va a pertenecer al Volumen Group vg01.

El sistema creara el dispositivo dentro de /dev/vg01/Datos1, a lo cual, como podemosobservar el dispositivo se crea dentro de una carpeta que contiene el nombre del VG.Este a su ves es un enlace simbólico apuntando a /dev/mapper/vg01-Datos1.

Para ver las características de nuestro LV lo realizamos con el comando lvdisplaypodemos usar las opciones -v (verbose) y -m (maps) para obtener información masdetallada sobre los bloques de PE y LE utilizados por el LV.

root@sugeek:~# lvdisplay -vm /dev/vg01/Datos1

146www.sugeek.co

Using logical volume(s) on command line --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 0 LV Size 8,00 GiB Current LE 2047 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:3 --- Segments --- Logical extent 0 to 2046: Type linear Physical volume /dev/sdg1 Physical extents 0 to 2046

Luego para poder utilizar este LV, solo nos queda darle el formato adecuado para poderlomontar y darle el uso que deseemos o por el cual fue creado.

root@sugeek:/home# mkfs.ext4 /dev/vg01/Datos1 ; mount /dev/vg01/Datos1 /home/LVM/

Observemos que ya tenemos listo nuestro “Disco Duro”, si lo queremos permanenterecordemos usar su UUID y colocarlo en el archivo fstab.

root@sugeek:/home# df -h S.ficheros Tamaño Usados Disp Uso% Montado en rootfs 5,0G 1,9G 2,9G 40% / udev 10M 0 10M 0% /dev tmpfs 101M 332K 100M 1% /run /dev/mapper/System-etc 5,0G 1,9G 2,9G 40% / tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 201M 0 201M 0% /run/shm /dev/sda1 184M 23M 152M 14% /boot /dev/mapper/System-home 5,0G 139M 4,6G 3% /home /dev/mapper/System-var 9,2G 343M 8,4G 4% /var /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM

Ampliar y Reducir un VG

Si tenemos un nuevo disco duro, y lo queremos agregar a un sistema LVM debemos deprepararlo y luego agregarlo a un VG para usarlo en un LV.

Como vimos con el comando vgdisplay -v vg01 Solo tenemos asociado 1 dispositivo a

147www.sugeek.co

el VG vg01, y con el comando pvdisplay observamos que tenemos agregado eldispositivo RAID /dev/md126p1 para ser usado en cualquier VG.

Para ampliar un VG, utilizamos el comando vgextend que funciona de la misma maneraque vgcreate, indicando el VG al cual se le desea añadir el PV. Como se podrá observarel VG Size paso de 8GB a 23,98GB y además los valores del PE también aumentaron, elúnico que se mantiene el Alloc PE el cual posee el tamaño del actual LV llamado Datos1, ysi vemos los PV asociados al VG, entroncamos el PV /dev/md126p1.

root@sugeek:/home/soporte# vgextend vg01 /dev/md126p1 Volume group "vg01" successfully extended root@sugeek:/home/soporte# vgdisplay -v vg01 Using volume group(s) on command line Finding volume group "vg01" --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 23,98 GiB PE Size 4,00 MiB Total PE 6139 Alloc PE / Size 2047 / 8,00 GiB Free PE / Size 4092 / 15,98 GiB VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 1 LV Size 8,00 GiB Current LE 2047 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1

148www.sugeek.co

--- Physical volumes --- PV Name /dev/sdg1 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey PV Status allocatable Total PE / Free PE 2047 / 0 PV Name /dev/md126p1 PV UUID QHZC0o-VUuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL PV Status allocatable Total PE / Free PE 4092 / 4092

Para reducir un VG utilizamos el comando vgreduce, el cual se le indica el PV que sedesea retirar, pero antes de ello, el PV debe de estar libre, no debe estar montado osiendo utilizado por algún LV y observaremos como los valores del PE dentro del VGcambian y sus PV asociados.

root@sugeek:/home/soporte# vgreduce vg01 /dev/md126p1 && vgdisplay -v vg01 Removed "/dev/md126p1" from volume group "vg01" Using volume group(s) on command line Finding volume group "vg01" --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 8,00 GiB PE Size 4,00 MiB Total PE 2047 Alloc PE / Size 2047 / 8,00 GiB Free PE / Size 0 / 0 VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 1 LV Size 8,00 GiB Current LE 2047

149www.sugeek.co

Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1 --- Physical volumes --- PV Name /dev/sdg1 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey PV Status allocatable Total PE / Free PE 2047 / 0

Ampliar y Reducir un LV

Como ya tenemos un nuevo PV dentro del VG al cual hace parte el LV, solo quedaasociarle el PV nuevo al LV, para ello utilizamos el comando lvextend el cual permite losparámetros -l (Numero de extensiones lógicas LE) o -L como para lvcreate. Luegoprecisamos el nuevo tamaño del LV o , si añadimos el prefijo +, el tamaño adicional quedeseamos. También se puede precisar, como ultimo argumento, el nombre del PV el cualforzar la extensión del LV, esto ultimo solo sera posible si el PV tiene suficiente PEdisponibles.

A continuación vamos a agregar 12GB al LV Datos1.

root@sugeek:/home/soporte# lvextend -L +12g /dev/vg01/Datos1 Extending logical volume Datos1 to 20,00 GiB Logical volume Datos1 successfully resized

Ahora observamos como están distribuidos los PE dentro del LV.

root@sugeek:/home/soporte# lvdisplay -vm /dev/vg01/Datos1 Using logical volume(s) on command line --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 1 LV Size 20,00 GiB Current LE 5119 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1 --- Segments --- Logical extent 0 to 2046:

150www.sugeek.co

Type linear Physical volume /dev/sdg1 Physical extents 0 to 2046 Logical extent 2047 to 5118: Type linear Physical volume /dev/md126p1 Physical extents 0 to 3071

Con el comando vgdisplay notaremos como el Free PE se ha reducido y el AllocPE aaumentado.

root@sugeek:/home/soporte# vgdisplay vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 23,98 GiB PE Size 4,00 MiB Total PE 6139 Alloc PE / Size 5119 / 20,00 GiB Free PE / Size 1020 / 3,98 GiB VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA

Ahora lo que queda es asociar dicho incremento a nuestra “Partición” ya que aun no se aagregado dicho aumento.

root@sugeek:/home/soporte# df -h /home/LVM S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM

Para ello utilizamos el comando resize2fs el cual permite reducir y aumentar un sistemade archivos. El primer argumento es el sistema de archivos, el segundo se indica eltamaño con un sufijo como lo podría ser K (KB), M (MB), G (GB). Si el sufijo, se indica elnúmero de bloques del sistema de archivos. Si no se define un tamaño, este de formaautomática tomara el tamaño total que este asociado al LV.

Se debe de tener en cuenta que para ampliar un LV se podrá realizar en caliente, lo quequiere decir que no necesitamos desmontar el LV, en cambio cuando se requiere reducirel LV es necesario desmontarlo.

151www.sugeek.co

root@sugeek:/home/soporte# df -h /home/LVM && df -h /home/LVMS.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM root@debian:/home/soporte# resize2fs /dev/vg01/Datos1 resize2fs 1.42.5 (29-Jul-2012) Filesystem at /dev/vg01/Datos1 is mounted on /home/LVM; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/vg01/Datos1 to 5241856 (4k) blocks. The filesystem on /dev/vg01/Datos1 is now 5241856 blocks long.

S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 20G 150M 19G 1% /home/LVM

Como hemos notado el LV paso de 8GB a 20GB, con las 12GB que le hemos agregado.Nunca debemos de reducir por debajo del espacio real utilizado por los datos contenidosen el LV.

Ahora queda reducir nuestro LV, vamos reducirlo a 8GB, para ello se recomienda seguirlos siguientes pasos.

• Desmontar el sistema de Archivos a reducir• Comprobar el sistemas de archivos del LV que vamos a reducir con fsck• Reducir del LV lógico con resize2fs • Reducir el LV con el comando lvreduce

root@sugeek:/home/soporte# umount /home/LVM/ && fsck -f /dev/vg01/Datos1 fsck de util-linux 2.20.1 e2fsck 1.42.5 (29-Jul-2012) Paso 1: Verificando nodos-i, bloques y tamaños Paso 2: Verificando la estructura de directorios Paso 3: Revisando la conectividad de directorios Paso 4: Revisando las cuentas de referencia Paso 5: Revisando el resumen de información de grupos /dev/mapper/vg01-Datos1: 11/1310720 files (0.0% non-contiguous), 120657/5241856 blocks

Ya lo hemos desmontado y comprobado, ahora sigue el turno de resize2fs.

root@sugeek:/home/soporte# resize2fs /dev/vg01/Datos1 10G resize2fs 1.42.5 (29-Jul-2012) Resizing the filesystem on /dev/vg01/Datos1 to 2621440 (4k) blocks. The filesystem on /dev/vg01/Datos1 is now 2621440 blocks long.

Y ahora a reducir el LV con lvreduce, debemos de tener cuidado, si colocamos un valordiferente al cual va a quedar el LV puede destruir los datos, en este no se puede definir elPV como con lvextend. A la pregunta que arroja le respondemos que si (y), por ultimomontamos nuevamente el sistema de archivo y verificamos si efectivamente quedo en10GB.

152www.sugeek.co

root@sugeek:/# lvreduce -L 8G /dev/vg01/Datos1 WARNING: Reducing active logical volume to 8,00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce Datos1? [y/n]: y Reducing logical volume Datos1 to 8,00 GiB Logical volume Datos1 successfully resized root@sugeek:/home/soporte# mount /dev/vg01/Datos1 /home/LVM/ root@sugeek:/home/soporte# df -h /home/LVM S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 8G 146M 7,8G 2% /home/LVM

Mover el contenido de un PV a otro PV

En entornos empresariales (Cuando no se tiene una infraestructura de almacenamiento ycrecimiento bien planteada) es común ver como se hace necesario cambiar un disco duropor otro cumpliendo la necesidad de aumentar su tamaño. En estos casos se puedemover el contenido de un PV a otro, incluso varios PE de un LV a otro PV, o tambiéndeterminados PE específicos. Sin precisar nada como destino, el LVM va a mover todoslos PE del PV (Lo mas común), en los otros PV del VG. Debemos de tener en cuenta quepara mover el contenido de un PV hacia otro, el otro PV debe de encontrarse en el mismoVG.

El comando pvmove permite mover los PE de un PV hacia otro. Se trata, de desplazar elcontenido del PV /dev/sdg1 hacia /dev/md126p1.

Nota: Para simular un contenido de 7GB dentro del LV hemos usado el comando ddif=/dev/zero of=/home/LVM bs=1024 count=7000000

A continuación verificamos cuanto espacio libre tiene el PV /dev/md126p1 (Free PE) ycuanto espacio ocupado tiene el PV /dev/sdg1 (Allocated PE), veremos que el PV/dev/sdg1 tiene todos llenos.

root@sugeek:/home/soporte# pvdisplay -m /dev/md126p1 --- Physical volume --- PV Name /dev/md126p1 VG Name vg01 PV Size 15,99 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 4092 Free PE 4091 Allocated PE 1 PV UUID QHZC0o-VUuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL --- Physical Segments --- Physical extent 0 to 0: Logical volume /dev/vg01/Datos1 Logical extents 2047 to 2047 Physical extent 1 to 4091: FREE

153www.sugeek.co

root@sugeek:/home/soporte# pvdisplay -m /dev/sdg1 --- Physical volume --- PV Name /dev/sdg1 VG Name vg01 PV Size 8,00 GiB / not usable 3,00 MiB Allocatable yes (but full) PE Size 4,00 MiB Total PE 2047 Free PE 0 Allocated PE 2047 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey --- Physical Segments --- Physical extent 0 to 2046: Logical volume /dev/vg01/Datos1 Logical extents 0 to 2046

Vemos que el PV /dev/md126p1 tiene suficiente espacio para soportar el contenido del PV/dev/sdg1, procederemos a mover su contenido.

root@sugeek:/home/soporte# pvmove -v /dev/sdg1 /dev/md126p1 Executing: /sbin/modprobe dm-mirror Finding volume group "vg01" Archiving volume group "vg01" metadata (seqno 8). Creating logical volume pvmove0 Moving 2047 extents of logical volume vg01/Datos1 Found volume group "vg01" activation/volume_list configuration setting not defined: Checking only host tags for vg01/Datos1 Updating volume group metadata Found volume group "vg01" Found volume group "vg01" Creating vg01-pvmove0 Loading vg01-pvmove0 table (254:4) Loading vg01-Datos1 table (254:1) Suspending vg01-Datos1 (254:1) with device flush Suspending vg01-pvmove0 (254:4) with device flush Found volume group "vg01" activation/volume_list configuration setting not defined: Checking only host tags for vg01/pvmove0 Resuming vg01-pvmove0 (254:4) Found volume group "vg01" Loading vg01-pvmove0 table (254:4) Suppressed vg01-pvmove0 identical table reload. Resuming vg01-Datos1 (254:1) Creating volume group backup "/etc/lvm/backup/vg01" (seqno 9). Checking progress before waiting every 15 seconds /dev/sdg1: Moved: 100,0% Found volume group "vg01" Found volume group "vg01" Loading vg01-Datos1 table (254:1)

154www.sugeek.co

Loading vg01-pvmove0 table (254:4) Suspending vg01-Datos1 (254:1) with device flush Suspending vg01-pvmove0 (254:4) with device flush Found volume group "vg01" Resuming vg01-pvmove0 (254:4) Found volume group "vg01" Resuming vg01-Datos1 (254:1) Found volume group "vg01" Removing vg01-pvmove0 (254:4) Removing temporary pvmove LV Writing out final volume group after pvmove Creating volume group backup "/etc/lvm/backup/vg01" (seqno 11).

Ahora comprobamos el VG y verificamos que el PV /dev/sdg1 ya tiene todos sus PELibres, en cambio el PV /dev/md126p1 se ha ocupado (Allocated PE).

root@sugeek:/home/soporte# pvdisplay -m /dev/m126p1 && pvdisplay -m /dev/sdg1 --- Physical volume --- PV Name /dev/sdg1 VG Name vg01 PV Size 8,00 GiB / not usable 3,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 2047 Free PE 2047 Allocated PE 0 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey

--- Physical volume --- PV Name /dev/md126p1 VG Name vg01 PV Size 15,99 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 4092 Free PE 2044 Allocated PE 2048 PV UUID QHZC0o-VuuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL

Ya el PV sdg1 podemos quitarlo del VG. Con la opción -a quitaremos los PV que no estánsiendo usados.

root@sugeek:/home/soporte# vgreduce -a vg01 Removed "/dev/sdg1" from volume group "vg01" Physical volume "/dev/md126p1" still in use

Ahora nos queda indicarle al LV nuevo tamaño del PV, asignárselo (Indicando el total dePE Libres que son 2044) y comprobar que efectivamente se aplico con df.

root@sugeek:/home/soporte# lvextend -r -l +2044 /dev/vg01/Datos1 && df -h /home/LVM

155www.sugeek.co

Extending logical volume Datos1 to 15,98 GiB Logical volume Datos1 successfully resized resize2fs 1.42.5 (29-Jul-2012) Filesystem at /dev/mapper/vg01-Datos1 is mounted on /home/LVM; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mapper/vg01-Datos1 to 4190208 (4k) blocks. The filesystem on /dev/mapper/vg01-Datos1 is now 4190208 blocks long. S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 16G 6,9G 8,2G 46% /home/LVM

Como vemos el tamaño del LV es el tamaño de mi PV, además utiliza el mismo tamañoque usaba el antiguo de 6,9G y sus correspondientes archivos.

Suprimir un VG

Para poder suprimir de forma adecuada un LVM de nuestro sistema es necesario seguir lasiguiente estructura.

• Desmontar por completo los LV que tengamos• Suprimir todos los LV con lvremove • Retirar todos los los PV de los VG con lvreduce• Destruir el VG con vgremove• Suprimir el PV con pvremove

Siguiendo las instrucciones anteriores:

root@sugeek:/home# umount /home/LVM && lvremove /dev/vg01/Datos1Do you really want to remove active logical volume Datos1? [y/n]: y Logical volume "Datos1" successfully removed

El siguiente comando quitara todos los PV posibles, recordemos que LVM siempre deja unPV asociado a un VG. Por ende aparecerá un error de que no se puede quitar 1 PV del VG,no nos preocupemos, esto es normal.

root@sugeek:/home# vgreduce -a vg01 Can't remove final physical volume "/dev/md126p1" from volume group "vg01"

Procederemos a quitar el VG y luego eliminaremos el PV.

root@sugeek:/home# vgremove vg01 && vgdisplay -v vg01 Volume group "vg01" successfully removed Volume group "vg01" not found root@sugeek:/home# pvremove /dev/md126p1 /dev/sdg1 Labels on physical volume "/dev/md126p1" successfully wiped Labels on physical volume "/dev/sdg1" successfully wiped

Existen otros comandos que no vimos, dichos comandos son:

156www.sugeek.co

• pvchange: Modifica el estado de un PV, por ejemplo para prohibir la asignaciónde extensiones físicas en este volumen.

• Pvresize: Vuelve a dimensionar un PV si su partición o disco de origen ha sidoampliado o reducido, común con los RAID por software.

• Pvscan: Busca todos los volúmenes presentes en todos los soportes dealmacenamiento del sistema.

• Vgchange: Modifica los atributos de un VG, para activarlo o desactivarlo porejemplo, pero también para modificar sus valores máximos del PV y de PE, o paraprohibir su ampliación o reducción.

• Vgscan: Busca todos los grupos de volúmenes en todos los soportes.• Vgrename: Renombra un VG• vgmerge: Ensambla 2 VG en uno solo• lvresize: Vuelve a dimensionar un LV, es equivalente a lvextend y lvreduce• lvchange: Modifica los atributos del LV• lvrename: Renombra un LV

157www.sugeek.co

ADMINISTRACIÓN DE REDAl principio vimos algunos comandos para el diagnostico de la red, como netstat, asíque en esta ocasión vamos a profundizar un poco mas sobre estos.

Nota: No se configurara ninguna interfaz wifi

Los archivos que afectan la red son:

Archivo /etc/network/interfaces

Aca encontramos la configuración de las interfaces de red de nuestro sistema. Dichoarchivo debe de contener las interfaces de red del sistema (Este archivo no afecta siestamos usando GUI) de la siguiente manera:

auto lo iface lo inet loopback

#Direccionamiento Estaticoauto eth0iface eth0 inet staticaddress DireccionIPnetwork DirecciondeRedgateway Ipdelrouternetmask mascaraderedbroadcast direcciondebroadcast

#Direccionamiento Dinamicoauto eth1iface eth1 inet dhcp

Además de lo anterior el archivo puede contener información como los servidores DNSaunque se recomienda configurarlos en resolv.conf

Archivo /etc/protocols

El archivo contiene la lista de los protocolos conocidos por Linux

Archivo /etc/resolv.conf

Encontramos los servidores DNS

#DNS de OpenDNSnameserver 208.67.222.222 nameserver 208.67.220.220

158www.sugeek.co

Archivo /etc/hosts

Archivo encargado de asociar IP con nombres de dominio, primero consulta este archivo yluego el archivo resolv.conf

127.0.0.1 localhost 127.0.1.1 sugeek

En el archivo /etc/hostname podemos configurar el nombre de nuestro sistema.

Comando ifconfig

Por si solo muestra información de las interfaces activas del sistema

◦ -a Con la opción → a mostrara todas las interfaces sin importar si estan o noactivas

◦ up Activa una interfaz de red→ifconfig eth0 up

◦ down Desactiva una interfaz de red→

ifconfig eth0 down

◦ Establecer una dirección IP

ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255

◦ Establecer interfaz virtual

ifconfig eth0:1 192.168.1.2/24

Comando ip

◦ addr Muestra la información de las interfaces→

root@sugeek:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:24:e8:c9:e8:ee brd ff:ff:ff:ff:ff:ff inet 192.168.252.60/24 brd 192.168.252.255 scope global eth0 inet6 fe80::224:e8ff:fec9:e8ee/64 scope link valid_lft forever preferred_lft forever 3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000

159www.sugeek.co

link/ether 00:25:56:3d:ef:d6 brd ff:ff:ff:ff:ff:ff inet6 fe80::225:56ff:fe3d:efd6/64 scope link valid_lft forever preferred_lft forever

◦ link Muestra la información sobre el estado del enlace→

root@sugeek:~# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 00:24:e8:c9:e8:ee brd ff:ff:ff:ff:ff:ff 3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT mode DORMANT qlen 1000 link/ether 00:25:56:3d:ef:d6 brd ff:ff:ff:ff:ff:ff

◦ Habilitar una interfaz de red

ip link set eth0 up

◦ Deshabilitar una interfaz de red

ip link set eth0 up

◦ Establecer una dirección ip

ip addr add 192.168.0.2/24 broadcast 192.168.0.255 dev eth0

◦ Eliminar una dirección IP

ip addr del 192.168.0.77/24 dev eth0

◦ Establecer una interfaz virtual

ip addr add 192.168.1.2/24 dev eth0 label eth0:1

◦ route Muestra la tabla de las rutas creadas en el sistema, además permite crear→nuevas rutas estáticas.

ip route add 192.168.3.0/24 dev eth0

También permite establecer la ruta predeterminada o gateway

ip route add default via 192.168.1.254

Comando route

Por si solo visualiza las rutas que tiene creadas el sistema

160www.sugeek.co

Tabla de rutas IP del núcleo Destino Pasarela Genmask Indic Métric Ref Uso Interfaz default 192.168.2.1 0.0.0.0 UG 0 0 0 wlan0 link-local * 255.255.0.0 U 1000 0 0 wlan0 192.168.2.0 * 255.255.255.0 U 2 0 0 wlan0

◦ Ruta hacia una IP por la interfaz de red eth1

route add 192.168.252.3.4 eth1

◦ Ruta hacia una red por el dispositivo eth1

route add -net 192.168.238.0/24 gw 192.168.3.1 dev eth1

◦ Para Eliminar una ruta ya creada, solo basta con cambiar el add por del◦ Para crear la ruta predeterminada del sistema (gateway) se escribe

route add default gw 192.168.2.1

Comando whois

Este comando permite obtener información sobre un dominio especificado, así podremossaber quien fuel el que lo registro, cuanto tiempo ha estado registrado, cuando fue laultima renovación, cuando se vence, y un largo etc. A continuación un ejemplo con eldominio de kernel.org, el resultado esta truncado ya que es extensa la salida.

root@sugeek:~# whois kernel.org Domain Name:KERNEL.ORG Domain ID: D169413-LROR Creation Date: 1997-03-07T05:00:00Z Updated Date: 2014-01-10T15:48:30Z Registry Expiry Date: 2017-03-08T05:00:00Z Sponsoring Registrar:Gandi SAS (R42-LROR) Sponsoring Registrar IANA ID: 81 ...

Comando mtr

Permite ver en tiempo real los paquetes enviados de un host origen a un host de destino,permitiendo ver en que sitios se presentan perdidas de paquetes.

161www.sugeek.co

En el ejemplo anterior vemos que presentamos perdidas en las IP's 172.17.0.85, ya conesta información podremos informar a nuestro ISP de posibles fallas.

Comando arp

Verifica el estado de las tablas arp de mi sistema, recordemos que las tablas arp sontablas que asocian las direcciones mac con las IP's de los distintos host que se conectanal servidor.

Comando ping

Permite corroborar si un host es alcanzable

root@sugeek:~# ping sugeek.co PING sugeek.co (184.107.53.15) 56(84) bytes of data. 64 bytes from 184.107.53.15: icmp_req=1 ttl=51 time=110 ms 64 bytes from 184.107.53.15: icmp_req=2 ttl=51 time=107 ms 64 bytes from 184.107.53.15: icmp_req=3 ttl=51 time=107 ms 64 bytes from 184.107.53.15: icmp_req=4 ttl=51 time=107 ms 64 bytes from 184.107.53.15: icmp_req=5 ttl=51 time=107 ms 64 bytes from 184.107.53.15: icmp_req=6 ttl=51 time=111 ms 64 bytes from 184.107.53.15: icmp_req=7 ttl=51 time=107 ms 64 bytes from 184.107.53.15: icmp_req=8 ttl=51 time=107 ms 64 bytes from 184.107.53.15: icmp_req=9 ttl=51 time=107 ms 64 bytes from 184.107.53.15: icmp_req=10 ttl=51 time=121 ms

162www.sugeek.co

64 bytes from 184.107.53.15: icmp_req=11 ttl=51 time=110 ms

Si tenemos varias interfaces, con la opción -I me permite identificar la interfaz de red.

Comando traceroute

A diferencia de mtr solo envía un paquete, de resto hace exactamente lo mismo que mtr,enviar un paquete para verificar los saltos desde un host origen a un host destino.

root@sugeek:~# traceroute -n sugeek.co traceroute to sugeek.co (184.107.53.15), 30 hops max, 60 byte packets 1 192.168.252.1 3.628 ms 3.615 ms 3.597 ms 2 192.168.252.2 2.796 ms 2.802 ms 2.794 ms 3 200.25.225.17 7.471 ms 7.481 ms 7.467 ms 4 172.16.1.33 7.702 ms 8.041 ms 8.008 ms 5 190.60.196.169 8.726 ms 8.696 ms 8.656 ms 6 * * * 7 63.218.113.93 44.370 ms 43.962 ms 43.953 ms 8 63.218.22.142 74.414 ms 71.095 ms 71.469 ms 9 154.54.12.121 88.984 ms 88.523 ms 88.903 ms 10 154.54.6.53 88.866 ms 154.54.7.45 88.664 ms 88.655 ms 11 154.54.2.113 100 ms 154.54.5.217 97.773 ms 154.54.46.217 97.485 ms 12 154.54.6.118 103.825 ms 154.54.6.86 105.326 ms 104.441 ms 13 154.54.42.6 104 ms 154.54.42.10 108.886 ms 154.54.27.182 108.888 ms 14 154.54.40.178 235.205 ms 235.231 ms 235.189 ms 15 154.54.45.114 288.758 ms 276.981 ms 241.295 ms 16 38.122.70.186 108 ms 38.122.70.182 106.771 ms 38.122.70.186 107 ms 17 67.205.127.121 107.546 ms 106.888 ms 108.981 ms 18 * * * 19 184.107.1.30 109.538 ms 109.199 ms 109.125 ms 20 184.107.53.15 109.273 ms 113.977 ms 113.972 ms

Comando nslookup

Obtiene la dirección ip de un dominio especificado

root@sugeek:~# nslookup sugeek.co Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: sugeek.co Address: 184.107.53.15

Comando dig

Similar a nslookup, pero a diferencia de este puedo cambiar el servidor dns, dig@serverdns dominioaconsultar

root@sugeek:~# dig @8.8.8.8 sugeek.co

163www.sugeek.co

; <<>> DiG 9.8.1-P1 <<>> @8.8.8.8 sugeek.co ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5026 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION: ;sugeek.co. IN A

;; ANSWER SECTION: sugeek.co. 21182 IN A 184.107.53.15

;; Query time: 94 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Feb 24 22:24:42 2014 ;; MSG SIZE rcvd: 43

Comando IPTraf

Este comando (Es posible instalarlo) nos permite visualizar en tiempo real la actividad dela red mediante una herramienta de texto, opcionalmente interactiva. Las opciones masusadas son:

• iptraf Ejecuta el programa gráfico→• -i Indica cual es la interfaz que va a ser monitorizada→• -g Muestra estadísticas de forma generales→• -d Muestra estadísticas detalladas de la interfaz seleccionada→• -s Comiensa el monitor de trafico TCP y UDP→• -L Especifica el archivo donde se guardara el log.→

IPTraf Es un comando ideal para el análisis de red de un servidor, así sabremos si se estacomportando como debería de comportarse.

Archivo /etc/networks

En este archivo encontramos las redes que están directamente conectadas a nuestrosistema o asociadas a este.

164www.sugeek.co

LOGS DEL SISTEMAYa habíamos mencionado sobre el comando dmesg (Consulta el archivo/var/log/dmesg), last y lastb, pero no son los únicos que nos da información delsistema acciones sobre este. Normalmente en GNU/Linux todos los servicios guardaninformación del estado de su funcionamiento. Todos los logs del sistema y servicios seguardan y deben de guardar (Por estándar) en /var/log. Los servicios encargados demanejar los logs son rsyslog y logrotate.

Servicio rsyslog

Rsyslog es un servicio muy completo y complejo, pero a la ves interesante, podemosencontrar mas información sobre este en http://www.rsyslog.com/, ya que en esteapartado se tocaran temas muy superficiales.

Rsyslog esta en la capacidad de manejar mas de un millón de mensajes por segundo enun sistema local, de múltiples servicios o de reglas creadas por el usuario

Si viene de syslogd (Versiones antes de Debian 7) notara que este servicio ya no esta, yrsyslog lo ha remplazado, su configuración lo podemos encontrar en /etc/rsyslog.confy el directorio de archivos por servicio lo encontramos en /etc/rsyslog.d/.

Rsyslog es compatible con diferentes tipos de configuración y además de ello se entiendepor comentario las lineas que comiencen con numeral # o estén dentro de /* */-

• sysklogd → Este es el tipo mas sencillo, muy útil para casos de uso sencillos. • RainerScript Esta es la mejor opción para implementar ya que soporta las→

características avanzadas de crear reglas mediante estructuras complejas

sysklogd

Proveniente de syslogd es lo mas simple de utilizar para nuestros servicios, un ejemplosimple es:

mail.info /var/log/mail.logmail.err @server.example.net

Lo anterior indica que el servicio de mail, cuando genere cualquier información lo enviéa /var/log/mail.log pero si se presenta un error lo envié al servidor indicado. Podríamoscrear nuestros propios logs utilizando los recursos de usuario, los cuales van desdelocal0 hasta el local7.

local1.err /var/log/mylog

Los distintos recursos son:

165www.sugeek.co

• 0 (Kernel – kern) Mensajes del kernel→• 1 (Usuario – user) → Mensajes del nivel de usuario• 2 (Mail – mail) → Sistema de correo• 3 (Demonio – daemon) → Demonios de sistema• 4 (Autenticacion – auth) → Seguridad/Autorización• 5 (Syslog – syslog) → Mensajes generados internamente por syslogd• 6 (Impresion – lpr) → Subsistema de impresión• 7 (Noticias – news) → Subsistema de noticias sobre la red• 8 (uucp) → Subsistema UUCP• 9 → Demonio de reloj• 10 (Autorizacion – authpriv) → Seguridad/Autorización• 11 (FTP - ftp) → Demonio de FTP• 12 → Subsistema de NTP• 13 → Inspección del registro• 14 → Alerta sobre el registro• 15 (clock) → Demonio de reloj• 16 (local0) → Uso local 0• 17 (local1) → Uso local 1• 18 (local2) → Uso local 2• 19 (local3) → Uso local 3• 20 (local4) → Uso local 4• 21 (local5) → Uso local 5• 22 (local6) → Uso local 6• 23 (local7) → Uso local 7

Los distintos niveles de severidad son:

• 0 (Emergencia - panic) El sistema está inutilizable→• 1 (Alerta - alert) Se debe actuar inmediatamente→• 2 (Crítico - crit) Condiciones críticas→• 3 (Error - err) Condiciones de error→• 4 (Peligro - warn) Condiciones de peligro→• 5 (Aviso - notice) Pero condiciones notables→• 6 (Información - info) Mensajes informativos→• 7 (Depuración - debug) Mensajes de bajo nivel→

Para poder calcular la prioridad de un servicio se toma la siguiente formula:

Prioridad=Recurso*8+Severidad

Según lo anterior podríamos tomar como ejemplo el kernel, el cual tiene un recurso de 0y de una severidad de 0, tendríamos como resultado 0*8+0=0, y nos lleva a la conclusiónde que a menor valor mayor prioridad.

166www.sugeek.co

RainerScript

Es el lenguaje por defecto de rsyslog y el recomendado a utilizar cuando poseemosmayores conocimientos sobre este, este lenguaje se asemeja al lenguaje utilizado en lacreación de script de Bash.

El lenguaje soporta expresiones complejas arbitrarias. Todos los operadores habitualesson compatibles. La precedencia de las operaciones es el siguiente:

• Expresiones entre paréntesis• Not• *, /,% (Módulo, como en C)• +, -, & (concatenación de cadenas)• ==,! =, <>, <,>, <=,> =, Contiene (cadenas!)• and• or

El siguiente ejemplo fusiona las funciones de rsyslog para obtener información sobrecierto programa que en esta ocasión sera el NetworkManager.

If ($programname == 'NetworkManager') or ($programname startWith 'nm-')then -/var/log/NetworkManager & ~

Servicio logrotate

La función de logrotate es evitar que los archivos de logs superen cierto tamaño y sevuelvan inmanejables, realizando actividades como compresión de logs, rotación de logs(Permitir solo hasta cierto tamaño, cuando se supera el tamaño crea un archivo de formaautomática), eliminación y envío de logs a mails.

Se podría planificar la rotación de los logs de forma diaria, semanal, mensual, o cuandollegue a cierto tamaño.

Normalmente logrotate corre diariamente con un trabajo de crontab.

Para poder ejecutar logrotate sin necesidad de esperar se ejecuta el comando logrotate-f (para forzar la ejecución ya que si se ejecuta solo el comando, este validara si ya seejecuto y si fue así no realiza ninguna acción).

El archivo de configuración se podrá encontrar en /etc/logrotate.conf y/etc/logrotate.d/ allí se encuentra la configuración para cada uno de los logs que seencuentran dentro de /var/log normalmente los nuevos servicios escriben allí sus lineaspara su rotación de logs.

compress

/var/log/messages {

167www.sugeek.co

rotate 5 weekly postrotate /usr/bin/killall -HUP syslogd endscript }

"/var/log/httpd/access.log" /var/log/httpd/error.log { rotate 5 mail [email protected] size 100k sharedscripts postrotate /usr/bin/killall -HUP httpd endscript }

/var/log/news/* { monthly rotate 2 olddir /var/log/news/old missingok postrotate kill -HUP `cat /var/run/inn.pid` endscript nocompress }

Las primeras lineas sin “Encapsular” (Dentro de ningún corchete o llaves) son lasopciones globales, después van las reglas hacia cada uno de los archivos, carpetas (sepodrá notar en la carpeta /var/log/news como se usa un comodín para hacer énfasis entodos los archivos contenidos en esta.)

Tomando como ejemplo el /var/log/messages en donde indica que va a rotar los logsdurante 5 semanas, pero antes se comprimirá (en gzip) el antiguo log (opción globalcompress) y se ejecutara el comando indicado luego de hacer la rotación, en el ejemplode httpd rota 5 veces cuando llegue a los 100k de tamaño y sera enviado al [email protected]. En el ultimo ejemplo además de hacer 2 rotaciones mensuales se crea un“olddir” o directorio donde se guardaran los antiguos logs comprimidos. (No es posiblecrear un archivo log en una carpeta que no exista, logrotate no esta en la capacidad decrear carpetas)

Algunas de las opciones que se podrán incluir en este archivo son:

• compress Antiguas versiones de los logs son comprimidas→• copy Crea una copia del log generado, ideal para realizar backups de los logs o→

cuando estos son consultados por otras aplicaciones, y se quiere evitar al máximola interacción con el log original.

• Monthly Se guarda el log cada mes→• weekly Se guarda el log cada semana→

168www.sugeek.co

• postrotate/endscript Las lineas dentro de postrotate y endscript, ejecutan un→comando indicado después que se hace la rotación de logs, no siempre esnecesario ejecutar un comando.

• rotate Cantidad de antiguas versiones que se mantienen antes de ser→eliminadas.

• Size Tamaño del archivo que se tiene en cuenta para poder realizar la rotación→del log, podríamos definir tamaños con M y k. (10M para 10 Megabytes o 10k para10 Kilobytes)

• Create → Crea el nuevo archivo log para que el sistema siga escribiendo.

Probando los logs locales

Para probar nuestro sistema de forma local, vamos a simular un error en una aplicaciónde correo. Los logs no se escriben a mano sino a través de la orden “logger”. La sintaxisla puedes consultar con:

root@sugeek:~# logger -p mail.err "Esto es una prueba"

La opción -p (prioridad) imprime el mensaje “Esto es una prueba” en el log llamado“mail.err”

Si verificamos el log de los errores de mail notaremos listo log registrado.

root@sugeek:~# cat /var/log/mail.errMay 13 21:47:55 debian root: Esto es una Prueba

El Debian y root son la maquina que genero el log, y root el usuario.

Archivo /var/log/messages

En este archivo se guardan la mayoría de mensajes que arrojan los servicios del sistema(se puede cambiar el archivo log según la configuración de cada servicio).

169www.sugeek.co

TAREAS PLANIFICADASPoder automatizar algunos procesos del sistema, hace que la labor del administrador seamas eficiente, para esto existen los comandos crond y at, además de la herramientaanacron la cual no veremos en esta ocasión ya que esta herramienta se enfoca paracomputadores de escritorio.

Nota: Se requiere conocimientos básicos en BASH para poder realizar tareasplanificadas

Archivo /etc/crontab

En este archivo se encuentra la configuración general del demonio crond. El contenidode dicho archivo es similar a:

SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #

Como ven, el archivo ya viene con unas reglas apuntando a los directorios/etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly y /etc/cron.monthly. Loscuales contienen los scripts que se deseen ejecutar cada cierto tiempo.

El archivo de configuración de crond posee 7 columnas separadas por espacios,

• m Minutos→• h Horas→• dom Dia del Mes (Day of Month)→• mon Mes (Month)→• dow Dia de la Semana (Day of Week) 0-6 (0 Es domingo y 6 es el Sábado)→• user Usuario que ejecuta el comando→• command Comando a ejecutar o script→

Tomando como ejemplo la primera linea de nuestro archivo, procederemos ainterpretarlo:

17 * * * * root cd / && run-parts --report /etc/cron.hourly

170www.sugeek.co

La anterior linea indica

• 17 Cada hora a los 17 Mins→• * Todas las Horas→• * Todos los Dias→• * Todos los meses→• * Todos los dias de la Semana→• root Con el Usuario Root→• cd / && run-parts --report /etc/cron.hourly Ejecutar este comando→

Si deseamos que se ejecute cada ciertos meses, en el apartado del mes, definimos elnumero del mes separados por comas. 1,2,5,7,10 Para Enero Febrero Mayo Julio yOctubre.

Como se puede observar, existen ciertos operadores.

• El asterisco (*) → Este operador abarca a todos los valores posibles en uncampo. Por ejemplo, un asterisco en el campo de hora, será equivalente a cadahora; o, un asterisco en el campo mes será equivalente a cada uno de los meses.

• La coma (,) → Este operador especifica una lista de valores, por ejemplo:"1,5,10,15,20, 25".

• El guión (-) → Este operador especifica una serie de valores, por ejemplo: ""5-15"días, lo que equivale a escribir "5,6,7,8,9, ... ,13,14,15" usando el operador coma.

Pero aparte de usar operadores también podemos utilizar abreviaciones:

• @reboot → Ejecutar una vez, en el inicio.• @yearly → Ejecutar una vez al año, es igual que indicar "0 0 1 1 *".• @annually → (igual que @yearly)• @monthly → Ejecutar una vez al mes, es igual que indicar "0 0 1 * *".• @weekly → Ejecutar una vez a la semana, es igual que indicar "0 0 * * 0".• @daily → Ejecutar una vez al día, es igual que indicar "0 0 * * *".• @midnight → (igual que @daily)• @hourly → Ejecutar a cada hora, es igual que indicar "0 * * * *".

Comando crontab

Con este comando se puede gestionar las funciones del demonio crond por usuario,siempre y cuando tenga permisos de ejecutarlo (Dependiente de los archivos/etc/cron.allow /etc/cron.deny y /var/spool/cron/crontabs/ En este ultimo seguardan las tareas planificadas del usuario). Algunas opciones este comando son:

• u Indica el usuario→• l Lista la tareas del usuario indicado →

171www.sugeek.co

• e Edita las tareas planificadas del usuario→• r Elimina los crontabs del usuario indicado→

Comando at

Este comando a diferencia del crontab (También posee at.allow y at.deny dentro de etc)solo me permite ejecutar una vez una tarea planificada, por ende si se va a ejecutar masde una sola vez, se recomienda el uso de crontab.

root@sugeek:/etc# at 19:58 warning: commands will be executed using /bin/sh at> echo "HOLA" at> <EOT> job 2 at Tue May 13 19:58:00 2014

Como se podrá observar hemos definido que at ejecute a la 19:58 y luego me solicita elcomando a ejecutar, después de escribir el comando terminamos la tarea con [Ctrl] +[D].Cada tarea planificada se guardara en /var/spool/atjobs

Para indicar un script solo basta con la opción -f y la ruta del script.

root@sugeek:/etc# at -f /home/ruta/del/script 20:00

Además de ello podemos indicar que se ejecuten en n dias a x hora.

root@sugeek:/etc# at -f /home/ruta/del/script 20:00 + 2 days

Lo anterior es una buena idea si tenemos que hacer algo y no nos encontramos en sitio,así que lo planificamos una sola vez.

Para saber que tareas tenemos planificadas con at procedemos a usar el comando atq ypara borrar una tarea planificada usamos atrm n (n indica el numero de la tarea).

172www.sugeek.co

SEGURIDAD EN GNU/LINUXAunque los sistemas GNU/Linux es uno de los mas robustos en cuanto a seguridad serefiere, una mala configuración o administración podría afectar notablemente laintegridad de la información allí almacenada o en su defecto que nuestro servidor seausado en una bootnet.

Archivo /etc/securetty

Este archivo permite bloquear las consolas TTY para su conexión local, solo basta coneliminar o comentar las TTY que no deseemos conexión, se recomienda dejar 3 por lomínimo.

Rootkits

Un RootKit como se podría deducir de su nombre, permite suplantar cierto comando parapoder obtener credenciales de root y así darle permisos al atacante de cometer susfechorías.

Un ejemplo de rootkit es el siguiente:

soporte@debian:~$ pwd /home/soporte soporte@debian:~$ cat su #!/bin/bash echo -e "Contraseña: \c" read -s password echo "$@ $password" > /tmp/fic echo echo "su: Fallo de Autenticación" /bin/su $@ soporte@debian:~$ chmod +x su soporte@debian:~$ export PATH=$HOME:$PATH soporte@debian:~$ su root Contraseña: #Falso Susu: Fallo de Autenticación #Falso suContraseña: #Verdadero SUroot@debian:/home/soporte# cat /tmp/fic root D3B14N

Como se puede observar se ha suplantado el comando su el cual es importante en elsistema.

Existe la herramienta chkrootkit, la cual permite escanear y detectar los rootkits masconocidos. El uso es muy sencillo, el comando seguido de las opciones (opcionales). Seinstala con apt-get install chkrootkit.

173www.sugeek.co

Virus

Se tiene que desmitificar el frase de que “En GNU/Linux No existen virus”, ya que existenvirus en GNU/Linux, pero no tanto como en otros sistemas mas extendidos, es mas paraque un virus sea ejecutado en GNU/Linux debe de tener acceso a root, al cual accede conel permiso del usuario (El usuario instala software sin saber que es), Pero aun así es difícilque dicho virus afecte notablemente el sistema por el FSH (Sistema de Archivos).

Para mayor información sobre que es un virus no dude en visitar Wikipedia.

Pero si nuestro equipo o servidor, se conecta de forma constante a equipos de otrasplataformas como Windows, se recomienda tener instalado un antivirus, el motor deantivirus para GNU/Linux se llama ClamAV, el cual se instala de la siguiente manera:

apt-get install clamav clamav-daemon

Clamav es el antivirus en si, el cual se debe de ejecutar en función de la necesidad, y elclamav-daemon es el demonio que se mantiene ejecutando y verificar en “Caliente” losarchivos copiados.

La herramienta freshclam se encarga de actualizar la base de datos de clamav, sepuede actualizar de forma manual ejecutándolo, o de forma periódica configurando elarchivo /etc/clamav/fresclam.

Para la ejecución manual del antivirus procederemos a realizar el siguiente comando:

root@suge3k:~#clamscan -r -v –remove=yes /home/* --log=/var/log/logvirus

Entendamos el comando anterior, la opción -r indica recursivo, la -v es verbose (Paraobtener mas información), la opción –remove=yes como indica elimina los archivosinfectados, luego la carpeta que se realiza el escaneo, y por ultimo el resultado de dichoescaneo se guarda en el archivo indicado con –log=/var/log/ogvirus

No esta de mas mencionar el uso del manual del comando con man clamscan.

Bloquear USB

En ocasiones es necesario bloquear ciertos dispositivos usb para evitar el robo deinformación, o posibles infecciones.

Nota: hci hace referencia a Host Controller Interface o Interfaz Controladora de Host,ohci es OpenHCI proveniente de Compaq (Actual HP), uhci es UniversalHCI, ehci esEnhancedHCI y xhci eXtensibleHCI, las 2 ultimas desarrolladas por Intel. Si se tiene xhcien nuestro sistema las anteriores no son necesarias, ya que xhci soporta las antiguasversiones de USB.

Para bloquear los puertos usb pero para dispositivos específicos debemos de conocer

174www.sugeek.co

algunos módulos integrados al usbcore, entre los cuales destacamos:

• ohci_hcd Soporte a USB 1.0→• uhci_hcd Soporte a USB 1.1→• ehci_hcd Soporte a USB 2.0→• usb_storage Soporte a dispositivos de almacenamiento→• usbhid Soporte a dispositivos de interfaz humana (Teclados, Mouse, Gamepad,→

etc)• snd-usb-audio Soporte para dispositivos de audio→• usbvideo Soporte para dispositivos de vídeos→• irda-usb Soporte para Infrarrojos USB→• usbnet Soporte para tarjetas de red alambicas o inalámbricas→

Suponiendo que deseamos bloquear los dispositivos de almacenamiento para que nopuedan extraer información de nuestros sistemas procedemos a bloquear elusb_storage. Para ello solo escribimos lo siguiente:

root@sugeek:/#echo “blacklist usb_storage” > /etc/modprobe.d/usb_storage.conf && depmod -ae && update-initramfs -u

Ya con lo anterior hemos bloqueado el modulo usb_storage para evitar la fuga deinformación.

Herramienta SUDO

El comando de sustitución de usuario (substitute user do), o SUDO me permite ejecutarciertos comandos de y usuario con x usuario, Debian por defecto no viene instalado, lopodemos instalar con el comando apt-get install sudo . No confundir con el comandosu.

El archivo de configuración lo encontramos en /etc/sudoers, en distribuciones comoUbuntu y derivadas de esta se recomienda deshabilitarlo ya que posee muchos permisos.

Los permisos de SUDO pueden ser por usuarios, grupos, y comandos.

El comando sudo al ejecutarse y al ser satisfactoria la conexión, de formapredeterminada se genera una sesión abierta por 15 min. Las diferentes opciones que sele pueden enviar a sudo son:

• u Indica el usuario con el cual se va a ejecutar cierto comando, si no se→especifica de forma predeterminada, sudo toma como usuario al usuario root.

• g Lo mismo que lo de los usuarios pero enfocado a un grupo.→• k Invalida la sesión de sudo, esto quiere decir que los 15 min se cancelara y se→

cerrara la sesión.• l Indica los permisos que tiene el usuario actual con sudo, se puede ayudar de -u→

para especificar el usuario.

175www.sugeek.co

Archivo /etc/sudoers

En este archivo se definen las reglas por defecto del comando sudo.

root@sugeek:~# cat /etc/sudoers Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" root ALL=(ALL:ALL) ALL %sudo ALL=(ALL:ALL) ALL

Las reglas generales son las Defaults, estas son utilizadas para modificar elcomportamiento de sudo. Dichas opciones son aplicables tanto a nivel global, a nivel deusuario o a nivel de maquina. Ya el resto de opciones es donde se define los permisos porusuarios o por grupos.

user machine = (user2) comando

• user El usuario o alias al cual se aplica la regla.→◦ Los usuarios pueden ser:

▪ Nombre de Usuario▪ #uid▪ %group▪ +netgroup▪ User_Alias

• machine La maquina o alias en la cual se aplica la regla.→• user2 La cuenta con la cual el usuario ejecutara el comando→• comando Comando a ejecutar.→

Un ejemplo seria:

user ALL = /sbin/fsck

Lo anterior indica que el usuario user desde cualquier maquina va a ejecutar el comandofsck. Asi que para que el usuario user pueda ejecutar el comando fsck (Comando quesolo ejecuta root) debe de ejecutar sudo fsck.

Lo demás que podemos hacer es (A los grupos se le definen como alias):

• Crear grupos de usuarios• Crear grupos de maquinas• Crear grupos de comandos• Forzar el uso o no de una contraseña• Forzar la ejecución de un comando bajo un usuario distinto a root.

A continuación veremos un archivo /etc/sudoers Modificado a medida (Se recomienda

176www.sugeek.co

ver el manual de sudoers con man sudoers ya que contiene información muy especificay muy bien explicada).

#OPCIONES Se puede ver todas en SUDOERS OPTIONS utilizando el manualmenteDefaults env_reset,timestamp_timeout=5,passwd_timeout=1, passwd_tries=1,insults

#ALIAS (Grupo de Usuarios)User_Alias ADMINS = admin1,admin2User_Alias TECNICOS = tecnico1,tecnico2

#ALIAS (Comandos)Cmnd_Alias ADMIN =/sbin/,/usr/sbin/,/usr/local/sbin/Cmnd_Alias TECNI =/sbin/ifconfig,/sbin/fsck

#REGLAS (ACL)#Usuario root y grupo sudo continúan con sus reglasroot ALL=(ALL) ALL

#A los administradores no se les solicita password prohibiendo el apagadoADMINS ALL = NOPASSWD: ADMIN,!/sbin/shutdown TECNICOS ALL = TECNI

Autenticación PAM

PAM (Pluggable Authentication Modules) es un mecanismo flexible para la autenticaciónde usuarios centralizado. Permite modelar políticas de seguridad personalizadadependiendo el servicio para distintos usuarios. Asi que con este mecanismo GNU/Linuxse puede autenticar un usuario utilizando una cuenta de sistema, en un LDAP, en unActive Directory, con una llave USB, Biométrico, y con horarios preestablecidos.

Para entender un poco mas de este mecanismo se recomienda tener esta lectura: UsandoPAM (Ingles)

Limites del Usuario

El comando ulimit permite actuar en el entorno del shell y de los procesos que controla,con la opción -a muestra las opciones controladas por este.

root@debian:/var/Kernel# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7534 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0

177www.sugeek.co

stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 7534 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

Los valores que nos interesa en este momento son:

• max memory size El tamaño máximo de RAM que puede usar un usuario→• open files → El numero máximo de archivos que se puede abrir por usuario.• max users processes → Numero máximo de procesos que puede iniciar un

usuario.

Estos valores pueden ser cambiados editando el archivo /etc/security/limits.conf conel usuario root. Al abrir el archivo notaremos una guía muy fácil para editar los limitestanto suaves (soft) y duros (hard), y veremos que podemos colocar dichos limites tantopor usuario como por grupos.

Proteger el GRUB2 con contraseñas

Es poco probable que nuestro sistema caiga en manos de una persona que sepa realizarla actividad que vimos al inicio del libro, la cual consistía en recuperar el password deroot y tenga acceso al servidor, por ello también se recomienda asegurar nuestro GRUB2con password (Aunque GRUB2 me permite crear usuarios y grupos con roles distintos nolos configuraremos, solo veremos la contraseña).

Para establecer password de GRUB2 se utiliza la herramienta grub-mkpasswd-pbkdf2

root@sugeek:/# grub-mkpasswd-pbkdf2 Enter password: Reenter password: Your PBKDF2 is grub.pbkdf2.sha512.10000.D29EE80C313168F16E637F3D5B579AA5F08C40B594971B01D9E8B8DE39CB78F664CB8ABE5605B00878E34ECCD326FA848CD201ACDD24EBC4E25F0259C1D63D2E.F840FED5C672E80C5F50BA46289AB5C45B9B444B34B0A33D3

Dicho password generado se copiara en el archivo /etc/grub.d/40_custom quedandodicho archivo de la siguiente manera

#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above.

set superusers="admin" password_pbkdf2 admin grub.pbkdf2.sha512.10000.D29EE80C313168F16E637F3D5B579AA5F08C40B594971B01D9E8B8DE39CB78F664CB8ABE5605B00878E34ECCD326FA848CD201ACDD24EBC4E25F0259C1D63D2E.F840FED5C672

178www.sugeek.co

E80C5F50BA46289AB5C45B9B444B34B0A33D3

Ya con lo anterior solo se requiere recargar el grub con update-grub y la próxima vezque inicie el sistema y queramos modificar el grub nos solicitara el password queestablecimos.

179www.sugeek.co

BIBLIOGRAFÍAParte del contenido de esta obra se sustrajo de:

• Wikipedia (https://www.wikipedia.org)• Documentación de Debian (https://www.debian.org/doc/)• Debian-Administration (https://www.debian-administration.org/)• Debian Handbook (http://debian-handbook.info/)

180www.sugeek.co