Сегодня я играл с псевдонимами и заметил, что псевдонимы, по-видимому, недоступны при использовании sudo
:
danny@kaon:~$ alias
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'
danny@kaon:~$ ll -d /
drwxr-xr-x 23 root root 4096 2011-01-06 20:29 //
danny@kaon:~$ sudo -i
root@kaon:~# ll -d /
drwxr-xr-x 23 root root 4096 2011-01-06 20:29 //
root@kaon:~# exit
logout
danny@kaon:~$ sudo ll -d /
sudo: ll: command not found
Есть ли причина, по которой вы не можете использовать псевдонимы во время использования sudo
?
/root/.bashrc
не читается при запуске команды через sudo.sudo -i
?Ответы:
Добавьте следующую строку в ваш
~/.bashrc
:Из руководства по bash :
(Акцент мой).
Bash проверяет только первое слово команды на наличие псевдонима, любые слова после этого не проверяются. Это означает, что в такой команде
sudo ll
толькоsudo
bash проверяет псевдоним только первое слово ( ) иll
игнорируется. Мы можем сказать bash проверить следующее слово после псевдонима (то естьsudo
), добавив пробел в конец значения псевдонима.источник
sudo -H ll
?Я написал функцию Bash для этого, что тени
sudo
.Он проверяет, есть ли у меня псевдоним для данной команды, и в этом случае запускает команду с псевдонимом вместо буквальной
sudo
.Вот моя функция в качестве одной строки:
Или красиво отформатирован:
Вы можете добавить его к своему
.bashrc
файлу, не забывайте получать его или перезапустить сеанс терминала, чтобы применить изменения.источник
Псевдонимы зависят от пользователя - их необходимо определить в
/root/.bashrc
источник
sudo -s
илиsudo -i
(и только если запустить сам по себе , чтобы получить корневую оболочку, а не сsudo -s command...
илиsudo -i command...
формами) илиsudo bash
илиsudo su
, или в ситуации , когда вы Я включил root-логины и таким образом получил root-оболочку. Когда пользователь без полномочий root запускаетсяsudo command...
из своей собственной оболочки, расширение псевдонима выполняется его собственной оболочкой без полномочий root.sudo
сам по себе псевдонимы не расширяет, поэтому применительно к ситуации, описанной в вопросе , этот ответ неверен.@Alvins ответ самый короткий. Без сомнения! :-)
Однако я думал о командной строке решения для выполнения не сглаженные команд в Судо , где нет необходимости заново
sudo
сalias
командой.Вот мое предложение для тех, кого это может заинтересовать:
Решение
пример
В случае
ll
командыобъяснение
если у вас есть псевдоним (например, :),
ll
командаtype -a
возвращает псевдоним:в этом случае
grep
вы выбираете текст между акцентом `и апострофом 'ls -l
И
xargs
выполняет выделенный текст вls -l
качестве параметраsudo
.Да, немного дольше, но полностью чистый ;-) Не нужно переопределять
sudo
псевдоним.источник
alias
встроенный, так как его вывод чище.alias ll
выходыalias ll='ls -ahlF'
.alias ll | sed "s/.*'\(.*\)'.*/\1/g" | xargs sudo
.sudo -i
выполняя сначала команду с псевдонимом, а выполняя ее немедленно. Наличие такой сложной команды побеждает это. Вы можете просто сделать первое, и быть намного быстрее.У меня есть еще одно приятное решение, которое добавляет немного доверия:
Используйте завершение bash для автоматической замены слов позади
sudo
их псевдонимами при нажатии клавиши Tab.Сохраните это как
/etc/bash_completion.d/sudo-alias.bashcomp
, и оно должно автоматически загружаться при запуске интерактивной оболочки:Затем войдите в новый терминал, и вам будет хорошо идти.
источник
compgen -a
sudo ll
), нажимаете [TAB ↹], и скрипт находитll
в списке назначений псевдонимов, вырезает то, что ему назначено, и вставляет его. (Таким образом, вы получите, напримерsudo ls -lahvF --color=auto --time-style=long-iso
.)У меня есть другое решение, в котором вам не нужно добавлять
sudo
в качестве псевдонима. Я использую Linux Mint 17.3, но он должен быть очень похож на Ubuntu.Когда вы являетесь пользователем root, он
.profile
запускается из своего домашнего каталога. Если вы не знаете, что такое домашний каталог в корневом каталоге, вы можете проверить с помощью:Как видите, дом
root
есть/root/
. Проверьте его содержимое:Там должен быть
.profile
файл. Откройте файл и добавьте следующие строки:По сути, этот bash-скрипт проверяет файл с именем
.bash_aliases
. Если файлы присутствуют, он выполняет файл.Сохраните
.profile
файл и создайте свои псевдонимы в.bash_aliases
. Если у вас уже есть файл псевдонимов, скопируйте его в это местоПерезапустите терминал, и вы готовы!
источник
Ответ с лучшим ответом - отличный. Однако, если вы
sudo -i
наберете и повысите уровень приглашения sudo (#
), у вас не будет псевдонимов, которые вы хотели бы использовать.Чтобы использовать ваши псевдонимы (и все остальное) в
#
командной строке, используйте:Где «$ PWD» автоматически раскрывается в «/ home / YOUR_USER_NAME»
источник
@ WinEunuuchs2Unix:
$PWD
расширяется до «текущего рабочего каталога». Я думаю, что вы хотите$HOME
.Кроме того, в большинстве случаев, вероятно, лучше иметь отдельный корневой файл .bashrc. Фактически, я бы сделал его настоящим файлом
/root
, мягкой ссылкой на него в домашнем каталоге пользователя (например,.bashrc_root
) и получил его из.bashrc
файла пользователя . Если через некоторое время эта учетная запись привилегированного пользователя больше не будет присутствовать, корневой.bashrc
файл все еще будет доступен для других пользователей.источник