Как системные команды как ls созданы?

Fro первый вопрос, в основном, Вы даете слишком много параметры test там (мне кажется, что первая строка того, что Вы вставили, является на самом деле 4-й строкой Вашего сценария). Если Ваш случай нескольких файлов, Вы будете иметь test -f file1 file2 file3… в то время как test ожидал бы бинарного оператора (например, "-a" для И) после -f file1 и следующее выражение после этого и так далее.

Что касается предоставления и обработки параметров для Вашего сценария для автоматического удаления файлов, не прося подтверждение можно использовать то же test на 1$ (это будет первым параметром командной строки Вашего сценария).

19
21.08.2018, 05:59
2 ответа
[112537]Вы можете определить природу исполняемого файла в Unix, используя команду [113029]file[113030] и команду [113031]type[113032].

тип

Вы используете [113033]тип[113034] для определения местоположения исполняемого файла на диске следующим образом:

Так что теперь я знаю, что [113035]ls[113036] находится здесь в моей системе в 2-х местах:[113037]/usr/bin/ls[113038] и [113039]/bin/ls[113040]. Глядя на эти исполняемые файлы, я вижу, что они идентичны:

ПРИМЕЧАНИЕ:[113042] Вы можете подтвердить их идентичность, используя [113043]cmp[113044] или [113045]diff[113046].

с diff

с cmp

Используя file


Если я запрошу их с помощью команды [113047]file[113048]:

Таким образом, это будут настоящие физические программы, скомпилированные на языке Си/Си++. Если бы это были скрипты оболочки, они бы обычно представляли собой [113049]file[113050]:

  • What's ELF?

  • ELF - это формат файла[113052], это выходной файл компилятора типа [113053]gcc[113054], который используется для компиляции Си/Си++ программ типа [113055]ls[113056].

  • В вычислениях исполняемый и связующий формат (ELF, ранее называвшийся расширяемым связующим форматом) является общим стандартным форматом файлов для исполняемых файлов, объектного кода, общих библиотек и дампов ядра.

  • В имени файла обычно используется одно из следующих расширений: none, .o, .so, .elf, .prx, .puff, .bin[112564].

31
27.01.2020, 19:44
[112531] Это двоичный исполняемый файл (скомпилированный в машинный код, как и большая часть системы). Скрипты оболочки больше похожи на "склейку", чтобы соединять части вместе и быстро и гибко создавать решения из существующего материала. В этом сила *nix.

Вам нужен исходный код (c, иногда c++, наиболее распространенные языки на *nix), а не просто скомпилированный исполняемый файл. Так как это открытый исходный код, вы можете получить код для всего из онлайн репозиториев (основные утилиты обычно из проекта gnu). Однако, это немного сложно, если вы не знаете, как использовать git или другие системы отслеживания версий.

Вот файл ls.c, если это поможет: [113027]http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c

9
27.01.2020, 19:44

Теги

Похожие вопросы