Folder dan nama file yang sama di lokasi yang sama

15

Di Ubuntu mengapa saya tidak dapat memiliki folder bernama "MyFile" dan dokumen bernama "MyFile" di lokasi yang sama? Saya mendapatkan item already used in this locationkesalahan. Apakah Ubuntu / Linux memperlakukan folder dan file sebagai objek yang sama (pointer ke disk)?

pebox11
sumber
Apakah namanya persis seperti itu? Apakah file memiliki titik terdepan dalam nama file? Misalnya .myfile,?
Sergiy Kolodyazhnyy
Saya memiliki masalah yang sama. Saya mengganti namanya. Ada beberapa opsi: Ganti nama folder menjadi huruf kecil atau tambahkan ekstensi, misalnya - myfile atau My.File. Atau ganti nama file ke MyFile.txt. Mengganti nama salah satu akan bekerja dengan baik.
Buck
3
Duplikat Mengapa saya tidak bisa memiliki folder dan file dengan nama yang sama?   (di Unix & Linux)
G-Man Mengatakan 'Reinstate Monica'
Saya berbagi frustrasi Anda. Saya sedang membangun situs web statis, dan saya tidak dapat memiliki versi lokal yang memiliki folder yang disebut blogdengan posting blog di dalamnya, dan halaman html disebut blogdengan daftar posting blog.
Costa

Jawaban:

29

Di Linux, hampir semuanya adalah deskriptor file. Direktori adalah jenis file khusus yang dari perspektif pengguna dapat menampung file lain.

Jadi Anda tidak dapat memiliki keduanya dengan nama yang sama, di direktori yang sama pada saat yang sama.

Jika Anda bisa, hidup akan menjadi sengsara bagi pembuat kode. Apa yang akan Anda dapatkan dari perintah "isDir" kembali ketika seseorang ingin membuat direktori dan memeriksa apakah ada. Haruskah isDir ("/ home / shrodingers / cat") mengembalikan true, false atau keduanya? Dan apa yang Anda harapkan jika seseorang ingin membuka dir file dalam beberapa kode?

Dan apa yang harus dilakukan sistem ketika Anda menyuruhnya membuka sesuatu? Asumsikan Anda menginginkan file tersebut? Itu berarti masalah ;)

By the way: ini berlaku untuk SEMUA sistem operasi, bukan hanya Linux. Meskipun dari sudut pandang Desktop sistem operasi dapat menambahkan pengidentifikasi unik ke file atau direktori dan menghapusnya dari daftar. Dari sudut pandang command line, itu akan bermasalah.

Ada satu hal yang kami miliki tentang Windows: kami menggunakan nama yang case-sensitive. Jadi "MYFILE" dan "myfile" adalah hal yang berbeda.

Rinzwind
sumber
2
Tidak masalah :) Saya melakukannya untuk upvotes ;-)
Rinzwind
1
@Rinzwind untuk upvotes? Oke, ini satu lagi
AB
1
Teori Linux segalanya: Semuanya adalah file!
Byte Commander
Anthon dan saya berkolaborasi pada kucing Schrödinger / keduanya bercanda empat bulan lalu . Dan, seperti yang dikatakan Byte Commander, ungkapannya adalah "Semuanya adalah file", bukan "semuanya adalah deskriptor file."
G-Man Mengatakan 'Reinstate Monica'
1
Plan9 ( plan9.bell-labs.com/plan9 ) (pencipta asli Unix) mungkin merupakan satu-satunya OS di mana "semuanya adalah file". Untuk semua sistem Unix dan Linux lainnya, frasa yang benar adalah "semuanya adalah deskriptor file". "Semuanya adalah file" kecuali memori, panggilan sistem, perangkat jaringan dan cukup banyak segalanya kecuali file TAPI mereka semua memiliki file-deskriptor ;-) Jika seseorang ingin melanjutkan ini -> obrolan: =)
Rinzwind
1

Anda tidak dapat memiliki dua entitas dengan nama yang sama di lokasi yang sama. apa yang akan terjadi ketika Anda ingin menyimpan atau menyimpan file? entitas penyihir akan memilih OS? jadi karena kemungkinan kebingungan Anda tidak akan dapat memiliki nama yang sama untuk file dan folder di lokasi yang sama. dan omong-omong folder adalah file yang menjadi tuan rumah file lain.

L. Barzic
sumber
3
Jawaban Anda melemparkan pertanyaan OP kembali ke wajahnya ("Anda tidak dapat memiliki dua entitas dengan nama yang sama di lokasi yang sama", yang jelas sudah ia ketahui - pertanyaannya adalah "mengapa?"), Dan kemudian Anda mengajukan pertanyaan retoris. , seolah-olah mereka tidak bisa dijawab, dan itu menyelesaikan pertanyaan. Jika saya memiliki file dan direktori dengan nama yang sama, dan saya catatau vinama itu, maka, jelas, OS harus memilih file tersebut. Mengapa itu tidak berhasil?
G-Man Mengatakan 'Reinstate Monica'
2
@ G-Man: sebenarnya viyang biasanya vimdi Ubuntu sangat senang untuk membuka dan menampilkan direktori dan bahkan mengeditnya. Cobalah: vi .
arielf
1
@arielf: (1) saya mengatakan bahwa, jika itu memungkinkan untuk file dan subdirektori dengan nama yang sama ada di direktori yang sama, maka ketika perintah (terutama) berkas-berorientasi seperti catatau viditujukan kepada nama itu , interpretasi logis adalah memohonnya pada file daripada pada subdirektori. Fakta bahwa perintah (berorientasi) file ( vi) juga berfungsi pada direktori (sub) tidak relevan dengan pernyataan itu.
G-Man Mengatakan 'Reinstate Monica'
1
(2) Pernyataan Anda adalah ikan haring merah. vimtidak memperlakukan argumen subdirektori secara naif; dengan kode yang sama dengan yang menangani file.  vimtampaknya (pada tingkat yang sangat sederhana) dua program dalam satu: jika dijalankan pada file, itu bertindak seperti editor teks, dan jika dipanggil pada subdirektori, ini bertindak seperti manajer file.
G-Man Mengatakan 'Reinstate Monica'
1
@ G-Man: Saya hanya merujuk pada pernyataan terakhir Anda dalam komentar pertama: "maka, jelas, OS harus memilih file." - itulah yang melompat pada saya karena tidak berlaku untuk vi. Bersulang.
arielf
1

Saya tahu ini adalah topik lama, tetapi saya memiliki masalah yang sama dan saya ingin berbagi.
Inilah kisah saya (bersabarlah, ada akhir yang bahagia).

Lingkungan:
Kernel Gentoo 4.12.5 64 bit pada reiserfs

Bagaimana ini bisa terjadi?
Saya memiliki beberapa mesin dengan folder yang dibagikan menggunakan sinkronisasi. Di beberapa titik di masa lalu, saya telah menghapus file bernama ".stfolder" dan membuat direktori dengan nama itu. Jadi, mungkin bug tersebut disebabkan oleh sinkronisasi yang menyinkronkan operasi ini di komputer lain.

Sekarang mari kita periksa bug: (Saya beroperasi sebagai root di sini)

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

Sepertinya file tersebut adalah hantu namun folder tersebut menjawab secara normal (dengan menemukan)

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

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

Saya tahu, sangat aneh ...

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

Saya tidak bisa menghapus file hantu itu!

Tetapi pada akhirnya, saya berhasil menghapusnya dengan memindahkannya pada tmpfs mount point

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

Saya harus mengatakan bahwa bug tersebut masih ada pada tmpfs, jadi tidak terkait dengan 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

Seperti yang Anda lihat dalam output bash ini, file hadir dan tidak-hadir pada saat yang sama. Karena kemampuan kucing Schrödinger ini , kita dapat membuat folder dengan nama yang sama.
Tapi tunggu, masih ada lagi (dan Anda harus mengetahui ini dengan jelas): kita juga dapat membuat file dengan nama yang sama.

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"

Hantu tersebut dapat disalin (jadi saya dapat menduplikasi bug), atau dimanipulasi oleh chown, chmod, dll. Satu-satunya batasan adalah Anda tidak dapat memberi nama sehingga Anda harus meletakkannya di direktori kosong dan menggunakan ". *" Sebagai argumen untuk perintah-perintah itu ... tetapi berhasil!

Karena sifatnya itu, file ini kosong sejak awal (itu hanya sebuah bendera untuk sinkronisasi).
Jadi saya ingin tahu apakah saya bisa memasukkan beberapa data ke file itu.
Dan di sini, solusinya datang kepada saya:

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

Ya, ada karakter yang tidak terlihat dalam file itu, tepat setelah titik.
Ini menjelaskan semuanya.
Terima kasih Tuhan, saya tidak menggunakan "echo test >>. *" Dan ...

Stopi
sumber
U+200badalah "ruang nol lebar" , omong-omong. Saya suka anekdot ini, walaupun saya khawatir itu mungkin tidak sepenuhnya dihitung sebagai jawaban.
PerlDuck
0

/unix//a/238056/139805

wow ini benar-benar aneh tapi saya hanya melakukan apa yang penulis minta. Ini adalah bagaimana, jadi itu adalah jawaban nyata: 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

ini dilakukan oleh:

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 respon alternatif dua file dengan nama yang sama, bahkan tidak direktori dan file lagi apa yang terjadi ??? _

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 

perilaku yang benar-benar aneh

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 # 
Charles Adrian Posinoff
sumber
2
Salah satu dari dua nama tersebut memiliki bentuk ruang pada akhirnya. Anda dapat mengetahui di output "file".
dascandy