Как найти отсутствующий код C

9

Я унаследовал устаревшую систему разработки, которая плохо документирована, а исходный код неизвестен, если она все еще доступна.

Теперь я мог бы найти часть исходного кода и фактически собрать одну часть системы.

Интересно, смогу ли я найти оставшуюся часть исходного кода и есть ли лучший способ, чем locate *.cручная проверка файлов (именно так я нашел часть кода).

Есть 3 машины, и только на одной я нашел исходный код, который, похоже, является машиной для разработки. У этого также есть 61 .debархив, который, кажется, является упакованными версиями проектов, но просмотр .debархивов показывает, что источник не находится в архивах или, по крайней мере, не там, где я смотрел.

Есть ли хороший способ "сканировать" весь диск на наличие исходного кода?

Никлас
источник

Ответы:

9

Это не ответит на ваш более общий вопрос, но в вашем конкретном случае, поскольку у вас есть пакеты в системе, стоит поискать соответствующий исходный код:

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

Это будет искать исходные архивы, названные так, как ожидают инструменты сборки пакетов Debian, и файлы управления пакетами исходного кода. Если вы найдете их, найдите .debian.tar*или .diff.gzфайлы рядом с ними. Все эти файлы вместе дадут вам исходный код и правила сборки, а также все метаданные пакета.

Вы также можете найти распакованные контрольные файлы:

find / -name control

Обычно они debianнаходятся в подкаталоге исходного кода пакета, который должен содержать все, что нужно для перекомпоновки пакета из исходного кода.

Стивен Китт
источник
1
также: find / -wholename '*/debian/rules'. или (быстрее, если установлен mlocate)locate -r /debian/rules$
cas
2
@cas Я пытаюсь быть осторожнее, я видел несколько очень странных настроек для сборки пакетов Debian. locateбыло бы быстрее, но я был разочарован тем, что в прошлом запускал его на восстановленных системах, которые были очищены - locateбаза данных все еще была новой относительно исходного кода, который исчез. (Это все еще может быть полезной информацией, если резервные копии доступны ...)
Стивен Китт
1
Судя по unix.stackexchange.com/questions/382857 , это не пакеты Debian.
JdeBP
1
@JdeBP Я говорил: «У него также есть 61 .debархив, который, похоже, является упакованной версией проектов» (sic).
Стивен Китт
2
@DjDac это нормально, просто findпытаюсь читать файлы, в /procкоторых исчезает время между созданием findсписка файлов и временем их чтения. Вы можете /procполностью пропустить .
Стивен Китт
1

Я обычно использую комбинацию скриптов для работы с исходными файлами. Точно так же, как ответ выше, это не решит точно ваш случай, но поиск символов может помочь в поиске исходных файлов.

Следующее добавлено к 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"
}

Затем я могу перечислить исходные файлы, используя list-code-files | xargs -0 echo, или искать символы, используяcsym some-symbol-regexeg

Котте
источник