3 votes

Pourquoi le toucher échoue-t-il?

Je dois manquer quelque chose d'évident.

Cela fonctionne:

[root@host2 /]# cd /home/mysite/public_html/../logs 
[root@host2 /home/mysite/logs]# touch x

Pourquoi cela ne fonctionne pas?

[root@host2 /]# touch /home/mysite/public_html/../logs/x
touch: ne peut pas toucher `/home/mysite/public_html/../logs/x': Aucun fichier ou dossier de ce type

12voto

Eric Noob Points 531

Il y a de fortes chances qu'un des répertoires dans /home/mysite/public_html/../logs/ soit en fait un lien symbolique. La commande cd intégrée à la plupart des shells modernes fait un peu de magie dans ce cas, de sorte que cd .. vous mène au répertoire parent "logique" -- qui prend en compte comment vous y êtes arrivé.

Lorsque vous essayez de touch /home/mysite/public_html/../logs/x, vous n'obtenez pas cette magie.

Considérez:

$ ls -l /home/lars
public_html -> /var/www/lars
logs/

Si je fais cd /home/lars/public_html je suis en réalité dans /var/www/lars. Donc techniquement, ../logs n'existe pas (car le répertoire logs que je veux est en réalité dans /home/lars, pas dans /var/www, qui est le répertoire parent "réel" de /var/www/lars.

1voto

Amy Anuszewski Points 1228

public_html est un lien symbolique vers un endroit complètement différent. En tant que shell, bash suit les liens symboliques dans les chemins différemment que de nombreux autres programmes le font. Essayez ceci: cd /home/mysite/public_html puis exécutez pwd (la commande bash) et /bin/pwd (le programme). Lorsque touch essaie d'utiliser le chemin, il ira à /var/www/sites/mysite/ ou où que pointe ce lien, puis remontera d'un répertoire à partir de là pour accéder à logs/... seulement pour échouer à trouver /var/www/sites/logs/.

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