Vì vậy, bằng cách nào đó lệnh ls
dường như hiển thị cho tôi hai tệp giống hệt nhau trong một thư mục.
$ 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
Tôi có thể di chuyển, đổi tên, chỉnh sửa, vv một trong các tệp, nhưng một trong những tệp khác thậm chí không có ở đó. bash
hoàn thành tab thậm chí hiển thị các tập tin giống hệt nhau.
Ví dụ: nhập nội dung sau rồi nhấn TAB
$ sudo mv /System/Library/LaunchDaemons/tftp
tftp.plist tftp.plist
Nếu tôi đổi tên tập tin:
$ sudo mv /System/Library/LaunchDaemons/tftp.plist /System/Library/LaunchDaemons/tftp.plist.derp
Tab hoàn thành vẫn hiển thị tệp:
$ ls -Blah /System/Library/LaunchDaemons/tf
tftp.plist tftp.plist.derp
Nhưng tệp gốc, chưa sửa đổi không xuất hiện thành 'ls'
$ ls -Blah /System/Library/LaunchDaemons/tftp.plist
ls: /System/Library/LaunchDaemons/tftp.plist: No such file or directory
Tuy nhiên nếu tôi chỉ liệt kê các tệp như trong đoạn mã đầu tiên ở trên, hãy xem:
$ 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
Bất cứ ý tưởng những gì đang xảy ra ở đây và làm thế nào tôi có thể thoát khỏi tập tin ma này?
Đây là máy mac chạy OS X nếu có thêm bất kỳ thông tin nào cho sự cố. Tôi đã sử dụng sed
trên tập tin này ngay trước khi sự điên rồ bắt đầu.
Biên tập
Tôi đã sử dụng cả cờ blah
và Blah
ls
cờ mà không thay đổi đầu ra rõ ràng.
Chỉnh sửa 2
Thông tin bổ sung được yêu cầu trong ý kiến:
$ echo tftp* | xxd
0000000: 7466 7470 2e70 6c69 7374 2020 7466 7470 tftp.plist tftp
0000010: 2e70 6c69 7374 2e64 6572 700a .plist.derp.
Hơn:
$ printf '<%q>\n' tftp*
<tftp.plist\ >
<tftp.plist.derp>
Thậm chí nhiều hơn:
$ 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"
Ghi chú
Câu trả lời dưới đây đã giúp tôi thấy rằng có một khoảng trống trong tên.
ls test\
điều gì xảy ra nếu bạn sử dụng ls "*tftp.list*"
? hay dùng ls
với --show-control-chars
?
echo tftp* | xxd
hoặc một số hexdump khác?
printf '<%q>\n' tftp*
cái gì?
en_US.UTF-8
, ls -b
sẽ không hiển thị khoảng trống trong tên tệp theo bất kỳ cách đặc biệt nào, cho dù ở giữa hoặc ở cuối tên tệp. Bạn có thể sử dụng một trong các câu trả lời (printf, echo) hoặc bộ lọc đầu ra của ls với một chương trình được thiết kế để làm nổi bật các khoảng trống theo sau nhưls -1 tftp* | cat -vet