'ls' bir dizinde iki özdeş dosyaları gösteren


14

Yani bir şekilde komut lsbana bir dizinde iki özdeş dosyayı gösteriyor gibi görünüyor.

$ ls -Blah /System/Library/LaunchDaemons
total 32                                                              
drwxr-xr-x  266 root  wheel   8.8K Jun 18 10:41 .
drwxr-xr-x   79 root  wheel   2.6K Mar 31 12:28 ..
[redacted]
-rw-r--r--    1 root  wheel   715B Jun 18 10:36 tftp.plist
-rw-r--r--    1 root  wheel   715B Jun 18 10:35 tftp.plist

Dosyalardan birini taşıyabilir, yeniden adlandırabilir, düzenleyebilirim, ancak diğeri orada bile görünmüyor. bashsekme tamamlandığında bile özdeş dosyalar gösterilir.

Örneğin, aşağıdakileri girip ardından vurmak TAB

$ sudo mv /System/Library/LaunchDaemons/tftp
tftp.plist   tftp.plist

Dosyayı yeniden adlandırırsam:

$ sudo mv /System/Library/LaunchDaemons/tftp.plist /System/Library/LaunchDaemons/tftp.plist.derp

Sekmenin tamamlanması yine de dosyayı gösterir:

$ ls -Blah /System/Library/LaunchDaemons/tf
tftp.plist       tftp.plist.derp 

Ancak orijinal, değiştirilmemiş dosya 'ls' olarak görünmüyor

$ ls -Blah /System/Library/LaunchDaemons/tftp.plist
ls: /System/Library/LaunchDaemons/tftp.plist: No such file or directory

Ancak ben sadece yukarıdaki ilk kod parçacığında olduğu gibi dosyaları listelemek, işte:

$ ls -Blah /System/Library/LaunchDaemons
total 32                                                              
drwxr-xr-x  266 root  wheel   8.8K Jun 18 10:41 .
drwxr-xr-x   79 root  wheel   2.6K Mar 31 12:28 ..
[redacted]
-rw-r--r--    1 root  wheel   715B Jun 18 10:35 tftp.plist
-rw-r--r--    1 root  wheel   715B Jun 18 10:36 tftp.plist.derp

Burada neler olduğu ve bu hayalet dosyasından nasıl kurtulabileceğimi biliyor musunuz?

Bu, soruna herhangi bir bilgi eklerse OS X çalıştıran bir mac. sedÇılgınlık başlamadan hemen önce bu dosyayı kullanıyordum .

Düzenle

Görünen çıktıda hiçbir değişiklik olmadan hem ve blahhem de Blah lsbayrakları kullandım .

Düzenle 2

Yorumlarda talep edilen ek bilgiler:

$ echo tftp* | xxd
0000000: 7466 7470 2e70 6c69 7374 2020 7466 7470  tftp.plist  tftp
0000010: 2e70 6c69 7374 2e64 6572 700a            .plist.derp.

Daha:

$ printf '<%q>\n' tftp*
<tftp.plist\ >
<tftp.plist.derp>

Hatta daha fazla:

$ locale                                                                                                                      │-rw-r--r--    1 root  wheel   495B Sep  9  2014 org.net-snmp.snmpd.plist
LANG="en_US.UTF-8"                                                                                                            │-rw-r--r--    1 root  wheel   498B Jan 15 23:15 org.ntp.ntpd.plist
LC_COLLATE="en_US.UTF-8"                                                                                                      │-rw-r--r--    1 root  wheel   1.0K Nov 13  2014 org.openldap.slapd.plist
LC_CTYPE="en_US.UTF-8"                                                                                                        │-rw-r--r--    1 root  wheel   572B Sep  9  2014 org.postfix.master.plist
LC_MESSAGES="en_US.UTF-8"                                                                                                     │-rw-r--r--    1 root  wheel   238B Sep  9  2014 shell.plist
LC_MONETARY="en_US.UTF-8"                                                                                                     │-rw-r--r--    1 root  wheel   941B Sep  9  2014 ssh.plist
LC_NUMERIC="en_US.UTF-8"                                                                                                      │-rw-r--r--    1 root  wheel   260B Sep  9  2014 telnet.plist
LC_TIME="en_US.UTF-8"                                                                                                         │-rw-r--r--    1 root  wheel   715B Jun 18 10:36 tftp.plist
LC_ALL="en_US.UTF-8"

Not

Aşağıdaki cevap, adında bir boşluk olduğunu görmeme yardımcı oldu.


6
Adında bir boşluk olması olabilir mi?
fredtantini

Hmmm… Hayır, tamamlama yapacak ls test\ … Eğer kullanırsan ne olur ls "*tftp.list*"? veya kullanım lsile --show-control-chars?
fredtantini

1
Gibi echo tftp* | xxdya da başka bir hexdump çalıştırabilir misiniz ?
Haziran'da choroba

2
Çıktısı nedir printf '<%q>\n' tftp*?
Chris Down

3
Yerel ayarınız olduğundan en_US.UTF-8, ls -bdosya adının ortasında veya dosya adının sonunda herhangi bir özel şekilde boşluk gösterilmeyecektir. Cevaplardan birini (printf, echo) kullanabilir veya ls çıktısını aşağıdaki gibi boşlukları vurgulamak üzere tasarlanmış bir programla kullanabilirsinizls -1 tftp* | cat -vet
Mark Plotnick

Yanıtlar:


22

Sondaki boşluk veya bozuk bir dosya sisteminiz var.

Deneyin

for i in tftp.plist*
do
    echo "'$i'"
done

Bu gibi bir şey çıktı gerekir

'tftp.plist'
'tftp.plist '

tırnak ve ekstra alan not edin. Aynı şeyi iki kez çıkarırsa, muhtemelen bozuk bir dosya sisteminiz vardır.

Deneyin

ls -i tftp.plist*

bu size dosyanın inode numaralarını verecektir. Bunlar aynıysa, dizinde iki kez aynı dosya vardır. Bu Gerçekten Kötü (tm) olurdu ve en kısa zamanda fsck'i çalıştırmalısınız. Ama sorun olduğundan şüpheliyim; boşluk alanı daha muhtemeldir.


Neden izleyen boşluk 'ls` ile bveya Bbayrakları kullanarak görünmüyordu herhangi bir fikir ?
111 -

@datUser: bununla -Bbir ilgisi yoktur ve bunun bir örneğini göstermezsiniz ls -b. Bununla birlikte, -blahkesinlikle sizinle tftp.plist ile biten bir çizgi görmeliydiniz \
Steve Jessop

Evet ben hem kullanıyordum bve Bve ne kaçan boşluk veya okunabilir formatta olmayan baskı karakterinin değerini gösterir. Çok garip IMHO.
111 -

1
Çıktısını lsbir dosyaya yönlendirebilir ve lessbir metin düzenleyicisiyle kontrol edebilirsiniz ...
Laszlo Valko

1
Hala merak edenler için, hexdump adın "tftp.plist" (yani sondaki boşluk) olduğunu ortaya çıkarır.
Joshua
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.