Neden “ls” yalnızca “.” harici sürücünün kök dizininde?


9

USB flash sürücümün kök dizininde, bazen çalıştırdığımda ls, çıktı normaldir ve dosyaları listeler. Diğer zamanlarda, çıktı sadece bir satırdır:

$ ls
.

Eğer ls -lao zamanlardan birinde denersem, şunu elde ederim:

$ ls -la
ls: .: Invalid argument

Birden lsfazla kez arka arkaya koşarsam, normal çıktıyı veya anormal çıktıyı rasgele döndürür gibi görünüyor.

lsdiğer dizinlerde normal çalışıyor gibi görünüyor. ls $drivenamehatta üst dizinden ls ..iyi çalışıyor gibi görünüyor ve bir alt dizinden iyi çalışıyor gibi görünüyor. (Davranış başlangıçta belirsiz olduğu için "normal çalışan" lardan% 100 emin olamıyorum.) Diğer iki harici USB sürücüyü denedim ve aynı davranışı aldım.

Burada neler oluyor? Mac OS X 10.11.3 kullanıyorum.

Düzenleme: Güzel fikir, ama bir takma ad kullanıyor gibi görünmüyor ve /bin/lsaynı sonucu veriyor.


2
Bu olağandışı davranış, hatalı bir takma adın sonucu olabilir. Kullanırsan ne olur /bin/ls?
DopeGhoti

ls diğer dizinlerde iyi çalışıyor mu?
Liam

/bin/lsaynı sonucu verir, bazen çıktı verir .. lsdiğer dizinlerde normal çalışıyor gibi görünüyor. ls NO\ NAMEhatta üst dizinden ls ..iyi çalışıyor gibi görünüyor ve bir alt dizinden iyi çalışıyor gibi görünüyor. (Yine de davranış başlamak için belirsiz olduğundan "normal çalışan" olanlardan% 100 emin
olamıyorum

Bu flash sürücülerde hangi dosya sistemini kullanıyorsunuz? Belki de Windows tabanlı bir dosya sisteminden türeyen bir anormallik
RSFalcon7

Hangi sürümünü lskullanıyorsunuz? /bin/ls --versionçalışmalı
RSFalcon7

Yanıtlar:


6

OSX'in son sürümlerinde FAT32 için dosya sistemi sürücüsünde bir hata olabilir. Bu, yalnızca çalışma dizini takılı sürücünün kökündeyken de ortaya çıkar. Bir alt dizinde veya sistemin başka bir yerinde ise işler işe yarıyor gibi görünüyor.

Bu yazıda sistem izleri de dahil olmak üzere bazı ilginç tartışmalar var. https://github.com/robbyrussell/oh-my-zsh/issues/4161


2

GEÇİCİ ÇÖZÜM: (muhtemelen özel olarak sormasalar bile askerin takdir edeceği şeyin bir parçası)

Geçerli dizine hemen hemen herhangi bir şekilde bakın .. Misal:

cdalt dizine gidin ve sonra lsüst dizinde çalıştırın . Yani, böyle bir şey girin:

mkdir S; cd S ; /bin/ls -al ..

Veya tam yol adıyla bakın. Misal:

ls /Volumes/microSD007

Benim için, bu geçici çözümlerden herhangi biri lsbana OP bildirilen aynı yanlış çıktı verdiğinde (yani, beklenen çıktı ile sonuçlanır) çalışır . (Ve benim için, lsgarip bir şekilde hareket ettiğinde dmesg'de çıktı yok .)

Aynı arızaları 10.12.6'da Terminal.app çalışan bash'da görüyorum. Aynı cshve shTERM'yi vt100 olarak ayarladıktan sonra bile. Bu geçici çözüm bu kabuklarda da işe yarar.

Neil'in bize stat64işaret ettiği zshkonu başlığında belirtildiği gibi, bir hata olduğunu kabul ediyorum . (Sorunun kusurlu ve / veya sahte flash bellekten kaynaklandığını düşünmüştüm ve bunun bazen bir faktör olup olmadığını merak ediyorum.)

Bu hatanın da etkilediğini fark ettim:

  • Emacs' dired modu, bu aramaları çünkü ls, ve
  • ls Emacs'ın kabuk modunda kullanıldığında.

2
Goro'nun neden yaptıkları düzenlemeleri yaptığını anlamıyorum ve hiçbir düzenleme özeti verilmedi. Sanırım cevabı daha da kötüleştirdiler ve şimdi -1 aldığını gördüm. Bir geçici çözüm sağladım, benim 'geçici çözüm' göstergemi kaldırmak, doğrudan bir yanıt sağlamaya çalıştığımı iddia ettiğim gibi görünüyor. Bence bir yorumdan daha fazlasını, ama bir cevaptan daha azını sunuyorum. Bu teşvik edilmiyor mu? Yeni bir şey tanımlandım; düzenleme özeti ve -1 için bir neden uygun olmaz mı? Goro da eklediğim daha kısa ve daha iyi bir cevabı kaldırdı. Anlamıyorum.
Matthew Elvey

1
Ben çitin üzerindeyim; genellikle cevaplar soruyu cevaplamak zorundadır, sadece daha fazla bilgi vermekle kalmaz, aynı zamanda problemin etrafında çalışmak, özellikle özel olarak bahsetmemiş olsalar bile, askerin aradığı şeyin bir parçasıdır. Düzenlemelerin çoğu gereksiz görünüyor ve en azından biri kesinlikle biçimlendirmeyi bozuyor, bu yüzden onları geri aldım. Gönderinin şimdiye kadar bir düşüşü olup olmadığından emin değilim, ancak şu anda 2 yukarı ve 0 aşağı oyu var
Michael

0

Sürücüyü bazen kaldırırsanız, cevabı sürücüyü her yeniden takışınızda cd kullanarak dizine dönmeniz gerektiğidir. Bunun nedeni, dizini okumak için kabuğunuz tarafından açılan dosya tanımlayıcısının sürücü kaldırıldığında geçersiz kılınması ve sürücünün yeniden takılması durumunda otomatik olarak yeniden başlatılmamasıdır (sürücüyü başka bir terminalde veya dosya yöneticisinde kullanmış olsanız bile).

Sürücü hiçbir zaman çıkarılmazsa, bir donanım sorunu veya sürücüyü herhangi bir nedenle bağlantısını kesen bazı yazılımlar olabilir; sistem günlüklerini sağlamalısınız.

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.