Está en la página 1de 75

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

2 INSTALACIÓN SOBRE VIRTUALBOX 8

3 ESTRUCTURA DE DIRECTORIOS 10

4 INTERPRETE DE COMANDOS 11

5 COMANDOS BÁSICOS 12

5.1 Directorios y archivos 13


5.1.1 Cd 13
5.1.2 Ls 13
5.1.3 Mkdir 14
5.1.4 Mv 14
5.1.5 Cp 15
5.1.6 Rm 15
5.1.7 Pwd 16
5.1.8 Find 16
5.1.9 Ln 17
5.1.10 File 18
5.1.11 Stat 18

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

Francisco J Alcaraz – Linux (Fundamentos) 1


6 REDIRECCIONAMIENTO 27

6.1 Entrada (stdin) 27

6.2 Salida (stdout) 28

6.3 Error (stderr) 28

6.4 Pipes(tuberías) 29

7 PARTICIONES 29

7.1 Tipos de particiones 29

7.2 Sistemas de archivos 30


7.2.1 Tipos 30

7.3 Puntos de montaje 31

7.4 Comandos auxiliares 32


7.4.1 Herramienta fdisk 32
7.4.2 Comando mount 34
7.4.3 umount 36

7.5 Archivo fstab 36

8 ADMINISTRACIÓN DE GRUPOS Y USUARIOS 38

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

8.4 Archivos de configuración 43


8.4.1 /etc/passwd 43
8.4.2 /etc/shadow 44
8.4.3 /etc/group 44

9 PERMISOS 45

9.1 Generalidades 45

9.2 Permisos por bits 46

9.3 Permisos simbólicos 46

9.4 Comandos 47

Francisco J Alcaraz – Linux (Fundamentos) 2


9.4.1 Chmod 47
9.4.2 Chown 47
9.4.3 Chgrp 48

10 GESTIÓN DE PROCESOS 48

10.1 Comando ps 49

10.2 Comando top 50

10.3 Señales 52

De todo el listado, las más comunes serán: 52

10.4 Comando kill 53

10.5 Comandos Jobs, bg y fg 54

10.6 Comandos nohup y &. 55

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

13.1 Formatos más comunes 62


13.1.1 Tar 62
13.1.2 Tar.gz 62
13.1.3 Gzip 62
13.1.4 Bz2 62
13.1.5 Tar.bz2 63
13.1.6 Zip 63
13.1.7 Rar 63

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

Francisco J Alcaraz – Linux (Fundamentos) 3


14.2.3 Lectura 65
14.2.4 Acceso 66

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

Francisco J Alcaraz – Linux (Fundamentos) 4


INTRODUCCIÓN

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.

Sistema tipo UNIX desarrollado para computadoras personales (PC), servidores y


estaciones de trabajo. Basado en licencia GNU General Public License, haciéndolo de libre
distribución sin tener que pagar una licencia por su uso y su código fuente siempre disponible para
su modificación, uso y distribución.

Se compone de un kernel (núcleo) y programas (bibliotecas) que hacen posible su


utilización dispuestos en su gran mayoría gracias al proyecto GNU. Una de las ventajas siempre
presentes en este sistema operativo, independiente de la distribución, es el respaldo que existe
por una gran comunidad de desarrolladores alrededor del mundo quienes hacen posible su mejora
continua y nuevas implementaciones, manteniendo la vanguardia un sistema que cumple las más
grandes expectativas.

El sistema es de libre distribución y libre modificación gracias al tipo de licencia; cualquier


persona o entidad puede realizar ajustes al código libre y licenciarlo de la misma manera, siempre
y cuando se cite al autor original y se mantenga la licencia original, así la comunidad se mantiene
pendiente y al tanto de las mejoras importantes realizadas alrededor del mundo. De la misma
manera, puede sufrir ajustes para adecuarlo a un objetivo en un momento dado que permita
aumentar su desempeño tras una implementación.

El sistema es multitarea, multiusuario, multiplataforma y multiprocesador. De igual


manera, el sistema permite la instalación de librerías adicionales que son compiladas en tiempo de
instalación lo cual permite adecuar las características de cada una a los recursos del equipo donde
son instaladas, de esta manera se obtiene un mayor rendimiento aun en equipos antiguos.

Francisco J Alcaraz – Linux (Fundamentos) 5


1 QUE ES LINUX?

Linux es un sistema operativo multitarea, multiusuario, multiplataforma y multiprocesador


basado en licencia GNU General Public License; complementado principalmente de un núcleo
(kernel) y una serie de librerías que hacen posible su utilización. De libre modificación y
distribución sin tener que pagar, muchas de las veces, un uso de licencia correspondiente.

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

Francisco J Alcaraz – Linux (Fundamentos) 6


mayoritariamente, de software libre, aunque a menudo incorporan aplicaciones o controladores
propietarios”.

De ésta manera podemos encontrar un paquete adecuado siempre a nuestros intereses,


con un mayor número de ventajas sobre otros dentro de un mundo de opciones disponibles.
Existen distintos tipos de clasificaciones y de acuerdo a éstas, pueden ser:

 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.

Otra característica de un SO Linux es que resulta altamente configurable y personalizable,


desde los paquetes a instalar hasta su apariencia y configuración, adecuándose en todo momento
a lo que el usuario requiera. En un inicio puede parecer complicado pero con el paso del tiempo

Francisco J Alcaraz – Linux (Fundamentos) 7


esto pasa a segundo término, poniendo en primer plano un mejoramiento de performance en
todo momento.

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.

Finalmente, el uso de dependencia de paquetes, es otra de las grandes ventajas. Como se


verá en este documento, el poder instalar toda una suite con un comando incluidas dependencias
y librerías, no es una ventaja propia de todos los sistemas operativos existentes. De Linux lo es.

2 INSTALACIÓN SOBRE VIRTUALBOX

Es importante que se pueda practicar en lo mayor posible cada conocimiento adquirido en


este manual. No es necesario modificar el sistema de archivos para poder instalarlo en nuestro
equipo y que, en este caso, crearemos nos apoyaremos en VirtualBox para realizar una instalación
de una distribución. Por el tiempo necesario de inversión no será considerado como parte del
curso sino que se proveerá un disco duro virtual con la intención de ahorrar tiempo y poder
continuar con mayor fluidez.

La distribución Debian ya se encuentra instalada y se provee con este manual. Es necesario


contar con una instalación de Oracle VM VirtualBox normal e importar el archivo .ova que también
fué provisto. Los parámetros de VM VirtualBox deben ser los instalados de fábrica.

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

Francisco J Alcaraz – Linux (Fundamentos) 8


nuestra VM, los ajustes ya se encuentran optimizados para nuestro propósito dentro del mismo
archivo.

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:

Francisco J Alcaraz – Linux (Fundamentos) 9


Y presionamos el botón “Start”.

Al inicio se encuentra GRUB, bastará con no presionar ninguna tecla y después de 5


segundos el sistema comenzará su carga normal. Si llegamos a presionar alguna tecla, es necesario
seleccionar la primera opción de nuestro menú que indica nuestro nombre de SO sin el texto final,
Recovery Mode.

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:

Francisco J Alcaraz – Linux (Fundamentos) 10


Directorio Uso
/ Sistema raíz, donde comienza todo el sistema de archivos. Todo sistema Linux se
encuentra a partir de este punto de montaje y, usualmente, solo contendrá otros
directorios y nada recomendable guardar archivos a partir de este punto.
/boot Aquí se guarda toda la información que Linux necesita para poder arrancar.
/etc Principalmente para guardar archivos de configuración sobre el sistema. Los archivos
pueden ser modificados manualmente.
/bin, Relativo a binario, en estos directorios se almacenan la mayoría de archivos
/usr/bin ejecutables y programas. En el primero siempre se guardarán los comandos propios
del sistema y en el segundo, las aplicaciones propias de los usuarios. Aunque en
realidad no existe distinción, y se pueden guardar en cualquiera de los dos sin
ninguna afectación.
/sbin, Aquí serán guardadas la mayoría de aplicaciones de administración de Linux,
/usr/sbin generalmente utilizadas por el usuario root.
/usr Suele ser el directorio más extenso de todo el sistema, guarda aplicaciones, archivos
y archivos de configuración utilizados por los usuarios. Es recomendable montar este
directorio en un punto de montaje separado por su amplio crecimiento.
/usr/local Jerarquia terciaria para datos compartidos de solo lectura específicos del ordenador
que los comparte.
/lib Sistema de librerías esenciales para ejecución de paquetes de /bin, /sbin y núcleo o
kernel.
/home Directorio donde serán guardados todos los archivos de los usuarios del sistema.
Aunque es opcional, es recomendable que todos los usuarios posean su propia
carpeta en este directorio y que, configurado adecuadamente, puede ser exclusivo
de cada usuario permitiendo la privacidad entre los archivos almacenados.
/root Normalmente, directorio de inicio del usuario root.
/var Directorio que almacenará la información mientras el sistema se encuentra en
ejecución: logs, bases de datos, colas de correos, ficheros temporales, etc.
/tmp Los programas pueden escribir en este directorio para almacenaje temporal.
/dev Sistema de dispositivos disponibles: discos duros, terminales, tarjetas de sonido,
lectores de CD-ROM, etc.
/mnt Directorio para montaje de dispositivos temporales.
/media Directorio para montaje de dispositivos permanentes como unidades lectoras
/proc Directorio virtual que almacena información esencial sobre el propio núcleo y
archivos de textos organizados con información sobre todos los procesos que en el
momento se encuentren en ejecución

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

Francisco J Alcaraz – Linux (Fundamentos) 11


El intérprete de comandos es el programa que nos permitirá la ejecución de instrucciones y
llamados a aplicaciones y/o herramientas realizadas por el usuario directamente al núcleo del SO.
Estas instrucciones son reconocidas como órdenes respetando una sintaxis establecida por dicho
intérprete. De ahora en adelante puede ser llamada consola o Shell.

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.

El indicador de comandos corresponde a la línea o prompt que precederá nuestra


ejecución del comando, como ejemplo:

equipo:/directorio/actual$

“equipo” corresponde al nombre del equipo, “/directorio/actual” alusivo a la carpeta


donde se encuentra el usuario y finalmente “$” que corresponde a un usuario normal. Cuando se
tiene “#” se indica que el usuario actual corresponde a root.

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

Francisco J Alcaraz – Linux (Fundamentos) 12


Todo en la consola serán comandos. Existen infinidad de ellos con objetivos muy específicos
para ayudarnos a las tareas más comunes. Éstos los podemos categorizar en herramientas,
comandos para administración, comandos sobre archivos y carpetas, comandos de propósito
específico, etc. A continuación se listan los comandos más básicos en un sistema Linux.

5.1 Directorios y archivos

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]

Opciones más utilizadas:

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]...

Opciones más utilizadas:

-l Formato de información detallada


-t Ordena la salida por fecha de modificación
-r Cambia el orden de la salida de manera reversible
-1 Muestra la salida en una sola columna
-m Información de archivos separada por ‘commas’

Francisco J Alcaraz – Linux (Fundamentos) 13


Ejemplo:

$ 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

Comando para la creación de la carpeta DIRECTORY si éste no existe. Si no se especifica, lo


creará en el actual directorio de trabajo.

Sintaxis:

mkdir [OPTION] DIRECTORY...

Opciones más utilizadas:

Ejemplo:

$ mkdir nueva_carpeta
Creará la carpeta nueva_carpeta.

5.1.4 Mv

Mover (o renombrar) archivos y carpetas. Mover SOURCE a DEST. Si el archivo final es en el


mismo directorio, lo renombrará. O moverá SOURCE hacia DIRECTORY.

Sintaxis:

mv [OPTION]... [-T] SOURCE DEST


mv [OPTION]... SOURCE... DIRECTORY

Opciones más utilizadas:

-f Forzar y no preguntar antes de sobreescribir.


-i Pregunta antes de escribir
-u Actualiza si el SOURCE es más nuevo que el destino. Si el archivo final
no existe, lo mueve.

Francisco J Alcaraz – Linux (Fundamentos) 14


Ejemplo:

$ 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.

cp [OPTION]... SOURCE... DIRECTORY

Opciones más utilizadas:

-u Copia archivos únicamente si la fuente es más nueva o si el archivo


destino no existe.
-v Detalla las acciones que se están realizando.
-r, -R Copia directorios y su contenido de manera recursiva a partir del
directorio especificado.
-f Fuerza a abrir el archivo y eliminarlo.
-i Modo interactivo. Pregunta antes de sobreescribir algún archivo con
nombre existente.

Ejemplo:

$ cp –r archivos /tmp
Copiará el directorio archivos hacia la carpeta /tmp.

5.1.6 Rm

Borra archivos o directorios especificados. Por default no son eliminados directorios a


menos que se especifique.

Sintaxis:

rm [OPTION]... FILE...

Opciones más utilizadas:

Francisco J Alcaraz – Linux (Fundamentos) 15


-f Forzar y no preguntar por archivos inexistentes o confirmación.
-i Pregunta antes de eliminar.
-r, -R Elimina directorios y su contenido de manera recursiva a partir del
directorio especificado.

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

Imprime el directorio actual de trabajo.

Sintaxis:

pwd [OPTION]...

Opciones más utilizadas:

Ejemplo:

$ pwd

5.1.8 Find

Permite la búsqueda de archivos en un árbol de directorios especificado a través de una


expresión que es leída de izquierda a derecha.

Dentro de las expresiones pueden ser utilizados los operadores:

+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

Francisco J Alcaraz – Linux (Fundamentos) 16


Sintaxis:

find [-H] [-L] [-P] [path...] [expression]

Opciones más utilizadas:

-depth Procesa el contenido del directorio antes que el directorio mismo.


-amin n Archivo accesado hace menos de n minutos
-atime n Archivo accesado por última vez hace menos de n*24 horas.
-ctime n El estatus del archivo fue cambiado hace menos de n minutos.
-empty Es un archivo vacío y corresponde a un archivo regular o directorio.
-group name El archivo pertenece al grupo name
-links n El archivo tiene n links
-mmin n La información del archivo ha sido modificada en los últimos n minutos.
-mtime n La información del archivo ha sido modificada durante las ultimas n*24
horas.
-name Buscará el archivo con nombre establecido por pattern. Están
pattern permitidos los metacaracteres “*”, “?” y [].
-size El archivo utiliza n unidades de espacio. Las más comunes son ‘k’ para
kilobytes, ‘M’ para Megabytes y ‘G’ para Gigabytes.
-type c Los archivos son de tipo C. Los más comunes son ‘d’ para directorios , ‘f’
para un archivo regular y ‘l’ para un enlace simbólico.

Ejemplo:

$ find . –name “*.bin”


Buscará todos los archivos desde el directorio actual con extensión .bin

$ find ~/movies –name “*.avi” –a –size +700M


Buscará todos los archivos .avi en el directorio movies del home del usuario ejecutor con un peso
mayor a los 700 megabytes.

$ find /home/ -name '*.avi' -a -size +700M -mtime -15


Mismo que el anterior pero añadiendo la modificación en los últimos 15 dias.

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.

Francisco J Alcaraz – Linux (Fundamentos) 17


Sintaxis:

ln [OPTION]... TARGET... DIRECTORY

Opciones más utilizadas:

-s Crea enlace simbólico SOFT, en el cuál al eliminar el enlace no sucede


nada con el directorio origen.
-d Crea enlace DURO, en el cuál, al eliminar el último enlace de este tipo
hacia un directorio particular, el directorio fuente también se eliminará.
-i Solicita confirmación al eliminar enlaces destino.

Ejemplo:

$ln –s /bin/usr ~/usuario


Creará un enlace SOFT llamado usuario apuntado a /bin/usr

5.1.10 File

Determina el tipo de archivo.

Sintaxis:

file [ -bcikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ]

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

Francisco J Alcaraz – Linux (Fundamentos) 18


Muestra estatus de un archivo; así como espacio ocupado, última modificación, permisos,
inodos, etc. Se puede utilizar el formato en sus expresiones más comunes.

%A Permisos de acceso en formato humano.


%F Tipo de archivo
%G Nombre de grupo propietario.
%s Bytes utilizados por el archivo.
%U Nombre del usuario propietario
%x Tiempo transcurrido desde el último acceso.
%y Tiempo transcurrido desde la última modificación.

Sintaxis:

stat [OPTION] FILE...

Opciones más utilizadas:

-c, --format Utiliza el formato indicado, por default formato.

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

Despliega información sobre memoria usada y libre dentro del sistema.

Sintaxis:

free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay ] [-c count ]

Opciones más utilizadas:

-k, --kb Despliega información en kilobytes.


-m, --mb Despliega información en megabytes.

Francisco J Alcaraz – Linux (Fundamentos) 19


-g, --gb Despliega información en gigabytes.
-s, -- Repite la salida del comando con lapsos intermedios de n segundos.
repeat=n

Ejemplo:

$ free –m
Muestra la información de la memoria actual en megabytes.

5.2.2 Du

Imprime la salida del espacio estimado utilizado por un archivo.

Sintaxis:

du [OPTION]... [FILE]...

Opciones más utilizadas:

-c Se obtiene el gran total.


-h Salida en modo “humanizado”.
-s Suma los totales por directorio argumentado.

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

Despliega el total de espacio disponible del filesystem recibido por parámetro. Si no se


establece ninguno, la información a mostrar será de toda la tabla de particiones.

Sintaxis:

df [OPTION]... [FILE]...

Opciones más utilizadas:

-i Información sobre inodos por bloques utilizados.

Francisco J Alcaraz – Linux (Fundamentos) 20


-l Lista información limitándose a montajes locales.
-h Lista información de lectura humanizada: Kb, Mb o Gb.
-T Lista tipo de sistema de archivos utilizado.

Ejemplo:

$ df –h
Muestra información humanizada para todos los montajes del sistema.

5.3 Otros

5.3.1 More

Muestra en pantalla el archivo especificado. Solamente permite desplazamientos hacia


adelante.

Sintaxis:

more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]

Opciones más utilizadas:

-c Limpia pantalla antes de desplegar.


-n Numero inicial de líneas a mostrar. Posteriormente se desplaza línea a
línea.

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.

Francisco J Alcaraz – Linux (Fundamentos) 21


Sintaxis:

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]...

Opciones más utilizadas:

/pattern Realiza la búsqueda de pattern hacia delante de la posición del cursor


en el archivo.
?pattern Realiza la búsqueda de pattern hacia delante de la posición del cursor
en el archivo.
n Repite el último patrón de búsqueda hacia delante.
N Repite el último patrón de búsqueda hacia atrás.
:NUM Es posicionado el cursor en la línea NUM del archivo.

Ejemplo:

$ less 2013_07_07.log
Examina el archivo 2013_07_07.log

5.3.3 Tail

Comando que nos permite mostrar el final de un archivo.

Sintaxis:

tail [OPTION]... [FILE]...

Opciones más utilizadas:

-c, --bytes= Muestra los últimos N bytes del archivo


N
-n, --lines=N Muestra las últimas N líneas del archivo

Ejemplo:

$ tail –n4 ~/apache/access.log


Revisar las últimas 4 líneas del archivo de log de Apache.

Francisco J Alcaraz – Linux (Fundamentos) 22


5.3.4 Head

Arroja las primeras líneas de un archivo. Por default, las primeras 10.

Sintaxis:

head [OPTION]... [FILE]...

Opciones más utilizadas:

-c, --bytes= Muestra los primeros N bytes del archivo


N
-n, --lines=N Muestra las primeras N líneas del archivo

Ejemplo:

$ head –n10 ~/apache/access.log


Revisar las primeras 10 líneas del archivo de log de Apache.

5.3.5 Wc

Imprime el número de líneas, bytes, caracteres o palabras de un archivo.

Sintaxis:

wc [OPTION]... [FILE]...

Opciones más utilizadas:

-c, --bytes Total de bytes.


-l, --lines Total de líneas.
-m, --chars Total de caracteres.
-w, --words Total de palabras

Ejemplo:

$ wc –l fichero.txt
50 fichero.txt
Muestra el número de líneas contenidas en el archivo fichero.txt

Francisco J Alcaraz – Linux (Fundamentos) 23


5.3.6 Date

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:

Opciones más utilizadas:

%A Nombre del día de la semana.


%B Nombre completo del mes.
%d Numero del dia del mes.
%D Fecha en formato mm/dd/yy
%H Hora (0…23)
%j Dia del año.
%m Numero del mes.
%M Minuto (0…59)
%S Segundo(0…60)
%U Dia de la semana.

Sintaxis:

date [OPTION]... [+FORMAT]


date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Opciones más utilizadas:

+FORMAT Fecha en formato FORMAT


-d, -- Fecha descrita por STRING
day=STRING

Ejemplo:

$ date -d "2 years 1 day ago"


jue jul 23 13:04:07 CDT 2015
Imprime la fecha ocurrida 2 años y un día atrás.

$ date +%D
07/24/13
Imprime la fecha en formato mm/dd/yy

5.3.7 Cat

Francisco J Alcaraz – Linux (Fundamentos) 24


Concatena archivos e imprime en la salida estándar.

Sintaxis:

cat [OPTION] [FILE]...

Ejemplo:

$ cat file.txt file2.txt > file3.txt


Concatena los archivos file1.txt y file2.txt en el archive file3.txt

5.3.8 Sort

Ordena las líneas de un archivo de texto en la salida estándar.

Sintaxis:

sort [OPTION]... [FILE]...

Opciones más utilizadas:

-d Se consideran únicamente espacios en blanco y caracteres


alfanuméricos.
-n Compara las líneas de acuerdo a su valor numérico.
-r Imprime el orden de la salida de manera inversa.
-o, -- Imprime la salida en el archivo FILE
output=FILE

Ejemplo:

$ sort –n –outputfile= order.log somefile.log


Ordena las líneas del archivo somefile.log y deposita la salida en el archivo order.log

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:

uniq [OPTION]... [INPUT [OUTPUT]]

Francisco J Alcaraz – Linux (Fundamentos) 25


Opciones más utilizadas:

-c, --count Conteo de líneas con concurrencias.


-d, -- Imprime solo las líneas duplicadas.
repeated
-u, --unique Imprime solo las líneas no duplicadas.

Ejemplo:

$ uniq -d file.txt
Imprime las líneas duplicadas del archivo file.txt

5.3.10 Man

Despliega la información en línea de los manuales de los comandos disponibles en el


sistema.

Sintaxis:

man [section] title

Opciones más utilizadas:

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:

grep [options] PATTERN [FILE...]

Francisco J Alcaraz – Linux (Fundamentos) 26


Opciones más utilizadas:

-A NUM Imprime NUM de columnas localizadas antes de la coincidencia


encontrada.
-B NUM Imprime NUM de columnas localizadas después de la coincidencia
encontrada.
-c No imprime las líneas que contienen la coincidencia, sino un conteo de
éstas.
-e PATTERN Realiza la búsqueda de PATTERN haciendo uso de expresiones regulares.
-L Imprime el nombre de cada uno de los archivos en los que no se
encontró coincidencia con PATTERN. Termina cuando encuentra la
primer coincidencia.
-l Imprime el nombre de cada uno de los archivos en los que si fue
encontrada al menos una coincidencia con PATTERN. Termina cuando
encuentra la primer coincidencia.

Ejemplo:

$ grep -l "1" file*


Realiza la búsqueda del patrón “1” dentro de todos los archivos cuyo nombre comience con file.

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.

6.1 Entrada (stdin)

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.

Francisco J Alcaraz – Linux (Fundamentos) 27


La standar input puede ser realizada a través de direccionamiento, permitiendo a un
comando tratar la información que recibió de un archivo como entrada; convirtiéndose así en
stdin. En bash la utilizaremos con el carácter “<” con la sintaxis:

comando < archivo_entrada

Por ejemplo, teniendo un archivo, llamado stdin.out:

pattern1
pattern2
pattern3

haciendo uso de esta forma de direccionamiento, podríamos utilizar:

$ grep "pattern2" < stdin.txt


Para realizar la búsqueda de pattern2, considerando el listado contenido en stdin.txt.

6.2 Salida (stdout)

La salida estándar, o stdout, corresponde a la información proporcionada por las


aplicaciones o comandos a través de la consola. De manera natural se trata de la pantalla, aunque
ésta igualmente puede ser direccionada hacia archivos de salida u otros comandos. Como
ejemplo, cualquier información de comandos como ls, cat o wc. Pero existen comandos que no
proporcionan información de salida como podría ser mv, si esto no se especifica.

La manera de direccionar dicha salida se consigue con el operador “>” siguiendo la sintaxis:

comando > archivo_salida

Por ejemplo:

$ ls –ltr > listado.txt


Éste comando nos generará un listado detallado del contenido del directorio ordenado
cronológicamente, con la salvedad de que la salida no se muestra en pantalla sino que generará un
archivo llamado listado.txt con dicha información.

6.3 Error (stderr)

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>”.

Francisco J Alcaraz – Linux (Fundamentos) 28


comando 2> archivo_error

Por ejemplo

Si hacemos un cat al archivo cat errores.log

ls: invalid option -- 'M'


Pruebe `ls --help' para más información.

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.

7.1 Tipos de particiones

Para la manipulación de los discos físicos en particiones, existen 3 tipos de éstas:

Francisco J Alcaraz – Linux (Fundamentos) 29


 Partición primaria. Se trata de la partición más cruda en un dispositivo físico, casi
cualquier sistema operativo puede detectarla y asignarle una unidad para su utilización,
dependiendo únicamente de que el SO puede leer su sistema de archivos. Posee la
limitante de que solo pueden existir 4 de éstas o 3 y 1 extendida.
 Partición extendida. Similar a la partición primaria, fue ideada para eliminar la limitante
en cantidad de las particiones primarias. Este tipo de particiones solo pueden contener
múltiples unidades lógicas, por lo que no soporta ningún tipo de sistema de archivos
directamente.
 Partición lógica. Ocupa una porción o la totalidad de una partición extendida con su
propio sistema de archivos para que sea asignada una unidad. En Linux pueden existir
hasta 15 particiones de este tipo por cada partición extendida.

7.2 Sistemas de archivos

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

Existen un sinfín de sistemas de archivos con diferentes características o nuevas versiones


de anteriores que han ido evolucionando e implementando nuevas características. Para nuestro
curso, las integraremos en 3 grupos:

 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.

Francisco J Alcaraz – Linux (Fundamentos) 30


7.3 Puntos de montaje

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.

Que podamos localizar nuestras particiones en nuestro sistema de archivos no significa


que podamos utilizarlo. Para poder hacer uso de él es necesario que se encuentre montado o
tenga un punto de montaje. Dicho sea de paso, debe estar montado con los permisos y opciones
necesarios para acceder a él desde nuestro Sistema Operativo. Para ello haremos uso del comando
mount.

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

Francisco J Alcaraz – Linux (Fundamentos) 31


realizar formateo de alguna de ellas sin perder información o inclusive compartirla con diferentes
instancias Linux.

7.4 Comandos auxiliares

Existen distintas aplicaciones que gráficamente nos ayudan en el particionado y montaje de


nuestros dispositivos de almacenamiento, la mayoría muy buenas y que cumplen con el cometido.
Sin embargo, al hacer uso de la línea de comandos, nos enfocaremos en 3 comandos que nos
ayudan con estas actividades de una manera muy sencilla y rápida. Éstos además, corresponden a
las herramientas presentes en todas las distribuciones y que resulta muy importante conocer.

7.4.1 Herramienta fdisk

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:

Disco /dev/sda: 8589 MB, 8589934592 bytes


255 heads, 63 sectors/track, 1044 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000eb148

Disposit. Inicio Comienzo Fin Bloques Id Sistema


/dev/sda1 1 608 4881408 83 Linux
La partición 1 no termina en un límite de cilindro.
/dev/sda2 608 1045 3504129 5 Extendida
/dev/sda5 608 730 975872 83 Linux
/dev/sda6 730 791 487424 83 Linux
/dev/sda7 791 1045 2038784 83 Linux

Francisco J Alcaraz – Linux (Fundamentos) 32


Lo cuál indica 5 particiones creadas: 4 de tipo Linux (3 dentro de una extendida). De igual
manera nos informa sobre el uso de cilindros en nuestro disco duro, permitiéndonos saber si
existe espacio sin particionar que pudiésemos utilizar para crear si así lo deseamos.

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.

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to


switch off the mode (command 'c') and change display units to
sectors (command 'u').

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)

El menú resulta autodescriptivo. La opción x es recomendada, como bien se notifica, solo


para usuarios Expertos, ya que las acciones posibles sugieren un riesgo importante tanto en las
particiones como, en la integridad de la información.

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.

Francisco J Alcaraz – Linux (Fundamentos) 33


7.4.2 Comando mount

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:

mount [-fnrsvw] [-t vfstype] [-o options] device dir

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.

A manera de ejemplo con montaje de dispositivos:

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.

Para montarla basta con realizar:

# mkdir /media/disco
# chmod 777 –R /media/disco
# mount –t ext4 /dev/sda7 /media/disco

Francisco J Alcaraz – Linux (Fundamentos) 34


Para listar todas las particiones montadas, el comando mount puede utilizarse de la
siguiente manera:

# 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.

Otro punto a considerar reside en la partición que, probablemente resida físicamente en


otro equipo o que sea perteneciente a otro usuario, para lo cuál es necesario establecer los
permisos necesarios utilizando las opciones del mismo comando.

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:

-a Monta todos los sistemas de ficheros encontrados en fstab, excepto los


marcados como ‘noauto’, los excluidos por el parámetro –t y los que ya
se encuentran montados.
-f Forzar el montaje.
-r Monta la partición en modo solo lectura.
-t Establece el tipo de sistema de archivos: msdos, iso9660, nfs4, coda,
smbfs, cifs, ntfs y ext3, son solo algunos ejemplos.
-w Monta el sistema de archivos de lectura-escritura. Este viene por default.

Francisco J Alcaraz – Linux (Fundamentos) 35


-o Permite el uso de opciones en la misma línea de ejecución de manera
específica.

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:

Auto/noauto Con la opción auto, el dispositivo será montado automáticamente


durante el inicio o en caso de que el comando mount -a sea ejecutado.
auto es el valor por defecto. Si no se desea que el dispositivo se monte
automáticamente, se deberá substituir por noauto.
Exec/noexec exec permite ejecutar binarios que están en la partición, mientras
que noexec lo impide. noexec puede resultar útil en una partición que
contenga binarios se deseen ejecutar en el sistema, o que no deban ser
ejecutados. Este podría ser el caso de la partición de Windows.
ro Monta la partición en modo solo lectura.
rw Monta la partición también para escritura.
user/nouser Permite establecer si la partición podrá ser montada por usuarios
normales o solamente root.
defaults Utiliza las opciones por defecto: rw,suid,dev,exec,auto,nouser,async.

De ésta manera, podríamos montar nuestra partición faltante con permisos de solo lectura:

# mount -t ext3 -o ro /dev/sda7 /media/disco/

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.

Su uso es sencillo, únicamente bastará con especificar el dispositivo físico o la carpeta


dónde ésta se encuentre montada, ingresada por parámetro a dicho comando. Por ejemplo:

# umount /media/disco/

7.5 Archivo fstab

Este archivo de texto, comúnmente localizado en /etc, es el encargado de almacenar el


listado de particiones disponibles y la manera (opciones de configuración) en que éstas son
montadas.

Francisco J Alcaraz – Linux (Fundamentos) 36


Los comandos mount y unmount leen este archivo para determinar las opciones que
utilizarán al montar o desmontar las unidades, siempre y cuando éstas sean permitidas por el tipo
de filesystem y demás privilegios.

El objetivo de este archivo se basa en garantizar una correcta organización de los


dispositivos asegurando su correcto uso de los mismos. Al tratarse de un archivo de textos común,
su edición puede realizarse a través de un editor de texto o herramientas gráficas que simplifican
ésta tarea, de esta manera aseguras la correcta integridad de las tablas de configuración.

La estructura a utilizar en dicho archivo se basa en 6 columnas, separadas por espacios en


blanco:

<dispositivo> <punto_de_montaje> <sistema_de_archivos> <opciones> <dump-


freq> <pass-num>

Para revisarlo tendríamos que hacer:

root@vdebian:/home/pako# cat /etc/fstab


# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# / was on /dev/sda1 during installation
UUID=8bfea388-b251-4a00-a899-f7e158ac7694 / ext3 errors=remount-ro 0 1
# /home was on /dev/sda6 during installation
UUID=8ca39109-04de-4cb8-a003-63800ed19bd1 /home ext3 defaults 0 2
# /tmp was on /dev/sda5 during installation
UUID=02ce01d9-5ecc-4333-b779-4812bc2601da /tmp ext3 defaults 0 2
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0

#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

Francisco J Alcaraz – Linux (Fundamentos) 37


configuraciones. Lo cuál ocurre para nuestra partición /dev/sda7. Lo mismo ocurrirá al ejecutar el
comanto mount –a.

Si queremos que esto no ocurra de esa manera, bastará con modificar la línea a:

/dev/sda7 /media/disco ext3 noauto 0 0

8 ADMINISTRACIÓN DE GRUPOS Y USUARIOS

8.1 Conceptos

Linux, como SO multiusuario, permite la gestión y administración de usuarios y grupos. La


tarea de administración de usuarios se convierte en vital para mantener la fiabilidad de nuestro
sistema. Tanto los usuarios como grupos tienen un ID como identificador que los hace únicos. Para
los usuarios es llamado UID (User ID) y GID (Group ID) para los grupos.

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.

Francisco J Alcaraz – Linux (Fundamentos) 38


8.2.1 Useradd

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.

A través de parámetros nos permite especificar, desde un inicio, la configuración de nuestro


usuario a ser creado. La sintaxis a utilizar siempre será:

useradd OPCIONES nombre_usuario

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

Las opciones más utilizadas son:


-s Especifica el Shell a utilizar por el usuario al realizar login al sistema.
-d Especifica el directorio HOME del usuario.
-m Si el directorio especificado para HOME no existe, lo crea.
-c Agrega un comentario al usuario, generalmente utilizado para asignar el
nombre completo.
-e Opción para especificar la fecha en que la cuenta será inactivada. Sino se
especifica, se toma la fecha por default. Se especifica en formato YYYY-
MM-DD.

Por ejemplo, para crear un usuario con un directorio HOME diferente al tomado por
default en nuestro sistema, sería:

# useradd –m –d /prueba prueba


En dónde, -m nos creará el directorio especificado por –d en /prueba para el usuario prueba. Si
deseamos crear un usuario que no pueda realizar login a nuestro sistema (algo así como un
usuario especial) tendríamos que realizar:

# useradd –s /bin/nologin system_user


Argumentando bajo –s un shell no válido.

8.2.2 Usermod

Este comando es utilizado para modificar los parámetros de un usuario ya existente en el


sistema. Su sintaxis:

Francisco J Alcaraz – Linux (Fundamentos) 39


usermod OPCIONES usuario

La lista de opciones es idéntica a la utilizada por useradd, aunada a la lista anterior


podríamos agregar:

-u Cambia el UID del usuario


-g Cambia el GID del usuario. Éste debe existir en el sistema, ya sea por GID
o nombre.
-L Coloca “!” en la entrada correspondiente al usuario en el archivo
/etc/shadow de sistema, lo cuál bloquea la cuenta.
-U Quita “!” en la entrada correspondiente al usuario en el archivo
/etc/shadow de sistema, para desbloquear la cuenta.

Por ejemplo, si quisierámos cambiar de UID a nuestro usuario existente llamado PRUEBA, bastaría
con hacer:

# usermod –u 1003 prueba


Lo cuál asignaría un UID de 1003 en nuestra entrada del archivo /etc/passwd.

8.2.3 Userdel

Este comando es utilizado para eliminar cuentas de usuario del sistema. Su sinxtaxis:

# userdel OPCIONES usuario

Existen varias opciones que ayudan a la ejecución de éste comando.

-f Forzar la eliminación del usuario, aun cuando éste se encuentre logueado


al sistema.
-r Elimina por igual, el directorio personal asociado a la cuenta de usuario,
así como carpetas y archivos contenidos en él mismo.

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.

Francisco J Alcaraz – Linux (Fundamentos) 40


El usuario root es el único que puede cambiar la contraseña de cualquier usuario, ya sea de
él mismo o de otro usuario normal. Los usuarios normales pueden cambiar únicamente la
contraseña de su propia cuenta, ejecutando el comando sin ningún argumento.

Esta herramienta posee la validación de contraseñas cortas, comunes, basadas en


diccionario, etc. que pueden ser obtenidas fácilmente y representan un riesgo a la seguridad, sin
embargo, permite su asignación si así se desea. Por ejemplo:

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

Dónde se solicitará, primeramente, la contraseña actual, nueva y una confirmación para


finalmente informarnos si el cambio se ha realizado de manera exitosa.

8.2.5 Chage

Por cuestiones de seguridad, la mayoría de ocasiones será necesario establecer un período


máximo en el cuál un password estará vigente, después será necesario modificarlo. Por default,
passwd asigna un password que será para toda la vida. Si se requiere agregar un poco de
seguridad a la cuenta, haremos uso del comando chage.

chage OPCIONES usuario

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:

root@vdebian:/home/pako# chage -l pako


Último cambio de contraseña :sep 02, 2013
La contraseña caduca : nunca
Contraseña inactiva : nunca
La cuenta caduca : nunca
Número de días mínimo entre cambio de contraseña : 1

Francisco J Alcaraz – Linux (Fundamentos) 41


Número de días máximo entre cambio de contraseñas : -1
Número de días de aviso antes de que expire la contraseña : 0

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.

# chage -E 2014-12-31 pako

8.3 Grupos

Los grupos son importantes en el manejo de jerarquías y control de acceso a archivos y


directorios. A un grupo pueden pertenecer muchos usuarios y cada usuario puede pertenecer a
distintos grupos, teniendo siempre uno como principal.

8.3.1 Groupadd

Comando utilizado para la creación de grupos.

groupadd OPCIONES group_name

Para crear un grupo basta con escribir:

# groupadd nuevo_grupo
Si se requiere crear un grupo de sistema:

# groupadd –r nuevo_grupo
Y si se quiere especificar el GID:

# groupadd –g 400 nuevo_grupo

8.3.2 Groupdel

De la misma manera se pueden eliminar grupos que ya no son útiles en el sistema.

Francisco J Alcaraz – Linux (Fundamentos) 42


# groupdel nuevo_grupo

8.3.3 Groupmod

Es posible modificar un grupo existente a través de este comando. Si se desea modificar el


GID, basta con escribir:

groupmod –g 200 nuevo_grupo


Si, por el contrario, se desea modificar el nombre, escribiríamos:

groupmod –n nuevo_nombre nuevo_grupo


Y cambiaría el nombre del grupo “nuevo_grupo” a “nuevo_nombre”.

8.4 Archivos de configuración

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

Todas las cuentas, independientemente de su naturaleza, se almacenan en este archivo de


texto plano. El archivo es creado durante la instalación y modificado por cada
creación/modificación/eliminación de alguna cuenta.

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

Campo 1 Nombre de usuario con el cuál se realiza login. Es único en sistema.


Campo 2 Correspondiente al password de acceso. La existencia de ‘X’ indica que se
encuentra encriptada en el archivo /etc/shadow
Campo 3 Almacena el User ID (UID) único en el sistema correspondiente al usuario.
Campo 4 Almacena el GID principal al cuál pertenece el usuario. Los secundarios se
almacenan en /etc/group
Campo 5 Comentarios para la cuenta, se suele utilizar para guardar el nombre
completo cuando se trata de usuarios normales.
Campo 6 Directorio de trabajo home del usuario.

Francisco J Alcaraz – Linux (Fundamentos) 43


Campo 7 Shell utilizado por el usuario

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

Este archivo almacena, principalmente, la contraseña cifrada de cada cuenta de usuario; de


igual manera guarda información de la cuenta como fechas de expiración. Este archivo puede ser
leído únicamente por root. Como ejemplo, la existente para nuestro usuario “pako”.

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:

Campo 1 Nombre de usuario con el cuál se realiza login.


Campo 2 Contraseña cifrada. Una “x” representa nologin.
Campo 3 Días transcurridos desde el 1/ene/1970 hasta la fecha en que la
contraseña fue cambiada por última vez.
Campo 4 Número mínimo de días a transcurrir antes de poder realizar cambio de
contraseña.
Campo 5 Número de días tras cuales se debe realizar cambio de contraseña. -1
significa nunca.
Campo 6 Número de días para alertar al usuario sobre expiración.
Campo 7 Días transcurridos después de la expiración del password en que será
inhabilitada la cuenta si no se realiza el cambio.
Campo 8 Fecha de caducidad de la cuenta, expresada en días desde el 1 de Enero
de 1970.
Campo 9 Reservado.

8.4.3 /etc/group

Archivo donde es almacenada la relación de usuarios pertenecientes a los grupos en nuestro


sistema.

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.

Campo 1 Nombre del grupo.

Francisco J Alcaraz – Linux (Fundamentos) 44


Campo 2 Contraseña del grupo. Si no existe se muestra “x”.
Campo 3 GID del grupo.
Campo 4 Opcional. Lista de usuarios pertenecientes al grupo separados por coma.

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:

 Propietario. Los permisos al propietario aplican únicamente al dueño del archivo y no


impactan con otros usuarios.
 Grupo. Éstos son aplicados únicamente al grupo que se encuentra asignado el archivo sin
interferir con otros usuarios.
 Todos los usuarios. Aplicables para todos los demás usuarios registrados en el sistema que
suelen ser una mayoría.

De igual manera cada archivo posee tres tipos de permisos que lo afectan:

 Lectura. Se refiere a la capacidad de un usuario para poder leer el archivo.


 Escritura. La capacidad de un usuario de poder escribir/modificar un fichero. Incluye
sobreescritura y eliminación.
 Ejecución. Afecta la posibilidad de un usuario para ejecutar dicho archivo.

Es posible conocer los permisos con el mando ls –l de la siguiente manera:

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

Francisco J Alcaraz – Linux (Fundamentos) 45


-rw-r--r-- 1 pako pako 6137268 ago 20 2012 httpd-2.4.3.tar.gz
drwxr-xr-x 2 pako pako 1024 ago 6 2012 Imágenes
-rw------- 1 pako pako 4415 jul 23 22:05 mbox
drwxr-xr-x 2 pako pako 1024 ago 6 2012 Música
drwxr-xr-x 2 pako pako 1024 ago 6 2012 Plantillas
drwxr-xr-x 2 pako pako 1024 ago 6 2012 Público
drwxr-xr-x 3 pako pako 1024 jul 18 18:41 python
-rwxr-xr-x 1 pako pako 261 sep 9 2012 test_user.sh
drwxr-xr-x 2 pako pako 1024 ago 6 2012 Vídeos
drwxrwxrwx 2 pako pako 1024 oct 1 2012 www

Considerando la línea “-rwxr-xr-x … test_user.sh”. El primer carácter se trata de una bandera de


control, puede estar de esa manera o tomar otros valores. Para los directorios se encontrará el
carácter “d”. Los siguientes corresponden a los permisos como tal, divididos en los tres grupos
descritos con anterioridad.

9.2 Permisos por bits

La información “rwxr-xr-x” corresponde a los permisos sobre el fichero, de izquierda a


derecha: Propietario, Grupo y otros usuarios, y los distintos tipos de permisos para cada uno. Así
pues, cada grupo de permisos corresponde a un dato “rwx” o, dicho de otra manera: lectura,
escritura y ejecución. Dependiendo si se tiene o no el permiso se “enciende” o “apaga” el carácter
correspondiente en código binario. Lo que nosotros vemos es su representación decimal:

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”.

9.3 Permisos simbólicos

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.

Francisco J Alcaraz – Linux (Fundamentos) 46


 A, todos los 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:

chmod [OPTION]... MODE[,MODE]... FILE...


chmod [OPTION]... OCTAL-MODE FILE...

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.

Para quitar el permiso de ejecución al grupo “otros usuarios”, haríamos:


$ chmod o-x miarchivo.txt

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:

Francisco J Alcaraz – Linux (Fundamentos) 47


chown [ -f ] [ -h ] [ -R ] Owner [ :Group ] { File ... | Directory

Se puede utilizar la opción –R para realizar el cambio de propietario a un directorio de


manera recursiva a todos los archivos que se encuentran debajo de éste.

A manera de ejemplo, para cambiar de propietario al archivo miarchivo.txt, haríamos:

# chown root: miarchivo.txt


Esto asociará el usuario root al archivo especificado. Ya que no fue especificado un grupo posterior
al carácter “:”, se considera el mismo root como grupo propietario. Si, por ejemplo, requerimos
que el propietario sea el usuario root pero el grupo propietario sea sistema, tendremos que
especificarlo de la siguiente manera:

# chown root:sistema miarchivo.txt

9.4.3 Chgrp

Comando similar al anterior, con al salvedad de que está reservado para cambio únicamente
del grupo propietario. Su sintaxis:

chgrp [OPTION]... --reference=RFILE FILE...

De igual manera puede utilizarse R para la asignación recursiva con los archivos y directorios
hijos. Como ejemplo:

# chgrp limited miarchivo.txt


Cambiará el grupo propietario a miarchivo.txt por el grupo limited.

10 GESTIÓN DE PROCESOS

Por proceso debemos entender la instancia cargada en memoria de cualquier programa o


ejecutable de nuestro sistema. A esto suele llamarse “proceso en ejecución” y nuestro SO, como
multiproceso, permite la ejecución en paralelo de éstos tan cuántos sea necesario y en su mayoría
independiente, sin interrumpir uno a otro.

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:

R Running or runnable (on run queue)

Francisco J Alcaraz – Linux (Fundamentos) 48


D uninterruptible sleep (usually IO)
S interruptible sleep (waiting for an event to complete
Z defunct/zombie, terminated but not reaped by its parent
T stopped, either by a job control signal or because it is being traced

Un proceso siempre inicia en estado R y termina una vez que su proceso padre llega a
estado zombie, Z.

10.1 Comando ps

Derivado de “process status”, el comando ps nos proporcionará información referente a los


procesos ejecutándose al momento de lanzar el comando. Administrativamente hablando se trata
de uno de los comandos más importantes e útiles. Su sintaxis:

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.

-e Selecciona todos los procesos en ejecución.


-f Nos muestra un listado detallado de información sobre los procesos.
-n Donde n es un PID, mostrará la información referente.
t Lista únicamente aquellos procesos asociados a la terminal con que es
ejecutado el comando.
-t ttylist Muestra procesos asociados a tty argumentado a la opción.
-u userlist Muestra la información de procesos asociados a una lista de usuarios,
argumentados por nombre de usuario o UID.
-L Muestra un listado detallado de los hilos de un proceso seleccionado. Por
ejemplo, -C.
-C Selecciona procesos por nombre de comando.
-o format Utilizado para modificar el listado de columnas a visualizar en el
resultado del comando.

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:

Listado de todos los procesos de forma detallada:

$ ps –ef

Francisco J Alcaraz – Linux (Fundamentos) 49


Procesos ejecutados con el usuario www-data:

$ ps –u www-data

Procesos detallados para la terminal pts/1:

$ 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 --forest -eo ppid,pid,uid,comm

Todos los procesos ejecutándose pertenecientes al comando apache2:

$ ps -C apache2

10.2 Comando top

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]

Quizá, algunas de las más utilizadas son:

-d SEGS Especifica el delay entre actualizaciones de SEGS segundos.


-p PID Monitorea únicamente los PID brindados.
-q No realiza delay, únicamente ejecuta un refresh y abandona la
herramienta.
-n NUM Ejecuta N iteraciones y abandona la herramienta.

De manera interactiva es posible establecer y configurar parámetros en la ejecución de la


herramienta a través de comandos. Por default la información es actualizada cada 5 segundos. La
pantalla de la herramienta se puede dividir en dos partes: una que incluye información general de
status del servidor y memoria, y otra, el listado detallado de cada uno de los procesos.

Francisco J Alcaraz – Linux (Fundamentos) 50


top - 13:27:41 up 51 min, 2 users, load average: 0.12, 0.04, 0.01
Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.9%us, 3.9%sy, 0.0%ni, 89.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 514684k total, 298772k used, 215912k free, 15704k buffers
Swap: 0k total, 0k used, 0k free, 174836k cached

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

En la primer parte podemos observar el resumen de los diferentes recursos utilizados y


disponibles del servidor, divididos por líneas:

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:

l Oculta/Muestra la línea de promedio de carga.


t Oculta/Muestra línea de tareas/CPU.
d Modifica en segundos la tasa de refresco.
R Ordena la tabla por PID.
u Muestra los procesos pertenecientes al usuario brindado como
argumento a ésta opción.
P Ordena la tabla por uso de CPU.
M Ordena la tabla por uso de RAM.
c Muestra la ruta completa al comando del proceso en la columna
COMMAND.
k Permite enviar señales a un proceso por su PID en dos pasos,
posteriormente pide el número de señal a enviar de manera interactiva.
w Guarda la configuración de manera permanente.
q Sale del comando top.

Francisco J Alcaraz – Linux (Fundamentos) 51


10.3 Señales

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

Y tendremos una salida similar a:

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

De todo el listado, las más comunes serán:

SIGHUP Utilizada para desconectar procesos de sus procesos padres.


Normalmente usada para reiniciar procesos.
SIGINT El proceso es detenido e interrumpido. El proceso puede ignorar esta
señal.
SIGILL Cuando el proceso realiza algo defectuoso o prohibido, el sistema lanza
esta señal, ILLegal Signal.
SIGKILL Ésta fuerza a la interrupción del proceso de manera inmediata. No puede
ser ignorada por el proceso.
SIGTERM Señal para terminar el proceso con gracia, dando tiempo de salvar el

Francisco J Alcaraz – Linux (Fundamentos) 52


proceso e información del mismo. Esta señal no puede ser ignorada.
SIGSTOP Esta señal provoca una pausa en la ejecución del proceso. No puede ser
ignorada.
SIGCONT Esta señal permite continuar un proceso que fue pausado con SIGSTOP.

10.4 Comando kill

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:

kill [ -s signal | -p ] [ -a ] [ -- ] pid

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.

A manera de ejemplo, los siguientes comandos harían la misma tarea:

$ kill -15 132

$ kill –TERM 132

De igual manera podremos detener un proceso:

$ kill -19 4432

Y reiniciarlo:

$ kill –CONT 4432

Si queremos hacer ambos pasos en uno solo:

$ kill –HUP 4432

Francisco J Alcaraz – Linux (Fundamentos) 53


10.5 Comandos Jobs, bg y fg

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:

vdebian:~> sleep 1000


^Z
Suspended
vdebian:~> jobs
[1] + Suspended sleep 1000
vdebian:~> fg 1
sleep 1000
^Z
Suspended
vdebian:~> bg 1
[1] sleep 1000 &
vdebian:~>

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.

En nuestro ejemplo, únicamente tenemos una tarea descrita:

[1] + Suspended sleep 1000

Si es de nuestro deseo recuperar la ejecución de la tarea 1 (sleep 1000) en primer plano lo


haremos con el comando fg(foreground) y nuevamente perderemos el control de nuestra terminal
hasta que la tarea concluya.

De otra manera, podremos recuperarlo en segundo plano con el comando bg(background) y


la ejecución continuará, teniendo nosotros el control de nuestra terminal.

Francisco J Alcaraz – Linux (Fundamentos) 54


El uso de estos comandos es sencillo, básicamente el nombre del comando y el número de
tarea(job) a recuperar es suficiente.

10.6 Comandos nohup y &.

En ocasiones resultará necesario ejecutar procesos que demorará bastante su ejecución;


tanto que tendremos que cerrar nuestra sesión en la terminal antes de que concluya.

Para permitir que el comando continúe en ejecución haremos uso del comando nohup y su
sintaxis:

nohup COMMAND [ARG]...

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.

Es aún mejor, cuando el proceso es enviado directamente de manera inicial en segundo


plano. Esto se logra a través del carácter & al final de todo el comando. Es decir, con estos dos
operadores podremos ejecutar un comando en background y que al mismo tiempo, perdure la
ejecución aunque abandonemos nuestra sesión en el servidor. Algo muy últil sin duda.

11 TAREAS PROGRAMADAS

En Unix y automatización de procesos será muy conveniente la ejecución de tareas de


manera desatendida, en la cuál no tengamos que realizar o mandar el comando manualmente.
Para ello nos apoyaremos en el demonio crond, de sistemas Unix. Este demonio o aplicación
siempre residente en memoria, nos permitirá la ejecución de las tareas de una manera periódica,
pudiendo especificar horarios y días de la semana o mes.

Al hablar de tareas programadas, nos referimos a específicamente a dos aplicaciones


diferentes. Cron, que como ya dijimos, se encarga de ejecutar las tareas. Y crontab, nuestro
archivo de configuración existente por cada usuario. Crontab también es el comando que nos
permitirá la configuración de las tareas a través de un archivo de texto plano.

Francisco J Alcaraz – Linux (Fundamentos) 55


11.1 Cron

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.

Para comprobar que se encuentra activo, es necesario validarlo con el comando:

# /etc/init.d/cron status

Teniendo una salida similar a

Checking periodic command scheduler...done (running).


Significa que nuestro servicio se encuentra operando normalmente.

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:

Visualizar el archivo sin editar:

$ crontab –l

Editar el archivo existente o crear uno nuevo:

$ crontab –e

Eliminar el archivo existente y dejar en blanco:

$ crontab –d

Editar el archivo crontab de un usuario en particular. Solo root puede realizar esta actividad:

$ crontab –u usuario

Francisco J Alcaraz – Linux (Fundamentos) 56


Cada registro de una tarea tiene a su disposición 6 diferentes datos que deben
completarse para poder programar una tarea de manera correcta.

.---------------- minuto (0 - 59)


| .------------- hora (0 - 23)
| | .---------- día del mes (1 - 31)
| | | .------- mes (1 - 12) O jan,feb, mar, apr (los meses en inglés)
| | | | .---- día de la semana (0 - 6) (Domingo=0 ó 7) O
sun,mon,tue,wed,thu,fri,sat (los días en inglés)
| | | | |
* * * * * comando para ser ejecutado

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.

0,30 * * * 1 /usr/bin/who >> /home/quien.tex

El mismo ejemplo anterior pero cada 15 minutos todos los días:

0,15,30,45 * * * * /usr/bin/who >> /home/quien.tex

Apagar el equipo todos los sábados a las 9 horas y 30 minutos de la noche.

30 21 * * 6 /sbin/shutdown -h now

12 DIRECTORIOS IMPORTANTES

Como se mencionó en el capítulo 4, Linux posee una jerarquía de directorios que se


mantienen comunes en las diferentes distribuciones. Suelen tener muy pocos cambios de una a
otra y es una manera de agrupar los archivos de acuerdo a su naturaleza, objetivo o uso.

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.

Francisco J Alcaraz – Linux (Fundamentos) 57


12.1 /dev

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:

hd Discos Duros IDE al igual que cdroms.


sd Discos Duros SCSI.
scd Cdrom SCSI.
fd Unidades de disquete.
tty Terminales o consolas.
pty Terminales de red incluidas las abiertas por X window.
eth Tarjetas e interfaces de red.

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:

fstab Información estática sobre filesystems.


hosts Información estática sobre host names.
group Control de grupos
issue Mensaje de bienvenida y nombre de SO.
mtab Información dinámica sobre filesystems.
networks Información estática sobre redes.
passwd Control de usuarios.
shells Rutas a las shells disponibles del sistema.
syslog.conf Configuración de syslogd
protocols Listado de protocolos.

Francisco J Alcaraz – Linux (Fundamentos) 58


Además, en /etc/X11, se localizan todos los archivos de configuración para manejo de X
Window.

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.

Se trata de archivos referentes a procesos, sistema, configuración y kernel. Es necesario ser


root para explorar en la totalidad este directorio.

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.

Así pues, podríamos revisar nuestro archivo /proc/meminfo:

$ 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.

Otros archivos importantes son:

/proc/apm Información sobre Advanced Power Magagement


/proc/acpi Información sobre ACPI (Advanced Configuration and Power Interface)
/proc/cpuinfo Muestra información sobre procesador.

Francisco J Alcaraz – Linux (Fundamentos) 59


/proc/loadavg Información de carga de CPU en ultimo minuto, 5 y 15. Al igual que el
número de procesos en ejecución.
/proc/stat Estadísticas sobre el último arranque del equipo.
/proc/uptime Numero en segundos transcurridos desde que el sistema fue encendido.
/proc/filesystems Filesystems soportados por el sistema.
/proc/mounts Todas las particiones montadas en el sistema.
/proc/partitions Muestra la información de las particiones disponibles.
/proc/meminfo Información sobre memoria y estadísticas.

Como mencionamos anteriormente, este directorio también almacena, durante la


ejecución de un proceso, la informa referente a éste. Para ello se tiene una carpeta con el numero
de proceso y dentro de ésta, varios archivos con información y estadísticas. Claramente la
información es cambiante constantemente.

Dentro de cada carpeta podemos localizar diferentes archivos, siendo los más importantes:

cmdline Comando ejecutado al inicio del proceso con los parámetros.


cwd Enlace simbólico al directorio actual de trabajo (currently working
directory)
environ Muestra las variables de entorno para el proceso.
fd Contiene los descriptores del proceso, así como el uso de archivos o
dispositivos.
Maps, statm y Usos de memoria por proceso.
mem
Stat y status Muestra información sobre estatus del proceso. Se suele utilizar status
por ser más claro.

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.

Ya que es un directorio local al equipo, suele no ser compartido o al menos no en su


totalidad.

Este directorio suele dividirse en otros directorios que almacenan dicha información de
acuerdo a su naturaleza, los más importantes son:

/var/crash Contiene información referente a caídas o errores del sistema operativo.


/var/lock Contiene archivos de bloqueo, indicando que un proceso está haciendo
uso de algún dispositivo en particular y así los demás programas lo
encontrarán para no intentar acceder a él.

Francisco J Alcaraz – Linux (Fundamentos) 60


/var/log Almacena diferentes tipos de logs o registros.
/var/mail Buzón de correos o mensajes de usuarios.
/var/opt Almacena información de variables de carpeta /opt
/var/run Guarda información del sistema desde el último arranque.
/var/spool Almacena información sobre tareas a la espera de ser procesadas, como
son colas de impresión o correo no leído.
/var/spool/mail Ubicación de correos de usuario desaprobados.
/var/tmp Archivos temporales que no son eliminados en cambio de sesiones o
reinicios del sistema

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.

Las carpetas más importantes dentro de este directorio son:

/usr/bin Se localizan la mayor parte de comandos para usuarios.


/usr/sbin Se encuentran la mayoría de herramientas para administración del
sistema que no corresponden al inicio del sistema(/sbin). La mayoría de
servicios son localizados aquí.
/usr/include Archivos de cabecera para el lenguaje de programación C.
/usr/local Se utiliza para la instalación de software local para el equipo.
/usr/src Permite almacenar el código fuente de algunas aplicaciones y bibliotecas
con el fin de poder accederlo sin problemas de permisos.

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.

Francisco J Alcaraz – Linux (Fundamentos) 61


13.1 Formatos más comunes

A menudo podremos seleccionar entre diferentes herramientas, se muestran a manera de


ejemplos.

13.1.1 Tar

Sin argumento, solo empaqueta y no comprime

Empaquetar tar cvf file.tar ~/*


Desempaquetar tar xvf file.tar
Visualizar contenido tar tvf file.tar

13.1.2 Tar.gz

Empaquetar y compresión con gzip.

Empaquetar y comprimir tar czvf file.tar.gz ~/*


Desempaquetar y tar xzvf file.tar.gz
descomprimir
Visualizar contenido tar tzvf file.tar.gz

13.1.3 Gzip

Compresión de archivos únicamente, no permite directorios.

Comprimir gzip –q archivo.txt (Comprime el archivo y lo renombra a


archivo.txt.gz)
Descomprimir gzip –d archivo.txt.gz

13.1.4 Bz2

Únicamente comprime archivo, no directorios.

Comprimir bzip2 archivo.txt (Comprime el archivo y lo renombra a


archivo.txt.bz2)
Descomprimir bzip –d archivo.txt.bz2

Francisco J Alcaraz – Linux (Fundamentos) 62


13.1.5 Tar.bz2

Por conveniencia, se suele utilizar con un empaquetador como tar para empaquetar
directorios y comprimirlos.

Empaquetar y comprimir tar -c archivos | bzip2 > file.tar.bz2


Desempaquetar y bzip2 -dc file.tar.bz2 | tar -xv
descomprimir
Visualizar contenido bzip2 -dc file.tar.bz2 | tar -t

13.1.6 Zip

Herramienta privativa pero aun común

Comprimir zip archive.zip archivos_a_comprimir


Descomprimir unzip archive.zip
Visualizar contenido unzip –v archive.zip

13.1.7 Rar

Otra herramienta privativa, requiere instalación previa.

Comprimir rar –a file.rar archivos


Descomprimir rar –x file.rar
Visualizar contenido rar –v filerar

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.

Se trata de un lenguaje interpretado, lo cuál permitirá portabilidad y rapidez, ya que no se


requiere de previa generación de un binario o ejecutable para su uso. La generación de estos
pequeños programas, de ahora en adelante llamados scripts, deberían de poder ser utilizados al
menos en una mayoría de sistemas basados en Unix, al contener la misma base de comandos en
cada distribución.

Francisco J Alcaraz – Linux (Fundamentos) 63


Como ya vimos, desde nuestra consola tendremos acceso a todos los recursos, operaciones,
comandos e información relacionada con nuestro equipo, lo cuál, aunado al manejo de scripts, las
ventajas se incrementan permitiendo manipular casi por completo todo un SO.

14.1 Funcionamiento

La unificación de todos los comandos y funciones se verán concentradas en un solo archivo,


normalmente con extensión .sh que, nuestro intérprete considerará como si de un binario se
tratase. Adicionalmente, se debe declarar el shebang que permitirá dicha asociación.

#!/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.

$ chmod a+x mi_script.sh

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

Como todo lenguaje de programación, Shell Scripting permite el manejo de información a


través de variables. Éstas pueden ser de dos tipos:

 Variables de Ambiente. Se encuentran declaradas de manera global en el sistema y la


mayoría de usuarios podrá acceder a ellas. No es necesario realizarlo a través de un script.
 Variables locales. Son variables declaradas solamente para su uso dentro de una instancia
del script en ejecución y facilitan el flujo de éste. Pocas veces será necesario utilizarlas
fuera del script.

Nos enfocaremos en las variables locales.

Francisco J Alcaraz – Linux (Fundamentos) 64


14.2.1 Asignación de cadena

É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.

Y se puede utilizar la siguiente sintaxis para la asignación de un valor:

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.

Así pues, podremos declarar una variable:

MI_VAR=123

14.2.2 Asignación numérica

En la mayoría de ocasiones necesitaremos realizar operaciones con cantidades dentro de


nuestros scripts, para ello utilizaremos la función let disponible en nuestro bash. Su uso también
es muy sencillo:

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

Francisco J Alcaraz – Linux (Fundamentos) 65


14.2.4 Acceso

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.

Lo haremos a través de la siguiente sintaxis:

./script.sh param1 param2 param3

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.

Francisco J Alcaraz – Linux (Fundamentos) 66


Podemos realizar nuestro acceso a través de las variables $n, comenzando por $1 y así,
hasta cubrir el total de los parámetros recibidos. Por ejemplo, considerando el siguiente mini
script:

#!/bin/bash
echo "Primer parámetro: " ${1}
echo "Segundo parametro: " ${2}

Y su llamada con:

./params.sh param1 param2

Tendría una salida:

Primer parámetro: param1


Segundo parametro: param2

Adicionalmente a las variables que toman los valores consecutivos de nuestra llamada al
script, existen otras variables que nos apoyan con este control:

$0 contiene el nombre del script en ejecución


$# contiene el número de parámetros pasados al script
$* contiene el listado completo de todos los parámetros

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.

14.5.1 Comparativos de cadenas alfanuméricas

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.

Francisco J Alcaraz – Linux (Fundamentos) 67


14.5.2 Comparativos valores numéricos

Utilizados para realizar comparaciones entre valores numéricos, directamente o a través de


variables.

-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

Nos permiten la comprobación de ficheros:

-d fichero Fichero existe y es un directorio.


-e fichero Archivo existe.
-f fichero Fichero existe y es un fichero regular (no un directorio, u otro tipo
de archivo especial)
-r fichero Tienes permiso de lectura en fichero
-s fichero Ar existe y no está vacío.
-w fichero Tienes permiso de escritura en fichero
-x fichero Tienes permiso de ejecución en fichero (o de búsqueda si es un
directorio)
-O fichero Eres el dueño del fichero
-G fichero El grupo del fichero es igual al tuyo.
fichero1 -nt fichero2 fichero1 es mas reciente que fichero2
fichero1 -ot fichero2 fichero1 es mas antiguo que fichero2

14.5.4 Aritméticos

Permiten la realización de operaciones matemáticas:

+ Suma
- Resta
* Multiplicación
/ División
% Módulo
** Potenciación

Francisco J Alcaraz – Linux (Fundamentos) 68


14.5.5 Lógicos

Utilizados para la evaluación de condiciones lógicas, falso o verdadero. Útiles para ejecución
de comandos.

== Devuelve verdadero si las expresiones son verdaderas.


&& Devuelve verdadero si ambas expresiones son verdaderas. De otra
manera devuelve falso.
|| Devuelve verdadero si al menos una de las expresiones es
verdadera.

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.

Las primeras permiten encapsular el contenido de variables y uso de archivos o directorios


que contienen espacios en blanco. Por ejemplo:

ls –ltr “Mi archivo.txt”

Permite tomar la frase como un todo de manera literal, a excepción de los otros tipos de
comillas.

Si quisiéramos, por otro lado, mostrar el contenido de la variable $HOME de nuestro


sistema, podríamos realizar:

echo “$HOME”
# Imprime /home/pako

Y el resultado seguirá siendo el mismo.

Francisco J Alcaraz – Linux (Fundamentos) 69


Por otro lado, existen las comillas invertidas (``), las cuales permiten guardar el resultado de
un comando dentro de una variable. Por ejemplo:

#!/bin/bash
VAR=`ls`
echo $VAR

Permitiría almacenar dentro de la variable VAR el listado del directorio.

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:

if [ "foo" = "foo" ]; then


Comandos a ejecutar si la condición se cumple
else
Comandos a ejecutar si la condición no se cumple
fi

#!/bin/bash
read X
read Y
if [ $X -ge $Y ]; then
echo "$X es mayor o igual que $Y"

Francisco J Alcaraz – Linux (Fundamentos) 70


else
echo "$Y es mayor"
fi

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.

Francisco J Alcaraz – Linux (Fundamentos) 71


14.7 Ciclos
14.7.1 For

Esta estructura nos permitirá realizar iteraciones de comandos repetidas n veces;


comenzando por un valor dentro de un rango hasta el fin de éste. Si sintaxis:

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

Esta estructura permite ejecutar un bloque de instrucciones mientras una condición se


cumpla. Suele hacer uso de operadores para ésta revisión y modificar la variable de control dentro
del mismo ciclo. Su sintaxis:

while condicion
do
comandos
done

El resultado de la validación tomará un resultado boleano que, dependiendo de la


estructura, permitirá o no continuar con la ejecución de una nueva iteración. Veamos un ejemplo:

#!/bin/sh
INPUT_STRING=hola
while [ "$INPUT_STRING" != "bye" ]
do

Francisco J Alcaraz – Linux (Fundamentos) 72


echo "Escribe algo (bye para salir): "
read INPUT_STRING
echo "Escribiste:: $INPUT_STRING"
done

Este ejemplo nos permitirá ingresar de manera indefinida un mensaje, mismo que
posteriormente será mostrado. El ciclo termina cuando se ingrese la palabra “bye”.

Francisco J Alcaraz – Linux (Fundamentos) 73


BIBLIOGRAFÍA

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/

Francisco J Alcaraz – Linux (Fundamentos) 74

También podría gustarte