comment trouver par utilisateur disque d'utilisation de l'espace?
Je suis en train d'écrire un petit outil dont j'ai besoin pour trouver par utilisateur par le système de Fichiers de la mémoire d'utilisation.
Que j'ai à faire nettoyer une partie de l'activité si le fichier-de l'utilisation du système est traversée certaine valeur seuil. Qu'est-ce que l'appel système que je peux utiliser, afin que je puisse être en mesure de trouver par l'utilisateur utilisation de la mémoire?
pourquoi la balise pthreads?
Regardez la source de du.
l'utilisation de la mémoire? disque != de mémoire
... et comment savez-vous que le fichier appartient à l'utilisateur qui? Vous basez-vous sur le lieu (présence dans
Regardez la source de du.
l'utilisation de la mémoire? disque != de mémoire
... et comment savez-vous que le fichier appartient à l'utilisateur qui? Vous basez-vous sur le lieu (présence dans
/home/usr1
) ou sur les autorisations de fichier (ls -l
utilisateur/groupe de sortie)?OriginalL'auteur Whoami | 2012-02-13
Vous devez vous connecter pour publier un commentaire.
Peut-être vous êtes intéressé à les quotas de disque (qui sont pris en charge par certains, mais pas tous, les systèmes de fichiers). Le faible niveau de l'appel système est quotactl(2). Peut-être en utilisant les outils existants quota(1) et
quotacheck
,edquota
,warnquota
,quotaon
etc.... peut être suffisant.Si vous voulez connaître la quantité de mémoire utilisée par un processus donné, envisager la getrusage(2) syscall. Vous pouvez également lire les pseudo-fichiers sous
/proc/self/
ou/proc/1234
pour pid 1234. Vous pouvez également analyse la/proc/
(à l'aide de d'habitude répertoire de routines d'analyse: fonctions opendir(3), en boucle sur readdir(3) avec stat(2), fermeture avecclosedir
...) pour les répertoires (depuis/proc/1234/
décrit le processus de pid 1234). Lire plus à propos de proc(5) (par exemple/proc/self/maps
ou/proc/1234/smaps
et/proc/1234/status
etc). Tou pouvez interroger l'espace d'adressage virtuel du processus 1234 par la lecture de la/proc/1234/status
et/proc/1234/maps
pseudo-fichiers. Essayez, par exemple,cat /proc/$$/status
etcat /proc/$$/maps
dans un terminal pour interroger les données de votre shell en cours de processus.Bien sûr, de considérer également la du(1) et df(1) commandes (peut-être invoquer soigneusement thru popen(3) si vous voulez obtenir leur sortie). Si, pour quelque raison que ce soit que vous voulez analyser récursivement une arborescence de fichiers (par exemple, de compter ses cumulée de la taille utilisée comme
du
n'), pensez à utiliser la nftw(3) fonctions. Voir aussi stat(2) et statfs(2) syscalls.Rappelez-vous que d'autres processus peuvent (et le font souvent) écrire le système de fichiers lors de votre programme est d'explorer ou de l'interrogation. Et votre utilisateur peut démarrer de nouveaux processus (peut-être indirectement, par exemple avec crontab(5), système(3), fork(2) et execve(2),
at
,batch
,ssh
...) à tout moment.À lire aussi, un bon Linux programmation livre, peut-être le vieux Advanced Linux Programmation, et syscalls(2)
quota
, je reçois unoperation not permitted
. Pourquoi? Peut-être que c'est parce que c'est à essayer pour voir tous les utilisateurs de quotas, alors que je suis seulement permis (et intéressé) dans la mienne.Cela ne répond pas à la question, il suffit d'aller autour de la question
Combinant
nftw
etstat
t répondre à la question (pour l'utilisation du disque). La numérisation/proc/
pour/proc/*/maps
répertoire de répondre à la question de la mémoire virtuelleOriginalL'auteur Basile Starynkevitch
Une approche simpliste serait
De faire le tri:
Il est également bien connu script Perl qui a l'option d'envoi de disque rapports d'utilisation par utilisateur:
durep
OriginalL'auteur sehe