Avant d'explorer les techniques/approches de verrouillage d'un fichier texte sous un environnement de système d'exploitation Linux, nous devons d'abord comprendre la logique derrière le mécanisme de verrouillage de fichier de Linux.
Le mécanisme de verrouillage de fichiers de Linux restreint/contrôle l'accès aux fichiers entre plusieurs processus. Lorsqu'un fichier texte est verrouillé avec succès, un seul processus peut y accéder selon un calendrier spécifique.
Avant de continuer avec cet article, veuillez comprendre que le verrouillage des fichiers est très différent du cryptage des fichiers ou du contrôle d'accès aux fichiers où une phrase secrète ou un mot de passe est nécessaire pour contrôler l'accès des utilisateurs à vos fichiers.
Lorsqu'un fichier est verrouillé sous un environnement de système d'exploitation Linux, un événement d'exclusion mutuelle est créé dans lequel un seul processus peut y accéder à la fois.
Énoncé du problème
Le système d'exploitation Linux bloquera automatiquement toute tentative d'action d'écriture dirigée vers un fichier ouvert en cours d'écriture par un autre processus. Cependant, que se passe-t-il si vous souhaitez révoquer les autorisations de lecture et/ou d'écriture déjà invoquées par le premier processus qui a votre fichier ouvert et en mode écriture ? Existe-t-il une solution à ce problème ?
De plus, nous pourrions également vouloir verrouiller notre fichier afin qu'aucun autre processus n'interfère ou ne tente de perturber l'état du mode d'écriture déjà lancé. Cet article nous guidera à travers une solution viable pour verrouiller un fichier texte sous Linux.
Exemple de fichier de référence
Pour que ce didacticiel soit plus engageant et utile, nous devrions avoir des fichiers texte de référence. Nous nous concentrerons sur les fichiers texte à l'intérieur du répertoire suivant :
Par exemple, ouvrons le fichier output.txt et commencez à écrire dessus.
$ sudo nano output.txt
Pendant que ce fichier est encore ouvert, essayons de l'ouvrir à partir d'un autre onglet de ligne de commande.
$ sudo nano output.txt
Vous obtiendrez la réponse suivante :
La capture d'écran ci-dessus relaie le PID (133110 ) du processus de travail sur le fichier texte avec la possibilité d'ouvrir le fichier alors qu'il est encore en mode écriture de ce processus.
En saisissant Y
à partir de notre clavier, nous aurons ouvert ce fichier texte et l'avons remis à un autre processus avec un accès exclusif en mode écriture.
Par conséquent, une modification de fichier par l'utilisateur 1 conduira à l'invite suivante sur l'utilisateur 2 lors de la tentative d'enregistrement du fichier.
Cette instance est une représentation parfaite de deux utilisateurs différents sur le réseau travaillant sur un seul fichier.
Verrouiller un fichier texte à l'aide de l'utilitaire flock de Linux
Pour résoudre ce problème, nous avons besoin de l'aide du flock de Linux utilitaire. Depuis util-linux le paquet héberge flock commande, il devrait être disponible dans presque toutes les distributions de système d'exploitation Linux. Cette commande gère les verrous de fichiers/répertoires spécifiques via l'environnement de ligne de commande Linux.
Pour verrouiller un fichier texte sous Linux, nous ferons référence à la syntaxe suivante :
$ flock -x PATH_TO_FILE_TO_LOCK -c COMMAND
Le -x
L'option permet d'obtenir un verrou en écriture sur le fichier ciblé. Essayons de verrouiller l'exemple output.txt fichier texte. Le -c
L'option nous permettra de passer une seule commande prise en charge par Linux, par exemple. commande chat .
$ flock -x /home/dnyce/LinuxShellTips_Files/output.txt -c cat
L'instance de terminal ci-dessus restera active pour signifier que le fichier texte a été verrouillé.
Si nous ouvrons un autre terminal (alors que cette instance de terminal est toujours en cours d'exécution) et exécutons un autre floc commande sur ce même fichier, on devrait nous en refuser l'accès.
$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $? 1
Le -w
l'option est utilisée pour relayer le temps d'attente de .007 secondes avant qu'un verrou ne soit placé sur le fichier texte. Nous exécutons ensuite echo $?
pour afficher l'état de sortie de cette commande.
Un statut de sortie de 0 implique que la commande a été exécutée avec succès et un état de sortie de 1 implique que la commande n'a pas pu être exécutée en raison d'une erreur. Dans ce cas, le fichier texte est verrouillé par un autre processus.
Pour confirmer davantage que le fichier texte est verrouillé, nous pouvons utiliser le lslocks commandes pour répertorier tous les verrous du système local actifs.
$ lslocks
Comme vous pouvez le voir, notre fichier est présent.
Déverrouiller un fichier texte sous Linux
Annulation du floc initial commande (Ctrl+c)
ou la fermeture du fichier texte devrait libérer le verrou permettant d'exécuter avec succès la commande suivante sur le terminal secondaire.
$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?
Le statut de sortie de 0 implique que le verrou n'est plus applicable au fichier texte.
Nous avons appris à verrouiller un fichier texte sous Linux afin qu'un seul processus puisse l'utiliser (mode écriture) à la fois. La mise en œuvre de cet article est particulièrement utile lorsque différents utilisateurs sur un réseau accèdent à un seul fichier.
En savoir plus sur le floc La commande peut être trouvée sur sa page de manuel.
$ man flock