使用python写一个程序,用来记录文件服务器上指定路径下对文件的增,删,要求记录操作时间,所操作的文件, 操作人(注意,不是运行程序的当前用户)
时间: 2024-05-02 16:18:25 浏览: 10
这个问题需要结合具体的文件服务器类型和操作系统来实现,因为不同的文件服务器和操作系统可能有不同的方式来记录文件的增删改操作和操作人。
以下是一个基于Linux操作系统和inotify工具的示例程序,可以实现对指定路径下文件的增删改事件的监听和记录,并记录操作时间和操作人。
```python
import os
import time
import sys
import subprocess
def get_user_name(uid):
"""根据用户ID获取用户名"""
try:
return subprocess.check_output(['getent', 'passwd', str(uid)]).decode().strip().split(':')[0]
except:
return 'unknown'
def record_event(event, path):
"""记录文件事件"""
timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
uid = os.getuid()
username = get_user_name(uid)
log = f'{timestamp} {event} {path} by {username}'
print(log)
with open('file_events.log', 'a') as f:
f.write(log + '\n')
def main():
# 监听的目录路径
path = '/path/to/monitor'
# 创建inotify实例
fd = os.inotify_init()
# 添加监视器并设置事件类型
wd = os.inotify_add_watch(fd, path,
flags=(os.IN_CREATE | os.IN_DELETE | os.IN_MODIFY))
# 监听事件循环
while True:
# 读取事件并解析
events = os.read(fd, 1024)
for event in events:
event_code, _, _, _, filename = struct.unpack('IHHII{}s'.format(len(events)-16), event)
event_name = {
os.IN_CREATE: 'created',
os.IN_DELETE: 'deleted',
os.IN_MODIFY: 'modified'
}.get(event_code)
if event_name:
record_event(event_name, os.path.join(path, filename))
if __name__ == '__main__':
main()
```
该程序通过inotify工具来监听文件系统的变化事件,并调用record_event函数来记录事件信息。在record_event函数中,获取当前时间和当前用户的用户名,并将事件信息输出到控制台和一个名为file_events.log的日志文件中。
需要注意的是,在Linux系统中,文件操作所产生的事件都会包含操作人的用户ID,而不是用户名,因此需要通过getent命令来获取用户ID对应的用户名。在其他操作系统和文件服务器上,可能需要使用不同的方法来获取操作人信息。