У меня есть некоторые сомнения относительно * nix.
Я не знаю, какой тип исполняемого файла
ls
, будь то .sh или .ksh или любой другой тип исполняемого файла системы, если это так, что это?Когда я попытался увидеть, как выглядит исходный код
ls
команды, он показывает что-то нечитаемое, какой метод * nix использует для создания этих типов нечитаемых файлов, и могу ли я сделать свои файлы похожими на эти файлы (например,ls
- нечитаемые).
shell
executable
architecture
Jeyanthinath
источник
источник
Ответы:
Вы можете определить природу исполняемого файла в Unix, используя
file
команду иtype
команду.тип
Вы используете,
type
чтобы определить местоположение исполняемого файла на диске следующим образом:Итак, теперь я знаю, что
ls
находится здесь, в моей системе в 2 местах:/usr/bin/ls
&/bin/ls
. Глядя на эти исполняемые файлы, я вижу, что они идентичны:ПРИМЕЧАНИЕ. Вы можете подтвердить, что они идентичны за пределами своих размеров, с помощью
с разницей с cmpcmp
илиdiff
.Используя файл
Если я запросить их с помощью
file
команды:Так что это будут реальные физические программы, которые были скомпилированы из C / C ++. Если бы они были сценариями оболочки, они обычно представлялись бы так
file
:Что ЭЛЬФ?
ELF - это формат файла , это вывод такого компилятора, как
gcc
, который используется для компиляции таких программ на C / C ++, какls
.Как правило, оно имеет одно из следующих расширений в имени файла: none, .o, .so, .elf, .prx, .puff, .bin
источник
type
везде, где вы соблазненыwhich
илиwhereis
.md5sum
илиsha1sum
, а не просто проверять размеры и время файла.coreutils-8.21-13.fc19.x86_64
и я просто знаю, что они идентичны за 20 лет работы с релизами Red Hat.Это исполняемый двоичный файл (скомпилированный в машинный код, как и большая часть системы). Сценарии оболочки больше похожи на «клей», чтобы объединять части, чтобы быстро и гибко создавать решения из существующих вещей. Это сила * nix.
Вам нужен исходный код (c, иногда c ++, наиболее распространенные языки в * nix), а не только скомпилированный исполняемый файл. Поскольку это открытый исходный код, вы можете получить код для всего из онлайн-хранилищ (основные утилиты обычно из проекта gnu). Тем не менее, это немного сложно, если вы не знаете, как использовать git или другие системы отслеживания версий.
Вот файл ls.c, если он помогает: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c
источник