Академический Документы
Профессиональный Документы
Культура Документы
Linux
Sumario
1 Introducción______________________________________________________3
4 Metacaracteres ___________________________________________________12
11 El editor vi ______________________________________________________30
15 Dispositivos _____________________________________________________42
20 SWAP __________________________________________________________52
Historia
Los sistemas UNIX, de los que existen distintas variantes, nacieron en ambientes académicos y de
investigación, pensados para máquinas grandes que debían ser utilizadas por muchos usuarios. En
consecuencia, sus mecanismos de protección y cooperación entre grupos de trabajo están muy
desarrollados, y sus sistemas de ficheros (FS) cuidan especialmente los aspectos de propiedad y
privilegios sobre ficheros y directorios (quién puede hacer qué cosas sobre ellos). En consecuencia, los
ficheros y directorios tienen más atributos que en los sistemas FAT.
Linux se inspiró en Minix, un dialecto simplificado de UNIX, del que tomó su FS "tal cual" (sin
modificación). Sin embargo, el FS de este último adolecía de conocidas deficiencias. Principalmente
16
que su sistema de anotación de bloques es de 16 bits, lo que limita su capacidad a 2 = 65.536
bloques; que el número de entradas por directorio es fijo, y que el tamaño máximo para los nombres es
de 14 caracteres.
Características generales
En los FS UNIX, los metadatos están contenidos en estructuras denominadas inodes, y al igual que en
los sistemas FAT, los directorios son ficheros cuyos datos contienen información sobre otros ficheros.
Una característica distintiva es que cada fichero pertenece a un usuario y a un grupo propietario Otra
característica distintiva es que los dispositivos de E/S están representados por ciertos ficheros
especiales (pseudo-ficheros). De forma que las operaciones de E/S con los periféricos se virtualizan
como operaciones de lectura/escritura en estos ficheros.
Existen cuatro tipos de ficheros: los regulares o normales (que responden al concepto tradicional de
contenedor de datos de usuario); directorios (con información sobre otros ficheros); ficheros de
dispositivo ("Device files") y enlaces simbólicos ("Symbolic links"). Estos últimos no tienen contrapunto
en los sistemas MS-DOS, aunque si en Windows y siguientes; son los denominados accesos directos.
La sucesión de directorios atravesados hasta alcanzar un nombre de archivo se denomina ruta o vía
(path). Ejemplo: /home/alberto/documentos/carta01.txt.
Una ruta es absoluta cuando arranca del directorio raíz: /bin/elvis. El directorio donde está trabajando un
usuario en el momento se denomina directorio actual. Una ruta es relativa cuando arranca del directorio
actual: documentos/carta01.txt.
No existen limitaciones para dar nombre a los archivos, salvo no usar el carácter / o caracteres nulos.
Para usar espacios en blanco, los nombres deben encerrarse entre comillas, ya que el espacio en
blanco actúa como separador en los comandos.
crea un archivo del nombre indicado, con un espacio en blanco entre las dos palabras. Para realizar
cualquier operación sobre este archivo será necesario usar las comillas, o escapar el carácter en blanco
usando \:
rm "nuevo archivo"
rm nuevo\ archivo
Ejemplos:
Supongamos que tenemos un archivo cuyo nombre es listado en el directorio /home/pepe.
Queremos ver en pantalla el contenido de dicho archivo utilizando la orden cat.
Si utilizamos el modo absoluto, teclearemos:
cat /home/pepe/listado
Directorios principales
/ Es el directorio raíz, de él cuelgan todos los sistemas de archivos locales,
remotos, CD-Roms, etc.
/boot Archivos estáticos arranque del sistema (boot loader)
/etc Contiene los archivos de configuración del sistema.
/usr Mandatos, programas, librerías y datos que el usuario habitualmente no
modifica o que son de uso compartido.
/var Se almacenan datos variables.
/dev Archivos de definición de dispositivos.
/home Directorios para los archivos de cada usuario.
/mnt Punto de montaje de sistemas de ficheros temporales
/tmp Ficheros Temporales.
Cada directorio listado será discutido en detalle en una subsección separada más delante. /usr y /var,
cada uno tiene en su propia sección en este documento.
El kernel de Linux estaría localizado en, ya sea / ó en /boot. Si está localizado en / recomendamos usar
el nombre VMLINUX o VMLINUZ, nombres que han sido usados en paquetes fuentes del kernel de
Linux recientes. Más información de la localización del kernel se puede encontrar en la sección acerca
de / más delante.
Ningún binario debe ir directamente dentro de /etc. Los binarios que en el pasado se encontraban en
/etc, irán en /sbin ó /usr/sbin. Ésto incluye archivos tales como init, getty y update. Los binarios tales
como hostname que son utilizados por usuarios ordinarios y por root no irían en /sbin sino en /bin.
/etc/X11 es el lugar recomendado para todos los archivos de configuración de X11 locales a la máquina.
Este directorio es necesario para permitir el control local si /usr se monta sólo-lectura. Los archivos que
deben ir en este directorio incluyen Xconfig (y/o XF86Config) y Xmodmap.
Los subdirectorios de /etc/X11 pueden incluir aquellos para xdm y para cualquier otro programa (como
algunos gestores de ventanas por ejemplo) que lo necesiten. Recomendamos que los gestores de
ventanas con un solo archivo de configuración que es un archivo .*wmrc por defecto, que lo llamen
system.*wmrc (a menos que exista una alternativa ampliamente aceptada) y que no utilice un
subdirectorio. Cualquier subdirectorio de un gestor de ventanas se llamaría idéntico al binario del gestor
de ventanas.
La Jerarquía /var
/var Información variable
/var contiene archivos con información variable. Esto incluye archivos y directorios con información
administrativa, archivos temporales y transitorios.
Algunas porciones de /var son no-compartibles entre diferentes sistemas. Por ejemplo, /var/log,
/var/lock y /var/run. Otras porciones son compartibles, notablemente /var/spool/mail y /var/spool/news.
/var se especifica aquí para hacer posible el montar /usr sólo-lectura. /Todo aquello que alguna vez fué
en /usr que es escrito durante la operación normal del sistema (pero no durante la instalación y el
mantenimiento del software) debe ir en /var.
Si /var no puede ser una participación separada, es preferible mover /var fuera de la participación raíz
pero dentro de la partición /usr (esto se hace algunas veces para reducir el tamaño de la partición raíz o
cuando hay poco espacio en la partición raíz). Como sea, /var no debe ser enlazada a /usr, porque hace
que la separación entre /usr y /var sea más difícil y seguramente creará un conflicto de nombres, en vez
de eso usar enlace /var a / usr/var.
/usr es la segunda mayor sección del sistema de archivos. /usr es información compartible, de sólo-
lectura, esto significa que /usr, debe ser /compartible entre varias máquinas que corren Linux y no se
debe /escribir. Cualquier información que es local a una máquina o varía con el /tiempo, se almacena en
otro lugar.
Los siguientes enlaces simbólicos a directorios pueden estar presentes. Esta posibilidad se basa en la
necesidad de preservar la compatibilidad con sistemas anteriores hasta que en todas las
implementaciones se pueda asumir el uso de la jerarquía /var.
Éste es el directorio de los dispositivos. Contendría un archivo por cada dispositivo que el kernel de
Linux puede soportar.
dev también contiene un script llamado MAKEDEV el cual puede crear /dispositivos cuando se
necesiten. Puede contener un MAKEDEV local para /dispositivos sólo-local.
MAKEDEV debe hacer previsión para crear cualquier archivo de dispositivo especial listado en la lista
de números mayores/menores, no sólo aquellos de una distribución particular.
Los enlaces simbólicos no se deben distribuir en sistemas Linux, sino sólo como se preveé en la lista
de dispositivos de Linux. Esto es porque las instalaciones locales seguro diferirán de aquellas de la
máquina del desarrollador. Además si un script de instalación configura enlaces simbólicos en la
instalación, estos enlaces seguramente no se actualizarán si se hacen cambios locales en el hardware.
/home es un concepto algo estándar, pero es claramente un sistema de archivos específico de un site.
El arreglo diferirá de máquina a máquina. Esta sección describe una localización sugerida para los
directorios hogar (home) de los usuarios, aun así, recomendamos que todas las distribuciones Linux
usen este lugar como la localización por defecto de los directorios de usuarios.
En sistemas pequeños, cada directorio de usuario es uno de los subdirectorios debajo de /home, p.ej.
/home/smith, /home/torvalds, /home/operador, etc.
En sistemas grandes (especialmente cuando los directorios /home son compartidos entre varias
máquinas usando NFS) es útil subdividir los directorios de usuario. La subdivisión puede ser llevada a
cabo utilizando subdirectorios tales como /home/apoyo, /home/huéspedes, /home/estudiantes, etc.
Muchas personas prefieren poner las cuentas de los usuarios en una variedad de lugares. Por tanto,
ningún programa deberá confiar en esta localización. Si usted desea encontrar el directorio hogar de
cualquier usuario, debería usar la función de librería getpwent(3) en vez de contar con /etc/passwd, por
que la información puede estar almacenada remotamente usando usando sistemas como NIS.
El directorio /lib contiene aquellas imágenes de las librerías compartidas que se necesitan para arrancar
el sistema y ejecutar los comandos en el sistema de archivos raíz.
/lib --- librerías compartidas y módulos de kernel esenciales. Modulos de kernel cargables.
Esto incluye /lib/libc.so.*, /lib/libm.so.*, el enlazador dinámico compartido /lib/ld.so.*, y otras librerías
compartidas requeridas por binarios en /bin y /sbin.
Las librerías que son necesitadas sólo por los binarios en /usr (como cualquier binario de X Window) no
pertenecen a /lib. Sólo las librerías compartidas requeridas para ejecutar los binarios dentro de /bin y
/sbin deben estar aquí. La librería libm.so.* podría estar localizada en /usr/lib si no es requerida por
nada en /bin ó /sbin.
Por razones de compatibilidad, /lib/cpp necesita existir como una referencia al pre-procesador C
instalado en el sistema. La localización usual del binario es /usr/lib/gcc-lib/<target>/<version>/cpp.
Puede existir un enlace/lib/cpp apuntando a este binario o a cualquier otra referencia a este binario que
exista en el sistema de archivos. (Por ejemplo, /usr/bin/cpp se usa frecuentemente).
Este directorio se ha provisto para que el administrador pueda montar temporalmente sistemas de
archivos cuando lo necesite. El contenido de este directorio es un asunto local y no debe afectar la
manera en la cual se ejecuta ningún programa.
El sistema de archivos /proc se está convirtiendo en el estándar de facto para el manejo de información
de procesos y de sistema en vez de /dev/kmem y otros métodos similares. Recomendamos
fuertemente esto para el almacenamiento y obtención de información de procesos asi como otra
información del kernel y de memoria.
El directorio / es tradicionalmente el directorio home del usuario root en los sistemas UNIX. /root se usa
en muchos sistemas Linux y en algunos sistemas UNIX. El directorio hogar de la cuenta de el usuario
root puede ser determinada por el desarrollador o por preferencias locales. Las posibilidades obvias
incluyen /, /root, y /home/root.
Si el directorio hogar de root no está almacenado en la partición raíz, será necesario asegurarse que
tome / por defecto si no puede ser localizado.
Los útiles (programas) usados por la administración del sistema (y otros comandos que sólo root utiliza)
están almacenados en /sbin, /usr/sbin, y /usr/local/sbin. /sbin típicamente contiene binarios esenciales
para arrancar el sistema además de los binarios en /bin. Cualquier cosa que se ejecuta después de que
se sabe que /usr se ha montado (cuando no hay problemas) debería estar en /usr/sbin. Los binarios de
administración de sistema sólo-locales deben estar localizados en /usr/local/sbin.
Decidir que cosa va en los directorios de /sbin es sencillo: Si un usuario necesitará ejecutarlo, debe de ir
en otro lado. Si sólo será ejecutado por el administrador del sistema o por root como scripts de
administración, entonces debe ir en /sbin (o en /usr/sbin o en /usr/local/sbin, si el archivo no es vital para
la operación del sistema).
Archivos que los usuarios usan sólo ocasionalmente deben aun estar en /usr/bin. Ej. ping aunque es
absolutamente necesario para el root (recuperación de la red y diagnóstico) es tambien frecuentemente
usado por los usuarios y por esa razón debe ir en /bin.
Los usuarios ordinarios no tendrán que poner ninguno de los directorios sbin en su búsqueda (path).
Recomendamos que los usuarios tengan permisos de lectura y ejecución en todo lo que se encuentra
en /sbin excepto tal vez ciertos programas; setuid y setgid. La división entre /sbin y /bin no fue creada
por motivos de seguridad o para evitar que los usuarios vieran el sistema operativo, sino para proveer
una buena partición entre binarios que todos usan y los que se usan, principalmente las tareas de
administración. No hay ganancia inherente en seguridad en hacer que /sbin este fuera del alcance de
los usuarios.
tmp se utiliza para archivos temporales, preferentemente en un dispositivo rápido (un sistema de
archivos basado en memoria por ejemplo)
Los programas deben utilizar /tmp ó /var/tmp (que era originalmente /usr/tmp) de acuerdo a los
requerimientos esperados de la información, pero no deben confiar en alguna persistencia temporal
particular en cualquier directorio de almacenamiento temporal.
Los administradores de sistemas pueden elegir enlazar /tmp a algún otro directorio, tal como /var/tmp;
esto es útil, por ejemplo, para conservar espacio en la partición raíz. Si esto se lleva a cabo, entonces la
persistencia de archivos en /var/tmp debe ser al menos tan larga como la de /tmp.
/tmp puede estar en la memoria RAM. /var/tmp no debe nunca localizarse en algún dispositivo RAM.
Además de ejecutar los comandos que nosotros le indicamos, el shell interpreta ciertos caracteres
especiales, a estos caracteres los llamamos metacaracteres.
Cuando nosotros utilizamos algún metacaracter, los comandos no lo reciben, sino que el shell lo
reemplaza por lo que corresponda, y le pasa al comando ejecutado el resultado de ese reemplazo.
Eso es lo que entendemos por interpretar: reemplazar el caracter por otro caracter o por una cadena de
caracteres, según corresponda.
*
Cuando el shell encuentra un *, lo reemplaza por una lista de los archivos que concuerdan con
la expresión indicada.
Por ejemplo: echo * nos mostrará todos los archivos del directorio. echo a* nos mostrará
todos los archivos del directorio que comiencen con a. echo *o nos mostrará todos los
archivos que terminen con o. echo /usr/local/* nos mostrará todos los archivos que estén
en ese directorio.
En el caso de que no hubiera ningún archivo que concuerde con la expresión, generalmente,
nos mostrará la expresión que hayamos escrito.
?
Al encontrar un ? el shell lo reemplaza por cualquier otro caracter. Es decir que la expresión
que escribamos se reemplazará por todos los archivos que en esa posición tengan cualquier
caracter, y en el resto de la cadena tengan lo que hemos escrito.
Por ejemplo: echo ?ola nos podría mostrar archivos como hola, sola, Pola. echo a??a,
podría mostrar alla, arca, asia.
Al igual que con el *, si ningún archivo concuerda con el patrón, generalmente, nos muestra la
misma expresión que hemos escrito.
[]
Encerrados por los corchetes, podemos escribir un rango de caracteres con los cuales
queremos que el shell concuerde.
Por ejemplo, ls [af]* nos mostrará todos los archivos que comienzan con a o con f.
Podemos además especificar un rango de caracteres, con un guión en el medio. Por ejemplo,
a-z (letras minúsculas), 0-9 (números), etc. y combinarlos con caracteres individuales siempre
que no sea ambigua la interpretación. (Considerar la concordancia con el caracter -).
Por ejemplo, podemos querer sólo los archivos que comienzan con números seguidos de un -,
en ese caso escribiríamos ls [0-9]-*} o ls [0-9][0-9]-*, si comienzan con dos
números seguidos de un -.
Ejecutar un comando es tan sencillo como escribir el comando y apretar ENTER. Sin embargo,
utilizando algunos de los metacaracteres de shell podemos combinar los comandos entre sí, y lograr
resultados mucho más importantes.
;
El ; es un separador de comandos, nos permite ejecutar un comando a continuación de otro,
equivalente a lo que sucedería si ejecutáramos primero uno, y al terminar ejecutáramos el
siguiente.
Es decir si escribimos ls; echo Hola veremos la salida del echo a continuación de la del
ls.
()
Los paréntesis sirven para encerrar grupos de comandos, y tratarlos como si fueran uno solo.
&
El & manda el comando a background, esto quiere decir, que nos devuelve la línea de
comandos inmediatamente después de apretar Enter, mientras el comando sigue ejecutándose
en segundo plano.
La ejecución de tareas en segundo plano ya se ha estudiado anteriormente, cuando se vieron
los comandos relacionados con procesos. Este metacaracter funciona de manera equivalente, y
sus resultados pueden corroborarse utilizando el comando jobs.
Para ver un ejemplo, vamos a usar un nuevo comando, sleep, (un comando simple que
espera una determinada cantidad de segundos). Por ejemplo sleep 5, espera 5 segundos
antes de devolvernos la línea de comandos.
Ahora, utilizando &: (sleep 20; echo Hola) &. Al escribirlo nos mostrará el PID del
comando que estamos ejecutando, y nos devolverá el shell; 20 segundos después, veremos
aparecer "Hola" en nuestra línea de comandos.
Antes de que termine de ejecutarse, podemos ejecutar jobs y observar que el proceso se está
ejecutando, o bien ps y observar que el comando en ejecución es sleep.
Ejercicio: hacer un comando equivalente que nos avise que ya pasaron los cinco minutos
necesarios para que hierva una pava de agua.
Además, el & nos puede servir para separar comandos: cada vez que lo utilizamos para separar
comandos, mandará al comando que esté a su izquierda a background.
'...'
Al encontrar una cadena encerrada entre ' ', el shell tomará el contenido de la cadena
literalmente, es decir, sin interpretar los metacaracteres contenidos en ella.
Por ejemplo, echo '* ?* [A-Z-]*' nos mostrará * ?* [A-Z-]*.
Notar que si no cerramos las comillas y apretamos ENTER, el shell nos mostrará una línea en
blanco esperando que sigamos ingresando nuestro comando, hasta que cerremos las comillas.
Utilizamos una \ para escapar el siguiente caracter. Escapar significa que el shell no lo
interpretará como un metacaracter.
Por ejemplo echo \* nos mostrará un *.
#
El # es el señalador de comentario. Si el shell encuentra un # al comienzo de una palabra,
descartará todos los caracteres hasta en final de línea. Por ejemplo, echo 3.1416 # Pi con
un error de 0.0001 nos mostrará únicamente 3.1416.
Redirección de entrada y salida UNIX tiene un extenso manejo de entrada y salida, es una de las
características principales que nos permite combinar pequeñas herramientas para lograr resultados
más complejos.
La mayoría de los comandos UNIX que nosotros utilizamos tienen una entrada estándar, una salida
estándar y una salida para errores estándar. Las denominamos stdin, stdout y stderr respectivamente.
La entrada estándar por omisión es el teclado, mientras que la salida estándar y la salida de errores
son, por omisión, la pantalla.
Un comando genérico, lee datos de la entrada estándar, los procesa de alguna manera, y luego emite el
resultado por la salida estándar. En el caso de que durante el proceso hubiera algún error, emitirá una
aviso de ese error por la salida de errores.
El Shell se encarga de relacionar estos tres, lo cual no impide que un determinado programa maneje su
entrada y su salida de una manera diferente.
El caracter < nos permite direccionar la entrada estándar de un comando desde un archivo. Por
ejemplo, el comando mail nos sirve para mandar mensajes a otros usuarios, si escribimos
mail user < archivo mandará un mensaje con el contenido del archivo al usuario user.
Usar un >> en lugar de un > nos permite direccionar la salida estándar a un archivo, sin
sobreescribirlo, sino que le agrega los datos que nosotros queramos al final. Si ahora hacemos
ps ax >> procesos tendremos el listado de procesos dos veces en un mismo archivo.
2
Utilizar 2> nos permite redirigir la salida de errores a un archivo. Por ejemplo, si ejecutamos ls
archivo-feo 2> test, el error del ls, indicándonos que el archivo-feo no existe se
almacenará en test.
Para relacionar la salida estándar de un comando, con la entrada estándar de otro comando,
utilizamos el caracter |. Por ejemplo, podemos relacionar la salida de ls con la entrada de wc.
Haciendo ls | wc, la salida d este comando será la cantidad de líneas, palabras y caracteres.
Este comando recibe el nombre de pipe, que en inglés significa cañería o tubería. Es decir que
es un comando que entuba la salida de un comando con la entrada de otro.
ls
Lista el contenido de un directorio. Si lo ejecutamos sin parámetros nos listará el contenido del
directorio en que nos encontremos. Si lo ejecutamos pasándole como parámetro la ruta (relativa o
absoluta) de otro directorio nos listará ese otro.
Modificadores:
-l Listado detallado
-al Listado detallado y mostrando archivos ocultos (los archivos ocultos en UNIX son todos
aquellos cuyo nombre empiece por un punto (.)
Ejemplos:
Si estamos en /home/pepe:
cd
Cambia de directorio. Si lo ejecutamos sin ningún parámetro nos lleva a nuestro directorio
home. Si como parámetro le damos el nombre de un directorio nos lleva hasta ese directorio.
Ejemplos:
Si estamos en /home/pepe:
pwd
Muestra en pantalla el directorio de trabajo actual. Es una orden muy útil sobre todo cuando
vamos a hacer alguna operación delicada. Está bien, por ejemplo, antes de eliminar todos los archivos
del directorio actual, asegurarse de cuál es ese directorio.
Crea un directorio. Le pasamos como parámetro el nombre del directorio que queremos crear.
Ejemplos:
Si estamos en /home/pepe:
rmdir
Elimina un directorio. Para poder eliminar un directorio con esta orden es necesario que el
directorio esté vacío.
Ejemplos:
Estando en /home/pepe:
cp origen destino
Copia uno o más archivos. Se pueden copiar de un directorio a otro, cambiarles el nombre y
copiarlos sobre el mismo directorio, etc.
Ejemplos:
cp /etc/passwd /home/pepe
Copia el archivo /etc/passwd en el directorio /home/pepe con nombre passwd.
cp /etc/passwd /home/pepe/p
Copia el archivo /etc/passwd en el directorio /home/pepe con nombre p.
cp * /home/pepe
Copia todos los archivos del directorio actual en /home/pepe.
cp /home/pepe/* .
Copia todos los archivos de /home/pepe en nuestro directorio actual.
mv origen destino
El funcionamiento es el mismo que para el comando cp con la diferencia que en vez de copiar
los archivos, se mueven. A no ser que se esté muy seguro de la orden es totalmente correcta es mejor
optar siempre por copiar los archivos con cp y después eliminarlos con rm.
Elimina uno o más archivos. Esta orden no tiene vuelta atrás así que es conveniente
asegurarse de cuál va a ser el resultado de la operación antes de usarla.
Modificadores:
-i Solicita confirmación antes de eliminar cada archivo.
Ejemplos:
rm –i * Elimina todos los archivos del directorio actual con
confirmación.
rm .* Elimina todos los archivos ocultos del directorio actual.
y todos los no ocultos del directorio anterior.
rm *.model Elimina todos los archivos .model del directorio actual.
rm /home/pepe/* Elimina todos los archivos del directorio /home/pepe.
ln -s archivo link
Crea un link de un archivo o directorio. Lo que hace esta orden es crear un archivo o directorio
virtual que en realidad apunta a donde el archivo o directorio real esta almacenado. De este modo
podemos, por ejemplo, hacer que se acceda a un mismo archivo o directorio desde varios lugares del
sistema.
Modificadores:
-s El tipo de link que utilizamos necesita el parámetro –s para ser creado (soft)
Ejemplos:
ln -s /DBCATIA/ENV/PRJ01.env PRJ01
Crea un link en el directorio actual hacia el archivo /DBCATIA/ENV/PRJ01.env
ln -s /disco2/DBCATIA /DBCATIA
Crea un link en /DBCATIA que apunta al directorio /disco2/DBCATIA
tar
Modificadores:
-cvf Este modificador indica que lo que queremos es empaquetar archivos.
-xvf Este modificador indica que queremos hacer la operación contraria.
-tvf Este modificador nos permite comprobar el contenido de un paquete sin
desempaquetarlo.
Ejemplos:
tar -cvf /tmp/paquete.tar *
Empaqueta todos los archivos y directorios del directorio actual en /tmp/paquete.tar
su - usuario
Cambia de usuario. Si el usuario en que queremos convertirnos (pepe por ejemplo) tiene
password, el sistema nos lo solicitará.
Ejemplos:
ps
Muestra por pantalla los procesos que se están ejecutando en ese momento.
Modificadores:
-ef Nos muestra los procesos de todos los usuarios y no solo los de nuestro usuario.
Ejemplos:
La salida típica de este comando en pantalla es la siguiente:
#ps -ef
UID PID PPID CPU STIME TTY TIME CMD
juperez 17882 5458 0 10:19:25 - 0:00 /bin/bsh /bin/bsh /bin/bsh
juperez 18584 1 0 Jul 18 - 0:02 dtfile
root 19978 7224 0 15:21:45 - 0:00 telnetd -a
root 21264 7224 0 17:03:44 - 0:00 telnetd -a
juperez 21730 18584 0 15:18:55 ? 0:00 dtterm -e /usr/dt/bin/dtexec
juperez 24068 24794 0 15:18:05 - 0:01 /usr/dt/bin/dtterm
Lo usaremos siempre con el parámetro -9 y nos servirá para matar procesos que se hayan
quedado colgados. Para ello primero averiguamos el número de proceso que queremos matar
utilizando el comando ps y a continuación lo matamos haciendo kill -9 #proceso.
Ejemplos:
kill -9 18584 Con esta línea mataríamos el proceso dtfile de la lista anterior.
Ejemplo:
more /var/ifor/nodelock Muestra en pantalla el contenido del archivo
date
Muestra o cambia la fecha y hora del sistema. Para cambiarla es necesario ser root.
Modificadores:
MMddhhmmAA M=mes, d=dia, h=hora, m=minuto, A=año
Ejemplos:
date Muestra la fecha y la hora en pantalla.
date 0125150000 Pone la fecha a 25 de enero de 2000 a las 15:00 horas.
Montaje.
#df -k
Nos muestra todos los sistemas de archivos que hay montados y información sobre ellos. La
salida típica de este comando en una máquina IBM de producto es la siguiente:
root@ITW:/> df -k
Sist_archivos Bloq-1024 Libre %Uso Ius %Ius Montado en
/dev/hd4 49152 36720 26% 1990 9% /
/dev/hd2 1425408 403516 72% 34421 10% /usr
/dev/hd9var 16384 14180 14% 551 14% /var
/dev/hd3 32768 29936 9% 66 1% /tmp
/dev/hd1 16384 7908 52% 62 2% /home
/dev/PEPE 131072 14420 89% 2329 8% /home/pepe
srvprod:/DBCATIA 512000 402304 22% 2659 3% /DBCATIA
ctbar1:/F/PRODUCTE2 4095980 2742504 34% 0 0% /PRODUCTE2
La primera columna nos indica el nombre del sistema de archivos y en el caso de que sea
remoto (/DBCATIA y /PRODUCTE2) nos indica la máquina en la que se encuentra físicamente
almacenado (srvprod y ctbar1).
La segunda columna nos indica el tamaño del sistema en Kbytes y la tercera cuántos de esos
Kbytes están libres.
La cuarta columna nos indica el porcentaje de utilización del FS.
La última columna nos indica el punto de montaje de dicho sistema de ficheros.
coloca el sistema de archivos almacenado en el disco /dev/sda0 bajo el directorio /usuarios; para ver el
contenido del sistema de archivos en disco, en lo sucesivo se hará ls /usuarios.
desmonta el sistema de archivos anterior del directorio /usuarios, impidiendo el acceso a los archivos
contenidos en el disco. Para poder ejecutar umount no debe haber archivos abiertos, ni usuarios en
directorios de la rama a desmontar, ni procesos corriendo cuyos ejecutables residan en él.
En la extensión semántica ya indicada, el término sistema de archivos se emplea así para designar la
totalidad del árbol de directorios, formado en realidad por partes de diferente organización lógica y
naturaleza física.
#fsck -p
verifica la integridad de todos los sistemas de archivos según figuran en /etc/fstab (o su equivalente);
#mount -a
Si el intento de desmontar un sistema de archivos fracasa por encontrarse éste ocupado, el comando
fuser indicará los números de proceso y los nombres de usuario que lo ocupan.
• mke2fs. Crear un sistema de ficheros ext2 en una partición vacía. Equivale a la utilidad
format en los sistemas FAT.
• tune2fs. Una herramienta para usuarios avanzados que permite ajustar determinados
parámetros de funcionamiento del sistema de ficheros ext2.
• e2fsck. Comprobar la integridad del sistema de ficheros. Esta utilidad es capaz de detectar y
corregir numerosas inconsistencias. Resulta especialmente útil después de una incidencia. Por
ejemplo, un apagado imprevisto. Es el equivalente ext2 a la utilidad scandisk de los sistemas
FAT DOS/Windows.
• debugfs. Es una herramienta de bajo nivel que permite examinar y modificar distintos
aspectos de un sistema de ficheros ext2. Atención, debugfs puede resultar tan peligrosa
como su homónima debug del DOS ( DEBUG). Por lo que no es aconsejable hacer pruebas
con ella sobre un sistema de explotación.
En UNIX cada archivo o directorio existente tiene unos permisos de acceso. Esos permisos se
pueden definir de modo independiente para el usuario propietario del archivo, para su grupo y para el
resto de usuarios que no pertenecen a ese grupo.
La primera columna de letras y guiones es la que define cuáles son los permisos de cada archivo o
directorio.
El primer carácter de esa columna nos dice si la entidad es un archivo (-), directorio (d) o link (l). Los
siguientes tres caracteres son los permisos del propietario (en este caso siempre root). Los tres
siguientes los del grupo (system) y los tres últimos los del resto de usuarios que no son root ni
pertenecen a system.
r permiso de lectura
w permiso de escritura
x permiso de ejecución (si es un archivo)
permiso de entrada (si es un directorio)
Por tanto si nos encontramos que un directorio tiene los permisos del siguiente modo "drwxr-xr-x"
podemos ver que su propietario podrá leer, escribir y entrar en ese directorio y tanto los miembros de
su grupo como el resto de usuarios solamente podrán entrar en el directorio y leer su contenido pero
no escribir en el.
Para poder gestionar y cambiar los permisos de archivos y directorios primero hay que traducir
la cadena tipo "rwxrw-r--" a un número. El funcionamiento de la conversión es el siguiente:
El número siempre tendrá tres cifras y cada una de ellas se obtiene con un grupo de tres letras o
guiones.
rwx = 7 -wx = 3
rw- = 6 -w- = 2
r-x = 5 --x = 1
r-- = 4 --- = 0
Modificadores:
-h Cambia también los permisos de archivos y directorios apuntados por un link.
-R Cambia el propietario y el grupo recursivamente en todos los archivos y directorios a
partir del punto en que ejecutamos la orden.
Ejemplos:
chmod 777 cube.model
Cambia los permisos de cube.model a rwxrwxrwx
chmod 777 *
Cambia todos los archivos a rwxrwxrwx
chown
Cambia el propietario y el grupo al que pertenecen uno o más archivos o directorios.
Modificadores:
-h Cambia también el propietario y el grupo de archivos y directorios apuntados por un link.
-R Cambia el propietario y el grupo recursivamente en todos los archivos y directorios a
partir del punto en que ejecutamos la orden.
Ejemplos:
chown catadm:catia *
Todos los archivos y directorios pertenecerán al usuario catadm y al grupo catia.
La idea detrás de diferentes sistemas operativos puede ser usada de diversas maneras. Alguno
servicios no pueden ser usados hasta que el sistema esté de un determinado modo, o mode, como por
ejemplo más de un usuario o que tenga disponibilidad de red.
Existen veces en las que desea operar con el sistema en un modo bajo, como por ejemplo al establecer
problemas de corrupción de disco en el nivel de ejecución 1, en los que ningún usuario puede estar en
el sistema o puede dejar un servidor en un nivel de ejecución 3 sin ejecutar un sesión X. En estos
casos, ejecutar servicios que dependan de un modo de sistema más alto para su funcionamiento no
tiene sentido porque no funcionarán correctamente de ninguna de las maneras. Teniendo asignado
cada servicio para iniciar cuando se alcanza su nivel de ejecución en concreto, le asegura un proceso
de arranque ordenado puede cambiar de forma rápida el modo de la máquina sin preocuparse sobre los
servicios que inician y paran manualmente.
• 0 — Parar
• 6 — Rearrancar
El nivel de ejecución por defecto para que un sistema arranque y se pare está configurado en
/etc/inittab.
Si lo desea puede configurar niveles de ejecución 2 y 4. Muchos usuarios configuran aquellos niveles de
ejecución en un modo que tiene mucho más sentido y dejan los niveles de ejecución estándar 3 y 5
solos. Esto permite que se muevan en el interior de la configuración personalizada sin interrumpir la
configuración normal de las características en los niveles de ejecución estándar.
Si está usando LILO como gestor de arranque, puede arreglar el fichero inittab reiniciando el equipo,
accediendo al intérprete de comandos boot::
• En la pantalla gráfica del gestor de arranque GRUB, seleccione la etiqueta de arranque por
ejemplo: Red Hat Linux y pulse [e] para editarla.
• Pulse la flecha hacia abajo hasta la línea del kernel y presione [e] para editarla.
• Volverá a la pantalla de GRUB con la información del kernel. Pulse [b] para arrancar el sistema
en modo monousuario.
Arrancará un sistema muy escueto y dispondrá de una shell de comandos desde la que puede hacer
ajustes.
mount -n /proc
mount -o rw,remount /
Utilidades initscript
La utilidad /sbin/chkconfig proporciona una herramienta de línea de comandos sencilla para
mantener la jerarquía del directorio /etc/rc.d/init.d. Evita que los administradores del sistema
tengan que manipular de forma directa los numerosos enlaces simbólicos en los directorios bajo
/etc/rc.d.
Además, existe /sbin/ntsysv que proporciona una interfaz basada en texto mucho más sencilla de
usar que la interfaz de la línea de comandos chkconfig.
En Red Hat si prefiere una interfaz gráfica, use el programa Herramienta de configuración de
servicios, que puede ser invocado usando el comando redhat-config-services.
Uso de Telnet
Telnet es un comando que nos permite iniciar una sesión en una máquina remotamente
utilizando el puerto 23. Simplemente tenemos que escribir el comando telnet nombre de maquina o ip y
estaremos conectando a esa máquina remotamente como si estuvieramos sentados delante de ella.
Una vez hayamos iniciado una sesión telnet podemos utilizar todos los comandos que hemos visto
hasta el momento para el manejo de archivos, directorios, permisos, sistemas de ficheros, etc.
Uso de ftp
Ftp es la abreviatura de File Transfer Protocol. Es una orden que nos sirve para enviar archivos
o recibirlos desde otra máquina utilizando el puerto 21. Antes de ejecutar la orden ftp nombre o ip de
máquina es conveniente que nos situemos, en la máquina local, en el directorio donde queramos recibir
o desde el que queramos enviar los ficheros en cuestión.
La siguiente cuestión que debemos plantearnos al realizar un FTP es si los ficheros que vamos
a enviar o recibir son binarios o de texto. Un modelo de catia, por ejemplo, es binario. Un archivo de
declaraciones (dcls) es de texto. Si no sabemos si el archivo es binario o de texto no tenemos más que
mostrarlo por pantalla utilizando la orden cat. Si es binario en la pantalla aparecerán símbolos extraños
y posiblemente la máquina pitará. Si es de texto, lógicamente, saldrá por pantalla un texto legible.
Nota:
Si un usuario no tiene password no puede hacerse un ftp con ese usuario.
SSH está diseñado para reemplazar los métodos comunes para registrarse remotamente en otro
sistema a través de la shell de comando. El programa scp reemplaza otros programas diseñados para
copiar ficheros entre hosts como por ejemplo ftp o rcp. Ya que estas aplicaciones antiguas no
encriptan contraseñas entre el cliente y el servidor, las evita siempre que sea posible. El uso de
métodos seguros para registrarse remotamente a otros sistemas hará disminuir los riesgos de
seguridad para ambos sistemas y el sistema remoto.
Una gran cantidad de programas de cliente y servidor puede usar el protocolo SSH, incluyendo muchas
aplicaciones open source a disposición gratuita. Hay varias versiones de cliente diferentes de SSH a
disposición para casi todos los sistemas operativos más importantes en uso actualmente.
OpenSSH tiene dos conjuntos diferentes de ficheros de configuración, uno para los programas del
cliente (ssh, scp, y sftp) y el otro para los servicios del servidor (sshd), ubicados en dos sitios
diferentes.
La información de configuración SSH para todo el sistema está almacenada en el directorio /etc/ssh
La información para la configuración SSH específica para el usuario está almacenada en el directorio
principal ~/.ssh/:
SCP
SCP es un comando para copiar ficheros entre distintas maquinas utilizando como protocolo de
comunicación SSH.
Ejemplos:
El editor vi es con toda probabilidad el editor de textos menos amigable e intuitivo que pueda
existir pero en contrapartida tiene una gran ventaja. Es el único editor de textos que podemos asegurar
que estará instalado en cualquier sistema UNIX que nos encontremos por ahí así que vale la pena
conocer su uso aunque sea de modo básico.
vi nombre_archivo
Este comando nos lleva a la pantalla de edición donde se nos muestra el contenido del archivo
o bien a una pantalla vacía si el archivo es nuevo.
Modo comandos:
Cuando vi arranca se encuentra en modo comandos, esto significa que el editor esta preparado
para recibir una orden, no para que escribamos. Si estamos escribiendo podemos pasar también al
modo comandos pulsando la tecla <ESC> del teclado.
Modo inserción:
En modo inserción el editor se comporta de forma 'normal' y nos deja teclear texto.
Tanto en modo inserción como en modo comandos las flechas del cursor nos permiten movernos por el
documento.
Antes de poder ejecutar Linux en un sistema, deberá iniciar un programa especial llamado gestor de
arranque. El programa de gestor de arranque existe en el disco duro primario del sistema o en los
dispositivos de medios y es responsable de la carga del kernel de Linux y de los ficheros necesarios, o,
en algunos casos, de otros sistemas operativos en la memoria.
Cada arquitectura del sistema que pueda ejecutar Linux usa un gestor de arranque diferente. Por
ejemplo, la arquitectura Alpha usa el gestor de arranque aboot, mientras que la arquitectura Itanium
usa el gestor de arranque ELILO. Este capítulo explica comandos y opciones de configuración para los
dos cargadores de arranque para la arquitectura x86: GRUB y LILO. Son los mas comunes.
GRUB
GNU GRand Unified Boot loader o GRUB consiste en un programa que habilita al usuario a seleccionar
qué sistema operativo instalado o kernel descargar en el tiempo de arranque del sistema. Permite
también que el usuario transmita argumentos al kernel.
1. La etapa 1 o cargador de arranque primario se lee en la memoria con el BIOS desde el MBR[1].
El gestor de arranque primario existe en menos de 512 bytes de espacio en disco entre el MBR.
Lo único que hace es cargar el gestor de arranque de la etapa 1.5 o la etapa 2.
El método de arranque usado para arrancar Red Hat Linux se conoce como método de carga directa
porque el gestor de arranque carga el sistema operativo directamente. No existe punto medio entre el
gestor de arranque y el kernel.
El proceso de arranque usado por otros sistemas operativos será diferente. Por ejemplo, los sistemas
operativos de Microsoft DOS y Windows, así como otros sistemas operativos de propiedad, se cargan
mediante un método de arranque de carga de cadena. Bajo este método, el MBR señala el primer
sector de la partición al sostener el sistema operativo. A continuación encuentra los ficheros necesarios
para arrancar ese sistema operativo.
Nombres de dispositivos
GRUB denominará al primer disco duro de un sistema (hd0). A la primera partición de dicho disco, le
denominará (hd0,0) y a la quinta partición del segundo disco duro (hd1,4). En general, la
nomenclatura utilizada para los sistemas de ficheros al usar GRUB se desglosa del siguiente modo:
(<tipo-de-dispositivo><número-dispositivo-
bios>,<número-partición>)
Los paréntesis y las comas son muy importantes en el nombre. <tipo-de-dispositivo> hace
referencia a si es un disco duro (hd) o una unidad de disquete (fd).
Nombres de ficheros
Al escribir comandos en GRUB que hagan referencia a un fichero, como una lista de menús que debe
usarse para permitir el arranque de varios sistemas operativos, debe incluir el fichero inmediatamente
después de especificar el dispositivo y la partición. Una especificación de fichero de ejemplo que haga
referencia a un nombre de fichero absoluto se organiza del modo siguiente:
(<tipo-de-dispositivo><número-dispositivo-
bios>,<número-
partición>)/ruta/a/fichero
• Este comando se puede configurar de distintas maneras. Sin embargo, debe especificar el valor
<nivel- 1>, que representa un dispositivo, una partición y un fichero donde se puede
encontrar la imagen del gestor de arranque principal, por ejemplo (hd0,0)/grub/stage1.
Además, debe especificar el disco en el que el gestor de arranque del Nivel 1 deberá instalarse,
por ejemplo (hd0).
• La sección <nivel-2> indica al gestor de arranque del Nivel 1 la ubicación del gestor de
arranque del Nivel 2, por ejemplo (hd0,0)/grub/stage2. La opción p Indica al comando
install que se ha especificado un fichero de configuración en la sección <fichero-
configuración>, por ejemplo (hd0,0)/grub/grub.conf.
Para el sistema Red Hat Linux, es probable que tenga una línea similar a la siguiente:
kernel /vmlinuz root=/dev/hda5
Esta línea especifica que el fichero vmlinuz se carga desde un sistema de ficheros raíz de
GRUB, por ejemplo, (hd0,0). También se transfiere una opción al kernel que especifica que el
sistema de ficheros raíz del kernel del Linux debe encontrarse, al cargarse, en hda5,la quinta
partición en el primer disco duro IDE. Después de esta opción se pueden insertar varias
opciones, si es necesario.
• root <dispositivo-y- partición> — Configura la partición raíz de GRUB para que sea
el dispositivo y la partición concreta, por ejemplo, (hd0,0), y monta la partición de modo que
se puedan leer los ficheros.
Hay otros comandos disponibles aparte de los indicados. Escriba info grub para obtener una lista
completa de los comandos
Los comandos siguientes sólo pueden usarse en el fichero de configuración de menú de GRUB:
LILO es un acrónimo de LInux LOader y se usado siempre para arrancar linux en sistemas x86 para
muchos años. Aunque GRUB es el gestor de arranque por defecto, algunos prefieren usar LILO porque
les es más familiar y otros porque GRUB puede causar problemas al arrancar determinado tipo de
hardware.
LILO se carga a sí mismo en la memoria casi de forma idéntica a GRUB, con la diferencia de que es un
gestor de dos etapas.
1. La etapa 1 o el gestor de arranque primario se lee en al memoria por la BIOS desde el MBR[1].
El gestor de arranque primario existe en menos de 512 bytes de espacio en disco dentro del
MBR. Su función es cargar la etapa 2 del gestor de arranque y pasarle la información de la
geometría del disco.
3. La etapa 2 lee el sistema operativo o el kernel y lleva a cabo initrd en memoria. Una vez que
LILO determina qué sistema operativo iniciar, éste lo carga en la memoria y lleva el control de la
máquina a ese sistema operativo.
Una vez que se ha llevado a cabo la etapa 2 en memoria, LILO visualiza la pantalla inicial de Red Hat
Linux con los diferentes sistemas operativos o kernel que han sido configurados para arrancar. Si posee
Red Hat Linux instalado y no ha cambiado nada en el fichero de configuración de LILO, verá tan sólo
linux como una opción. Si instala el soporte del kernel SMP, verá linux-up como una opción. Si ha
configurado LILO para arrancar otro sistema operativo, esta pantalla le da la posibilidad de seleccionar
qué sistema operativo arrancará. Use las teclas de flechas para evidenciar el sistema operativo y pulse
[Enter].
Si desea tener un intérprete de comandos para introducir un comando a LILO, pulse [Ctrl]-[X]. LILO
visualiza un intérprete LILO: en la pantalla y espera la entrada desde el usuario.
Opciones en /etc/lilo.conf
El comando /sbin/lilo -v -v accede al fichero de configuración de LILO, /etc/lilo.conf, para
determinar lo que desea escribir en el MBR. Necesitará saber cómo modificar este fichero.
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
lba32
default=linux
image=/boot/vmlinuz-2.4.0-0.43.6
label=linux
initrd=/boot/initrd-2.4.0-0.43.6.img
read-only
root=/dev/hda5
other=/dev/hda1
label=dos
• boot=/dev/hda advierte a LILO para instalar el primer disco duro en el primer controlador
IDE.
• map=/boot/map localiza el fichero del mapa. En uso normal, éste debería ser modificado.
• install=/boot/boot.b hace que LILO instale el fichero específico como el nuevo sector de
arranque de boot. En un uso normal, esto no debería ser alterado. Si falta la línea install,
LILO asumirá /boot/boot.b predeterminado como el fichero que se usará.
• La existencia de prompt hace que LILO le muestre cualquier cosa que haga referencia a la
línea message. No se le recomienda que elimine la línea prompt, si la elimina, podrá obtener
un intérprete manteniendo pulsada la tecla [Shift] mientras que su máquina empieza a arrancar.
• timeout=50 configura la cantidad de tiempo que LILO esperará la entrada del usuario antes
de proceder con el arranque de la entrada de la línea default. Esto se mide en décimas de
segundo, con 50 por defecto.
• lba32 describe la geometría del disco duro para LILO. Otra entrada común es linear. No
debería cambiar esta línea a menos de que sea consciente de lo que está haciendo. De lo
contrario, pondría su sistema en un estado de no arranque.
• default=linux se refiere al sistema operativo por defecto para LILO para arrancar desde las
opciones listadas bajo esta línea. El nombre linux se refiere a la línea label en cada una de
las opciones de arranque.
• label=linux nombra la opción del sistema operativo en la pantalla de LILO. En este caso, es
también el nombre al que se refiere la línea default.
• read-only especifica que la partición de root (vea root line below) sea sólo-lectura y no
pueda ser alterada durante el proceso de arranque.
• root=/dev/hda5 advierte a LILO de la partición del disco a usar como la partición de root.
Las comunicaciones de red acontecen entre interfaces, que son dispositivos de networking conectados
al sistema, configurados de un modo determinado y usando un protocolo, al menos, para intercambiar
datos con otros sistemas.
Los ficheros de configuración para las diferentes interfaces de red y scripts para activarlos o
desactivarlos están ubicados en el directorio /etc/sysconfig/network-scripts. Mientras que la
existencia de ficheros de interfaces particulares puede diferir de sistema a sistema dependiendo del
uso, los tres tipos de ficheros diferentes que existen en este directorio, ficheros de configuración de
interfaz, scripts de control de interfaz y ficheros de función de red, funcionan conjuntamente para
habilitar Linux para el uso de diversos dispositivos de red disponibles.
• /etc/hosts — El principal propósito de este fichero es resolver los nombres de hosts que no
se pueden resolver en otra manera. Se puede usar solamente para resolver nombres de hosts
en pequeñas redes sin servidor DNS. Sin tener en cuenta el tipo de red que el ordenador use,
este fichero contiene un línea que especifica la dirección IP del dispositivo loopback
(127.0.0.1) como por ejemplo localhost.localdomain. Para mayor información consulte
la página man del host.
• /etc/sysconfig/network — Especifica la información del routing y del host para todas las
interfaces de red.
Uno de los ficheros de interfaz más comunes es ifcfg-eth0, que controla el primer NIC de un
sistema. En un sistema con muchos NICs, tendrá ficheros ifcfg-eth múltiples, cada uno con nun
número al final del nombre del fichero. Como cada dispositivo tiene su propio fichero de configuración,
llevará un gran control sobre el modo en que funciona cada interfaz.
Un ejemplo ifcfg-eth0 para un sistema que usa una dirección IP fija sería de la siguiente manera:
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
NETWORK=10.0.1.0
NETMASK=255.255.255.0
IPADDR=10.0.1.27
USERCTL=no
Los valores que se requieren en un fichero de configuración de interfaz pueden cambiar basándose en
otros valores. Por ejemplo, el fichero ifcfg-eth0 para una interfaz que use DHCP aparecerá
diferente, debido al hecho de que la información IP viene proporcionada por el servidor DHCP:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
La mayoría del tiempo, deseará utilizar una utilidad GUI, como por ejemplo Configurador de red de
Red Hat (redhat-config-network) o netconfig para hacer cambios en los diversos ficheros de
configuración de interfaz.
Dentro de cada uno de los ficheros de configuración de la interfaz, son comunes los siguientes valores:
o no — No modificar /etc/resolv.conf.
Un paquete de software es una serie de programas que se distribuyen conjuntamente. Algunas de las
razones para ello suelen ser que el funcionamiento de cada uno complementa o requiere a los demás,
que sus objetivos están relacionados o como estrategia de márketing nomás.
Muchos sistemas operativos modernos emplean sistemas de control de paquetes que permiten que
el administrador del sistema instale o desinstale estos, sin que en ningún momento queden programas
instalados que no funcionen por falta de otros incluidos en su paquete.
En los años que tiene de existencia Linux, se han formado Distribuciones y muchas de estas, han
hecho su propio sistema de paquetes, dándole distinto sistema y coeficiente de compresión, forma de
ordenamiento de los archivos dentro de él, etc.
De esta forma, la distribución Red Hat, creo el sistema de paquetes RPM y el administrador YUM. La
distribución Debian, el sistema DPKG y el administrador APT. Slackware, el sistema TGZ
El gestor de paquetes de Red Hat (Red Hat Package Manager, RPM), es un sistema abierto de gestión
de paquetes de programas disponible para ser utilizado por cualquier usuario. Funciona tanto en Red
Hat Linux como en otros sistemas Linux y UNIX. Red Hat Software pretende conseguir que otros
fabricantes analicen RPM y consideren usarlo en sus propios productos.
Para el usuario final, RPM ofrece muchas características que hacen el mantenimiento de un sistema
bastante más fácil de lo que ha sido hasta ahora. Instalar, desinstalar y actualizar paquetes RPM son
tareas que se llevan a cabo con sólo una orden en la línea de comandos, todos los detalles complejos
del proceso son controlados automáticamente. RPM mantiene una base de datos de paquetes
instalados y de los ficheros que los forman, lo que permite realizar complejas consultas y verificación del
sistema. Durante las actualizaciones, RPM trata los ficheros de configuración de forma especial, para
evitar que se pierdan las diferentes modificaciones que se hayan podido realizar en ellos - característica
ésta que resulta imposible de realizar directamente con ficheros .tar.gz.
Para el programador, RPM permite tomar el código fuente de los programas y archivarlo en paquetes
de código fuente y programas binarios destinados al usuario final. Este proceso es bastante sencillo y
Pero, claro, esta información aparecerá un tanto desordenada, porque que podemos forzar su
información y una fácil consulta escribiendo:
rpm -qa|sort|less
Te recordamos, que esto te dirá todos los programas que están instalados vía .RPM, es decir, que los
que hubieran sido instalados como .tgz, (o .tar.gz, que es lo mismo), o .deb, o cualquier otro tipo de
paquete que no fuera compatible con el .rpm, no mostrará esta información.
• Para consultar un paquete QUE NO ESTÁ INSTALADO, y ahora mismo lo tienes delante:
rpm -U programa.xxx.xx.rpm
Para desinstalar a toda costa, usa --nodeps, para que no dependa de las dependencias instaladas
(esta opción no es muy aconsejable)
Linux tiene varios ficheros especiales en /dev. Estos ficheros se llaman ficheros de dispositivo pero no
se comportan como los ficheros habituales. Los tipos más comunes de ficheros de dispositivos son los
de dispositivos de bloques o de caracter. Estos ficheros son una interfaz al controlador de dispositivo
(parte del núcleo de Linux) que a su vez le permite el acceso al hardware. Un tipo de archivo de
dispositivo menos frecuente son las pipe (N. del T., a veces traducido como «tubería»). En la tabla
mostrada a continuación se lista los ficheros de dispositivo más importantes.
gpmdata Pseudo-dispositivo, repite los datos generados por el demonio GPM (ratón)
Introducción
Los nuevos usuarios de Linux escuchan a menudo que este sistema operativo tiene un excelente
soporte para toda clase de tarjetas y que los controladores de dispositivos (device drivers, en inglés)
son estables y rápidos. Aunque a veces, la configuración de dispositivos bajo Linux no es tan conectar-
y-usar (plug-and-play).
Todo es un archivo
Los controladores de dispositivos de Linux trabajan con el código del núcleo (o kernel) que acceden
directamente al hardware. Para hacer disponible los servicios que la tarjeta u otros dispositivos ofrecen
a los programas de usuario normal, el núcleo utiliza los archivos especiales que se encuentran ubicados
en la carpeta /dev.
Un extremo de los archivos en /dev/ puede ser abierto y utilizado normalmente por el usuario o los
programas, y el otro extremo esta unido al núcleo. Esto es obviamente una simplificación: hardware,
núcleo o kernel, archivos especiales, programas de usuario. Hay dos formas de agregar estas
porciones de software al núcleo: con los controladores compilados integrados que están
permanentemente en el núcleo, y los módulos que pueden ser cargados dinámicamente.
Los módulos
Otra ventaja muy anunciada en Linux es que no necesita ser reiniciado tan a menudo como otros
sistemas operativos. Podría pensar que esto es debido a la estabilidad del sistema. Puede pensar que
tal vez se deba a la buena programación (calidad) de los controladores de dispositivos. Pero la razón
principal por la que los controladores en Linux llevan a menos reinicios se debe a que podemos re-
configurar , descargar o recargarlos sin la necesidad de reiniciar el sistema.
En este ejemplo el controlador de dispositivo del núcleo "mad16" depende del controlador "ad1848", Si,
realmente existe un controlador llamado "mad16". Pertenece a un chipset de una tarjeta de sonido.
/etc/modules, /etc/conf.modules
En el curso normal de los eventos los módulos que nos fueron consultados durante la instalación son
cargados durante el tiempo de arranque del sistema. El archivo "/etc/modules" es utilizado para esta
función. Este archivo contiene una lista de los módulos que serán cargados.
Las opciones para los modulos se encuentran almacenadas en "/etc/conf.modules". Por favor no edite
este archivo. Puede utilizar utilidades como "update-modules" para realizar modificaciones. Utilice
"man" para más detalles.
Particiones
Una partición en un disco duro es la creación de divisiones "no físicas" o lógicas, que permite tener la
sensación de "dos o más discos en uno".
Una de las funciones del particionado, es que a partir de un solo disco duro se pueden tener tantos
sistemas operativos como particiones haya. Otra podría ser asegurarnos que si una partición se ve
afectada por problemas de seguridad, solo esa se dañe, permitiendonos seguir teniendo el resto de los
datos en las otras particiones que están intactas.
Partición primaria
Cuando se ideó el sistema de particiones de disco, hace ya mucho tiempo, se pensó en que 4
particiones serían más que suficientes para cubrir todas las necesidades. Esto cambió bastante y
(también hace mucho tiempo) se tuvo que pensar en una solución al problema, esa solución se llamó
Partición extendida.
Las particiones extendidas se crearon con el fin de superar el límite de 4 particiones primarias por disco.
Con ellas, ya no existe límite en la cantidad de particiones lógicas que se pueden generar en un disco.
Sin este tipo de particiones no se podría dar el hecho de que se pueden instalar tantos sistemas
operativos como particiones haya.
Tabla de particiones
La tabla de particiones está alojada en el MBR del disco, a partir del byte 446 del sector de arranque y
ocupa 64 bytes, contiene descriptores para 4 particiones (de 16 byte cada una), llamadas particiones
primarias, cada registro ocupa 16 bytes y en ese registro se almacena todo lo relacionado con la
partición, si es arrancable, si no lo es, el formato, el tamaño y el sector de inicio.
El registro de arranque maestro (Master Boot Record), es un sector de 512 bytes al principio del disco
rígido que contiene una secuencia de comandos necesarios para cargar un sistema operativo. Es decir,
es el primer registro del disco duro, el cual contiene un programa ejecutable y una tabla donde están
definidas las particiones del disco duro.
Es el primer sector físico (Cilindro 0, Cabeza 0, Sector 1) asignado a un disco rígido en un sistema.
Cada disco duro tiene un MBR, pero no todas los BIOS pueden arrancar el sistema operativo desde
cualquiera de los discos. Cuando se arranca desde el disco rígido, el BIOS copia el contenido del MBR
en una dirección fija de la memoria para luego darle el control. Este código arrancará seguidamente el
sistema operativo, ya sea desde la primera partición primaria del disco o desde un Boot-Loader o
cargador, algo más complejo pero que permite cargar el sistema desde cualquier partición.
Linux permite elegir entre distintas herramientas de particionado de disco. Las opciones son:
• Disk Druid 823 - Esta es la utilidad de gestión de disco de Red Hat Linux en la instalación.
Puede crear y borrar particiones de disco, de acuerdo con los requisitos proporcionados por el
usuario, además de gestionar puntos de montaje para cada partición.
• Parted - La utilidad parted es un programa de libre acceso que puede modificar las dimensiones
de las particiones, crear nuevas, eliminar, mover, etc
Linux es un sistema multiusuario por lo que es necesario la administración (segura) de los distintos
usuarios que van a hacer uso de los recursos del sistema. De momento no vamos a dar grandes
nociones de seguridad, pero sí una introducción a los tipos de usuarios y qué privilegios deben tener.
• Usuarios normales con más o menos privilegios que harán uso de los recursos del sistema.
Son generalmente inexpertos y propensos a causar problemas. Simplemente deben poder usar
algunos programas y disponer de un directorio de trabajo.
• Usuarios de Sistema son aquellos encargados de los demonios del sistema, recordemos que
para Linux todo es un fichero, el cual tiene un dueño y ese dueño tiene privilegios sobre él. Así,
es necesario que algún usuario del sistema posea los procesos de los demonios, como
veremos más adelante.
Resumiendo, es necesario que para algunos servicios del sistema se creen usuarios
(generalmente para demonios). Como puede ser el caso de Mail, irc... Estos usuarios tendrán
los privilegios necesarios para poder hacer su tarea, gestionar estos usuarios es de gran
importancia. No obstante, este tipo de usuarios no necesita que se le asigne un shell, puesto
que simplemente poseerán los demonios, pero no será necesario que hagan login en el
sistema.
• ROOT Este es dios ;-) Como ya habéis leído en capítulos anteriores cuidado con lo que se hace
al entrar en el sistema como root. Él lo puede todo, en principio no hay restricciones para ÉL
(aunque algunos programas nos avisarán de que estamos haciendo una auténtica burrada
desde el punto de vista de la seguridad).
Además del criterio anterior, existe un criterio secundario para clasificar a los usuarios de un sistema.
Ya vamos conociendo la tendencia de los UNIX y Linux, primero, por hacer que casi todo sea un
fichero, y segundo, por hacer que absolutamente todo tenga un dueño (como iremos descubriendo a
medida que usamos el sistema, nada se deja al azar en este aspecto), incluidos los procesos que se
están ejecutando en el sistema. Otro concepto que lleva a esta segunda clasificación es, el de los
usuarios de los servicios del host. Este tipo de usuarios simplemente accede remotamente a algunos
servicios de nuestra máquina, tales como correo-electrónico o FTP. Esto nos lleva a definir:
• Usuarios de login. Estos primeros, pueden hacer login en el sistema y usar una shell en él. Es
decir, tienen una shell válida de inicio (como se indica más abajo), generalmente, /bin/bash.
• Usuarios sin login. Este tipo de usuarios, bien son usuarios de sistema, o bien usuarios de los
servicios del host. En ambos casos no pueden hacer login en el sistema directamente ni usar
un shell. En otras palabras, no tienen asignado un shell válido. Su misión, es "poseer" algunos
archivos y directorios del sistema, y manejarlos restringidamente a través de algunos
programas (el servidor FTP, el servidor de correo electrónico, etc. darán a los usuarios de los
servicios del host los privilegios suficientes: almacenar mensajes, etc.). En el caso de los
usuarios de sistema, poseerán además algunos procesos (en el capítulo de procesos
aprenderemos más acerca de este sub-tipo especial de usuarios).
¿Cómo añadir un usuario al sistema? Hay que seguir una serie de pasos que relatamos a continuación.
Pero antes veremos la estructura de los archivos que vamos a tocar.
• /etc/password - Archivo que mantiene la base de datos de los usuarios del sistema y tiene la
siguiente forma:
o Password - La palabra de paso necesaria para entrar (cifrada). Si nuestro sistema usa
shadow (explicado después), este campo será una x
o UID - (User ID) Número que lo identifica en el sistema, recordemos que los
ordenadores se llevan mejor con los números.
o GID - (Group ID) Número que identifica al grupo principal al que pertenece el usuario.
o Shell - Intérprete de comandos del usuario, que será el que use inmediatamente
después de entrar en el sistema, por defecto es /bin/bash. Para usuarios sin login,
aunque puede que ahora no lo necesites, la shell no válida típica para poner en este
campo es /bin/false.
nombre_grupo:password:GID:lista_usuarios
o Nombre del Grupo - Por defecto con los comandos habituales se crea un grupo con el
mismo nombre que el usuario creado, aunque pueden existir otros grupos con nombres
específicos.
o password - Se usa para dar a una serie de individuos un mismo directorio con una
cuenta común.
• /etc/shadow - Para sistemas que usen shadow, que no es más que una medida de seguridad.
Los sistemas que no usan shadow guardan el password en /etc/passwd pero este archivo tiene
la peculiaridad de que debe ser legible por todo el mundo, si no, no podría ni hacerse un ls.
Este archivo podría caer en manos de un usuario ilegítimo y este ejercer técnicas de crackeo
usuario:password:días del último cambio: días antes del cambio:Dias después del cambio:
tiempo de aviso:dias antes de la inhabilitación: periodo que lleva caducado:reservado:
o Tiempo del último cambio de password - Pero el tiempo cuenta desde el 1 de enero de
1970, comienzo de la era UNIX.
o Días antes del cambio - Periodo (en días) donde el password debe ser cambiado.
o Dias después del cambio - En los días después donde debe ser cambiado.
o Tiempo del aviso - Periodo en el que el sistema tiene que avisar de la necesidad del
cambio.
o Campo reservado
Comandos
who/whoami/id (muestra información de usuarios)
su/sudo (cambia de usuario o privilegios)
Gestión de Usuarios:
Gestión de Grupos:
De la misma manera que puede utilizar herramientas como useradd o groupadd para crear un nuevo
usuario desde un intérprete de comandos de la shell, una manera bastante conocida de manejar
usuarios y grupos en Red Hat Linux es a través de redhat-config-users.
.bash_history
Guarda los últimos 500 comandos usados en Bash Shell .
.bash_logout
Scripts usados al desconectar la sesión bash un usuario.
.bash_profile
Scrips de inicio par bash shell y configuración de variables y alias.Al iniciar session un usuario con bash
shell se ejecuta este fichero, y si no se encuentra se busca .bash_profile, si tampoco se encuetra se
intenta con .bash_login. Y si este tampoco se ejecuta .profile.
.bashrc
Script que se ejecuta siempre al iniciar bash shell.
.login
Se ejecuta con cualquier inicio.
.logout
Se ejecuta al desconectar sesión de usuario.
.profile
Se ponen la variables de entorno por defecto residentes en /etc/profile.
.xinitrc
Se ejecuta al iniciar el entorno gráfico.
.xsession
Se ejecuta al abrir cualquier Xterm, o sesión de comandos en entorno gráfico.
NFS (Network File System) permite a las máquinas montar particiones en un sistema remoto en
concreto y usarlas como si estuvieran en el sistema de archivos local. Esto permite centralizar archivos
en una localización, mientras se permite su acceso continuo a los usuarios autorizados.
Hay dos versiones de NFS actualmente en uso. La versión 2 de NFS (NFSv2), que tiene varios años, es
ampliamente soportada por muchos sistemas operativos. La versión 3 (NFSv3) tiene más
características, incluyendo tamaño variable del gestor de archivos y una mejor información de errores.
Red Hat Linux soporta tanto NFSv2 como NFSv3, y usa NFSv3 por defecto cuando se conecta a un
servidor que lo soporta.
Metodología
Linux usa una combinación de soporte a nivel de kernel y demonios en continua ejecución para
proporcionar la compartición de archivos NFS, sin embargo, el soporte NFS debe estar activo en el
kernel de Linux para que funcione. NFS usa Remote Procedure Calls (RPC) para enrutar peticiones
entre clientes y servidores, implicando que el servicio portmap debe estar disponible y activo en los
niveles de ejecución adecuados para que la comunicación NFS funcione. Trabajando con portmap, los
procesos siguientes se aseguran que una conexión particular NFS esté permitida y pueda proceder sin
error:
• rpc.mountd — El proceso que recibe la petición de montaje desde un cliente NFS y chequea
para mirar si coincide con un sistema de archivos actualmente exportado.
• rpc.nfsd — El proceso que implementa los componentes del espacio del usuario del servicio
NFS. Trabaja con el kernel Linux para satisfacer las demandas dinámicas de clientes NFS,
tales como proporcionar procesos adicionales del servidor para que los clientes NFS lo utilicen.
• rpc.statd — Implementa el protocolo RPC Network Status Monitor (NSM). Esto proporciona
notificación de reinicio cuando un servidor NFS es reiniciado luego de haber sido apagado
abruptamente.
Con NFS, la autentificación sólo se produce cuando el cliente intenta montar un sistema de archivos
remoto. Para limitar el acceso, el servidor NFS utiliza en primer lugar envolturas TCP (TCP wrappers).
Estas envolturas leen los archivos /etc/hosts.allow y /etc/hosts.deny para determinar si a un cliente
particular le debe ser explícitamente permitido o denegado su acceso al NFS.
Swap, o "espacio de intercambio" es un archivo o una partición del disco duro, que se utiliza como
memoria de respaldo. Es utilizada en los caso en que la memoria física se a agotado, cumpliendo la
función de almacenar procesos hasta que la memoria RAM los pueda ejecutar.
La función principal es mover programas poco activos o que no necesitan grandes cantidades de
memoria física y pasarlos a la memoria de intercambio y así liberar la RAM para grandes programas
que la necesitan. Mientras no sea necesario el proceso dentro de la swap puede quedarse ahí para
mantener liberada la memoria principal.
El equivalente dentro de Windows es la Memoria virtual. En el caso de este sistema, es un archivo, pero
en Linux es una partición, un disco físico independiente o un fichero.
Procedimientos
3. Activar la partición:
swapon [dispositivo]
Ejemplo: /sbin/swapon /dev/hda8
4. Utilizar el comando free para confirmar la disponibilidad del espacio swap total en el
sistema.
3. Hay que decirle al sistema acerca de este archivo de intercambio y se hace del
siguiente modo:
/sbin/mkswap -c /swap 10240
6. Utilizar el comando free para confirmar la disponibilidad del espacio swap total en el
sistema.
El sistema de logs de Linux (log = registro), es un mecanismo estándar que se encarga de recoger los
mensajes generados por los programas, aplicaciones y demonios y enviarlos a un destino predefinido.
En cada mensaje consta la fuente (el programa que generó el mensaje), la prioridad (nivel de
importancia del mensaje), la fecha y la hora.
Hay varios niveles de prioridad de los mensajes (de menos a más prioritario: debug, info, notice,
warning, warn, err, error, crit, alert, emerg y panic) y varios tipos de mensajes (auth, authpriv, cron,
daemon, kern, lpr, mail, mark, news, security, syslog, user, uucp y local0-local7).
o syslogd: gestiona los logs del sistema. Distribuye los mensajes a archivos, tuberías,
destinos remotos, terminales o usuarios, usando las indicaciones especificadas en su
archivo de configuración /etc/syslog.conf, donde se indica qué se loguea y a dónde se
envían estos logs.
o klogd: se encarga de los logs del kernel. Lo normal es que klogd envíe sus mensajes a
syslogd pero no siempre es así, sobre todo en los eventos de alta prioridad, que salen
directamente por pantalla.
• Los logs se guardan en archivos ubicados en el directorio /var/log, aunque muchos programas
manejan sus propios logs y los guardan en /var/log/<programa>. Además, es posible especificar
múltiples destinos para un mismo mensaje. Algunos de los log más importantes son:
o /var/log/messages: aquí encontraremos los logs que llegan con prioridad info
(información), notice (notificación) o warn (aviso).
o /var/log/kern.log: aquí se almacenan los logs del kernel, generados por klogd.
o /var/log/auth.log: en este log se registran los login en el sistema, las veces que
hacemos su, etc. Los intentos fallidos se registran en líneas con información del tipo
invalid password o authentication failure.
Crond
Cron es una utilidad, presente en la mayoría de sistemas Linux y Unix, que permite ejecutar comandos
o procesos con una frecuencia determinada.
Esto se puede aplicar, por ejemplo, a hacer backups de una carpeta del sistema todos los días a las 12
de la noche, comprobar el tamaño de un directorio o el espacio libre en disco de los usuarios del
sistema y avisar cuando está a punto de agotarse, ejecutar un revisor de correo como fetchmail o otro.
Funcionamiento
Cron se compone principalmente de 2 elementos: cron, el Demonio, y el archivo de configuración
/etc/crontab.
Si pretendemos añadir, quitar o modificar las tareas que ejecutará cron, con el siguiente comando:
$ crontab -e
Se abrirá un editor y podremos cambiar nuestras tareas en el cron. La diferencia entre editar el archivo
/etc/crontab directamente y utilizar el comando crontab -e radica en que con este último no hacen falta
privilegios de root “Usuarios” ya que estaremos editando un archivo de configuración específico para
nuestro usuario. Para editarlo hay una forma definida en la que cada línea tiene:
Minuto Entre 0 y 59
Hora Entre 0 y 23
Mes Entre 1 y 12
Otro aspecto a tener en cuenta es que si el comando no está en el PATH deberá ser especificado con
su ruta completa. Veamos algunos ejemplos:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * fetchmail
*/5 * * * * fetchmail
En estos ejemplos, se ejecutará el programa fetchmail todos los días del mes, todos los días de la
semana, todos los meses, cada hora, cada 5 minutos.
0 4 * * * fetchmail
0 12 * * 3 shutdown -h now
Con esta línea, el computador se apagará todos los Miércoles a las 12 del mediodía.
● Usuarios (/etc)
passwd / group (usuarios y grupos del sistema)
shadow (contraseñas cifradas)
sudoers (lista de que usuarios que pueden ejecutar qué)
ftpusers (usuarios que no pueden conectar via ftp)
El sistema X Window
El sistema X Window (X11) es prácticamente el estándar para interfaces gráficas de usuario en Unix.
X11 es además un sistema basado en redes. Así, las aplicaciones que estén funcionando en un
ordenador pueden mostrar sus datos de salida en otro siempre que ambas máquinas estén conectadas
a través de una red. El tipo de red (LAN o Internet) es irrelevante.
XFree™ es una implementación de libre disponibilidad de servidores X para sistemas PC Unix (ver
http://www.XFree86.org). XFree sigue siendo desarrollado por programadores de todo el mundo que se
unieron en 1992 para formar el equipo XFree. De esta unión surgió en 1994 la empresa The XFree86
Project, Inc.™, cuyo objetivo es poner XFree™ al alcance de un público lo más amplio posible y
contribuir al desarrollo e investigación futuros del sistema X Window.
Para usar el hardware existente (ratón, tarjeta de vídeo, monitor, teclado) de la mejor forma posible se
puede optimizar la configuración de forma manual.
Puede encontrar información detallada sobre la configuración del sistema X Window en diversos
archivos del directorio /usr/share/doc/packages/xf86 al igual que en la correspondiente página del
manual man XF86Config.
XF86Config
Mientras que casi nunca se necesita editar manualmente el /etc/X11/XF86Config, es muy útil conocer
sobre las varias secciones y los parámetros opcionales disponibles, especialmente cuando se estén
solucionando problemas.
/usr/X11R6/
Contiene un servidor X y algunas aplicaciones cliente así como también archivos de cabecera
X, librerías, módulos y documentación.