• Linux 命令 su 和 sudo 的区别


    su 命令介绍及主要用法

    首先需要解释下 su 代表什么意思。
    su 是表示 「switch user」「切换用户」

    su 的一般使用方法是:

    su  <user_name>
    
    • 1
    su - <user_name>
    
    • 1
    su - -c "指令串"  # 以 root 的方式执行 "指令串"
    
    • 1
    [zhangsan@localhost root]$ su - -c "tail -n 10 /etc/passwd"
    密码:   #输入 root 用户密码
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    zhangsan:x:1000:1001::/home/zhangsan:/bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    两种方法只差了一个字符 -,会有比较大的差异:

    如果加入了 - 参数,那么是一种 login-shell 的方式,意思是说切换到另一个用户 之后,当前的 shell 会加载 对应的环境变量和各种设置;

    如果没有加入 - 参数,那么是一种 non-login-shell 的方式,意思是说我现在切换到了 ,但是当前的 shell 还是加载切换之前的那个用户的环境变量以及各种设置

    sudo命令介绍及主要用法

    sudo 的英文全称是 super user do,即以超级用户(root 用户)的方式执行命令。这里的 sudo 和之前 su 表示的 switch user 是不同的

    • 主要用法

    我们在 Linux 中经常会碰到 Permission denied 这种情况,比如以 zhangsan 用户的身份查看 /etc/shadow 的内容。因为这个文件的内容是只有 root 用户能查看的

    [zhangsan@localhost root]$ tail -n 3 /etc/shadow
    tail: 无法打开"/etc/shadow" 读取数据: 权限不够
    [zhangsan@localhost root]$ sudo !!
    sudo tail -n 3 /etc/shadow
    [sudo] zhangsan 的密码:
    ntp:!!:19104::::::
    tcpdump:!!:19104::::::
    zhangsan:$6$WxrcPCRU$x/jWGSH0pcF1K/IytsUPbW29cvX2PXetcnXAR15Zl1NhoCt5EYcs2tAlb/z.1K.L6ltdG7jCSJ5jBicAuumSP/:19244:0:99999:7:::
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ps:实例中,我们使用了 sudo !! 这个小技巧,表示重复上面输入的命令,只不过在命令最前面加上 sudo

    因为我已经设置了 sudo 命令不需要输入密码,所以这里 sudo !! 就能直接输出内容。如果没有设置的话,需要输入当前这个用户的密码,例如本例中,我就应该输入 ubuntu 用户的登录密码。

    两次相邻的 sudo 操作,如果间隔在 5min 之内,第二次输入 sudo 不需要重新输入密码;如果超过 5min,那么再输入 sudo 时,又需要输入密码。所以一个比较省事的方法是设置 sudo 操作不需要密码。

    • 切换到 root 用户
    sudo su -
    
    • 1

    这种方式也能以 login-shell 的方式切换到 root 用户,但是它和 su - 方法是由区别的:
    前者输入 sudo su - 后,需要提供当前用户的登录密码,也就是 ubuntu 用户的密码;
    后者输入 su - 后,需要提供 root 用户的登录密码。

    sudo -i
    
    • 1

    这个命令和 sudo su - 效果一致,也是切换到 root 用户,也是需要提供当前用户的登录密码。

    一个用户能否使用 sudo 命令,取决于 /etc/sudoers 文件的设置。
    从上面查看/etc/shadow中我们已经看到,zhangsan用户可以正常使用 sudo ,这是因为 /etc/sudoers 文件里已经配置 zhangsan ALL=(ALL) ALL

    /etc/sudoers 也是一个文本文件,但是因其有特定的语法,我们不要直接用 vim 或者 vi 来编辑它,需要用 visudo 这个命令。输入这个命令之后就能直接编辑 /etc/sudoers 这个文件了。
    需要说明的是,只有 root 用户有权限使用 visudo 命令。

    二者的差异对比
    • 使用 su - ,提供 root 账户的密码,可以切换到 root 用户;

    • 使用 sudo su - ,提供当前用户密码,也可以切换到 root 用户

  • 相关阅读:
    FL Studio2024重磅更新 包含FL水果21.1破解版安装包下载
    Windows Nginx 服务器部署(保姆级)
    【javaEE初阶】文件操作和IO
    基于SSM微信小程序的邢台市域直通公交毕业设计-附源码211514
    学校网页设计成品 基于HTML+CSS+JavaScript仿山东财经大学官网 学校班级网页制作模板 校园网页设计成品
    百度SEO工具,自动更新网站的工具
    流量再利用!佳信客服准备的企微拉新复购攻略来袭!
    我们正在经历一场机器身份危机
    ERP是什么?
    使用软路由(openWrt)安装openVPN搭建局域网连接
  • 原文地址:https://blog.csdn.net/weixin_43824520/article/details/126773837