Curso Linux
Curso Linux
[Link]
SISTEMA DE ARCHIVOS (II)
DIRECTORIOS
Un sistema de ficheros es el modo en que el sistema operativo organiza los ficheros en el
disco duro, gestionndolo de manera que los datos estn de forma estructurada y sin
errores.
La estructura de ficheros de Linux es una estructura jerrquica en forma de rbol
invertido, donde el directorio principal (directorio raz) es el directorio /, del que cuelga
toda la estructura del sistema:
Estos directorios son muy tiles a la hora de hacer referencia a rutas relativas.
ALMACENAMIENTO DE DATOS
El sistema de ficheros de Linux permite al usuario crear, borrar y acceder a los ficheros sin
necesidad de saber el lugar exacto en el que se encuentran.
En Linux no existen unidades fsicas, sino ficheros que hacen referencia a ellas, integrados
en la estructura de ficheros como cualquier otro.
El sistema de ficheros de Linux consta de varias partes importantes:
Superbloque
Tabla de inodos
Bloques de datos
En Linux cada bloque es de 512 bytes o de mltiplos de 512. Al igual que el cluster era la
estrella del sistema de ficheros FAT, en ext3 es el bloque.
En la siguiente tabla podemos ver un esquema del sistema de ficheros de Linux:
El bloque de carga o bloque cero de cada sistema est reservado para almacenar un
programa que utiliza el sistema para gestionar el resto de las partes del sistema de ficheros.
El superbloque o bloque uno contiene la informacin sobre el sistema de ficheros.
La tabla de inodos es el equivalente a las entradas de la FAT. Por cada fichero, Linux tiene
asociado un elemento en esta tabla que contiene un nmero. Este nmero identifica la
ubicacin del archivo dentro del rea de datos.
Cada inodo contiene informacin de un fichero o directorio. En concreto, en un inodo se
guarda la siguiente informacin:
El identificador de dispositivo del dispositivo que alberga al sistema de archivos.
El nmero de inodo que identifica al archivo dentro del sistema de archivos.
La longitud del archivo en bytes.
El identificador de usuario del creador o un propietario del archivo con derechos
diferenciados.
El identificador de grupo de un grupo de usuarios con derechos diferenciados.
El modo de acceso: capacidad de leer, escribir, y ejecutar el archivo por parte del
propietario, del grupo y de otros usuarios.
Las marcas de tiempo con las fechas de ltima modificacin (mtime), acceso (atime) y
de alteracin del propio inodo (ctime).
El nmero de enlaces (hard links), esto es, el nmero de nombres (entradas de
directorio) asociados con este inodo. Si mltiples nombres estn enlazados, o sea,
asociados a un mismo inodo (lo que se denomina enlaces duros o simplemente
enlaces) entonces todos los nombres son equivalentes entre s. El que fue creado en
primer lugar no tiene ningn estatus especial, al contrario de lo que ocurre con los
enlaces simblicos o con los denominados accesos directos de Windows, donde
todos dependen del nombre original. El nmero de enlaces se emplea por el sistema
operativo para eliminar el archivo del sistema de ficheros, tanto el inodo como el
contenido, cuando se han borrado todos los enlaces y el contador queda a cero
El rea de datos ocupa el resto del disco y es equivalente a la zona de datos en FAT. En
esta zona, como su nombre indica, estn almacenados los ficheros y directorios de nuestro
sistema.
Un directorio no es ms que un fichero que contiene los nombres de los ficheros (o
directorios) que contiene junto con el nmero del inodo que contiene la informacin de
cada uno de ellos.
TIPOS DE SISTEMAS DE ARCHIVOS
Linux soporta gran variedad de sistemas de ficheros, desde sistemas basados en discos, como
pueden ser ext2, ext3, ReiserFS, XFS, JFS, UFS, ISO9660, FAT, FAT32 o NTFS, a
sistemas de ficheros que sirven para comunicar equipos en la red de diferentes sistemas
operativos, como NFS (utilizado para compartir recursos entre equipos Linux) o SMB (para
compartir recursos entre mquinas Linux y Windows).
Los sistemas de ficheros indican el modo en que se gestionan los ficheros dentro de las
particiones. Segn su complejidad, tienen caractersticas como previsin de apagones,
posibilidad de recuperar datos, indexacin para bsquedas rpidas, reduccin de la
fragmentacin para agilizar la lectura de los datos, etc. Hay varios tipos, normalmente ligados
a sistemas operativos concretos. A continuacin se enumeran los ms representativos:
ext2: Hasta hace poco era el sistema estndar de Linux. Tiene una fragmentacin muy
baja, aunque es algo lento manejando archivos de gran tamao. Fue la continuacin
del sistema de ficheros ext, implementado en 1992 e integrado en Linux 0.96. Las
principales ventajas que tena sobre ext eran las siguientes:
Compatible con sistemas de ficheros grandes, admitiendo particiones de disco de
hasta 4TB y ficheros de hasta 2GB de tamao.
Proporciona nombres de ficheros largos, de hasta 255 caracteres.
Tiene una gran estabilidad.
Actualizacin.
ext3: Es la versin mejorada de ext2, con previsin de prdida de datos por fallos del disco
o apagones. En contraprestaci, es totalmente imposible recuperar datos borrados. Es
compatible con el sistema de ficheros ext2. Actualmente es el ms difundido dentro
de la comunidad GNU/Linux y es considerado el estndar. Sus ventajas frente a ext2
son:
Actualizacin. Debido a que los dos sistemas comparten el mismo formato, es
posible llevar a cabo una actualizacin a ext3, incluso aunque el sistema ext2
est montado.
Fiabilidad y mantenimiento.
ext4: Es la ltima versin de la familia de sistemas de ficheros ext. Sus principales ventajas
radican en su eficiencia (menor uso de CPU, mejoras en la velocidad de lectura y
escritura) y en la ampliacin de los lmites de tamao de los ficheros, ahora de hasta
16TB, y del sistema de ficheros, que puede llegar a los 1024PB (PetaBytes).
ReiserFS: Es el sistema de ficheros de ltima generacin para Linux. Organiza los ficheros
de tal modo que se agilizan mucho las operaciones con estos. El problema de ser tan
actual es que muchas herramientas (por ejemplo, para recuperar datos) no lo soportan.
swap: Es el sistema de ficheros para la particin de intercambio de Linux. Todos los
sistemas Linux necesitan una particin de este tipo para cargar los programas y no
saturar la memoria RAM cuando se excede su capacidad. En Windows, esto se hace
con el archivo [Link] en la misma particin de trabajo, con los problemas que
esto conlleva.
Adems de estos sistemas de ficheros, Linux tambin ofrece soporte para sistemas de ficheros
de Windows, como FAT, FAT32 y NTFS. Tanto para FAT como para FAT32, Linux tiene
soporte completo y estable de escritura y lectura, mientras que para NTFS, y con las ltimas
versiones del kernel, solo se puede acceder de manera estable en modo lectura. En modo
escritura todava est en fase experimental y no es estable.
intrprete quien expande los comodines para incluir todos los nombres de archivos que se
adaptan. Por lo tanto la orden:
/home/diego$ ls *o*
es expandida para obtener
/home/diego$ ls hugo paco
Otro carcter comodn es ?. Este carcter comodn slo expande un nico carcter. Luego
ls ? mostrar todos los nombres de archivos con un carcter de longitud, y ls termca?,
por ejemplo, mostrar termcap pero no [Link]. Aqu tenemos otro ejemplo:
/home/diego$ ls hu?o
hugo
/home/diego$ ls p??o
paco
/home/diego$ ls ???s
luis
Como podemos ver, los caracteres comodn nos permiten referirse a ms de un archivo a la
vez. En el sumario de comandos bsicos dijimos que cp y mv pueden copiar o mover
mltiples archivos de una vez. Por ejemplo:
/home/diego$ cp /etc/s* /home/diego
copiar todos los archivos de /etc que comiencen con s al directorio /home/diego.
Los comodines * y ? no coincidirn con nombres de archivos que comiencen con un
punto (.). Estos archivos son tratados como ocultos. Los archivos de este tipo no son
mostrados en un listado normal de ls y no son afectados por el uso de * y ?.
Por ejemplo, ya hemos mencionado que cada directorio tiene dos entradas especiales: .,
que hace referencia al directorio actual, y .., que se refiere al directorio padre. Como ya
hemos visto, al usar ls esas dos entradas no se muestran:
/home/diego$ ls
hugo luis paco
Si usamos el parmetro -a con ls podremos ver nombres de archivos que comienzan con
.. Observemos:
/home/diego$ ls -a
. .. .bash_profile .bashrc hugo luis paco
Ahora podemos ver las dos entradas especiales, . y .., as como otros dos archivos
ocultos: .bash_profile y .bashrc.
Estos dos archivos son usados en el arranque por el intrprete de comandos bash cuando el
usuario realiza el login.
PATH ABSOLUTOS Y PATH RELATIVOS
Supongamos que dentro de la particin de datos tenemos un archivo llamado [Link].
Para indicar la ruta a este archivo se puede hacer de varias formas. Por ejemplo, la ruta
absoluta a ese archivo es la siguiente:
/media/datos/[Link]
Las rutas absolutas se caracterizan por empezar SIEMPRE desde la raz, es decir la /, y
contener todos los directorios que hay desde la raz hasta el archivo o directorio que
queremos indicar, slo es posible escribir de una forma una ruta absoluta. Todas las rutas
siguientes son rutas absolutas por que empiezan desde la raz.
/media/
/media/datos/
/etc/
/home/aupatic/
/media
/media/datos
/etc
/home/aupatic
/home/aupatic/[Link]
Cuando tienen la / al final significa que la ruta es de un directorio, aunque no es necesaria
la /. Cuando la ruta es de un archivo NUNCA se pone la / al final.
En cambio las rutas relativas NUNCA empiezan por la / y puede haber varias rutas
relativas para el mismo archivo o directorio que queremos indicar. Esto es as por que la
ruta relativa depende del directorio en el que se est trabajando. Por ejemplo si estamos en
el mismo directorio que el archivo [Link], la ruta relativa es simplemente el nombre
del archivo:
[Link]
En cambio, si estamos dentro del directorio media, pero fuera del directorio datos, la ruta
relativa se escribira:
datos/[Link]
Si estamos en la raz del sistema de archivos:
media/datos/[Link]
COMANDO CD
Este comando proviene del abreviativo en ingles Change Directory, el cual nos permite
cambiar entre directorios en Linux.
Podemos utilizar tanto el path absoluto, como el path relativo, como por ejemplo
Ejemplos de comando CD
Hacer cd con path absoluto.
COMANDO LS
El comando ls, proviene del abreviativo en ingles list. El cual nos sirve para listar el
contenido que existe en una o mas directorios.
La salida estndar del comando, es similar a la siguiente.
el comando ls, tiene opciones que nos son de bastante utilidad, como las presentadas a
continuacin.
l: Lista archivos, con informacin. Sobre: Permisos de Usuario, Cantidad de
archivos archivos dentro del directorio, Usuario dueo, Grupo dueo, Tamao
del archivo, Fecha de Creacin, Hora y el archivo.
Pueden acceder a mas informacin sobre el comando ls, con la opcin --help
COMANDO FIND
Cuando tenemos muchos archivos en un directorio donde estamos parados, por ejemplo en
/etc y queremos buscar un archivo llamado service dentro de este, podemos ejecutar la
siguiente sentencia find.
Tambin, si nosotros queremos buscar el mismo archivo en /etc, pero sin estar dentro de
/etc, podemos ejecutar el siguiente comando.
COMANDO LOCATE
El comando locate, es en reemplazo al comando find, este realiza una bsqueda mucho mas
rpida que find, debido a que este comando realiza la bsqueda sobre una base de datos que
esta ubicada en /var/lib/mlocate/[Link], la cual debe actualizarse con el comando
updatedb. Por lo cual busca dentro de la base de datos, por lo cual la salida se puede
concatenar por ejemplo con grep para buscar de manera correcta.
COMANDO FILE
Descripcin
Indica el Filesystem que esta montado
Tamao total de espacio utilizable en el sistema de archivos
Cantidad de espacio utilizado
Cantidad de espacio disponible para utilizar
Porcentaje de uso del disco
Punto de montaje
COMANDO DU
Este comando informa al usuario de la cantidad de almacenamiento utilizado por los
archivos especificados, posee varias opciones, su sintaxis es la siguiente:
du [opciones] [archivo...]
Sus opciones ms significativas son:
-s: Muestra nicamente los tamaos de los archivos especificados en la lnea de comandos.
-h: Muestra los tamaos de archivo en un formato ms legible.
-c: Muestra en pantalla el espacio total ocupado por los archivos especificados.
-x: Omite en el conteo aquellos directorios que pertenezcan a otro sistema de archivos.
COMANDO MOUNT
Cuando conectamos una unidad de almacenamiento o un lector de DVD, el sistema tiene
que crearle lo que se denomina un punto de montaje para poderlo utilizar, este punto de
montaje en casos de discos duros y pendrives, suele ser una carpeta que creamos
manualmente en el sistema como era el caso hace aos o nos lo crea l mismo
automticamente en una particin denominada /media en distribuciones basadas en Ubuntu,
que por cuestiones as tienen fama de ser ms user friendly y por tanto son denominadas
ms bsicas.
mount -t (Tipo de FS) /filesystem /punto_de_montaje
El uso primordial que se le dar al comando mount en este curso, es de verificar que los FS
se encuentre montados.
COMANDO MKDIR
Este comando es bastante simple; su finalidad es la creacin de directorios, y su sintaxis es
as:
Para crear un directorio dentro de otro directorio ya existente, se realiza como el ejemplo
mkdir directorio/test1
Para crear un rbol de directorios no existente, se debe utilizar la opcin p, se realiza como
el ejemplo mkdir -p /root/dir1/dir2/dir3/dir4
COMANDO CP
Se utiliza para copiar archivos, su sintaxis es la siguiente:
cp [opciones] archivo-origen directorio-destino
cp [opciones] archivos-origen... directorio-destino
Entre las opciones ms relevantes, se tienen:
-f: Borrar los archivos de destino ya existentes.
-d: Copiar los enlaces simblicos tal cual son, en lugar de copiar los archivos a los que
apuntan.
-p: Preservar los permisos, el usuario y el grupo del archivo a copiar.
-R: Copiar directorios recursivamente.
-a: Equivalente a utilizar las opciones -dpR.
-v: Da informacin en pantalla sobre los archivos que se van copiando.
En caso que queramos sacar una copia de un archivo de manera local, con el fin de obtener
un respaldo, se debe realizar como el ejemplo cp [Link] [Link].1
En caso que queramos copiar varios archivos al directorio /tmp, debe entregar la lista
completa, de la siguiente manera: cp -fv arch2 arch3 arch10 /tmp. Adems con la opcin
fv (realiza la copia de manera forzada y muestra lo que va copiando).
En caso que queramos copiar un directorio completo, con todos sus archivos, por ejemplo
se copiara el directorio /root/test a /etc, se hara de manera recursiva y que muestre. Se debe
realizar de la siguiente manera: cp -fRv test /etc/ o cp -fRv /root/test /etc/
COMANDO MV
Este comando se usa tanto para mover archivos, como para renombrarlos (que, al fin de
cuentas, es una manera de mover archivos); su sintaxis es la siguiente:
mv [opcin...] origen destino
mv [opcin...] origen... destino
Si el ltimo argumento, destino, es un directorio existente, mv mueve cada uno de los otros
archivos a destino.
Algunas opciones de este comando son:
-f: Borrar los archivos de destino existentes sin preguntar al usuario.
-i: Lo contrario de -f; pregunta por cada archivo a sobrescribir antes de hacerlo.
-v: Muestra el nombre de cada archivo a ser movido.
Al igual que el comando cp, la manera de realizar el movimiento de los archivos, es muy
similar en cuanto su sintaxis.
Como ejemplo, se mover el directorio /root/test a /tmp, con como se muestra en ele
ejemplo, mv -fv test /tmp/
COMANDO RM
He aqu un comando peligroso, rm se utiliza para borrar archivos o directorios, su sintaxis
es:
rm [opciones] archivo...
Se debe siempre pensar dos veces lo que se est haciendo antes de ejecutar este comando.
Quizs esto parezca una advertencia para tontos, pero ms an cuando se est
administrando un equipo que da servicios a varios usuarios, un teclazo en falso, y
fcilmente se pierden datos importantes.
Sus opciones ms utilizadas son:
-f: No imprimir mensajes de error, ni pedir al usuario una confirmacin por cada archivo
que se vaya a borrar.
Para eliminar archivos de manera forzada, se debe utilizar la opcin f, as como se muestra
de la siguiente manera: rm -f arch10. La opcin f suprime la opcin i de alias y elimina
el archivo, sin preguntar nada
COMANDO LN
Este comando sirve para establecer enlaces entre archivos. Un enlace puede ser rgido o simblico.
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 refirindose al mismo archivo. El segundo tipo es parecido al primero,
pero se pueden enlazar directorios, y adems de diferentes sistemas de archivos. Este tipo de enlace
es el que ms se utiliza. La sintaxis del comando ln es:
ln [opciones] origen [destino]
ln [opciones] origen... directorio
Sus opciones ms importantes son las siguientes:
-d: Permite al super-usuario hacer enlaces rgidos a directorios
-s: Crear enlace simblico.
-f: Borrar los archivos de destino que ya existen.
Para el caso del ejemplo anterior, se debera ejecutar:
ln -s /etc/passwd /home/usuario/claves
Cuando se ejecuta ls -l en un directorio donde hay un enlace simblico, ste se muestra de la
siguiente manera:
usuario@maquina:~/$ ls -l claves
lrwxrwxrwx 1 usuario usuario 11 Apr 8 13:33 claves -> /etc/passwd
La l al comienzo de la lnea especifica el tipo de archivo listado, en este caso, un link.
EXPLICACIN DE USUARIOS
Sabemos que Linux es un sistema multiusuario por lo que se hace necesario la
administracin de los distintos usuarios que van a hacer uso de los recursos del sistema.
Pues bien, en la mayora de los diferentes sistemas operativos multiusuario podemos
encontrar al menos 3 tipos de usuarios. estos son:
Usuarios Normales: con ms o menos privilegios que harn uso de los recursos del
sistema. 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 dueo y ese dueo tiene privilegios
sobre l. As, es necesario que algn usuario del sistema posea los procesos de los
demonios. Resumiendo, es necesario que para algunos servicios del sistema se creen
usuarios. Como puede ser el caso de Mail, irc, etc. estos usuarios tendrn 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
poseern los demonios, pero no ser necesario que hagan login en el sistema.
ROOT: Este es el "Todo Poderoso" de Linux. 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 avisarn de que estamos haciendo una autntica burrada desde el
punto de vista de la seguridad).
Bueno, antes que se aburran, con algo de teora, vayamos al grano. Para crear un nuevo
usuario en el sistema utilizaremos los siguientes comandos: useradd y passwd. Veamos
como crear un usuario:
Creamos el usuario "miusuario"
# useradd miusuario
Asignamos una contrasea al usuario "miusuario"
# passwd miusuario
Despus de ejecutar "passwd" pedir que se ingrese dos veces la contrasea. Ojo siempre
que crees un usuario desde la lnea de comandos no debes olvidar asignarle una contrasea,
pues sino no podrs utilizar el usuario creado.
Por otra parte, Linux al crear un usuario, crea por defecto un grupo con el nombre del
usuario (en nuestro caso sera "miusuario"). Si queremos asignar un grupo diferente,
hacemos lo siguiente:
Si no existe el grupo, lo creamos de la siguiente forma:
# groupadd migrupo
Creamos al usuario, desactivando el grupo que se crea por defecto y asignndole el grupo
"migrupo":
# useradd -n -g migrupo miusuario
Asignamos una contrasea al usuario "miusuario"
# passwd miusuario
Explicacin de Permisos
En Linux, todo archivo y directorio tiene tres niveles de permisos de acceso: los que se
aplican al propietario del archivo, los que se aplican al grupo que tiene el archivo y los que
se aplican a todos los usuarios del sistema. Podemos ver los permisos cuando listamos un
directorio con ls -l:
$> ls -l
-rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion
-rw-rw-r-- 1 sergio sergio 2825990 sep 7 16:36 reporte1
drwxr-xr-x 2 sergio sergio 4096 ago 27 11:41 videos
Veamos por partes el listado, tomando como ejemplo la primera lnea. La primera columna
(-rwxrwxr--) es el tipo de archivo y sus permisos, la siguiente columna (1) es el nmero de
enlaces al archivo, la tercera columna (sergio) representa al propietario del archivo, la
cuarta columna (ventas) representa al grupo al que pertence al archivo y las siguientes son
el tamao, la fecha y hora de ltima modificacin y por ltimo el nombre delarchivo o
directorio.
El primer caracter al extremo izquierdo, representa el tipo de archivo, los posibles valores
para esta posicin son los siguientes:
- un guin representa un archivo comun (de texto, html, mp3, jpg, etc.)
d representa un directorio
l link, es decir un enlace o acceso directo
b binario, un archivo generalmente ejecutable
Los siguientes 9 restantes, representan los permisos del archivo y deben verse en grupos de
3.
Los tres primeros representan los permisos para el propietario del archivo. Los tres
siguientes son los permisos para el grupo del archivo y los tres ltimos son los permisos
para el resto del mundo o otros.
rwx
rwx
rwx
usuario grupo otros
=0
=1
=2
=3
=4
=5
=6
=7
Cuando se combinan los permisos del usuario, grupo y otros, se obtienen un nmero de tres
cifras que conforman los permisos del archivo o del directorio. Esto es ms fcil
visualizarlo con algunos ejemplos:
Permisos
Valor Descripcin
rw------600
El propietario tiene permisos de lectura y escritura.
El propietario lectura, escritura y ejecucin, el grupo y otros solo
rwx--x--x
711
ejecucin.
El propietario lectura, escritura y ejecucin, el grupo y otros pueden
rwxr-xr-x
755
leer y ejecutar el archivo.
rwxrwxrwx
777
r--------
400
rw-r-----
640
La sintaxis es muy simple chmod augo[+|-]rwx[,...] archivo[s], asi por ejemplo, si queremos
que otros tengan permiso de escritura sera chmod o+w archivo, todos los usuarios con
chmod
rw-------
a+x
rwx--x--x
go-x
Resultad
Descripcin
o
rwx--x-Agregar a todos (all) permisos de escritura.
x
rwx------ Se eliminan permiso de ejecucin para grupo y otros.
rwxr-xr-x
u-x,go-r
rwxrwxrwx
u-x,go-rwx
rw-------
r--------
a+r,u+w
rw-r--r--
rw-r-----
urw,g+w,o+x
---rw---x
#> ls -l presentacion
-rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion
#> chown juan presentacion
#> ls -l presentacion
-rwxrwxr-- 1 juan ventas 9090 sep 9 14:10 presentacion
#> chgrp gerentes presentacion
#> ls -l presentacion
-rwxrwxr-- 1 juan gerentes 9090 sep 9 14:10 presentacion
Solo el usuario root puede cambiar usuarios y grupos a su voluntad sobre cualquier usuario,
queda claro que habiendo ingresado al sistema como usuario normal, solo podr hacer
cambios de grupos, y eso solo a los que pertenezca.
Una manera rpida para el usuario root de cambiar usuario y grupo al mismo tiempo, es con
el mismo comando chown de la siguiente manera:
#> chown [Link] presentacion (o en vez de punto, con : puntos)
#> chown juan:gerentes presentacion
As, cambiar el [Link] en una sola instruccin.
Bits SUID, SGID y de persitencia (sticky bit)
An hay otro tipo de permisos que hay que considerar. Se trata del bit de permisos SUID
(Set User ID), el bit de permisos SGID (Set Group ID) y el bit de permisos de persistencia
(sticky bit). Para entender los dos primeros el SUID y el SGID veamos los permisos para
un comando de uso comn a todos los usuarios, que es el comando passwd, que como se
sabe sirve para cambiar la contrasea del usuario, y puede ser invocado por cualquier
usuario para cambiar su propia contrasea, si vemos sus permisos observaremos un nuevo
tipo de permiso:
#> ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 feb 12 2006 /usr/bin/passwd
SUID
En vez de la 'x' en el grupo del usuario encontramos ahora una 's' (suid). passwd es un
comando propiedad de root, pero sin embargo debe de poder ser ejecutado por otros
usuarios, no solo por root. Es aqui donde interviene el bit SUID, donde al activarlo obliga
al archivo ejecutable binario a ejecutarse como si lo hubiera lanzado el usuario propietario
y no realmente quien lo lanz o ejecut. Es decir, es poder invocar un comando propiedad
de otro usuario (generalmente de root) como si uno fuera el propietario.
SGID
El bit SGID funciona exactamente igual que el anterior solo que aplica al grupo del archivo.
Es decir si el usuario pertenece al grupo 'ventas' y existe un binario llamado 'reporte' que su
grupo es 'ventas' y tiene el bit SGID activado, entonces el usuario que pertenezca al grupo
'ventas' podr ejecutarlo. Tambin se muestra como una 's' en vez del bit 'x' en los permisos
del grupo.
STICKY BIT (Bit de persistencia)
Este bit se aplica para directorios como en el caso de /tmp y se indica con una 't':
#> ls -ld /tmp
drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp
Puede apreciarse la 't' en vez de la 'x' en los permisos de otros. Lo que hace el bit de
persistencia en directorios compartidos por varios usuarios, es que el slo el propietario del
archivo pueda eliminarlo del directorio. Es decir cualquier otro usuario va a poder leer el
contenido de un archivo o ejecutarlo si fuera un binario, pero slo el propietario original
podr eliminarlo o modificarlo. Si no se tuviera el sticky bit activado, entonces en estas
carpetas pblicas, cualquiera podra eliminar o modificar los archivos de cualquier otro
usuario.
Estableciendo los permisos especiales
Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando un
nmero octal (1 al 7) extra al principio de los permisos, ejemplo:
#> ls -l /usr/prog
-r-x--x--x 24 root root 4096 sep 25 18:14 prog
#>chmod 4511 /usr/prog
#> ls -l /usr/prog
-r-s--x--x 24 root root 4096 sep 25 18:14 prog
Ntese que el valor extra es el '4' y los dems permisos se dejan como se quieran los
permisos para el archivo. Es decir, los permisos originales en este ejemplo eran 511 (r-x--x-x), y al cambiarlos a 4511, se cambi el bit SUID reemplazando el bit 'x' del usuario por
's'.
Los posibles valores seran los siguientes:
--------------t
-----s------s-t
--s------s----t
--s--s---s--s-t
=0
=1
=2
=3
=4
Bit suid
=5
=6
=7
MUY IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy en cuenta
es lo que decidas establecer con permisos de bit SUID y SGID, ya que recuerda que al
establecerlos de esta manera, cualquier usuario podr ejecutarlos como si fueran el
propietario original de ese programa. Y esto puede tener consecuencias de seguridad severas
en tu sistema. Siempre considera y reconsidera si conviene que un usuario normal ejecute
aplicaciones propias de root a travs del cambio de bits SUID o SGID. Mejores alternativas
pueden ser los comandos sudo y su, en este tip de [Link] encuentras una manera
de identificar archivos y ejecutables con estos bits establecidos.
Permisos preestablecidos con umask
COMANDO TOP
Top es una herramienta que nos proporciona informacin de los procesos que se estn
corriendo en ese momento en tiempo real con valor de uso de CPU, memoria, swap y la
posibilidad de manipular procesos. Presenta una interfaz simple que cuenta con varias
partes.
Para ejecutar este comando solo tenemos que colocar en la consola:
# top
Y nos vamos a encontrar con algo como esto:
Cuarta linea: Muestra valores referentes a la memoria fsica del equipo (los valores
pueden ser algo enaosos).
Tota: Es el valor total de la memoria fsica
Used: Es el valor de la memoria utilizada
Free: Es el valor de la memoria libre
Buffered: Es el valor de memoria fsica que esta en el buffer de memoria.
Quinta linea: Muestra valores referentes al uso de la memoria SWAP. Es similar a la
cuarta linea en cuanto a los datos que proporciona salvo por un solo cambio que al
final de la linea muestra la memoria que esta cacheada.
Ahora bien, como puedo calcular la memoria libre que tengo en el sistema?. Para eso lo que
tenemos que hacer es sumar una serie de valores que nos presenta el comando top. La
memoria disponible es la suma del valor buffered en la cuarta linea y el valor cached de
la quinta linea:
Memoria RAM disponible = Cached(12964k) + Buffered(153762k)
Para averiguar cuanta memoria estan utilizando los programas:
Memoria RAM utilizada por programas = Used (1942256) (Cached(12964k) +
Buffered(153762k))
Luego, en la parte inferior de la pantalla se encuentra la lista de procesos corriendo en el
sistema en orden descendente. Cada linea cuenta con los siguientes datos:
PID: Process ID del proceso
USER: Usuario que esta corriendo dicha aplicacion
PR: Prioridad del proceso
NI: Valor por el cual se establece una prioridad para el proceso
VIRT: Total de la memoria virtual usada
RES: Resident task size
SHR: Estado del proceso. S (sleeping), D (uninterruptible
sleep), R (running), Z(zombies), or T (stopped or traced)
%CPU, %MEM: Porcentajes de memoria y cpu utilizados en ese momento
Time: El tiempo de uso del procesador para ese proceso
Command: El comando que esta siendo ejecutado por el Daemon
P (upercase) -> Ordena los procesos por uso de CPU, esta opcion es la default
M (upercase) -> Ordena los procesos por memoria residente
T (upercase) -> Ordena los procesos por tiempo.
W (upercase) -> Guarda la configuracion que hicimos
q -> Salir de Top
Adems top cuenta con una serie de switches adems de las opciones anteriores:
top -u usuario -> Muestra los procesos que estan corriendo con ese usuario y sus valores
top -p PID -> muestra el proceso seleccionado y sus valores
top -n numero -> Numero es la cantidad de iteraciones que va a tener el comando y luego
se cerrara
top -d numero -> Numero es el tiempop en segundos que va a esperar el comando para
refrescar la lista.
top -b -> Batch mode, ideal para mandar resultados desde top a otros programas
Existen muchsimos mas switches y opciones para utilizar con top solo puse algunas de
ellas, pero si quieren saber mas de lo que puede hacer esta herramienta pueden ingresar el
siguiente link:
[Link]
comando more no era lo suficientemente amigable, por eso hicieron less. Su sintaxis es la
siguiente:
less [archivo...]
El comando less es un programa interactivo, es por lo que no se hablar de argumentos sino
de comandos:
ESPACIO
Si se oprime la barra espaciadora, less avanzar un nmero de lneas igual al nmero de
lneas por pantalla que posea la terminal que se est usando.
ENTER
Pulsando la tecla ENTER se va avanzando de lnea en lnea.
G: Ir al final del texto.
g: Ir al inicio del texto.
/: Ingresar una palabra a ser buscada avanzando dentro del texto.
?: Ingresar una palabra a ser buscada retrocediendo dentro del texto.
n: Ir a la siguiente ocurrencia de la bsqueda
AvPg: Avanzar una pantalla de texto.
RePg: Retroceder una pantalla de texto.
v: Cargar el editor de texto en el lugar donde se encuentre el usuario dentro del archivo. El
editor que normalmente se utiliza es el vi.
q: Salir del programa.
R: Repintar la pantalla. til cuando se est visualizando un archivo que ha sido modificado
por otro programa.
Para visualizar un archivo de texto llamado [Link], se puede utilizar less como sigue:
less [Link]
Tambin se puede utilizar tuberas y cat para realizar lo mismo.
cat [Link] | less
Comando TAIL
El comando tail es al head como el less es al more. El comando tail escribe a la salida
estndar la ltima parte de un archivo. Su sintaxis es:
tail [opcin...] [archivo...]
Al igual que head, si no se le proporciona un argumento archivo, este comando tomar su
entrada desde la entrada estndar, la cual sin opciones muestra las ultimas 10 lneas. Alguna
COMANDO HEAD
Escribe por salida estndar la primera parte de un archivo, por defecto, son las primeras 10
lneas. Su sintaxis es como sigue:
head [opcin...] [archivo...]
Si no se especifica el argumento archivo, este comando tomar su entrada de la entrada
estndar. La lista de opciones ms importantes sigue a continuacin:
-c N: Escribe los primeros N bytes.
-n N: Escribe las primeras N lneas en vez de las primeras 10 (que es el valor
predeterminado).
Comando WC
El nombre del comando wc proviene de word count, y como es de suponer, sirve para
contar palabras. Pero no slo palabras como se ver a continuacin. Su sintaxis es como
sigue:
wc [opcin...] [archivo...]
COMANDO GREP
Su funcionalidad es la de escribir en salida estndar aquellas lneas que concuerden con un
patrn. Su sintaxis es como sigue:
grep [opciones] PATRN [ARCHIVO...]
grep [opciones] [-e PATRN | -f ARCHIVO] [ARCHIVO...]
Este comando realiza una bsqueda en los archivos (o en la entrada estndar, si no se
especifica ninguno) para encontrar lneas que concuerden con PATRN. Por defecto grep
imprime en pantalla dichas lneas. Sus opciones ms interesantes son:
-c: Modificar la salida normal del programa, en lugar de imprimir por salida estndar las
lneas coincidentes, imprime la cantidad de lneas que coincidieron en cada archivo.
-i: Busca caracteres sin importar sin son maysculas o minsculas.
-e PATRN: Usar PATRN como el patrn de bsqueda, muy til para proteger aquellos
patrones de bsqueda que comienzan con el signo -.
-f ARCHIVO: Obtenee los patrones del archivo ARCHIVO
-H: Imprimir el nombre del archivo con cada coincidencia.
-r: Buscar recursivamente dentro de todos los subdirectorios del directorio actual.
El patrn de bsqueda normalmente es una palabra o una parte de una palabra. Tambin se
pueden utilizar expresiones regulares, para realizar bsquedas ms flexibles.
Si se quisiera buscar la ocurrencia de todas las palabras que comiencen con a minscula,
la ejecucin del comando sera algo as:
grep 'a*' archivo
Tambin se pueden aprovechar las tuberas para realizar filtros, lo anterior es equivalente a:
cat archivo | grep 'a*'
COMANDO NANO
Nano es el un sencillo editor de textos para el terminal que viene instalado por defecto en
Ubuntu. No es tan potente como Vim o Emacs pero es mucho ms fcil de manejar que estos.
As cualquier usuario por poco experimentado que sea es capaz de empezar a usar Nano
desde el primer momento gracias a las dos lneas de ayuda que mantiene en su parte inferior.
Al ser un editor en modo texto, se suele usar sobretodo en entornos sin interfaz grfica como
Ubuntu Server, pero eso no impide que lo utilicemos en Ubuntu Desktop.
Para editar un archivo con Nano tenemos que ejecutar el siguiente comando:
nano nombre_archivo
donde nombre_archivo ser el nombre del archivo que queramos editar. En caso de que el
archivo no existiera, se crear un archivo vaco con ese nombre.
Vamos a editar el archivo .bash_history, que contiene los comandos que hemos ido
escribiendo en el terminal, para ver un ejemplo concreto:
nano bash_history
Nos aparecer entonces el contenido del archivo para que podamos modificarlo con el editor.
Si lo modificamos (no te preocupes que en este archivo no pasa nada si lo cambias), veremos
en la parte superior derecha el texto Modificado. Para guardar los cambios, pulsaremos la
combinacin de teclas Control+o. Y para salir, Control+x.
Funcin
Muestra la ayuda
Salir sin guardar
Guarda el archivo actual
Busca una cadena de texto o expresin regular
Corta la lnea actual
Pega la lnea cortada
Activa o desactiva el soporte para el ratn
Busca una cadena y la reemplaza por otra
Activa o desactiva el desplazamiento suave
Sin embargo, si quieres exprimir al mximo las posibilidades de este editor, sera
recomendable leer la ayuda que trae. Para ello pulsamos en cualquier momento F1 o la
combinacin de teclas Control+g (como se indica en la tabla anterior).
COMANDO VIM O VI
vi (pronunciado ube-i) es el editor estndar de UNIX. El inters de aprender a manejar este
editor es que en cualquier mquina UNIX tendremos al menos esta herramienta para editar
ficheros. vi facilita 20 lneas en pantalla para realizar la edicin. vi es un editor que, en un
momento dado, se encuentra en uno de dos modos bsicos de operacin: modo de
comandos y modo de edicin.
El modo por defecto es el modo de comandos. En este modo no se puede realizar la
edicin del texto. vi espera al comando apropiado antes de realizar una operacin. En
general, vi volver al modo de comandos despus de ejecutar un comando.
La ventaja de este modo de trabajar es que se pueden ejecutar comandos desde ficheros, y
los documentos pueden ser formateados o reestructurados simplemente ejecutando
comandos de vi.
Si al presionar ESC el terminal emite un pitido quiere decir que estamos en modo de
comandos.
Iniciando vi
Para comenzar a usar vi, teclear
vi nuevo_fichero
Este comando inicia el editor y, como el fichero no existe todava, lo crea para ser editado.
El editor est ahora en modo de comandos esperando por un comando.
vi +5 nombre_fichero
//Comienza la edicin en la lnea 5
vi + nombre_fichero
//Comienza la edicin en la ltima lnea
Moviendo el cursor
Las siguientes teclas controlar el movimiento del cursor.
k arriba j abajo h izquierda l derecha
Cuando se carga vi con un nuevo fichero, el cursor est en la esquina superior izquierda de
la pantalla, y no puede ser movido con las teclas de cursor.
Modo de entrada de texto (aadir, insertar)
a aade texto a partir del carcter en que est situado el cursor. A aade texto al final de
la lnea actual. i inserta texto a partir de la posicin del cursor I inserta texto al
principio de la lnea actual. o inserta una lnea debajo de la posicin del cursor O
inserta una lnea encima de la posicin del cursor :r fich permite insertar el fichero
fich tras la lnea actual
Borrando y cambiando texto
Los tres comandos ms utilizados para alterar el texto son
x borra el carcter en el cursor nx borra n caracteres hacia la derecha, incluido el que
cadena.
El comando n busca hacia adelante la siguiente ocurrencia.
Para buscar hacia atrs, se utiliza el comando ?
Borrar texto
Ya se vio anteriormente el comando dd para borrar la lnea actual.
El comando dw borra la palabra actual. Ntese que el comando de borrado comienza por d,
seguido por el mbito de aplicacin (d para una lnea, w para una palabra (word en ingls)).
Quitar y poner
Cuando se borra algo, es almacenado en un buffer temporal. El contenido de este buffer
puede ser accedido y 'puesto' o pegado en cualquier sitio del texto.
Para recuperar el ltimo texto borrado, se usa el comando p
nyw guarda en la memoria intermedia n palabras contadas desde la posicin del cursor.
y$ guanda en la memoria intermedia desde la posicin del cursor hasta el final de la lnea.
yy guarda en la memoria intermedia la lnea entera en la que se encuentra el cursor.
yn guarda en la memoria intermedia n+1 lneas desde la lnea actual.
La salida estndar es hacia donde el comando enva su salida. Este flujo de datos se
imprime en la consola y se enva al STDIN de un comando que lo consuma
Ejemplo: En un directorio tenemos 2 archivos y el contenido de 1 de ellos es Contenido
del archivo.
Si buscamos Contenido dentro de ellos obtenemos:
$ grep Contenido *
[Link]:Contenido del archivo
La salida del comando se envi al STDOUT, en este caso, la consola.
STDIN (Standard Input)
La entrada estndar proviene del teclado o de la salida de otro comando.
Ejemplo:
Si listamos solamente los primeros 4 directorios o archivos del directorio raz:
$ ls / | head -n4
bin
boot
cdrom
dev
La salida STDOUT del comando ls se convierte en la STDIN del comando head y lo que
vemos en la consola es el STDOUT del comando HEAD
STDERR (Standard Error)
La salida estndar de error es hacia donde el comando enva datos de error al momento
de realizar su tarea. Este flujo de datos tambin se imprime en la consola pero NO se enva
al STDIN de un comando que lo consuma.
Ejemplo: En un directorio tenemos 4 archivos cuyo contenido es Contenido del archivo y
sobre 2 de ellos no tenemos permiso de lectura.
a) Si buscamos Contenido dentro de todos ellos obtenemos:
$ grep Contenido *
[Link]:Contenido del archivo
[Link]:Contenido del archivo
REDIRECCION Y TUBERIAS
Una redireccin consiste en trasladar la informacin de un tipo a otro, por ejemplo de la
salida estndar a la entrada estndar o del error estndar a la salida estndar. Esto lo
logramos usando el smbolo >.
Por ejemplo, para redireccionar la salida de un comando y volcarla a un archivo bastara
con ejecutar:
$ ls -la ~ > [Link]
Sin embargo, cada vez que ejecutemos ese comando el contenido de [Link]
reemplazado por la salida del comando ls. Si queremos agregar la salida del comando al
archivo, en lugar de reemplazarla, entonces ejecutamos:
$ ls -la ~ >> [Link]
Por ejemplo, podramos ver los procesos que estn corriendo en el sistema usando ps y le
redireccionamos la salida a sort para que los ordene por PID:
$ ps -a | sort
Tambin podemos redireccionar la salida estndar del comando cat y pasarla como
entrada estndar del comando wc para contar las lneas y palabras de un archivo:
$ cat [Link] | wc
Tanto las redirecciones como las tuberas son conceptos fundamentales que sin duda
debes manejar para empezar a sentirte cmodo con la terminal. Vers que al cabo de un
tiempo no sabrs cmo pudiste vivir sin ellos.
COMANDO PING
Comando de administracin del sistema. Confirma que un host remoto est online y
responde. El ping se usa para verificar la conectividad entre dos hosts en una red. Enva
una paquetes de peticin echo de ICMP a una direccin IP remota y espera respuestas
ICMP.
SINTAXIS:
La sintaxis es
ping [opciones] host
OPCIONES:
-a
-b
-c
cuenta
-n
-q
-i
-t
-w
EJEMPLO:
1. ping [Link] -c 3
Muestra ECHO_REQUEST 3 veces slo porque establecemos la cuenta a tres.
2. ping -n [Link]
Aqu las direcciones de red se muestran como nmeros, normalmente muestra
hostnames.
COMANDO SSH Y VARIATES
SSH es un programa que permite acceder a otro ordenador a traves de la red, ejecutar
comandos en la maquina remota y mover ficheros entre dos maquinas. Provee
autenticacion y comunicaciones seguras sobre canales inseguros. Es un reemplazo
de rlogin, rsh y rcp.
Vamos a ver estos usos basicos del SSH.
ssh
El comando ssh ofrece comunicacion encriptada y segura entre dos sistemas sobre una
red no segura. Este comando reemplaza al telnet, rlogin, rsh.
Para iniciar una sesion en otra maquina usando ssh:
[usuario1@localhost usuario1]$ ssh usuario1@[Link]
The authenticity of host '[Link] ([Link])' can't be established.
RSA key fingerprint is [Link].
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[Link]' (RSA) to the list of known hosts.
usuario1@[Link]'s password:
[usuario1@[Link] usuario1]$
La primera vez que realizas la conexion debes aceptar la firma del otro host. De esta
manera se establece una relacion de confianza que se traduce en archivar la clave
publica de este servidor en el fichero $HOME/.ssh/known_hosts.
ssh user@hostname [command]
El comando es opcional. Si se especifica en lugar de obtener un shell se ejecuta el
comando en la maquina remota.
Por ejemplo podriamos hacer un ls en la maquina remota y observar su salida:
ssh usuario1@[Link] ls
O realizar alguna operacion mas elaborada como realizar una copia en local de un
directorio remoto, como en el ejemplo:
ssh usuario1@[Link] "tar cf - /home/usuario1" |\
tar xvf -
Una de las funcionalidades que le da mayor potencia al ssh es la redireccion de las X. Si
observas la variable de entorno DISPLAY observa que tiene la forma localhost:n.n, esta
permite que al abrir cualquier aplicacion grafica su salida se redirija al display del cliente.
[usuario1@localhost usuario1]$ ssh usuario1@[Link]
[usuario1@servidor usuario1]$ echo $DISPLAY
localhost:11.0
[usuario1@servidor usuario1]$ xeyes&
[usuario1@servidor usuario1]$
scp
El comando scp permite copiar ficheros entre dos maquinas. Utiliza ssh para la
transmision de la informacion, por lo que ofrece la misma seguridad que el ssh. De la
misma manera utiliza los metodos de autenticacion de ssh. Este comando reemplaza
al rcp, ftp.
Este es un ejemplo de uso del scp para copiar desde la mquina local a una remota:
[usuario1@localhost]scp /tmp/file usuario1@[Link]:/tmp
-p: conserva las propiedades del archivo. Permisos del archivo, fecha de ultima de
modificacion.
-r: copia recursiva de directorios
sftp
El comando sftp transfiere archivos entre maquinas de forma interactiva.
Los comandos interactivos son similares al clasico ftp:
[usuario1@localhost usuario1]$ sftp [Link]
Connecting to [Link]...
usuario1@servidor's password:
sftp> help
Available commands:
cd path Change remote directory to 'path'
lcd path Change local directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
Tambin hay un comando muy til para hacer un mirror, una copia exacta de un sitio web,
principalmente a mi me llama la atencin este comando para crear backups de sitios
creados por nosotros, se ejecuta:
wget mirror [Link]
Un comando parecido al anterior y muy interesante es poder descargar toda una web de
forma recursiva haciendo uso de esta misma:
wget -r [Link]
Hay muchos mas comandos, para los cuales les recomiendo leer el manual de wget
donde podrn ver mas beneficios y sobre todo las variadas y grandes opciones que tiene
este programa desde terminal.
COMANDO CURL
cURL tiene tantas opciones que lo mejor es leer su manual tendidamente. Estos que os
muestro son algunos de los usos comunes de cURL:
Para descargar un archivo:
$ curl -o [Link] [Link]
A diferencia de wget, cURL retorna el contenido descargado a la salida estdar, con lo que
usaremos la opcin -o para guardar la descarga realizada.
Para descargar una serie de archivos, podemos proporcionar una secuencia, un conjunto o
ambos. Una secuencia es una serie de nmeros entre corchetes ([]); un conjunto es una
lista delimitada por comas entre llaves ({}). Por ejemplo, el siguiente comando nos
descargar todos los archivos llamados [Link], [Link] y [Link] desde los
directorio llamados archive1996/vol1 hasta archive1999/vol4, ambos inclusive, con un
total de 48 archivos. As, usandocURL:
$ curl [Link] \
-o archive#1_vol#2_part#[Link]
Cuando se especifica una secuencia o serie, podemos proporcionar la opcin -o con una
plantilla (template), donde #1 se sustituir por el valor actual de la primera secuencia o
serie, #2 es un marcador de posicin para la segunda, y as sucesivamente. Como
collisions:0 txqueuelen:1000
RX bytes:2694625909 (2.5 GiB) TX bytes:4106931617 (3.8 GiB)
Interrupt:185 Base address:0xdc00
Ver detalles de todas las interfaces, incluyendo las descativadas
ifconfig a
Descativar una interfaz
ifconfig eth0 down
Activar una interfaz
ifconfig eth0 up
Asignar una direccin IP a una interfaz
Le asignamos la direccin IP [Link] a la interfaz eth0.
ifconfig eth0 [Link]
Cambiar la mscara de subred de la interfaz eth0.
# ifconfig eth0 netmask [Link]
Cambiar la direccin de difusin (broadcast) de la interfaz de eth0.
# ifconfig eth0 broadcast [Link]
Asignar direccin IP, mscara de red y de difusin, al mismo tiempo a la interfaz eht0.
# ifconfig eth0 [Link] netmask [Link] broadcast [Link]
Cambiar el MTU
Esto va a cambiar la unidad de transmisin mxima (MTU) a un valor. MTU es el nmero
mximo de octetos que la interfaz es capaz de manejar en una transaccin. Para una
Ethernet la unidad de transmisin mxima por defecto es 1500.
# ifconfig eth0 mtu valor
Videos y Referencias
[Link]
[Link]
[Link]
[Link]
[Link]