Küçük dizinde uzun zaman alıyor


21

Ubuntu çalıştıran bir terminal açıp

sudo bash
cd /
ls | head -n 1000

Ve tahminen yaklaşık 20 dizin geri gönderilir.

Ancak, eğer bir ls yaparsam ve hiçbir şeye sokmazsam, başka bir terminalden onu öldürene kadar ls orada kalır. Neler olabilir?

DÜZENLE:

> type ls
ls is aliased to `ls --color=auto`

DÜZENLE:

> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>

Neden bu komutun askıda kalmasına yol açan ls çıktısını renklendiriyor?


3
Run type lsvb adlar olası kontrol etmek
jw013

5
Koşma strace ls, sorunu tanımlamanıza yardımcı olabilir. straceçağırdığı program tarafından yapılan tüm sistem çağrılarını görüntüler.
Gowtham

2
Adlandırılmış seçenek olmadan çalışmayı deneyin /bin/ls(veya daha doğrusu command ls) ls, fark yaratan renk seçeneğinin olup olmadığını onaylayın. FWIW, lsçıktısı bir boru veya diğer terminal dışı bir cihaz olduğunda renklendirmeyi kapatır.
jw013

3
Komutun önüne takma ad yerine bir ters eğik çizgi de gelir. \ls
Rob

Yanıtlar:


28

Ls'yi normal olarak çalıştırırsanız, hiçbirinde stat (2) çalıştırmanıza gerek kalmadan dosyaların listesini gösterecektir. Başka bir deyişle, FILES’in kendilerine değil, yalnızca dosyaları içeren dizine erişir.

--Color seçeneğine eklerseniz veya dosyaları incelemesi gereken diğer ls seçeneklerini kullanırsanız, bu dosyaları stat (2) olarak kaydetmeniz gerekecektir.

Büyük olasılıkla dizininizdeki dosyalardan en az biri aslında uzak bir sistemden, NFS veya benzeri bir şeyden oluşturuluyor. Ve bu bölümü taktığınız sunucu yanıt vermiyor veya yanıt vermiyor. Bu yüzden, ls bu dizin hakkında bilgi almaya çalıştığında, çekirdeğe asılacak ve sunucunun cevap vermesini bekleyecektir.

Diğerlerinin de belirttiği gibi, strace kullanıyorsanız, hangi dizinin kilitlendiğinde erişmeye çalıştığını göreceksiniz. O zaman monte edilmiş bölümü ya da her neyse ayarlayabilirsiniz.


Diğer bir olasılık ise, dizininizdeki dosyalardan birinin uzak olan ve sunucusunun yanıt vermediği bazı bölümlere işaret eden bir bağlantı olduğu ...
MadScientist

NFS kapalı bir sunucuya monte edildi. Statın NFS Mount'ın aşağıya sarkmasından dolayı garip görünüyor. Aşağı olup olmadığını söylemek çok zor olmaz ve dizini kırık sembolik yazıların yazdırıldığı renkte yazdırırsınız.
Snitse

Aslında, NFS sunucusunun kapalı olduğunu söylemek zor. NFS, yalnızca farklı bir dosya sistemi türüdür (ext3, xfs, vb.) Tüm dosya sistemleri çekirdeğe uygulanır. Ls (1) gibi bir kullanıcı programı sadece bir yol üzerinde stat (2) gibi bir sistem çağrısı çalıştırır; ne tür bir dosya sistemi kullanıldığı hakkında hiçbir fikri yok. Bu durumda, sistem çağrısı sonuç alınana kadar kilitlenir (kullanıcı alanı uygulaması kapatılır). Böylece, sonuç elde edilinceye kadar çekirdeğin içine uyumaya başlar ... ki bu asla olmaz. Yani bir şeyin yanlış olduğunu söyleyemez.
MadScientist

NFS davranışını değiştirebildiğini söylemeliyim. Bir "sabit montaj" belirtirseniz, sunucu zaman aşımına uğrarsa ve sistem gerçekleşinceye kadar sistem çağrısından geri dönmezse, çekirdek sonsuza kadar bağlanmayı dener. Alternatif olarak, sunucu isteği zaman aşımına uğradığında çekirdeğin başarısızlıkla döndüğü bir "yumuşak montaj" isteyebilirsiniz. Ancak, çoğu / çoğu program bu tür zaman aşımı işlemlerini doğru bir şekilde işlemek için yazılmaz ve NFS'de yumuşak bağlar belirtmek tehlikelidir ve sistem kararsızlığına neden olur. NFS'yi düzenli olarak kullananlar neredeyse her zaman sabit montajları kullanır ve önerir. Bakınız nfs (5).
MadScientist

sshfsMontajlarım vardı ve onları sökebilmemin tek yolu ilgili sshve sshfssüreçleri öldürmekti .
Gauthier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.