当特定用户登录 Linux 计算机时,会获取某些文件,例如 .bashrc、.bash_profile 等... 有时不同的 shell 意味着获取不同的文件。当然,用户可能设置了某些文件来获取他们自己的某些自定义文件。
我的问题:root/su 有没有办法确定任何给定用户登录时获取的每个文件的列表?
答案1
inotifywatch 可能会有所帮助。已打包在 inotify-tools 中。以被监视的主目录 files/dir 的用户身份使用,而不是 sudo,否则如果运行较新的 gnome,您将在 .gvfs 上收到错误。
inotify 只会告诉您哪些文件被访问/创建/修改/删除。
$ inotifywatch -r /home/username/.* /home/username/*
Establishing watches...
在另一个终端
$ cat /home/username/.bashrc
在 inotifywatch 终端中按 ctrl-c 结束
Finished establishing watches, now collecting statistics.
total access modify close_nowrite open filename
3 1 0 1 1 /home/username/.bashrc
根据您的具体请求,登录时访问的所有文件。
$ inotifywatch -r /home/username/.* /home/username/*
Establishing watches...
在另一个终端
$ sudo su
# login username
在 inotifywatch 终端中按 ctrl-c 结束
如果使用 gnome 或 kde 等 fat 桌面,您可能需要将 inotifywatch 重定向到某个文件。或者在 inotifywatch 终端中增加回滚。在 gnome 3 中,登录期间会访问数千个 homedir 文件。您可能希望排除目录或创建要监视的特定目录/文件列表。
答案2
您可以在每个点文件中添加额外的代码,例如:
.bashrc
if [ ! -z "$PS1" ]; then # Determine whether Bash is running interactively or not.
echo $(basename $BASH_SOURCE) loaded.
fi
.bash_profile
对于、.bash_aliases
、.profile
等也类似。
因此,当您登录时,您将看到加载了哪些文件以及确切的顺序。如果您不想在屏幕上打印任何内容(例如,对于用户),则将其登录到文件中。例如:
echo # $(basename $BASH_SOURCE) loaded for $USER. >> ~/.bash_history
您可以在我的点文件。
答案3
一种方法,但效率很低,就是启动计算机,让用户登录。然后使用 挂载驱动器,noatime
这样访问时间就不会再更新,然后使用 find 转储用户登录期间访问的文件列表。