Pada sistem apa // foo / bar berbeda dari / foo / bar?


114

Sepanjang spesifikasi POSIX, ada ketentuan ( 1 , 2 , 3 ...) untuk memungkinkan implementasi memperlakukan jalur yang dimulai dengan dua jalur /khusus.

Aplikasi POSIX (aplikasi yang ditulis dengan spesifikasi POSIX agar portabel untuk semua sistem yang sesuai dengan POSIX) tidak dapat berasumsi //foo/barsama dengan /foo/bar(meskipun mereka dapat berasumsi ///foo/barsama dengan /foo/bar).

Sekarang apa sajakah sistem POSIX (historis dan masih dipertahankan) yang memperlakukan //fookhusus? Saya percaya (sekarang saya telah terbukti salah ) bahwa ketentuan POSIX didorong oleh Microsoft untuk varian Unix mereka (XENIX) dan mungkin lapisan Windows POSIX (dapatkah ada yang mengonfirmasi itu?).

Ini digunakan oleh Cygwin yang juga merupakan lapisan seperti POSIX untuk Microsoft Windows. Apakah ada sistem non-Microsoft Windows? OpenVMS?

Pada sistem di mana //foo/barspesial, untuk apa ia digunakan? //host/pathuntuk akses sistem file jaringan? Sistem file virtual?

Apakah beberapa aplikasi yang berjalan di Unix-like - jika bukan API sistem - memperlakukan //foo/barjalur khusus (dalam konteks di mana mereka memperlakukannya /foo/barsebagai jalur pada sistem berkas)?


Sunting , Saya telah mengajukan pertanyaan pada milis austin-grup tentang asal //foo/barpenanganan dalam spesifikasi, dan diskusi adalah bacaan yang menarik (setidaknya dari sudut pandang arkeologi).



1
@OlivierDulac, No. ls -ld ///juga akan menampilkan ///, lshanya menampilkan file yang diperintahkan untuk ditampilkan seperti yang diberikan. Saya mencari sistem atau aplikasi yang memperlakukan // foo / var secara khusus (bukan sebagai jalur pada sistem berkas) seperti yang dilakukan Cygwin.
Stéphane Chazelas

1
standard ( pubs.opengroup.org/onlinepubs/009695399/basedefs/… ) mengatakan, seperti yang Anda sebutkan, "Pathname yang dimulai dengan dua garis miring berturut-turut dapat ditafsirkan dengan cara yang ditentukan oleh implementasi" (lebih dari 2 memutuskan ke 1 /) . Contoh ditemukan di internet: austingroupbugs.net/view.php?id=83 ( IBM's z/OS resolves //pathname requests to MVS datasets (as opposed to the hierarchical filesystem (HFS)) (......) Additionally, z/OS would not accept or recognize additional "directory" or "file" components appended to such paths.... meskipun tidak benar-benar unix, ^^).
Olivier Dulac

4
@DevSolar: benar-benar interresting (dan mengejutkan), tetapi kita harus tetap berpegang pada POSIX saja, karena dari POSIX segala sesuatu mungkin terjadi ^^
Olivier Dulac

2
@edwardtorvalds karena bit pertama adalah URL:, file://sama dengan http://dan semacamnya. Pada chrome di sini di tempat kerja jalan UNC windows yang saya buka sekarang adalah file:////$MACHINE/$SHARENAME/index.html(meskipun untuk beberapa alasan juga mengerti file://$MACHINE/...)
admalledd

Jawaban:


90

Ini adalah kompilasi dan indeks dari jawaban yang diberikan sejauh ini. Posting ini adalah wiki komunitas , dapat diedit oleh siapa saja dengan 100+ reputasi dan tidak ada yang mendapat reputasi darinya. Jangan ragu untuk mengirim jawaban Anda sendiri dan menambahkan tautan di sini (atau tunggu saya melakukannya). Idealnya, jawaban ini hanya berupa ringkasan (dengan entri pendek sementara masing-masing jawaban lainnya memiliki detail).

Sistem yang saat ini dikelola secara aktif:

Sistem mati

Aplikasi yang memperlakukan //foo/barjalur khusus


3
Menggunakan //namespace diusulkan oleh beberapa pengembang kernel Linux untuk fasilitas metadata Reiser4, tapi saya tidak berpikir proposal ini pernah mendapatkan daya tarik dalam Namesys, juga tidak pernah diimplementasikan.
Jörg W Mittag

Windows sendiri mengimplementasikan POSIX API ... bagaimana cara menangani double slash terkemuka?
Kevin

1
Kita dapat menambahkan bahwa di web, sumber daya dimulai dengan garis miring ganda mendefinisikan akar yang berbeda dari garis miring tunggal.
Alex Gittemeier

@ Kevin, ya saya juga percaya (lihat pertanyaan), meskipun saya pikir itu adalah komponen opsional dan hanya pada beberapa varian Windows dan sekarang dihentikan. Jika Anda memiliki detail lebih lanjut, silakan tambahkan jawaban.
Stéphane Chazelas

@AlexGittemeier. Ya, Anda akan melihat itu sebenarnya digunakan dalam jawaban ini ;-).
Stéphane Chazelas

16

Apakah beberapa aplikasi berjalan di Unix-like —jika bukan API sistem— memperlakukan // foo / bar Paths secara khusus?

Saya mengetahui Perforce yang menggunakan //depot/A/B/C/DPaths untuk merujuk ke Depot. Perforce juga mendukung //Client/C/DPaths, ketika Klien menunjuk ke //depot/A/B/. Di sini, FileSystem lokal mungkin tidak memiliki Paths ini.

p4 filelog //depot/A/B/C/Dakan menampilkan riwayat file itu, meskipun tidak ada file /depot/A/B/C/D.

p4 filelog C/D juga akan menunjukkan riwayat file itu, jika dijalankan dari Direktori yang sesuai.

Referensi: https://www.perforce.com/perforce/r12.1/manuals/cmdref/o.fspecs.html


13

Beberapa dekade yang lalu, Tektronix Utek (BSD 4.2 berbasis Unix, pertama pada National Semiconductors 32016 CPU kemudian Motorola 68020 s) menyediakan sesuatu yang disebut DFS (sistem file terdistribusi) yang //foo/barmerujuk pada /barfile di fooserver dfs. Itu kemudian usang oleh Sun's NFS.

Sayangnya, saya belum referensi untuk mendukung itu tetapi saya akhirnya mungkin menemukan beberapa dokumentasi Utek di ruang bawah tanah saya dan memperbarui balasan ini.



@ StéphaneChazelas Saya percaya bahwa tautan ke diskusi Usenet ini lebih baik. Yang Anda pilih memiliki Domain / OS tetapi tidak Utek. Atau pesan berikutnya (dari Anda)


Implementasi Tektronix / BSD RFS tampaknya dipasang sistem file jarak jauh pada file biasa untuk menghindari findmisalnya melintasi titik mount. Penulis secara eksplisit //foo/bar/../foo/bar
mengesampingkan


7

Mengikuti petunjuk dari jawaban ini . Dan membaca halaman 2-15 dari manual dari Bitsavers (terima kasih @grawity ).

Data Bersama
Prinsip desain kedua dari sistem file Domain / OS terdistribusi, berbagi secara default, menyiratkan ruang nama seragam global. Ruang nama sistem file terdistribusi muncul kepada pengguna seperti sistem file timesharing raksasa. Ini adalah ruang nama hierarki UNIX tradisional, kecuali bahwa nama path absolut dapat dimulai dengan nama root jaringan (disebut //). Dimungkinkan juga untuk mengekspresikan nama path relatif terhadap root dari node lokal (direktori /).

Ada juga manual yang lebih tua dari dengan "First Printing: July, 1985". Di halaman 1-4:

Garis miring ganda (//) pada Gambar 1-2 mewakili tingkat teratas pohon penamaan, direktori root jaringan.

Jadi, kami mendapat konfirmasi bahwa Domain / OS dari Apollo digunakan //untuk root jaringan.


Saya pikir pria grawity adalah pengembang utama Linux dev .
mikeserv


5

Proyek ReactOS - yang merupakan implementasi bebas dan open-source dari kernel NT dan API terkait - rupanya dilakukan untuk juga menerapkan subsistem POSIX seperti Interix sendiri (meskipun subsistem OS / 2 MS asli juga disebutkan dalam konteks , tidak disebutkan) terbuat dari analog ReactOS) .

Meskipun upaya sejauh ini kecil , fork()tampaknya merupakan kenyataan. Berikut adalah kutipan dari halaman proyek subsistem, seperti yang tercantum di bawah masalah terbuka :

jalan

Apa cara terbaik untuk menggunakan jalur Win32 dalam aplikasi POSIX? ide ide:

  • terjemahkan //<device>/<path> ke dalam \\.\<device>\<path> (dengan case khusus untuk huruf drive - //<letter>/<path>=> <letter>:\<path>- dan escape khusus //./<raw text>=> \\.\<raw text>. Jalur UNC dapat ditentukan dengan //unc/<path>) . //lintasan dicadangkan oleh standar untuk perilaku spesifik implementasi, dan //<letter>/sintaks untuk melarikan diri lintasan Win32 banyak digunakan di lingkungan kompatibilitas POSIX yang ada

  • heuristik untuk mengenali "telanjang" jalur Win32 seperti itu

  • kasus-sensitif lookup untuk jalur Win32 dan //jalur (tidak standar memungkinkan perilaku semacam ini implementasi khusus untuk //jalan?) .

Saya tidak yakin bagaimana itu memenuhi syarat karena saya tidak yakin berapa banyak dari itu telah diterapkan, tetapi saya pikir itu adalah deskripsi yang berguna tentang masalah.


XENIX tidak memiliki subsistem POSIX , Windows memiliki AFAIK. XENIX adalah Unix (awalnya didasarkan pada Unix V7 yang dibeli oleh Microsoft dari AT&T).
Stéphane Chazelas

1
Bagus baca di sini juga tentang subsistem interix / Windows POSIX
Stéphane Chazelas

@ StéphaneChazelas - cukup. Saya hampir ingin mengganti tautan saya dengan itu, tetapi pada akhirnya sedikit didasarkan pada pendapat, dan tidak benar-benar berfungsi sebagai referensi ... tapi jangan hapus komentar, tolong?
mikeserv

Bagaimanapun, itu tidak menyebutkan //foo/barpenanganan. Saya belum menemukan bukti kuat bahwa subsistem Windows POSIX atau Interix benar-benar menanganinya sejauh ini.
Stéphane Chazelas

@ StéphaneChazelas - Saya tidak tahu apakah itu hanya sangat tidak konsisten, atau jika meninggalkan bagian opsional hanya pengawasan, tetapi lsaclperintah MKS ditentukan untuk memahami \\machinename\driveletter:\pathsementara registryperintahnya ditentukan untuk memahami bentuk itu atau secara opsional memilih// kedua cara. Karena kit MKS adalah pendahulu untuk Interix dan apa yang dikirimkan MS untuk versi 1/2 saya akan berpikir Interix harus menerima sintaks yang kompatibel untuk hal mendasar seperti itu.
mikeserv

4

Pada 1980-an, SEL / Gould memiliki sistem operasi Unix yang disebut UTX-32 yang setara dengan di Solaris; yaitu jalur akses jarak jauh pada host . Saya tidak dapat menemukan dokumentasi apa pun di dalamnya, jadi saya tidak tahu apakah ini adalah RFS atau evolusi paralel (atau apakah AT&T//host/path/net/host/pathpathhostmencuri mendapatkannya dari Gould).


Terima kasih. Apakah Anda punya referensi tentang hal itu ( //host/pathdi UTX-32), kebetulan?
Stéphane Chazelas

Mungkin saja saya memiliki dokumen cetak dalam kotak di loteng saya, tetapi tidak mungkin - (1) Saya tidak ingat pernah memiliki banyak dokumentasi (saya ingat briefing lisan lima menit); (2) bahkan jika saya memilikinya, saya mungkin tidak membawanya pulang; (3) bahkan jika saya membawanya pulang, saya mungkin membuangnya dalam 30 tahun terakhir; dan (4) bahkan jika saya masih memilikinya, saya mungkin tidak akan dapat menemukannya. Oh, juga (0) saya menghabiskan waktu lima menit untuk mencari di Google (tidak berhasil) sebelum saya mengirimkan jawaban saya.
Scott

4

Saya memiliki memori yang tidak jelas bahwa //host/pathnotasi tersebut digunakan pada AT&T SysV.3 sebagai bagian dari implementasi Berbagi File Jarak Jauh RFS . Ini akhirnya ditinggalkan sekitar waktu SysV.4 dirilis untuk NFS yang lebih sederhana namun lebih populer dari Sun Microsystems.

Namun, saya tidak dapat menemukan referensi konkret ke sintaks, dan dokumentasi yang telah saya ulas tadi sepertinya menunjukkan bahwa gagasan pengguna secara eksplisit menentukan nama host jarak jauh akan bertentangan dengan prinsip desain independensi lokasi.

Referensi 1. Tinjauan arsitektur RFS


3
Untuk ini tentang RFS. Saya tidak dapat menemukan referensi //host/path. Tampaknya menyiratkan bahwa sistem file jaringan harus dipasang secara eksplisit.
Stéphane Chazelas

Terima kasih atas pengingatnya. Ini adalah salah satu bagian dari "dokumentasi yang telah saya ulas", jadi saya akan menambahkan tautan padanya jika Anda tidak keberatan. Saya masih bingung tentang ini; mungkin datang kepada saya di hari berikutnya atau lebih.
roaima

4

POSIX menyatakan dalam Dasar Pemikiran untuk A.4.12. Path Path Resolution Paragraphs 9 and 10:

Dalam beberapa sistem jaringan, konstruksi /../hostname/ digunakan untuk merujuk ke direktori root dari host lain, dan POSIX.1 mengizinkan perilaku ini.

Sistem jaringan lain menggunakan konstruk // hostname untuk tujuan yang sama; yaitu, slash awal ganda digunakan.

Tampaknya ini mengkonfirmasi bahwa itu //berarti "root jaringan", atau setidaknya itu adalah ide ketika aturan dimasukkan dalam POSIX.


Aturan mengikuti untuk menghapus makna apa pun //di tengah jalur untuk /Pathname yang dimulai:

... karena urutan tidak terdepan dari dua atau lebih karakter <slash>
diperlakukan sebagai satu <slash>, ...

Tentu saja, //Pathname yang dimulai dapat memperluas atau mengubah penggunaan //di dalam Pathname (bukan di awal). POSIX.1 memungkinkan ini. Yang terakhir ini mengkonfirmasi bahwa satu-satunya yang //diizinkan adalah di awal Pathname.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.