우분투에서 "MyFile"이라는 폴더와 "MyFile"이라는 문서를 같은 위치에 가질 수없는 이유는 무엇입니까? 나는 얻을 item already used in this location
오류입니다. Ubuntu / Linux는 폴더와 파일을 동일한 객체 (디스크 포인터)로 취급합니까?
blog
중이며 블로그 게시물 이라는 폴더 와 블로그 게시물 blog
목록이 있는 html 페이지 가있는 로컬 버전을 가질 수 없습니다 .
우분투에서 "MyFile"이라는 폴더와 "MyFile"이라는 문서를 같은 위치에 가질 수없는 이유는 무엇입니까? 나는 얻을 item already used in this location
오류입니다. Ubuntu / Linux는 폴더와 파일을 동일한 객체 (디스크 포인터)로 취급합니까?
blog
중이며 블로그 게시물 이라는 폴더 와 블로그 게시물 blog
목록이 있는 html 페이지 가있는 로컬 버전을 가질 수 없습니다 .
답변:
리눅스에서 거의 모든 것이 파일 디스크립터입니다. 디렉토리는 사용자 관점에서 다른 파일을 보유 할 수있는 특수한 유형의 파일입니다.
따라서 같은 디렉토리에 같은 이름을 동시에 가질 수는 없습니다.
가능하다면 코더에게는 인생이 비참해질 것입니다. 누군가가 디렉토리를 작성하고 존재하는지 확인하려고 할 때 "isDir"명령은 무엇을 리턴합니까? isDir ( "/ home / shrodingers / cat")가 true, false 또는 둘 다를 반환해야합니까? 누군가가 어떤 코드에서 파일의 디렉토리를 열려고한다면 어떻게 될 것입니까?
그리고 무언가를 열라고 말할 때 시스템은 어떻게해야합니까? 파일을 원한다고 가정하십니까? 그 문제를 철자 ;)
그건 그렇고 : 이것은 Linux뿐만 아니라 모든 운영 체제에 해당됩니다. 데스크탑 관점에서 운영 체제는 파일이나 디렉토리에 고유 식별자를 추가하고 목록에서 제거 할 수 있습니다. 커맨드 라인 관점에서 보면 문제가 될 것입니다.
Windows에는 한 가지가 있습니다. 대소 문자를 구분하는 이름을 사용합니다. "MYFILE"과 "myfile"은 다릅니다.
같은 위치에 같은 이름을 가진 두 개의 엔티티를 가질 수 없습니다. 파일을 cat 또는 vi하려고 할 때 어떤 일이 발생합니까? OS가 선택한 마녀 실체? 혼동 가능성 때문에 같은 위치에있는 파일 및 폴더에 대해 같은 이름을 가질 수 없습니다. 그런데 폴더는 다른 파일을 호스팅하는 파일입니다.
cat
또는 vi
그 이름이 있다면 OS는 파일을 선택해야합니다. 왜 작동하지 않습니까?
vi
있는 것은 실제로 vim
디렉토리를 열고 보여주고 편집하는 것도 완벽합니다. 그것을 시도 : vi .
cat
또는이 vi
그 이름으로 주소 의 논리적 해석은 파일이 아닌 하위 디렉토리를 호출하는 것입니다. (주로) 파일 지향 명령 ( vi
)도 (하위) 디렉토리에서 작동 한다는 사실은 해당 명령문과 관련이 없습니다.
vim
하위 디렉토리 인수를 순진하게 처리하지 않습니다. 파일을 처리하는 코드와 동일한 코드로. vim
파일에서 호출되는 경우 텍스트 편집기처럼 작동하고 하위 디렉토리에서 호출 된 경우 파일 관리자처럼 작동합니다.
vi
. 건배.
나는 이것이 오래된 주제라는 것을 알고 있지만 방금 같은 문제가 있었고 공유하고 싶었습니다.
여기 내 이야기가 있습니다 (인내심을 가지고 행복한 끝이 있습니다).
환경 :
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+200b
A는 "제로 폭 공간" 그런데. 이 일화가 마음에 들지만 답변으로 완전히 계산되지 않을 수도 있습니다.
와우 이건 정말 이상하지만 저자가 요청한 것을 방금 수행했습니다. 이것이 방법이므로 실제 답변입니다 : 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 #
.myfile
?