Исходят ли общие программы (например: «ls», «cat») в Linux и BSD из одного и того же исходного кода? [дубликат]

Ну, просто для забавы, обязательное решение для awk ....

Я разработал эту единственную строку bash, которая тоже работает

buildit(){ Req=$(grep -oP '(?<=GET \/).*(?=HTTP)' $1); url=$(awk -F":" '/Host/{gsub(/ /, "",$2); print $2}' $1); echo "http://"$url"/"$Req; }

Это создает функцию bash в вашей оболочке, которую вы затем можете вызвать следующим образом

$ buildit testfile
http://my.website.com/_ajax_htmlview?action=28&__and_so_on

Однако есть предостережение - это будет работать, только если в файле есть только один экземпляр «Host» и «GET».

26
15.03.2019, 23:17
5 ответов
5
27.01.2020, 19:39

Linux — это ядро. Во-первых, у него нет кода для прикладных программ.

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

Они включают, но не ограничиваются:

BSD являются операционными системами. Они действительно содержат код этих программ. Однако единой операционной системы BSD не существует, и код таких программ иногда различается в NetBSD, FreeBSD, OpenBSD и DragonFly BSD. Более того, он определенно отличается от кода, используемого для нескольких операционных систем на базе Linux -.

Как известно,Apple/NeXT использовали прикладное программное обеспечение BSD в MacOS/NeXTSTEP, но улучшили несколько программ для поддержки ACL способами, отличными от способов, которыми это делали (другие )BSD. Например, управление доступом устанавливается с помощью команды chmod. Итак, дарвиновские версии этих команд снова отличаются.

Есть три дополнительных поворота.

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

Затем существуют BusyBox и ToyBox, доступные как для операционных систем на основе Linux -, так и для BSD, и даже используемые в качестве основных реализаций таких команд в некоторых из первых, которые имеют свои собственные реализации многих команды.

Кроме того, есть OpenSolaris, из которого вышли такие инструменты, как Illumos и Schillix, с реализациями Solaris всех этих инструментов, что опять же отличается.

Здесь есть целая история, включающая первоначальный раскол между BSD и AT&T Unix, усилия «PD» по клонированию многих программ Unix в конце 1980-х и 1990-х годах, примерно три десятилетия перетасовки после этого, все открытые -выпуск исходного кода для Solaris и повторная реализация нескольких вещей в OpenBSD. Даже в историях инструментов, которые могут ввести в заблуждение, есть одна реализация, такая как cron(, которую многие люди ошибочно считают оригинальным инструментом Unix, или ошибочно думают, что это по крайней мере одна единственная разновидность, написанная как «PD cron». Полом Викси в 1987 году, или не понимают, что аналогичные замены, написанные другими людьми в годы после ), не являются -тривиальными.

41
27.01.2020, 19:39

Are these programs in Linux and BSD the same?

Короткий ответ::Не обязательно.

Исходный код распространенных программ, таких как ls, cat, echo, killи т. д., зависит от пользовательского пространства , из которого они исходят. Другими словами, пространство пользователя, которое использует ваша система. Наиболее распространенным пользовательским пространством, используемым с ядром Linux, является GNU -, отсюда и название GNU/Linux. Однако другие пользовательские области были интегрированы с ядром Linux.

BSD обычно имеют собственное пользовательское пространство, которое разрабатывается отдельно от других, таких как GNU. Даже сами BSD имеют разные кодовые базы. Например, и FreeBSD, и OpenBSD имеют «пользовательскую среду BSD», но их кодовая база отличается. Если вы посмотрите на их справочные страницы (ps, например ), у них есть разные аргументы, которые можно использовать.

Одной из причин, по которой POSIX был разработан, было решение проблемы множественных кодовых баз. Если общие утилиты, поставляемые с пользовательским пространством, совместимы с POSIX, вы можете быть уверены, что они будут работать (почти )одинаково, независимо от того, получены ли они из GNU, FreeBSD, OpenBSD, AIX или других систем на базе UNIX.

Как вы, наверное, знаете, пользовательские пространства, перечисленные выше (, за исключением AIX ), имеют открытый исходный код. Не стесняйтесь ковыряться в их репозиториях кода, и вы быстро увидите, что они не совсем одинаковы.

Примечание :Несмотря на то, что GNU/Linux является наиболее популярным, в прошлом предпринимались попытки использовать пользовательское пространство GNU с ядрами FreeBSD/NetBSD. Подробнее о них можно прочитать в википедии здесь .

12
27.01.2020, 19:39

Во-первых, я понимаю под Linux GNU/Linux, то есть операционную систему, а Linux — это просто ядро.

Исходный код отличается. Команда GNU создала утилиты, вдохновленные существовавшими инструментами UNIX, и расширила некоторые из них.

GNU killи echoвстроены в оболочку -в Bash, оболочке по умолчанию в большинстве систем GNU, поэтому они поставляются с вашей оболочкой, как в bash.

lsи cat— разные, отдельные программы, вдохновленные UNIX lsи catсоответственно.

Существует история графа UNIX, объясняющая, откуда взялись вещи, как вы видите, GNU/Linux возникла без какой-либо прямой родословной.

enter image description here

Из разновидностей UNIX:которые относятся к системе разделения времени UNIX, все эти команды исходят из нее, однако они могли быть переписаны -несколько раз.

Вы можете сравнить исходный код FreeBSD cat с исходным кодом GNU cat .

Почему я не упоминаю GNU/Linux насквозь? Воды мутные, вы можете установить инструменты GNU на BSD, а также на другие системы UNIX, ну, вы даже можете установить их на Windows.

Debian, прославленный Debian GNU/Linux, на котором основаны Ubuntu и Mint (всего два примера ), предлагает дистрибутив GNU с ядром FreeBSD:GNU/kFreeBSD

Да,граф устарел...

4
27.01.2020, 19:39

В дополнение к приведенным выше правильным ответам,вы обнаружите, что оболочка по умолчанию на (почти? )В каждом дистрибутиве Linux используется bash, в то время как оболочка по умолчанию, по крайней мере, в OpenBSD и FreeBSD не является bash. Вероятно, это csh или ksh, но я уже пару лет не пользовался каким-либо вариантом BSD, поэтому я не совсем уверен. В любом случае, у него никогда не было функций bash, даже способ повторения предыдущей команды был совершенно другим. Различие в оболочках может повлиять на то, какие из более простых команд являются встроенными -командами оболочки, а какие — автономными программами.

Сейчас, когда несколько дистрибутивов предоставляют пространство пользователя GNU с ядром xBSD и, возможно, -наоборот, нет однозначного ответа на этот вопрос. Единственный абсолютно надежный способ узнать, что у вас есть в вашей системе, — это использовать ваш менеджер пакетов для загрузки исходного кода и его изучения или проверить его в строке -, если ваш дистрибутив имеет доступный для просмотра исходный код, хотя проверка применимой лицензии даст довольно хороший показатель.

1
27.01.2020, 19:39

Теги

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