OVH Cloud OVH Cloud

sudo: cd: command not found

18 réponses
Avatar
herve.nospam
Salut,

Il y a deux utilisateurs sur mon mac : moi (user1, administrateur), et
user2 non admin.
Si, ayant ouvert une session comme user1, je tape dans le terminal :
cd /Users/user2
sudo cd Documents
puis mon mot de passe admin
j'obtiens le message :
sudo: cd: command not found

Par contre :
sudo ls Documents
fonctionne normalement

Comment se fait-ce ?

Merci d'avance,

Hervé

8 réponses

1 2
Avatar
Éric Lévénez
Le 25/01/04 14:30, dans ,
« herve » a écrit :

Éric Lévénez wrote in message
news:<BC381B27.66CE8%...
ls est un programme unix. "cd" est une commande interne au shell (comme
"for" par exemple), et pas une commande unix. On ne peut faire un "sudo cd",
ou un "exec cd". Le message d'erreur est clair "command not found" : ce
n'est pas une commande unix.


Donc on ne peut pas "forcer" via root l'éxécution des commandes internes ?


Je ne comprends pas la question. Avec sudo tu exécutes un programme en
changeant d'identité. Après, ce que tu exécutes n'est pas forcément un
shell, alors chaque programme aura ses commandes internes. Si tu lances le
programme X avec sudo, ses commandes internes disponibles. Mais il ne faut
pas que tu oublies que lancer un programme, c'est lancé un fils et donc
lancé un nouveau contexte. Et dans un nouveau contexte on ne peut modifier
un autre contexte (comme le répertoire de travail, les variables...).

Exemple :

sudo sh -c "cd / ; pwd"

Cette commande lance un shell en root. Ce shell va exécuter les commandes
données en arguments, c'est-à-dire changer de répertoire et afficher où il
se trouve. Il faut remarquer que le répertoire courant a été changé en /
pour la commande lancée par sudo (c'est-à-dire sh), mais le répertoire
courant du shell interactif reste inchangé :

HAL3:~ eric$ sudo sh -c "cd / ; pwd"
Password:
/
HAL3:~ eric$ pwd
/Users/eric


--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.


Avatar
herve.nospam
Éric Lévénez wrote in message news:<BC398CF8.66F25%...
Donc on ne peut pas "forcer" via root l'éxécution des commandes internes ?


Je ne comprends pas la question.


Essayons d'être plus précis : je suis user1, et je veux aller me
balader dans les sous-dossiers de /Users/user2. Comme je n'ai pas le
droit de le faire en tant qu'user1, j'espérais pouvoir le faire en
tant que root temporaire.

Hervé


Avatar
Jacques Perrocheau
In article <1g83cps.1ykovhqm7k2xkN%,
(JPaul) wrote:

Je te l'accorde (mais plus long à taper ;-)


Et bien non, après réflexion, je ne te l'accorde pas ;->

Un ^D pour terminer un shell est parfaitement correct et propre.
[snip]



Merci pour ce précisions...

--
Jacques PERROCHEAU
Synthèse et Electrosynthèse Organiques, C.N.R.S. UMR 6510
Université de Rennes I, Campus de Beaulieu, F-35042 RENNES Cedex
Tel: +33 2 23 23 63 74, Fax: +33 2 23 23 63 74


Avatar
Éric Lévénez
Le 26/01/04 9:21, dans ,
« herve » a écrit :

Éric Lévénez wrote in message
news:<BC398CF8.66F25%...
Donc on ne peut pas "forcer" via root l'éxécution des commandes internes ?


Je ne comprends pas la question.


Essayons d'être plus précis : je suis user1, et je veux aller me
balader dans les sous-dossiers de /Users/user2. Comme je n'ai pas le
droit de le faire en tant qu'user1, j'espérais pouvoir le faire en
tant que root temporaire.


Ah, ok, alors :

sudo -s

Ça te lance un shell (un programme), et là tu peux utiliser ses commandes
internes (comme cd) qui sont spécifiques au shell lancé. Ai-je compris la
question cette fois ? :-)

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.



Avatar
herve.nospam
Éric Lévénez wrote in message news:<BC3ABC7C.670A5%...
sudo -s

Ça te lance un shell (un programme), et là tu peux utiliser ses commandes
internes (comme cd) qui sont spécifiques au shell lancé. Ai-je compris la
question cette fois ? :-)


Bien compris et bien répondu. Effectivement je deviens root et peux
faire ce que je veux.
Quel est le "timeout" par défaut dans MacOS X et que se passe-t-il au
bout de ce temps ? Le shell quitte tout seul ?

Hervé

Avatar
Éric Lévénez
Le 26/01/04 19:09, dans ,
« herve » a écrit :

Éric Lévénez wrote in message
news:<BC3ABC7C.670A5%...
sudo -s

Ça te lance un shell (un programme), et là tu peux utiliser ses commandes
internes (comme cd) qui sont spécifiques au shell lancé. Ai-je compris la
question cette fois ? :-)


Bien compris et bien répondu. Effectivement je deviens root et peux
faire ce que je veux.


Au lieu de "sudo -s" on peut faire "sudo bash", "sudo tcsh"... pour choisir
son shell. On peut aussi modifier la variable SHELL.

Quel est le "timeout" par défaut dans MacOS X et que se passe-t-il au
bout de ce temps ? Le shell quitte tout seul ?


Non il n'y a pas de timeout dans ce que lance sudo. Par contre on peut
mettre un timeout dans certains shells, mais c'est indépendant de sudo. Par
exemple sous bash : "TMOUT`" va délogger l'utilisateur (arrêt du shell)
s'il ne fait rien pendant 60 secondes.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.


Avatar
Nicolas.MICHEL
herve wrote:

Pourquoi faut-il y ajouter un sudo ?
D'après man su, il me semble que "su user2" devrait suffire.
Or effectivement ça ne marche pas, car après avoir entré le mot de
passe de user2, j'obtiens la réponse :
su : Sorry


sauf erreur, le sorry vient de ce que tu n'est pas dans un dossier
lisible par user2. Mais le su s'est tout de même effectué. Tu peux faire
un "id" pour vérifier, puis un "cd" pour allez chez user2.

--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas

Avatar
herve.nospam
(Nicolas MICHEL) wrote in message news:<1g89m2p.1sjdl1i1rkp7u2N%...
Mais le su s'est tout de même effectué. Tu peux faire
un "id" pour vérifier, puis un "cd" pour allez chez user2.


Effectivement ça marche, merci.

Hervé

1 2