Если я понимаю правильно, Вы хотите полную командную строку процесса.
В соответствии с Linux или *BSD, передача ww
к ps
команда, чтобы сказать этому не усекать командные строки.
ps -A ww
Можно извлечь просто аргументы (включая название команды) путем передачи -o args
кому: ps
.
ps -o args -A ww
В соответствии с Linux, можно передать -C java
перечислять только процессы, выполняющие названную команду java
.
ps -o args -C java ww
Другой способ получить неограниченную ширину вместо терминальной ширины состоит в том, чтобы передать по каналу через другую программу.
ps -o args -C java | cat
В соответствии с Linux, можно получить целую командную строку процесса от /proc/$pid/cmdline
где $pid
идентификатор процесса. Командная строка хранится однозначно с пустыми байтами для разделения аргументов, таким образом, это хорошо, даже если аргументы содержат пробелы.
«очевидный размер» файла - насколько действительными данные на самом деле в файле. Это фактическое количество данных, которые можно прочитать из файла. Ориентированные на блокировке устройства могут храниться только с точки зрения блоков, а не байтов. В результате использование диска всегда округляется до следующего самых высоких блоков. «Блок» в этом случае может не приравнивать к физическому блоку на устройстве хранения, в зависимости от того, как файловая система выделяет пространство.
В случае вашего зашифрованного устройства файловая система может расширить объем пространства, используемого для включения накладных надерков для поддержки информации об шифровании / расшифровке. Он, вероятно, также шифрует или рандомилизует неиспользуемое пространство между концом файла и концом блока, содержащего его, что может сделать его более чем-то для du
.
Ничего из этого не учитывает обработку редких файлов, что не может поддерживаться в зашифрованной файловой системе.
Пример минимальной детализации блоков
Давайте немного поиграем, чтобы посмотреть, что происходит.
mount
говорит мне, что я нахожусь в разделе ext4, смонтированном в /
.
Я нахожу размер блока с помощью:
stat -fc %s.
, что дает:
4096
Теперь давайте создадим несколько файлов с размерами1 4095 4096 4097
:
#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
dd if=/dev/zero of=f bs=1 count="${size}" status=none
echo "size ${size}"
echo "real $(du --block-size=1 f)"
echo "apparent $(du --block-size=1 --apparent-size f)"
echo
done
и результаты:
size 1
real 4096 f
apparent 1 f
size 4095
real 4096 f
apparent 4095 f
size 4096
real 4096 f
apparent 4096 f
size 4097
real 8192 f
apparent 4097 f
Итак, мы видим, что все, что ниже или равно 4096
, фактически занимает 4096
байт.
Затем, как только мы пересекаем 4097
, она поднимается до 8192
, что равно 2 * 4096
.
Тогда ясно, что диск всегда хранит данные на границе блока 4096
байт.
Что происходит с разреженными файлами?
Я не исследовал точное представление, но ясно, что --apparent
принимает его во внимание.
Это может привести к тому, что видимые размеры превысят фактическое использование диска.
Например:
dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f
дает:
8192 f
1073741825 f
Связанные:https://stackoverflow.com/questions/38718864/how-to-test-if-sparse-file-is-supported
Что делать, если я хочу хранить кучу мелких файлов?
Некоторые возможности::
Библиография:
Протестировано в Ubuntu 16.04.