sudo suコマンドを実行したら、エイリアスを使用してください。

sudo suコマンドを実行したら、エイリアスを使用してください。

私は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

答え1

はい、実際に別のアカウント(この場合はルート)にログインすると新しいセッションが作成され、設定はルートまたは.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

ユーザー名がルートまたは希望するユーザー名と一致する場合にのみこれを行うように条件付きロジックを追加することもできます。

答え2

まあ、あなたがすでに知っているように、それは本当ではありません。マンページのエントリには、「sudo - 別のユーザーとしてコマンドを実行する」と表示されます。これは、エイリアスとbash変数がそれに応じて変更されることを意味します。 「sudo ll」が実行されると、システムはrootユーザーがllについて何も知らないことを知ります。

別名をルートとして使用するには、定義をルート構成ファイルにコピーするか、別々の別名ファイルを作成してsourceコマンドを使用して含めます。 (ユーザープロファイル自体を含めることができますが、ルートによって選択されていないいくつかの行を含めることができます。)

答え3

.sudo some_commandこれはsudo suシェルが物事を評価する順序に基づいており、非常に簡潔です。
確認するhttps://askubuntu.com/a/22043/329633またはhttps://serverfault.com/questions/61321/how-to-pass-alias-through-sudoその sudo エイリアス~/.kshrc
(デフォルトのAIXシェルを使用していないため、デフォルトのAIXシェルを使用すると想定しており、抜粋は~/.bashrc5~/.bash_history年前です。bashを使用している場合はこれに適応する必要があります。)

特定のユーザーのエイリアスを追加してデフォルトのシェル(bashではなくksh)を使用する場合は、エイリアス~/.kshrcこのユーザーのファイル~/.bashrcに入る代わりに。

環境を維持するようにsudoを設定することもできます。たとえば、次のことを確認してください。sudo bashを使用するとエイリアスを保持もっと学ぶ。

または、すべてのユーザーがコマンドとエイリアスを使用できるようにする必要がある場合は、それを次に追加することもできます。/etc/環境

答え4

他のユーザーのエイリアスをrootとして実行するにはいいえ別の操作(エイリアス定義をルートの設定ファイルにコピーしたり、ユーザーのエイリアスをシェルスクリプトに変換)したりすることなく、エイリアスコマンドを抽出してシェルにパイプすることができます。

例:

sudo su - otheruser -s /bin/bash -c "alias ll | sed -E \"s/.+='(.+)'/\1/\" | bash"

あるいは、一般的な「実行」機能を使用することもできます。

runas() {
  if [ $# -eq 2 ]; then
    # Check if user exists
    id -u $1 > /dev/null 2>&1
    if [ $? -gt 0 ]; then
      echo "$FUNCNAME: no such user"
      return 1
    fi
    # Check if alias exists
    sudo su - $1 -s /bin/bash -c "alias $2" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
      # Alias is defined; execute $2 as alias
      sudo su - $1 -s /bin/bash -c "alias $2 | sed -E \"s/.+='(.+)'/\1/; s/'\\\'//g\" | bash"
    else
      # Alias is not defined; execute $2 as command
      sudo su - $1 -s /bin/bash -c "$2"
    fi
  else
    echo "Execute a command or alias as another user"
    echo "Usage: $FUNCNAME USER ALIAS"
    return 2
  fi
}

関連情報