Мне был нужен метод командной строки создания файла, размер которого в байтах является процентом свободного пространства на диске. Я намереваюсь выполнить его через крон каждые пять минут, но сначала сценарий оболочки сделает.
Целевая платформа является средой BSD4.3 в ДОМЕНЕ/ОС, таким образом, я имею ksh
, awk
, sed
и обычные команды BSD, но не версии GNU.
Я могу выполнить команду lvolfs -a
(не команда BSD), который перечисляет свободное пространство объема в этом формате:
# free # total % free node id entry directory
732532 1295672 57 4D72C /
3787184 4165732 91 52055 //tr3
-------------------------------
4519716 5461404 82.76% 2 volumes.
таким образом, это кажется простым для извлечения значений, в этом случае 57 и 91, определяя их шестнадцатеричными идентификаторами узла, 4D72C и 52055, соответственно.
Я сразу думал 'dd, может сделать это', таким образом концентрируясь на узле 4D72C сначала, я придумал:
/com/lvolfs -a | \
awk -e '/4D72C/ { print $3 }' | \
sed -e 's|^|dd if=/dev/rdsk of=//tr2/test/data/tr2.free bs=|' | \
sed -e 's|$| count=1|' >//tr2/archive/dirlist
. //tr2/archive/dirlist
И dirlist
похож
dd if=/dev/rdsk of=//tr2/test/data/tr2.free bs=57 count=1
Это работает, и я должен буду повторить что-то вроде этого для узла 52055, но интересно если dd
единственный способ использовать действительно основные команды BSD. У кого-либо были бы какие-либо предложения?
Править: Еще некоторая справочная информация о целевой системе..., это - HP/Apollo DN433 'Техническая Рабочая станция', колени пчелы, когда она была выпущена в начале 80-х, но теперь почти столь же впечатляющая как 486DX система. Собственная ОС пытается подражать Unix путем обеспечения 'среды' BSD4.3 разумным набором команд BSD, но существует искушение смешать BSD и команды Aegis (как lvolfs
) поскольку я сделал здесь.
У меня есть две рабочих станции и каждое Оборудование автоматического тестирования средств управления. Эти две рабочих станции объединяются в сеть вместе и сетевой корневой каталог //
включает tr2 (идентификатор 4D72C узла) и tr3 (идентификатор 52055 узла). Вы действительно не хотите или должны знать весь этот материал - я был бы точно так же, как для произведения впечатления, что ничто не должно считаться само собой разумеющимся. Я не хочу, чтобы любой потратил впустую слишком много времени на этот материал - это - мое задание, но я ценил бы любые предложения, которые Вы могли бы иметь. Shell Korn является все еще определенной тайной мне.
ОБНОВЛЕНИЕ: df -a
команда в ДОМЕНЕ/ОС дает
$ df -a
Filesystem kbytes used avail capacity Mounted on
/dev/wn96a 1295672 563904 731768 44% //tr2
/dev/wn96a 4165732 379804 3785928 9% //tr3
----------------------------------
5461300 943700 4517600 17%
Который, так как это упоминает более знакомые имена tr2 и tr3, мог бы быть предпочтительным. Единственное небольшое препятствие - то, что мы получаем дисковое пространство, используемое не свободный, но это может быть преодолено.
Я использовал бы dd
. Вы говорите "lvolfs-a (не команда BSD)". Вы имеете df
? Это было бы более стандартным и портативным способом получить информацию использования объема.
Не должно быть необходимо создать временный файл сценария, чтобы сделать это. Необходимо смочь сделать:
dd if=/dev/rdsk of=//tr2/test/data/tr2.free bs=\
$(/com/lvolfs -a | awk -e '/4D72C/ { print $3 }') count=1
или
avail=$(df /usr | awk -e 'NR==2 { print $5 }')
avail=${avail%*%} # strip off the percent sign
dd if=/dev/rdsk of=//tr2/test/data/tr2.free bs=$avail count=1
(в зависимости от того, как Ваши файловые системы организованы и что вывод df
похож).
Вы могли даже поместить второй в цикл:
for fs in / /usr /home # list the ones you want to include
do
avail=$(df $fs | awk -e 'NR==2 { print $5 }')
avail=${avail%*%} # strip off the percent sign
# create a file on the particular filesystem/mount point
dd if=/dev/rdsk of=//$fs/test/data/tr2.free bs=$avail count=1
done
Исследуйте это тщательно перед использованием его, чтобы удостовериться, что это делает то, что Вы предназначаете.