Quelle est la différence entre ln -s et les alias?
je viens de trouver une solution pour un problème j'ai eu avec le subl
commande pour le texte Sublime 3 lorsque la version MacPorts de python est installée. Les instructions disent de mettre un doux lien, ln-s
pour l'application en ligne de commande dans votre /bin. Ça n'a pas marché, alors j'ai juste ouvert mon ~/.profil et ajouté un alias:
alias subl="/Applications/path/to/subl"
.
Mais cela soulève une nouvelle question pour moi. Quelle est la différence entre ces deux: alias et liens mous?
7 réponses
ce sont des choses totalement différentes, bien que dans ce cas, elles puissent être utilisées à des fins similaires.
Ceci:
alias subl="/Applications/path/to/subl"
crée un alias, de sorte que taper subl
comme une commande shell est équivalent à taper /Applications/path/to/subl
.
en bash, les fonctions sont généralement préférées aux alias, parce qu'elles sont beaucoup plus flexibles et puissantes.
subl() { /Applications/path/to/subl ; }
ces Deux choses sont spécifiques à la coquille; ils provoquent le shell pour agrandir sub1
une commande.
ln -s
, d'autre part, crée un lien symbolique dans le système de fichiers. Un lien symbolique est une référence à un autre fichier, et dans la plupart des cas, il peut être traité comme s'il s'agissait du fichier lui-même. Elle s'applique à tout ce qui y accède, pas seulement à l'interpréteur de commandes, elle est immédiatement visible par tous les processus qui fonctionnent sur le système, et elle persiste jusqu'à ce qu'elle soit retirée. (Un lien symbolique est implémenté comme un petit fichier spécial contenant le nom de la cible fichier.)
un Alias est un Finder Macintosh concept. Quand vous faites un Alias dans le Finder, le Finder le traque. Lorsque vous déplacez le fichier ou le dossier d'origine, l'alias le suit.
Un lien symbolique est un système de fichiers Unix concept. Lorsque vous faites un lien symbolique, il ne fait que pointer vers l'emplacement original. Déplacer l'original, et le lien symbolique pointe nulle part.
lorsque vous utilisez une application Mac, et utilisez la boîte de dialogue Ouvrir/Enregistrer, il sera Gérer les alias parce qu'il utilise L'API Finder, et le Finder gère le suivi des alias.
Les outils Unix ne s'intègrent pas à L'API Finder, donc ils ne peuvent pas suivre les alias. Cependant, ils fonctionnent avec L'API Unix sous-jacente qui gère les liens symboliques. Vous pouvez utiliser ls
sur un lien symbolique car il utilise L'API Unix. Pareil pour Python.
retour dans le système 7/8/9 jours, le système de fichiers ne pouvait pas gérer les liens symboliques un peu comme L'API Windows utilise des raccourcis et non pas symbolique lien. Vous avez besoin d'alias.
cependant, Mac OS X est un OS Unix basé, donc comprend le concept de liens symboliques. Le Finder traite maintenant les liens symboliques comme il l'a fait pour les alias (sauf que les liens symboliques ne sont pas mis à jour lorsque l'original bouge). La seule raison pour les alias est d'être compatible avec l'ancien système de fichiers Finder.
C'est vraiment une super question
il y a 3 niveaux d'alias dans ce débat
- système de Fichiers: ln-s "cible-file-or-directory" "alias" - c'est visuel pour tous les programmes utilisant le système de fichiers (bash, Finder, applications)
- Shell alias: (bash/sh/zsh, etc) - (partie de la question) uniquement utilisé en ligne de commande shell
- MacOS Finder: "make alias" - connu par Finder, et boîte de dialogue de fichier dans la plupart des applications
Quelques différents cas d'utilisation:
- vous voulez des scripts shell (bash) pour naviguer dans votre système de fichiers de façon symbolique - alors utilisez ln-S... quand vous installez java il utilisera cette technique lui-même. Dans l'exemple essayer de dire quel java et voir où est java. Ensuite, utilisez ls -la /usr/bin/java pour voir où en est vraiment.
- vous voulez faire des liens rapides dans Finder afin que vous puissiez naviguer choses communes qui se trouvent dans différents répertoires -- > utilisez Finder créer un alias
- voulez démarrer L'éditeur Sublime avec un raccourci de bash puis utilisez Alias Shell. J'ai alias ll=ls-l - qui liste un répertoire d'un élément par ligne. Je n'ai pratiquement ne peuvent pas utiliser bash sans elle :-) notez que ces substitutions n'ont lieu que sur la substitution en ligne de commande dans bash et est donc moins utile dans le shell script.
Personnellement, j'utilise ln-S.. relativement souvent.
j'utilise aussi Finder créer un alias beaucoup. C'est facile et les liens suivent les articles comme ils autour. Mais il ne fonctionne pas à partir de bash - par conséquent, je change parfois ces liens en * * ln-S...* quand je dois commencer le script.
ln -s
crée un lien symbolique, qui est presque un fichier sur votre système de fichiers
alias est une coquille chose spécifique
Donc, en gros, un lien symbolique est une meilleure solution parce qu'il va travailler pour tout. Par exemple, si vous voulez que votre gestionnaire de fichiers ouvre des fichiers texte avec ce programme spécifique, vous pouvez le pointer vers votre lien symbolique et ça va marcher.
Les Alias n'existent que dans le contexte du shell (Bash, Sh, Zsh, etc.) mais ne se trouve pas dans les autres applications alors que ln -s
crée un fichier virtuel (un lien) à un fichier qui pourrait se présenter comme une nouvelle commande et doit être perceptible par la plupart des applications qui en appelle d'autres binaires. Les alias sont similaires aux fonctions et aux variables uniquement parce qu'ils ressemblent davantage à des modèles de commandes. Créer une fonction est en fait plus louable.
je pense que vous avez peut-être raté quelque chose dans votre alias de commande ci-dessus, il doit avoir la forme alias mumble="substitution"
et fera en sorte que toute commande que vous tapez en commençant par mumble soit remplacée par substitution. Donc si ce que vous avez entré dans votre profil était alias subl="/Applications/path//to/subl"
ensuite, chaque fois que vous tapez subl au début d'une commande, il est remplacé par le chemin d'accès complet.
ln
fonctionne en créant une référence dans le système de fichiers d'une chose à une autre.
Le lien que vous fournissez ci-dessus suggère que ln
ne fonctionnera pas avec la version de Python fournie dans MacPorts.
EDIT: un autre commentaire m'amène à réaliser que l'alias dont je parle est un alias 'finder' spécifique au mac, alors que les alias en question ici sont des alias bash 'shell'. Mon erreur.
symbolique, ou doux, le lien pointe vers un chemin: un emplacement sur le système de fichiers. Si le fichier ou le dossier situé sur le chemin est déplacé ou renommé, le lien mou ne pointera plus rien d'utile.
un alias peut contenir une référence à un chemin, ou à un ID de fichier, ou les deux, selon le application. Sur Mac OS X au moins, la valeur par défaut est les deux, mais le chemin est préféré à l'ID du fichier. C'est, aussi longtemps que quelque chose existe au chemin référencées par votre pseudo, votre alias le chemin d'accès, tout comme un lien symbolique. mais, si rien n'existe au chemin référencé par votre alias, il pointera plutôt vers l'ID du fichier original.
Par exemple:
supposons que vous créez un fichier, puis créez un alias pour lui, en spécifiant le fichier chemin. L'alias contient maintenant L'ID du fichier, ainsi que le chemin du fichier. L'alias suivra par défaut le chemin du fichier pour vous mener au fichier.
si vous déplacez maintenant le fichier à un endroit différent, l'alias le suivra en référençant l'ID du fichier du fichier. Mais, si vous assignez un nouveau fichier au même chemin de fichier que l'ancien, l'alias pointera maintenant vers le nouveau fichier, puisqu'il favorise le chemin par rapport à L'ID du fichier.
Référence: http://forums.macworld.com/index.php?/topic/142842-aliases-vs-symbolic-links/