-V (ayrıntılı) komutları yavaş komutları kullanıyor mu?


34

Bu soruda: Bir dizindeki tüm dosyaları ve alt dizinleri, bash dizinini silmeden OLMADAN nasıl kaldırılır? bir klasördeki tüm dosyaların nasıl silineceği sorulur, klasörün kendisinde değil.

Matt in mükemmel cevabı -v bayrağının 'rm' komutuna kullanılmasını içerir.

rm -rfv dontDeleteMe && mkdir dontDeleteMe

Bıraktığım komut yukarıdakilerden biriydi. Gerçekten de faydalı, ancak 'rm' ve / veya genel olarak -v bayrağı komut satırı üzerinden yapılan işleri yavaşlatıyor mu?

Birkaç kez kendim için yarattığım, sildiğim ve yeniden yarattığım .txt dosyalarının (yaklaşık 100.000 tanesi) bulunduğu bir klasörüm var. Bazı zamanlarda rm, bazılarında filebrowser ve rm komutunu yukarıda gösterildiği gibi kullanmanın daha da yavaş olduğu hissine kapılıyorum. -V bayrağının bununla bir ilgisi var mı?

Yanıtlar:


37

Evet, -v bayrağı komutu yavaşlatıyor.

Çoğu, tüm yazılımlar (veya komutlar) bir bayrak sağlanmadığını kontrol eder ve ardından bayrakla ilgili bir sürü kod yürütür. -V bayrağı durumunda, büyük olasılıkla bayraksız atlamak istedikleri bir sürü çıktı komutunu ( echoveya veya gibi printf) yerine getirirlerdi.

Bu, işlemci için daha fazla komut döngüsü ve dolayısıyla daha fazla yürütme süresi anlamına gelir.

Mesajları okumak / ihtiyaç duymuyorsanız -v bayrağını kullanmazsanız daha iyidir.

Öte yandan, komutları yazmak ve tuşa basmak için gereken zamanı dahil etmediğinizi varsayarak, CLI GUI'den daha hızlı olacaktır / olmalıdır Enter.

Gönderen süper bu blogda bu görüntü çok iyi yavaşlık açıklıyor

görüntü tanımını buraya girin

Söz konusu komut için, zaman komutunun sonuçları

//with -v
real    0m8.753s
user    0m0.816s
sys     0m2.036s

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s

bu 100000 boş dosya içeren dizinde yapıldı


9
"Eko komutları" ndan bahsetmiyorum. Onlar bu yüzden çoğu program komut bash değil değil yankı diyoruz. Sorun şu ki stdout'a (veya stderr ) yazıyorlar , başka bir deyişle, zaman gerektiren G / Ç işlemlerini yapıyorlar (G / Ç maliyetlidir) ve ayrıca sistem çağrıları da gerektiriyorlar (yani daha fazla bağlam anahtarı ve dolayısıyla daha fazla önbellek özledim vs.).
Bakuriu

23
Stdout'a yazma ile ilgili asıl sorun, bu içeriğin gerçek görüntülenmesidir; stdout'u bir dosyaya yönlendirirseniz veya /dev/nullperformans, terminal emülatöründe metin görüntülemek kadar zor olmaz.
Jacob Krall

Grafikten görebileceğiniz gibi, bir insanın bakış açısıyla yanıt verme zamanından söz ediyorsanız, zamandaki fark önemsizdir. Bu nedenle, emri izleyen bir kişinin etkinliği konusunda endişeliyseniz, konuyla ilgili değildir. Yalnızca çok sayıda dosyayla veya bilgisayar saatinin değerli olduğu (örneğin yoğun bir web sunucusu veya eski bir bilgisayar) birçok tekrarlanan çalışma için geçerlidir.
Paddy Landau

En etkili ve muhtemelen gerçekten önemli olacağı tek durum, komutunu SSH aracılığıyla uzak bir makinede çalıştırdığınız zamandır. Ayrıntılı günlük kaydı, ana bilgisayardan konsolunuza iletilmesi gereken onlarca megabayt trafiği kolayca oluşturabilir. SSH üzerinden koştuğum bir komut dosyasından aşırı konsol günlüğü kaydını çıkardıktan sonra bir keresinde 10x hızlanma yaşadım.
Sergey

5

Neden kendini bulamıyorsun: zaman kullan.

$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real    0m0.003s
user    0m0.001s
sys     0m0.002s

$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real    0m0.002s
user    0m0.001s
sys     0m0.001s

10
Bu soruya gerçekten cevap vermiyor. Her komutun tek çalışması arasında 1 ms'lik bir fark birçok faktörden kaynaklanıyor olabilir. -vÇıktıyı atladıysanız veya dizin boştuysa da net değil .

Yavaşlama söz konusu değil, ekstra çalıştırılan talimatlardan değil, bir dosya veya terminale yazma sürecinden. time' pretty much redirects the output to / dev / null'.
Cole Johnson,
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.