Comandos básicos de FreeBSD

En este módulo vamos a dar un pequeño vistazo a aspectos iniciales de FreeBSD como son su estructura de directorios y una serie de comandos básicos de Linux para trabajar desde la línea de comandos que nos harán falta para la realización de alguno de los procesos de instalación y configuración de nuestro servidor web.

26-Ene-2016

Versión de FreeBSD

freebsd-version - Mostrar la versión de FreeBSD

Para mostrar la versión actual del kernel del sistema que tenemos instalado se utiliza el comando freebsd-version sin ninguna opción.

freebsd-version
# freebsd-version
10.2-RELEASE

Directorios FreeBSD

Como a lo largo de los siguientes módulos del curso vamos a estar moviéndonos por la estructura de directorios (carpetas) de FreeBSD y modificando algunos de los ficheros del sistema, vamos a ver primero un poco la lista de directorios y que contienen para familiarizarnos un su sistema de organizar la información.

Al igual que ocurre en Windows que existen una serie de carpetas vitales del sistema como pueden ser: ‘Archivos de programa’, ‘Usuarios’, ‘Windows’, ‘Temp’, etc … las distribuciones Linux (en nuestro caso FreeBSD) también presentan una estructura de carpetas del sistema para organizar los distintos tipos de información, dispositivos, programas, etc.. quizás un poco más compleja a la que estamos acostumbrados en nuestros sistemas Windows.

Veremos ahora una descripción de los directorios más comunes:

Directorio Finalidad
/ Directorio raíz del sistema de ficheros.
/bin/ Utilidades de usuario fundamentales tanto para el ambiente monousuario como para el multiusuario. Es donde podremos encontrar la mayoría de los comandos del sistema (ls, cat, rmdir, pwd, etc.)
/boot/ Programas y ficheros de configuración necesarios durante el arranque del sistema operativo.
/boot/defaults/ Ficheros de configuración por omisión del arranque. Es donde encontraremos el fichero loader.conf vital para la configuración de las rutinas de carga o bootstrap.
/dev/ Nodos de dispositivo. Información de todos los dispositivos del sistema: puertos, discos, terminales, etc. Este directorio almacena las definiciones de todos los dispositivos. En Linux cada dispositivo tiene asociado un archivo especial.
/etc/ Ficheros de configuración y «scripts» del sistema. Donde encontraremos dos ficheros con los que vamos a trabajar como son el inetd.conf (Este fichero es el utilizado por el demonio inetd, conocido como el superservidor de red. El demonio inetd es el encargado de ofrecer la mayoría de servicios de nuestro equipo hacia el resto de máquinas, y por tanto debemos cuidar mucho su correcta configuración) y el rc.conf (Este archivo contiene toda la información de configuración para que el sistema básico funcione: nombre del host, mapa de teclado, configuración ip, servicios que se tienen que habilitar, zona horaria, etc.).
/etc/defaults/ Ficheros de configuración por omisión del sistema.
/etc/mail/ Ficheros de configuración para agentes de transporte de correo como sendmail.
/lib/ El directorio /lib contiene librerías compartidas (similar a las dlls para los usuarios de Windows) necesarias para arrancar el sistema y para los ficheros ejecutables contenidos en, por ejemplo, /bin.
/mnt/ Este directorio contiene sistemas de archivos externos que hayan sido montados. En nuestro caso encontraremos las particiones creadas en el segundo disco duro (webapps, moodle y moodledata). Las entidades que aparecen dentro de /mnt representan recursos externos a los que se puede acceder a través de este directorio.
/root/ Este directorio es el directorio /home del administrador del sistema (root).
/sbin/ Programas del sistema y utilidades fundamentales de administración para ambientes monousuario y multiusuario.
/tmp/ Ficheros temporales. El contenido de /tmp NO suelen conservarse después de un reinicio del sistema. Los sistemas de ficheros basados en memoria suelen montarse en /tmp.
/usr/

La mayoría de utilidades y aplicaciones de usuario.

/usr/bin/

Aplicaciones comunes, herramientas de programación y otras aplicaciones.
Alberga los archivos ejecutables vinculados al software instalado en el sistema.

/usr/lib/

Bibliotecas.

/usr/libexec/

Demonios (procesos que se ejecutan en segundo plano) del sistema y utilidades del sistema (ejecutados por otros programas).

/usr/local/

Ejecutables locales, bibliotecas, etc.

/usr/ports

La colección de Ports de FreeBSD (opcional si se han seleccionado en la instalación del sistema).

/usr/sbin/

Demonios del sistema y utilidades del sistema (ejecutados por usuarios del sistema).

/usr/home/

Directorio que contiene los subdirectorios que son directorios origen para cada uno de los usuarios del sistema.
Cada subdirectorio /home/user de cada usuario proporciona el lugar para almacenar sus ficheros, así como los archivos de configuración propios de cada uno.

/var/

Ficheros multipropósito de log, temporales, en tránsito y de «spool». En ocasiones se monta en /var un sistema de ficheros basado en memoria.

/var/log/

Diversos ficheros de log del sistema.

/var/mail/

Ficheros de buzones de correo de usuarios.

/var/spool/

Directorios diversos del sistema de spool de impresora y correo.

/var/tmp/

Ficheros temporales. Estos ficheros suelen conservarse tras el reinicio del sistema, a menos que /var sea un sistema de ficheros basado en memoria.

ls - Listar contenido de directorios

Para mostrar el contenido de los directorios por los que nos vamos a mover utilizaremos el comando ls.

ls [opciones] [archivos]

Si se utiliza sin opciones ni archivos muestra un listado simple del contenido ordenado alfabéticamente.

Algunas de sus opciones son (se pueden indicar varias al mismo tiempo):

-lmuestra un listado detallado de la información.
-aMuestra todos los archivos incluso los que comienzan por . punto (ocultos)
-dMuestra sólo los directorios
-tOrdena el listado por fechas
-Findica tipo a continuación del nombre: / directorio, * ejecutable, @ enlace simbólico.
$ ls -la

# Muestra un listado detallado de todo el contenido del directorio actual.

$ ls -lF

# Muestra un listado detallado del directorio actual indicando el tipo, excluyendo los archivos ocultos.

$ ls –d /usr/local/etc

# Muestra un listado de todos los directorios contenidos en la ruta /usr/local/etc sin mostrar la información detallada.

Si el listado es muy largo podemos ayudarnos del comando more para mostrar de forma paginada la información.

$ ls -l /usr/local/bin | more
total 1532
-rwxr-xr-x 1 root wheel 111244 Dec 25 02:17 a2p
-rwxr-xr-x 1 root wheel  47860 Dec 31 05:46 ab
-rwxr-xr-x 1 root wheel  6937 Dec 31 05:07 apr-1-config
-rwxr-xr-x 1 root wheel  6606 Dec 31 05:07 apu-1-config
-rwxr-xr-x 2 root wheel  36619 Dec 25 02:17 c2ph
-rwxr-xr-x 1 root wheel  7242 Dec 25 02:17 config_data
-rwxr-xr-x 1 root wheel  12767 Dec 25 02:17 corelist
-rwxr-xr-x 1 root wheel  5872 Dec 25 02:17 cpan
-rwxr-xr-x 1 root wheel  21836 Dec 25 02:17 cpan2dist
-rwxr-xr-x 1 root wheel  3410 Dec 25 02:17 cpanp
-rwxr-xr-x 1 root wheel   557 Dec 25 02:17 cpanp-run-perl
drwxr-xr-x 2 root wheel   512 Oct 3 01:24 db5
lrwxr-xr-x 1 root wheel   14 Oct 3 01:24 db_archive-5 -> db5/db_archive
lrwxr-xr-x 1 root wheel   14 Oct 3 01:24 db_archive-5.3 -> db5/db_archive
lrwxr-xr-x 1 root wheel   17 Oct 3 01:24 db_checkpoint-5 -> db5/db_checkpoint
lrwxr-xr-x 1 root wheel   17 Oct 3 01:24 db_checkpoint-5.3 -> db5/db_checkpoint
lrwxr-xr-x 1 root wheel   15 Oct 3 01:24 db_deadlock-5 -> db5/db_deadlock
lrwxr-xr-x 1 root wheel   15 Oct 3 01:24 db_deadlock-5.3 -> db5/db_deadlock
lrwxr-xr-x 1 root wheel   11 Oct 3 01:24 db_dump-5 -> db5/db_dump
lrwxr-xr-x 1 root wheel   11 Oct 3 01:24 db_dump-5.3 -> db5/db_dump
lrwxr-xr-x 1 root wheel   14 Oct 3 01:24 db_dump185-5 -> db5/db_dump185
lrwxr-xr-x 1 root wheel   14 Oct 3 01:24 db_dump185-5.3 -> db5/db_dump185
--More--(byte 1468)

# Muestra un listado detallado del directorio /usr/local/bin realizando una pausa entre cada pantalla.

El comando more retoma la salida del comando ls por medio de la utilización de la tubería | para poder mostrar el resultado paginado. Este comando es realmente útil con cualquier otro comando que muestre mucha información por pantalla y no podamos leerla de forma comoda.

cd - Movernos por los directorios

Cuando necesitemos movernos por los directorios de nuestro sistema, tendremos que utilizar el comando cd (chage directory) de la misma forma que se hace en MS-DOS.

cd [directorio]

En el caso que cd se ejecute sin parámetros, cambiará al directorio personal o home directory del usuario.

Con la utilización del comando cd es bueno explicar conceptos como rutas relativas y rutas absolutas.

Ruta relativa

Si la ruta no comienza con / entonces se considera relativa a la ruta actual.
Ejemplo:

Estando situados el directorio usr de la raíz

$ cd etc/
$ cd /etc/

Referirse al directorio etc/ no es lo mismo que referirse al directorio /etc/, si nos encontramos en el directorio /usr/, la primera opción corresponde a /usr/etc/ mientras que la segunda corresponde a /etc/ del directorio raíz del sistema.

Ruta absoluta

Si la ruta comienza con / entonces hará referencia a una ruta en el directorio raíz.

pwd - Donde estamos trabajando

Para saber en qué directorio nos encontramos en un momento dado se utiliza el comando pwd (print working directory) sin opciones.

pwd
$ pwd
/usr/home/super

# Nos indica que estamos trabajando en el directorio home del usuario super.

mkdir - Crear directorios

El comando mkdir (make directory) de Linux, crea un nuevo directorio dentro del directorio actual o si especificamos la ruta absoluta en el directorio deseado.

mkdir [opciones] path

Si utilizamos la opción –p permite crear rutas completas de directorios vacíos.

$ mkdir programas

# Crea el directorio programas dentro del directorio actual.

$ mkdir /usr/home/super/programas

# Crea el directorio programas dentro del directorio del usuario super (este directorio de destino tiene que existir),

$ mkdir copias
$ cd copias
$ mkdir bases-datos
$ cd bases-datos
$ mkdir mysql

# Crea la ruta de carpetas copias/bases-datos/mysql en varios pasos.

$ mkdir –p copias/bases-datos/mysql

# Crea la ruta de carpetas copias/bases-datos/mysql en un solo paso.

rm - Eliminar directorios y archivos

Si bien en Linux existe el comando rmdir (remove directory) para la eliminación de directorios, este sólo actúa cuando están vacíos. En su lugar utilizaremos el comando rm (remove) que sirve para eliminar tanto archivos como directorios si se utiliza con la opción –r aunque no estén vacíos.

rm archivo
rm –r directorio
$ rm nombres.txt

# Elimina el archivo nombres.txt

$ rm -r copias

# Elimina el directorio copias y todo su contenido (achivos y subdirectorios).

cat - Mostrar contenido de archivos

Para mostrar el contenido de archivos de texto en la terminal sin tener que editarlos utilizaremos el comando cat.

cat archivo
$ cat /etc/passwd | more 

# Muestra el contenido del archivo de usuarios, haciendo una pausa por pantalla.

cp - Copiar archivos y directorios

El comando cp (copy) copia un archivo o directorio origen a un archivo o directorio destino.

cp [opciones] archivo_origen directorio_destino

Entre las opciones más importantes podemos comentar:

-fBorrar los archivos de destino ya existentes.
-nNo copia los archivos si ya existen en destino.
-pPreservar los permisos, el usuario y el grupo del archivo a copiar.
-RCopiar directorios recursivamente.
-vDa información en pantalla sobre los archivos que se van copiando.
$ cp enlaces.txt enlaces.bak

# Crea una copia del archivo enlaces.txt con el nombre enlaces.bak dentro del directorio actual

$ cp enlaces.txt copias

# Crea una copia del archivo enlaces.txt dentro del sub-directorio copias (se supone que copias es un directorio que tiene que existir).

$ cp –R ./* /mnt/datos/copias

# Copia todo el contenido del directorio actual al directorio copias situado en el punto de montaje datos.

mv - Mover archivos y directorios

Si deseamos mover un archivo o directorio tendremos que utilizar el comando mv (move), este comando mueve un archivo a una ruta específica, y a diferencia de cp, lo elimina del origen finalizada la operación.

mv archivo_origen directorio_destino

Al igual que cp, en la sintaxis se especifica primero el origen y luego el destino. Si indicamos un nombre de destino diferente, mv moverá el archivo o directorio con el nuevo nombre. Esta característica nos indica que también lo podemos utilizar para renombrar archivos.

$ mv nombres.txt /mnt/datos/copias

# Mueve el archivo nombres.txt al directorio copias del punto de montaje datos

$ mv nombres.txt direcciones.txt

# Renombra el archivo nombres.txt con direcciones.txt

find - Buscar archivos

Cuando tengamos que trabajar con un archivo y no sepamos donde se localiza, podremos utilizar comando find (buscar) de Linux que nos ayudará en esta tarea.

El comando find permite entre muchas otras opciones buscar ficheros en nuestro sistema

find punto_inicio [opciones]

punto_inicio indica el directorio a partir del cual tiene que empezar la búsqueda.

  • Si se escribe una ruta, la búsqueda la realizará a partir de esa ruta.
  • Si se escribe el carácter punto ., le estamos indicando que la búsqueda la realice a partir del directorio actual.
  • Si se escribe el carácter /, le estamos indicando que la búsqueda la realice a partir del directorio raíz del sistema lo que implica que buscará en todas las carpetas y subcarpetas del disco

Algunas de sus opciones de búsqueda para archivos/directorios más importantes son:

-name "patrón búsqueda" Coinciden con patrón búsqueda en el que se pueden utilizar caracteres comodin '*'
-iname "patrón búsqueda" Identico a -name pero no realiza distinción entre mayúsculas y minúsculas
-user Usuario De un usuario concreto
-perm permisos Con los permisos indicados
-group grupo De un grupo de usuarios
-type tipo_fichero Tipo determinado
-size tamaño Tamaño concreto. Las unidades de medida se especifican con las letras (k, M, G, T, P)
-not Negar la expresión de búsqueda
$ find . –name “nombres.txt”

# Busca el fichero nombres.txt a partir del directorio actual, siendo la búsqueda sensible a mayúsculas y minúsculas.

$ find / -iname “nombres.txt”

# Busca el fichero nombres.txt sin importar las mayúsculas y las minúsculas, a partir del directorio raíz, es decir; en todos los directorios del sistema.

$ find / -iname “*.config”

# Busca todos los ficheros que terminen con .config sin importar las mayúsculas y las minúsculas, a partir del directorio raíz, es decir; en todos los directorios del sistema.

$ find / -user super -name “*.php”

# Busca todos los ficheros que terminen con .php, pertenecientes al usuario super a partir del directorio raíz.

$ find /usr/local/www/apache24/data -not -name “*.php”

# Busca todos los ficheros que no terminen con .php dentro del directorio data de apache.

$ find / -group alumnos -size 500k

# Busca todos los ficheros de usuarios que pertenezcan al grupo alumnos que tengan un tamaño de 500kb.

ln - Crear enlaces entre archivos (accesos directos)

El comando ln (link) sirve para establecer enlaces entre archivos. Un enlace puede ser rígido o simbólico. El primer tipo es simplemente una forma de dar otro nombre a un archivo. Por ejemplo teniendo el archivo /etc/passwd, se puede hacer un enlace y tener el nuevo nombre en /home/usuario/claves, y ambos nombres de archivos refiriéndose al mismo archivo. El segundo tipo es parecido al primero, pero se pueden enlazar directorios, y además de diferentes sistemas de archivos. Este tipo de enlace es el que más se utiliza.

Para comprendelo mejor, un "enlace simbólico" no es más que una referencia (enlace) a una carpeta (directorio) o fichero que está situado en un lugar físico distinto.

La sintaxis del comando ln es:

ln [opciones] origen_enlace destino_enlace

Entre sus opciones la que más se utiliza es –s que nos permite crear enlaces simbólicos (accesos directos)

# Para el caso del ejemplo anterior, se debería ejecutar:

$ ln -s /etc/passwd /usr/home/super/claves

# Cuando se ejecuta ls -l en un directorio donde hay un enlace simbólico, éste se muestra de la siguiente manera:

$ ls -l claves
lrwxr-xr-x 1 super wheel 11 Feb 3 18:19 claves -> /etc/passwd
$ ln -s /mnt/webs_app/db/mysql /var/db/mysql

# Creamos un enlace a nuestra carpeta mysql que se encuentra en nuestro punto de montaje webs_app en la ruta /var/db con el nombre mysql, para que a la hora de almacenar las bd de mysql se realicen en otra carpeta de nuestro servidor

Usuarios

adduser - Crear usuarios

Cuando estemos logeados en el sistema con la cuenta de administrador, podremos añadir usuarios al sistema utilizando el script adduser.

Este script se encarga de crear nuevas entradas de usuario y grupo en los archivos del sistema passwd y groups respectivamente (cuentas de usuarios y grupos de usuarios), crea el directorio personal del usuario, copia los archivos de configuración (plantillas) de usuarios por defecto, crea el mensaje de bienvenida del usuario. Trabajar de forma interactiva en la que se van solicitando todos los datos necesarios para crear el usuario.

adduser
# adduser
 Username: nuevousr
 Full name: Nuevo usuario del sistema
 Uid (Leave empty for default):
 Login group [nuevousr]: wheel
 Login group is wheel. Invite nuevousr into other groups? []:
 Login class [default]:
 Shell (sh csh tcsh nologin) [sh]:
 Home directory [/home/ nuevousr]: /home/nuevo
 Home directory permissions (Leave empty for default):
 Use password-based authentication? [yes]:
 Use an empty password? (yes/no) [no]:
 Use a random password? (yes/no) [no]:
 Enter password:
 Enter password again:
 Lock out the account after creation? [no]:
 Username   : nuevousr
 Password   : *****
 Full Name  : Nuevo usuario del sistema
 Uid        : 1003
 Class      :
 Groups     : wheel
 Home       : /home/ nuevo
 Home Mode  :
 Shell      : /bin/sh
 Locked     : no
 OK? (yes/no): yes
 adduser: INFO: Successfully added (nuevousr) to the user database.
 Add another user? (yes/no): no
 Goodbye!

rmuser - Eliminar usuarios

El script rmuser nos permite eliminar usuarios de forma interactiva desde la línea de comando.

rmuser nombre_usuario
# rmuser nuevousr
 Matching password entry:
 nuevousr:*:1003:0::0:0:Nuevo usuario del sistema:/usr/home/nuevo:/bin/sh
 Is this the entry you wish to remove? y
 Remove user's home directory (/usr/home/nuevo)? y
 Removing user (nuevousr): mailspool home passwd.

# Elimina el usuario recién creado y todos sus datos personales como la carpeta home y sus archivos de correo.

pw - Modificar cualquier aspecto de las cuentas de usuarios

El comando pw es una utilidad de línea de comandos para crear, eliminar, modificar, y mostrar usuarios y grupos. Hace de interfaz a los archivos del sistema de usuarios y grupos. pw tiene un conjunto de opciones de línea de comandos bastante potente que lo hacen adecuado para su uso en scripts de Shell

Crear un usuario

Si deseamos crear un usuario por medio del comando pw la sintaxis sería:

pw useradd –n nombre_usuario –c “comentario” –d directorio_home –g grupo –s shell -m

-n    indica el nombre/login del usuario
-c    escribe un comentario en la entrada del archivo passwd. Por lo general se utiliza para indicar el nombre completo del usuario
-d    ruta a  la carpeta home del usuario. Si no existe tendremos que utilizar el parámetro -m.
-m   fuerza la creación de la carpeta home del usuario.
-g    indica el grupo principal al que pertenecerá el usuario. Si se omite se crea un nuevo grupo con el nombre del usuario
-s    ruta de acceso al intérprete de comandos que utilizará el usuario. Se puede elegir entre: sh, csh, tcsh y nologin, siendo este último el que indica que el usuario no puede iniciar sesión en el sistema en una terminal, el resto de los tipos de intérprete los encontramos en la ruta /bin.

# pw useradd -n nuevousr -c "Nuevo usuario del sistema" -m -d /usr/home/nuevo -s /bin/sh -g wheel

# Crea el usuario con login nuevousr, le asigna un comentario, crea su carpeta home, establece como intérprete de comandos sh y finalmente lo hace miembro del grupo Wheel.

Después de crear el usuario, tendremos que asignarle una clave con el comando passwd.

passwd [nombre_usuario]

Si no se especifica nombre_usuario se cambia el password del usuario actual.

# passwd nuevousr
 Changing local password for nuevousr
 New Password:
 Retype New Password:
 

# Establece la contraseña para el usuario nuevousr recién creado.

Eliminar usuario

Si deseamos eliminar un usuario por medio del comando pw la sintaxis sería:

pw userdel –n nombre_usuario –r 

-n indica el nombre/login del usuario
-r indica que también se eliminen todos sus archivos personales (carpeta home). Si se omite el usuario será eliminado, pero su carpeta personal con todos los archivos se conservarán.

Los correos y los archivos de tareas programadas del usuario (crontabs), se quitan siempre cuando se elimina una cuenta de usuario ya que estos están incondicionalmente unidos al nombre de usuario.

# pw userdel –n nuevousr -r

# Elimina el usuario nuevousr y todos sus datos personales como la carpeta home y sus archivos de correo.

Añadir un usuario a un grupo

pw groupmod nombre_grupo –M nombre_usuario
# pw groupmod www –M super

Añade al usuario super al grupo www

Eliminar un usuario de un grupo

pw groupmod nombre_grupo –d nombre_usuario
# pw groupmod www –d super

# Elimina al usuario super del grupo www

Mostrar los miembros de un grupo

pw groupshow nombre_grupo
# pw groupshow www
www:*:80:super
# pw groupshow wheel
wheel:*:0:root,super

# Muestran los miembros (usuarios) de los grupos www y wheel.

su - Sustituir a usuarios

Para la mayoría de las operaciones que vamos a realizar es necesario que tengamos privilegios de administrador, pero nuestro usuario (super creado durante la instalación) tiene privilegios altos pero no de administrador, por lo que necesitaremos convertirnos en root para poder realizar estas operaciones. Esto lo vamos a conseguir con un comando especial llamado su (substitute).

El programa su permite usar el intérprete de comandos de otro usuario sin necesidad de cerrar la sesión actual. Comúnmente se usa para obtener permisos de root para operaciones administrativas sin tener que salir y reentrar al sistema.

Cuando se ejecuta, su pide la contraseña de la cuenta a la se quiere acceder, y si es aceptada, da acceso a dicha cuenta.

su [usuario]

Si se omite usuario se accede como superusuario root

Una vez introducida la contraseña, podemos ejecutar los comandos como si fuésemos el otro usuario. Al escribir exit, volvemos a nuestro usuario.

Debido al nivel de privilegios que alcanzamos con este comando y la clave del root, sólo los usuarios que pertenezcan al grupo ‘wheel’ como nuestro usuario 'super', tienen permiso para ejecutarlo.

Permisos

chmod - Establecer permisos de archivos y directorios

El comando chmod (change mode) se utiliza para cambiar los permisos, se pueden otorgar o revocar sobre uno o más ficheros o directorios.

chmod [opciones] permisos archivo

Opciones:

-R El comando se extiende a los subdirectorios (recursivo)
-v Muestra los ficheros procesados por la orden
-c Es como –v pero sólo avisa de los que han sido modificados

Permisos:

Los archivos tienen 3 atributos básicos que definen el permiso.

  • Permiso de lectura (r)(para ver su contenido)
  • Permiso de escritura (w)(para modificar el contenido: añadir, escribir o borrar)
  • Permiso de ejecución (x)(puede ser ejecutado por el sistema: script o programa del sistema)

Los directorios tienen los mismos permisos pero con un significado diferente.

  • Permiso de lectura (r)(poder listar el contenido, ver los archivos que contiene )
  • Permiso de escritura (w)(podemos crear, eliminar o mover archivos al directorio)
  • Permiso de ejecución (x)(es tenido en cuenta a la hora de realizar búsquedas)

Estos permisos están repetidos tres veces, es decir se aplican o están almacenados en tres lugares diferentes según sean para:

  • Usuario (u)  el propietario
  • Grupo (g)  grupo de usuarios
  • Otros (o) resto de usuarios que no son ni el propietario y que no forman parte del grupo.

Para establecer los permisos sobre los archivos o directorios tenemos dos posibles formatos: en modo octal utilizando números o en modo de símbolos.

Modo Octal Modo Símbolos

La representación octal de chmod es muy sencilla
(r)Lectura tiene el valor de 4
(w)Escritura tiene el valor de 2
(x)Ejecución tiene el valor de 1

Si queremos otorgar varios permisos al mismo tiempo lo haremos sumando los respectivos números de los valores.

x-----x-----x--------------------------------x
| rwx |  7  | Lectura, escritura y ejecución |
| rw- |  6  | Lectura, escritura             |
| r-x |  5  | Lectura y ejecución            |
| r-- |  4  | Lectura                        |
| -wx |  3  | Escritura y ejecución          |
| -w- |  2  | Escritura                      |
| --x |  1  | Ejecución                      |
| --- |  0  | Sin permisos                   |
x-----x-----x--------------------------------x

Para establecer los valores de los tres bloques u,g y o se utiliza un nº de 3 dígitos donde el primer dígito corresponde con el permiso para u, el segundo dígito corresponde con el permiso para g y el tercer dígito corresponde con el permiso para o.

Se crean con la combinación: letra+/-permiso
Letra: u,g,o
+: otorgar -: revocar
Permiso:r,w,x
Si queremos otorgar o revocar varios permisos al mismo tiempo iremos colocando signo y permiso seguidos, precedidos de la letra del bloque sobre el que los queremos trabajar.
u+r+w              g+r-w+x
Si queremos otorgar o revocar permisos a varios bloques al mismo tiempo, seguiremos los mismos pasos indicados en el párrafo anterior, pero separando cada bloque por una coma ‘,’.
u+r+w,o-w      u+r+w+x,g+r+w+x,o+r-w+x

$ chmod 775 /home/usuario/claves.txt

# Establece todos los permisos para usuario y grupo y permiso de lectura y ejecución para el resto de usuarios sobre el fichero claves.txt

$ chmod 750 nombres.txt

# Establece todos los permisos para el propietario, lectura y ejecución para el grupo y ningún permiso para el resto de usuarios.

$ chmod u+r+w+x,g+r-w+x,o-r-w-x nombres.txt

# El mismo caso que el ejemplo anterior pero utilizando símbolos.

$ chmod –R 755 /mnt/datos/usuarios/Roberto

# Establece de forma recursiva para todos los archivos y subdirectorios del directorio Roberto los permisos de: todos para el propietario y de lectura y ejecución para el grupo y resto de usuarios.

$ chmod g+r+w /mnt/datos/usuarios/Roberto

# Establece permisos de lectura y escritura para el grupo sobre el directorio Roberto

$ chmod g+r+w,o+r-w Almacen

# Para el directorio Almacen, otorga los permisos de lectura y escritura al grupo y otorga permiso de lectura y revoca permiso de escritura para el resto de los usuarios

chown - Cambiar el propietario y grupo de un archivo o directorio

Cada archivo de Linux (FreeBSD) tiene un propietario y un grupo, que se corresponden con el usuario y el grupo de quien lo creó.

Con el comando chown (change file owner and group) permite cambiar precisamente el propietario y/o grupo de un archivo o directorio de nuestro sistema.

chown [opciones] propietario[:grupo] archivo

El usuario root puede cambiar el propietario de cualquier archivo o directorio. En algunos sistemas está restringido el cambio de propietarios por medio de chown para usuarios normales por motivos de seguridad.

Opciones:

-R El comando se extiende a los subdirectorios (recursivo)
-v Muestra los ficheros procesados por la orden
# chown super Almacen

# Establece como nuevo propietario del directorio Almacen al usuario super

# chown super:gestion Almacen

# Establece como nuevo propietario del directorio Almacen al usuario super y como grupo al que pertenece al grupo gestion

# chown –R super:gestion Almacen

# Realiza los mismos cambios que en el ejemplo anterior, pero extendiendo la ejecución a todos los archivos y subdirectorios de Almacen (recursivo).

Instalaciones

make / pkg - Comandos para instalaciones

FreeBSD ofrece dos tecnologías complementarias para instalar software de terceros en nuestro sistema: la Colección de Ports de FreeBSD y «packages»(paquetes) binarios. Cualquiera de los dos sistemas puede usarse para instalar las versiones más recientes, de forma local o directamente desde la red.

Cuando necesitemos instalar nuevos programas en nuestro sistema tendremos que utilizar los comandos para instalaciones. Para ejecutar estos comandos, tenemos que disponer de privilegios de administrador, por lo que antes de ejecutarlos es necesario cambiar a root con el comando su.

En cualquier caso será necesario tener una conexión a Internet ya que durante estos procesos se suelen descargar archivos para realizar las instalaciones.

(make) Instalación por paquetes sin compilar PORTS

Si durante la instalación de FreeBSD marcamos que se incluyeran los paquetes (ports), podremos realizar las instalaciones en modo local con los archivos que se encuentran en la carpeta /usr/ports. Este directorio incluye una estructura de subdirectorios agrupados por categorías (net, editors, databases, www, ftp, etc.) que forman la lista de los paquetes que podemos instalar, cada uno de los cuales está formado por un esqueleto de instalación.

El esqueleto de un port es un conjunto mínimo de ficheros que indican a FreeBSD cómo compilar e instalar un programa. Cada esqueleto incluye:

  • Un Makefile. Este fichero Makefile contiene diversas sentencias que le indican al sistema cómo compilarlo y dónde instalarlo en el sistema.
  • Un fichero distinfo. Este fichero contiene información sobre los ficheros que se debe descargar para poder compilar el programa, así como el identificador «checksum», que se usa para comprobar mediante md5 que la descarga ha sido correcta y que el la integridad del fichero está garantizada.
  • Un directorio files. Este directorio contiene los parches necesarios para compilar e instalar el programa en el sistema FreeBSD. Básicamente los parches son pequeños ficheros que especifican cambios en ficheros concretos.
  • Un fichero pkg-descr. Es una descripción más detallada del programa. En algunas ocasiones ocupa varias líneas
  • Un fichero pkg-plist. Es una lista de todos los ficheros que instalará el port. También le indica al sistema de ports qué ficheros eliminar durante la desinstalación del programa.

Para la realizar la instalación del paquete procederemos la siguiente manera:

Desplazarnos al directorio /usr/ports y buscar el paquete que deseamos instalar.

Una vez dentro del directorio del paquete ejecutar el comando make (compilar, crear, hacer)

make install clean

Básicamente este comando le indica al sistema que realice primero la compilación de los paquetes (make), a continuación la instalación de los paquetes compilados (install) y para finalizar que realice una limpieza (clean) de los archivos temporales creados durante la instalación

(pkg) Instalación por repositorios

Un repositorio es un servicio centralizado (servidor de archivos) accesible a través de Internet, donde se almacenan los paquetes de instalación de las distintas distribuciones de FreeBSD.

Si la instalación la realizamos a través de los repositorios de FreeBSD el proceso será más rápido puesto que los paquetes ya están compilados, pero se los tendrá que descargar primero del servidor ftp de FreeBSD para su posterior instalación.

Generalmente esta opción es más práctica que la de los ports, ya qe los repositorios suelen estar actualizados con las últimas versiones para nuestra distribución de FreeBSD.

Para la instalación de un programa desde los repositorios utilizaremos el comando pkg:

pkg install [paquete]     -> Instalar
pkg clean                 -> Elimina paquetes obsoletos de la cache de paquetes locales
pkg upgrade               -> Actualizar los paquetes instalados
pkg remove [paquete]      -> Desinstalar
pkg update [paquete]      -> Actualizar
pkg update -f             -> Forzar la actualización del catálogo de repositorio
pkg info [paquete]        -> Información de un paquete instalado
pkg info                  -> Información de todos los paquetes instalados
$ pkg install nano

# Instala el editor de textos nano y todas las dependencias necesarias en el sistema desde el repositorio de FreeBSD

$ pkg remove nano

# Desinstala el editor nano

$ pkg info
apache24-2.4.10_2         Version 2.4.x of Apache web server
apr-1.5.1.1.5.4           Apache Portability Library
db5-5.3.28_2              The Oracle Berkeley DB, revision 5.3
expat-2.1.0_2             XML 1.0 parser written in C
gdbm-1.11_2               GNU database manager
gettext-runtime-0.19.3    GNU gettext runtime libraries and programs
indexinfo-0.2.2           Utility to regenerate the GNU info page index
nano-2.2.6                Nano's ANOther editor, an enhanced free Pico clone
pcre-8.35_2               Perl Compatible Regular Expressions library
perl5-5.18.4_11           Practical Extraction and Report Language
pkg-1.4.6                 Package manager

# Muestra información de los paquetes instalados en el sistema

 # pkg update
 Updating FreeBSD repository catalogue...
 FreeBSD repository is up-to-date.
 All repositories are up-to-date.
#

# Actualiza el catálogo local del repositorio utilizado para descargar paquetes.

Apagar y Reiniciar el sistema

shutdown - Apagar el sistema

Si en algún momento dado tenemos que realizar tareas de mantenimiento del servidor o simplemente deseamos apagarlo, hay que asegurarse que todos los procesos en ejecución se finalizan de forma correcta y que todos los ficheros que estubieran abiertos sean cerrados.

Para la realización de esta tarea contamos con el comando shutdown (cerrar / detener) que se encarga de apagar el equipo de forma correcta.

shutdown [opciones] tiempo [mensaje]

Tiempo:

Tiene dos posibles formatos; puede ser una hora absoluta en formato hh:mm, donde hh representa la hora (uno o dos dígitos) y mm los minutos (con dos dígitos), también puede estar en formato +m, donde m es el numero de minutos que se debe esperar, la palabra now es un alias de +0.

Opciones:

-t segHace que init espere seg segundos entre el envío del aviso y las señales de apagado, antes de cambiar a otro nivel de ejecución.
-kNo apaga realmente, solo envía los mensajes de aviso a todos los usuarios.
-rReinicia tras el apagado.
-hParada tras el apagado.
-fOmite la comprobación del sistema de archivos (fsck) al reiniciar.
-ccancela un apagado en marcha, sin argumentos temporales.
$ shutdown -h +10

# Apaga el sistema transcurridos 10 minutos.

$ shutdown -r now

# Apaga el sistema de inmediato y después lo reinicia.

$ shutdown -h +5 “El sistema se apagara en 5 minutos”

# Apaga el sistema en 5 minutos y se envía un mensaje de alerta a los usuarios.

reboot - Reiniciar el sistema

Si simplemente deseamos reiniciar el sistema tras realizar una instalación o configuración del sistema podemos utilizar el comando reboot (reiniciar) sin argumentos. Este comando detendrá todos los procesos del sistema apagará la máquina y la pondrá de nuevo en marcha.

reboot

El comando reboot es equivalente a utilizar el comando shutdown –r now.

Programador de tareas

crontab - Crear tareas programadas

El servicio o demonio de Linux encargado del control de las tareas programadas es cron, que por medio del comando crontab nos permite gestionar las tareas programadas de un usuario del sistema.

Cron es el nombre del programa (demonio o servicio que sólo necesita ejecutarse en el arranque del sistema) que permite a usuarios Linux/Unix ejecutar automáticamente comandos o scripts (grupos de comandos) a una hora o fecha específica. Es usado normalmente para comandos de tareas administrativas, como respaldos, pero puede ser usado para ejecutar cualquier cosa.

Para gestionar las tareas programadas del sistema utilizamos el comando crontab.

crontab [-u usuario] -e | -l | -r

Opciones:

-u usuarioIndica el usuario para el que se crea la tarea programada. Si se omite se asume que es para el usuario actual.
-eCrea una nueva tarea programada o edita las tareas programadas del usuario.
-lMuestra un listado de las tareas programadas.
-rElimina todas las tareas programadas actualmente.

Formato de la tarea programada:

Minuto Hora DiaDelMes Mes DiaDeLaSemana Comando
CampoDescripción
MinutoControla el minuto de la hora en que el comando será ejecutado, este valor debe de estar entre 0 y 59.
HoraControla la hora en que el comando será ejecutado, se especifica en un formato de 24 horas, los valores deben estar entre 0 y 23, 0 es medianoche.
DiaDelMesDía del mes en que se quiere ejecutar el comando. Por ejemplo se indicaría 20, para ejecutar el comando el día 20 del mes.
MesMes en que el comando se ejecutará, puede ser indicado numéricamente (1-12), o por el nombre del mes en inglés, solo las tres primeras letras.
DiaDeLaSemanaDía en la semana en que se ejecutará el comando, puede ser numérico (0-7) o por el nombre del día en inglés, solo las tres primeras letras. (0 y 7 = domingo)
ComandoComando, script o programa que se desea ejecutar. Este campo puede contener múltiples palabras y espacios.

Al utilizar un ‘*’ en alguno de los argumentos de fecha (Minuto, Hora, DíaDelMes, Mes, DíaDeLaSemana), implica incluir todos los posibles valores para ese argumento, es decir; si especificamos un * como valor de hora significa que se ejecute todas las horas del día.

Algunos ejemplos:

15 * * * *Se ejecuta al minuto 15 de cada hora de todos los días
30 9 * * *A las 9:30 a.m. de cada día
15 22 * * *A las 11:15 p.m. / 22:15 de cada día
00 14 * * 0A las 2 p.m. todos los domingos (los días de la semana comienzan en domingo=0, lunes=1, martes=2, etc..)
* 5 * * SunCada minuto de 5:00 a.m. a 5:59a.m. todos los domingos

También es posible indicar incrementos o intervalos de valores:

10 */2 * * *Indica en el minuto 10 de cada 2 horas, día, mes y día de la semana (es decir se ejecutará 6 veces cada 2 horas del día durante toda la semana del mes)
*/5 * * * *Indica cada 5 minutos de cada hora, día, mes y día de la semana (es decir se ejecutará cada 5 minutos de cada hora del día durante toda la semana del mes)
10,30,50 * * * 1,3,5Indica el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes

Cuando creamos una nueva tarea programada con la opción -e, el comando crontab utiliza por defecto el editor de textos vi el cual es muy potente pero engorroso de utilizar.

Si deseamos modificar el editor utilizado por el comando debemos establecer la variable de entorno EDITOR por medio del comando setenv o simplemente realizando una asignación con el valor del editor deseado.

Suponiendo que hemos iniciado sesión con el usuario super, vamos a crear una tarea programada, comprobar que se ha guardado y luego la vamos a eliminar.

$ setenv EDITOR=ee ó EDITOR=ee
$ crontab –e
# A la 1 de la mañana de todos los lunes, miércoles y jueves, vaciar el directorio logs del usuario
* 1 * * 1,3,5 rm –f /usr$HOME/logs/* > /dev/null
$ crontab –l
* 1 * * 1,3,5 rm –f /usr$HOME/logs/* > /dev/null
$ crontab –r
remove crontab for super? y
$

 

Procesos

En todo sistema operativo nos encontramos programas en ejecución. Estos códigos ejecutables son los llamados procesos del sistema.

Cada proceso en ejecución viene identificado por un número único llamado ID. El primer proceso en ejecutarse en nuestro sistema es el proceso ‘init’ que tiene asociado un ID (identificador) de 1, y es el encargado de crear/lanzar el resto de los procesos necesarios para que nuestro sistema funcione de forma correcta. Cada nuevo proceso generado por init es a su vez capaz de crear nuevos procesos, lo que genera el llamado árbol de procesos del sistema.

Como ya hemos comentado cada proceso viene identificado por un número único denominado ID o PID y por el identificador del proceso que lo ha creado llamado PPID o proceso padre.

Por ejemplo si tenemos un ‘proceso A’ con PID 100 que lanza un nuevo ‘proceso C’ con PID 105, el PPID del nuevo proceso será 100.

Árbol de procesos

Identificadores

  • PID (Identificación del proceso)
  • PPID (Identificación del proceso padre)
  • PGID (Identificación del grupo o grupos a los que pertenece el proceso)
  • SID (Identificación de la sesión)

ps - Estado de los procesos

Para mostrar una instantánea de los procesos actuales que se están ejecutando y su estado se utiliza el comando ps (process status).

ps <opciones>

Este comando muestra una línea de cabecera seguida de una serie de líneas de información con los procesos del usuario actual, que se ejecutan en terminales. La información se ordena por terminal y la ID (PID) del proceso que se está ejecutando.

Cabecera básica de información:

PID TT STAT TIME COMMAND
ID del proceso Terminal Estado del proceso Tiempo de CPU Orden que se está ejecutando o que se ha ejecutado

Estados de un proceso:

  • D  Proceso que esté en espera en el disco.
  • M Proceso que está en reposo (en espera durante aproximadamente más de 20 segundos).
  • R Proceso ejecutable.
  • S Proceso que está en reposo por menos de aproximadamente 20 segundos.
  • T Proceso detenido.
  • Z Proceso de muertos (un `` zombi '').

Opciones:

-e Visualiza información sobre "todos" los procesos del sistema.
-j Visualiza información sobre el PGID y SID.
-l Visualiza "mucha" información sobre los procesos (listado largo).
-a Muestra también los procesos de otros usuarios.
-x Muestra procesos que no están controlados por ninguna terminal.
-U usuario Visualiza información de los procesos de un usuario.
-u Muestra información ampliada de los procesos

Ejemplos

Visualización por defecto de los procesos del usuario.

# ps
 PID TT  STAT    TIME COMMAND
 872 v0  Is+  0:00,00 /usr/libexec/getty Pc ttyv0
 873 v1  Is+  0:00,00 /usr/libexec/getty Pc ttyv1
 874 v2  Is+  0:00,00 /usr/libexec/getty Pc ttyv2
 875 v3  Is+  0:00,00 /usr/libexec/getty Pc ttyv3
 876 v4  Is+  0:00,00 /usr/libexec/getty Pc ttyv4
 877 v5  Is+  0:00,00 /usr/libexec/getty Pc ttyv5
 878 v6  Is+  0:00,00 /usr/libexec/getty Pc ttyv6
 879 v7  Is+  0:00,00 /usr/libexec/getty Pc ttyv7
 907  1  I    0:00,01 su
 908  1  S    0:00,03 _su (csh)
1071  1  R+   0:00,00 ps

Mostrar los procesos de todos los usuarios

# ps -a
 PID TT  STAT    TIME COMMAND
 872 v0  Is+  0:00,00 /usr/libexec/getty Pc ttyv0
 873 v1  Is+  0:00,00 /usr/libexec/getty Pc ttyv1
 874 v2  Is+  0:00,00 /usr/libexec/getty Pc ttyv2
 875 v3  Is+  0:00,00 /usr/libexec/getty Pc ttyv3
 876 v4  Is+  0:00,00 /usr/libexec/getty Pc ttyv4
 877 v5  Is+  0:00,00 /usr/libexec/getty Pc ttyv5
 878 v6  Is+  0:00,00 /usr/libexec/getty Pc ttyv6
 879 v7  Is+  0:00,00 /usr/libexec/getty Pc ttyv7
1103  0  Ss   0:00,00 -sh (sh)
1104  0  S+   0:00,00 ee
 906  1  Is   0:00,00 -sh (sh)
 907  1  I    0:00,01 su
 908  1  S    0:00,03 _su (csh)
1105  1  R+   0:00,00 ps -a

Visualizar los procesos de todos los usuarios incluyendo los que no se ejecutan en terminal en formato completo.

# ps -aux
USER    PID  %CPU %MEM     VSZ    RSS TT  STAT STARTED      TIME COMMAND
root     11 200,0  0,0       0     32  -  RL    6:29AM 203:09,49 [idle]
root      0   0,0  0,0       0    160  -  DLs   6:29AM   0:00,10 [kernel]
root      1   0,0  0,0    9476    852  -  ILs   6:29AM   0:00,03 /sbin/init --
root      2   0,0  0,0       0     32  -  DL    6:29AM   0:00,54 [cam]
root      3   0,0  0,0       0     16  -  DL    6:29AM   0:00,00 [sctp_iterator]
root      4   0,0  0,0       0     32  -  DL    6:29AM   0:00,16 [pagedaemon]
root      5   0,0  0,0       0     16  -  DL    6:29AM   0:00,00 [vmdaemon]
root      6   0,0  0,0       0     16  -  DL    6:29AM   0:00,00 [pagezero]
root      7   0,0  0,0       0     32  -  DL    6:29AM   0:00,09 [bufdaemon]
root      8   0,0  0,0       0     16  -  DL    6:29AM   0:00,02 [vnlru]
root      9   0,0  0,0       0     16  -  DL    6:29AM   0:00,12 [syncer]
root     10   0,0  0,0       0     16  -  DL    6:29AM   0:00,00 [audit]
root     12   0,0  0,0       0    224  -  WL    6:29AM   0:02,43 [intr]
root     13   0,0  0,0       0     48  -  DL    6:29AM   0:00,02 [geom]
root     14   0,0  0,0       0     16  -  DL    6:29AM   0:00,64 [rand_harvestq]
root     15   0,0  0,0       0    128  -  DL    6:29AM   0:00,15 [usb]
root    116   0,0  0,1   12352   1776  -  Is    6:29AM   0:00,00 adjkerntz -i
root    286   0,0  0,2   13624   4720  -  Is    6:29AM   0:00,00 /sbin/devd
root    370   0,0  0,1   14520   2108  -  Ss    6:29AM   0:00,01 /usr/sbin/syslogd -s
mysql   537   0,0  0,1   17088   2548  -  Is    6:29AM   0:00,02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --user=mysql --datadir=
mysql   746   0,0 11,9 1235204 245984  -  I     6:29AM   0:01,65 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/
clamav  750   0,0 16,9  420888 350228  -  Is    6:29AM   0:00,00 /usr/local/sbin/clamd
clamav  753   0,0  0,8   64712  15552  -  Is    6:30AM   0:00,00 /usr/local/bin/freshclam --daemon -p /var/run/clamav/freshclam.pid
root    772   0,0  0,3   61224   7044  -  Is    6:30AM   0:00,01 /usr/sbin/sshd
root    777   0,0  1,6  365728  32364  -  Ss    6:30AM   0:00,17 /usr/local/sbin/httpd -DNOHTTPACCEPT
root    792   0,0  0,3   24136   5972  -  Ss    6:30AM   0:00,06 sendmail: accepting connections (sendmail)
smmsp   795   0,0  0,3   24136   5684  -  Is    6:30AM   0:00,00 sendmail: Queue runner@00:30:00 for /var/spool/clientmqueue (sendmail)
root    799   0,0  0,1   16612   2344  -  Is    6:30AM   0:00,01 /usr/sbin/cron -s
www     810   0,0  1,6  365728  32400  -  I     6:30AM   0:00,00 /usr/local/sbin/httpd -DNOHTTPACCEPT
…
…
…
…

Mostrar los procesos de un usuario.

# ps -U www
PID TT  STAT    TIME COMMAND
810  -  I    0:00,00 /usr/local/sbin/httpd -DNOHTTPACCEPT
811  -  S    0:00,01 /usr/local/sbin/httpd -DNOHTTPACCEPT
812  -  I    0:00,00 /usr/local/sbin/httpd -DNOHTTPACCEPT
814  -  I    0:00,00 /usr/local/sbin/httpd -DNOHTTPACCEPT
815  -  I    0:00,00 /usr/local/sbin/httpd -DNOHTTPACCEPT
# ps -U clamav
PID TT  STAT    TIME COMMAND
750  -  Is   0:00,00 /usr/local/sbin/clamd
753  -  Is   0:00,00 /usr/local/bin/freshclam --daemon -p /var/run/clamav/freshclam.pid

Mostrar los procesos por su PID.

# ps 872,810,750,1104
 PID TT  STAT    TIME COMMAND
 750  -  Is   0:00,00 /usr/local/sbin/clamd
 810  -  I    0:00,00 /usr/local/sbin/httpd -DNOHTTPACCEPT
 872 v0  Is+  0:00,00 /usr/libexec/getty Pc ttyv0
1104  0  I+   0:00,00 ee

top - Uso de la CPU y recursos del sistema

Para mostrar el uso de la CPU y otros recursos del sistema en tiempo real que hacen los procesos y programas en ejecución disponemos del comando top (Top Cpu Process) que realiza una auditoría del sistema actualizando periódicamente la información cada 2 segundos por defecto.

top <opciones>

Este comando se ejecuta normalmente en lo que se suele llamar una terminal inteligente, lo que le permite estar mostrando la información actualizada en la terminal de forma ininterrumpida hasta que ejecutemos el comando ‘q’ para finalizar el análisis. Se utilizarán tantas líneas de información como líneas disponibles tenga la terminal, aunque está cantidad se puede variar a nuestro gusto por medio de sus opciones.

# top
last pid:  1019;  load averages:  0.23,  0.29,  0.26                up 0+01:19:39  10:19:56
38 processes:  1 running, 37 sleeping
CPU:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
Mem: 498M Active, 178M Inact, 193M Wired, 48K Cache, 162M Buf, 1103M Free
Swap: 2048M Total, 2048M Free

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME    WCPU COMMAND
  753 clamav        1  52    0 64712K 15932K pause   0   0:10   0.00% freshclam
  750 clamav        2  20    0   411M   343M select  0   0:10   0.00% clamd
  746 mysql        28  20    0  1206M   238M uwait   0   0:01   0.00% mysqld
  884 super         1  20    0 86492K  7472K select  1   0:00   0.00% sshd
  777 root          1  20    0   357M 32364K select  0   0:00   0.00% httpd
  792 root          1  20    0 24136K  5972K select  0   0:00   0.00% sendmail
  898 super         1  20    0 86492K  7472K select  1   0:00   0.00% sshd
  895 root          1  20    0 86492K  7464K select  1   0:00   0.00% sshd

La información se divide en dos bloques un bloque de resumen y bloque de procesos:

Resumen del estado actual de los recursos del sistema (Bloque de resumen):

  • Tiempo que lleva en nuestro sistema en funcionamiento (up)
  • Cantidad de tareas/procesos (% processes): en ejecución (% running), en modo de espera (% sleeping)
  • Uso actual de la CPU: usuarios (% user), sistema (% system), interrupciones (% interrupt), libre (% idle)
  • Uso de la memoria física (RAM):  usada (% Active), inactiva (% Inact), paginada (% Wired), en cache (% Buf) y libre (% idle).
  • Uso de la memoria virtual (SWAP): total (% Total) y libre (% Free).

Lista de procesos en ejecución (Bloque de procesos):

  • (PID) Identificador del proceso en ejecución. Cada proceso en ejecución tiene un pid único que lo identifica.
  • (USERNAME) Usuario propietario del proceso.
  • (PRI) Prioridad del proceso. Un nº más alto indica una prioridad más elevada de ejecución.
  • (SIZE) Tamaño del proceso. Se tienen en cuenta texto, datos y pila.
  • (RES) Cantidad actual de memoria residente. Al igual que SIZE se muestra en Kb o Mb utilizados.
  • (STATE) Estado del proceso. En espera, pausados, procesos zoombies (procesos que no están en ejecución porque su proceso padre PPID ha sido eliminado), cpu en la que se está ejecutando, etc.)
  • (C) Procesador en el que se está ejecutando.
  • (TIME) Tiempo de uso de la CPU utilizado por el proceso.
  • (WCPU) Porcentaje de la CPU utilizado desde la última actualización.
  • (COMMAND) Comando que generó el proceso.

Opciones interactivas

Mientras se está ejecutando el comando top, podemos ir estableciendo una serie de opciones que se llaman opciones interactivas.

Opción Efecto
q finalizar la ejecución del comando top
u usuario|+ Mostrar los procesos de un usuario en concreto. Si indicamos el signo ‘+’ se mostrarán para todos los usuarios.
Si deseamos establecer el usuario por medio de una opción en la línea de comandos, utilizaremos -Uusuario.
d número Número de actualizaciones a mostrar antes de finalizar la ejecución del comando. Por defecto son infinitas.
Si deseamos establecer el nº de actualizaciones desde la línea de comandos utilizaremos la opción. -dnúmero.
n número Total de líneas que deseamos mostrar en el listado de procesos. Por defecto son todas las líneas disponibles en nuestra terminal.
Si deseamos establecer la cantidad de líneas desde la línea de comandos simplemente indicaremos su nº al final del resto de las opciones.
s segundos Segundos de espera para realizar la actualización de datos. Por defecto son 2 segundos.
a Cambia la información del comando en ejecución (COMMAND) de nombre del comando a ruta completa más opciones de ejecución actuales. Por defecto se muestra sólo el nombre del comando.
P Cambia la información del uso de la CPU en el bloque de resumen de uso global a uso individual por núcleo del procesador. Por defecto se muestra el uso global del procesador.
o columna Ordenar el listado por una determinada columna. (pri, size, res, cpu, time, threads, jid, pid)

Ejemplos

Muestra un listado de 15 líneas de los procesos en ejecución:

// Desde la línea de comandos
# top 15
// De forma interactiva
# top
n 15

Mostrar listado de 10 líneas de los procesos del usuario root

// Desde la línea de comandos
# top –Uroot 10
// De forma interactiva
# top
n 10
u root

Mostrar los procesos realizando una actualización cada 5 segundos, ordenando el listado por prioridades.

// Deforma interactiva
# top
s 5
o pri

kill - Matar/Finalizar procesos

Cuando deseamos finalizar algún proceso debido a un error de ejecución, porque se nos ha quedado bloqueado o porque simplemente deseamos finalizarlo sin esperar a que finalice por si sólo, disponemos del comando kill.

kill PID | kill –s NombreSeñal PID | kill –NumeroSeñal PID

El comando kill envía una señal de finalización al proceso identificado por su PID.

Enviar señal de detenerse a un proceso con PID 995.

# kill 995

Enviar señal de detenerse al proceso 995.

# kill -s STOP 995

Continuar el proceso 995 detenido.

# kill -s CONT 995

Detener inmediatamente el proceso 995.

# kill -7 995 ó kill –s KILL 995

Enviar señal de detenerse a los procesos 995, 658 y 457 al mismo tiempo.

# kill 995 658 457