Beberapa negara memberikan nomor identifikasi unik (misalnya, nomor jaminan sosial di AS) kepada orang yang tinggal di negara tersebut. Ini membuatnya lebih mudah untuk mengidentifikasi individu secara unik. Hal ini memudahkan untuk menangani semua dokumen yang diperlukan untuk individu oleh berbagai lembaga pemerintah dan lembaga keuangan.
Mirip dengan nomor jaminan sosial, ada konsep nomor Inode yang secara unik ada untuk semua file di sistem Linux atau *nix.
Dasar-dasar Inode
Nomor Inode menunjuk ke Inode. Inode adalah struktur data yang menyimpan informasi berikut tentang sebuah file :
- Ukuran berkas
- ID Perangkat
- ID pengguna file
- ID grup file
- Informasi mode file dan hak akses untuk pemilik, grup, dan lainnya
- Tanda perlindungan file
- Stempel waktu untuk pembuatan file, modifikasi, dll
- penghitung tautan untuk menentukan jumlah tautan keras
- Menunjuk ke blok yang menyimpan konten file
Harap dicatat bahwa daftar di atas tidak lengkap. Juga, nama file tidak disimpan di Inodes (Kami akan membahasnya nanti).
Ketika file dibuat di dalam direktori maka nama file dan nomor Inode ditetapkan ke file. Kedua entri ini terkait dengan setiap file dalam direktori. Pengguna mungkin berpikir bahwa direktori tersebut berisi file lengkap dan semua informasi tambahan yang terkait dengannya, tetapi hal ini mungkin tidak selalu terjadi. Jadi kita melihat bahwa sebuah direktori mengasosiasikan nama file dengan nomor Inode-nya.
Ketika pengguna mencoba mengakses file atau informasi apa pun yang terkait dengan file tersebut, maka dia menggunakan nama file untuk melakukannya tetapi secara internal nama file dipetakan terlebih dahulu dengan nomor Inode yang disimpan dalam tabel. Kemudian melalui nomor Inode itu Inode yang sesuai diakses. Ada tabel (tabel Inode) di mana pemetaan nomor Inode dengan masing-masing Inode disediakan.
Mengapa tidak ada nama file di informasi Inode?
Seperti yang ditunjukkan sebelumnya, tidak ada entri untuk nama file di Inode, melainkan nama file disimpan sebagai entri terpisah yang paralel dengan nomor Inode. Alasan untuk memisahkan nama file dari informasi lain yang terkait dengan file yang sama adalah untuk menjaga hard-link ke file. Ini berarti bahwa setelah semua informasi lain dipisahkan dari nama file, maka kita dapat memiliki berbagai nama file yang mengarah ke Inode yang sama.
Misalnya :
$ touch a $ ln a a1 $ ls -al drwxr-xr-x 48 himanshu himanshu 4096 2012-01-14 16:30 . drwxr-xr-x 3 root root 4096 2011-03-12 06:24 .. -rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a -rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a1
Pada output di atas, kami membuat file 'a' dan kemudian membuat hard link a1. Sekarang ketika perintah 'ls -al' dijalankan, kita dapat melihat detail dari 'a' dan 'a1'. Kami melihat bahwa kedua file tidak dapat dibedakan. Lihatlah entri kedua di output. Entri ini menentukan jumlah tautan keras ke file. Dalam hal ini entri memiliki nilai '2' untuk kedua file.
Perhatikan bahwa tautan keras tidak dapat dibuat pada sistem file yang berbeda dan juga tidak dapat dibuat untuk direktori.
Kapan Inode dibuat?
Seperti yang kita ketahui sekarang bahwa Inode adalah sebuah struktur data yang berisi informasi sebuah file. Karena struktur data menempati penyimpanan maka pertanyaan yang jelas muncul tentang kapan Inode dibuat dalam suatu sistem? Nah, ruang untuk Inode dialokasikan ketika sistem operasi atau sistem file baru diinstal dan ketika melakukan penataan awal. Jadi dengan cara ini kita dapat melihat bahwa dalam sistem file, jumlah maksimum Inode dan karenanya jumlah file maksimum ditetapkan.
Nah, konsep di atas memunculkan fakta menarik lainnya. Sistem file dapat kehabisan ruang dalam dua cara :
- Tidak ada ruang untuk menambahkan data baru
- Semua Inode digunakan.
Nah, cara pertama cukup jelas tapi kita perlu melihat cara kedua. Ya, kemungkinan muncul kasus di mana kami memiliki ruang penyimpanan kosong tetapi kami masih tidak dapat menambahkan data baru apa pun di sistem file karena semua Inode dikonsumsi. Ini mungkin terjadi dalam kasus di mana sistem file berisi sejumlah besar file berukuran sangat kecil. Ini akan menghabiskan semua Inode dan meskipun akan ada ruang kosong dari sudut pandang Hard-disk-drive tetapi dari sudut pandang sistem file, tidak ada Inode yang tersedia untuk menyimpan file baru.
Kasus penggunaan di atas dimungkinkan tetapi jarang ditemui karena pada sistem tipikal ukuran file rata-rata lebih dari 2KB yang membuatnya lebih rentan kehabisan ruang hard disk terlebih dahulu. Namun demikian, ada algoritma yang digunakan untuk membuat sejumlah Inode dalam sistem file. Algoritma ini mempertimbangkan ukuran sistem file dan ukuran file rata-rata. Pengguna dapat mengubah jumlah Inode saat membuat sistem file.
Perintah untuk mengakses nomor Inode
Berikut adalah beberapa perintah untuk mengakses nomor Inode untuk file :
1) Perintah Ls -i
Seperti yang telah kami jelaskan sebelumnya dalam artikel Perintah LS Unix kami:15 Contoh Praktis, flag -i digunakan untuk mencetak nomor Inode untuk setiap file.
$ ls -i 1448240 a 1441807 Desktop 1447344 mydata 1441813 Pictures 1442737 testfile 1448145 worm 1448240 a1 1441811 Documents 1442707 my_ls 1442445 practice 1442739 test.py 1447139 alpha 1441808 Downloads 1447278 my_ls_alpha.c 1441810 Public 1447099 Unsaved Document 1 1447478 article_function_pointer.txt 1575132 google 1447274 my_ls.c 1441809 Templates 1441814 Videos 1442390 chmodOctal.txt 1441812 Music 1442363 output.log 1448800 testdisk.log 1575133 vlc
Lihat bahwa nomor Inode untuk 'a' dan 'a1' sama dengan yang kita buat 'a1' sebagai tautan keras.
2) Perintah Df -i
Perintah df -i menampilkan informasi inode dari sistem file.
$ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 1875968 293264 1582704 16% / none 210613 764 209849 1% /dev none 213415 9 213406 1% /dev/shm none 213415 63 213352 1% /var/run none 213415 1 213414 1% /var/lock /dev/sda2 7643136 156663 7486473 3% /home
Bendera -i digunakan untuk menampilkan informasi Inode.
3) Perintah Stat
Perintah stat digunakan untuk menampilkan statistik file yang juga menampilkan nomor inode suatu file
$ stat a File: `a' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 805h/2053d Inode: 1448240 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 1000/himanshu) Gid: ( 1001/ family) Access: 2012-01-14 16:30:04.871719357 +0530 Modify: 2012-01-14 16:29:50.918267873 +0530 Change: 2012-01-14 16:30:03.858251514 +0530
Contoh Skenario Penggunaan nomor Inode
- Misalkan ada nama file dengan beberapa karakter khusus di dalamnya. Misalnya: “ab*
- Coba hapus secara normal menggunakan perintah rm, Anda tidak akan dapat menghapusnya.
- Namun menggunakan nomor inode file ini Anda dapat menghapusnya.
Mari kita lihat langkah-langkah ini dalam contoh ini :
1) Periksa apakah file tersebut ada:
$ ls -i 1448240 a 1447274 my_ls.c 1448240 a1 1442363 output.log 1448239 "ab* 1441813 Pictures 1447139 alpha
Jadi kami memiliki file dengan nama “ab* di direktori ini
2) Cobalah untuk menghapusnya secara normal:
$ rm "ab* > ^C $ rm "ab* > ^C $
Lihat bahwa saya mencoba beberapa kali untuk menghapus file tetapi tidak bisa.
3) Hapus file menggunakan nomor Inode:
Seperti yang telah kita bahas sebelumnya di artikel contoh perintah find kami, Anda dapat mencari file menggunakan nomor inode dan menghapusnya.
$ find . -inum 1448239 -exec rm -i {} \; rm: remove regular empty file `./"ab*'? y
$ ls -i 1448240 a 1447274 my_ls.c 1448240 a1 1442363 output.log 1447139 alpha 1441813 Pictures
Jadi kami menggunakan perintah find yang menentukan nomor Inode dari file yang perlu kami hapus. Filenya terhapus. Meskipun kita dapat menghapus file sebaliknya juga dengan menggunakan perintah rm \"ab* daripada menggunakan contoh perintah find yang rumit di atas, tetapi saya tetap menggunakannya untuk menunjukkan salah satu penggunaan nomor Inode untuk pengguna.