23 votes

Linux - utiliser "su -" mais garder le répertoire courant

Quand je le fais su - pour accéder à root, mon répertoire courant est mis à la place de celui de root. Existe-t-il un moyen de conserver le répertoire actuel dans lequel je me trouvais, comme par exemple sudo -s . Ou est-ce que la réponse est d'utiliser sudo ?

5 votes

Veuillez noter que je ne veux pas paraître impoli, mais pourquoi ce problème n'est pas résolu par "man su" ?

1 votes

@Rory s'il vous plaît lisez le commentaire de Myrrdyn

0 votes

J'aime utiliser sudo su -c "zsh" Dans mon cas, cela me permet de rester dans le répertoire et la charge actuels. zsh comme Shell avec l'utilisateur root. ctrl+d après et vous revenez à l'utilisateur actuel. Pour ce qui est du répertoire, cela fonctionne directement sur centos pour moi, mais peut-être qu'ajouter ` && cd $(pwd)` dans la commande passée pourrait faire l'affaire.

19voto

MovEaxEsp Points 161

Je suis d'accord que sudo est presque toujours une meilleure réponse, mais pour répondre à l'autre partie de la question...

Le '-' dans 'su -' indique que vous voulez émuler une connexion de super-utilisateur, plutôt que de fonctionner avec les privilèges de super-utilisateur.

Si vous utilisez simplement 'su' plutôt que 'su -', vous resterez dans le même répertoire ; cependant, vous serez également dans le même environnement et vous devrez peut-être modifier votre chemin pour accéder à certaines commandes d'administration.

13voto

freiheit Points 14144

Si vous utilisez su sans le - il devrait vous garder dans votre répertoire actuel. - , -l o --login dites-lui de le faire :

Fournir un environnement similaire à celui auquel l'utilisateur pourrait s'attendre s'il se connectait directement.

Ou utilisez simplement sudo, il y a beaucoup d'autres avantages. Ou les clés ssh.

8voto

will.barley Points 71

Si vous voulez vraiment utiliser su il existe un moyen de rester dans le même répertoire.

su - <user> -c "cd `pwd`; bash"

Ce qui se passe ici :

  • su - <user> = se connecter en tant que
  • -c ce qui signifie "exécuter une commande dans le nouveau Shell de 's
  • -c "cd `pwd`" la commande que nous donnons est de passer à la direction actuelle ( pwd ) - mais parce que nous utilisons les backticks, l'indicateur pwd est évaluée avant l'exécution de la commande su de sorte que nous basculons réellement dans le répertoire où nous nous trouvons MAINTENANT en tant qu'ancien utilisateur. Le seul problème ici est que le nouveau Shell sort juste après avoir exécuté la commande, donc nous ajoutons :
  • -c "cd `pwd`; bash" ce qui signifie "courir bash (nouveau Shell) après avoir exécuté la commande cd et le Shell de bash ne se ferme pas tant qu'on ne s'est pas déconnecté.

3 votes

C'est en fait la seule réponse à la question. Bon travail !

0 votes

En fait, su - [user] -c "cd $(pwd); bash" pourrait être légèrement meilleure (changer les backticks en $() ).

1 votes

Une idée de la raison pour laquelle j'obtiens bash: cannot set terminal process group (20): Inappropriate ioctl for device y bash: no job control in this shell des mises en garde lors de l'utilisation de cette approche ?

6voto

Tomas Pajonk Points 2400

Vous devez absolument utiliser sudo.

su -m
-m (-p) : ne pas réinitialiser les variables d'environnement (généralement non recommandé)

Cela vous permettra de rester dans le dossier lorsque vous passerez à la racine.

Avantages de l'utilisation de sudo

1 votes

Je ne vois pas en quoi cela est différent du simple "su", si ce n'est qu'il ne réinitialise pas l'environnement PATH, ce qui peut poser un problème de sécurité.

0 votes

@DavidPashley, par exemple, il exécute le programme .bashrc de l'utilisateur externe, pas de l'utilisateur root.

3voto

chmeee Points 7180

Utilisez sudo :). Sérieusement, vous n'avez pas besoin de su. sudo' est meilleur car vous ne l'utilisez que pour les commandes privilégiées et peut vous aider à éviter les erreurs. Vous obtenez également la responsabilité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X