Aynı konumda aynı klasör ve dosya adı


15

Ubuntu'da neden "MyFile" adlı bir klasör ve "MyFile" adlı bir belgeyi aynı konumda edemiyorum? Bir item already used in this locationhata alıyorum. Ubuntu / Linux klasörlere ve dosyalara aynı nesneler (diske işaretçiler) gibi davranıyor mu?


Tam olarak böyle mi adlandırıldı? Dosya adında önde gelen nokta var mı? Örneğin, .myfile?
Sergiy Kolodyazhnyy

Ben de aynı problemi yaşadım. Birini yeniden adlandırdım. Birkaç seçenek vardır: Klasörü küçük harfli olarak yeniden adlandırın veya bir uzantı ekleyin, örneğin - dosyam veya Dosyam. Veya dosyayı MyFile.txt olarak yeniden adlandırın. İkisinden birini yeniden adlandırmak da işe yarayacaktır.
Buck


Hayal kırıklığınızı paylaşıyorum. Statik bir web sitesi oluşturuyorum ve blogblog gönderileriyle adlandırılan bir klasörü ve blog gönderileri bloglistesiyle adlandırılan bir html sayfası olan yerel bir sürüme sahip olamıyorum .
Costa

Yanıtlar:


29

Linux'ta neredeyse her şey bir dosya tanımlayıcıdır. Dizin, kullanıcının bakış açısından diğer dosyaları tutabilen özel bir dosya türüdür.

Böylece, aynı adda aynı ada sahip aynı ada sahip olamazsınız.

Yapabilseydiniz, hayat kodlayıcılar için perişan olur. Birisi bir dizin oluşturmak ve var olup olmadığını kontrol etmek istediğinde "isDir" komutunu döndürürsünüz. İsDir ("/ home / shrodingers / cat") doğru, yanlış veya her ikisini de döndürmeli mi? Birisi bir koddaki bir dosyanın dizinini açmak istiyorsa ne beklersiniz?

Ve bir şey açmasını söylediğinizde sistem ne yapmalı? Dosyayı istediğinizi varsayın? Bu sorun büyü ;)

Bu arada: bu sadece Linux için değil, TÜM işletim sistemleri için de geçerlidir. Masaüstü açısından bakıldığında bir işletim sistemi dosyaya veya dizine benzersiz bir tanımlayıcı ekleyebilir ve listeden kaldırabilir. Bir komut satırı açısından bakıldığında sorun yaratacaktır.

Windows üzerinde sahip olduğumuz bir şey var: büyük / küçük harfe duyarlı isimler kullanıyoruz. Yani "MYFILE" ve "myfile" farklı şeylerdir.


2
Sorun değil :) Ben upvotes ;-) için yapıyorum
Rinzwind

1
@Vinvotes için @Rinzwind? Tamam, işte bir tane daha
AB


Anthon ve ben Schrödinger'in kedisi / her ikisi de dört ay önce şaka yaptık . Bayt Komutanının dediği gibi, ifade "her şey bir dosya tanımlayıcıdır" değil, "Her şey bir dosyadır".
G-Man, 'Monica'yı Yeniden Başlat' diyor

1
Plan9 ( plan9.bell-labs.com/plan9 ) (Unix'in orijinal yaratıcıları) muhtemelen "her şeyin bir dosya olduğu" tek işletim sistemidir. Diğer tüm Unix ve Linux sistemleri için doğru ifade "her şey bir dosya tanımlayıcıdır". Bellek, sistem çağrıları, ağ aygıtları ve dosyalar hariç hemen hemen her şey dışında "her şey bir dosyadır" AMA hepsi bir dosya tanımlayıcıya sahiptir ;-) Birisi bununla devam etmek isterse -> chat: =)
Rinzwind

1

aynı konumda aynı ada sahip iki varlığınız olamaz. dosyayı kedi veya vi yapmak istediğinizde ne olacak? OS seçecek mi? karışıklık olasılığı nedeniyle, aynı konumdaki bir dosya ve klasör için aynı ada sahip olamayacaksınız. ve bu arada klasör diğer dosyaları barındıran bir dosyadır.


3
Cevabınız OP'nin sorusunu tekrar yüzüne atıyor ("aynı yerde aynı adı taşıyan iki varlığınız olamaz", açıkça biliyor - soru "neden?") Ve sonra retorik sorular soruyorsunuz sanki cevapsızlarmış gibi, bu da sorunu çözdü. Aynı ada sahip bir dosya ve bir dizin ve ben catveya vibu ad varsa, o zaman işletim sistemi dosyayı seçmelidir. Neden çalışmıyor?
G-Man, 'Monica'yı Yeniden Başlat' diyor

2
@ G-Man: Aslında vigenellikle vimUbuntu'da olan bir dizin açmak ve göstermek ve hatta düzenlemek için mükemmel bir şekilde mutlu. Deneyin: vi .
arielf

1
@arielf: Bu if (1), söylüyordum vardı bir dosya için mümkün ve aynı adla bir alt dizin aynı dizinde bulunması, daha sonra örneğin bir (öncelikle) dosyası odaklı komut zaman catveya vio adı yöneliktir , mantıksal yorum, onu alt dizinden ziyade dosyada çağırmaktır. (Öncelikle) dosya yönelimli bir komutun ( vi) bir (alt) dizinde de çalışması bu ifadeyle ilgisizdir.
G-Man, 'Monica'yı Yeniden Başlat' diyor

1
(2) İfadeniz kırmızı bir ringa balığıdır. vimalt dizin argümanlarına naif davranmıyor; dosyaları işlediği kodla aynı.  vimbir programda (çok basit bir düzeyde) iki program gibi görünüyor: bir dosyada çağrılırsa, bir metin düzenleyicisi gibi davranır ve bir alt dizinde çağrılırsa, dosya yöneticisi gibi davranır.
G-Man, 'Monica'yı Yeniden Başlat' diyor

1
@ G-Man: Ben sadece 1. yorumdaki son iddianıza atıfta bulunuyordum: "o zaman, işletim sisteminin dosyayı seçmesi gerekiyor." - bana doğru olmayan şey buydu vi. Şerefe.
arielf

1

Bunun eski bir konu olduğunu biliyorum, ama aynı sorunu yaşadım ve paylaşmak istedim.
İşte benim hikayem (sabırlı olun, mutlu bir son var).

Çevre:
Gentoo çekirdeği 4.12.5 Reiserflerde 64 bit

Bu nasıl olabilir?
Senkronizasyon kullanılarak paylaşılan bir klasöre sahip birkaç makinem var. Geçmişte bir noktada, ".stfolder" adlı bir dosyayı kaldırdım ve bunun yerine bu adla bir dizin oluşturdum. Belki de hata, bu işlemi başka bir makinede senkronize etmekten kaynaklanıyor olabilir.

Şimdi hatayı inceleyelim: ( Burada kök olarak çalışıyorum )

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

dosya bir hayalet gibi görünüyor ancak klasör normal yanıt veriyor (find ile)

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

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

Biliyorum, çok garip ...

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

Bu hayalet dosyasını kaldıramıyorum!

Ama sonunda, bir tmpfs bağlama noktasında taşıyarak başarıyla kaldırdım

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

Hata hala tmpfs üzerinde olduğunu söylemeliyim, bu yüzden reiserfs ile ilgili değil:

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

Bu bash çıktısında görebileceğiniz gibi, dosya aynı anda mevcut ve mevcut değil. Bu Schrödinger kedi yeteneği nedeniyle , aynı ada sahip bir klasör oluşturabiliriz.
Ancak bekleyin, daha fazlası var (ve bunu açıkça görmelisiniz): aynı ada sahip başka bir dosya da oluşturabiliriz.

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"

Hayalet kopyalanabilir (böylece hatayı çoğaltabilirim) veya chown, chmod, vb. Tarafından manipüle edilebilir. bu komutlar için argümanlar ... ama işe yarıyor!

Doğası gereği, bu dosya en başından beri boştu (sadece senkronizasyon için bir bayrak).
Bu yüzden bu dosyaya veri koyabileceğimi merak ettim.
Ve işte çözüm bana geldi:

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

Evet, bu dosyada noktadan hemen sonra görünmez bir karakter var.
Bu her şeyi açıklıyor.
Tanrıya şükür, "yankı testi >>. *" Ve kedi kullanmadım ...


U+200bbu arada "sıfır genişlikli boşluk" dur. Bu anekdotu seviyorum, korktuğum halde tam olarak bir cevap olarak sayılmayabilir.
PerlDuck

0

/unix//a/238056/139805

vay bu gerçekten garip ama ben sadece yazarın istediğini yaptım. İşte böyle, bu gerçek bir cevap: 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

bunu yapan:

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 alternatif aynı adı taşıyan iki dosya, hatta bir dizin ve bir dosya artık ne oluyor ??? _

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 

tamamen garip davranış

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
İki isimden birinin sonunda bir çeşit boşluk var. "Dosya" çıktılarında anlatabilirsiniz.
dascandy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.