Ich habe heute mit Aliasen herumgespielt und festgestellt, dass Aliase während der Verwendung nicht verfügbar zu sein scheinen 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
Gibt es einen Grund, warum Sie während der Verwendung keine Aliase verwenden können sudo
?
/root/.bashrc
beim Ausführen eines Befehls über sudo nicht gelesen.sudo -i
?Antworten:
Fügen Sie die folgende Zeile zu Ihrem hinzu
~/.bashrc
:Aus dem Bash-Handbuch :
(Hervorhebung von mir).
Bash prüft nur das erste Wort eines Befehls auf einen Alias, alle Wörter danach werden nicht geprüft. Das heißt, in einem Befehl wie
sudo ll
, wird nur das erste Wort (sudo
) von der Bash auf einen Alias überprüft undll
ignoriert. Wir können bash anweisen, das nächste Wort nach dem Alias (dhsudo
) zu überprüfen, indem Sie am Ende des Alias-Werts ein Leerzeichen einfügen.quelle
sudo -H ll
?Ich habe dafür eine Bash-Funktion geschrieben, die Schatten wirft
sudo
.Es wird überprüft, ob ich einen Alias für den angegebenen Befehl habe, und der Aliasbefehl wird
sudo
in diesem Fall anstelle des Literalbefehls mit ausgeführt .Hier ist meine Funktion als Einzeiler:
Oder schön formatiert:
Sie können es an Ihre
.bashrc
Datei anhängen , die Quelle nicht vergessen oder die Terminalsitzung anschließend neu starten, um die Änderungen zu übernehmen.quelle
Die Aliase sind benutzerspezifisch - Sie müssen sie in definieren
/root/.bashrc
quelle
sudo -s
odersudo -i
(und nur , wenn sie von selbst läuft ein Root - Shell zu bekommen, nicht mit densudo -s command...
odersudo -i command...
Formularen) odersudo bash
odersudo su
oder der Situation , in der Sie habe root-logins aktiviert und habe so eine root-shell. Wenn ein Benutzer ohne Rootberechtigungsudo command...
von seiner eigenen Shell ausgeführt wird, wird die Alias-Erweiterung von seiner eigenen Shell ohne Rootberechtigung durchgeführt.sudo
Erweitert selbst keine Aliase, daher ist diese Antwort in Bezug auf die in der Frage beschriebene Situation falsch.@Alvins Antwort ist die kürzeste. Kein Zweifel! :-)
Ich dachte jedoch an eine Befehlszeilenlösung, um einen Alias-Befehl in sudo auszuführen, bei dem es nicht erforderlich ist, ihn
sudo
mit einemalias
Befehl neu zu definieren .Hier ist mein Vorschlag für diejenigen, für die es interessant sein könnte:
Lösung
Beispiel
Im Falle des
ll
BefehlsErläuterung
Wenn Sie einen Alias (z. B. :) haben, gibt der
ll
Befehltype -a
den Alias-Ausdruck zurück:Wählen
grep
Sie mit den Text zwischen dem Akzent "und Apostroph" in diesem Fallls -l
Und
xargs
führt den ausgewählten Textls -l
als Parameter von aussudo
.Ja, ein bisschen länger, aber komplett sauber ;-) Keine Notwendigkeit,
sudo
als Alias neu zu definieren .quelle
alias
Könnte einfacher sein, wenn Sie das eingebaute verwenden, da die Ausgabe sauberer ist.alias ll
Ausgängealias ll='ls -ahlF'
.alias ll | sed "s/.*'\(.*\)'.*/\1/g" | xargs sudo
.sudo -i
zuerst den Alias-Befehl ausführen muss, sondern ihn sofort ausführt. Ein so komplexer Befehl besiegt das. Sie könnten einfach das erstere tun und viel schneller sein.Ich habe noch eine nette Lösung, die auch ein bisschen Vertrauen schafft:
Verwenden Sie die Bash-Vervollständigung, um die dahinter stehenden Wörter
sudo
beim Drücken der Tabulatortaste automatisch durch ihre Aliase zu ersetzen .Speichern Sie dies als
/etc/bash_completion.d/sudo-alias.bashcomp
, und es sollte automatisch beim Start der interaktiven Shell geladen werden:Melden Sie sich dann bei einem neuen Terminal an, und schon kann es losgehen.
quelle
compgen -a
sudo ll
), drücken [TAB AB] und das Skript findet ihnll
in der Liste der Aliaszuweisungen, schneidet ihn aus und fügt ihn ein. (So würden Sie zB bekommensudo ls -lahvF --color=auto --time-style=long-iso
.)Ich habe eine andere Lösung, bei der Sie nicht
sudo
als Alias hinzufügen müssen . Ich verwende Linux Mint 17.3, aber es sollte Ubuntu ziemlich ähnlich sein.Wenn Sie als Root angemeldet sind,
.profile
wird das von seinem Home-Verzeichnis ausgeführt. Wenn Sie nicht wissen, wie das Basisverzeichnis unter root lautet, können Sie Folgendes überprüfen:Wie Sie sehen können, die Heimat von
root
ist/root/
. Überprüfen Sie den Inhalt:Es sollte eine
.profile
Datei geben. Öffnen Sie die Datei und fügen Sie die folgenden Zeilen hinzu:Grundsätzlich sucht dieses Bash-Skript nach einer aufgerufenen Datei
.bash_aliases
. Wenn die Dateien vorhanden sind, wird die Datei ausgeführt.Speichern Sie die
.profile
Datei und erstellen Sie Ihre Aliase in.bash_aliases
. Wenn Sie die Aliase-Datei bereits bereit haben, kopieren Sie die Datei an diesen SpeicherortStarten Sie das Terminal neu und Sie können loslegen!
quelle
Die Antwort mit den meisten Stimmen ist großartig. Wenn Sie
sudo -i
jedoch eine sudo-Eingabeaufforderung (#
) eingeben und die Anführungszeichen setzen, werden Sie nicht über die Aliase verfügen, die Sie verwenden möchten.Um Ihre Aliase (und alles andere) an der
#
Eingabeaufforderung zu verwenden, verwenden Sie:Wobei "$ PWD" automatisch zu "/ home / YOUR_USER_NAME" erweitert wird
quelle
@ WinEunuuchs2Unix:
$PWD
erweitert auf das "aktuelle Arbeitsverzeichnis". Ich denke du willst$HOME
.In den meisten Situationen ist es wahrscheinlich am besten, eine separate .bashrc-Stammdatei zu haben. Tatsächlich würde ich es zu einer echten Datei machen, einen
/root
Softlink dazu im Home-Verzeichnis.bashrc_root
des Benutzers.bashrc
erstellen (z. B. ) und es aus der Datei des Benutzers beziehen. Wenn dieses privilegierte Benutzerkonto zu einem späteren Zeitpunkt nicht mehr vorhanden ist, ist die Stammdatei.bashrc
für andere Benutzer weiterhin verfügbar.quelle