Команда Linux 'lsof' возвращает большое значение

Вы можете использовать индексацию квадратных скобок для всех объектов в jq, поэтому [$name]работает для того, что вы пытаетесь:

jq --arg key1 true --arg name "$name" '.Linux.script_executed[$name] = $key1...' 

Использование квадратных скобок не очень хорошо задокументировано в руководстве , из-за чего кажется, что вы можете использовать только .[xyz], но ["x"]работает везде, где .xимел бы такую ​​же длину. так как это неправильно в начале выражения (, то есть .a.xи .a["x"]одинаковы, но ["x"]является конструкцией массива ).

Обратите внимание на использование одинарных кавычек над -, чтобы Bash не пытался интерпретировать $nameи $key1как переменные оболочки. Вы должны держать --arg name "$name"в двойных кавычках, потому что на самом деле — это переменная оболочки, и ее следует заключать в кавычки, чтобы ее было безопасно использовать.

-4
20.04.2021, 11:33
1 ответ

Я нашел причину вышеупомянутой проблемы с ответом @A.B . Я сравнил вывод lsof после запуска экземпляра tomcat на двух серверах Linux. Один сервер возвращает большое значение (Связано с моим первоначальным вопросом ), тогда как второй сервер всегда возвращает меньше 2000.

Причиной проблемы было наличие двух разных версий lsof на обоих серверах. (4.82 и 4.87 )Последняя версия включает результаты, относящиеся к потокам.

lsof -4.82:(Нет столбца TID )enter image description here

lsof -4.87:(Есть столбец TID )enter image description here

Таким образом, при наличии 100 потоков один и тот же файл будет открыт 100 раз, (Как упомянул @A.B. )Что будет считаться только 1 открытым файлом. Но | wc -lвозвращает количество повторяющихся строк для разных потоков. (Что действительно неверно)

0
28.04.2021, 22:51

Теги

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