私は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シェルを使用すると想定しており、抜粋は~/.bashrc
5~/.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
}