Использование JQ для получения простого вывода с разделителями

Можно ли запускать здесь приложение без привилегий root?

Конечно, есть. Предполагая, что Linux был скомпилирован с поддержкой MULTIUSER;)

Очевидная проблема заключается в том, что на самом раннем этапе процесса загрузки нет «пользователей».

Ну да, если вы попытаетесь поместить su или sudo в initramfs, вам нужно будет добавить много файлов конфигурации ( / etc / passwd , / etc / groups , / etc / shadow и так далее). Но эти сложности не присущи Linux.В конце концов, UID - это просто число, поэтому очень легко создать игрушечную программу, которая может отбрасывать привилегии root, если это ваша цель:

#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv)
{
  setuid(atoi(argv[1]));
  execvp(argv[2], argv+2);
}

Если вы скомпилируете ее как toysu , ее можно будет вызвать следующим образом:

toysu 1234 touch /tmp/example

где 1234 - это используемый UID, а остальная часть - это команда для выполнения. Обратите внимание, что это не сработает, если вы с самого начала не являетесь пользователем root, поэтому добавьте к этой команде префикс sudo , чтобы протестировать ее в обычной системе.

2
01.02.2017, 19:32
2 ответа

Вы также можете рекурсивно спускаться по дереву JSON следующим образом:

>jq 'recurse|numbers' data.json
0
128
128
7
249
256

(это предполагает, что все ваши значения - числа, используйте скаляры, если вам также нужны булевы и строки)

Или используйте сокращенную нотацию для recurse, то есть ....

..|numbers

(Спасибо @cuonglm !)

Обратите внимание, что в отличие от подхода map|flatten, этот подход будет работать и для произвольного вложенного дерева объектов.

Например,

{
  "write": {
    "out": 0,
    "available": 128,
    "totalTickets": 128
  },
  "read": {
    "out": 7,
    "available": 249,
    "totalTickets": 256,
    "details" : {
        "good": 10,
        "bad" : 20
    }
  }
}

получится:

0
128
128
7
249
256
10
20
2
27.01.2020, 22:03
$ jq 'map(map(values))|flatten|.[]' data.json
0
128
128
7
249
256

Первая часть генерирует

[
  [
    0,
    128,
    128
  ],
  [
    7,
    249,
    256
  ]
]

Это сплющивается в:

[
  0,
  128,
  128,
  7,
  249,
  256
]

А .[] извлекает эти значения.

1
27.01.2020, 22:03

Теги

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