So finden Sie fehlenden C-Code

9

Ich habe ein Legacy-Entwicklungssystem geerbt, das schlecht dokumentiert ist und dessen Quellcode nicht bekannt ist, wenn er noch verfügbar ist.

Jetzt konnte ich einen Teil des Quellcodes finden und tatsächlich einen Teil des Systems erstellen.

Ich frage mich, ob ich den Rest des Quellcodes finden kann und ob es einen besseren Weg gibt, als locate *.cdie Dateien manuell zu überprüfen (so habe ich einen Teil des Codes gefunden).

Es gibt 3 Maschinen und nur eine, auf der ich den Quellcode gefunden habe, der eine Entwicklungsmaschine zu sein scheint. Es hat auch 61 .debArchive, die die Paketversionen der Projekte zu sein scheinen, aber ein Blick in die .debArchive zeigt, dass sich die Quelle nicht in den Archiven befindet oder zumindest nicht dort, wo ich gesucht habe.

Gibt es eine gute Möglichkeit, ein gesamtes Laufwerk nach Quellcode zu "scannen"?

Niklas
quelle

Antworten:

9

Dies wird Ihre allgemeinere Frage nicht beantworten, aber in Ihrem speziellen Fall lohnt es sich, nach dem entsprechenden Quellcode zu suchen, da Sie Pakete auf dem System haben:

find / -name \*.orig.tar\* -o -name \*.dsc

Dies sucht nach Quellarchiven, die so benannt sind, wie es die Debian-Tools zum Erstellen von Paketen erwarten, und nach Quellpaket-Steuerdateien. Wenn Sie diese finden, suchen Sie nach .debian.tar*oder .diff.gzDateien neben ihnen. Alle diese Dateien zusammen würden Ihnen den Quellcode und die Erstellungsregeln zusammen mit allen Paketmetadaten geben.

Sie können auch nach entpackten Steuerdateien suchen:

find / -name control

Diese befinden sich normalerweise im debianUnterverzeichnis der Quelle eines Pakets, das alles enthalten sollte, was Sie zum Neuerstellen des Pakets aus der Quelle benötigen.

Stephen Kitt
quelle
1
auch : find / -wholename '*/debian/rules'. oder (schneller, wenn mlocate installiert ist)locate -r /debian/rules$
cas
2
@cas Ich versuche hier auf Nummer sicher zu gehen. Ich habe einige sehr merkwürdige Setups zum Erstellen von Debian-Paketen gesehen. locatewäre schneller, aber ich war in der Vergangenheit enttäuscht, es auf wiederhergestellten Systemen locateauszuführen, die bereinigt wurden - die Datenbank ist noch neu über den Quellcode, der weg war. (Das kann immer noch eine nützliche Information sein, wenn Backups verfügbar sind ...)
Stephen Kitt
1
Unter unix.stackexchange.com/questions/382857 sind dies keine Debian-Pakete.
JdeBP
1
@JdeBP Ich ging von "Es hat auch 61 .debArchive, die die Paketversion der Projekte zu sein scheint" (sic).
Stephen Kitt
2
@DjDac, das ist in Ordnung. Ich findversuche nur , Dateien zu lesen, /procdie zwischen dem Zeitpunkt, zu dem finddie Liste der Dateien erstellt wird, und dem Zeitpunkt, zu dem sie gelesen werden , verschwinden . Sie können /procganz überspringen .
Stephen Kitt
1

Normalerweise verwende ich eine Kombination von Skripten für die Arbeit mit Quelldateien. Genau wie die obige Antwort wird dies Ihren Fall nicht genau lösen, aber die Suche nach Symbolen kann beim Auffinden von Quelldateien hilfreich sein.

Folgendes wird hinzugefügt zu bashrc:

function list-code-files() {
    find -type f \( \
        -name '*.cpp' -o \
        -name '*.java' -o \
        -name '*.php' -o \
        -name '*.[chS]' -o \
        -name 'Makefile' -o \
        -name '*.mk' \
        \) -print0
}

function csym() {
    list-code-files | xargs -0 grep -ne "$1"
}

Dann kann ich Quelldateien mit auflisten list-code-files | xargs -0 echooder mit Symbolen nach Symbolen suchencsym some-symbol-regexeg

Kotte
quelle