切换用户后创建目录的权限被拒绝

切换用户后创建目录的权限被拒绝

我使用命令切换到不同的用户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/safisafi

这就是说,您似乎使用了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 ()

相关内容