LINUX.ORG.RU
ФорумTalks

Бинаризация всея Линукса

 ,


0

0

Копипаста с опеннета:

Раздумывая над способами модернизации командной строки UNIX, Александр Ларсон (Alexander Larsson), активный разработчик GNOME и мантейнер таких проектов, как Nautilus, Gnome-vfs и Dia, предложил в своем блоге новый способ объединения команд с помощью пайпов, основная идея которого заключается в передаче через канал не простых потоков неструктурированных данных, а объектов, представленных в бинарной форме. По словам Александра, его идея может сделать командный интерфейс более гибким, но не таким переусложненным как Microsoft PowerShell.

В качестве основы для представления объектов Александр предложил использовать тип данных GVariants из библиотеки Glib, используемой также в GTK+ и GNOME. Он реализовал несколько утилит, повторяющих функциональность стандартных UNIX-команд ps, sort, head и других, которые принимают на вход и выдают на выходе объекты типа GVariants, причем в случае, если вывод осуществляется в терминал или принимающая команда не поддерживает на входе объекты, данные будут переданы в текстовой форме. Например, вывод его версии ps в терминал будет выглядеть так:

$ dps
   <{'pid': <uint32 1>, 'ppid': <uint32 0>, 'euid': <uint32 0>,  'user': <'root'>,...
   <{'pid': <uint32 2>, 'ppid': <uint32 0>, 'euid': <uint32 0>,  'user': <'root'>,...
   ...

Применив к этому выводу другие утилиты можно легко отсортировать объекты по необходимым полям и выполнить их фильтрацию на основе тех или иных полей:

$ dps | dfilter euid \< 1000 | dsort rss
   <{'pid': <uint32 1>, 'ppid': <uint32 0>, 'euid': <uint32 0>, 'user': <'root'>,
   <{'pid': <uint32 769>, 'ppid': <uint32 745>, 'euid': <uint32 0>, 'user': <'root'>,
   ...

В конце концов, можно использовать специальные утилиты для вывода данных удобочитаемом виде:

dps | dfilter euid \< 1000 | dsort rss | dhead 4 | dtable pid user rss vsize cmdline
   pid     user      rss    vsize  cmdline
     1   'root'    24408    61488 '/usr/lib/systemd/systemd'
   769   'root'    16028   108000 '/usr/bin/Xorg :0 -background none -logverbose 7 -seat seat0 -nolisten tcp vt1'
   608   'root'    15076   255312 '/usr/bin/python /usr/sbin/firewalld --nofork'
   747   'root'     8276   452604 '/usr/sbin/libvirtd'

Как говорит Александр, такой подход существенно расширяет возможности обработки данных, позволяя, например, применять к выводу типо-зависимые операции (сравнение euid с числом), выполнять правильное обрезание списка (без учета заголовка), работать одновременно со всеми полями объекта даже в том случае, если они не будут выведены на экран. Кроме того, все данные между командами передаются в бинарной форме, благодаря чему их обработка существенно упрощается.

Ответ на: комментарий от vasily_pupkin

Что, я уже могу написать апплет для ФМ и встроить его в какой-нибудь наутилус через dbus? Ах, не могу.

Вот то-то и оно.

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

ну полочу пид процесса браузера и покажи сюда для сравнения.

типизированые значения плохо,все строка лучше,ага

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

И ими никто не пользуется

Да. Очень жаль что gobject-introspection так поздно и с такими муками появился. Реюзабельность этих компонент просто фантастическая, жалко что их мало и полноценное покрытие методов очень зависит от разработчика библиотеки.

Думаю, если бы гномовцы так сильно не варились в сишечке, то дела сейчас обстояли намного лучше.

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

ну полочу пид процесса браузера и покажи сюда для сравнения.

pid=$(pgrep firefox)

типизированые значения плохо,все строка лучше,ага

Подбирай нормальные примеры или не ной.

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

Касательно дбаса - надеюсь и не сможешь. Всё таки оно немного не про то

Вообще-то это рекомендованный разрабами гнома после выкидывания бононо способ «именно этого».

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

а если не пид а память

ps -o rss= $(pgrep firefox)

Если хочешь показать преимущества PS, выбери какую-нибудь другую команду.

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

1. Это не требуется. Ибо как только кто-то захочет что-то изменить из разрабов, то сам выскажет.

2. Не послушают, ибо почти весь софт, который парсит /proc разом рухнет. И уровень на много выше, чем мои поделки. По этой причине никто не будет менять /proc никогда, а также это тупиковая логика, когда для расширения возможностей системы (добавить колонку в /proc/[pid]/stat) нужно писать костыль - отдельный файл. Хороший пример stat, status, statm. Нафига столько файлов с повторяющейся инфой?

3. No comments, ибо другого пути нет, кроме того как сделать все по-человечески «с нуля» нет.

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

а так

$t=ps thunderbird

if($t.WS > 1000000){kill $t}

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

Например:

ps chrome | where {$_.WS -gt 9000} | %{ $_.Kill() }

Однако на баше это делается тоже ничуть сложнее

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

help ps

 — NPM(K): Объем невыгружаемой памяти, используемой процессом, в КБ.

 — PM(K): Объем выгружаемой памяти, используемой процессом, в КБ.

 — WS(K): Размер рабочего множества процесса, в КБ. Рабочее множество состоит из страниц памяти, к которым неда вно обращался процесс.

 — VM(M): Объем виртуальной памяти, используемой процессом, в МБ. Виртуальная память представляет собой хранили ще файлов подкачки на диске.

а какая вам разница?

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

help ps

Спасибо, прикольно.

а какая вам разница?

Любопытно же.

baverman ★★★
()
Ответ на: комментарий от RA
In [9]: ip -4
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/home/avatar/<ipython-input-9-e7e374865d4e> in <module>()
----> 1 ip -4

NameError: name 'ip' is not defined

Чото как-то не ок

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

От ето я потерялся в криокамере. Что-то туго себе я такое представляю, надо посмотреть

vasily_pupkin ★★★★★
()

Я вот одного не пойму

Если есть библиотека для парсинга каких-то там бинарных потоковых данных, и есть набор приложений, которые это умеют читать-писать, что им мешает использовать пайпы как они есть? Напишите свои coreutils и procps с блэкджеком и трансвеститами, пусть они блобами между собой швыряются на здоровье. Что меняется? Когда мы перекодируем аудио-видео через пайпы, мы же не текст там гоняем, нэ?

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

ну и чем твоя каша лучше моей? Моя хоть очевидней)

Моя каша в жизни может пригодится

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

пример stat, status, statm. Нафига столько файлов с повторяющейся инфой?

Обратная совместимость + новый функционал.

другого пути нет, кроме того как сделать все по-человечески «с нуля»

Писать новую procfs?

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

ps ho pid,rss `pgrep firefox` | awk '$2 > 300000 {print $1}' | xargs kill

ЭТО ЖЕ AWK HELL!!111

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

Однако на баше это делается тоже ничуть сложнее

ps -C chrome -o pid= -o rss= | awk '{if ($2 > 9000) {print $1}}' | xargs kill

Я бы не сказал, что это «не сложнее».

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

Писать новую procfs?

Рано или поздно, но запилят. Как видишь сабж это только затишье перед бурей. А вдруг людям понравится?

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

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

Окей, незначительно сложнее

Мне пришлось прочитать man про гнутый ps (для не-гнутого опции совершенно другие), а также нужно знать awk и помнить о существовании xargs. Я бы сказал, существенно сложнее это получается.

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

red_eyed_peguin
()

Черт, только сейчас заметил

/usr/bin/python /usr/sbin/firewalld --nofork

15 мегабайт на непойми что? Не, нахер, человек с педоновым firewalld хорошему не научит.

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

Нет, я просто работаю с линуксом на армовой железке c 180 MHz, 64MB ram, 8MB flash. Тут уж не до жиру.

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

кстати, вопрос
все эти systemd, udisks и так далее - это очень-очень хорошо
только вот вспоминаю линуск пятилетней давности и смотрю на то, что есть сейчас. пользоваться этим, если ты не гик/кодер, всё ещё нельзя
убунту говно, федора классная, конечно, но разваливается - есть ну хоть маленький шанс, что всё это, пусть и без передовых технологий, будет usable?

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

есть ну хоть маленький шанс, что всё это, пусть и без передовых технологий, будет usable?

От этих «передовых технологий» юзабельность не зависит.

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

На сколько это увеличивает производительность скрипта? Насколько это ухудшает производительность админа?

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

иначе ретрограды захлебнутся слюной

Давно пора.

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

школьники не в курсе, что GLib никак с иксами не связано?

ldd /lib/x86_64-linux-gnu/libglib-2.0.so.0.3200.3
        linux-vdso.so.1 =>  (0x00007fff84104000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f2b97376000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2b9715
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f2b96f51000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2b96bca000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2b978c7000)

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

Прежде чем брызгать слюной, научись понимать прочитанное.

Kindly_Cat
() автор топика
Ответ на: комментарий от tailgunner

Ну. Я бы не был столь категоричен. Впрочем, если линакс стоит на десктопе дома у гика социопата, может быть и не зависит

vasily_pupkin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.