Linux 在调用ls时,如何编辑fs/readdir.c中的readdir函数以过滤掉特定文件?
有人能告诉我在下面代码的哪一部分中存在关于目录中所有文件的信息吗?当ls试图列出目录中的所有文件时,我试图过滤掉一些要隐藏的文件Linux 在调用ls时,如何编辑fs/readdir.c中的readdir函数以过滤掉特定文件?,linux,kernel,ls,readdir,Linux,Kernel,Ls,Readdir,有人能告诉我在下面代码的哪一部分中存在关于目录中所有文件的信息吗?当ls试图列出目录中的所有文件时,我试图过滤掉一些要隐藏的文件 int vfs_readdir(struct file *file, filldir_t filler, void *buf) { struct inode *inode = file->f_path.dentry->d_inode; int res = -ENOTDIR; if (!file->f_op ||
int vfs_readdir(struct file *file, filldir_t filler, void *buf)
{
struct inode *inode = file->f_path.dentry->d_inode;
int res = -ENOTDIR;
if (!file->f_op || !file->f_op->readdir)
goto out;
res = security_file_permission(file, MAY_READ);
if (res)
goto out;
res = mutex_lock_killable(&inode->i_mutex);
if (res)
goto out;
res = -ENOENT;
if (!IS_DEADDIR(inode)) {
res = file->f_op->readdir(file, buf, filler);
file_accessed(file);
}
mutex_unlock(&inode->i_mutex);
out:
return res;
}
这真的是你想做的吗?您将创建一个VFS不一致的系统,这里是龙!既然您可以控制内核,那么您也可以控制您发布的
ls
的版本。在用户空间中实现它对我来说似乎是一个更好的主意。也就是说,最好的解决方案是将这些文件放在用户没有权限列出的目录中(即没有x
权限)。有什么原因不能这样做吗?我实现的任何机制都必须在VFS层,而不是用户层。我知道如何操作ls,这样就可以隐藏特定的目录,但是如果不隐藏目录本身,我就无法隐藏目录中的文件。有人能告诉我目录中的文件是如何传递给ls命令的吗?如果删除目录上的x标志,但保留父目录上的x权限,则文件夹将可见,但其内容不可见。