"ls"는 디렉터리에 있는 두 개의 동일한 파일을 표시합니다.

"ls"는 디렉터리에 있는 두 개의 동일한 파일을 표시합니다.

그래서 명령은 ls디렉토리에 두 개의 동일한 파일을 표시하는 것 같습니다.

$ 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

파일 중 하나를 이동하고, 이름을 바꾸고, 편집할 수 있지만 다른 파일은 존재하지 않는 것 같습니다. bash탭 완성에는 동일한 파일도 표시됩니다.

예를 들어 다음을 입력하고 다음을 클릭합니다.TAB

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

파일 이름을 바꾸는 경우:

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

탭 완성에는 여전히 파일이 표시됩니다.

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

하지만 수정되지 않은 원본 파일에는 "ls"가 없는 것 같습니다.

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

그러나 위의 첫 번째 스니펫에 있는 파일만 나열하는 경우 다음을 확인하세요.

$ 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

여기서 무슨 일이 일어나고 있는지, 이 고스트 파일을 제거하는 방법에 대해 알고 계시나요?

이로 인해 문제에 정보가 추가된다면 이는 OS X를 실행하는 Mac입니다. sed나는 광기가 시작되기 직전에 이 파일을 사용하고 있었습니다.

편집하다

blah및 플래그를 사용했는데 Blah ls명백한 출력에는 변화가 없었습니다.

편집 2

의견에서 요청한 추가 정보:

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

더:

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

심지어:

$ 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"

노트

아래 답변은 이름 뒤에 공백이 있음을 확인하는 데 도움이 되었습니다.

답변1

뒤에 공백이 있거나 파일 시스템이 손상되었습니다.

노력하다

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

그러면 다음과 같이 출력되어야 합니다.

'tftp.plist'
'tftp.plist '

따옴표와 추가 공백을 주의하세요. 정확히 동일한 내용이 두 번 출력되면 파일 시스템이 손상되었을 수 있습니다.

노력하다

ls -i tftp.plist*

그러면 파일의 inode 번호가 제공됩니다. 동일하다면 디렉터리에 동일한 파일이 두 번 있는 것입니다. 그것은 정말 나쁜 일이므로 가능한 한 빨리 fsck를 실행해야 합니다. 그러나 나는 그것이 문제라고 생각합니다.

관련 정보