저는 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을 사용할 때 루트 액세스 권한이 부여될 것이라는 인상을 받았습니다.
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"이 실행되면 시스템은 루트 사용자가 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
하고 ~/.bash_history
발췌한 내용은 5년 전입니다...bash를 사용하는 경우 이에 적응해야 합니다.)
특정 사용자에 대한 별칭을 추가하고 기본 셸(bash 대신 ksh)을 사용하는 경우 별칭을~/.kshrc
이 사용자의 파일~/.bashrc로 들어가는 대신.
사용자 환경을 보존하도록 sudo를 구성할 수도 있습니다. 예를 들어 다음을 확인하세요.sudo bash를 사용할 때 별칭 유지더 알아보기.
또는 명령과 별칭을 모든 사용자가 사용할 수 있어야 하는 경우 이를 다음에 추가할 수도 있습니다./etc/환경.
답변4
다른 사용자의 별칭을 루트로 실행하려면아니요추가 작업(예: 별칭 정의를 루트의 구성 파일에 복사, 사용자의 별칭을 셸 스크립트로 변환)을 수행할 필요 없이 별칭 명령을 추출하여 셸로 파이프할 수 있습니다.
예:
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
}