Je jouais avec des alias aujourd'hui et j'ai remarqué que les alias ne semblaient pas être disponibles lorsque vous utilisiez 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
Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser d'alias en même temps sudo
?
/root/.bashrc
ne pas être lu lors de l'exécution d'une commande via sudo.sudo -i
?Réponses:
Ajoutez la ligne suivante à votre
~/.bashrc
:De la bash manuel :
(Souligné par moi).
Bash ne vérifie que le premier mot d'une commande pour un alias, les mots qui suivent ne sont pas vérifiés. Cela signifie que dans une commande comme
sudo ll
, seul le premier mot (sudo
) est vérifié par bash pour un alias,ll
est ignoré. Nous pouvons dire à bash de vérifier le mot suivant après l'alias (c'est-à-diresudo
) en ajoutant un espace à la fin de la valeur d'alias.la source
sudo -H ll
?J'ai écrit une fonction Bash pour cela qui fait de l'ombre
sudo
.Il vérifie si j'ai un alias pour la commande donnée et exécute la commande avec alias à la place du libellé avec
sudo
dans ce cas.Voici ma fonction en une ligne:
Ou bien formaté:
Vous pouvez l'ajouter à votre
.bashrc
fichier, n'oubliez pas de le rechercher ou de redémarrer votre session de terminal ultérieurement pour appliquer les modifications.la source
Les alias sont spécifiques à l'utilisateur - vous devez les définir dans
/root/.bashrc
la source
sudo -s
ousudo -i
(et seulement si elles sont exécutées par lui - même pour obtenir un shell root, pas avec lessudo -s command...
ousudo -i command...
formes) ousudo bash
ousudo su
ou la situation dans laquelle vous 'ont activé les connexions root et ont un shell root de cette façon. Lorsqu'un utilisateur non root s'exécute àsudo command...
partir de son propre shell, le développement d'alias est effectué par son propre shell non root.sudo
n’élargit pas lui-même les alias. Par conséquent, telle qu’elle est appliquée à la situation décrite dans la question , cette réponse est incorrecte.La réponse de @Alvins est la plus courte. Sans aucun doute! :-)
Cependant, j'ai pensé à une solution en ligne de commande pour exécuter une commande avec alias dans sudo où il n'est pas nécessaire de redéfinir
sudo
avec unealias
commande.Voici ma proposition pour ceux à qui cela pourrait intéresser:
Solution
Exemple
Dans le cas de la
ll
commandeExplication
lorsque vous avez un alias (tel que :),
ll
la commandetype -a
renvoie l'expression avec alias:avec
grep
vous sélectionnez le texte entre l'accent `et apostrophe 'dans ce casls -l
Et
xargs
exécute le texte sélectionné enls -l
tant que paramètre desudo
.Oui, un peu plus long mais complètement propre ;-) Pas besoin de redéfinir
sudo
comme alias.la source
alias
utilisiez la commande intégrée, car sa sortie est plus propre.alias ll
sortiesalias ll='ls -ahlF'
.alias ll | sed "s/.*'\(.*\)'.*/\1/g" | xargs sudo
.sudo -i
commencer par exécuter la commande avec alias, mais en le faisant tout de suite. Avoir une commande aussi complexe fait échec à cela. Vous pouvez simplement faire le premier et être beaucoup plus rapide.J'ai une autre solution intéressante qui ajoute un peu de confiance:
Utilisez la complétion bash pour remplacer automatiquement les mots
sudo
avec leurs alias lorsque vous appuyez sur la touche de tabulation.Enregistrez ceci sous
/etc/bash_completion.d/sudo-alias.bashcomp
, et il devrait être automatiquement chargé au démarrage du shell interactif:Ensuite, connectez-vous à un nouveau terminal, et vous devriez être prêt à partir.
la source
compgen -a
sudo ll
), appuyez sur [TAB], et le script trouvell
dans la liste des assignations d'alias, coupe ce qui lui est attribué et l'insère. (Donc, vous auriez par exemplesudo ls -lahvF --color=auto --time-style=long-iso
.)J'ai une solution différente selon laquelle vous n'avez pas besoin d'ajouter
sudo
un alias. Je lance Linux Mint 17.3 mais cela devrait être assez similaire à Ubuntu.Lorsque vous êtes root, il
.profile
est exécuté à partir de son répertoire de base. Si vous ne savez pas quel est le répertoire personnel sous la racine, vous pouvez vérifier avec:Comme vous pouvez le voir, la maison de
root
est/root/
. Vérifiez son contenu:Il devrait y avoir un
.profile
fichier. Ouvrez le fichier et ajoutez les lignes suivantes:Fondamentalement, ce script bash consiste à rechercher un fichier appelé
.bash_aliases
. Si les fichiers sont présents, il exécute le fichier.Enregistrez le
.profile
fichier et créez vos alias dans.bash_aliases
. Si vous avez déjà le fichier alias prêt, copiez-le à cet emplacement.Relancez le terminal et vous êtes prêt à partir!
la source
La réponse la plus votée est excellente. Cependant, si vous tapez
sudo -i
et passez à une invite sudo (#
), vous n'aurez pas les alias que vous souhaitez utiliser.Pour utiliser vos alias (et tout le reste) à l'
#
invite, utilisez:Où "$ PWD" est automatiquement développé dans "/ home / YOUR_USER_NAME"
la source
@ WinEunuuchs2Unix:
$PWD
étend le "répertoire de travail actuel". Je pense que tu veux$HOME
.De plus, dans la plupart des cas, il est probablement préférable d’avoir un fichier racine .bashrc séparé. En fait, je voudrais en faire un fichier réel
/root
, un lien virtuel vers celui-ci dans le répertoire de base de l'utilisateur (par exemple,.bashrc_root
) et le rechercher à partir du.bashrc
fichier de l'utilisateur . Si, à un moment ultérieur, ce compte d'utilisateur privilégié n'est plus présent, le.bashrc
fichier racine est toujours disponible pour les autres utilisateurs.la source