.file "main.c"
Зачем в коде название файла с исходным кодом
Для генерации отладочной информации в формате DWARF.
.ident "GCC: (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0"
...и версия моей убунты?
Это не версия твоей убунты, это строка идентификации компилятора, в которой оказалось имя твоей ОС.
Попадают ли они в исполняемый файл при окончательно компиляции и зачем используются?
Имена файлов попадают в таблицу символов как символы типа FILE и в секцию отладочной информации:
$ readelf -a hello | grep FILE
28: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
37: 0000000000000000 0 FILE LOCAL DEFAULT ABS hello.c
38: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
41: 0000000000000000 0 FILE LOCAL DEFAULT ABS
Если отладочная информация включает в себя номера строк, то они тоже будут ссылаться на имя файла, ассоциируя диапазон адресов с номерм строки в конкретном исходном файле.
Идентификационная строка компилятора попадает в секцию
.comment
объектного файла, а оттуда -- в исполняемый файл:
$ objdump -s -j .comment hello
hello: file format elf64-x86-64
Contents of section .comment:
0000 4743433a 20284465 6269616e 20362e33 GCC: (Debian 6.3
0010 2e302d31 382b6465 62397531 2920362e .0-18+deb9u1) 6.
0020 332e3020 32303137 30353136 00 3.0 20170516.
Всё это можно от исполняемого файла отрезать командой strip, objcopy или соответствующим скриптом линковщика.