GNU/Linux >> Belajar Linux >  >> Linux

2 Jenis Penguncian File Linux (Contoh Anjuran, Kunci Wajib)

Penguncian file adalah mekanisme yang memungkinkan hanya satu proses untuk mengakses file pada waktu tertentu. Dengan menggunakan mekanisme penguncian file, banyak proses dapat membaca/menulis satu file dengan cara yang lebih aman.

Dalam artikel ini kita akan menjelajahi berbagai jenis penguncian file Linux dan memahami perbedaannya menggunakan program contoh.

Kami akan mengambil contoh berikut untuk memahami mengapa penguncian file diperlukan.

  1. Proses “A” membuka dan membaca file yang berisi informasi terkait akun.
  2. Proses “B” juga membuka file dan membaca informasi di dalamnya.
  3. Sekarang Proses “A” mengubah saldo akun catatan dalam salinannya, dan menulisnya kembali ke file.
  4. Proses “B” yang tidak memiliki cara untuk mengetahui bahwa file tersebut diubah sejak terakhir kali dibaca, memiliki nilai asli yang basi. Ini kemudian mengubah saldo akun dari catatan yang sama, dan menulis kembali ke dalam file.
  5. Sekarang file hanya akan memiliki perubahan yang dilakukan dengan proses "B".

Untuk menghindari masalah seperti itu, penguncian digunakan untuk memastikan "serialisasi".

Berikut ini adalah dua jenis penguncian file Linux:

  1. Penguncian saran
  2. Penguncian wajib

1. Penguncian Saran

Penguncian penasihat membutuhkan kerja sama dari proses yang berpartisipasi. Misalkan proses "A" memperoleh kunci MENULIS, dan mulai menulis ke dalam file, dan proses "B", tanpa mencoba mendapatkan kunci, itu dapat membuka file dan menulis ke dalamnya. Di sini proses "B" adalah proses non-kooperatif. Jika proses "B", mencoba untuk mendapatkan kunci, maka itu berarti proses ini bekerja sama untuk memastikan "serialisasi".

Penguncian penasehat akan berhasil, hanya jika proses yang berpartisipasi bersifat kooperatif. Penguncian penasihat terkadang juga disebut sebagai penguncian "tidak diterapkan".

2. Penguncian Wajib

Penguncian wajib tidak memerlukan kerja sama dari proses yang berpartisipasi. Penguncian wajib menyebabkan kernel memeriksa setiap buka, baca, dan tulis untuk memverifikasi bahwa proses pemanggilan tidak melanggar kunci pada file yang diberikan. Informasi lebih lanjut tentang penguncian wajib dapat ditemukan di kernal.org

Untuk mengaktifkan penguncian wajib di Linux, Anda harus mengaktifkannya pada tingkat sistem file, dan juga pada file individual. Langkah-langkah yang harus diikuti adalah:

  1. Pasang sistem file dengan opsi “-o mand”
  2. Untuk lock_file, aktifkan bit set-group-ID dan matikan bit group-execute, untuk mengaktifkan penguncian wajib pada file tertentu. (Cara ini dipilih karena ketika Anda mematikan bit group-execute, set-group-ID tidak memiliki arti sebenarnya )

Contoh Penguncian File Linux

Untuk memahami cara kerjanya, buat program file_lock.c berikut:

#include <stdio.h>
#include <fcntl.h>

int main(int argc, char **argv) {
  if (argc > 1) {
    int fd = open(argv[1], O_WRONLY);
    if(fd == -1) {
      printf("Unable to open the file\n");
      exit(1);
    }
    static struct flock lock;

    lock.l_type = F_WRLCK;
    lock.l_start = 0;
    lock.l_whence = SEEK_SET;
    lock.l_len = 0;
    lock.l_pid = getpid();

    int ret = fcntl(fd, F_SETLKW, &lock);
    printf("Return value of fcntl:%d\n",ret);
    if(ret==0) {
      while (1) {
        scanf("%c", NULL);
      }
    }
  }
}

Kompilasi program menggunakan gcc.

# cc -o file_lock file_lock.c

Remount sistem file root dengan opsi "mand" menggunakan perintah mount seperti yang ditunjukkan di bawah ini. Ini akan mengaktifkan penguncian wajib di tingkat sistem file.

Catatan:Anda harus menjadi root untuk menjalankan perintah di bawah ini.

# mount -oremount,mand /

Buat 2 file bernama “advisory.txt” dan “mandatory.txt” di direktori tempat executable (file_lock) berada. Aktifkan Set-Group-ID dan nonaktifkan Group-Execute-Bit untuk “mandatory.txt” sebagai berikut

# touch advisory.txt
# touch mandatory.txt
# chmod g+s,g-x mandatory.txt

Uji Penguncian Saran: Sekarang jalankan contoh program dengan 'advisory.txt' sebagai argumen.

# ./file_lock advisory.txt

Program akan menunggu untuk mendapatkan masukan dari pengguna. Dari terminal lain, atau konsol, coba yang berikut

# ls >>advisory.txt

Pada contoh di atas, perintah ls akan menulis outputnya ke file advisory.txt. Meskipun kita memperoleh kunci tulis, masih ada proses lain ( Non Kerjasama ) yang dapat menulis ke dalam file. Ini disebut sebagai penguncian “Penasihat”.

Uji Penguncian Wajib: Sekali lagi jalankan contoh program dengan 'mandatory.txt' sebagai argumennya.

# ./file_lock mandatory.txt

Dari terminal atau konsol lain, coba yang berikut ini:

# ls >>mandatory.txt

Pada contoh di atas, perintah ls akan menunggu kunci dihapus sebelum menulis outputnya ke file wajib.txt. Ini masih merupakan proses non-kooperatif, tetapi penguncian dicapai dengan menggunakan penguncian wajib.


Linux
  1. Perintah mv di Linux:7 Contoh Penting

  2. File Contoh Perintah di Linux

  3. Contoh Perintah gunzip di Linux

  1. Contoh Perintah ekor Linux

  2. Contoh Perintah zcat di Linux

  3. sentuh Contoh Perintah di Linux

  1. ln Contoh Perintah di Linux

  2. Contoh Perintah gzip di Linux

  3. lebih banyak Contoh Perintah di Linux