我使用命令切换到不同的用户su
,现在我想创建一个文件/文件夹,但出现“权限被拒绝”错误。
safi_test4@safi-VirtualBox:/home/safi$ su safi_test4
Password:
safi_test4@safi-VirtualBox:/home/safi$ whoami
safi_test4
safi_test4@safi-VirtualBox:/home/safi$ mkdir try
mkdir: cannot create directory `try': Permission denied
safi_test4@safi-VirtualBox:/home/safi$
答案1
您切换到了新用户,但您仍然在用户safi
主目录下。safi_test4
没有权限在safi
主目录中创建文件。
运行以下命令,切换到safi_test4
主目录:
cd
答案2
你正在奔跑su safi_test4
,但你应该奔跑su safi
。
你的提示非常强烈地暗示你开始和你一样的用户su
:
safi_test4@safi-VirtualBox:/home/safi$
具体来说:
- 尽管也可以以其他方式进行设置,但通常当 shell 提示符以文本后跟一个
@
字符开始时,它在该字符之前显示的文本是当前用户的名称。 - 当提示符以 结尾
:
,后跟一些文本,再跟 时,和$
之间的文本通常代表当前目录。此外,名为 的目录很可能是名为 的用户的主目录。:
$
/home/safi
safi
这就是说,您似乎使用了cd
命令进入了 的主目录safi
,但随后您又使用了另一个su
命令来进入不是将您的身份更改为safi
。
假设设置了通常的权限,safi_test4
将无法在 的主目录中创建文件safi
。此外,您不太可能打算使用它su
来承担您已经拥有的身份。
要使用su
另一个用户的身份,您应该传递您想要的用户的名称变得作为 的参数su
,而不是您当前用户的名称:
su safi
不过,您也可以考虑使用此命令,它将以下列形式运行登录 shell safi
:
su - safi
执行此操作后,您将获得一个类似于通过其他方式(例如在虚拟控制台或通过 SSH)登录时获得的环境safi
。这还有一个额外的小好处,即您不必单独cd
进入safi
的主目录。
请注意,使用时su
必须输入目标用户的密码。也就是说,要su safi
成功,您必须输入safi
的密码,而不是safi_test4
的密码(除非它们恰好相同)。
答案3
作为mchid 答案您可以使用的状态:
cd
切换到当前用户的主目录safi_test4
。但是在我的系统上,由于某个函数的阻碍,它不起作用:
$ cd
cd: missing operand
Usage:
cd ~ Change to home directory. Equivelent to 'cd /home/$USER'
cd - Change to previous directory before last 'cd' command
cd .. Move up one directory level
cd ../.. Move up two directory levels
cd ../sibling Move up one directory level and change to sibling directory
cd /path/to/ Change to specific directory '/path/to/' eg '/var/log'
cd $OLDPWD Change back to previous directory (similar to "cd -").
在这种情况下,在我的系统上我必须始终输入:
cd ~
请注意,常规cd
命令也支持上面描述的用法。
cd
帮助屏幕
以下是我获取cd
帮助屏幕的方法,但请注意,有些人对此提出了批评。编辑您的代码~/.bashrc
并添加以下几行:
cd() {
if [[ $# -eq 0 ]] ; then
cat << 'EOF'
cd: missing operand
Usage:
cd ~ Change to home directory. Equivelent to 'cd /home/$USER'
cd - Change to previous directory before last 'cd' command
cd .. Move up one directory level
cd ../.. Move up two directory levels
cd ../sibling Move up one directory level and change to sibling directory
cd /path/to/ Change to specific directory '/path/to/' eg '/var/log'
cd $OLDPWD Change back to previous directory (similar to "cd -").
EOF
return
fi
builtin cd "$@"
} # cd ()