Logo
  • Entries
  • Comments
  • Popular
Recent Posts
  • January 2012
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • July 2007
Recent Comments
  • Makendra It's always a pleasure to hear from someone with eexrpitse....
  • Rubén Ortiz Hola dependerá de varias cosas pero la respuesta sería NO. ...
  • jose miguel perea Buenos días, ¿La replicación entre maestro y esclavo es i...
  • Rubén Ortiz Si lo hacéis legal, con VMware el único problema son los cos...
  • Angel Hola, estamos valorando implementar baremetal para crear un ...
Popular Articles
  • Declaro la guerra al mosquito Tigre (35)
  • Phpbb3 - encode error converter (19)
  • MySQL - Variables básicas a configurar (17)
  • Reinicio programado Windows 2003 Server (16)
  • Plesk - Evitar el SPAM (10)
  • Home
  • Contacta
  • Hosting Linux
  • Legal
  • Sobre mí – About me

Linux LPI1 – Apuntes III

Posted by Rubén Ortiz on Dec 9, 2007 in Linux | 2 comments

Vamos a hablar de inodos.

“The relationship between files as expressed in the file system directory files and the data on disk is a construct called an inode. An inode, or index node, represents the ability to associate a file with blocks on the disk. Only one inode is assigned to a file a its creation.”

Dibujo tabla inodos linux


En un sistema Linux/Unix cada fichero, cada directorio, tiene su inodo. Cada fichero o directorio se identifica por su número de inodo. Los inodos son punteros al disco llamados disk blocks(bloques de disco). Los disk blocks son agrupados en conjuntos de ocho, cada grupo es llamado block group. Cada inodo es por defecto asociado con un disk block que está al comienzo de su block group y ese block group está inicialmente reservado sólo para ese archivo o directorio. Esto da la capacidad a este espacio de crecer sin fragmentarse.

El número identificador de inodo es único dentro del sistema de ficheros. Un inodo contiene la siguiente información:

  • Número de inodo
  • Tipo de fichero
  • Propietario de dicho fichero
  • Permisos del fichero
  • Fecha de creación del mismo

Toda esta información la vemos cuando ejecutamos

1
# ls -l

Otro comando que nos informa sobre todo lo referente al inodo de un determinado fichero o directorio, es el comando stat

1
# stat /etc/

File: «/etc/»
Size: 12288 Blocks: 32 IO Block: 4096 directorio
Device: 803h/2051d Inode: 3401217 Links: 103
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2007-12-08 10:35:50.000000000 +0100
Modify: 2007-12-08 10:43:35.000000000 +0100
Change: 2007-12-08 10:43:35.000000000 +0100

La tabla de inodos se crea en el arranque del sistema y también saber que el comando find utiliza esta tabla para realizar sus búsquedas. Tenemos un límite físico de inodos, aplicable a particiones ext2/ext3. No se a que se debe esa limitación física, pero quizá tiene que ver con las limitaciones intrínsecas de los propios discos duros(confirmaré posteriormente esta duda). Algo interesante a comentar es que, un determinado usuario podría llegar a “agotar” el espacio físico de la tabla de inodos, creando miles de ficheros vacíos. Al no contener nada, el usuario no agotaría una posible cuota de disco, pero quebraría al sistema porque la tabla de inodos estaría completa.

Al hacer un

1
#ls /home/usuario

¿Qué ocurre?El ls es un comando que el shell interpreta y ejecuta, de manera estándar, hasta 7 accesos a disco. De manera transparente al usuario, el sistema está comprobando la tabla de inodos, para averiguar donde y que hay en esa dirección que apuntamos en el comando. Vamos a intentar describir el proceso de un “ls /home/usuario” (tengo que repasar esto!):

  • 1. Lee del superbloque(BS) y consulta donde está la tabla de i-nodos.
  • Lee de la tabla de i-nodos. Es un i-nodo raíz
  • El i-nodo raíz apunta a un bloque de disco.
  • Este bloque le indica al i-nodo que debe buscar en la tabla de i-nodos
  • Entonces busca la información del usuario
  • Va a la tabla de i-nodos donde está el i-nodo, /home/usuario
  • De la tabla de i-nodos salta al directorio /home/usuario

Otro ejemplo de los inodos, son los conocidos “.” y “..” visibles en todos los directorios del sistema. Ya sabemos que “..” guarda la dirección del directorio contenedor donde nos encontremos en ese momento. Al ejecutar

1
# cd ..

estamos buscando el inodo “..” del directorio en cuestión, lo que se traduce a la práctica en accesos a disco para buscar la información. Cuando creamos un directorio con mkdir, estamos creando también los . y .. en el árbol de directorios.

Comandos y acciones comúnes

1
# cp -r -v

Copia recursivamente, ficheros y directorios, y muestra por pantalla la información de lo que está pasando.

1
# mv -v -f -i

Mueve el directorio o fichero, muestra la información por pantalla, con i pide la autorización del usuario y con f fuerza la acción.

1
#mkdir -p /home/pepe/documentos/varios

Crea todos los contenedores de una sóla vez.

1
#rm -r

Borra recursivamente, lo contenido en el directorio y lo que a su vez, contengan otros directorios dentro del mismo.

1
#touch

Crea un fichero vacío.

Expresión regular

1
# ls *

Hace un ls de cualquier archivo o directorio con cualquier nombre y extensión(equivalente a ls .*)

? = cualquier carácter.Ej:

1
# ls a?b

[abc]d = 2 letras. La 1ª o a,b y c y la 2ª sólo d
[a-z]d = 2 letras. 1ª minúscula y 2ª sólo d
[!a-z]d= 2 letras. No minúsculas y la 2ª sólo d

Ejercicio. Copiar /usr a /home. Estando en /home

1
# cp -r /usr .

Ejercicio. Restaurar copia seguridad

1
#cp -dprvx / /mnt/backup

d = desreferenciar enlaces simbólicos
p = preserva permisos, fechas(metadatos)
r = recursivo
v = output
x = se salta directorios.

Más comandos

cat, more y less, son comandos similares. Muestran información de manera similar aunque tienen diferencias.
cut. Corta o selecciona información. Ejemplo:

1
#  ps axf | cut -c0-5

Esto mostraría…

PID
2
3
4
5
6
7
8
9
10
11
63

Ejercicio: ¿Cómo “matariamos” todos los procesos de un usuario en concreto, con un sólo comando?
Para saber todos los procesos que pertenecen por credencial a un usuario, ejecutamos

1
# ps -u usuario

Lo siguiente sería obtener los PIDs de esos procesos pertenecientes a ese usuario. Utilizando el anterior comando comentado,cut, lo podemos obtener de esta manera

1
# cut -c 1-5

Ahora tenemos los PIDs necesarios y sólo tenemos que pasarlo de alguna manera al comando kill. Recordamos que kill, de manera excepcional, no está conectado a las salidas estándar como la mayoría de comandos. Por lo tanto, la solución sería

1
# kill -9 $(ps -u usuario | cut -c 1-5)

Otro ejemplo de uso interesante del cut sería el siguiente. Vamos a extraer el nombre de todos los usuarios almacenados en el fichero /etc/passwd usando cut

1
# cut -d ":" -f 1 /etc/passwd

Con este comando, estamos separando la información por columnas, utilizando el parámetro -d y el valor “:”. Con -f1, estamos obteniendo la primera de esas columnas. Sería como coger de un array[10] el array[0]. Ya que la información en /etc/passwd se separa por “:”.

expand. Convierte espacios tabulados dentro de un fichero en espacios normales, preparados para su salida por la salida estándar. “Convert tabs in each FILE to spaces, writing to standard output”.

fmt. Siglas de simple optimal text formatter. Reformatea el texto adecuándolo a la salida estándar. Homogeniza los espacios o strings vacios.

head. Muestra las primeras líneas de un archivo.
tail. Muestra las últimas lineas de un archivo.
Ejemplo:

# tail -f /var/log/messages
Muestra dinámicamente las últimas entradas en el log messages

Ejercicio: mostrar la fila 7 y 8 de /etc/passwd

#head -8 /etc/passwd | tail -n2
Con head -8 extraemos las 8 primeras filas y con tail -n2, extraemos finalmente las 2 últimas de esas 8 filas. Por tanto, tenemos la fila 8 y 7.

nl. Númera las líneas de un archivo.
od. Información hexadecima, octal. Veámos el output con od:

1
2
3
# [root@localhost ~]# od /etc/passwd
0000000 067562 072157 074072 030072 030072 071072 067557 035164
0000020 071057 067557 035164 061057 067151 061057 071541 005150

paste.

1
#paste fichero1 fichero 2 > fichero 3.

Envia la informacion de fichero1 y fichero 2 a fichero 3, pero sin ningún orden.

pr. Prepara un fichero para su impresión, formateándolo y paginándolo.
uniq. Reporta u omite lineas repetidas.
sort. Ordena.
Ejemplo:

1
#sort /etc/passwd

Ordena alfabéticamente el fichero /etc/passwd

du. Disc usage. ” du informa de la cantidad de espacio de disco usada por los ficheros especificados, y por cada directorio en las jerarquías cuyas raíces estén en los ficheros especificados. Aquí, ‘espacio de disco usado’ significa espacio usado por la jerarquía de ficheros por debajo del fichero especificado.”
Ejemplo de du y sort. Ordenamos con orden descendente los directorios y ficheros según su espacio en disco.

1
# du | sort -nr

Su salida sería algo así:

4760 .
3736 ./.mozilla
3732 ./.mozilla/firefox
3724 ./.mozilla/firefox/dvcizv98.default
424 ./.gnome2
368 ./.gnome2/yelp.d
236 ./.gstreamer-0.10
…
…

split Split trocea la información y la divide en distintas partes. Por ejemplo, si tenemos una ISO de 10 GB podemos dividirla con split en archivos de 3.4 GB y luego volver a unir la información con cat.

1) split archivo.iso
2) cat f1 f2 f3 > archivo.iso

tac. El cat al revés.
tr. Sustituye carácteres. Ejemplo:

1
#tr a-z A-Z < archivo.txt

Cambiará todos los caracteres a mayúsculas.

wc. Word count. Cuenta líneas, palabras y carácteres.
xargs. Opera sobre los comandos. (Pendiente de completar)
sed. Siglas de Stream Editor. Editor tipo vi que opera sobre la entrada estándar.

sed ‘/root/d’ /etc/passwd
—— – —————
| | |_ argumento
| |_comando
|_ambito

Ejemplos:

1
# sed '/root/!d' /etc/passwd

Output:
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

Busca todo lo que contenga “root”

1
# sed '/root/d' /etc/passwd

Output:
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
….
….

Busca todo lo que NO contenga “root”

1
# sed 's/root/ruth/g' /etc/passwd

Cambia todos los strings “root” por “ruth”.

1
# sed 's/root/ruth/' /etc/passwd

Cambia sólo el primer string “root” encontrado.

2 Responses to “Linux LPI1 – Apuntes III”

  1. freddy says:
    1 de July, 2008 at 2:16 pm

    tengo un problema con mi servidor(CentOS4+Plesk)… tengo los inodos al 99% y el problema es q no sé como puedo liberarlos.

  2. Rubén Ortiz says:
    2 de July, 2008 at 12:24 pm

    Hola Freddy

    no conozco muchas opciones al respecto. Si la tabla de inodos llega al 99%, lo único que podemos hacer es liberar los inodos borrándolos, es decir, eliminándolos lógicamente de la tabla y eso requiere borrar archivos. Formatear. :S

    Siendo tu entorno Plesk, yo buscaría consejo directamente en los foros de Plesk o, si tienes licencias, abrir un tiquet de soporte.

    Saludos y suerte.

Leave a Reply

Click here to cancel reply.

Nube de Tags

apache bare metal benchmark cacti centos dell drupal esxi General gripe A Hardware humor IIS kayako Linux lpi lyric Lyrics memcached mysql nginx openfiler OpenVZ openx Parallels php Phpbb plesk postgresql proftpd raid SQL Server ssh svn trac ubuntu varnish Virtualizacion Virtuozzo Virtuozzo Linux Warphammer.net Windows windows 2003 wordpress zabbix

Categorias

  • 2003 Server
  • Apache 2.X
  • benchmark
  • Centos
  • Cuanto (Luser) Cabron
  • ESXi
  • General
  • Hardware
  • IIS
  • Lighttpd
  • Linux
  • Lyrics
  • MySql
  • Nginx
  • OpenVZ
  • Parallels
  • Parallels Bare Metal
  • Php
  • Phpbb
  • Plesk
  • PostgreSQL
  • Prestashop
  • Software
  • SQL SERVER
  • Ubuntu
  • Varnish
  • Virtualizacion
  • Virtuozzo
  • Virtuozzo Windows
  • VMWare
  • Warphammer.net
  • Windows
  • Wordpress

Blogroll

  • David Toribio
  • EasyCompany.es
  • Marius Duch
  • Series
  • Warphammer.net

Recursos

  • Backup Plesk9
  • CentOS 5 32 bits RPMs
  • CentOS 5 64 bits RPMs
  • Lighttpd
  • MySQL Tunner
  • OpenVZ – Panel – PROXMOX
  • OpenVZ – Panel – VTONF
  • OpenVZ Wiki
  • Parallels Virtual Automation Resources
  • Plesk 8 Docs
  • Plesk 9 Docs
  • Plesk Hacker
  • Port80 – Compression Check
  • Virtuozzo DOCS
  • Virtuozzo Lin Commands
  • Virtuozzo Win Commands
  • Virtuozzo Windows Docu

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Designed by Elegant Themes | Powered by Wordpress