GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es ese total en la primera línea después de ls -l?

Puede encontrar la definición de esa línea en el ls documentación para su plataforma. Para coreutils ls (el que se encuentra en muchos sistemas Linux), la información se puede encontrar a través de info coreutils ls :

Para cada directorio que aparece en la lista, anteponga los archivos con una línea `total BLOCKS', donde BLOCKS es la asignación total de disco para todos los archivos en ese directorio.


La Fórmula:¿Qué es eso número?

totales int =Suma de (bloques_físicos_en_uso) * tamaño_bloque_físico/tamaño_bloque_ls) para cada archivo.

Dónde:

  • ls_block_size es una variable de entorno arbitraria (normalmente 512 o 1024 bytes) que se puede modificar libremente con el --block-size=<int> bandera en ls , el POSIXLY_CORRECT=1 Variable de entorno GNU (para obtener unidades de 512 bytes), o -k marca para forzar unidades de 1kB.
  • physical_block_size es el valor dependiente del sistema operativo de una interfaz de bloque interna, que puede o no estar conectada al hardware subyacente. Este valor es normalmente 512b o 1k, pero depende completamente del sistema operativo. Se puede revelar a través del %B valor en stat o fstat . Tenga en cuenta que este valor (casi siempre) no está relacionado con el número de bloques físicos en un moderno dispositivo de almacenamiento.

¿Por qué tan confuso?

Este número está bastante separado de cualquier métrica física o significativa. Muchos programadores principiantes no han tenido experiencia con agujeros de archivo o enlaces duros o simbólicos. Además, la documentación disponible sobre este tema específico es prácticamente inexistente.

La inconexidad y la ambigüedad del término "tamaño de bloque" ha sido el resultado de numerosas medidas diferentes que se confunden fácilmente y los niveles relativamente profundos de abstracción que giran en torno al acceso al disco.

Ejemplos de información contradictoria:du (o ls -s ) frente a stat

Ejecutando du * en una carpeta de proyecto produce lo siguiente:(Nota:ls -s devuelve los mismos resultados).

dactyl:~/p% du *
2       check.cc
2       check.h
1       DONE
3       Makefile
3       memory.cc
5       memory.h
26      p2
4       p2.cc
2       stack.cc
14      stack.h

Totales :2+2+1+3+3+5+26+4+2+14 =62 Bloques

Sin embargo, cuando uno ejecuta stat vemos un conjunto diferente de valores. Ejecutando stat en el mismo directorio produce:

dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3       (512)   check.cc: 221 bytes
3       (512)   check.h: 221 bytes
1       (512)   DONE: 0 bytes
5       (512)   Makefile: 980 bytes
6       (512)   memory.cc: 2069 bytes
10      (512)   memory.h: 4219 bytes
51      (512)   p2: 24884 bytes
8       (512)   p2.cc: 2586 bytes
3       (512)   stack.cc: 334 bytes
28      (512)   stack.h: 13028 bytes

Total: 3+3+1+5+6+10+51+8+3+28 =118 Bloques

Nota: Puedes usar el comando stat * --printf="%b\t(%B)\t%n: %s bytes\n"> para generar (en orden) el número de bloques, (entre paréntesis) el tamaño de esos bloques, el nombre del archivo y el tamaño en bytes, como se muestra arriba.

Hay dos cosas importantes para llevar:

  • stat informa tanto el physical_blocks_in_use y physical_block_size como se usa en la fórmula anterior. Tenga en cuenta que estos son valores basados ​​en las interfaces del sistema operativo.
  • du proporciona lo que generalmente se acepta como una estimación bastante precisa de utilización del disco físico.

Como referencia, aquí está el ls -l del directorio anterior:

dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.cc
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.h
-rw-r--r--. 1 dhs217 grad     0 Oct 16  2013 DONE
-rw-r--r--. 1 dhs217 grad   980 Oct 16  2013 Makefile
-rw-r--r--. 1 dhs217 grad  2069 Oct 16  2013 memory.cc
-rw-r--r--. 1 dhs217 grad  4219 Oct 16  2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18  2013 p2
-rw-r--r--. 1 dhs217 grad  2586 Oct 16  2013 p2.cc
-rw-r--r--. 1 dhs217 grad   334 Oct 16  2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16  2013 stack.h

Ese es el número total de bloques del sistema de archivos, incluidos los bloques indirectos, utilizados por los archivos enumerados. Si ejecuta ls -s en los mismos archivos y suma los números reportados obtendrás el mismo número.


Linux
  1. ¿Cómo insertar texto antes de la primera línea de un archivo?

  2. Bash sobrescribe la primera línea, Ps1 Bash Prompt?

  3. ¿Qué significa Ampersand al final de una línea de script de Shell?

  4. ¿Cómo dividir un archivo y mantener la primera línea en cada una de las piezas?

  5. ¿Qué hace la línea '!/bin/sh -e'?

Linux:¿qué significa un punto después de los bits de permiso del archivo?

¿Cómo saber en qué versión de Os X estoy desde la línea de comandos?

¿Devolver solo la parte de una línea después de un patrón coincidente?

¿Cuál es el significado de cada línea de la salida del ensamblado de un mundo C hello?

¿Cómo diferenciar solo la primera línea de dos archivos?

¿Línea de comando para volver a la GUI después de Ctrl-Alt-F1?