GNU/Linux >> Belajar Linux >  >> Linux

Semua Hal Penting yang Perlu Anda Ketahui Tentang Hard Link di Linux

Sebelum Anda melihat tautan keras, saya menyarankan Anda untuk belajar tentang inode di Linux. Sistem file Linux memiliki dua komponen utama:kumpulan blok data tempat data disimpan dan sistem database untuk mengelola kumpulan data ini. Inode seperti indeks untuk sistem database ini.

Tautan keras ke file mengarah ke inode file, bukan ke file itu sendiri. Dengan cara ini tautan keras mendapatkan semua atribut dari file asli dan menunjuk ke blok data yang sama dengan file asli.

Jika Anda ingat tautan simbolik atau tautan lunak, Anda tahu bahwa tautan itu menunjuk ke file. Tautan keras adalah entri yang dibuat secara manual dalam direktori yang menunjuk ke inode yang sudah ada.

Saya akan menjelaskannya kepada Anda dengan diagram yang tepat. Mari kita ambil contoh struktur direktori ini:

Jadi pada dasarnya, direktori root berisi direktori dir_1 dan dir_2. Dir_1 direktori memiliki file_1 dan file_2 file sedangkan dir_2 berisi file_3 dan tautan keras ke file 2.

Mari kita lihat bagaimana tampilannya di sistem file. Semuanya representasional. Pada kenyataannya, direktori root akan memiliki ribuan file. Di sini, kami menganggapnya hanya memiliki dua direktori.

Ingat struktur direktori Linux? Anda mulai dengan root (/). Direktori root selalu memiliki inode 2.

Jika Anda harus mengakses file 3, jalur absolutnya adalah /dir_2/file_3. Di sini, Anda dapat membacanya seperti ini:Anda mulai dari inode 2 (root selalu indoe 2) dan ikuti panah ke blok datanya. Blok data ini memiliki informasi tentang inode dari dir_2 (inode 27 dalam contoh kita).

Sekarang Anda melihat ke inode 27. Jenisnya adalah direktori. Anda mengikuti blok datanya yang memiliki informasi tentang inode file_3 (inode 88). Anda melihat ke inode 88. Jenisnya adalah file dan jika Anda mengikuti blok datanya, Anda mengakses konten file.

Apakah Anda memperhatikan bahwa direktori itu sendiri tidak memuat data file-nya? Direktori pada dasarnya adalah file yang berisi informasi tentang inode file dan subdirektorinya.

Anda pasti bertanya-tanya tentang jumlah tautan pada gambar di atas. Itu sangat penting khususnya ketika Anda berurusan dengan tautan keras. Jumlah tautan adalah jumlah entri direktori yang mengarah ke sebuah inode. Ambil inode 27 untuk dir_2 misalnya. Inode 27 pernah berada di blok data direktori root dan sekali di blok datanya sendiri (direktori khusus .). Dan karenanya memiliki jumlah tautan 2.

Perhatikan bahwa semua file memiliki jumlah tautan 1 kecuali file_2? Jika sebuah file memiliki jumlah tautan lebih dari 1, itu berarti ada tautan keras 'ke file ini'. Karena tautan keras menunjuk ke inode yang sama (inode 17 dalam contoh kami) sebagai file target, Anda mendapatkan 2 daftar direktori untuk inode 17 (dalam blok data dir_1 dan dir_2).

Anda dapat menggunakan perintah ln untuk membuat tautan keras:

ln target_file link_name

Ini akan membuat tautan keras bernama link_name ke target_file. Anda akan melihat bahwa link_name terlihat seperti file biasa dan atributnya sama dengan file target.

Jika Anda menggunakan perintah ls -li (opsi -i menunjukkan nomor inode), Anda akan melihat bahwa jumlah tautannya adalah 2. Jumlah tautan setelah bidang izin file.

134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  link_target_file

Keduanya memiliki nomor inode yang sama 134195, tentunya.

Sekarang setelah Anda memiliki ide bagus tentang tautan keras di Linux, mari kita melangkah lebih jauh.

Jika Anda menghapus file target, Anda masih dapat mengakses kontennya melalui tautan keras. Itu karena file target dan hard link memiliki inode yang sama sehingga mengarah ke blok data yang sama.

Menghapus file di Linux pada dasarnya memutuskan tautan. Misalkan Anda menghapus file_1 menggunakan perintah rm. Kernel Linux akan menemukan bahwa file_1 sesuai dengan inode 16. Ini akan menghapus entri file_1 dari daftar dir_1 dan mengurangi jumlah tautan inode 16 sebanyak 1. Sekarang jumlah tautan inode 16 adalah 0, kernel tahu bahwa tidak ada yang menautkan ke ini inode sehingga aman untuk menghapus inode dan menghapus blok data yang terkait dengannya.

Sekarang katakan Anda menghapus file_2. Kernel akan menghapus file_2 dari daftar dir_1 dan akan masuk ke inode 17. Ini akan mengurangi jumlah tautan dari inode 17 sehingga menjadi 1. Karena jumlah tautan bukan nol, kernel tidak akan menghapus inode atau data yang terkait dengannya. dia. Dan karenanya, jika Anda mengakses tautan keras, Anda masih dapat mengakses data meskipun file aslinya telah dihapus.

Anda dapat membuat tautan lunak ke direktori tetapi ketika Anda mencoba membuat tautan keras ke direktori, Anda akan melihat kesalahan seperti ini:

ln: newdir/test_dir: hard link not allowed for directory

Mengapa tautan keras tidak diizinkan untuk direktori? Itu karena menggunakan tautan keras untuk direktori dapat merusak sistem file. Secara teoritis, Anda dapat membuat tautan keras ke direktori menggunakan opsi -d atau -F. Tetapi sebagian besar distribusi Linux tidak mengizinkannya meskipun Anda adalah pengguna root.

Mari kita lihat lagi tautan keras yang saya buat sebelumnya:

134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 abhishek abhishek        0 Jul 17 19:49  link_target_file

Mereka memiliki atribut yang identik tetapi Anda dapat menebak tautan mana yang didasarkan pada nama dalam contoh di atas, tetapi bagaimana jika namanya tidak jelas? Bagaimana Anda tahu jika nama mereka adalah target_1 dan target_2?

Jika file dan tautan berada di direktori yang berbeda, Anda dapat mencoba memeriksa mtime dan parameter lainnya untuk mengetahui kapan konten direktori diubah, tetapi itu pun belum pasti. Jika file dan tautan keras berada di direktori yang sama dan riwayat telah dihapus, saya tidak yakin bagaimana Anda bisa mengetahui mana file asli dan mana tautan keras.

Jika Anda melihat bahwa sebuah file memiliki lebih dari satu jumlah tautan, Anda mungkin penasaran dengan tautan keras lainnya yang terkait dengannya.

Salah satu cara untuk menemukannya adalah dengan menggunakan nomor inode file. Anda dapat menggunakan perintah ls -i atau perintah stat untuk mendapatkan nomor inode.

Setelah Anda memiliki nomor inode, Anda dapat melihat semua tautan yang terkait dengannya menggunakan perintah find.

find . -inum inode_number

Apakah sulit untuk memahami tautan keras?

Saya harap itu tidak terlalu 'sulit' dan Anda memiliki pemahaman yang lebih baik tentang konsep tautan keras di Linux. Jika Anda memiliki keraguan atau saran tentang topik ini, silakan tinggalkan komentar di bawah.


Linux
  1. Semua yang Perlu Anda Ketahui Tentang Ubuntu 13.04

  2. Apa itu SteamOS? Semua Hal Penting yang Perlu Anda Ketahui Tentang “Distribusi Game” Ini

  3. Direktori tmp Linux:Semua yang Perlu Anda Ketahui

  1. Kompresi File Linux:Semua yang Perlu Anda Ketahui

  2. Izin File Linux:Semua yang Perlu Anda Ketahui

  3. Swappiness di Linux:Semua yang perlu Anda ketahui

  1. Semua yang Perlu Anda Ketahui Tentang Sistem File Linux

  2. Semua yang Perlu Anda Ketahui Tentang Perintah Chmod Linux

  3. Semua yang Perlu Anda Ketahui tentang Linux Containers (LXC)