Sudo

發出 sudo su 命令後使用別名

  • April 13, 2017

我在 AIX 7.1 上。

我在我的個人 .profile 中定義了一堆別名。

alias df='df -k'
alias cl=clear
alias h=history
alias ll='ls -al'
alias lt='ls -latr'
alias ls='ls -Fa'
alias psj='ps -ef | grep java'

如果我發出“sudo su”或“sudo su other_user”命令,我將無法使用這些別名。我的印像是使用不帶’-‘的’sudo su’(sudo su -)會使我在使用我的個人.profile時成為root?

jg10371@asdepdm1: /home/jg10371
$ ll
total 88
drwx------    3 jg10371  unxusers       4096 May 29 09:21 ./
drwxr-xr-x  154 bin      bin           12288 May 29 09:35 ../
-rw-------    1 root     system          200 Jul 04 2010  .bash_history
-rw-r--r--    1 jg10371  unxusers       1943 May 29 09:35 .profile
-rw-------    1 jg10371  unxusers       6944 May 29 09:36 .sh_history
drwx------    2 jg10371  unxusers        256 May 28 11:06 .ssh/
-rw-------    1 jg10371  unxusers         44 May 28 12:21 .vas_disauthcc_9168
-rwx------    1 jg10371  unxusers         28 May 28 12:21 .vas_logon_server*
-rwx------    1 jg10371  unxusers         18 Mar 28 18:06 .vi_history*
jg10371@asdepdm1: /home/jg10371
$ sudo su
Password:
jg10371@asdepdm1: /home/jg10371
$ ll
ksh: ll:  not found.
jg10371@asdepdm1: /home/jg10371

好吧,正如您已經註意到的那樣,事實並非如此。手冊頁條目顯示“sudo - 以另一個使用者身份執行命令”,這意味著別名和 bash 變數將相應更改。並且在執行“sudo ll”時,系統會注意到,使用者 root 對 ll 一無所知。

如果您希望您的別名可作為 root 使用,您可以將定義復製到 root 配置文件或創建一個單獨的別名文件並使用 source 命令包含它。(可以包含使用者配置文件本身,但其中可能有一些不應被 root 採用的行。)

是的,實際上登錄到不同的帳戶(在這種情況下為 root)將創建一個新會話,並且設置將來自 root.bashrc.kshrc文件。您可以在以下內容中看到這一點:

$ alias
$ ... output has over 100 aliases
$ sudo su
[sudo] password for durrantm: 
root@Castle2012:/tmp/user/1000/x# alias  # <- Only 7 aliases now!
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
root@Castle2012:/tmp/user/1000/x# cat ~/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
...
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
   test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
   alias ls='ls --color=auto'
   #alias dir='dir --color=auto'
   #alias vdir='vdir --color=auto'

   alias grep='grep --color=auto'
   alias fgrep='fgrep --color=auto'
   alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
...

root@Castle2012:/tmp/user/1000/x# 

但是,您可以使用 sudo -E導出您的環境 - 僅用於該會話。

您可以通過將別名定義放在

/etc/bash.bashrc  # (You'll need to edit it with sudo!)
# /etc/profile for ksh

並且您還可以添加條件邏輯以僅在使用者名與 root 或您想要的使用者匹配時執行此操作。

引用自:https://unix.stackexchange.com/questions/206325