В системах Unix, является ли файл исполняемым файлом или не зависит только от его полномочий, не от его имени или его содержания. (Если формат файла не будет допустимым исполняемым файлом, то система попытается выполнить и рассматривать его как одну из возможных ошибок при выполнении программы, вместе с недостаточными ресурсами, недостающими библиотеками, и т.д.),
Большинство файлов, которые Вы загружаете с сети, не предназначено, чтобы быть исполняемым файлом, таким образом, завихрение не пытается сделать исполняемый файл файла. Даже если бы файл был предназначен, чтобы быть выполненным, то Вы не могли бы хотеть выполнять его теперь; например, Вы могли бы хотеть рассмотреть его и только сделать исполняемый файл файла, если это передает Ваш обзор.
С другой стороны, gcc или любой другой компилятор намеревается произвести исполняемую программу, таким образом, не удивительно, что это сделало бы необходимые шаги. С gcc это - одна из последних стадий процесса компиляции. Можно наблюдать его с strace:
$ strace -f gcc a.c
…
23429 execve("/usr/bin/ld", ["/usr/bin/ld", "--eh-frame-hdr", "-m", "elf_i386", "--hash-style=both", "-dynamic-linker", "/lib/ld-linux.so.2", "-z", "relro", "/usr/lib/gcc/i486-linux-gnu/4.3."..., "/usr/lib/gcc/i486-linux-gnu/4.3."..., "/usr/lib/gcc/i486-linux-gnu/4.3."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/usr/lib/gcc/i486-linux-gnu/4."..., "-L/lib/../lib", ...], [/* 82 vars */]) = 0
…
23429 chmod("a.out", 0755) = 0
23429 exit_group(0) = ?
…
Другими словами, компоновщик, который является последней стадией в компиляции и производит исполняемый файл, изменяет полномочия на выходном файле, чтобы быть исполняемым файлом как его самым последним шагом.
Для первого вы используете --print-debs
, который показывает список пакетов, которые будут загружены для конкретной цели. Во-вторых, вы можете использовать --include
/--exclude
переключатели для этой задачи:
--include=alpha,beta
Comma separated list of packages which will be added to download
and extract lists.
--exclude=alpha,beta
Comma separated list of packages which will be removed from
download and extract lists. WARNING: you can and probably will
exclude essential packages, be careful using this option.
Обратите внимание, что это похоже на "установить базу плюс пакеты" или "установить базовые минус пакеты". Базовые пакеты устанавливаются всегда.