Kiedy przechodzę --color=always
do ls, czasami wyświetla szereg No such file or directory
błędów, takich jak ten:
~/svn/projects/submm/adda/scat$ /bin/ls --color=always
ls: cannot access adda_output_f89: No such file or directory
ls: cannot access adda_output_f150: No such file or directory
ls: cannot access adda_output_f183: No such file or directory
ls: cannot access adda_output_f186: No such file or directory
ls: cannot access adda_output_f190: No such file or directory
...
Później postępuj zgodnie z zawartością katalogu, w tym podkatalogiem adda_output_f89
pokolorowanym jako katalog.
Jest uruchomiony proces, który działa na plikach w tym katalogu, ale nie sądzę, aby działał na wspomnianych katalogach ls
.
Nie jest to w pełni powtarzalne. Do tej pory nie udało mi się znaleźć wzoru, kiedy to się dzieje, a kiedy nie. Wydaje się, że dzieje się to falami. Być może proces szybko tworzy i usuwa katalogi, ale nie sądzę, że to prawda.
Wydaje się, że dzieje się to tylko wtedy, gdy zdam --color=always
, ale nie jestem w 100% pewien, że tak jest. Zwykle używam aliasu, w ls='ls --classify --color=always --human-readable'
którym tak się dzieje, ale kiedy dzwonię /bin/ls
, wydaje się, że tak się nie dzieje.
Edytuj :
ls -i
daje dla tych plików:
? adda_output1_f243/ ? adda_output_f243/
itp.
Edytuj :
To jest system plików NFS.
Co może powodować takie zachowanie? Czy to jakiś warunek wyścigu?
--color=always
? Czy jesteś pewien, że zawsze używasz/bin/ls
aliasu?ls
, co jest dla mnie pseudonimemls --classify --color=always --human-readable
. Nie dzieje się tak, gdy używam czystego/bin/ls
lub/bin/ls --classify
. Nie wypróbowałem wszystkich kombinacji opcji."ls" --color=always
?readdir
. Następnie próbujestat
uzyskać informacje w katalogu, ale katalog nagle nie istnieje.Odpowiedzi:
Jak wspomniano w komentarzach,
ls
w montażu NFS powstają dwa osobne wywołania NFS, z niewielkim opóźnieniem między nimi. Jeśli podejrzewasz, że jakiś proces może polegać na dodawaniu i usuwaniu wpisów w katalogu, zdecydowanie skorzystam z tego jako wyjaśnienia. Oto jak przetestowałbym tę teorię.Jeśli problem występuje kilka razy po uruchomieniu
ls
(tj. Odtworzenie go byłoby możliwe ręcznie, uruchamiającls
wiele razy), możesz po prostu:Uruchom ponownie to polecenie, aż
ls.out
pojawi się błąd, a następnie sprawdź plik, znajdź pliki, na które się skarżył, a następnie sprawdź, czy te pliki 1) istnieją w pierwszej 1/3 wyniku, a 2) nie istnieją w ostatnie 1/3 wyniku. Ponieważ pliki zostały (prawdopodobnie) usunięte podczasls
uruchamiania jednego z poleceń, nie powinno być trudno ustalić, czy były tam wcześniej, a potem zostały usunięte.Jeśli reprodukcja zajmuje dużo czasu, możesz napisać skrypt w stylu (nieprzetestowane!):
(Dodaj
sleep
s, jeśli martwisz się wpływem wydajności na działanie w nieokiełznanej ciasnej pętli).Uruchom to w
screen
sesji i sprawdź później. Gdy skrypt zakończy pracę, zgłaszając, że znalazł błąd, sprawdź,missing.out
które plikils
nie mogły znaleźć, a następnie sprawdź, czy pliki te są wymienione,ls1.out
ale niels3.out
.Nie zapomnij zweryfikować zgłoszonego czasu
ls
, na wypadek, gdyby ten tajemniczy proces spowodował usunięcie pliku, a następnie utwórz nowy plik o tej samej nazwie w samą porę, aby trzecils
mógł go wyświetlić. :)Jeśli okaże się, że z jakiegoś powodu przyczyną nie jest to, że proces usunął plik podczas
ls
działania, zgłoś to tutaj, a my dowiemy się, co jeszcze można spróbować.źródło