Псевдонимы, недоступные при использовании sudo

Похоже, у вас есть файл, который вам нужен для доступа, но только после того, как пароль его разблокировал, правильно?

Если это так, я настоятельно рекомендую вам взглянуть на использование TrueCrypt - http: / /www.truecrypt.org/. Вы можете установить его как в Windows, так и в Ubuntu и использовать один и тот же пароль для разблокировки одного и того же файла в любой системе.

Единственным недостатком вашей ситуации является то, что вы конкретно указываете «защиту паролей файлов», но TrueCrypt создает том с зашифрованным содержимым внутри тома.

134
задан 18 January 2011 в 03:02

127 ответов

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

195
ответ дан 25 May 2018 в 23:25
  • 1
    Довольно приятное решение. – ulidtko 18 January 2011 в 03:23
  • 2
    Итак, в основном проблема сводится к тому, что sudo просто запрограммирован таким образом, что он не проверяет псевдонимы, поэтому ll не найден? – kemra102 19 January 2011 в 00:55
  • 3
    @DannyRoberts Смотрите мой обновленный ответ. – Isaiah 22 January 2011 в 08:55
  • 4
    Чтение документации, очевидно, принесет много пользы :-) – biocyberman 11 February 2016 в 00:48
  • 5
    Будет ли это нарушено, если я использую флаг sudo, например. [F1]? – Mark E. Haase 9 April 2016 в 08:19

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

204
ответ дан 25 July 2018 в 22:36

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

204
ответ дан 26 July 2018 в 22:58

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

204
ответ дан 26 July 2018 в 22:58

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 31 July 2018 в 09:43

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 31 July 2018 в 09:45

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 31 July 2018 в 10:01

добавьте следующую строку в ваш ~/.bashrc:

alias sudo='sudo '

от руководство bash:

псевдонимы позволяют строка, которая будет заменена на слово, когда оно используется в качестве первого слова простой команды. Оболочка поддерживает список псевдонимов, которые могут быть включен и выключен с псевдонимом и встроенные команды unalias. Первое слово каждой простой команды, если без кавычек, проверяется, чтобы увидеть, если он имеет псевдоним. Если это так, то слово заменяется в тексте псевдоним. Персонажи‘/’, ‘$’, ‘’, ‘=’ и любой из метасимволов оболочки или цитирование символов, перечисленных выше, не может появиться в псевдоним. Текст замены может содержать любое допустимое входное оболочки, включая метасимволы Shell. Первое слово текста замены, который проверяется на псевдонимы, но слово, которое идентично псевдоним был расширен, не расширен второй раз. Это означает, что можно псевдоним LS выполнить "LS -Ф", например, и Баш не пытается рекурсивно разверните текст замены. Если последний символ значения псевдоним-это пробел или табуляция, то на следующее командное слово после псевдонима тоже проверено псевдоним расширения.

(выделено мной). Баш проверяет только первое слово команды для псевдонима, ни слова после этого не проверил. Это означает, что в команду sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать баш на проверить следующее слово после псевдонима (я.е sudo) путем добавления пробела в конце значения псевдоним.

205
ответ дан 31 July 2018 в 10:24

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 31 July 2018 в 10:54

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 31 July 2018 в 11:27

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 31 July 2018 в 14:08

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 2 August 2018 в 04:02

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 4 August 2018 в 20:06

добавьте следующую строку в ваш ~/.bashrc:

alias sudo='sudo '

от руководство bash:

псевдонимы позволяют строка, которая будет заменена на слово, когда оно используется в качестве первого слова простой команды. Оболочка поддерживает список псевдонимов, которые могут быть включен и выключен с псевдонимом и встроенные команды unalias. Первое слово каждой простой команды, если без кавычек, проверяется, чтобы увидеть, если он имеет псевдоним. Если это так, то слово заменяется в тексте псевдоним. Персонажи‘/’, ‘$’, ‘’, ‘=’ и любой из метасимволов оболочки или цитирование символов, перечисленных выше, не может появиться в псевдоним. Текст замены может содержать любое допустимое входное оболочки, включая метасимволы Shell. Первое слово текста замены, который проверяется на псевдонимы, но слово, которое идентично псевдоним был расширен, не расширен второй раз. Это означает, что можно псевдоним LS выполнить "LS -Ф", например, и Баш не пытается рекурсивно разверните текст замены. Если последний символ значения псевдоним-это пробел или табуляция, то на следующее командное слово после псевдонима тоже проверено псевдоним расширения.

(выделено мной). Баш проверяет только первое слово команды для псевдонима, ни слова после этого не проверил. Это означает, что в команду sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать баш на проверить следующее слово после псевдонима (я.е sudo) путем добавления пробела в конце значения псевдоним.

205
ответ дан 6 August 2018 в 04:06

Добавьте следующую строку в свой ~/.bashrc:

alias sudo='sudo '

Из руководства bash:

Псевдонимы позволяют заменить строку на слово, когда оно используется как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и не установлены с помощью команд alias и unalias builtin. Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll, только первое слово (sudo) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (i.e sudo), добавив пробел в конец значения псевдонима.

205
ответ дан 6 August 2018 в 04:07

Добавьте следующую строку к вашему ~ / .bashrc :

  alias sudo = 'sudo'  

Из bash manual :

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

Первое слово каждой простой команды, если оно не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll , только первое слово ( sudo ) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (например, sudo ), добавив пробел в конец значения псевдонима.

205
ответ дан 7 August 2018 в 22:06

Добавьте следующую строку к вашему ~ / .bashrc :

  alias sudo = 'sudo'  

Из bash manual :

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

Первое слово каждой простой команды, если оно не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll , только первое слово ( sudo ) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (например, sudo ), добавив пробел в конец значения псевдонима.

205
ответ дан 10 August 2018 в 10:21

Добавьте следующую строку к вашему ~ / .bashrc :

  alias sudo = 'sudo'  

Из bash manual :

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

Первое слово каждой простой команды, если оно не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Символы '/', '$', '`', '=' и любые метасимволы оболочки или цитируемые выше символы могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел или символ табуляции, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

(Акцент мой). Bash только проверяет первое слово команды для псевдонима, любые слова после этого не проверяются. Это означает, что в команде, подобной sudo ll , только первое слово ( sudo ) проверяется bash для псевдонима, ll игнорируется. Мы можем сказать bash, чтобы проверить следующее слово после псевдонима (например, sudo ), добавив пробел в конец значения псевдонима.

205
ответ дан 13 August 2018 в 16:45
  • 1
    Довольно приятное решение. – ulidtko 18 January 2011 в 03:23
  • 2
    Итак, в основном проблема сводится к тому, что sudo просто запрограммирован таким образом, что он не проверяет псевдонимы, поэтому ll не найден? – kemra102 19 January 2011 в 00:55
  • 3
    @DannyRoberts Смотрите мой обновленный ответ. – Isaiah 22 January 2011 в 08:55
  • 4
    Чтение документации, очевидно, принесет много пользы :-) – biocyberman 11 February 2016 в 00:48
  • 5
    Будет ли это нарушено, если я использую флаг sudo, например. sudo -H ll ? – Mark E. Haase 9 April 2016 в 08:19
Я написал функцию Bash для него, что тень sudo.

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

Вот моя функция, как однострочника

:

sudo() { if alias "$1" &> /dev/null ; then $(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}" ; else command sudo $@ ; fi }

Или красиво отформатирована:

sudo() { 
    if alias "$1" &> /dev/null ; then 
        $(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}"
    else 
        command sudo "$@"
    fi 
}

Вы можете добавить его в [f5

], не забудьте указать его или перезапустить сеанс терминала после этого, чтобы применить изменения.

5
ответ дан 25 May 2018 в 23:25

Псевдонимы специфичны для пользователя - вам нужно определить их в /root/.bashrc

4
ответ дан 25 May 2018 в 23:25
  • 1
    Они уже находятся под /root/.bashrc, так что это не проблема – kemra102 19 January 2011 в 00:55
  • 2
    Этот ответ был бы правильным только для ситуации, когда вы запускаете оболочку как root, как в случае с sudo -s или sudo -i (и только , если они запускаются сами по себе, чтобы получить корневую оболочку, не с формами sudo -s command... или sudo -i command...) или sudo bash или sudo su, или ситуация, когда вы включили учетные записи root и имеете корневую оболочку таким образом. Когда пользователь, не являющийся пользователем root, запускает sudo command... из своей собственной оболочки, расширение псевдонима выполняется их собственной оболочкой без полномочий root. sudo сам не расширяет псевдонимы, поэтому применительно к ситуации, описанной в вопросе , этот ответ неверен. – Eliah Kagan 17 September 2017 в 10:31

Ответ @Alvins является самым коротким. Без сомнений! : -)

Однако я подумал о решении командной строки для выполнения команды aliased в sudo, где нет необходимости переопределять sudo с помощью команды alias.

Здесь мое предложение для тех, кому это может быть интересно:

Решение

type -a <YOUR COMMAND HERE> | grep -o -P "(?<=\`).*(?=')" | xargs sudo

Пример

В случае команды ll

type -a ll | grep -o -P "(?<=\`).*(?=')" | xargs sudo

Объяснение

, когда у вас есть псевдоним (например: ll), команда type -a возвращает выражение с псевдонимом:

$type -a ll
ll is aliased to `ls -l'

с grep вы выбираете текст между акцентом `и апострофом 'в этом случае ls -l

И xargs выполняет выделенный текст ls -l как параметр sudo.

Да, немного дольше, но выполняет команду aliased в sudo ;-) Нет необходимости переопределять sudo как псевдоним.

3
ответ дан 25 May 2018 в 23:25
  • 1
    Может быть проще, если вы использовали встроенный модуль alias, так как его вывод чище. alias ll alias ll='ls -ahlF'. – muru 15 February 2015 в 23:41
  • 2
    Вот версия, включающая предложение @ muru: alias ll | sed "s/.*'\(.*\)'.*/\1/g" | xargs sudo. – ACK_stoverflow 27 July 2016 в 20:07
  • 3
    Я думаю, что исходный вопрос заключался в том, чтобы сохранить работу, не имея сначала sudo -i, чтобы запустить команду aliased, но сразу же это сделало. Такая сложная команда побеждает. Вы могли бы просто сделать первое, и быть намного быстрее. – Evi1M4chine 8 September 2017 в 18:13

У меня есть еще одно приятное решение, которое добавляет немного доверия:

Использовать завершение bash, чтобы автоматически заменить слова позади sudo своими псевдонимами при нажатии вкладки.

Сохранить это как /etc/bash_completion.d/sudo-alias.bashcomp, и он должен автоматически загружаться при запуске интерактивной оболочки:

_comp_sudo_alias() { from="$2"; COMPREPLY=()
  if [[ $COMP_CWORD == 1 ]]; then
    COMPREPLY=( "$( alias -p | grep "^ *alias $from=" | sed -r "s/^ *alias [^=]+='(.*)'$/\1/" )" )
    return 0
  fi
  return 1
}
complete -o bashdefault -o default -F _comp_sudo_alias sudo

Затем войдите в новый терминал, и вам должно быть хорошо идти.

1
ответ дан 25 May 2018 в 23:25
  • 1
    Есть способ получить список псевдонимов, специально предназначенных для завершения: compgen -a – muru 8 September 2017 в 20:04
  • 2
    @muru: Спасибо, но в этом случае мне нужны значения, а не ключи. Итак, какой псевдоним, который был введен, будет заменен. Вы вводите псевдоним (например, в sudo ll), нажмите [TAB ↹], и сценарий находит ll в списке назначений псевдонимов, вырезает то, что ему назначено, и вставляет это. (Таким образом, вы получите, например, sudo ls -lahvF --color=auto --time-style=long-iso.) – Evi1M4chine 9 September 2017 в 04:29

У меня есть другое решение, в котором вам не нужно добавлять sudo в качестве псевдонима. Я запускаю Linux Mint 17.3, но он должен быть очень похож на Ubuntu.

Когда вы являетесь пользователем root, тогда .profile запускается из его домашнего каталога. Если вы не знаете, что такое домашний каталог под root, вы можете проверить:

sudo su
echo $HOME

Как вы можете видеть, дом root - /root/. Проверьте его содержимое:

cd $HOME
ls -al

Должен быть файл .profile. Откройте файл и добавьте следующие строки:

if [ "$BASH" ]; then
    if [ -f ~/.bash_aliases];then
        . ~/.bash_aliases 
    fi
fi

В основном, этот скрипт bash выполняет проверку файла с именем .bash_aliases. Если файлы присутствуют, он выполняет файл.

Сохраните файл .profile и создайте свои псевдонимы в .bash_aliases. Если вы уже подготовили файл псевдонимов, скопируйте файл в это место

Перезапустите терминал, и вы готовы к работе!

0
ответ дан 25 May 2018 в 23:25

Ответ на главный голос - отличный. Однако, если вы наберете sudo -i и поднимите сообщение sudo (#), вы не будете использовать псевдонимы, которые хотите использовать.

Чтобы использовать ваши псевдонимы (и все остальное) в # prompt, use:

sudo cp "$PWD"/.bashrc /root/.bashrc

Где «$ PWD» автоматически расширяется в «/ home / YOUR_USER_NAME»

0
ответ дан 25 May 2018 в 23:25

У меня есть другое решение, в котором вам не нужно добавлять sudo в качестве псевдонима. Я запускаю Linux Mint 17.3, но он должен быть очень похож на Ubuntu.

Когда вы являетесь пользователем root, тогда .profile запускается из его домашнего каталога. Если вы не знаете, что такое домашний каталог под root, вы можете проверить:

sudo su echo $HOME

Как вы можете видеть, дом root - /root/. Проверьте его содержимое:

cd $HOME ls -al

Должен быть файл .profile. Откройте файл и добавьте следующие строки:

if [ "$BASH" ]; then if [ -f ~/.bash_aliases];then . ~/.bash_aliases fi fi

В основном, этот скрипт bash выполняет проверку файла с именем .bash_aliases. Если файлы присутствуют, он выполняет файл.

Сохраните файл .profile и создайте свои псевдонимы в .bash_aliases. Если вы уже подготовили файл псевдонимов, скопируйте файл в это место

Перезапустите терминал, и вы готовы к работе!

0
ответ дан 25 July 2018 в 22:36

У меня есть еще одно приятное решение, которое добавляет немного доверия:

Использовать завершение bash, чтобы автоматически заменить слова позади sudo своими псевдонимами при нажатии вкладки.

Сохранить это как /etc/bash_completion.d/sudo-alias.bashcomp, и он должен автоматически загружаться при запуске интерактивной оболочки:

_comp_sudo_alias() { from="$2"; COMPREPLY=() if [[ $COMP_CWORD == 1 ]]; then COMPREPLY=( "$( alias -p | grep "^ *alias $from=" | sed -r "s/^ *alias [^=]+='(.*)'$/\1/" )" ) return 0 fi return 1 } complete -o bashdefault -o default -F _comp_sudo_alias sudo

Затем войдите в новый терминал, и вам должно быть хорошо идти.

1
ответ дан 25 July 2018 в 22:36
  • 1
    Есть способ получить список псевдонимов, специально предназначенных для завершения: compgen -a – muru 8 September 2017 в 20:04
  • 2
    @Муру: Спасибо, но в этом случае мне нужны значения, а не ключи. Так что псевдоним, который был введен, будет заменен. Введите псевдоним (как в sudo ll), нажмите [Tab ↹], и скрипт считает, ll в список псевдоним задания , вырезает, что оно ему присваивается, и вставляет. (Так что вам, например, sudo ls -lahvF --color=auto --time-style=long-iso.) – Evi1M4chine 9 September 2017 в 04:29

@Элвинами ответ самый короткий. Без сомнения! :-)

однако я думал, что решения командную строку для выполнения псевдонима команды в команду sudo, где нет необходимости переосмысления sudo с помощью команды alias.

вот мое предложение для тех, кого это может заинтересовать:

решение

type -a <YOUR COMMAND HERE> | grep -o -P "(?<=\`).*(?=')" | xargs sudo

пример

в случае ll команда

type -a ll | grep -o -P "(?<=\`).*(?=')" | xargs sudo

объяснение

, когда у вас есть псевдоним (например: ll) команды нажать [F8] возвращает искаженные выражения:

$type -a ll ll is aliased to `ls -l'

с [F9] и вы выделите текст между акцентом и апостроф ' в таком случае ls -l

и xargs выполняет выбранный текст ls -l, а параметр [от f13].

да, немного дольше, но выполнить псевдонима команды в судо ;-) не нужно переопределять sudo в качестве псевдонима.

3
ответ дан 25 July 2018 в 22:36
  • 1
    Может быть проще, если вы использовали встроенный модуль alias, так как его вывод чище. alias ll alias ll='ls -ahlF'. – muru 15 February 2015 в 23:41
  • 2
    Вот версия, включающая предложение @ muru: alias ll | sed "s/.*'\(.*\)'.*/\1/g" | xargs sudo. – ACK_stoverflow 27 July 2016 в 20:07
  • 3
    Я думаю, что исходный вопрос заключался в том, чтобы сохранить работу, не имея сначала sudo -i, чтобы запустить команду aliased, но сразу же это сделало. Такая сложная команда побеждает. Вы могли бы просто сделать первое, и быть намного быстрее. – Evi1M4chine 8 September 2017 в 18:13

Псевдонимы специфичны для пользователя - вам нужно определить их в /root/.bashrc

3
ответ дан 25 July 2018 в 22:36
  • 1
    Они уже находятся под /root/.bashrc, так что это не проблема – kemra102 19 January 2011 в 00:55
  • 2
    Этот ответ был бы правильным только для ситуации, когда вы запускаете оболочку как root, как в случае с sudo -s или sudo -i (и только , если они запускаются сами по себе, чтобы получить корневую оболочку, не с формами sudo -s command... или sudo -i command...) или sudo bash или sudo su, или ситуация, когда вы включили учетные записи root и имеете корневую оболочку таким образом. Когда пользователь, не являющийся пользователем root, запускает sudo command... из своей собственной оболочки, расширение псевдонима выполняется их собственной оболочкой без полномочий root. sudo сам не расширяет псевдонимы, поэтому применительно к ситуации, описанной в вопросе , этот ответ неверен. – Eliah Kagan 17 September 2017 в 10:31

Я написал для него функцию Bash, которая затеняет sudo.

Он проверяет, есть ли у меня псевдоним для данной команды и запускается команда aliased вместо литеральной с sudo в этом case

Вот моя функция как однострочный:

sudo() { if alias "$1" &> /dev/null ; then $(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}" ; else command sudo $@ ; fi }

Или красиво отформатирован:

sudo() { if alias "$1" &> /dev/null ; then $(type "$1" | sed -E 's/^.*`(.*).$/\1/') "${@:2}" else command sudo "$@" fi }

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

6
ответ дан 25 July 2018 в 22:36

Ответ на главный голос - отличный. Однако, если вы наберете sudo -i и поднимите сообщение sudo (#), вы не будете использовать псевдонимы, которые хотите использовать.

Чтобы использовать ваши псевдонимы (и все остальное) в # prompt, use:

sudo cp "$PWD"/.bashrc /root/.bashrc

Где «$ PWD» автоматически расширяется в «/ home / YOUR_USER_NAME»

0
ответ дан 25 July 2018 в 22:36

Другие вопросы по тегам:

Похожие вопросы: