当一个特定的用户login到一台Linux机器上时,某些文件可能来源于,例如.bashrc,.bash_profile等。有时,不同的shell意味着不同的文件来源。 当然用户可能有一些设置来源自己的某些自定义文件。
我的问题:有没有一种方法让root / su确定每个给定用户login的文件的列表?
inotifywatch可能会有所帮助。 打包inotify工具。 用作家庭目录的文件/目录的用户,而不是sudo,否则,如果运行更新的gnome,则会在.gvfs上发生错误。
inotify只会告诉你哪些文件被访问/创build/修改/删除。
$ inotifywatch -r /home/username/.* /home/username/* Establishing watches...
在另一个terminal
$ cat /home/username/.bashrc
inotifywatchterminalctrl-c结束
Finished establishing watches, now collecting statistics. total access modify close_nowrite open filename 3 1 0 1 1 /home/username/.bashrc
对于您的具体请求,在login期间访问的所有文件。
$ inotifywatch -r /home/username/.* /home/username/* Establishing watches...
在另一个terminal
$ sudo su # login username
inotifywatchterminalctrl-c结束
如果使用象gnome或kde这样的胖桌面,你可能想将inotifywatchredirect到一个文件。 或者增加inotifywatchterminal的回滚。 在gnome 3中,login过程中访问了数千个homedir文件。 您可能要排除目录或制作特定的目录/文件列表来观看。
其中一种方法,效率不高,就是启动电脑,让用户login。 然后用noatime挂载驱动器,以便访问时间不再更新,然后使用find命令转储在用户login的时间段内访问的文件列表。
您可以将其他代码添加到每个点文件中,例如:
的.bashrc
if [ ! -z "$PS1" ]; then # Determine whether Bash is running interactively or not. echo $(basename $BASH_SOURCE) loaded. fi
和.bash_profile , .bash_aliases , .profile等类似。
所以当你login时,你会看到哪些文件被加载,什么是确切的顺序。 如果您不想在屏幕上打印任何内容(例如用户),请将其login到文件中。 例如:
echo # $(basename $BASH_SOURCE) loaded for $USER. >> ~/.bash_history
你可以检查我的点文件中的上述解决scheme。