Intereting Posts
Добавить аудио в видеофайл без кодирования, а также синхронизировать аудио FPS с видео FPS `$ XAUTHORITY` появляется из 'нигде' на su + tmux Как я могу переместить мой / загрузочный раздел? Попытка использования OpenCL с Nvidia в Arch Linux сравнить два файла, получить идентичный список Создать файл с использованием шаблона в абсолютном пути Как определить, какой процесс заполнил дисковое пространство Как удалить файлы, если числовая часть их имени больше заданного числа? Как настроить Syslinux для загрузки изображений ядра с другого раздела или диска? Centos 7: network.service не удалось запустить, потому что systemd запускает демона слишком рано boots из usb, но использует внутренний hd как sda1 Тонкая настройка для производительности Инструмент для считывания перфорации Как процессы конечного пользователя, среда рабочего стола и менеджер окон взаимодействуют друг с другом? Как отображать метаинформацию для разных видов времени файла?

Использовать псевдоним после выдачи команды 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 -) заставило бы меня root при использовании моего личного .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 

Ну, как вы уже заметили, это не так. В записи manpage говорится: «sudo – выполнить команду как другого пользователя», что означает, что переменные псевдонимов и bash будут соответственно изменяться. И когда вы делаете «sudo ll», система замечает, что пользовательский корень ничего не знает о ll.

Если вы хотите, чтобы ваши псевдонимы были доступны как root, вы можете либо скопировать определения в файл профиля корней, либо создать отдельный файл псевдонимов и включить его с помощью команды source. (Можно включить сам файл профиля пользователя, но в нем могут быть некоторые строки, которые не должны быть приняты 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 

и вы также можете добавить условную логику только для этого, если имя пользователя совпадает с корнем или тем, которое вы хотите.

Это легко можно «исправить» частично для вашего случая использования, если вы только запускаете 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, так как у вас нет ~/.bashrc и ~/.bash_history в вашем отрывке 5 лет. Если вы используете bash, вам нужно адаптироваться. )

Если вы хотите добавить псевдоним для одного конкретного пользователя, и если вы используете оболочку по умолчанию, которая является ksh, а не bash, тогда ~/.kshrc псевдонимы в файл ~/.kshrc этого пользователя, а не в ~ / .bashrc.

Вы также можете настроить sudo, чтобы сохранить среду своего пользователя, проверьте, например, сохраняйте псевдонимы, когда я использую sudo bash для деталей.

Или, если команды и псевдонимы должны быть доступны для всех пользователей, вы также можете добавить их в / etc / environment .

Если вы хотите иметь возможность выполнять псевдонимы другого пользователя как root без необходимости выполнять какую-либо дополнительную работу (например, копирование описаний псевдонимов в файл профиля root, преобразование псевдонимов пользователя в сценарии оболочки), вы можете извлечь команду alias и pipe это к оболочке.

Пример:

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

Или вы можете использовать мою общую функцию «run-as»:

 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 }