Ich habe festgestellt, dass die meisten meiner Befehle / Programme im Verzeichnis / bin kompiliert sind. Ich möchte dieses nicht lesbare Codeformat selbst duplizieren. Kann mir jemand sagen warum und / oder wie diese Programme so kommen?
[Bonus für grüne Stempel]: Gibt es nicht einen Bash-Befehl, um den gesamten "von Menschen lesbaren" Text aus einer Datei zu drucken?
bash
compiling
programming
surgemcgee
quelle
quelle
/bin
und/usr/bin/
Verzeichnisse enthalten auch Befehle , die in Skriptsprachen geschrieben werden , wiesh
,bash
,perl
,python
, etc ... Versuchen Sie ,file /bin/* | less
in einem Terminal.Antworten:
Die Befehle / Programme in
/bin
sind nicht lesbar , aber sie werden, wie Sie sagen, kompiliert. Dies bedeutet, dass sie ursprünglich in C (oder einer anderen Programmiersprache) geschrieben und in Maschinencode (binär) kompiliert wurden, damit der Prozessor den Code ausführen kann. Um dasselbe zu tun, schreiben Sie einfach das gewünschte Programm in C und führen Sie dengcc
Befehl aus, um eine ausführbare Datei zu erstellen.Verwenden Sie zum Drucken von lesbarem Text in einer Datei Folgendes
strings < /bin/file
:quelle
Einführung
Wenn ein Programm beispielsweise aus C- oder C ++ - Quellcode kompiliert wird, übersetzt ein Compiler wie
gcc
(siehe unten) diesen Code in die native Binärsprache der CPU, damit das Programm ausgeführt werden kann. Somit wird menschlich lesbares Material (Quellcode) in ein nicht menschlich lesbares Format (maschinenlesbarer Binärcode) umgewandelt.Binärdateien und das Dateisystem
Wenn Sie eingeben
echo $PATH
, sehen Sie einen Speicherort aller ausführbaren Dateien auf dem System, sowohl kompilierte Binärdateien als auch Skripte:In den Dateisystem - Hierarchieschlüssel Systemprogramme wie
cat
undgetty
vorhanden sind , in/bin
und/sbin
bzw. und anderen Werkzeugen , wie beispielsweisedpkg
undchroot
vorhanden sind in ,/usr/bin
und/usr/sbin
auf. Wenn Sie ein Programm kompilieren, indem Sie den Quellcode herunterladen, den Build konfigurieren und installieren, sollte Ihr Programm standardmäßig in/usr/local/bin
die anderen Dateien in der/usr/local
Hierarchie aufgenommen werden.Compiler
Wahrscheinlich ist eines der bekanntesten Tools zum Kompilieren von Binärdateien das
gcc
, das als GNU Compiler Collection und früher als GNU C Compiler bekannt ist. Die mit Ubuntu 12.04 gelieferte Version istgcc 4.6.3
. Wie im offiziellen GNU- Handbuch vermerkt ,Eine Binärdatei kompilieren
Die drei Befehle
./configure
,make
undsudo make install
(odersudo checkinstall
) werden oft gemeinsam verwendet , um ein Programm zu kompilieren.Beim Ausführen
./configure
wird unter anderem diegcc
installierte Version überprüft und die Build-Umgebung vorbereitet. Diesmakefile
ist eines der wichtigsten Dinge, die beim Ausführen generiert werden,./configure
da es den Build beimmake
Ausführen steuert . Die GNU macht manuelle Details des Prozesses in großer Tiefe. Zusammenfassendmakefile
bestimmen die Regeln im Hauptziel (Erstellen einer ausführbaren Datei), sodass die Quellcodedateien.c
zu kompilierten Dateien (.o
Dateien) verarbeitet werden, um die ausführbare Zieldatei zu generieren.Ressourcen
Zwei großartige Ressourcen sind diese Ubuntu-Kompilierungshandbücher hier und hier , die einige großartige Ratschläge und Informationen für diejenigen enthalten, die neu in der Kompilierung sind. Andere Ressourcen wie das GNU-
gcc
Handbuch und dasmake
Handbuch, das ich bereits erwähnt habe. Weitere Informationen zu C und zum Erstellen eines einfachen kleinen C-Programms finden Sie in Kapitel 22 von Rute und Kapitel 24 der Linux-Befehlszeile .quelle
Um Bash-Programme in Binärdateien zu kompilieren (ich gehe davon aus, dass Sie nach Bash fragen, weil Ihre Frage mit bash markiert ist), sollten Sie das Programm Shc verwenden. Sie können es hier herunterladen . Nachdem Sie das Archiv entpackt haben, kompilieren und installieren Sie shc mit
cd shc-3.8.9;make;sudo make install
. Führen Sie nun ausshc -f filename
, wobei Dateiname der Pfad zu der Datei ist, die Sie in ein nicht lesbares Codeformat umwandeln möchten. Shc erstellt zwei Dateien: Dateiname.xc und Dateiname.x . Sie können filename.xc entfernen , Dateiname ist die nicht lesbare Datei.quelle
Eine Option : Wenn Sie sehen möchten, was in den kompilierten Programmen enthalten ist, verwenden Sie ein Tool wie objdump, um den Objektcode auszugeben, zum Beispiel:
quelle
Es gibt 10 verschiedene Arten von Menschen. Vermutlich gehören Sie zur zweiten Gruppe ...: P.
Es gibt nur Binärdateien im bin-Verzeichnis (Binaries = Programme im Binärcode, nur 1 und 0)
Sie sind so kompiliert, dass sie maschinenlesbar sind. Maschinen kennen 1 und 0 oder ein und aus, wahr oder falsch, sonst nichts.
Dies wird von einem Compiler durchgeführt. Es gibt mehr als einen Compiler. Ich kann mir den Gnucc-Compiler oder den Java-Compiler oder einen Delphi-Compiler vorstellen ... Verschiedene Compiler für verschiedene Programmiersprachen.
Versuchen Sie es mit grep. Viel Glück!
quelle