Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Linux
Linux
Manual
Alcaraz Francisco
Contents
INTRODUCCIÓN 5
1 QUE ES LINUX? 6
1.1 Generalidades 6
1.2 Distribuciones 6
1.3 Características 7
3 ESTRUCTURA DE DIRECTORIOS 10
4 INTERPRETE DE COMANDOS 11
5 COMANDOS BÁSICOS 12
5.2 Sistema 19
5.2.1 Free 19
5.2.2 Du 20
5.2.3 Df 20
5.3 Otros 21
5.3.1 More 21
5.3.2 Less 21
5.3.3 Tail 22
5.3.4 Head 23
5.3.5 Wc 23
5.3.6 Date 24
5.3.7 Cat 24
5.3.8 Sort 25
5.3.9 Uniq 25
5.3.10 Man 26
5.3.11 Grep 26
6.4 Pipes(tuberías) 29
7 PARTICIONES 29
8.1 Conceptos 38
8.2 Usuarios 38
8.2.1 Useradd 39
8.2.2 Usermod 39
8.2.3 Userdel 40
8.2.4 Passwd 40
8.2.5 Chage 41
8.3 Grupos 42
8.3.1 Groupadd 42
8.3.2 Groupdel 42
8.3.3 Groupmod 43
9 PERMISOS 45
9.1 Generalidades 45
9.4 Comandos 47
10 GESTIÓN DE PROCESOS 48
10.1 Comando ps 49
10.3 Señales 52
11 TAREAS PROGRAMADAS 55
11.1 Cron 56
11.2 Crontab 56
12 DIRECTORIOS IMPORTANTES 57
12.1 /dev 58
12.2 /etc 58
12.3 /proc 59
12.4 /var 60
12.5 /usr 61
13 RESPALDOS 61
14 SCRIPTING 63
14.1 Funcionamiento 64
14.2 Variables 64
14.2.1 Asignación de cadena 65
14.2.2 Asignación numérica 65
14.3 Comentarios 66
14.4 Argumentos 66
14.5 Operadores 67
14.5.1 Comparativos de cadenas alfanuméricas 67
14.5.2 Comparativos valores numéricos 68
14.5.3 De archivos 68
14.5.4 Aritméticos 68
14.5.5 Lógicos 69
14.5.6 Booleanos 69
14.5.7 Comillas 69
14.6 Condiciones 70
14.6.1 If-Else 70
14.6.2 Case-Esac 71
14.7 Ciclos 72
14.7.1 For 72
14.7.2 While 72
BIBLIOGRAFÍA 74
El mundo de los Sistemas Operativo tiende a ser un sinfín de opciones de distintos sabores
que se adecúan a las necesidades de usuarios cada vez más exigentes; desde propósitos
personales a nivel usuario hasta ayudando a grandes empresas gracias a su reconocido
performance en servidores y grandes computadoras.
1.1 Generalidades
Los Sistemas Operativos GNU/Linux poseen un núcleo pasado en Unix del año 1969, bajo
ésta licencia, de manera que lo convirtió en el primer SO de código abierto. Con el paso del tiempo
se ha orientado a ser un núcleo con la facilidad de portabilidad entre diferentes arquitecturas
desde su concepción.
El sistema Linux es compatible con ciertos estándares de UNIX a nivel de código fuente,
incluyendo el IEEE POSIX.1, System V y BSD. Fue desarrollado buscando la portabilidad de los
fuentes: Encontrará que casi todo el software gratuito desarrollado para UNIX se compila en Linux
sin problemas. Y todo lo que se hace para Linux (código del núcleo, drivers, librerías y programas
de usuario).
El núcleo soporta ejecutables con paginación por demanda. Esto significa que sólo los
segmentos del programa que se necesitan se cargan en memoria desde el disco. Las páginas de los
ejecutables son compartidas mediante la técnica copy-on-write, contribuyendo todo ello a reducir
la cantidad de memoria requerida para las aplicaciones.
Todos los sistemas basados en Linux pueden ser instalados en diferentes tipos de
particiones, siendo las más comúnes EXT2, EXT3, EXT4, reiserf4, ReiserFS y Btrfs.
1.2 Distribuciones
Linux tiene la peculiaridad, gracias a su naturaleza, de poder ser modificado de acuerdo a los
intereses y gustos de los usuarios y sobre todo, de las comunidades detrás. Estos cambios se
distribuyen a través de diferentes versiones y agrupamiento de aplicaciones base en llamadas
Distribuciones. Wikipedia define una distribución como:
“es una distribución de software basada en el núcleo Linux que incluye determinados paquetes de
software para satisfacer las necesidades de un grupo específico de usuarios, dando así origen a
ediciones domésticas, empresariales y para servidores. Por lo general están compuestas, total o
Comerciales o no comerciales.
Completamente libres o con software propietario.
Uso en hogar o empresarial.
Para uso en servidores o equipos de escritorio.
Para uso por expertos o usuarios novatos.
Por su uso principal: producción musical, computación científica o por
internacionalización y lenguaje.
Por la distro en la que se basen.
Por el sistema de escritorio que manejen.
Una gran mayoría de distribuciones se encuentra en Live-CD, lo cuál permite iniciar y probar
Linux desde el arranque de la PC sin la necesidad de instalarlo y poder dañar la configuración si no
se tienen los conocimientos para lograrlo. Generalmente se entregan en el primer CD de una serie
como lo puede ser Debian, en un DVD como OpenSuse o un CD completo en el caso de Ubuntu.
Entre las distribuciones más conocidas y populares se encuentran: Debian, Arch Linux,
Fedora, Ubuntu, CentOS, openSUSE, Gentoo, Red Hat Enterprise Linux, Mandriva, Slackware, Slax,
etc.
El presente manual estará basado en Debian por su fácil instalación y compatibilidad con
todos los ejercicios que se serán propuestos, aunque la mayoría de éstos también podrían ser
ejecutados en cualquier consola de comandos que más adelante se estudiará.
1.3 Características
Las características que presenta un sistema Linux es sinónimo de sus ventajas al utilizarlo. Si
por algo se ha caracterizado una distribución Linux en su mayoría es que se tiene un fuerte
respaldo de su comunidad o empresa desarrolladora, lo cuál permite la detección de errores
alrededor del mundo y un grupo que se encarga de corregirlo a la brevedad. Por ello Linux es un
sistema seguro y confiable en todo tipo de entornos, además de hacerlo asequible por el coste y
robusto por los beneficios que otorga.
Todas las distribuciones poseen un sistema básico de software, paquetes y librerías, lo que
hacen operativa nuestra recién instalación apenas haya concluido. Desde paquetería de ofimática,
educativa, y algo muy importante, los drivers. Los drivers nos permitirán operar casi de manera
inmediata todo nuestro equipo y sus distintos dispositivos, haciendo mínima la intervención
manual para hacerlos funcionar, algo que no sucede con otros Sistemas Operativos.
Es verdad, Linux no reconoce todos los posibles periféricos de nuestro equipo; considerando
que la tecnología avanza dia a dia, la producción de nuevos dispositivos no se queda atrás y las
distribuciones intentan hacer lo propio, así que siempre podrá existir este punto flaco.
Linux es seguro por naturaleza, te permite tener el control de los procesos en memoria en
todo momento, lo cuál lo hace casi infalible al ataque de virus informáticos, permitiendo su nula
ejecución si el proceso intenta ingresar a un bloque de memoria no permitido o su detención en
caso de consumir más recursos de los permitidos.
Hablar de Linux es hablar de una comunidad que respalda la distribución y apoya su uso en
todo el mundo en todo momento. Siempre dispuestos a ayudar a nuevos usuarios a través de
foros y documentación disponible en todos los idiomas.
Para poder importar nuestra VM, es necesario ir a File -> Import Appliance y seleccionarlo
desde nuestro disco duro. No es necesario cambiar ningún parámetro a la configuración de
Realizado esto, solo resta esperar alrededor de 10 minutos para tener nuestro SO
funcionando de manera virtual. Para iniciarlo, bastará con seleccionarlo de nuestro listado de VM’s
disponibles en la pantalla principal de VirtualBox:
Usuario: pako
Password: pakopako
Usuario: root
Password: lxp8b0hy
3 ESTRUCTURA DE DIRECTORIOS
Linux posee un sistema de directorios en el cuál son almacenados los archivos dependiendo
de su naturaleza. Estos directorios poseen su propia jerarquía que aunado de aportar una
estructura organizativa, representa un estándar para el almacenaje de todos los archivos del
Sistema Operativo. Existe una gran diferencia entre la forma de organizar los archivos entre Linux
y Windows.
Inclusive entre algunas distribuciones de Linux a veces cambia, es muy poco; se intenta
mantener en lo mayor posible. Las carpetas más importantes son:
Existen muchos más directorios, pero que ya corresponden a distribuciones más específicas.
Estos de la tabla son los esenciales casi en cualquier distribución.
4 INTERPRETE DE COMANDOS
Linux basa mucho de su éxito en la integración de una consola como principal medio de
administración; al estar basada en texto, se incrementa su operatividad y funcionalidad casi bajo
cualquier escenario. En sistemas Linux veremos esta aplicación como la principal. De manera
remota ingresaremos a un servidor a través del protocolo SSH utilizando algún simulador de
terminal o, en ambientes gráficos, tendremos que ingresar a ella desde Aplicaciones -> Accesorios -
> Terminal.
Aunque Linux posee gran variedad de entornos de escritorio, éstos no son necesarios para la
administración del sistema ya que la consola posee todo tipo de herramientas para realizar esta
actividad. En sistemas Unix todo lo que podemos realizar a través de un entorno de escritorio, lo
podemos realizar a través de su consola.
Los comandos serán representados por una simple línea de texto correspondientes a un
programa o ejecutable y una serie de parámetros opcionales en su gran mayoría. Los comandos
pueden representar opciones sobre los comandos o, la misma entrada de información que será
procesada por el comando.
$ ls –ltr
De ésta manera estaríamos ejecutando el comando “ls” teniendo como parámetros “ltr”
que más adelante serán explicados.
equipo:/directorio/actual$
Se conoce como salida a la posible información que un comando nos pueda brindar, ya sea
por la ejecución de tareas o avisos de error. Por default, toda la información será enviada a través
de la pantalla, aunque esto puede ser modificado dependiendo de nuestras necesidades o del
comando que sea ejecutado.
5 COMANDOS BÁSICOS
5.1.1 Cd
Este comando nos ayuda a cambiar el directorio actual de trabajo hacia dir, recibido por
parámetro.
Sintaxis:
cd [-L|-P] [dir]
Ejemplo:
$ cd juegos
5.1.2 Ls
Este comando nos permite listar la información de los archivos existentes, por default, en el
directorio actual de trabajo. Es posible establecer otro directorio enviándolo por parámetro.
Sintaxis:
ls [OPTION]... [FILE]...
$ ls –ltr /tmp
Mostrará la información del directorio /tmp en formato extenso ordenado por fecha de
modificación en reversible. Permitiendo observar al final del listado siempre el archivo con la
modificación más reciente.
5.1.3 Mkdir
Sintaxis:
Ejemplo:
$ mkdir nueva_carpeta
Creará la carpeta nueva_carpeta.
5.1.4 Mv
Sintaxis:
$ mv * /tmp
Moverá todos los archivos del directorio actual hacia la carpeta /tmp
5.1.5 Cp
Comando que permite copiar archivos o directorios. Los directorios son copiados
únicamente especificando el argumento requerido.
Sintaxis.
Ejemplo:
$ cp –r archivos /tmp
Copiará el directorio archivos hacia la carpeta /tmp.
5.1.6 Rm
Sintaxis:
rm [OPTION]... FILE...
Ejemplo:
$ rm –rf ~/docs
Eliminará toda la carpeta docs del home del usuario que lo ejecute y su contenido sin solicitar
confirmación.
5.1.7 Pwd
Sintaxis:
pwd [OPTION]...
Ejemplo:
$ pwd
5.1.8 Find
+n Mayor que n
-n Menor que n
n Exactamente igual a n
(expr1) Fuerza la precedencia de expr1
Expr1 –a La expr1 es igual a expr2
expre2
Expr1 –o O, exrp2 no es evaluada si expr1 es verdadera.
expr2
Expr1, expr2 Listado de expresiones a evaluar
Ejemplo:
5.1.9 Ln
Comando para creación de links entre archivos y directorios. Un enlace simbólico es una
referencia hacia un archivo o directorio existente en el cuál los cambios realizados a cualquiera de
los dos se ven reflejados en su contraparte.
Se creará un enlace llamado DIRECTORY que apunte a TARGET. TARGET siempre debe
existir.
Ejemplo:
5.1.10 File
Sintaxis:
Ejemplo:
$ file vm-support
vm-support: Bourne-Again shell script text executable
Salida mostrando un archive de tipo shell ejecutable.
$ file pako.txt
pako.txt: ASCII text
Salida mostrando un archive de tipo texto.
$ file inspections_22072013.txt
inspections_22072013.txt: UTF-8 Unicode text, with very long lines
Salida mostrando un archive de tipo texto en formato UTF-8 muy extenso.
5.1.11 Stat
Sintaxis:
Ejemplo:
$ stat lorem.txt
File: «pako.txt»
Size: 5 Blocks: 8 IO Block: 4096 fichero regular
Device: 805h/2053d Inode: 13 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ pako) Gid: ( 1000/ pako)
Access: 2013-07-24 11:31:12.000000000 -0500
Modify: 2013-07-24 11:31:08.000000000 -0500
Change: 2013-07-24 11:31:08.000000000 -0500
5.2 Sistema
5.2.1 Free
Sintaxis:
Ejemplo:
$ free –m
Muestra la información de la memoria actual en megabytes.
5.2.2 Du
Sintaxis:
du [OPTION]... [FILE]...
Ejemplo:
$ du –hsc ~/docs
Obtiene el total por directorio y gran total en modo humano de los archivos y directorios del
directorio docs del home del usuario.
5.2.3 Df
Sintaxis:
df [OPTION]... [FILE]...
Ejemplo:
$ df –h
Muestra información humanizada para todos los montajes del sistema.
5.3 Otros
5.3.1 More
Sintaxis:
Ejemplo:
$ more -3 index.php
Mostrará las primeras 3 lineas del archivo para después desplazarse de manera normal.
5.3.2 Less
Similar a more, pero permite más desplazamientos dentro del archivo así como especificar
la línea que se desea observar utilizando “:” seguido del numero deseado. Solo permite la
visualización, no edición.
Se trata de una mezcla del comando more con la herramienta vi, ya que permite el uso de
comandos de manera similar a ésta ultima.
less [-[+]aBcCdeEfFgGiIJKmMnNqQrRsSuUVwWXZ~]
[-b space] [-h lines] [-j line] [-k keyfile]
[-K character set] [-{oO} logfile]
[-p pattern] [-P prompt] [-t tag]
[-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
[-# shift] [+[+]cmd] [--] [filename]...
Ejemplo:
$ less 2013_07_07.log
Examina el archivo 2013_07_07.log
5.3.3 Tail
Sintaxis:
Ejemplo:
Arroja las primeras líneas de un archivo. Por default, las primeras 10.
Sintaxis:
Ejemplo:
5.3.5 Wc
Sintaxis:
wc [OPTION]... [FILE]...
Ejemplo:
$ wc –l fichero.txt
50 fichero.txt
Muestra el número de líneas contenidas en el archivo fichero.txt
Imprime la fecha y hora del sistema en el formato FORMAT. Permite su asignación con los
permisos necesarios. Los formatos de salida más comunes son:
Sintaxis:
Ejemplo:
$ date +%D
07/24/13
Imprime la fecha en formato mm/dd/yy
5.3.7 Cat
Sintaxis:
Ejemplo:
5.3.8 Sort
Sintaxis:
Ejemplo:
5.3.9 Uniq
Elimina las filas duplicadas de un archivo ordenado, descarta las líneas sucesivas idénticas
de INPUT y las imprime en OUTPUT. Suele ser utilizado con sort.
Sintaxis:
Ejemplo:
$ uniq -d file.txt
Imprime las líneas duplicadas del archivo file.txt
5.3.10 Man
Sintaxis:
Ejemplo:
$ man top
Muestra la manpage del comando top.
5.3.11 Grep
Imprime como salida las coincidencias con PATTERN, buscando en el archivo especificado (o
entrada estándar). Por default se despliegan las líneas que lo contengan.
Sintaxis:
Ejemplo:
6 REDIRECCIONAMIENTO
La consola de Linux en sí, funciona como intérprete de comandos entre el usuario y el SO. La
interacción es vital entre las dos partes a través de entrada/salida de información. En Linux existen
diferentes maneras de lograr ésta interacción, puede ser a través de las entradas estándar como
son el teclado o la salida de mismos comandos, como la salida, puede ser en pantalla o archivos de
salida.
Quizá la menos conocida, standar input, ya que como usuarios estamos acostumbrados a
interpretar los resultados que una aplicación en consola nos arroje y no tanto a enviarle, sin
embargo, existe.
En nuestra situación habremos de decir que nuestros comandos reciben parámetros que
serán considerados como stdin. Nuestra consola como tal no es capaz de solicitar de manera
adicional la entrada de información a través del teclado, cosa que si permite en las aplicaciones
desarrolladas C, Perl o Python, siendo éstos otros ejemplos de stdin.
pattern1
pattern2
pattern3
La manera de direccionar dicha salida se consigue con el operador “>” siguiendo la sintaxis:
Por ejemplo:
Al ejecutar un comando es posible que éste genere errores ya sea de ejecución o de sintaxis.
La salida de error, o standar error, se encargará de procesar dichos mensajes. De manera natural
se imprimirán en pantalla pero éstos pueden ser redireccionados a través del operador “2>”.
Por ejemplo
6.4 Pipes(tuberías)
Las tuberías son otro operador que nos permite básicamente “direccionar” la salida de un
comando, permitiendo tomarla como entrada en otro, ahorrando tiempo y líneas de código. La
ejecución será de izquierda a derecha.
Esto se logrará a través del carácter “|” colocado entre dos comandos. Éstos podrán
anidarse tantos como sea necesario, siempre respetando la sintaxis de la manera:
comando1 | comando2
Por ejemplo:
$ ls | wc –l
Primeramente se ejecuta el comando ls proporcionando el listado de archivos contenidos en la
carpeta donde se encuentre el prompt. Este listado sirve como entrada al comando wc –l, que
realizará un conteo de éstas líneas.
7 PARTICIONES
Normalmente un disco duro (unidad física) puede dividido en unidades más pequeñas,
llamadas particiones. Cada una de estas particiones utiliza su propio sistema de archivos para que,
casi de manera general, cualquier sistema operativo puede interpretarla y utilizarla como si fuese
un disco físico independiente, a pesar de que todas las particiones se encuentren en un mismo
dispositivo físico.
Dependiendo del sistema Operativo que vaya a ser instalado sobre la partición o, el Sistema
Operativo que vaya a hacer uso de cada partición puede considerarse el sistema de archivos que
será utilizado. También llamado formato.
7.2.1 Tipos
Ext2, ext3, ext4, ReiserFS, Reiser4. Se trata de los sistemas de archivos más ampliamente
distribuidos por y para distribuciones Linux, siendo la rama de “ext” la más extendida
siendo siempre una evolución y aplicación de nuevas características. Reiser se considera
como una rama importante, pero no soportada de manera nativa por la mayoría de
distribuciones en el mercado.
FAT, FAT32, NTFS. Sistema de ficheros desarrollados por Microsoft para los sistemas de la
familia Windows.
Linux Swap. Sistema de ficheros estandarizado para su utilización en áreas de intercambio
en sistemas Linux.
Linux reconocerá nuestros dispositivos a través del directorio /dev (que será visto más
adelante). En éste podrán ser localizados cada uno de los dispositivos físicos y particiones
disponibles. En realidad se trata de ficheros especiales y no pueden ser leidos sino se encuentran
montados correctamente bajo otro directorio.
La nomenclatura de éstos archivos se rige por el tipo de dispositivo físico que se trate. Es
decir, si nuestro dispositivo corresponde a uno de tipo IDE será localizado como hd y dependiendo
del orden en que se encuentren conectados, podrá ser hda para el primero, hdb para el segundo y
así sucesivamente. De manera similar suceda para dispositivos SATA, comenzando por sda, sdb,
etc. Y como último parámetro se tiene el número de partición que corresponda, comenzando en 1.
Es decir, podríamos tener sda1, sda2 y, en nuestro caso, hasta sda7 y la siguiente distribución a
manera de ejemplo.
Cada dispositivo puede ser montado bajo cualquier directorio que posea los permisos
necesarios. En Linux es recomendable realizar la división de nuestro disco duro en distintas
particiones lógicas y de ésta manera utilizarlas para los directorios más importantes de nuestro
Sistema Operativo; como lo pueden ser /, /usr, /home, /tmp y /proc. De esta manera podemos
Fdisk nos permite manipular las particiones en las que se encuentra dividido nuestro disco,
así como la visualización de información de éstas. En realidad se trata de una aplicación muy
completa con una serie de características que nos permiten redimensionar, eliminar y crear
nuevos formatos entre muchas utilerías más.
Para solamente mostrar la tabla de particiones existente, basta con escribir fdisk -l
/dev/disco, dónde disco representa la unidad que queremos examinar y ésta puede ser de
cualquier tipo. Pudiéndose tratar también del disco completo o una simple partición. Como
ejemplo:
Para poder utilizar la plenitud de esta herramienta, es necesario mandarla llamar con fdisk
/dev/disco. De esta manera, tendremos acceso a todas las herramientas. La navegación es
realizada a través de opciones de menú, siempre permitiendo regresar al menú anterior.
Quizá las funciones que con mayor frecuencia utilizaremos, será d y n, para eliminar y
crear particiones, respectivamente. En paralelo con v, para veritifación de integridad y w, para
guardar los cambios.
Existen muchas aplicaciones gráficas que nos permitirán administrar las particiones de una
manera rápida y sencilla. Quizá, en este sentido, conviene en mayor medida realizar dichas
actividades de ésta manera. Pero por consola, comando mount y conocimientos básicos, son
suficientes.
Este comando nos permitirá realizar el montaje de cualquier partición con cualquier sistema
de ficheros soportado por nuestro SO. Desde ext2 hasta ReiserFS y, nativos de Windows como
FAT32 y en ocasiones, hasta NTFS. La sintaxis:
Sin duda, uno de los parámetros más importantes: -t vfstype, con el cuál especificaremos el
tipo de filesystem a montar en nuestro directorio. Device indica nuestro acceso crudo a la
partición y dir, finalmente, indica el directorio dónde nuestra partición será montada.
Es decir, ya se cuenta con lectura y escritura de los ficheros de las particiones montadas.
Únicamente /dev/sda7 no se encuentra montada y por ende, no accesible a su información. Como
vimos en la sección 8.4.1, se trata de una partición de tipo Linux, y que podremos montar tanto
ext2, ext3 o ext4.
# mkdir /media/disco
# chmod 777 –R /media/disco
# mount –t ext4 /dev/sda7 /media/disco
# mount -l -t ext3
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
/dev/sda6 on /home type ext3 (rw)
/dev/sda5 on /tmp type ext3 (rw)
/dev/sda7 on /media/disco type ext3
7.4.2.1 Permisos
Es importante que antes de seleccionar una carpeta como destino a un punto de montaje
(sobre todo si éste es realizado de manera manual), nos aseguremos que el directorio posee los
permisos suficientes; generalmente asignaremos permisos 777 previos al montaje.
La ejecución del comando mount está limitada a root. Puede ser utilizado también por
cualquier usuario, siempre y cuando posea los permisos suficientes como se verá en la sección 8.5
fstab o a través de sudo.
7.4.2.2 Parámetros
Como todo comando, posee una serie de opciones que nos permitirán ejecutar ciertas
tareas adicionales con el fin de ajustar esta actividad a nuestras necesidades. El propio –t, utilizado
para establecer el tipo de sistema de ficheros, es una opción. Las más utilizadas para éste
comando, son:
Las opciones posibles para este comando, merecen un trato especial ya que son bastas.
Éstas dependen completamente del tipo de sistema de archivos que se desea montar, ya que por
su naturaleza no todos operan de la misma manera. Sobre todo los tipos nativos de Linux y su
creciente trabajo entre versión y versión. Existen una serie de estas opciones que podrían tratarse
como habituales:
De ésta manera, podríamos montar nuestra partición faltante con permisos de solo lectura:
7.4.3 umount
Una vez montadas las particiones, es probable que querramos desactivar alguna para
inhabilitar el acceso a la información ahí contenida. Para ello utilizaremos el comando umount.
# umount /media/disco/
#Personales
/dev/sda7 /media/disco ext3 defaults 0 0
Nótese la última línea anexada de manera manual; ésta montará la partición con la cuál
hemos venido trabajando. Con sus opciones “por default”, descritas en la sección Parámetros del
apartado 8.4.2.2.
Este archivo es leído cada inicio de nuestro equipo por lo que, con ésta configuración,
nuestras particiones serán montadas de manera automática si así están descritas en sus
Si queremos que esto no ocurra de esa manera, bastará con modificar la línea a:
8.1 Conceptos
Para fines prácticos, mencionaremos que en Linux podremos encontrar 3 diferentes tipos de
usuarios:
Root. Se trata del usuario con privilegios sobre absolutamente todo el sistema; capaz de
instalar, eliminar, configurar y mover todos los archivos a su entero antojo. Así como
modificaciones al kernel o instalación de software. Su UID siempre será 0.
Especiales. O cuentas de sistema, son los usuarios utilizados para ejecutar ciertas tareas o
servicios en nuestro SO; generalmente no poseen contraseña al tratarse de cuentas
nologin. Aunque no son root, toman este rol bajo ciertas circunstancias para realizar sus
actividades libremente, manteniendo así el sistema libre de vulnerabilidad o fallos de
seguridad. Generalmente tienen UID entre 1 y 100.
Normales. Se trata de usuarios individuales y personales para el acceso al sistema, con
una carpeta personal en /home, siendo ésta la única carpeta sobre la cual tendrán control
total. No representan riesgo a la seguridad, ya que al requerir tareas administrativas
siempre se puede utilizar su. Pueden pertenecer a un grupo principal y a muchos
secundarios. Su UID suele ser mayor a 500.
8.2 Usuarios
Existe una seria de comandos que a través de la línea de comandos nos permitirán realizar
la tarea de administración y gestión de cuentas de usuario, así como su modificación para
adaptarlas a nuestras necesidades.
Es, quizá, el comando más importante, ya que su objetivo es crear nuevos usuarios así como
su modificación de los diferentes parámetros generados por default.
De ésta manera siempre serán generadas las entradas necesarias en los archivos
/etc/passwd, /etc/shadow y /etc/group. Siendo siempre el nombre de usuario el último parámetro
pasado a nuestro comando. Así pues, si lo que buscamos es solamente crear un usuario,
podríamos utilizar y utilizar los parámetros por default:
# useradd prueba_user
Por ejemplo, para crear un usuario con un directorio HOME diferente al tomado por
default en nuestro sistema, sería:
8.2.2 Usermod
Por ejemplo, si quisierámos cambiar de UID a nuestro usuario existente llamado PRUEBA, bastaría
con hacer:
8.2.3 Userdel
Este comando es utilizado para eliminar cuentas de usuario del sistema. Su sinxtaxis:
8.2.4 Passwd
Se trata del comando utilizado para la asignación de claves de acceso a las cuentas creadas
por useradd. Useradd es solo el primer paso para lograr crear una cuenta y passwd el segundo. Si
éste no es asignado, la cuenta no puede ser utilizada.
vdebian:~> passwd
Cambiando la contraseña de pako.
(actual) contraseña de UNIX:
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:
passwd: contraseña actualizada correctamente
8.2.5 Chage
Este comando permite también modificar otras características de la cuenta: número máximo de
días antes de cambiar la contraseña, expiración de la cuenta, número mínimo de días ante cada
modificación, número de días que mostrará ALERTA para notificar la futura vigencia de password,
etc. Root puede obtener esta información para cada usuario existente en el sistema, y cada
usuario por default puede saber la información propia. Para conocer estos detalles basta con
argumentar la opción -l de la manera:
chage –l pako
Nos daría una salida:
A groso modo, nos detalla la fecha de último cambio de password, días de warning y cuando ésta
expirará. Para el ejemplo, ésta no expira. Si queremos que expire cada 30 días, haríamos:
# chage -M 30 pako
O asignar un numero de días mínimo, para que ésta no sea continuamente modificada:
# chage -m 5 pako
Numero de días para la alerta:
# chage -W 3 pako
O agregar una fecha de expiración para la cuenta en formato YYYY-MM-DD.
8.3 Grupos
8.3.1 Groupadd
# groupadd nuevo_grupo
Si se requiere crear un grupo de sistema:
# groupadd –r nuevo_grupo
Y si se quiere especificar el GID:
8.3.2 Groupdel
8.3.3 Groupmod
Existen una serie de archivos que nos permiten guardar los registros por cada una de las
cuentas de usuarios existentes, así como su configuración y asignación a grupos. Básicamente son
3 los archivos y se detallan a continuación.
8.4.1 /etc/passwd
El archivo contiene una línea por cada cuenta, y cada cuenta un total de 7 campos
separados por el carácter “:”. Por ejemplo:
pako:x:1000:1000:pako,,,:/home/pako:/usr/bin/tcsh
Este archivo puede ser leído por cualquier usuario pero solamente puede ser escrito por
root. Por los factores de seguridad que esto conlleva, se tiene como aliado el siguiente archivo.
8.4.2 /etc/shadow
pako:$6$J9.xF05N$nWzsgAaMjCIQQXsn4c/LHsXH6xrkGITYwjdh/15pHv10sxaHG5ytsjRSf0FHRM8obuyGscRe
M7CcnLiNuHDTg1:15957:1:30:3::16435:
Al igual que /etc/passwd, se tiene una línea por cada información referente a una cuenta y
sus 9 campos se detallan a continuación:
8.4.3 /etc/group
scanner:x:115:saned,pako
Igualmente que los archivos anteriores, se tiene una línea por cada cuenta de usuario,
teniendo un total de 4 campos cada uno.
9 PERMISOS
Aunque en gran medida, Linux posee excelentes características que lo hacen uno de los
sistemas operativos más seguros actualmente; pudiendo ser una vulnerabilidad el acceso
otorgado para el manejo de archivos y directorios. Muchos problemas pueden ser evitados con
una correcta asignación de permisos.
9.1 Generalidades
Cada fichero y archivo posee tres grupos en los cuales puede basar sus permisos:
De igual manera cada archivo posee tres tipos de permisos que lo afectan:
vdebian:~> ls -l
total 6038
drwxr-xr-x 2 pako pako 1024 jul 22 10:53 bash
drwxr-xr-x 2 pako pako 1024 ago 6 2012 Descargas
drwxr-xr-x 2 pako pako 1024 ago 6 2012 Documentos
drwx------ 5 pako pako 1024 sep 29 2012 Downloads
drwxr-xr-x 2 pako pako 1024 jul 30 12:14 Escritorio
drwxr-xr-x 11 pako pako 1024 oct 1 2012 httpd-2.4.3
r=4
w =2
x=1
De ésta manera se indica que el usuario o grupo posee todos los permisos sobre el archivo,
o un 7 (propietario puede leer, escribir y ejecutar). Y siguiendo con esta nomenclatura, nuestro
archivo tendría un permiso “751”.
De manera análoga existe otra forma para asignación de permisos de una manera más
entendible haciendo uso de los permisos simbólicos. Éstos permisos serán asignados con el
comando chmod que veremos más adelante y gracias a los identificadores de los grupos:
U, propietario.
G, grupo.
O, otros usuarios.
De igual manera los privilegios posibles para Lectura (r), Escritura (w) y Ejecución(x). Así
podremos asignar o quitar el permiso requerido sin necesitar de conocer el valor octal.
9.4 Comandos
9.4.1 Chmod
Este comando nos permitirá modificar los permisos de los archivos. Su uso es muy sencillo
siguiendo la sintaxis:
Los permisos pueden ser asignados tanto por modo simbólico o modo octal. El comando
solo puede ser utilizado el propietario del archivo o root.
Por ejemplo, para asignar todos los permisos (lectura, escritura y ejecución) a los 3 grupos
de usuarios, se haría:
$ chmod 777 miarchivo.txt
Para asignar todos los permisos al propietario, lectura y escritura al grupo y ninguno a otros
usuarios, se haría:
$ chmod 760 miarchivo.txt
Pero también funcionan los simbólicos en conjunto a operadores de suma para agregar y resta
para quitar. Así, para agregar permisos de lectura al grupo propietario, se haría:
$ chmod g+r miarchivo.txt
Dónde g corresponde al grupo que se asignará el permiso, en este caso “grupo propietario” y r
corresponde al permiso de lectura.
9.4.2 Chown
Este comando permite cambiar el usuario o grupo propietario asociado a un archivo. Su uso
normalmente se encuentra limitado a root, pero son los permisos necesarios puede ser utilizado
también por otros usuarios. La sintaxis:
9.4.3 Chgrp
Comando similar al anterior, con al salvedad de que está reservado para cambio únicamente
del grupo propietario. Su sintaxis:
De igual manera puede utilizarse R para la asignación recursiva con los archivos y directorios
hijos. Como ejemplo:
10 GESTIÓN DE PROCESOS
Los procesos suelen presentar estados, dependiendo de las tareas que en cierto momento
estén realizando. En la mayoría de las distribuciones los estados aceptados son:
Un proceso siempre inicia en estado R y termina una vez que su proceso padre llega a
estado zombie, Z.
10.1 Comando ps
ps [options]
Posee un sinfín de opciones que nos ayudan a localizar/visualizar los procesos de acuerdo a
nuestras necesidades. Dependiendo del sistema en que estemos trabajando, si es un UNIX-based o
BSD-based, éstas pueden combinarse.
El uso de la herramienta dependerá del objetivo que sea buscado; al combinar muchas
opciones, éstas no son siempre compatibles entre sí por lo que el resultado puede no ser el
esperado. Algunos de los usos más comúnes son:
$ ps –ef
$ ps –u www-data
$ ps –t pts/1
Todos los procesos en forma de árbol incluyendo únicamente columnas de Parent Process
ID, Process ID, UserID y el comando ejecutado:
$ ps -C apache2
Este comando nos permite conocer el estatus e información adicional en tiempo real de
todos los procesos en ejecución de nuestro sistema. Como tal, se trata de una herramienta muy
completa que a menudo será utilizada sin argumentos, aunque los tiene. Su sintaxis es:
top [-] [d delay] [p pid] [q] [c] [C] [S] [s] [i] [n iter] [b]
USER PR NI VIRT RES SHR S %CPU %MEM PID TIME+ UID COMMAND
pako 20 0 24128 2676 2268 S 0.0 0.5 1714 0:00.01 1000 /usr/bin/gnom
pako 20 0 25620 6700 5544 S 0.0 1.3 1733 0:00.18 1000 x-session-man
pako 20 0 7820 1884 1456 S 0.0 0.4 1780 0:00.00 1000 /usr/bin/VBox
pako 20 0 7860 1716 1220 S 0.0 0.3 1788 0:00.01 1000 /usr/bin/VBox
pako 20 0 7804 1260 876 S 0.0 0.2 1791 0:00.00 1000 /usr/bin/VBox
…
1. Muestra el tiempo que el servidor ha estado arriba, el número total de usuarios logueados y
promedios de carga de sistema de 1, 5 y 15 minutos.
2. Número total de procesos en el servidor, así como divididos por estatus de los mismos.
3. Provee detalles de uso de CPU, modo de usuario, modo de sistema y tareas niced, entre otra
información.
4. Muestra información detallada sobre consumos de memoria, memoria total disponible,
memoria utilizada, etc. Esta información puede ser oculta/mostrada presionando la letra m
en modo interactivo.
5. Despliega información sobre uso de SWAP, incluyendo disponible y utilizada.
Los procesos son mostrados en forma de tabla, con campos que pueden ser modificados y
ordenados para nuestra satisfacción. Este comportamiento es realizado a través de letras que
funcionan como órdenes a la herramienta, siendo las más comúnes:
El uso de señales es otro de los canales de comunicación que existen en los Sistemas
Operativos, en este caso se enfoca a cualquier notificación que puede ser envíada a un proceso
con la intención de modificar su flujo normal. Las existen de muchos tipos, siendo más comunes
las que llevan por naturaleza detención, terminación y recuperación de procesos o hilos
dependientes de procesos padre. Ésta notificación es asíncrona, es decir, el proceso la recibe pero
no la puede enviar o responder.
Éstas podrían variar entre cada arquitectura, pero tienen a ser generalizadas entre sistemas
Unix, salvo pequeñas diferencias. Para verificar el listado de las disponibles en nuestro sistema,
haremos:
$ kill –l
vdebian:~> kill –l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-12
53) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Es normal que las señales sean enviadas desde el kernel hacia los procesos, pero también es
probable que en ciertas circunstancias tengamos que hacerlo de manera manual a través de la
terminal; para ello nos apoyaremos en el comando kill. Es factible que lo asociemos con la
detención de procesos pero como vimos en el punto anterior, también es factible enviar otro tipo
de avisos a nuestros procesos.
Por default y sin parámetros, el comando kill enviará la señal SIGTERM. Pero también
podemos hacer uso de las mencionadas a través de la sintaxis:
Para realizar esta tarea es necesario conocer el PID sobre el cuál queremos actuar, nos
podemos apoyar de los comandos top o ps, vistos anteriormente. La señal argumentada al
comando puede ser indicada por su valor numeral o por el nombre de la misma.
Y reiniciarlo:
Además de enviar las señales con el comando kill, existe una manera más elegante de
trabajar con los procesos. De ésta manera podremos detenerlos, ejecutar en primer o segundo
plano según nuestras necesidades.
Cada vez que ejecutamos un proceso desde la terminal, podemos hacerlo en primer o
segundo plano. En primer plano, no tendremos el control ni podremos ejecutar otro comando si
éste no ha terminado o abramos otra terminal. Si la ejecución demora más de lo previsto, podría
ser una tarea pesada. Aunque existen alternativas para ejecutar los comandos en segundo plano,
es verdad que pocas veces se realiza.
La ejecución de un comando que fue lanzado en primer plano puede detenerse con la
secuencia Ctrl^z, lo cuál lanzará la señal de STOP y detendrá el proceso. Por ejemplo:
El primer comando realiza una pausa de 1000 segundos, misma que nos permite
ejemplificar el uso de éstos comandos. Al suspender el proceso como se mencionó, toma
importancia la herramienta jobs, la cuál almacenará los procesos que hayan sido detenidos de ésta
manera.
Para permitir que el comando continúe en ejecución haremos uso del comando nohup y su
sintaxis:
COMMAND será nuestro comando a ejecutar con toda la serie de argumentos requeridos,
tal como si lo estuviésemos realizando de manera normal.
Éste comando lo que realiza es ignorar la señal de HUP envíada a todos los procesos hijos al
cerrar nuestra terminal, es decir, aunque nuestra sesión termine, el comando continuará en
ejecución para nuestro beneficio.
11 TAREAS PROGRAMADAS
De manera normal, cron es un servicio que se debe inicializar en conjunto con el sistema. Es
un servicio que generalmente se encontrará activo en cada sistema por ser una parte inherente de
los servicios ofrecidos.
# /etc/init.d/cron status
11.2 Crontab
Este comando (también archivo) nos permitirá configurar las tareas de una manera sencilla.
Existe un archivo por cada usuario que ejecute crontab. La existencia física de estos archivos se
encuentra en la ruta /var/spool/cron/crontabs y puede ser editado únicamente por el usuario
dueño del mismo. No es la mejor práctica el editar directamente el archivo, para ello existe la
herramienta crontab con diferentes opciones para su uso:
$ crontab –l
$ crontab –e
$ crontab –d
Editar el archivo crontab de un usuario en particular. Solo root puede realizar esta actividad:
$ crontab –u usuario
Todos son obligatorios. El asterisco indica todos los valores. Los parámetros pueden
contener datos concretos enteros o, diferentes valores separados por carácter “coma”. El
comando a ejecutar es la ruta completa y archivo o script a ejecutar con toda la serie de
argumentos y posibles redireccionamientos de salida. Algunos ejemplos:
Obtener el listado de usuarios logueados al sistema con comando who y enviar la salida al
archivo who del usuario que ejecute la orden, todos los lunes cada 30 minutos.
30 21 * * 6 /sbin/shutdown -h now
12 DIRECTORIOS IMPORTANTES
Aunque todos los directorios son importantes, existen 6 que se destacan por su complejidad
e importancia en el funcionamiento correcto del sistema, al igual de permitirnos localizar
funcionamientos y configuraciones de nuestro equipo.
Este directorio contiene los archivos especiales para acceso a dispositivos de hardware. Los
nombramientos se hacen a través de convenciones especiales. Estos archivos son creados durante
la instalación del sistema o a través del comando MAKEDEV.
Estos archivos son utilizados para la comunicación entre el kernel y los distintos dispositivos.
A simple vista parecieran tratarse de archivos normales, y lo son, salvo que tienen algunas
características que los distinguen de los normales.
Los dispositivos son todo tipo de periféricos, discos duros, controladores USB, unidades de
cinta, memoria, etc. Así como puertos seriales, paralelos y módems. Todo en Linux son archivos, y
ésta es la manera de comunicarnos con los dispositivos: un dispositivo es enlazado a un archivo y
en este directorio son localizados. Los más comunes son:
12.2 /etc
Este es un directorio que está destinado a archivos de configuración, ya sean utilizados por
comandos o leídos cuando el sistema es iniciado. No suelen ser almacenados archivos binarios o
ejecutables en este directorio.
Suele ser un directorio con un sinfín de archivos, por lo que nos enfocaremos en los más
importantes:
12.3 /proc
Es quizá el directorio más complejo de toda la jerarquía de directorios Unix. Como ya vimos,
todo en Linux son archivos; quizá no como los conozcamos pues éstos en particular son llamados
archivos virtuales los cuáles físicamente no existen, pero son creados por el SO si intentamos
leerlos. No son archivos ni binarios ni de texto sin embargo, podemos desplegar su contenido.
Cada proceso en ejecución crea su propio directorio que contendrá información referente a
éste, el dueño será el proceso que ejecutó la orden. Suelen tener un tamaño ocupado de 0 kb, lo
cuál indica que no existe, pero podrías leerlo. De igual manera se maneja un timestamp igual al
actual lo que indica que continuamente estén siendo modificados los archivos de este directorio.
De igual manera existen archivos virtuales referentes al hardware como son /proc/cpuinfo y
/proc/interrupts, de ésta manera podremos saber los recursos con los que nuestro CPU cuenta.
Para revisar los parámetros de nuestro kernel tendríamos que echarle un vistazo a los
archivos situados bajo /proc/sys.
$ cat /proc/meminfo
MemTotal: 8161944 kB
MemFree: 560412 kB
Buffers: 490896 kB
Cached: 3469276 kB
SwapCached: 148 kB
Active: 2903712 kB
Inactive: 3378588 kB
Y quizá reconozcamos algunos de los valores, pues son los presentados por comandos como
top o free.
Dentro de cada carpeta podemos localizar diferentes archivos, siendo los más importantes:
12.4 /var
Este directorio suele ser utilizado para guardar información relativa al sistema cuando éste
se encuentra en ejecución; incluye logs, correo, spool de impresión, log de accesos, etc. Este
directorio tiende a crecer en demasía ya que también almacena archivos temporales grandes.
Actúa como un registro del sistema y permite encontrar orígenes de algún problema.
Este directorio suele dividirse en otros directorios que almacenan dicha información de
acuerdo a su naturaleza, los más importantes son:
12.5 /usr
Es uno de los directorios más extensos del sistema, contiene información sobre binarios,
documentación, librerías, etc. Que a su vez puede ser compartida entre diferentes equipos de la
red. Aunque contiene los ejecutables de la mayoría de nuestras herramientas, debe ser montada
como modo solo lectura y guardar la integridad de nuestros archivos.
13 RESPALDOS
En Linux, como en otros sistemas operativos, existen tareas que son rutinarias de manera
benéfica en bienestar del administrador. Una de ellas es la generación de respaldos; de ésta
manera aseguramos, en cierta medida, recuperación de información su algo llegara a suceder.
A nuestra disposición tenemos muchas herramientas que nos permiten realizar estas
actividades de manera muy avanzada, con características multiplataforma o cruzadas. Sin
embargo, nuestro alcance se limita a estas actividades realizadas en archivos empaquetados o
comprimidos con los que, de fábrica, cuenta nuestro sistema.
13.1.1 Tar
13.1.2 Tar.gz
13.1.3 Gzip
13.1.4 Bz2
Por conveniencia, se suele utilizar con un empaquetador como tar para empaquetar
directorios y comprimirlos.
13.1.6 Zip
13.1.7 Rar
14 SCRIPTING
Nuestro intérprete de comandos nos permitirá realizar tareas de manera automatizada con
algunos de los comandos ya aprendidos. Estas tareas pueden ser agrupadas tendrán un propósito
general al interactuar con información y automatizar actividades rutinarias en un servidor.
14.1 Funcionamiento
#!/bin/bash
Como buena costumbre, debemos colocarlo siempre al inicio de cada script. Otro requisito
será asignar los permisos necesarios de ejecución a nuestro archivo, lo cuál conseguiremos con el
comando chmod y brindando permisos de ejecución para todos los usuarios a.
Hecho todo esto, podremos ejecutar nuestro script como si de una aplicación se tratase:
$ ./mi_script.sh ARGUMENTOS
O bien
$ sh ./mi_script.sh ARGUMENTOS.
14.2 Variables
Éstas no poseen un tipo de dato definido y pueden contener la información que creamos
conveniente como creadores del script. Pueden cambiar de información almacenada con facilidad
y no es necesario declararlas previamente, ésta acción es realizada al asignar un valor.
Los nombres de las variables pueden contener solamente caracteres numéricos y caracteres
de a-z, A-Z y guión bajo, siempre comenzando por una letra. Por convención, se utilizarán solo
mayúsculas.
VARIABLE=VALOR
Importante es de mencionar que no debe existir ningún espacio en blanco entre la variable,
operador y valor, ya que de otra manera arrojará error de sintaxis.
MI_VAR=123
VAR1=1
VAR2=2
let VAR3=$VAR1+$VAR2
# VAR3 ahora vale 3
14.2.3 Lectura
Para permitir una interacción con el usuario a través del teclado, se utilizará el comando
read que asignará a la variable, el valor de la cadena ingresada. Su uso es muy sencillo:
#!/bin/bash
read X
Una vez declarada, la variable se podrá acceder a ella a lo largo del script utilizando el
operador $ junto al nombre de la variable. Así pues, para acceder al valor lo haremos de ésta
manera independientemente si queremos mostrarlo en pantalla o utilizarlo para asignación a otra
variable u operación con él. Para lograr su impresión en pantalla se puede hacer uso del comando
echo. Uniendo los ejemplos anteriores:
VAR1=1
VAR2=2
let VAR3=$VAR1+$VAR2
echo $VAR3
#3
VAR3=$VAR1+$VAR2
echo $VAR3
# 1+2
14.3 Comentarios
Es posible, en scripts muy extensos, que necesitemos agregar comentarios que permitan
hacer una lectura de una manera más sencilla así como un entendimiento para futuras
modificaciones. Cualquier línea que comience con el carácter # será considerada un comentario y
no será considerada por nuestro intérprete.
14.4 Argumentos
Bajo ciertas circunstancias necesitaremos que nuestros scripts acepten argumentos que son
enviados a nuestro script a través de nuestra línea de comandos. Esto toda de un mayor grado de
interactividad y funcionamiento. Hasta ahora hemos visto que los argumentos son utilizados casi
en todos los comandos y los scripts no son la excepción.
Y así tantos sean necesarios. Lo único que puede variar es el llamado a nuestro script, puede
realizarse a través de la ruta absoluta o con ./ si el script se encuentra ya en la carpeta donde nos
encontramos ubicados.
#!/bin/bash
echo "Primer parámetro: " ${1}
echo "Segundo parametro: " ${2}
Y su llamada con:
Adicionalmente a las variables que toman los valores consecutivos de nuestra llamada al
script, existen otras variables que nos apoyan con este control:
14.5 Operadores
Al igual que en cualquier otro lenguaje de programación, existen operadores que permiten
asignación, comparación y otro tipo de funcionalidades con nuestras variables y valores.
Utilizados para comparaciones en valor ASCII del o los caracteres pertenecientes a una
cadena.
[ s1 = s2 , s1 == s2 ] Igualdad
[ s1 != s2 ] Desigualdad
[[s1 < s2]], [s1 \< s2] Comparación ASCII, menor que.
[[s1 > s2]], [s1 \> s2] Comparación ASCII, mayor que.
-z s1 Cadena nula; 0 caracteres.
-eq Igualdad
-ne No igual a
-gt Mayor que
-ge Mayor o igual que
-lt Menor que
-le Menor o igual que
14.5.3 De archivos
14.5.4 Aritméticos
+ Suma
- Resta
* Multiplicación
/ División
% Módulo
** Potenciación
Utilizados para la evaluación de condiciones lógicas, falso o verdadero. Útiles para ejecución
de comandos.
14.5.6 Booleanos
<< Desplazamiento de 1 bit a la izquierda.
>> Desplazamiento de 1 bit a la derecha.
<<= Desplazamiento de 2 bits a la izquierda.
>>= Desplazamiento de 2 bits hacia la derecha
& Operación AND
| Operación OR
^ Operación XOR
! Negación, NOT.
14.5.7 Comillas
Existen tres tipos de comillas que podremos utilizar en nuestro bash: comillas dobles (“),
comillas simples (‘) y comillas invertidas.
Permite tomar la frase como un todo de manera literal, a excepción de los otros tipos de
comillas.
echo “$HOME”
# Imprime /home/pako
#!/bin/bash
VAR=`ls`
echo $VAR
Y, finalmente, las comillas simples (’) permiten tomar la frase de manera literal. Por
ejemplo:
#!/bin/bash
VAR=’$HOME’
cho $VAR
# Imprime $HOME
14.6 Condiciones
Todos los operadores anteriores tienen su funcionalidad haciendo uso de estructuras que
realicen las comparaciones de los mismos y que, dependiendo de los resultados, sean ejecutadas
unas u otras instrucciones.
14.6.1 If-Else
El principal será la estructura If-Else, que nos permitirá anidar una o más condiciones en
forma de árbol y ejecución de instrucciones. El funcionamiento es similar a otros lenguajes de
programación. Se debe seguir la siguiente sintaxis:
#!/bin/bash
read X
read Y
if [ $X -ge $Y ]; then
echo "$X es mayor o igual que $Y"
A través de la condición If permitirá decidir cuál de los valores ingresados por teclado es
mayor.
14.6.2 Case-Esac
Es una estructura que permitirá realizar acciones considerando el valor de una variable,
permitiendo realizar un if con diferentes posibles valores. No se limita a 1. Su sintaxis es:
case expresion in
caso_1 )
comandos;;
caso_2 )
comandos;;
*)
...
esac
No son realizadas iteraciones, una vez que el bloque de comandos ha concluido, el flujo del
script continúa saliendo de la estructura.
El operador (*) es considerado una vez que no se haya localizado ninguna coincidencia.
Veámoslo en un ejemplo.
#!/bin/bash
echo "Quieres continuar?"
read resp
case $resp in
si) echo "Continuamos"
;;
no) echo "Nos detenemos"
;;
*) echo "Respuesta no valida"
;;
esac
Este ejercicio ejemplifica la lectura de una variable que, dependiendo del valor ingresado
por teclado, imprimiría un mensaje en pantalla.
for VARIABLE in 1 2 3 4 5 .. N
do
command1
command2
commandN
done
Dentro de la lista, suele ejecutarse un comando que arroje n resultados que servirán de
rango para la variable de control VARIABLE. Mientras el valor de variable se encuentre en el rango,
la ejecución continuará.
#!/bin/bash
for n in `ls`
do
stat $n
done
Con el ejemplo anterior se realiza una repetición del comando stat por cada archivo
existente en la carpeta donde el script sea ejecutado.
14.7.2 While
while condicion
do
comandos
done
#!/bin/sh
INPUT_STRING=hola
while [ "$INPUT_STRING" != "bye" ]
do
Este ejemplo nos permitirá ingresar de manera indefinida un mensaje, mismo que
posteriormente será mostrado. El ciclo termina cuando se ingrese la palabra “bye”.
http://www.reducativa.com/vermaterial.php?id=9
http://www.somoslibres.org/modules.php?name=News&file=article&sid=4284
http://es.wikipedia.org/wiki/Anexo:Sistemas_de_archivos_de_disco
http://www.tuxfiles.org/linuxhelp/linuxdir.html
http://www.linux-es.org/node/112
http://es.kioskea.net/contents/316-linux-shell
http://es.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/var.html
http://www.tldp.org/pub/Linux/docs/ldp-archived/system-admin-
guide/translations/es/html/ch04s06.html
http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html
http://www.linuxtotal.com.mx/index.php?cont=info_admon_004
http://linuxzone.es/metodos-de-compresion-y-descompresion-en-linux/