Linuxオペレーティングシステム環境でテキストファイルをロックする手法/アプローチを検討する前に、まずLinuxのファイルロックメカニズムの背後にあるロジックを理解する必要があります。
Linuxのファイルロックメカニズムは、複数のプロセス間のファイルアクセスを制限/制御します。テキストファイルが正常にロックされると、特定のタイムスケジュールでアクセスできるプロセスは1つだけです。
この記事に進む前に、ファイルロックは、ファイルへのユーザーアクセスを制御するためにパスフレーズまたはパスワードが必要なファイル暗号化またはファイルアクセス制御とは大きく異なることを理解してください。
Linuxオペレーティングシステム環境でファイルがロックされると、一度に1つのプロセスのみがファイルにアクセスできる相互排除イベントが作成されます。
問題の説明
Linuxオペレーティングシステムは、別のプロセスによって書き込まれている開いているファイルに向けられた書き込みアクションの試行を自動的にブロックします。ただし、ファイルを開いて書き込みモードにしている最初のプロセスによってすでに呼び出されている読み取りおよび/または書き込み権限を取り消す場合はどうなりますか?この問題の回避策はありますか?
さらに、他のプロセスが干渉したり、すでに開始されている書き込みモードのステータスを中断しようとしたりしないように、ファイルをロックすることもできます。この記事では、Linuxでテキストファイルをロックするための実行可能なソリューションについて説明します。
サンプル参照ファイル
このチュートリアルをより魅力的で価値のあるものにするために、いくつかのリファレンステキストファイルが必要です。次のディレクトリ内のテキストファイルに集中します:
たとえば、ファイル output.txtを開きます。 書き始めます。
$ sudo nano output.txt
このファイルを開いたまま、別のコマンドラインタブから開いてみましょう。
$ sudo nano output.txt
次の応答が返されます:
上記のスクリーンキャプチャは、 PIDを中継します ( 133110 )テキストファイルを処理するプロセスで、ファイルがまだそのプロセスの書き込みモードにある間にファイルを開くオプションがあります。
Y
を入力する キーボードから、このテキストファイルを開き、排他的な書き込みモードアクセスを使用して別のプロセスに渡します。
したがって、ユーザーによるファイルの変更 1 ユーザー2に次のプロンプトが表示されます ファイルの保存を試みている間。
このインスタンスは、ネットワーク上の2人の異なるユーザーが1つのファイルで作業していることを完全に表しています。
Linuxのflockユーティリティを使用してテキストファイルをロックする
この問題を解決するには、Linuxの群れの助けが必要です。 効用。 util-linux以降 パッケージホスト群れ コマンドを実行すると、ほとんどすべてのLinuxOSディストリビューションで使用できるはずです。このコマンドは、Linuxコマンドライン環境を介して特定のファイル/ディレクトリロックを管理します。
Linuxでテキストファイルをロックするには、次の構文を参照します。
$ flock -x PATH_TO_FILE_TO_LOCK -c COMMAND
-x
オプションは、ターゲットファイルへの書き込みロックを取得するためのものです。サンプルのoutput.txtをロックしてみましょう テキストファイル。 -c
オプションを使用すると、Linuxでサポートされている単一のコマンドを渡すことができます。 catコマンド 。
$ flock -x /home/dnyce/LinuxShellTips_Files/output.txt -c cat
上記のターミナルインスタンスは、テキストファイルがロックされたことを示すためにアクティブなままになります。
(このターミナルインスタンスがまだ実行されている間に)別のターミナルを開いて、別の群れを実行した場合 この同じファイルに対してコマンドを実行すると、そのファイルへのアクセスが拒否されます。
$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $? 1
-w
オプションは、 .007の待機時間を中継するために使用されます テキストファイルにロックがかけられる数秒前。次に、echo $?
を実行します このコマンドの終了ステータスを出力します。
0の終了ステータス コマンドが正常に実行され、終了ステータスが 1であることを意味します エラーのためにコマンドを実行できなかったことを意味します。この場合、テキストファイルは別のプロセスによってロックされています。
テキストファイルがロックされていることをさらに確認するために、 lslocksを使用できます。 すべてのアクティブなローカルシステムロックを一覧表示するコマンド。
$ lslocks
ご覧のとおり、ファイルが存在します。
Linuxでのテキストファイルのロック解除
最初の群れをキャンセルする コマンド(Ctrl+c)
または、テキストファイルを閉じるとロックが解除され、セカンダリ端末で次のコマンドを正常に実行できるようになります。
$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?
0の終了ステータス ロックがテキストファイルに適用されなくなったことを意味します。
Linuxでテキストファイルをロックして、一度に1つのプロセスのみがテキストファイルを使用できるようにする方法(書き込みモード)を学習しました。この記事の実装は、ネットワーク上のさまざまなユーザーが1つのファイルにアクセスしている場合に特に役立ちます。
群れの詳細 コマンドはそのマニュアルページにあります。
$ man flock