Найдите самое длинное имя файла

Большинство производителей дисков используют перемычку, позволяющую устройству управлять собственным питанием. Например, на дисках Green Western Digital перемычка устанавливается на контакты 3 и 4 (второй ряд справа, если смотреть на блок перемычек с задней стороны диска). После этого диск не будет вращаться без команды. Это позволяет контроллеру RAID или хранилища запускать диски последовательно или по мере необходимости.

Ниже предлагаются некоторые подходы, не относящиеся к конкретной арке. Ваш пробег может варьироваться.

Если диски соединены перемычками, необходимо инициировать запуск при монтировании. Во время загрузки это делается с помощью сценария в /etc/init.d или сценария "start on starting mountall" в зависимости от init(8) вашей системы. Это не является проблемой, если вы никогда не монтируете до тех пор, пока это не потребуется.

после их обнаружения udev(8) или другой демон может волшебным образом начать "спящие" диски, что потребует изменения правил демона.

Возможно, потребуется создать /sbin/mount. scrips для перехвата команд монтирования и подготовки диска перед использованием оригинальной программы монтирования для данного типа ФС. Например, переместите /sbin/mount.cifs в какое-нибудь место вроде /usr/lib/mount/ и вызывайте его из сценария (или программы), который вы поместите в /sbin/mount.cifs и который первоначально подает питание на диск и, возможно, ждет, пока он будет готов.

umount(8), как указано выше, для перевода дисков в спящий режим.

udev(8) будет выдавать событие "устройство выключено/включено", которое вы захотите обработать/использовать при изменении состояния устройства.

Когда ваши устройства будут вращаться только тогда, когда это необходимо, вы можете использовать automount(8) или afuse(8) для автоматического управления. Таким образом, всякий раз, когда вы обращаетесь к файлу на спящем диске, он будет вращаться, монтироваться и возвращать данные прозрачно - хотя и с некоторой задержкой. Если диск простаивает некоторое время, он выполнит umount(8) и отключится.

-1
31.10.2018, 17:36
3 ответа

Используйте оболочку для выполнения арифметических действий после чтения файлов:

$ echo 123 > file1
$ echo 123 > file2
$ printf '%d\n' $(( $(<file1) + $(<file2) ))
246
$ printf '%d\n' $(( $(<file1) / $(<file2) ))
1

В качестве альтернативы используйтеbc:

bc <<< $"$(<file1) + $(<file2)"
bc <<< $"$(<file1) / $(<file2)"

здесь мы поручили bcвыполнение арифметических операций, а оболочке — чтение содержимого файлов перед передачей его bcв качестве входных данных.

1
28.01.2020, 05:08

Предположим, что все, что у вас есть в этих файлах, это числа без дополнительного текста, вот один -лайнер на perl, который суммирует все строки во всех файлах, которые вы ему даете:

perl -ne '$s+=$_;END{print "$s\n"}' file1 file2 file3...

Это работает, потому что переключатель -nуказывает Perl выполнять данный код в каждой строке заданных файлов. Каждый раз содержимое строки помещается в переменную $_. Итак, $s+=$_просто сохраняет текущую сумму, а в ENDмы печатаем значение $s.

То же вawk:

awk '{ s+= $0 } END{print s}' file1 file2 file3...
0
28.01.2020, 05:08
$ echo 123 > file1; echo 234 > file2
$ paste -d+ file1 file2 | bc
357
$ paste -d/ file1 file2 | bc -l
.52564102564102564102
1
28.01.2020, 05:08

Теги

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