Saya bertanya-tanya apakah ada cara untuk mendaftarkan ini, tetapi karena sebagian besar mesin pencari modern tidak bekerja dengan baik dengan frasa lebih dari 5 kata panjangnya, saya butuh bantuan yang satu ini.
Saya ingin tahu ini karena saya membuat skrip bash yang harus mendaftarkan file sebagai tipe tertentu dan membuat keputusan yang sesuai. Secara teknis ini tidak penting untuk proyek saya, tetapi saya ingin tahu.
Juga, jika mereka dianggap sebagai file biasa, lalu apakah ada cara untuk memeriksa apakah file-file ini sulit ditautkan tanpa harus menguraikan ls -i
? Dan adakah cara untuk memeriksa apakah beberapa file arbitrer, X, sulit ditautkan ke beberapa file arbitrer lainnya, Y, tanpa menggunakan find -i
perintah?
bash
shell-script
files
hard-link
Tn. Minty Fresh
sumber
sumber
Jawaban:
Dalam sistem Unix-style, struktur data yang mewakili objek sistem file (dengan kata lain, data tentang file), disimpan dalam apa yang disebut "inode".
Nama file hanyalah tautan ke inode ini, dan disebut sebagai "tautan keras". Tidak ada perbedaan antara nama depan file diberikan dan tautan selanjutnya. Jadi jawabannya adalah, "ya": tautan keras adalah file biasa dan, memang, file biasa adalah tautan keras.
The
ls
perintah akan menunjukkan berapa banyak hard link yang ada untuk file.Sebagai contoh:
Di sini kami telah membuat file bernama
/tmp/hello.txt
. Di1
dalam output darils -l
menunjukkan bahwa ada 1 tautan keras ke file ini. Tautan keras ini adalah nama file itu sendiri/tmp/hello.txt
.Jika sekarang kita membuat tautan keras lain ke file ini:
Anda sekarang dapat melihat bahwa kedua nama file menunjukkan ada 2 tautan keras ke file tersebut. Tak satu pun dari ini adalah nama file yang "tepat", keduanya sama-sama valid. Kita dapat melihat bahwa keduanya menunjuk ke inode yang sama (dalam kasus ini, 5374043):
Ada kesalahpahaman umum bahwa ini berbeda untuk direktori. Saya pernah mendengar orang mengatakan bahwa jumlah tautan yang dikembalikan oleh
ls
suatu direktori adalah jumlah subdirektori, termasuk.
dan..
yang tidak benar . Atau, setidaknya, meskipun akan memberi Anda nomor yang benar, itu tepat untuk alasan yang salah!Jika kita membuat direktori dan melakukan yang
ls -ld
kita dapatkan:Ini menunjukkan ada 2 tautan keras ke direktori ini. Ini adalah:
Perhatikan bahwa
/tmp/testdir/..
ini bukan tautan ke direktori ini, ini tautan ke/tmp
. Dan ini memberi tahu Anda mengapa "jumlah subdirektori" berfungsi. Ketika kami membuat subdirektori baru:Anda sekarang dapat melihat ada 3 tautan keras ke
/tmp/testdir
direktori. Ini adalah:Jadi setiap sub-direktori baru akan menambah jumlah tautan satu per satu, karena
..
entri yang dikandungnya.sumber
Hard link dihitung sebagai apa pun yang ditautkan. Anda dapat menautkan ke apa saja di sistem file yang sama.
Setiap hardlink dengan apa pun adalah setara, objek yang mendasarinya tetap ada selama ada tautan (sunting: non-simbolik) sama sekali (bahkan deskriptor file terbuka, yang saya punya alasan memalukan untuk sangat berterima kasih).
Sistem akan memberlakukan aturan pada tautan direktori, Anda mendapatkan satu tautan bernama ke direktori dan sistem secara otomatis menambahkan
.
tautan yang disematkan dan tautan subdirektori apa pun..
(perhatikan bahwa.
di ls di atas memiliki dua tautan) tetapi itu adalah pemeriksaan eksplisit, pada beberapa modded sistem pengguna istimewa yang berjanji berjanji tidak akan mengulang dapat menambahkan sendiri tautan baru. Filesystem tidak peduli, itu bisa mewakili grafik direktori sewenang-wenang, tetapi tidak ada yang mau berurusan dengan mereka.Ada (banyak sistem file non-unix) yang tidak berfungsi seperti ini, termasuk beberapa yang menyebut apa yang mereka tawarkan sebagai pengganti "tautan keras". OS X telah mengumpulkan setara pada HFS + (yang tidak memilikinya secara asli) jika saya ingat dengan benar, saya tidak tahu seberapa setia itu mempertahankan semantik di sini.
sumber
./tsock
sebenarnya dilakukan?socket()
membuat soket aktual,bind()
memberikannya nama tertentu,connect()
menghubungkan soket yang Anda buat ke beberapa soket bernama. Berbagai jenis soket menggunakan berbagai jenis nama, misalnya soket Internet menggunakan alamat Internet, tetapi semuanya berbagi API yang sama (termasukread()
danwrite()
, itu membuat saya sedih bahwa Anda tidak dapatopen()
menggunakan soket sistem file dan memiliki OS atau libc lakukansocket()
danconnect()
untuk Anda) .man 7 socket
memiliki lebih banyak, semua protokol jaringan membuat untuk halaman manual gelisah.