Si ejecuta ls -l en un archivo que contiene una letra, aparecerá en tamaño 2B. Si su sistema de archivos está en bloques de 4k, ¿pensé que redondeaba los archivos al tamaño del bloque? ¿Es porque ls -l realmente lee el recuento de bytes del inodo? ¿En qué circunstancias se le redondea para bloquear las respuestas frente a las respuestas reales de conteo de bytes en las utilidades GNU Kernel de Linux 2.6?
linux
filesystems
ls
ext3
Gregg Leventhal
fuente
fuente
Respuestas:
Supongo que tiene esa letra en el archivo con
echo a > file
ovim file
, lo que significa que tendrá esa letra y una nueva línea adicional (dos caracteres, por lo tanto, dos bytes).ls -l
muestra el tamaño del archivo en bytes, no bloques (para ser más específico: longitud del archivo ):(nota que
cat -A
muestra nuevas líneas como$
carácter)En contraste con
ls -l
,du
mostrará el tamaño real ocupado en el disco:(en realidad,
du
muestra el tamaño en unidades de 1 KB, por lo que aquí el tamaño es 4 × 1024 bytes = 4096 bytes = 4 kiB, que es el tamaño de bloque en este sistema de archivos)Para
ls
mostrar esto, deberá usar la-s
opción en lugar de / además de-l
:La primera columna es el tamaño asignado, nuevamente en unidades de 1 kB. El último se puede cambiar especificando
--block-size
, p. Ej.fuente
Creo que la respuesta profunda es la siguiente:
Como muestran las otras respuestas, en principio un archivo creado con dos bytes tiene una longitud de dos bytes (mostrar por
ls -l
) y ocupa 4 KiB (mostrar pordu
ols -ls
).Ver:
Ok,
test
tiene longitud 1 y tamaño (en disco) 4 KiB. Pero:(el primer comando agrega 8191 bytes cero a
test
), ahora la prueba tiene una longitud de 8192 pero aún ocupa 4 KiB en el disco (tiene un "agujero") (1).Algunos sistemas de archivos también pueden compactar archivos cortos para que ocupen menos espacio al compartir bloques (ver, por ejemplo, el empaquetado de cola ) y otros, como btrfs, copian al escribir , por lo que la relación entre un archivo, su longitud lógica y cuánto espacio ocupa en Un disco es complejo.
Notas al pie:
(1) No es realmente un agujero , está al final ... pero aún así, funciona hasta el final del ejemplo.
fuente
ls -l
Es solo un formato largo.ls -ls
se usa para mostrar el tamaño del bloque.Pruebas
Como podemos ver, el tamaño del archivo aparece como 2B. Sin embargo, si necesita verificar el tamaño del bloque, debe ejecutar el siguiente comando.
El 4 anterior muestra el tamaño de bloque utilizado. También podemos verificar lo mismo usando el
stat
comando.Ahora surge la pregunta de por qué
ls -ls
enumera el tamaño de bloque como 4 mientrasstat
muestra el tamaño de bloque como 8. La razón de este comportamiento se explica claramente en la respuesta aquí .fuente