EDIT: J'ai totalement oublié ce fil. Il s'avère que j'avais un mauvais disque dur. Nous avons dû redéployer ce serveur pour d'autres besoins, j'ai donc finalement pu remplacer le seul disque défectueux et nous sommes de retour aux affaires.
Depuis quelques semaines, je ne pouvais pas comprendre pourquoi je ne pouvais pas supprimer ce fichier en particulier. En tant que root, je peux, mais mon script shell s'exécute en tant qu'utilisateur différent. Je lance donc ls -la et ce n'est pas là. Cependant, si je l'appelle comme paramètre, il apparaît! Effectivement, le propriétaire est root, donc je ne peux pas supprimer.
Remarquez, 6535 est manquant ...
[root@server]# ls -la 653*
-rw-rw-r-- 1 svn svn 24002 Mar 26 01:00 653
-rw-rw-r-- 1 svn svn 7114 Mar 26 01:01 6530
-rw-rw-r-- 1 svn svn 8653 Mar 26 01:01 6531
-rw-rw-r-- 1 svn svn 6836 Mar 26 01:01 6532
-rw-rw-r-- 1 svn svn 3308 Mar 26 01:01 6533
-rw-rw-r-- 1 svn svn 3918 Mar 26 01:01 6534
-rw-rw-r-- 1 svn svn 3237 Mar 26 01:01 6536
-rw-rw-r-- 1 svn svn 3195 Mar 26 01:01 6537
-rw-rw-r-- 1 svn svn 27725 Mar 26 01:01 6538
-rw-rw-r-- 1 svn svn 263473 Mar 26 01:01 6539
Maintenant, il apparaît si vous l'appelez directement.
[root@server]# ls -la 6535
-rw-rw-r-- 1 root root 3486 Mar 26 01:01 6535
Voici quelque chose d'intéressant. J'ai donc détecté ce problème car dans mon script shell, il ne pourrait pas être supprimé car 6535 appartient à root. Le fichier apparaît en fait après avoir exécuté "rm -rf". Je l'ai essayé plus tôt et il n'a pas pu supprimer le répertoire car il m'a dit que le répertoire n'était pas vide. Je suis entré et j'ai regardé et bien sûr, le fichier "6535" apparaît enfin. Je ne sais pas pourquoi ça fait ça.
strace dit le texte suivant
#strace ls -la 653* 2>&1 | grep ^open
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib64/tls/librt.so.1", O_RDONLY) = 3
open("/lib64/libacl.so.1", O_RDONLY) = 3
open("/lib64/libselinux.so.1", O_RDONLY) = 3
open("/lib64/tls/libc.so.6", O_RDONLY) = 3
open("/lib64/tls/libpthread.so.0", O_RDONLY) = 3
open("/lib64/libattr.so.1", O_RDONLY) = 3
open("/etc/selinux/config", O_RDONLY) = 3
open("/proc/mounts", O_RDONLY) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/proc/filesystems", O_RDONLY) = 3
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/share/locale/en_US.UTF-8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/nsswitch.conf", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib64/libnss_files.so.2", O_RDONLY) = 3
open("/etc/passwd", O_RDONLY) = 3
open("/etc/group", O_RDONLY) = 3
open("/etc/mtab", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY) = 3
open("/etc/localtime", O_RDONLY) = 3
la source
Réponses:
C'est un peu inquiétant. Je vérifierais que votre
ls
fichier n'a pas été modifié en le comparant à un bon fichier connu. Vous pouvez utiliser les outils de package de votre distribution pour vérifier le fichier sur un système isolé.la source
ls
ait été modifié pour masquer un PID spécifique, peut-être 6535.Parfois, les noms de fichiers contiennent des caractères étranges tels que des séquences de mouvement de curseur. Essayez ceci pour vous assurer:
Il devrait afficher des points d'interrogation au lieu de caractères de contrôle (c'est probablement la valeur par défaut, mais ce n'est peut-être pas le cas).
Cela montre partiellement le type de problème qui peut être présent:
J'essaierais aussi:
pour voir si un alias ou une fonction est définie ou pour voir si un binaire est dans un endroit impair ou a été modifié.
la source
ls
avait été modifié, lemd5sum
sur le système aurait également pu être modifié. Vous avez besoin d'un environnement sain connu pour vérifier pour arriver à une conclusion définitive.Vous pouvez vouloir fsck ce volume.
la source
Je fais habituellement quelque chose comme ça si je crois que 'ls' a été modifié ...
python -c "import os; print os.listdir('.')"
Bien sûr, Python, la bibliothèque C, le noyau ou le système de fichiers peuvent également être modifiés, mais généralement ce ne sont que les utilitaires du shell.
la source
*.*
ne va vous montrer que les fichiers qui ont des caractères suivis d'un point suivi de caractères. Ce n'est certainement pas tout sur le système * nix. Je ne suis pas sûr que l'écho vous montrera tout en une seule commande, j'ai pu le faireecho * && echo .*
Vous pouvez regarder exactement ce que fait ls en utilisant strace, et cela peut vous expliquer pourquoi il évite d'afficher ce nom de fichier.
regardez cela à travers cela et voyez ce qui se passe.
La sortie ressemblera à ceci:
et si vous voyez quelque chose comme
soyez prudent, vous avez été 0wned ...
Ce n'est pas un test concluant, mais c'est un bon indicateur ...
(si vous utilisez Solaris ou d'autres systèmes d'exploitation, vous devrez peut-être utiliser Truss ou un autre utilitaire similaire au lieu de Strace)
(si vous utilisez un shell dérivé de csh / tcsh, vous aurez probablement besoin de différentes instructions de redirection)
la source
strace
utilité est vraiment un couteau suisse. Vous accédez directement au niveau d'appel système et contournez toute une pile de complications arbitraires. C'est l'une des premières choses que n'importe quel administrateur système. vaut un sou devrait vider sur une machine nouvellement installée.Mise à jour rapide, nous avons dû remplacer le serveur pour d'autres raisons. C'était le système de fichiers. Tout va bien maintenant !!! Merci tout le monde.
la source
La théorie du hack est intéressante, mais j'ai une théorie alternative. La sémantique de suppression de fichiers Unix conservera le fichier jusqu'à ce que tous les processus aient fermé les poignées de fichier ouvertes pointant dessus. Peut-être que quelqu'un a suspendu une extraction / validation SVN, ou un thread de serveur a raccroché. Si le redémarrage du processus SVN (ou Apache) résout votre problème, c'est là que je blâmerais.
Peut-être pouvez-vous identifier le processus utilisant toujours ce fichier avec
lsof | grep 6535
?la source