J'ai téléchargé des fichiers de polices sur AWS (exécutant Amazon Linux) et les ai déplacés vers le /usr/share/fonts
répertoire à l'aide d'une cp
commande dans .ebextensions.
Lorsque je me connecte depuis mon Mac et que j'utilise ls -a
, je vois que certains fichiers sont colorés différemment - un ensemble de fichiers de polices est noir tandis que d'autres sont verts. Je suis curieux de savoir pourquoi cela a été le cas et si cela créera des problèmes pour mon code .
À partir d' une autre réponse sur AskUbuntu, j'ai trouvé cette clé sur la façon d'interpréter ces couleurs. Je ne comprends pas pourquoi un .ttf serait exécutable ou pourquoi un ensemble de .ttfs serait reconnu et pas un autre.
Bleu: Annuaire
Vert: fichier de données exécutable ou reconnu
Sky Blue: fichier lié
Jaune sur fond noir: appareil
Rose: fichier image graphique
Rouge: fichier d'archive
Ces fichiers ont tous été téléchargés sur un Mac à partir de divers sites de polices avant d'être téléchargés.
la source
Réponses:
ls -l
vous dira définitivement si un fichier est exécutable ou non. Je ne pense pas qu'il y ait un grand mystère ici. Vous avez téléchargé des fichiers à partir de diverses sources, chacune pouvant avoir des bits d'autorisation différents définis pour une raison ou une autre. * Si vous n'aimez pas voir certains avec des couleurs et d'autres sans essayerchmod -x *.ttf
... les fichiers de polices ne devraient pas avoir besoin du jeu de bits exécutables.* Comme le commentaire hautement surévalué de Matteo Italia, qui devrait être conservé, dit: Très probablement, ils ont été copiés à partir d'un volume FAT ou NTFS, qui ne stockent pas le bit exécutable, sont donc montés par défaut afin que tous les fichiers aient le bit exécutable défini .
la source
Il semble que la
ls
commande que vous exécutez soit un alias pourls --color
Vous pouvez le vérifier en exécutant l'origine
ls
:Utilisation de guillemets:
"ls" -a
Utiliser le chemin complet (par exemple si l'
ls
emplacement est/bin/ls
dedans) et voir s'il montre les couleurs ou non:/ bin / ls -a
Remarque: l'exécution
ls -la
vous montrera les détails des fichiers, et vous pourrez voir tous les détails de chaque fichier, ce qui vous permettra de vérifier avec la sortie attendue dels --color
la source
\ls -a
ou utilisez la commande intégrée de commande ',command ls -a
. Si vous voulez voir comment une commande se résout, plutôt que de l'exécuter, c'est le castype -a ls
.ls
.ls
. Mais c'est une bonne information.La couleur indique que le fichier est marqué comme "exécutable" *
Les bits d'autorisation exécutables (un pour l'utilisateur, un pour le groupe, un pour l'autre) signifient que si le nom du fichier est transmis à l'un des appels système exec, le noyau ira de l'avant et essaiera de l'exécuter.
La convention est que seuls les fichiers qui sont réellement destinés à être exécutés ont le bit exécutable défini. Cependant, lors du déplacement / copie de fichiers, en particulier dans un environnement multiplateforme, il est facile de gagner ou de perdre par inadvertance les bits exécutables.
Les fichiers stockés sur un système de fichiers qui ne prend pas en charge les autorisations Unix (fat, ntfs, etc.) sont susceptibles d'apparaître sur le système comme exécutables. Le déplacement ou la copie de ces fichiers vers un système de fichiers Unix à l'aide d'un outil qui préserve les autorisations préservera alors ces bits exécutables.
D'un autre côté, l'utilisation d'outils pour déplacer des fichiers qui ne peuvent pas conserver les autorisations ou qui sont utilisés avec l'option de conservation des autorisations désélectionnées risque de ne pas marquer la copie comme exécutable même si l'original l'a été.
Ainsi, après avoir été déplacé sur diverses plates-formes à l'aide d'une variété d'outils, les bits d'autorisation exécutables peuvent se retrouver dans un état assez arbitraire.
* Je ne suis pas sûr à 100% de la façon dont ls gère le cas où certains mais pas tous les bits exécutables sont définis.
la source
Comme indiqué dans les réponses précédentes, la coloration consiste à indiquer si les fichiers sont considérés comme exécutables ou non.
L'autorisation "exécuter" (= bit) sous Linux et la plupart des autres Unix a une signification pour les fichiers et une autre pour les répertoires.
Pour les répertoires, si vous y êtes autorisé à exécuter, vous pouvez voir son contenu. Si vous ne le faites pas, vous ne pouvez pas accéder au répertoire dans le répertoire, ni y lister les fichiers, même si vous disposez d'un accès en lecture et en écriture au répertoire.
Pour les fichiers normaux (par opposition aux fichiers de périphérique et à d'autres types de fichiers Unix spéciaux), le bit d'exécution signifie que si vous utilisez le nom de fichier sur la ligne de commande, le O / S (ou plus précisément: shell) essaiera d'exécuter ou d'exécuter le fichier en tant que commande. Inversement, si vous ne disposez pas de l'autorisation d'exécution sur le fichier, vous ne pouvez pas l'exécuter à partir de la ligne de commande.
Ainsi, si vous, par exemple, supprimez l'autorisation x de tous les utilisateurs du fichier / bin / cat (qui est une commande Unix), vous-même ou quelqu'un d'autre et tout programme qui essaie d'utiliser la commande "cat" échouera.
Ce sont alors les commandes du système d'exploitation, telles que "cat" et "grep", qui ont généralement des fichiers exécutables dans les répertoires / * / bin / - / bin, / usr / bin, / sbin, / usr / sbin etc.
Et puis il peut y avoir des scripts interprétés non compilés, qui sont soit écrits dans certains langages de programmation, tels que Python ou des scripts shell (en gros, les commandes que vous écrivez comme si à partir de la ligne de commande lors de la transmission au serveur).
Maintenant, lorsque vous définissez le bit d'exécution sur le fichier de script (par exemple, le fichier foobar) et essayez de l'exécuter par votre shell: "./foobar", le shell essaie d'analyser le fichier et de trouver le programme approprié pour passer le script à.
Le shell le fait en essayant de lire la première ligne du fichier et en trouvant la notation "shebang" du programme que cela est censé exécuter.
Donc, si votre foobar était un fichier texte avec la première ligne comme ceci:
Ensuite, le shell essaierait d'exécuter la commande
/usr/bin/python foobar
:, invoquant essentiellement l'interpréteur python et lui passant le nom de votre fichier foobar en tant que script Python.Si shell ne trouve pas une telle première ligne dans votre fichier, il essaiera alors d'exécuter foobar lui-même comme s'il contenait des commandes shell.
Si le fichier avec un bit exécutable ne contient pas de commandes shell valides, le shell se plaindra simplement.
C'est donc ce qui se passerait, si vous avez des fichiers TTF avec un bit exécutable défini et que vous essayez de l'exécuter à partir de la ligne de commande:
Donc, pour les polices, c'est probablement plus propre, si le bit exec n'est pas défini, mais ne change vraiment rien.
PS Juste quelques informations superflues. Si vous supprimez le bit d'exécution d'une commande ou d'un script, il peut toujours être transmis à tout autre programme en tant qu'argument. Si cet autre programme sait comment exécuter votre commande, la suppression du bit d'exécution n'a pas vraiment d'importance. Par exemple, le script foobar Python serait toujours exécuté par l'interpréteur Python, si vous le faisiez simplement à partir de la ligne de commande:
au lieu de
Idem avec l'exemple des commandes système, telles que "cat". Si vous supprimez le bit d'exécution de "cat", vous pouvez toujours le passer à une nouvelle instance de shell pour exécution:
fonctionnera, même si vous avez supprimé le bit d'exécution de cat et
non.
la source
cat
ouecho
ne vous permet pas de l' exécuter viash -c 'cat myfile'
, ni avec dessystem("cat", "myfile")
langages comme Ruby. La raison pour laquelle Python peut exécuter des.py
fichiers non exécutables est qu'il les lit comme une chaîne de texte, puis utilise un interpréteur pour que ce texte se comporte comme s'il s'agissait de code.execve
appel système insiste sur l'autorisation d'exécution. Sur les systèmes basés sur la glibc, vous pouvez invoquer l'éditeur de liens dynamique en tant que programme pour obtenir approximativement le même effet qu'une ligne shebang (/lib64/ld-linux-x86-64.so.2 /bin/cat
) et cela fonctionne pour moi même si le fichier sur la ligne de commande n'est pas exécutable, maissh -c cat
ne le fera pas. pour vous.