GNU/Linux >> Linux Esercitazione >  >> Linux

Come bloccare un file di testo in Linux usando il comando flock

Prima di esplorare le tecniche/approcci per bloccare un file di testo in un ambiente del sistema operativo Linux, dovremmo prima comprendere la logica alla base del meccanismo di blocco dei file di Linux.

Il meccanismo di blocco dei file di Linux limita/controlla l'accesso ai file tra più processi. Quando un file di testo viene bloccato correttamente, solo un processo può accedervi in ​​base a una pianificazione temporale specifica.

Prima di procedere con questo articolo, tieni presente che il blocco dei file è molto diverso dalla crittografia dei file o dal controllo dell'accesso ai file in cui è necessaria una passphrase o una password per controllare l'accesso degli utenti ai tuoi file.

Quando un file è bloccato in un ambiente del sistema operativo Linux, viene creato un evento di mutua esclusione a cui solo un singolo processo può accedervi alla volta.

Dichiarazione del problema

Il sistema operativo Linux bloccherà automaticamente qualsiasi tentativo di azione di scrittura diretto a un file aperto su cui viene scritto da un altro processo. Tuttavia, cosa succede se si desidera revocare i permessi di lettura e/o scrittura già invocati dal primo processo che ha il file aperto e in modalità di scrittura? C'è una soluzione a questo problema?

Inoltre, potremmo anche voler bloccare il nostro file in modo che nessun altro processo interferisca o tenti di interrompere lo stato della modalità di scrittura già avviato. Questo articolo ci guiderà attraverso una soluzione praticabile per bloccare un file di testo in Linux.

File di riferimento di esempio

Affinché questo tutorial sia più coinvolgente e utile, dovremmo avere alcuni file di testo di riferimento. Ci concentreremo sui file di testo all'interno della seguente directory:

Ad esempio, apriamo il file output.txt e inizia a scriverci sopra.

$ sudo nano output.txt 

Mentre questo file è ancora aperto, proviamo ad aprirlo da un'altra scheda della riga di comando.

$ sudo nano output.txt 

Riceverai la seguente risposta:

L'acquisizione dello schermo precedente trasmette il PID (133110 ) del processo di lavoro sul file di testo con la possibilità di aprire il file mentre è ancora in modalità di scrittura di quel processo.

Digitando Y dalla nostra tastiera, avremo aperto questo file di testo e lo avremo consegnato a un processo diverso con accesso esclusivo alla modalità di scrittura.

Pertanto, una modifica del file da parte dell'utente 1 porterà alla seguente richiesta sull'utente 2 durante il tentativo di salvare il file.

Questa istanza è una rappresentazione perfetta di due diversi utenti sulla rete che lavorano su un singolo file.

Blocca un file di testo usando l'utility flock di Linux

Per risolvere questo problema, abbiamo bisogno dell'aiuto del gregge di Linux utilità. Dal momento che util-linux il pacchetto ospita gregge comando, dovrebbe essere disponibile in quasi tutte le distribuzioni del sistema operativo Linux. Questo comando gestisce specifici blocchi di file/directory tramite l'ambiente della riga di comando di Linux.

Per bloccare un file di testo in Linux, faremo riferimento alla seguente sintassi:

$ flock -x PATH_TO_FILE_TO_LOCK -c COMMAND 

Il -x l'opzione è per ottenere un blocco di scrittura sul file di destinazione. Proviamo a bloccare l'esempio output.txt file di testo. Il -c l'opzione ci consentirà di passare un singolo comando supportato da Linux, ad es. comando cat .

$ flock -x /home/dnyce/LinuxShellTips_Files/output.txt -c cat

L'istanza del terminale sopra rimarrà attiva per indicare che il file di testo è stato bloccato.

Se apriamo un altro terminale (mentre questa istanza di terminale è ancora in esecuzione) ed eseguiamo un altro flock comando su questo stesso file, ci dovrebbe essere negato l'accesso.

$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?

1

Il -w l'opzione viene utilizzata per trasmettere il tempo di attesa di .007 secondi prima che venga posizionato un blocco sul file di testo. Quindi eseguiamo echo $? per emettere lo stato di uscita di questo comando.

Uno stato di uscita di 0 implica che il comando è stato eseguito correttamente e uno stato di uscita di 1 implica che il comando non può essere eseguito a causa di un errore. In questo caso, il file di testo è bloccato da un altro processo.

Per confermare ulteriormente che il file di testo è bloccato, possiamo utilizzare lslocks comandi per elencare tutti i blocchi di sistema locali attivi.

$ lslocks

Come puoi vedere, il nostro file è presente.

Sbloccare un file di testo in Linux

Annullamento del gregge iniziale comando (Ctrl+c) oppure la chiusura del file di testo dovrebbe rilasciare il blocco consentendo di eseguire correttamente il seguente comando sul terminale secondario.

$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?

Lo stato di uscita di 0 implica che il blocco non è più applicabile al file di testo.

Abbiamo imparato come bloccare un file di testo in Linux in modo che solo un processo possa usarlo (modalità di scrittura) alla volta. L'implementazione di questo articolo è particolarmente utile quando diversi utenti su una rete accedono a un singolo file.

Altro su gregge comando può essere trovato nella sua pagina man.

$ man flock

Linux
  1. Come aggiungere testo alla fine del file in Linux

  2. Come salvare l'output dei comandi in un file in Linux

  3. Come scrivere testo sull'immagine usando il comando Linux

  4. Come riavviare Linux utilizzando la riga di comando

  5. Crea file utilizzando la riga di comando in Linux

Come usare il comando Tronca in Linux

Come salvare l'output dei comandi di Linux in un'immagine o in un file di testo

Come creare un file in Linux usando Cat Command

Come creare un file in Linux usando Terminal

Come stampare righe duplicate in un file di testo in Linux

Come mescolare le linee in un file in Linux