GNU/Linux >> Tutoriels Linux >  >> Linux

Exécutez la commande cd en tant que superutilisateur sous Linux

Comme vous l'avez noté, cd est une commande intégrée du shell, et il y a une raison pour cela :le "répertoire courant" est un paramètre par processus qui ne peut être modifié que par le processus lui-même .

Le répertoire de travail de votre shell ne peut être modifié par aucun processus enfant - même si vous parvenez à exécuter cd dans un sous-shell privilégié, cela ne changera que le répertoire de travail de ce sous-shell temporaire, et peu importe la méthode d'augmentation des privilèges que vous utilisez.

Donc pour sudo cd pour fonctionner, sudo lui-même devrait être un shell intégré, et il faudrait un moyen d'augmenter les privilèges d'un processus déjà en cours d'exécution. Actuellement, aucun mécanisme de ce type n'existe sous Linux (ni la plupart des autres systèmes d'exploitation).

Une façon d'obtenir ce que vous voulez est d'exécuter un interactif shell avec les privilèges root (toutes les méthodes fonctionnent), et utilisez simplement le cd normal dedans :

[[email protected] /]$ sudo bash
[[email protected] /]# cd /root/secret

Si vous voulez tout faire en une seule commande, cela devrait ressembler à ceci :changez d'abord le répertoire de travail, puis démarrez un shell interactif :

sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"

Remarque :La commande externe n'a pas besoin d'être un shell, elle doit simplement être quelque chose qui change son répertoire de travail et exécute une nouvelle commande. Les systèmes Linux récents ont un ou deux assistants qui peuvent être utilisés :

sudo nsenter --wd="/root/secret" bash       # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash        # coreutils v8.28 (debian buster)

L'avantage de cette méthode est qu'elle ne nécessite pas de guillemets imbriqués; vous pouvez exécuter une commande de plusieurs mots sans avoir de problèmes avec les espaces ou les caractères spéciaux.

Enfin, certains programmes ont une option intégrée pour changer leur répertoire de travail :

sudo make -C /etc
sudo git -C /root/secret log

L'autre réponse n'est pas fausse.

Peut-être une meilleure réponse est :

L'outil sudo est destiné à prendre des mesures en tant que superutilisateur, et vous décrivez quelque chose qui ressemble plus à un changement d'état qui précéderait des actions telles que 'ls' ou 'vi' ou d'autres pour les rendre plus simples.

Je suggère, par ex. si vous vouliez éditer un fichier dans /root/private/ :

sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>

C'est certainement plus typé et un peu plus difficile que de simplement changer de répertoire. Cependant, c'est loin plus auditable et beaucoup plus conforme aux principes de sudo que d'exécuter une variante de "sudo bash".

Si vous travaillez dans un environnement sécurisé, votre équipe IA vous remerciera. Si vous vous demandez :"Quelle modification ai-je apportée l'autre jour ?", alors vous vous remerciera, car vous n'aurez pas à vous demander quel(s) fichier(s) vous avez modifié.

Tout cela étant dit, activer et exécuter une certaine forme de "sudo bash" est définitivement plus facile. Si vous cherchiez plus facile, pourquoi utilisez-vous "sudo" en premier lieu au lieu de simplement vous connecter en tant que root ?


Linux
  1. Exécutez des conteneurs sur Linux sans sudo dans Podman

  2. Commande Linux mv

  3. Linux du command

  4. Commande IP Linux

  5. Commande cd Linux

Commande W sous Linux

À la commande sous Linux

Commande Df sous Linux

Principes de base de la ligne de commande Linux :sudo

Comment exécuter un alias avec Sudo sous Linux

Comment exécuter la commande SUDO dans WinSCP pour transférer des fichiers de Windows vers Linux