Linux - 如何判断登录时获取了哪些文件?

Linux - 如何判断登录时获取了哪些文件?

当特定用户登录 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 转储用户登录期间访问的文件列表。

相关内容