Linux命令之——su


LINUX.jpg

命令功能

字面意思,运行一个带有替换用户和组ID的命令,可以理解为切换用户。

使用格式

 su [options...] [-] [user [args...]]

常用选项

        --c command, --command=command: 通过-c选项将命令传给shell
         --session-command=command: 和-c类似,但是不会创建新的会话
        -f, --fast: 将-f选项传给shell,能否有用取决于shell
        -g, --group=group: 指定主组,这个选项值允许root用户使用
        -G, --supp-group=group: 指定追加一个组,该选项只允许root用户使用。
        如果没有指定主组,那么第一个追加的组通常被作为主组
        -, -l, --login: 以类似真实登录环境启动一个shell,作为登录shell。(切换用户)
            1.  清除除了TERM(术语)以外的所有环境变量
            2. 重置HOME,SHELL, USER, LOGNAME, PATH等环境变量
            3. 更改了用户家目录
            4. 将shell的argv [0]设置为' - ',以使shell成为登录shell
        -m, -p, --preserve-environment: 保留所有环境变量。如果通过--option指定,则该选项可以忽略。
        -s SHELL, --shell=SHELL: 运行指定的shell代替默认的shell。这个shell是依据下列规则指定的:
            1. 通过--shell选项指定
            2. 如果使用--preserve-environment选项,则在环境变量SHELL中指定shell
            3. shell是在目标用户的口令 条目中列出的shell
            4. /bin/sh

应用实例

  1. su LOGINNAME
[root@centos7 ~]#su test
[test@centos7 root]$pwd
/root
[test@centos7 root]$echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:`/root/bin`
  1. su - LOGINNAME
[root@centos7 ~]#su - test
Last login: Thu Aug 16 21:39:52 EDT 2018 on pts/1
[test@centos7 ~]$pwd
/home/test
[test@centos7 ~]$echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/test/.local/bin:`/home/test/bin`

su - LOGINNAME -c COMMAND
or
su -LOGINNAME --command=COMMAND

[test@centos7 ~]$su - -c 'useradd testuser'
Password: 
[test@centos7 ~]$id testuser
uid=1002(testuser) gid=1002(testuser) groups=1002(testuser
[test@centos7 ~]$tail /etc/passwd
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
clown:x:1000:1000:clown:/home/clown:/bin/bash
test:x:1001:1001::/home/test:/bin/bash
testuser:x:1002:1002::/home/testuser:/bin/bas

重重点说明

  1. su 与 su -的区别

su: 不完全切换,保留原来的工作环境
su -: 完全切换。改变用户,且改变用户的工作环境。包括HOME,SHELL, USER, LOGNAME, PATH等

你可能感兴趣的:(Linux命令之——su)