Bawiłem się dziś z aliasami i zauważyłem, że aliasy nie są dostępne podczas używania 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
Czy jest jakiś powód, dla którego nie możesz używać aliasów podczas korzystania sudo
?
/root/.bashrc
nie jest czytany podczas uruchamiania polecenia przez sudo.sudo -i
?Odpowiedzi:
Dodaj następujący wiersz do
~/.bashrc
:Z podręcznika bash :
(Podkreśl moje).
Bash sprawdza tylko pierwsze słowo polecenia pod kątem aliasu, a żadne słowa po nim nie są sprawdzane. Oznacza to, że w takim poleceniu
sudo ll
tylko pierwsze słowo (sudo
) jest sprawdzane przez bash dla aliasu,ll
jest ignorowane. Możemy nakazać bashowi sprawdzenie następnego słowa po aliasie (tj.sudo
) Poprzez dodanie spacji na końcu wartości aliasu.źródło
sudo -H ll
?Napisałem dla niego funkcję Bash, która rzuca cień
sudo
.Sprawdza, czy mam alias dla podanej komendy i uruchamia komendę aliasowaną zamiast literalnej
sudo
w tym przypadku.Oto moja funkcja jako jednej linijki:
Lub ładnie sformatowany:
Możesz dołączyć go do swojego
.bashrc
pliku, nie zapomnij o źródle lub zrestartuj sesję terminalową, aby zastosować zmiany.źródło
Aliasy są specyficzne dla użytkownika - musisz je zdefiniować
/root/.bashrc
źródło
sudo -s
lubsudo -i
(i tylko jeśli prowadzonym przez siebie, aby uzyskać powłokę roota, nie zsudo -s command...
lubsudo -i command...
formach) lubsudo bash
lubsudo su
lub w sytuacji, gdy włączyłem logowanie roota i mam w ten sposób powłokę roota. Gdy użytkownik inny niż root uruchamia sięsudo command...
z własnej powłoki, rozszerzenie aliasu jest wykonywane przez jego własną powłokę inną niż root.sudo
sam nie rozwija aliasów, więc w przypadku sytuacji opisanej w pytaniu odpowiedź jest nieprawidłowa.Odpowiedź @Alvins jest najkrótsza. Bez wątpienia! :-)
Jednak myślałem roztworu wiersza poleceń do wykonania polecenia sudo aliasem w których nie ma potrzeby, aby ponownie zdefiniować
sudo
za pomocąalias
polecenia.Oto moja propozycja dla tych, których może zainteresować:
Rozwiązanie
Przykład
W przypadku
ll
poleceniaWyjaśnienie
gdy masz alias (taki jak :),
ll
polecenietype -a
zwraca aliasowane wyrażenie:z
grep
tobą wybierz tekst między akcentem „i apostrofem” w tym przypadkuls -l
I
xargs
wykonuje zaznaczony tekstls -l
jako parametrsudo
.Tak, trochę dłużej, ale całkowicie czysto ;-) Nie ma potrzeby redefiniowania
sudo
jako aliasu.źródło
alias
wbudowanego, ponieważ jego wyjście jest czystsze.alias ll
wyjściaalias ll='ls -ahlF'
.alias ll | sed "s/.*'\(.*\)'.*/\1/g" | xargs sudo
.sudo -i
najpierw uruchamiać polecenia aliasu, ale robił to od razu. Posiadanie tak złożonego polecenia pokona to. Możesz zrobić to pierwsze i być znacznie szybszym.Mam inne fajne rozwiązanie, które dodaje trochę zaufania:
Użyj zakończenia bash, aby automatycznie zamieniać słowa
sudo
z ich aliasami po naciśnięciu klawisza tab.Zapisz to jako
/etc/bash_completion.d/sudo-alias.bashcomp
i powinno być automatycznie ładowane podczas interaktywnego uruchamiania powłoki:Następnie zaloguj się do nowego terminala i powinieneś iść.
źródło
compgen -a
sudo ll
), naciskasz [TAB ↹], a skrypt znajduje sięll
na liście przypisań aliasów, wycina to, do czego jest przypisany, i wstawia to. (Więc dostaniesz npsudo ls -lahvF --color=auto --time-style=long-iso
.)Mam inne rozwiązanie, w którym nie trzeba dodawać
sudo
jako aliasu. Korzystam z Linux Mint 17.3, ale powinien być podobny do Ubuntu.Gdy jesteś rootem,
.profile
jest on uruchamiany z jego katalogu domowego. Jeśli nie wiesz, jaki jest katalog domowy w katalogu głównym, możesz to sprawdzić za pomocą:Jak widać, domem
root
jest/root/
. Sprawdź jego zawartość:Powinien być
.profile
plik. Otwórz plik i dodaj następujące wiersze:Zasadniczo skrypt bash sprawdza, czy istnieje plik o nazwie
.bash_aliases
. Jeśli pliki są obecne, wykonuje plik.Zapisz
.profile
plik i utwórz swoje aliasy w.bash_aliases
. Jeśli masz już gotowy plik aliasów, skopiuj go do tej lokalizacjiUruchom ponownie terminal i gotowe!
źródło
Najlepiej głosowana odpowiedź jest świetna. Jednak jeśli wpiszesz
sudo -i
i#
przejdziesz na sudo ( ), nie będziesz mieć aliasów, których lubisz używać.Aby wykorzystać aliasy (i wszystko inne) w
#
wierszu polecenia, użyj:Gdzie „$ PWD” jest automatycznie rozwijane do „/ home / YOUR_USER_NAME”
źródło
@ WinEunuuchs2Unix:
$PWD
rozwija się do „obecnego katalogu roboczego”. Myślę, że chcesz$HOME
.Ponadto w większości sytuacji prawdopodobnie najlepiej jest mieć osobny główny plik .bashrc. W rzeczywistości uczynię go prawdziwym plikiem
/root
, miękkim linkiem do niego w katalogu domowym użytkownika (np..bashrc_root
) I źródłowym z.bashrc
pliku użytkownika . Jeśli w późniejszym czasie to uprzywilejowane konto użytkownika nie będzie już obecne,.bashrc
plik główny jest nadal dostępny dla innych użytkowników.źródło