Ich habe einige Schriftdateien auf AWS (unter Amazon Linux) hochgeladen und sie /usr/share/fonts
mit einem cp
Befehl in .ebextensions in das Verzeichnis verschoben.
Wenn ich SSH von meinem Mac aus einnehme und benutze ls -a
, sehe ich, dass einige Dateien unterschiedlich gefärbt sind - ein Satz von Schriftdateien ist schwarz, während andere grün sind. Ich bin gespannt, warum dies so war und ob es Probleme für meinen Code gibt .
Aus einer anderen Antwort auf AskUbuntu habe ich diesen Schlüssel zur Interpretation dieser Farben gefunden. Ich kann nicht verstehen, warum eine .ttf-Datei ausführbar ist oder warum eine Gruppe von .ttfs erkannt wird und keine andere.
Blau: Verzeichnis
Grün: Ausführbare oder erkannte Datendatei
Himmelblau: Verknüpfte Datei
Gelb mit schwarzem Hintergrund: Gerät
Pink: Grafikbilddatei
Rot: Archivdatei
Diese Dateien wurden vor dem Hochladen von verschiedenen Schriftarten auf einen Mac heruntergeladen.
quelle
Antworten:
ls -l
wird Ihnen definitiv sagen, ob eine Datei ausführbar ist oder nicht. Ich glaube nicht, dass es hier ein großes Geheimnis gibt. Sie haben Dateien aus verschiedenen Quellen heruntergeladen, für die möglicherweise aus dem einen oder anderen Grund unterschiedliche Berechtigungsbits festgelegt wurden. * Wenn Sie einige nicht gerne mit Farben und andere ohne Versuch sehen möchtenchmod -x *.ttf
... Für Schriftdateien sollte das ausführbare Bit nicht gesetzt sein.* In dem hoch bewerteten Kommentar von Matteo Italia, der beibehalten werden sollte, heißt es: Höchstwahrscheinlich wurden sie von einem FAT- oder NTFS-Volume kopiert, auf dem das ausführbare Bit nicht gespeichert ist. Sie werden daher standardmäßig bereitgestellt, sodass für alle Dateien das ausführbare Bit gesetzt ist .
quelle
Es scheint, dass der
ls
Befehl, den Sie ausführen, ein Alias für istls --color
Sie können dies überprüfen, indem Sie den Ursprung ausführen
ls
:Verwenden von Anführungszeichen:
"ls" -a
Verwenden Sie den vollständigen Pfad (z. B. wenn sich der
ls
Standort befindet/bin/ls
) und prüfen Sie, ob die Farben angezeigt werden oder nicht:/ bin / ls -a
Hinweis: Beim Ausführen
ls -la
werden Ihnen die Details der Dateien angezeigt, und Sie können die vollständigen Details jeder Datei anzeigen, sodass Sie die erwartete Ausgabe von überprüfen könnenls --color
quelle
\ls -a
oder den eingebauten 'Befehl' verwendencommand ls -a
. Wenn Sie sehen möchten, wie ein Befehl aufgelöst wird, anstatt ihn auszuführen, gibt es einentype -a ls
.ls
.ls
. Aber es sind gute Informationen.Die Farbe zeigt an, dass die Datei als "ausführbar" markiert ist *
Die ausführbaren Berechtigungsbits (eines für den Benutzer, eines für die Gruppe, eines für das andere) bedeuten, dass der Kernel, wenn der Name der Datei an einen der Exec-Systemaufrufe übergeben wird, fortfährt und versucht, ihn auszuführen.
Konvention ist, dass nur Dateien, die tatsächlich ausgeführt werden sollen, das ausführbare Bit gesetzt haben. Beim Verschieben / Kopieren von Dateien, insbesondere in einer Umgebung mit mehreren Plattformen, ist es jedoch leicht, versehentlich die ausführbaren Bits zu gewinnen oder zu verlieren.
Dateien, die auf einem Dateisystem gespeichert sind, das keine Unix-Berechtigungen (fat, ntfs usw.) unterstützt, werden dem System wahrscheinlich als ausführbar angezeigt. Wenn Sie diese Dateien mit einem Tool, das Berechtigungen beibehält, in ein Unix-Dateisystem verschieben oder kopieren, bleiben diese ausführbaren Bits erhalten.
Die Verwendung von Tools zum Verschieben von Dateien, die entweder keine Berechtigungen beibehalten können oder mit der Option zum Beibehalten nicht ausgewählter Berechtigungen verwendet werden, führt wahrscheinlich dazu, dass die Kopie nicht als ausführbar markiert wird, obwohl das Original vorhanden war.
Nachdem die ausführbaren Berechtigungsbits mit verschiedenen Tools auf verschiedenen Plattformen verschoben wurden, können sie in einem ziemlich willkürlichen Zustand enden.
* Ich bin nicht 100% sicher, wie ls mit dem Fall umgeht, in dem einige, aber nicht alle ausführbaren Bits gesetzt sind.
quelle
Wie bereits in früheren Antworten erwähnt, gibt die Farbgebung an, ob die Dateien als ausführbar angesehen werden oder nicht.
Die Berechtigung "Ausführen" (= Bit) unter Linux und den meisten anderen Unixen hat eine Bedeutung für Dateien und eine andere für Verzeichnisse.
Wenn Sie für Verzeichnisse über Ausführungsberechtigungen verfügen, können Sie deren Inhalt anzeigen. Wenn Sie dies nicht tun, können Sie weder eine CD in das Verzeichnis erstellen noch Dateien darin auflisten, selbst wenn Sie sowohl Lese- als auch Schreibzugriff auf das Verzeichnis haben.
Bei regulären Dateien (im Gegensatz zu Gerätedateien und anderen speziellen Unix-Dateitypen) bedeutet das Ausführungsbit, dass das Betriebssystem (oder genauer: die Shell) versucht, "auszuführen" oder auszuführen, wenn Sie den Dateinamen in der Befehlszeile verwenden die Datei als Befehl. Wenn Sie dagegen keine Ausführungsberechtigung für die Datei haben, können Sie sie nicht über die Befehlszeile ausführen.
Wenn Sie beispielsweise die x-Berechtigung von allen Benutzern in der Datei / bin / cat (bei der es sich um einen Unix-Befehl handelt) entfernen, schlagen Sie selbst oder andere Personen und jedes Programm, das versucht, den Befehl "cat" zu verwenden, fehl.
Dies sind dann die Betriebssystembefehle wie "cat" und "grep", die normalerweise ausführbare Dateien in / * / bin / Verzeichnissen - / bin, / usr / bin, / sbin, / usr / sbin usw. enthalten.
Und dann kann es nicht kompilierte, interpretierte Skripte geben, die entweder in einer Programmiersprache wie Python oder Shell-Skripten geschrieben sind (im Grunde Befehle, die Sie wie von der Kommandozeile aus schreiben, wenn Sie zum Server senden).
Wenn Sie nun das Ausführungsbit für die Skriptdatei (z. B. Datei foobar) setzen und versuchen, es von Ihrer Shell auszuführen: "./foobar", versucht die Shell, die Datei zu analysieren und das richtige Programm zum Übergeben des Skripts zu finden zu.
Dies tut die Shell, indem sie versucht, die erste Zeile der Datei zu lesen und die "shebang" -Notation des Programms zu finden, das ausgeführt werden soll.
Wenn Ihre Foobar also eine Textdatei mit der ersten Zeile wie folgt war:
Dann würde die Shell versuchen, den Befehl: auszuführen
/usr/bin/python foobar
, indem sie im Grunde den Python-Interpreter aufruft und den Namen Ihrer Foobar-Datei als Python-Skript an sie übergibt.Wenn die Shell eine solche erste Zeile in Ihrer Datei nicht finden würde, würde sie versuchen, foobar selbst so auszuführen, als ob sie Shell-Befehle enthalten würde.
Wenn die Datei mit dem ausführbaren Bit jedoch keine gültigen Shell-Befehle enthält, würde sich die Shell einfach beschweren.
Dies würde also passieren, wenn Sie TTF-Dateien mit gesetztem Exec-Bit haben und versuchen, es über die Befehlszeile auszuführen:
Für Schriftarten ist es wahrscheinlich ordentlicher, wenn das Exec-Bit nicht gesetzt ist, aber nichts wirklich ändert.
PS Nur ein paar irrelevante Informationen. Wenn Sie das Ausführungsbit eines Befehls oder Skripts entfernen, wird es möglicherweise weiterhin als Argument an ein anderes Programm übergeben. Wenn dieses andere Programm weiß, wie Sie Ihren Befehl ausführen, war das Entfernen des Exec-Bits nicht wirklich wichtig. Zum Beispiel würde das foobar Python-Skript immer noch vom Python-Interpreter ausgeführt, wenn Sie dies einfach über die Befehlszeile tun würden:
Anstatt von
Gleiches gilt für das Beispiel der Systembefehle wie "cat". Wenn Sie das Exec-Bit von "cat" entfernen, können Sie es dennoch zur Ausführung an eine neue Shell-Instanz übergeben:
wird funktionieren, auch wenn Sie exec bit von cat und entfernt haben
nicht.
quelle
cat
oderecho
nicht nicht Sie es über laufen lassensh -c 'cat myfile'
, noch mitsystem("cat", "myfile")
in Sprachen wie Ruby. Der Grund, warum Python nicht ausführbare.py
Dateien ausführen kann , besteht darin, dass es sie als Textzeichenfolge einliest und dann einen Interpreter verwendet, damit sich dieser Text so verhält, als wäre er Code.execve
Systemaufruf auf einer Ausführungsberechtigung. Auf glibc-basierten Systemen können Sie den dynamischen Linker als Programm aufrufen, um ungefähr den gleichen Effekt wie eine shebang-Zeile (/lib64/ld-linux-x86-64.so.2 /bin/cat
) zu erzielen. Dies funktioniert bei mir auch dann, wenn die Datei in der Befehlszeile nicht ausführbar ist, dies abersh -c cat
nicht tut für dich.