ver tamaño subcarpetas por listar comando carpetas carpeta archivos linux file filesize ls proc

subcarpetas - ver tamaño de archivos en linux



¿Cómo puedo mostrar el tamaño de los archivos en/proc? no debería ser el tamaño cero (4)

Esos no son realmente archivos en el disco (como usted menciona) pero tampoco son archivos en la memoria: los nombres en / proc corresponden a llamadas al núcleo en ejecución en el sistema operativo, y los contenidos se generan sobre la marcha.

El sistema no sabe qué tan grandes serían los archivos sin generarlos, pero si lee el "archivo" dos veces, no hay garantía de que obtenga los mismos datos porque el sistema puede haber cambiado.

Puede que esté buscando el programa sysctl -a en su lugar.

del siguiente mensaje, sabemos que hay dos caracteres en el archivo / proc / sys / net / ipv4 / ip_forward, pero ¿por qué solo se muestra este archivo es de tamaño cero?

Sé que esto no es un archivo en el disco, sino un archivo en la memoria, entonces ¿hay algún comando que pueda ver el tamaño real de los archivos en / proc?

root@OpenWrt:/proc/sys/net/ipv4# cat ip_forward | wc -c 2 root@OpenWrt:/proc/sys/net/ipv4# ls -l ip_forward -rw-r--r-- 1 root root 0 Sep 3 00:20 ip_forward root@OpenWrt:/proc/sys/net/ipv4# pwd /proc/sys/net/ipv4


Las cosas en / proc no son realmente archivos. En la mayoría de los casos, ni siquiera son archivos en la memoria. Cuando accede a estos archivos, el controlador del sistema de archivos proc realiza una llamada al sistema que obtiene los datos apropiados para el archivo y luego los formatea para su salida. Esto suele ser datos dinámicos que se construyen sobre la marcha. Un ejemplo de esto es / proc / net / arp, que contiene la memoria caché ARP actual.

Obtener el tamaño de estas cosas solo se puede hacer formateando toda la salida, por lo que no se hace solo cuando se lista el archivo. Si desea los tamaños, use wc -c como lo hizo.


No es realmente un archivo en la memoria, es una interfaz entre el usuario y el kernel.


El /proc/ filesystem es una "ilusión" mantenida por el kernel, que no molesta en dar el tamaño de (la mayoría de) sus pseudoarchivos (ya que computar ese tamaño "real" generalmente implicaría haber construido todo el pseudoarchivo textual contenido), y espera que la mayoría de los archivos [pseudo-] textuales de /proc/ sean leídos en secuencia desde el primero hasta el último byte (es decir, hasta EOF), en bloques de tamaño razonable (por ejemplo, 1K). Ver la página man de proc (5) para más detalles.

Así que no hay forma de obtener el tamaño real (de algún archivo como /proc/self/maps o /proc/sys/net/ipv4/ip_forward ) en un solo syscall (como stat (2) , porque daría un tamaño de 0, según lo informado por los comandos stat (1) o ls (1) ). Una forma típica de leer estos archivos de texto podría ser

FILE* f = fopen("/proc/self/maps", "r"); // or some other textual /proc file, // e.g. /proc/sys/net/ipv4/ip_forward if (f) { do { // you could use readline instead of fgets char line[256]; memset (line, 0, sizeof(line)); if (NULL == fgets(line, sizeof(line), f)) break; // do something with line, for example: fputs(line, stdout); } while (!feof (f)); fclose (f); }