Создайте файл, размер которого в байтах равен проценту свободного места на диске
416
pavium
Мне нужен был метод командной строки для создания файла, размер которого в байтах равен проценту свободного места на диске. Я собираюсь запускать его через cron каждые пять минут, но сначала подойдет скрипт оболочки.
Целевая платформа является BSD4.3 средой в DOMAIN / OS, поэтому у меня есть ksh, awk, sedи обычные команды BSD, но не GNU версия.
Я могу запустить команду lvolfs -a( не команду BSD), которая перечисляет свободное место на томе в следующем формате:
таким образом, кажется простым извлечь значения, в данном случае 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
Это работает, и мне нужно будет повторить что-то подобное для узла 52055, но мне интересно, если ddэто единственный способ использовать действительно базовые команды BSD. Есть ли у кого-нибудь предложения?
РЕДАКТИРОВАТЬ: Еще немного справочной информации о целевой системе ... это HP / Apollo DN433 'Engineering Workstation', колени пчелы, когда она была выпущена в начале 80-х, но теперь примерно такая же впечатляющая, как система 486DX. Нативная ОС пытается имитировать Unix, предоставляя «среду» BSD4.3 с разумным набором команд BSD, но есть соблазн смешивать команды BSD и Aegis (например lvolfs), как я сделал здесь.
У меня есть две рабочие станции, каждая из которых управляет автоматическим испытательным оборудованием. Две рабочие станции объединены в сеть, и корневой сетевой каталог //включает в себя tr2 (идентификатор узла 4D72C) и tr3 (идентификатор узла 52055). Вы действительно не хотите или не должны знать все эти вещи - я просто хотел бы создать впечатление, что ничто не должно восприниматься как должное. Я не хочу, чтобы кто-то тратил слишком много времени на эти вещи - это моя работа, но я буду благодарен за любые ваши предложения. Оболочка Корн для меня все еще остается загадкой.
ОБНОВЛЕНИЕ: df -aкоманда в DOMAIN / OS дает
$ 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, может быть предпочтительным. Лишь небольшое препятствие в том, что мы получаем дисковое пространство используется не бесплатно, но это можно преодолеть.
1 ответ на вопрос
1
Dennis Williamson
Я бы использовал dd. Вы говорите "lvolfs -a (не команда BSD)". У тебя есть df? Это был бы более стандартный и переносимый способ получения информации об объеме использования.
Для этого не нужно создавать временный файл сценария. Вы должны быть в состоянии сделать:
(в зависимости от того, как организованы ваши файловые системы и как dfвыглядит вывод ).
Вы могли бы даже поместить второй в цикл:
for fs in / /usr /home # list the ones you want to include do avail=$(df $fs | awk -e 'NR==2 { print $5 }') 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
Внимательно изучите это, прежде чем использовать его, чтобы убедиться, что оно соответствует вашим намерениям.
Спасибо за предложение. Команда `lvolfs` является родной DOMAIN / OS и, конечно, дает другой формат для` df`. Я предпочитаю формат, заданный `lvolfs`. Мне не нужно беспокоиться о портативности. Я попробую использовать `df`, но мне придется подождать до понедельника, когда я вернусь на работу.
pavium 14 лет назад
0
Мы думали о команде `df` и о том, насколько близко ее вывод напоминает то, к чему мы привыкли. Я отредактировал вопрос, чтобы добавить немного дополнительной информации о странной системе, над которой нужно работать.
pavium 14 лет назад
0
Спасибо Деннис, я решил придерживаться `lvolfs -a`, но я использовал вашу идею удаления временного файла. Я должен попытаться еще немного толкнуть ksh на этом древнем оборудовании.
pavium 14 лет назад
0