LINUX.ORG.RU

Февральские тезисы о планах развития systemd

 ,


2

4

На прошедшей конференции FOSDEM Леннарт Поттеринг огласил некоторые перспективы развития systemd:

  • Интеграция в systemd загрузчика gummiboot, поддерживающего технологию UEFI Secure Boot.
  • machined — менеджер регистрации виртуальных машин, спроектированный под впечатлением от Solaris Zones.
  • В подсистеме nspawn и смежных с ней ожидается больше возможностей для управления контейнерами, например, journald сможет собирать логи не только с хоста, но и с контейнеров.
  • Уже в следующей версии ожидается улучшенная поддержка Btrfs (подразделы и снапшоты Btrfs планируется использовать для изоляции отдельных приложений).
  • Поддержка HiDPI и Юникода в consoled.
  • Сервис-ориентированный фаерволл: можно будет задавать правила в привязке не к номерам портов, а к именам процессов.
  • Отпадёт нужда указывать путь к юниту для systemctl-cat; systemctl-edit позволит редактировать юниты и после сохранения изменений автоматически перезапускать соответствующие сервисы.
  • nss-getmyhostname — функция для получения имени хоста на stateless-системах.
  • Утилита ping gateway позволит автоматически определить все доступные сетевые интерфейсы и проверить их статус командой ping.
  • Развитие networkd и собственной библиотеки для работы с DHCP (совместимой с dhcpv4 и dhcpv6).
  • Комбинирование nspawn и networkd позволит легко конфигурировать сеть для контейнеров.
  • Создание средств для широкого системного аудита, интегрированных в journald. Например, станет возможным логировать все системные вызовы к файлу /etc/passwd.
  • Движение в сторону stateless-систем, у которых только /usr доступен на чтение и запись, а /etc и /var будут автоматически заполняться systemd.
  • journald-remoting — удалённая работа логгера через HTTP. Поддержка в journald моделей pull и push: при pull выполняется запрос HTTP GET для получения потока JSON, а при push данные передаются в другой экземпляр journald при помощи HTTP POST.
  • Возможность определения для сервисов минимальных пространств имён и sandbox-изоляции: доступ к некоторым разделам и каталогам только на чтение, сокрытие устройств в /dev, приватный /tmp для каждого сервиса, и др.
  • timesyncd в качестве замены ntpd.
  • Автоматическое определение разделов GPT, не нуждающееся в указании их в fstab.
  • Поддержка перезапуска демонов без потери их состояния (посредством сохранения оного на диск).

>>> Подробности



Проверено: Shaman007 ()
Ответ на: комментарий от devzero

Спор по системд пожалуй нет смысла продолжать. Он скатился в чересчур эмоциональное обсуждение всяких околофилосовских вещей, а это мне скучно.

Puppy Linux, или как его там. Система гразится со squashfs. Если нужен дополнительный софт, то поверх неё каскадно монтируется дополнительные squashfs. Всё это счастье может быть полностью stateless: нажал reset, и снова в чистой системе. Если надо обновиться, образы заменяются целиком на новые.

Собственно, я про него и вспомнил. Однако мне не понравилось то, что он слишком сильно ориентирован на портабельность. И с установкой софта там проблема.
А я-же хочу получить полновесный десктоп со всеми ништяками вплодь до запущенного стима. Просто системная часть сразу оказывается в памяти, в то время как пользовательская лежит на винте. Идеально было-бы иметь в пакетном менеджере переключатель «хранить в squashfs<->хранить на винте».
Пожалуй попробую собрать нечто подобное на выходных.
Только пока есть сомнения, даст ли оно прирост производительности по сравнению с ureadahead.
Впрочем, должно. Squashfs мельче, не фрагментированный - а значит скопируется на диск намного быстрее, чем закешируются обычные файлы.

kir2yar ()
Ответ на: комментарий от devzero

зачем делить код на проекты

А вот теперь мне самому стало интересно, а правда, зачем?
Гугл истины не находит.

kir2yar ()
Ответ на: комментарий от intelfx

А теперь расскажите мне, почему обязательно надо придумывать невменяемый дебилизм типа

dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames

который хер когда кто запомнит, чтобы просто увидеть список доступных интерфесов вместо какого-нибудь стандартного ls -la /var/dbus И где, вашу мать, мне в / найти /org/freedesktop/DBus ?

Ладно там snmp c дурацкими оидами придумали, но оно как бы хоть как-то оправдано ибо должно в девайсах с килобайтом RAM работать. А вот это вот дерьмище типа org.freedesktop.govno.nasrat откуда, блин в *nixообразной системе выползло?

А, ещё такая блевотная мразота как UUID из винды переползла, сцуко.

Stanson ★★★★ ()
Ответ на: комментарий от redgremlin

На самом деле это проблема конкретного дистрибутива, а вовсе не sysvinit В слаке, например, таких ужасов отродясь не было, и надеюсь, никогда не будет, равно как и системд.

Stanson ★★★★ ()
Ответ на: комментарий от Stanson

Сначала ты расскажи мне, почему это невменяемый дебилизм. А то если убрать из твоего ответа всю эмоциональную часть, останется пустое сообщение.

ls -la /var/dbus

Напиши сам или возьми готовое.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от smith

Unix way

Так мы-же про линукс говорим.
Кроме того, этой философии даже само ядро не соответсвует, не то что весь остальной софт в современном десктопе. Да и с серверной частью наблюдается та-же фигня.


А теперь разбор полетов.

*Майк Ганцарз: Философия UNIX*

Красиво — небольшое.

См ниже «Правило экономности»

Пусть каждая программа делает что-то одно, но хорошо.

Соответствует настолько, насколько это возможно.
Каждая программа в проекте системд решает одну маленькую задачу.

Стройте прототип программы как можно раньше.

Соответствует.

Предпочитайте переносимость эффективности.

Не соответствует. Выбрали эффективность.

Храните данные в простых текстовых файлах.

Соответствует частично. Все, кроме журнала - чистый текст. Журнал - позволяет передавать свои данные в чистый текст, более того - это поведение «по умолчанию»

Обратите преимущества программных средств себе на пользу.

Сложно что-то сказать.

Используйте сценарии командной строки для улучшения функциональности и переносимости.

Не соответствует. Но и пункт под вопросом. Переносимость инит-скриптов весьма спорная вещь.

Избегайте пользовательских интерфейсов, ограничивающих возможности пользователя по взаимодействию с системой.

Соответствует частично. Под системд можно сделать все, что можно сделать под sysvinit или runit.

Делайте каждую программу «фильтром».

Не соответствует. Выбран другой путь развития.


*Реймонд: Искусство программирования в UNIX*

Правило модульности: Пишите простые части, соединяемые понятными интерфейсами.

dbus - вполне простая штука.
По сравнению с пайпами, которые через раз разбавляются awk`ом.

Правило ясности: Ясность лучше заумности.

Смотри случай с invoke-rc.d
Слишком много мелких деталек = повышенная сложность механизма.
Кроме того - системд в этом плане прозрачен.

Правило композиции: Разрабатывайте программы так, чтобы их можно было соединить с другими программами.

dbus в качестве клея, но да, этот принцип нарушен. Впрочем, он так-же нарушен ядром, хоргом, фаирфоксом, заббиксом, модулями астериска, да и остальными программами, которые сложнее hello world.

Правило разделения: Отделяйте правила (policy) от механизма (mechanism); отделяйте интерфейс от движка (engine).

Идеально соответствует в отличии от классических инитов.

Правило простоты: Нацельтесь на простоту; добавляйте сложность, только где необходимо.

Частично соответствует. Если отбросить «плагины» - соответствует полностью. Связи между мелкими программками - тоже сущность увеличивающая сложность системы в целом.

Правило экономности: Пишите большую программу только когда другими средствами выполнить необходимую задачу не удастся.

Скорее всего не соответствует. Технические доводы LP выглядят достаточно убедительными. По личному опыту сборки собственных дистрибутивов могу сказать, что вовсе не все задачи можно решить простыми средствами. И во многом - слабый init стоит комом в горле, заставляя пилить по сотни костылей для реализации простых вещей.

Правило прозрачности: Разрабатывайте прозрачные программы для облегчения последующего пересмотра и отладки.

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

Правило надёжности: Надёжность — дитя прозрачности и простоты.

Ну, тут написать нечего, ибо это не правило, а скорее следствие из правил.

Правило представления: Храните знания в данных так, чтобы логика программы была тупой и надёжной.

Полностью соответствует. Для того, что бы понять синтаксис конфигурационного файла systemd достаточно базовых знаний английского языка.
sysvinit полностью не соответсвует, нет стандарта представления данных. Данные не отделены от логики.

Правило наименьшего удивления: При разработке интерфейса всегда делайте как можно меньше неожиданных вещей.

Соответствует частично. В частности была история с неудачным таймаутом у fsck. В остальном - весьма предсказуемо работает. Интерфейс (считай синтаксис конфигурационных файлов) простой и понятный.

Правило тишины: Если программе нечего сказать, пусть лучше молчит.

Соответствует.

Правило восстановления: Если надо выйти из строя, делайте это шумно и как можно быстрее.

Соответствует частично. Можно вместо адекватной реакции на падение сервиса поставить перезапуск, что не соответствует этому правилу.

Правило экономии: Время программиста дорого; сократите его, используя машинное время.

Идеально соответствует, в отличии от скриптовых систем инициализации.

Правило генерации: Избегайте ручного набора кода; при любом удобном случае пишите программы, которые бы писали программы.

Идеально соответствует, в отличии от скриптовых систем инициализации.

Правило оптимизации: Сначала — опытный образец, потом — «причесывание». Добейтесь стабильной работы, только потом оптимизируйте.

Частично соответствует.

Правило многообразия: Отвергайте все утверждения об «единственно правильном пути».

Частично соответствует. В качестве цели для запуска можно указать что угодно, включая инит-скрипт.

Правило расширяемости: Разрабатывайте для будущего. Оно наступит быстрее, чем вы думаете.

Соответствует.


__
В принципе системд по большей части соответствует Unix way. Во всяком случае - не меньше, чем sysvinit.

kir2yar ()
Ответ на: комментарий от kir2yar

Многие думают, что Unix-way - это когда программа целиком состоит из sh-скриптов. Они неправы.

Valdor ★★ ()
Ответ на: комментарий от Stanson

А, ещё такая блевотная мразота как UUID из винды переползла, сцуко

А мужики-то не знают…

UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation's (OSF) Distributed Computing Environment (DCE)
Later, the Microsoft Windows platforms adopted that design as globally unique identifiers (GUIDs)

The Open Software Foundation (OSF) was a not-for-profit organization founded in 1988 under the U.S. National Cooperative Research Act of 1984 to create an open standard for an implementation of the UNIX operating system.

redgremlin ★★★★★ ()
Ответ на: комментарий от Stanson

Я, кстати, когда начинают рассуждать про молодёжный ди-бас, вспоминаю, что в этих их десктопах до сих пор нет стандартной возможности «открыть стандартный файловый менеджер пользователя и поставить курсор на файл». И Файрфокс, цуко, вынужден кучу проверок выполнять, чтобы реализовать команду меню «показать скачанный файл в файловом менеджере». По типу «если это Гном, то встаём в позу зю, если это KDE, встаём в позу ку, если это xfce, то прыгаем на одной ножке и поём хэппи бёздэй». А если это LXDE или чистый openbox, то хоть обнажимайся в меню — нихрена не произойдёт.

Про какие-нибудь там «открыть стандартный терминал в заданном каталоге», «запросить ограниченное повышение привелегий», «поделиться файлом с соседней машиной» и прочее я уж молчу. ROCKET SCIENCE.

И вот такой п...ц во всём. Зато у нас развесистый dbus и прочие достижения цивилизации. 15 лет как линукс на десктопы двигают, скоро в десктопах дырку уже протрут эти движениями, успели за это время реализовать хал, выкинуть хал, добавить консолекит, выкинуть консолекит, написать udisks, потом переписать udisks с нуля, по три раза переписать гном и кде, написать и выкинуть dcop, написать и выкинуть libbonobo, придумать текстовый реестр, выкинуть текстовый реест, придумать бинарный реестр, напилить кучу говнокода на Vala, перейти на CSS и JS, научиться рендерить gtk браузером, портировать gtk на вейланд, а вейланд - на kwin, устроить цирковое шоу «гном и семь трансвеститов: сладкая история коммитов». А счастье всё не наступает и не наступает.

«Что же мы делаем не так?»

devzero ()
Ответ на: комментарий от anonymous

- документированный текстовый протокол(ы) обмена данными

например STOMP?

swwwfactory ★★ ()
Ответ на: комментарий от intelfx

почему это невменяемый дебилизм.

Потому что в *nix предпочитают руководствоваться правилом «всё есть файл». Для обмена сообщениями и вызова интерфесов ФС сама просится изначально. Просто, наглядно, никаких левых dbus-send gdbus и прочего не нужно, чтобы полноценно использовать - читай-пиши в файлики и всё. Но почему-то был тупо взят за образец дебильнейший виндовый COM и молотком заколочен туда, где он ни в звезду, ни в красную армию ваще.

Напиши сам или возьми готовое.

Ага, надо сделать изначально по-дебильному, притащить с винды всё это дерьмо, а потом, чтобы можно было пользоваться и это говно хоть чуть-чуть приличнее выглядело, наворачивать обёртки (да ещё, млять, на, сцуко, ЖАБОСКРИПТЕ!) вокруг этого дебилизма.

Почему нельзя было сделать нормально (через ФС), а если какому-то идиоту захочется вот эти все --qqq-wwwwwww-fffff org.freedesktop.aaa.bbb.ccccccc.dddddddddd.eeeeeee --eee-rrrrrrrrrrr-pppppp /org.freedesktop.ddddddd.fffffffffffffffff.gggggggggg.hhhhhhh запоминать и пользовать - то пусть он пишет себе хоть на жабоскрипте этот невменяемый интерфес который ему нужен.

Stanson ★★★★ ()
Ответ на: комментарий от redgremlin

Вот только эти UUID'ы засветились в основном в винде. А эту NCS полтора человека пользовали. В линуксе они нахрен были не нужны сто лет. Да и сейчас не нужны.

Stanson ★★★★ ()
Ответ на: комментарий от Stanson

Кто-то предпочитает, кто-то нет.

Аргументные у тебя аргументы, я смотрю. Тебя волнует, что там жабаскрипт? Если волнует — запили сам, потому что обслуживать твоё чувство прекрасного никто не подписывался.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от devzero

Да c dbus'ом вообще цирк - изначально эту дрянь притащил Novell в Gnome типа чтоб в текстовом процессоре можно было вставлять таблички из табличного процессора. Разумеется, подход и принцип были слизаны с MSOffice, где COM уже давно жил своей извращённой жизнью. И назвали эту дрянь bonobo. Особенно смешно, что бонобо - это такие мартышки, которые прославились тем, что одну из особенностей их социального поведения стали приводить в качестве доказательства нормальности педиков.

Ну так вот, bonobo это пожило до какого-то там gnome 2.х.з и внезапно стало deprecated, Bместо него появился dbus, столь же извращённый и бестолковый. И тут какому-то альтернативно одарённому, стукнуло в голову что dbus надо непременно использовать не только для вставления документиков в офисе, но и для каких-то системных и критических целей. А потом оное dbus стали запускать аж при старте системы. И теперь оно намертво засунуто в линусятину, до такой степени, что аж подсистема bluetooth (сцуко! bluetooth! базовая сетевая подсистема! которая по определению должна полноценно работать вообще без всего, как TCP/IP или там USB и довольствоваться парой-тройкой консольных утилит по 50кб) без него жить не может. Несмотря на всё это насилие над разумом, dbus так и осталась по-сути всего лишь кривым способом едва годным для того, чтобы поместить табличку в текст в офисном пакете.

Внедрение говна в систему происходит полным ходом. Так что впереди ещё много веселья.

Stanson ★★★★ ()
Ответ на: комментарий от intelfx

Тебя волнует, что там жабаскрипт?

Да волнует. Писать для юниксообразной системы системные утилиты на всяких питонах или жабоскриптах - моветон. Перл ещё как-то в тему иногда, но вот это вот всё, которое ради сущей элементарщины тащит тонны ненужного говна в систему...

обслуживать твоё чувство прекрасного никто не подписывался

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

Stanson ★★★★ ()
Ответ на: комментарий от Stanson

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

Господи, да сиди на той версии, которую еще не успели изгадить. Не устраивает функционал - делай свою.
Не осиливаешь? Твои проблемы.
Вообще, если ты знаешь как лучше сделать, то почему не сделал?
Впрочем, всегда есть стандартная отмазка «мне за это не платят». Тогда терпи, ибо сам ты тоже не платишь.

kir2yar ()
Ответ на: комментарий от kir2yar

Господи, да сиди на той версии, которую еще не успели изгадить. Не устраивает функционал - делай свою.

Не осиливаешь? Твои проблемы. Вообще, если ты знаешь как лучше сделать, то почему не сделал? Впрочем, всегда есть стандартная отмазка «мне за это не платят». Тогда терпи, ибо сам ты тоже не платишь.

К чему весь этот баттхерт недовольного защитника текущей политики партии «сделаем всё как винде!»? У меня вообще слака и дома и в продакшене, мне пока что вообще не капает.

Stanson ★★★★ ()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

Слабый какой. Подверженный.

targitaj ★★★★ ()
Ответ на: комментарий от Stanson

При чем, dbus был запилен под впечатлением dcop («чё эта типа в kde пользователь может аудиоплеером рулить из прямо командной строки, а мы как лохи») и вытеснил его, а dcop был спроектирован чутка пограмотнее (хотя там тоже без архитектурных астронавтов не обошлось). Теперь уж сколько лет валандаемся с этим чудом инженерной мысли.

А как должно быть? Вот есть, допустим, стандартная десктопная функция. Например, «открыть файловый менеджер и показать пользователю заданный файл». Все программы, которым она нужна, ею пользуются. Ну там, файрфокс или трансмишн могут показать скачанные файлы, аудиоплеер может показать текущий играемый файл и т.п.

Как они ею пользуются? Как положено: через fork() и exec() нужной команды.

А что происходит дальше? А дальше пользователь (ИМЕННО ПОЛЬЗОВАТЕЛЬ) должен иметь возможность за одну минуту настроить, в каком файловом менеджере он хочет видеть файл. 30 секунд - чтобы открыть и прочитать мануал. 30 секунд - чтобы найти нужный файл и вписать настройку. Одна минута.

ВСЁ.

Даже если у него вообще никакой DE не стоит. Даже если файловый менеджер ни сном, ни духом про такие возможности интеграции.

Вот черти на юниксвей гонят, а в консоли, между прочим, идеальная интеграция man-а с читалкой. Вот показывает мне man свои документы в /usr/bin/more, например. А меня это не устраивает. Я открываю ~/.profile и пишу: export MANPAGER=less. ВСЁ. man стал интегрирован с less. Идеально. Затраты - 20 секунд и одна строчка конфига.

Далее. Вот настроены у меня на компе хоткеи. Жму Mod4 + Q - открывается терминал. Жму Mod4 + W - открывается текстовый редактор. И так далее. Обычно терминал у меня lilyterm. Но сейчас я сижу в системе, где не установлен lilyterm. Жму Mod4 + Q - открывается lxterminal. Если бы не было lxterminal, открылся бы terminator. Или xterm. Или далее по списку. Аналогично про прочие хоткеи.

Затраты? shell-скрипт на 25 строк и 6 строк в ~/.profile. (по строчке на хоткей) ВСЁ.

П...сы с FDo для этого бы написали библиотеку на 50 функций, работающую через dbus, требующую для компиляции Vala только определенной версии и работающую почти всегда, кроме полнолуния. А потом выпустили бы 4 новых версии с несовместимым ABI, а потом объявили бы её устаревший, а функции заснули в systemd.

И вот так у них во всём. И крокодил поэтому не ловится, и не растёт кокос.

devzero ()
Ответ на: комментарий от Stanson

К чему весь этот баттхерт недовольного защитника текущей политики партии «сделаем всё как винде!»? У меня вообще слака и дома и в продакшене, мне пока что вообще не капает.

О, значит ты таки осилил сделать по своему. Но все-же нытье без предметных и технических доводов - не делает тебе чести.

Благо, что для организации связи dbus <> файловая система, тебе подсказали решение.

kir2yar ()
Ответ на: комментарий от devzero

Только сначала уточните, какое учебное заведение вы закончили. Чтобы зрители могли иметь ввиду, с чьими выпускниками лучше не иметь дела.

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

Alsvartr ★★★★★ ()
Ответ на: комментарий от kir2yar

Кстати, а какие еще есть нормальные IPC под линуксом?
На ум приходят именованные каналы и сетевые сокеты.

kir2yar ()
Ответ на: комментарий от devzero

Ну там, файрфокс или трансмишн могут показать скачанные файлы, аудиоплеер может показать текущий играемый файл и т.п.

Как они ею пользуются? Как положено: через fork() и exec() нужной команды.

Не знаю как остальные, но фаерфокс вроде слушается mime на предмет inode/directory

mime через xdg обрабатываются. что там прописано сейчас по дефолту можно посмотреть

xdg-mime query default inode/directory

Можно тупо в ~/.local/share/applications/ положить чегонадо.desktop куда засунуть запуск скрипта или приложения типа Exec=/usr/local/bin/show_directory_script %F. Потом, чтобы этот, сцуко, desktop нигде не видно было, добавить NoDisplay=true и сказать

xdg-mime default чегонадо.desktop inode/directory

или просто исправить inode/directory=чегонадо.desktop в ~/.local/share/applications/mimeapps.list

В принципе, я даже иногда xdg-open имя_файла пользую для открытия всякой хни, если не помню как софтина называется.

Хотя, конечно, уродство полное, можно было и попроще сделать, без введения лишних сущностей типа .desktop.

Stanson ★★★★ ()
Ответ на: комментарий от kir2yar

Благо, что для организации связи dbus <> файловая система, тебе подсказали решение.

Понимаешь в чём дело. Когда в памяти болтается ненужная тебе фигня, она раздражает. Не то, чтобы памяти жалко, а вот раздражает. Если б dbus был сделан по-людски, я бы может даже его использовал. И уже не раздражало бы. А так - и ненужно, и использовать не хочется, но сцуко прибито гвоздями ко всему.

Stanson ★★★★ ()
Ответ на: комментарий от Stanson

Не знаю как остальные, но фаерфокс вроде слушается mime на предмет inode/directory

Ну так я про то, как должно быть, а не про то, как сейчас. :)

devzero ()
Ответ на: комментарий от kir2yar

if [ -f /etc/default/named ] - надо руки вырывать. Оно конечно правильно, работать будет. Но не читаемо. Что, руки отвалятся написать четыре лишних буквы? Или это боязнь слова «test»?

test является внешней утилитой, тогда как скобки - встроенной командой bash. Встроенная команда выполняется быстрее.

targitaj ★★★★ ()
Ответ на: комментарий от targitaj

test является внешней утилитой, тогда как скобки - встроенной командой bash.

На самом деле обе встроены.

devzero ()
Ответ на: комментарий от targitaj

Если мы говорим про bash, то и test, и [ — так называемые builtin'ы, поэтому по скорости они эквивалентны. А что быстрее, так это [[, потому что он входит в «ядро языка» и является исключительно элементом синтаксиса.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от targitaj

test является внешней утилитой,

$ which test [
/usr/bin/test
/usr/bin/[
$ stat /usr/bin/test /usr/bin/[
Файл: «/usr/bin/test»
Размер: 35456 Блоков: 72 Блок В/В: 4096 обычный файл
Устройство: 802h/2050d Inode: 945121 Ссылки: 1
Доступ: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Доступ: 2015-02-01 23:56:22.000000000 +0500
Модифицирован: 2015-01-14 08:50:14.000000000 +0500
Изменён: 2015-02-01 23:56:29.189833599 +0500
Создан: -
Файл: «/usr/bin/[»
Размер: 39552 Блоков: 80 Блок В/В: 4096 обычный файл
Устройство: 802h/2050d Inode: 945122 Ссылки: 1
Доступ: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Доступ: 2015-02-01 23:56:22.000000000 +0500
Модифицирован: 2015-01-14 08:50:14.000000000 +0500
Изменён: 2015-02-01 23:56:29.189833599 +0500
Создан: -

Забавно. Они оба файлы. Но разные.
Но ман у них один.
К вопросу о шеллскриптах, короче.

kir2yar ()
Ответ на: комментарий от kir2yar
test является внешней утилитой,

$ which test [
/usr/bin/test
/usr/bin/[

Не which test, а man bash.

test должен быть в PATH по стандарту, поэтому он там есть. А в bash собственная реализация. В произвольно взятом sh, да, не гарантируется наличие встроенного test. А в bash-е он есть.

И эти люди рассказывают о недостатках sh-скриптов :)

devzero ()
Ответ на: комментарий от devzero

Я понял, что я ничего не понял.

Центось.

# which test [
/usr/bin/test
/usr/bin/[

# stat /usr/bin/test /usr/bin/[
File: «/usr/bin/test»
Size: 31124 Blocks: 64 IO Block: 4096 обычный файл
Device: 802h/2050d Inode: 303153 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-06-22 16:40:39.000000000 +0500
Modify: 2012-06-22 16:40:39.000000000 +0500
Change: 2013-04-16 08:12:23.000000000 +0500

File: «/usr/bin/[»
Size: 34716 Blocks: 72 IO Block: 4096 обычный файл
Device: 802h/2050d Inode: 303099 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-06-22 16:40:39.000000000 +0500
Modify: 2012-06-22 16:40:39.000000000 +0500
Change: 2013-04-16 08:12:23.000000000 +0500

# cat /etc/issue
CentOS release 6.3 (Final)
Kernel \r on an \m


А вот и убунта.

$ which test [
/usr/bin/test
/usr/bin/[

$ stat /usr/bin/test /usr/bin/[
Файл: «/usr/bin/test»
Размер: 31168 Блоков: 64 Блок В/В: 4096 обычный файл
Устройство: 801h/2049d Inode: 471725 Ссылки: 1
Доступ: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Доступ: 2015-01-15 08:00:41.000000000 +0500
Модифицирован: 2015-01-14 08:53:42.000000000 +0500
Изменён: 2015-01-15 08:00:46.000000000 +0500
Создан: -

Файл: «/usr/bin/[»
Размер: 35264 Блоков: 72 Блок В/В: 4096 обычный файл
Устройство: 801h/2049d Inode: 471735 Ссылки: 1
Доступ: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Доступ: 2015-01-15 08:00:41.000000000 +0500
Модифицирован: 2015-01-14 08:53:42.000000000 +0500
Изменён: 2015-01-15 08:00:46.000000000 +0500
Создан: -

$ cat /etc/issue
Ubuntu 12.04.5 LTS \n \l

Это к вопросу о пути «наименьшего удивления».

kir2yar ()
Ответ на: комментарий от devzero



test должен быть в PATH по стандарту, поэтому он там есть. А в bash собственная реализация. В произвольно взятом sh, да, не гарантируется наличие встроенного test. А в bash-е он есть.

А почему тогда не пошли по пути бизибокса? Где все buildin - симлинки на бизибокс?

И эти люди рассказывают о недостатках sh-скриптов :)

Ну тогда-уж, man dash. А вообще - именно этим нюансом я тупо не интересовался.

Вообще получается, что есть 3~4 разные реализации test, /usr/bin/test, /usr/bin/[, buildin test, buildin [ (два последних - возможно одно и тоже)
Нафейхуа?

kir2yar ()
Ответ на: комментарий от kir2yar

Я понял, что я ничего не понял.

Что именно вы не поняли? test и [ — обе команды стандартизирвоаны в POSIX и присутствуют в системе как бинарники.

В то же время, спецификация не запрещает встраивать команды в оболочку. bash их и встраивает в себя. Для ускорения работы, чтобы не делать лишних форков.

Наглядно:

$ type [
[ is a shell builtin
$ enable -n [
$ type [
[ is /usr/bin/[
devzero ()
Ответ на: комментарий от kir2yar

А почему тогда не пошли по пути бизибокса? Где все buildin - симлинки на бизибокс?

Вы путаете. Во-первых, в данном случае это к coreutils вопрос, почему они не сделали test и [ одним файлом. Ну не захотели почему-то.

Во-вторых, busybox тут ни при чем. Вот есть у sh, допустим, встроенная команда readonly. Логично, что это часть языка, а не внешняя утилита. Когда он встречает эту команду, он не делает fork-exec, а просто вызывает соответствующую функцию.

Точно так же в bash встроены другие команды. Вот решили мужики встроить [, чтобы не fork-exec-ться лишний раз. Встроили.

В busybox другая петрушка. Он форкается и вызывает указанный путь, но этим путём является он сам. Это бинарник с множеством точек входа. У него в main() лежит драйвер, который выбирает, какую функцию вызывать: main_ls(), main_test(), main_cp() и т.п., в зависимости от значения в argv[0].

devzero ()
Ответ на: комментарий от kir2yar

Нафейхуа?

test vs [ — «так исторически сложилось и попало в стандарты».

внешний vs встроенный — «стандарт требует внешней утилиты, но в целях производительности мы сделаем еще и встроенную».

devzero ()
Ответ на: комментарий от kir2yar

cat /etc/issue

Кстати, в указанных системах имеется продвигаемый Поттерингом /etc/os-release ?

(Вот может же человек делать разумные вещи, если захочет.)

devzero ()
Ответ на: комментарий от devzero

Ну, у меня идея была в том, что у баша есть встроенный test, к примеру, и он юзает его когда нужно без форка. А для соответствия стандартам - делает в /usr/bin симлинки на себя, как бизибокс.


«так исторически сложилось и попало в стандарты»

Самая страшная фраза во всем IT.

kir2yar ()
Ответ на: комментарий от devzero

Кстати, в указанных системах имеется продвигаемый Поттерингом /etc/os-release ?

В убунте есть, в центоси той версии - нет.

kir2yar ()
Ответ на: комментарий от kir2yar

Самая страшная фраза во всем IT.

Ну... читать POSIX вообще не рекомендуется людям с неокрепшей психикой. На некоторых особо драматических параграфах я пускаю скупую мужскую слезу. :D

devzero ()
Ответ на: комментарий от devzero

Ну... читать POSIX вообще не рекомендуется людям с неокрепшей психикой. На некоторых особо драматических параграфах я пускаю скупую мужскую слезу. :D

Да, там надо ставить рейтинг 21+, не меньше. Ибо без алкоголя тяжело читается. :)

kir2yar ()
Ответ на: комментарий от kir2yar

Мы тут как-то с мужиками анализировали, насколько трудоемко написать аналог busybox, я прошерстил POSIX и подбил итог:

So what we have here. POSIX defines 159 command names. Of them:
* 10 SCCS items (crap! crap! crap!).
* 15 shell built-ins.
* 11 developer-related tools.
* 11 obsolescent q*-tools of batch job scheduling.
* [at] is an implementation-defined interface to an [at] daemon. [batch] is just a synonym for [at -q b -m now].
* [crontab] is a wrapper for editing cron files.
* [asa] is an odd tool from FORTRAN world.
* [compress] and [uncompress] is a LZ compressor. zcat is a synonym for [uncompress -c].
* [pax].
* [date] prints or sets the current date and time. [cal] prints a calendar (have no idea why it is in POSIX).
* [false], [true], [env], [echo], [printf], [expr], [test] and [xargs], in fact, are helpers for shell scripts.
* [ed] + [ex] are stupid text editors and [vi] is a not-so-stupid text editor.
* [more] is a tool for viewing long listings.
* [ipcrm], [ipcs] -- IPC resource control.
* [fuser], [kill], [nice], [ps], [renice] -- process control.
* [stty], [tput], [tty] -- termio stuff.
* [tabs] -- crap.
* [gencat] -- a tool for generating message catalogs, nobody uses it in fact. 
* 2 locale-related tools: locale, localedef.
* [getconf] is a wrapper for getconf().
* [bc] is a full-featured arithmetic language.
* [m4] is an ansient (yet widely used) macro processor.
* [file] is a tool that tells a type of a file.
* 4 pure file processing tools: [cat], [cksum], [dd], [tee].
* 3 tools processing file names: [basename], [dirname], [pathchk].
* 14 tools that process file system nodes, but do not look into file contents: [chgrp],
  [chmod], [chown], [du], [find], [link], [ln], [ls], [mkfifo], [pwd], [rm], [rmdir],
  [touch], [unlink].
* [cp] and [mv] process both file nodes and file data.
* [df] reports file system disk space usage.
* [id] and [logname] report user identification.
* 12 widely used text processing tools: [awk], [cut], [diff], [grep], [head], [iconv], [patch],
  [sed], [sort], [tail], [uniq], [wc].
* 14 uncommon text processing tools: [cmp], [comm], [csplit], [expand], [fold], [join],
  [nl], [od], [paste], [pr], [tr], [tsort], [unexpand], [split]

Not all being mentioned, but now I'm tired of this. You've got the point. A third of these tools is useless crap,
the second third is just random names of random external tools (c99, ar, m4...), but the last third is
must-have on any unix box and we should implement them.
devzero ()
Ответ на: комментарий от Stanson

В линуксе они нахрен были не нужны сто лет. Да и сейчас не нужны.

Ох уж эти умственно неполноценные админы локалхоста младшего школьного возраста.

redgremlin ★★★★★ ()
Ответ на: комментарий от devzero

A third of these tools is useless crap,

the second third is just random names of random external tools (c99, ar, m4...), but the last third is
must-have on any unix box and we should implement them.

Да, точно такое-же было ощущение. Такое ощущение, что кто-то просто взял чей-то десктоп и все содержимое /bin занес в стандарт не разбираясь. Хорошо, хоть тетрис и диггер не попался. )

kir2yar ()
Ответ на: комментарий от kir2yar

сокеты, а в них кидать любым любимым libxml или ещё каким сериализатором объектов.

Что характерно, очереди-семафоры-скорость удовлетворят любые желания, а возможность быстро перепилить на TCP/IP добавит энтерпрайза (но снизит скорость)

Shadow ★★★★★ ()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

сокеты, а в них кидать любым любимым libxml или ещё каким сериализатором объектов.

На самом деле для задач десктопа там даже нечем «кидать XML-ем», нет таких потребностей. (Хотя идиоты вон уже умудряются аудиопоток гнать через dbus, дальше, видимо, начнут передавать видео, монтировать файловые системы, пробрасывать иксы, раздавать торренты, потом реализуют dbus-over-dbus, ipv6-over-dbus, tcp-over-dbus, потом торренты начнут раздавать по tcp-over-ipv6-over-ppp-over-dbus...)

Две типичных задачи:

  • Броадкастить уведомления неограниченному числу слушателей. «У нас тут принтер появился, извольте пожаловать».
  • Просить сделать что-нибудь стандартное «любым доступным способом».

Для первого достаточно примитивного демона на UNIX-сокете, можно даже тупо использовать простой построчный формат данных.

Для второго существует волшебное изобретение человечества под названием «файловая система». fork(), exec() и понеслась душа в рай. Как запущенный агент пообщается с основным приложением? Вот через сокеты и пообщается. :)

devzero ()
Ответ на: комментарий от Shadow

сокеты, а в них кидать любым любимым libxml или ещё каким сериализатором объектов.

Только не xml. Что угодно, даже чистый бинарный поток лучше, чем xml.
XML одинаково плохо читается что человеком, что компьютером.

kir2yar ()
Ответ на: комментарий от devzero

Для первого достаточно примитивного демона на UNIX-сокете, можно даже тупо использовать простой построчный формат данных.

Для второго существует волшебное изобретение человечества под названием «файловая система». fork(), exec() и понеслась душа в рай. Как запущенный агент пообщается с основным приложением? Вот через сокеты и пообщается. :)

Да я тоже про что-то такое думал. Первая мысль - локальный сетевой сервис. Сразу +сетевая прозрачность.

kir2yar ()
Ответ на: комментарий от intelfx

Ситуация, на моей инсталляции нужен именно ntpd, это спокойно выпиливается? Или мы имеем сервер и две реализации клиента?

h4tr3d ★★★★★ ()
Ответ на: комментарий от h4tr3d

timesyncd — это реализация SNTP-клиента. Можно выпилить при сборке (--disable-timesyncd), можно выключить уже установленную (systemctl disable systemd-timesyncd или timedatectl set-ntp false).

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.