같은 위치에 같은 폴더 및 파일 이름


15

우분투에서 "MyFile"이라는 폴더와 "MyFile"이라는 문서를 같은 위치에 가질 수없는 이유는 무엇입니까? 나는 얻을 item already used in this location오류입니다. Ubuntu / Linux는 폴더와 파일을 동일한 객체 (디스크 포인터)로 취급합니까?


이름이 정확히 그런가요? 파일 이름에 점이 있습니까? 예를 들어 .myfile?
Sergiy Kolodyazhnyy

나는 같은 문제가 있었다. 이름을 바 꾸었습니다. 몇 가지 옵션이 있습니다. 폴더 이름을 소문자로 바꾸거나 확장명을 추가하십시오 (예 : myfile 또는 My.File). 또는 파일 이름을 MyFile.txt로 바꾸십시오. 둘 중 하나의 이름을 바꾸면 잘 작동합니다.
Buck


나는 당신의 좌절감을 공유합니다. 정적 웹 사이트를 구축 blog중이며 블로그 게시물 이라는 폴더 와 블로그 게시물 blog목록이 있는 html 페이지 가있는 로컬 버전을 가질 수 없습니다 .
Costa

답변:


29

리눅스에서 거의 모든 것이 파일 디스크립터입니다. 디렉토리는 사용자 관점에서 다른 파일을 보유 할 수있는 특수한 유형의 파일입니다.

따라서 같은 디렉토리에 같은 이름을 동시에 가질 수는 없습니다.

가능하다면 코더에게는 인생이 비참해질 것입니다. 누군가가 디렉토리를 작성하고 존재하는지 확인하려고 할 때 "isDir"명령은 무엇을 리턴합니까? isDir ( "/ home / shrodingers / cat")가 true, false 또는 둘 다를 반환해야합니까? 누군가가 어떤 코드에서 파일의 디렉토리를 열려고한다면 어떻게 될 것입니까?

그리고 무언가를 열라고 말할 때 시스템은 어떻게해야합니까? 파일을 원한다고 가정하십니까? 그 문제를 철자 ;)

그건 그렇고 : 이것은 Linux뿐만 아니라 모든 운영 체제에 해당됩니다. 데스크탑 관점에서 운영 체제는 파일이나 디렉토리에 고유 식별자를 추가하고 목록에서 제거 할 수 있습니다. 커맨드 라인 관점에서 보면 문제가 될 것입니다.

Windows에는 한 가지가 있습니다. 대소 문자를 구분하는 이름을 사용합니다. "MYFILE"과 "myfile"은 다릅니다.


2
문제 없습니다 :) 난 upvotes를 위해 그것을 ;-)
Rinzwind

1
공감대를위한 @Rinzwind? 여기 또 다른 것이 있습니다
AB

1
모든 것에 대한 리눅스 이론 : 모든 것이 파일입니다!
바이트 사령관

Anthon과 저는 4 개월 전에 Schrödinger의 고양이 / 농담에 대해 공동 작업했습니다 . 그리고 Byte Commander가 말했듯이 표현은 "모든 것이 파일 기술자"가 아니라 "모든 것이 파일입니다"입니다.
G-Man, '복귀 모니카'

1
Plan9 ( plan9.bell-labs.com/plan9 ) (Unix의 최초 제작자)는 아마도 "모든 것이 파일"인 유일한 OS 일 것입니다. 다른 모든 유닉스 및 리눅스 시스템에서 올바른 문구는 "모든 것이 파일 디스크립터입니다"입니다. 메모리, 시스템 호출, 네트워크 장치 및 파일을 제외한 거의 모든 것을 제외한 "모든 것이 파일입니다."그러나 모두 파일 설명자를 가지고 있습니다. ;-) 누군가가이 대화를 계속하고 싶어하는 경우-> 채팅 : =)
Rinzwind

1

같은 위치에 같은 이름을 가진 두 개의 엔티티를 가질 수 없습니다. 파일을 cat 또는 vi하려고 할 때 어떤 일이 발생합니까? OS가 선택한 마녀 실체? 혼동 가능성 때문에 같은 위치에있는 파일 및 폴더에 대해 같은 이름을 가질 수 없습니다. 그런데 폴더는 다른 파일을 호스팅하는 파일입니다.


3
귀하의 답변은 OP의 질문을 다시 그의 얼굴로 던집니다 ( "같은 위치에 같은 이름을 가진 두 개의 엔티티를 가질 수 없습니다"– 이미 알고있는 – 질문은 "왜?"), 당신은 수사 학적 질문을합니다 답할 수없는 것처럼 보였고, 그로 인해 문제가 해결되었습니다. 동일한 이름의 파일과 디렉토리가 있고 나 cat또는 vi그 이름이 있다면 OS는 파일을 선택해야합니다. 왜 작동하지 않습니까?
G-Man, 'Reinstate

2
@ G-Man : 실제로 우분투에 vi있는 것은 실제로 vim디렉토리를 열고 보여주고 편집하는 것도 완벽합니다. 그것을 시도 : vi .
arielf

1
@arielf은 :이 경우 (1) 나는 그 말을하고 있었다 파일에 대해 가능한 한 같은 이름의 하위 디렉토리가 같은 디렉토리에 존재하는 다음과 같은 (주로) 파일 지향 명령 할 때 cat또는이 vi그 이름으로 주소 의 논리적 해석은 파일이 아닌 하위 디렉토리를 호출하는 것입니다. (주로) 파일 지향 명령 ( vi)도 (하위) 디렉토리에서 작동 한다는 사실은 해당 명령문과 관련이 없습니다.
G-Man, 'Reinstate

1
(2) 귀하의 진술은 청어입니다. vim하위 디렉토리 인수를 순진하게 처리하지 않습니다. 파일을 처리하는 코드와 동일한 코드로.  vim파일에서 호출되는 경우 텍스트 편집기처럼 작동하고 하위 디렉토리에서 호출 된 경우 파일 관리자처럼 작동합니다.
G-Man, 'Reinstate Monica'라고

1
@ G-Man : 나는 첫 번째 의견에서 마지막 주장을 언급 한 것입니다. "그런데 OS는 파일을 선택해야합니다." 그게 나에게 맞지 않은 것이 었습니다 vi. 건배.
arielf

1

나는 이것이 오래된 주제라는 것을 알고 있지만 방금 같은 문제가 있었고 공유하고 싶었습니다.
여기 내 이야기가 있습니다 (인내심을 가지고 행복한 끝이 있습니다).

환경 :
reiserfs의 젠투 커널 4.12.5 64 비트

어떻게 이런 일이 일어날 수 있습니까?
동기화를 사용하여 공유 된 폴더가있는 여러 컴퓨터가 있습니다. 과거에는 ".stfolder"라는 파일을 제거하고 대신 해당 이름으로 디렉토리를 작성했습니다. 아마도 버그는 다른 컴퓨터 에서이 작업을 동기화하는 동기화 때문일 수 있습니다.

이제 버그를 살펴 봅시다 : ( 여기서 루트로 작동하고 있습니다)

ls -lahd .*
drwxrwx--- 5 stopi syncthing 656  3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi     240  3 sept. 18:21 ..
drw-rw---- 2 stopi syncthing  48  3 sept. 18:24 .stfolder
-rw-rw---- 1 stopi syncthing   0 29 août  12:51 .stfolder
-rw-rw---- 1 stopi syncthing  23 28 oct.   2017 .stignore

find -type f -name .stfolder
                              (<= no output there)

find -type f -name ".*"
./.stignore
./.stfolder

find -type f -name ".s*"
./.stignore

파일이 유령처럼 보이지만 폴더가 정상적으로 응답합니다 (찾기 포함)

file .*
.:             directory
..:            directory
.stfolder:     directory
.stfolder:     empty
.stignore:     C source, ASCII text

file .s*
.stfolder:     directory
.stignore:     C source, ASCII text

알아, 아주 이상해

rm -r .stfolder

ls -lahd .*
drwxrwx--- 5 stopi syncthing 656  3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi     240  3 sept. 18:21 ..
-rw-rw---- 1 stopi syncthing   0 29 août  12:51 .stfolder
-rw-rw---- 1 stopi syncthing  23 28 oct.   2017 .stignore

rm .stfolder
rm: impossible de supprimer '.stfolder': Aucun fichier ou dossier de ce type

그 유령 파일을 제거 할 수 없습니다!

그러나 결국 tmpfs 마운트 지점으로 이동하여 성공적으로 제거했습니다.

mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/

버그는 여전히 tmpfs에 존재하므로 reiserfs와 관련이 없습니다.

cd /elsewhere

ls -lahd .*
-rw-rw----  1 stopi syncthing   0 29 août  12:51 .stfolder

ls -lahd .s*
ls: impossible d'accéder à '.s*': Aucun fichier ou dossier de ce type

이 bash 출력에서 ​​볼 수 있듯이 파일은 동시에 존재하지 않습니다. 이 Schrödinger 고양이 기능으로 인해 동일한 이름의 폴더를 만들 수 있습니다.
그러나 잠깐, 더 많은 것이 있습니다 (이 명백한 것을 찾아야합니다) : 같은 이름의 다른 파일을 만들 수도 있습니다.

touch .stfolder

ls -lahdQ
total 0
drwxrwxr-x  3 root   users  100  3 sept. 19:13 "."
drwxrwxrwt 18 root   root   440  3 sept. 17:35 ".."
-rw-r--r--  1 root   root     0  3 sept. 19:13 ".stfolder"
-rw-r-----  1 root   root     0  3 sept. 19:09 ".stfolder"

유령을 복사 (버그를 복제 할 수 있음)하거나 chown, chmod 등으로 조작 할 수 있습니다. 유일한 제한은 이름을 지정할 수 없으므로 빈 디렉토리에 넣고 ". *"를 사용해야합니다. 그 명령에 대한 인수 ...하지만 작동합니다!

파일의 특성상이 파일은 처음부터 비어있었습니다 (단, 동기화를위한 플래그 일뿐입니다).
그 파일에 데이터를 넣을 수 있는지 궁금했습니다.
그리고 여기에 해결책이 나에게 왔습니다.

vi .*
" ============================================================================
" Netrw Directory Listing                                        (netrw v162)
"   /elsewhere
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:special
" ==============================================================================
../
./
.<200b>stfolder

예, 해당 파일에는 점 바로 뒤에 보이지 않는 문자가 있습니다.
이것은 모든 것을 설명합니다.
고마워, 나는 "에코 테스트 >>. *"와 고양이를 사용하지 않았다 ...


U+200bA는 "제로 폭 공간" 그런데. 이 일화가 마음에 들지만 답변으로 완전히 계산되지 않을 수도 있습니다.
PerlDuck

0

/unix//a/238056/139805

와우 이건 정말 이상하지만 저자가 요청한 것을 방금 수행했습니다. 이것이 방법이므로 실제 답변입니다 : P

charles@charles-MacBook ~ $ cd /usr/share
charles@charles-MacBook /usr/share $ ls -ld pix*
drwxr-xr-x 13 root root  4096 Oct 22 21:04 pixmaps
-rw-r--r--  1 root root 17626 Oct 22 21:07 pixmaps 
charles@charles-MacBook /usr/share $ mv pixmaps pixmaps
mv: cannot move ‘pixmaps’ to a subdirectory of itself, ‘pixmaps/pixmaps’
charles@charles-MacBook /usr/share $ ls -ld pix*
drwxr-xr-x 13 root root  4096 Oct 22 21:04 pixmaps
-rw-r--r--  1 root root 17626 Oct 22 21:07 pixmaps 
charles@charles-MacBook /usr/share $ file pix*
pixmaps:  directory
pixmaps : X pixmap image, ASCII text

이것은 다음에 의해 수행되었습니다.

charles-MacBook MaSSH # ls
instMaSSH.sh  MaSSHandra  MaSSHandra.desktop  MaSSHandraMesh.xpm
MaSSHandra.xpm  mime-MaSSHandra.xml
charles-MacBook MaSSH # cat instMaSSH.sh 
cp -i MaSSHandra.desktop /usr/share/applications
cp -i MaSSHandra.xpm /usr/share/pixmaps 
cp -i MaSSHandraMesh.xpm /usr/share/pixmaps
xdg-icon-resource install --context mimetypes --size 48 /usr/share/pixmaps/MaSSHandra.xpm application-x-MaSSHandra
xdg-icon-resource install --context mimetypes --size 48 /usr/share/pixmaps/MaSSHandraMesh.xpm application-x-MaSSHandraMesh
setcap cap_net_raw+ep /opt/MaSSHandra/bin/MaSSHandra
charles-MacBook MaSSH # ./instMaSSH.sh 
cp: overwrite ‘/usr/share/applications/MaSSHandra.desktop’? y
xdg-icon-resource: file '/usr/share/pixmaps/MaSSHandra.xpm' does not exist
xdg-icon-resource: file '/usr/share/pixmaps/MaSSHandraMesh.xpm' does not exist

whoah는 같은 이름을 가진 두 개의 파일을 응답합니다. 디렉토리와 파일조차도 더 이상 진행되고 있지 않습니까 ??? _

charles-MacBook share # ls -ld pi*
drwxr-xr-x 13 root root  4096 Oct 22 21:08 pixmaps
-rw-r--r--  1 root root 17626 Oct 22 21:09 pixmaps 
charles-MacBook share # mv pixmaps /tmp
charles-MacBook share # mv pixmaps  /tmp/pixmaps/
charles-MacBook share # ls -ld pix*
-rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps
-rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps 
charles-MacBook share # ls -li pix*
1849351 -rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps
1841386 -rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps 
charles-MacBook share # file pix*
pixmaps:  X pixmap image, ASCII text
pixmaps : X pixmap image, ASCII text
charles-MacBook share # ls -liF pix*
1849351 -rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps
1841386 -rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps 

완전히 이상한 행동

charles-MacBook MaSSH # ls -l /usr/share/pixmaps
pixmaps   pixmaps   
charles-MacBook MaSSH # rm -i /usr/share/pixmaps                                                                 
rm: remove regular file ‘/usr/share/pixmaps’? y
charles-MacBook MaSSH # ls -l /usr/share/pixmaps  
-rw-r--r-- 1 root root 17626 Oct 22 21:26 /usr/share/pixmaps 
charles-MacBook MaSSH # rm -i /usr/share/pixmaps
rm: cannot remove ‘/usr/share/pixmaps’: No such file or directory
charles-MacBook MaSSH # ls -l /usr/share/pixmaps  
-rw-r--r-- 1 root root 17626 Oct 22 21:26 /usr/share/pixmaps 
charles-MacBook MaSSH # cd /usr/share
charles-MacBook share # rm pixmaps  
charles-MacBook share # 

2
두 이름 중 하나는 끝에 공백 형태가 있습니다. "파일"출력에서 알 수 있습니다.
dascandy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.