No esperes que esto se ejecute rápidamente ...
cd a un directorio donde sospeche que puede haber un subdirectorio con muchos inodes. Si este script toma una gran cantidad de tiempo, es probable que haya encontrado en qué parte del sistema de archivos buscar. / var es un buen comienzo ...
De lo contrario, si cambia al directorio superior en ese sistema de archivos y ejecuta esto y espera a que termine, encontrará el directorio con todos los inodos.
find . -type d |
while
read line
do
echo "$( find "$line" -maxdepth 1 | wc -l) $line"
done |
sort -rn | less
No me preocupa el costo de la clasificación. Realicé una prueba y clasifiqué la salida sin clasificar de eso en 350,000 directorios y tardé 8 segundos. El hallazgo inicial tomó. El costo real es abrir todos estos directorios en el ciclo while. (el bucle en sí toma 22 segundos). (Los datos de prueba se ejecutaron en un subdirectorio con 350,000 directorios, uno de los cuales tenía un millón de archivos, el resto tenía entre 1 y 15 directorios).
Varias personas habían señalado que ls no es bueno en eso porque ordena la salida. Intenté echo, pero eso tampoco es genial. Alguien más había señalado que stat proporciona esta información (número de entradas de directorio) pero que no es portátil. Resulta que find -maxdepth es realmente rápido al abrir directorios y cuenta .files, así que ... aquí está ... ¡puntos para todos!
Si el problema es un directorio con demasiados archivos, aquí hay una solución simple:
La idea detrás de la
find
línea es que el tamaño de un directorio es proporcional a la cantidad de archivos directamente dentro de ese directorio. Entonces, aquí buscamos directorios con toneladas de archivos dentro.Si no desea adivinar un número y prefiere enumerar todos los directorios sospechosos ordenados por "tamaño", también es fácil:
fuente
Grrr, comentar requiere 50 rep. Entonces, esta respuesta es en realidad un comentario sobre la respuesta de Chris.
Dado que el interrogador probablemente no se preocupa por todos los directorios, solo por los peores, entonces usar sort es probablemente una exageración muy costosa.
Esto no es tan completo como su versión, pero lo que hace es imprimir líneas si son más grandes que el máximo anterior, lo que reduce en gran medida la cantidad de ruido impreso y ahorra el gasto del tipo.
La desventaja de esto es que si tiene 2 directorios muy grandes, y el primero tiene 1 inodo más que el segundo, nunca verá el segundo.
Una solución más completa sería escribir un script perl más inteligente que haga un seguimiento de los 10 valores principales vistos e imprima esos al final. Pero eso es demasiado largo para una respuesta rápida por defecto del servidor.
Además, algunas secuencias de comandos perl medianamente más inteligentes le permitirán omitir el ciclo while: en la mayoría de las plataformas, esto ordena los resultados, y eso también puede ser muy costoso para directorios grandes. El tipo ls no es necesario aquí, ya que lo único que nos importa es el conteo.
fuente
Puedes usar este pequeño fragmento:
Imprimirá cuántos archivos y directorios hay en cada uno de los directorios en la carpeta actual, con los delincuentes más grandes en la parte inferior. Le ayudará a encontrar directorios que tengan muchos archivos. ( más información )
fuente
Esta no es una respuesta directa a su pregunta, pero la búsqueda de archivos modificados recientemente con un tamaño pequeño mediante la búsqueda podría reducir su búsqueda:
fuente
ls no van a encontrar los archivos cuyos nombres comienzan con un punto. Usar find evita esto. Esto encuentra todos los archivos en el árbol de directorios, borra el nombre base del final de cada ruta y cuenta el número de veces que cada ruta de directorio aparece en la salida resultante. Puede que tenga que poner el "!" entre comillas si su shell se queja de ello.
Los inodos también pueden ser utilizados por archivos que han sido eliminados pero que se mantienen abiertos mediante un proceso en ejecución. Si este paquete de Munin incluye algún programa que se ejecute constantemente, otra cosa que debe verificar es si mantiene abierto un número inusual de archivos.
fuente
Haría fuerza bruta en este caso: ejecute tripwire en todo el dispositivo para una línea de base, luego ejecute una verificación algún tiempo después y el directorio ofensivo sobresaldrá como un pulgar dolorido.
fuente
(no poder comentar realmente está envejeciendo, esto es para egorgry)
egorgry - ls -i imprime el NÚMERO de inodo para una entrada, no el CODO de inodo.
Pruébelo con un archivo en su directorio: (probablemente) verá un número igualmente alto, pero no es el recuento de inodos, es solo el inodo # al que apunta la entrada de su directorio.
fuente
Actualizar
Una línea que devuelve el recuento de inodos de cada elemento secundario del directorio dado con las entradas más grandes en la parte inferior.
Respuesta original
Ejecútelo así (dado que el script anterior reside en un archivo ejecutable en su directorio de trabajo)
fuente
El uso de inodo es aproximadamente uno por archivo o directorio, ¿verdad? También
para contar aproximadamente cuántos inodos se utilizan en [ruta].
fuente
Traté de escribir una tubería de shell eficiente, pero se volvió difícil de manejar y lenta o inexacta, por ejemplo,
enumerará directorios de hoja (y algunos otros) con más de 1000 archivos en ellos. Entonces, aquí hay un script de Perl para hacerlo de manera eficiente tanto en tiempo como en RAM. La salida es como
«Archivos-en-subárbol» «archivos-directamente-en-directorio» «nombre-directorio»
para que pueda masajearlo y filtrarlo fácilmente con herramientas normales, por ejemplo, ordenar (1) o awk (1) como se indicó anteriormente
fuente
mi casa en mi computadora portátil está usando inodos 131191.
fuente