web-dev-qa-db-fra.com

"Sudo cd ..." one-liner?

De temps en temps je veux cd dans un répertoire où mon utilisateur n'a pas la permission, alors je recourt à Sudo.

La commande évidente Sudo cd somedir ne fonctionne pas:

$ Sudo mkdir test
$ Sudo chmod go-rxw test
$ ls -l
drwx------ 2 root     root  [...snip...] test
$ cd test
-bash: cd: test: Permission denied
$ Sudo cd test
Sudo: cd: command not found

Utiliser Sudo su fonctionne:

$ Sudo su
# cd test

Est-il possible de faire cela dans un one-liner? (Pas un gros problème, juste une curiosité oisive :)

Les variations que j'ai essayées n'ont pas fonctionné:

$ Sudo "cd test"
Sudo: cd: command not found
$ Sudo -i cd test
-bash: line 0: cd: test: No such file or directory
$ Sudo -s cd test

Le dernier ne donne pas d'erreur, mais il se trouve dans un nouveau shell qui sort par le bout de la ligne, donc ça ne me mène nulle part.

Quelqu'un peut-il m'expliquer pourquoi cela se produit? Pourquoi Sudo cd est-il introuvable, alors que par exemple Sudo ls ... fonctionne correctement?

20
j-g-faustus

Théoriquement, le problème est que si vous ne possédez pas de droits d'exécution sur un répertoire, vous ne devriez pas pouvoir en lire le contenu. Supposons maintenant que vous puissiez faire ce que vous voulez:

user@desktop:/$ Sudo cd restricted-dir
user@desktop:/restricted-dir$ ls
file1 file2

Comme vous pouvez le constater, vous avez accédé au répertoire avec les privilèges Sudo. Lorsque vous revenez, vous redevenez un utilisateur et vous vous trouvez dans un répertoire où vous ne devriez normalement pas être.

Techniquement, le problème est le suivant.

Sudo cd restricted-dir

cd est un shell intégré, pas une commande.

Sudo cd -i restricted-dir

Vous êtes probablement dans/root, mais cela poserait le même problème que pour le suivant.

Sudo cd -s restricted-dir

Vous ouvrez un nouveau shell racine, placez-vous dans le répertoire, puis quittez le shell racine et revenez à votre point de départ.

Dans l’ensemble, la seule solution consiste à ouvrir un shell racine et à le garder ouvert pendant que vous vous trouvez dans ce répertoire.

21
petersohn
Sudo sh -c "cd restricted-dir; some-other-command"

c'est à dire.

Sudo sh -c "cd /root/restricted-dir; ls -l"

la pièce clé est "sh -c" que j'utilise assez souvent pour exécuter une chaîne de commandes dans le même contexte/processus Shell.

5
Tagar