Получить значения для данного ключа и его родителя с JQ

Вы можете найти соответствующую историю в /var/log/auth.log старые файлы хранятся в сжатом виде в .gz . Он содержит информацию об авторизации системы, включая использованные логины пользователей и механизм аутентификации.

Вы можете найти файл следующим образом:

$ ls /var/log | grep -i auth
auth.log
auth.log.1
auth.log.2.gz
auth.log.3.gz
auth.log.4.gz

Пример: я только что создал пользователя xyz , а затем добавил его в группу sudo , и соответствующую историю можно найти по:

$ cat /var/log/auth.log | grep -i xyz
Dec 18 18:54:51 pandya-desktop sudo:   pandya : TTY=pts/2 ; PWD=/home/pandya ; USER=root ; COMMAND=/usr/sbin/useradd xyz
Dec 18 18:54:51 pandya-desktop useradd[7763]: new group: name=xyz, GID=1002
Dec 18 18:54:51 pandya-desktop useradd[7763]: new user: name=xyz, UID=1002, GID=1002, home=/home/xyz, shell=
Dec 18 18:55:51 pandya-desktop sudo:   pandya : TTY=pts/2 ; PWD=/home/pandya ; USER=root ; COMMAND=/usr/sbin/usermod -a -G group xyz
Dec 18 18:55:57 pandya-desktop sudo:   pandya : TTY=pts/2 ; PWD=/home/pandya ; USER=root ; COMMAND=/usr/sbin/usermod -a -G sudo xyz
Dec 18 18:55:57 pandya-desktop usermod[7872]: add 'xyz' to group 'sudo'
Dec 18 18:55:57 pandya-desktop usermod[7872]: add 'xyz' to shadow group 'sudo'

Вы можете увидеть строку 18 декабря 18:55:57 pandya-desktop usermod [7872]: добавьте 'xyz' в группу 'sudo' , чтобы получить историю, которая на 18 декабря 18:55:57 , пользователь xyz добавлен в группу tp sudo

4
12.11.2018, 18:47
2 ответа
$ jq -r 'keys[] as $k | "\($k) \(.[$k].conns)"' file.json
1 1
2 2

Похоже, что jq переводит 1.0 в 1 и 2.0 в 2. Изменение ввода для ясности:

$ cat file.json
{
  "1a": {
    "available_memory": 1086419656.0,
    "available_memory_no_overbooking": 1086419656.0,
    "conns": 1.1
  },
  "2b": {
    "available_memory": 108641236.0,
    "available_memory_no_overbooking": 10861216.0,
    "conns": 2.2
  }
}
$ jq -r 'keys[] as $k | "\($k) \(.[$k].conns)"' file.json
1a 1.1
2b 2.2

Ссылки:

10
27.01.2020, 20:53

альтернативное решение(jtc)упрощает вопрос с помощью стандартного cli:

bash $ echo $OUTPUT | jtc -rl -w'[+0]' -w'[+0][conns]' | sed 's/: {.*//g; s/^"conns"://' | xargs -n2
1 1.0
2 2.0
bash $ 

jtc (в отличие от jq )— это утилита, которая ограничивает свою функциональность только операциями json (, поэтому ее интерфейс значительно проще ), однако манипулирование статьями за пределами модели данных JSON переносится на внешние инструменты unix.

РЕДАКТИРОВАТЬ :Новая версия jtcподдерживает более простое решение:

bash $ jtc -w'<conns>l:<con>v[-1]<key>k' -T '"{key} {con}"' -qq <<<$OUTPUT
1 1.0
2 2.0
bash $ 
0
27.01.2020, 20:53

Теги

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