8

問題は、ユーザーが共有アカウントでファイルを開こうとしたかどうかを追跡したいということです。関連するファイルが実行時に開かれているかどうかを知るのに役立つ記録/手法を探しています。

ファイルが開いているかどうかを監視するスクリプトを作成し、開いている場合は特定の電子メール アドレスにアラートを送信したいと考えています。私が考えているファイルは通常のファイルです。

geditでファイルが開いているかどうかを確認するために使用しようとしlsof | grep filenameましたが、コマンドは何も返しません。

実際、私はペットプロジェクトのためにこれを試しているので、質問です。

4

4 に答える 4

6

ファイルが gedit のようなエディターに読み込まれたという事実は、そのファイルがまだ開いているという意味ではありません。ほとんどの場合、エディターはファイルを開き、その内容を読み取ってからファイルを閉じます。ファイルを編集したら、既存のファイルを上書きするか、別のファイルとして保存するかを選択できます。

于 2015-06-19T10:24:37.230 に答える
2

(他の回答に加えて)Linux固有のinotify(7)機能を使用できます。

固定ファイル パス (実際には特定の i ノード) を使用して、特定の 1 つ (またはいくつか) の特定のファイルを追跡する必要があることを理解しています。たとえば、いつ/var/run/foobarアクセスまたは変更されたかを追跡し、それが発生したときに何かを実行したい場合があります

特に、 incrond(8)をインストールして使用し、incrontab(5)を介して構成したい場合があります。

特定のファイル(NFS ファイル システムではなく、Ext4、BTRS などのネイティブ ローカル上)がアクセスまたは変更されたときにスクリプトを実行する場合は、 inotifyを使用するのがまさにその目的のために行われます。 incrond

PS。私の知る限り、inotifyNFSファイルシステムなどのリモートネットワークファイルではうまく機能しません(特に、別のNFSクライアントマシンがファイルを変更している場合)。

あなたが好きなファイルが何らかの形でソースファイルである場合、リビジョン管理システム ( gitなど) またはビルダーシステム ( GNU makeなど) に興味があるかもしれません。ある意味で、これらのツールはファイルの変更に関連しています。

特定のファイル システムをいくつかのFUSEファイル システムに配置し、独自のFUSEデーモンを作成することもできます。

ファイルにアクセスするプログラムを制限および変更できる場合は、 flock(2) 、 lockf(3) などのアドバイザリ ロックを使用することを勧めます

おそらく、ファイルにあるデータは何らかのデータベースにあるはずです(たとえば、 sqliteやPostGreSQLやMongoDBのような実際の DBMS ) 。ACIDプロパティは重要です....

ファイルシステムマウントオプションが重要になる場合があることに注意してください。

stat(1)コマンドを使用することをお勧めします。

実際のユースケースと動機を理解せずに、これ以上支援することは困難です。XY問題を避けるべきです

おそらく、ワークフローが間違っているため (複数のユーザー間でファイルを共有して書き込むことができる)、別の方法で全体的な問題に取り組む必要があります。ペットプロジェクトの場合、少なくともアドバイザリロックを使用し、独自のプログラム (おそらくsetuid ) を使用してのみ情報にアクセスして変更することをお勧めします(これには、... のような通常のエディターやコマンドは含まれません)。ただし、暗黙的なユースケースは、DBMS アプローチ (データベースに大量のデータを含める必要はなく、小さい可能性があります)、またはGDBM ライブラリのようなインデックス ロック ファイルの処理に適しているようです。flockgeditcat

POSIX システムと Linux では、複数のプロセスが同じファイルに同時にアクセス(さらには変更)できることに注意してください (ロックまたは同期を使用しない限り)。

Advanced Linux Programmingの本 (無料で入手可能) を読むと、より広い視野が得られます (ただし、本が書かれた後に登場したinotifyについては言及されていません)。

于 2015-06-19T13:14:47.503 に答える
0

を使用できますls -lrt。シェルでの最後の RW 操作が表示されます。次に、ファイルが開かれているかどうかを判断できます。正確なディレクトリにいることを確認してください。

于 2015-06-19T10:18:42.957 に答える