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é

10 réponses

1 2
Avatar
jperrocheau
herve wrote:

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 ?


Normal, sudo étant une commande à "durée de vie limitée", elle ne va pas
te laisser "séjourner" là où tu n'es pas sensé trainer tes baskettes.
Perso cela me parait logique.


--
Jacques PERROCHEAU
______________________________________________________________
e-mail: mailto:

Avatar
herve.nospam
(Jacques Perrocheau) wrote in message news:<1g81qi0.kik77khtobnyN%...
Normal, sudo étant une commande à "durée de vie limitée", elle ne va pas
te laisser "séjourner" là où tu n'es pas sensé trainer tes baskettes.
Perso cela me parait logique.


OK, ton explication me convainc.
Cependant "command not found" n'est pas très explicite, on pourrait
faire mieux comme message d'erreur...

Merci,

Hervé

Avatar
Éric Lévénez
Le 23/01/04 23:03, dans ,
« herve » a écrit :

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 ?


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.

Si tu es sous bash :

HAL3:~ eric$ type cd
cd is a shell builtin


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

Avatar
Éric Lévénez
Le 24/01/04 12:46, dans ,
« herve » a écrit :

(Jacques Perrocheau) wrote in message
news:<1g81qi0.kik77khtobnyN%...
Normal, sudo étant une commande à "durée de vie limitée", elle ne va pas
te laisser "séjourner" là où tu n'es pas sensé trainer tes baskettes.
Perso cela me parait logique.


OK, ton explication me convainc.


Faut pas te laisser faire ! :-)

Cependant "command not found" n'est pas très explicite, on pourrait
faire mieux comme message d'erreur...


Le message d'erreur est pourtant parfait. C'est l'explication qui ne l'est
pas :-)

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


Avatar
blanc
herve wrote:


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


La bonne solution pour faire ce que tu veux :

sudo su - user2

De cette manière tu fais d'une pierre deux coups : Tu vas effectivement
dans le répertoire 'home' de user2, et tu te retrouves avec ses droits
(et son environnement) !
Contrairement à une idée reçue, la commande su permet de se substituer à
n'importe quel utilisateur, pas seulement root.
(su = substitute user identity)
Ne pas oublier ensuite de faire ^D (control D) pour quitter la
substitution.

Si tu veux juste faire une ou deux commandes en tant qu'utilisateur
user2, tu peux faire :
sudo -u user2 commande

Voir les manuels :
man su
man sudo
pour plus de détails

JPaul.

--
/==/==- JPaul Blanc
/ /--/--// quelque part (somewhere)
|/| L | en (in)
/|| = ||| France

Avatar
jperrocheau
JPaul wrote:

La bonne solution pour faire ce que tu veux :

sudo su - user2

De cette manière tu fais d'une pierre deux coups : Tu vas effectivement
dans le répertoire 'home' de user2, et tu te retrouves avec ses droits
(et son environnement) !
Contrairement à une idée reçue, la commande su permet de se substituer à
n'importe quel utilisateur, pas seulement root.


sudo aussi.. non ?

Est-ce vraiment utile d'empiler un su et un sudo ?

(su = substitute user identity)
Ne pas oublier ensuite de faire ^D (control D) pour quitter la
substitution.


Un "exit" ne serait-il pas plus propre ?

Si tu veux juste faire une ou deux commandes en tant qu'utilisateur
user2, tu peux faire :
sudo -u user2 commande


OK




--
Jacques PERROCHEAU
______________________________________________________________
e-mail: mailto:

Avatar
blanc
Jacques Perrocheau wrote:

Est-ce vraiment utile d'empiler un su et un sudo ?


J'ai pensé que s'il voulait travailler dans le répertoire home de user2,
c'était plus simple, puisque sudo ne permet pas de faire le changt de
répertoire

Ne pas oublier ensuite de faire ^D (control D) pour quitter la
substitution.


Un "exit" ne serait-il pas plus propre ?


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

JPaul.

--
/==/==- JPaul Blanc
/ /--/--// quelque part (somewhere)
|/| L | en (in)
/|| = ||| France


Avatar
blanc
JPaul wrote:

Un "exit" ne serait-il pas plus propre ?


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. Il
s'agit en effet du caractère de fin de fichier, et le shell sait
interpréter ce caractère, puisque c'est celui qu'il reçoit lorsqu'il lit
la fin d'un script. Ce caractère signifie pour lui qu'il doit se
terminer et est totalement équivalent à ``exit''.

Ce n'est pas tout à fait pareil avec un ^C qui permet de terminer un
processus : même si tout processus bien fait devrait théoriquement
capturer ce ^C et se terminer proprement, ce n'est hélas pas toujours le
cas.

JPaul.

--
/==/==- JPaul Blanc
/ /--/--// quelque part (somewhere)
|/| L | en (in)
/|| = ||| France


Avatar
herve.nospam
(JPaul) wrote in message news:<1g82npl.11hvq8dhy6my0N%...
La bonne solution pour faire ce que tu veux :

sudo su - user2

De cette manière tu fais d'une pierre deux coups : Tu vas effectivement
dans le répertoire 'home' de user2, et tu te retrouves avec ses droits
(et son environnement) !
Contrairement à une idée reçue, la commande su permet de se substituer à
n'importe quel utilisateur, pas seulement root.


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

Hervé

Avatar
herve.nospam
É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 ?

Hervé

1 2