每当我尝试cd folder_name/
bash任何目录出现此错误:
-bash: cd: folder_name/: Permission denied
所有文件夹都具有执行权限,因此这似乎不是问题。例如,在Desktop/
输出上运行 stat:
File: 'Desktop/'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 807h/2055d Inode: 13107232 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/caffeine) Gid: ( 1000/caffeine)
Access: 2017-12-07 14:39:42.715820915 +0500
Modify: 2017-12-06 01:16:13.985722935 +0500
Change: 2017-12-06 01:16:13.985722935 +0500
Birth: -
其他一些可能相关的信息:
- 我可以毫无问题地读取或写入任何目录中的文件。
mkdir
执行正常,但无法cd
进入新文件夹。rmdir
正常执行。- 我可以通过导航到特定文件夹并从中打开终端来打开该文件夹中的终端。
那么有人能说出问题出在哪里吗?
提前致谢。
编辑:
type -a cd
显示以下输出:
cd is a function
cd ()
{
echo "-bash: cd: $1: Permission denied"
}
cd is a shell builtin
答案1
您可能是恶作剧的受害者,恶作剧者可能是您的同事或有权使用您机器的人。
正如您所看到的,Bash 函数可以隐藏原始的 shell 内置命令type -a cd
。它向您展示了它首先找到了可能在某处声明的函数。
cd is a function
cd ()
{
echo "-bash: cd: $1: Permission denied"
}
cd is a shell builtin
从此输出中,您可以看到有人在某个地方声明了一个名为的 shell 函数,cd
该函数现在遮蔽了 shell 内置命令cd
。在某些情况下,这样的操作可能有助于使命令更加通用或实现额外的功能,但在这种情况下,这样做是出于恶意(我猜)。这可能在系统的几个地方完成:
/etc/bash.bashrc
/etc/profile
- 中的任何文件
/etc/profile.d/
/etc/environment
~/.bashrc
~/.profile
~/.bash_aliases
- 执行或源自这些文件的任何其他文件
找到此问题的一种可能方法是grep
在/etc/
和中进行递归搜索/home/
:
grep -r 'bash: cd: $1: Permission denied' /home/*
sudo grep -r 'bash: cd: $1: Permission denied' /etc/*
这可能会产生如下输出:
$ grep -r 'bash: cd: $1: Permission denied' /home/*
/home/videonauth/.bashrc: echo "-bash: cd: $1: Permission denied"
~/.bashrc
在此示例中,您可以通过输出路径看到行或函数grep
。根据整个内容隐藏的程度,这可能会或可能不会产生结果。还有其他方法可以隐藏此类函数声明,但可能不那么容易找到。