Как скоро Линукс заметит, что диск был отсоединен? И может ли это быть быстрее?

Вы можете получить длину строки переменной, используя $ {# variable} . И вы должны использовать -gt вместо > в выражении [ ] .

#!/bin/bash -

pass=$(cat < "$1") || exit
if [ "${#pass}" -gt 32 ]; then
    echo >&2 "Error: Password length invalid"
    exit 1
else
    echo "okay"
fi

Подсчитывается количество символов (интерпретируемых в кодировке текущей локали), а не байтов, в файле, переданном в качестве первого аргумента, за исключением завершающих символов новой строки, поэтому для файла, содержащего одну строку текста, вы получите номер символов в этой строке.

0
01.08.2018, 23:39
1 ответ

Задержка, вероятно, вызвана udisk2& udev.

Исследования

$ ps -eaf|grep [u]disk
root     17041     1  0 09:48 ?        00:00:00 /usr/libexec/udisks2/udisksd

Может запрашивать устройства хранения вот так:

$ udisksctl status
MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
VBOX HARDDISK             1.0       VBc5aaf476-f419b1f1  sda

Если вы посмотрите на процесс udisk2:

$ lsof -p $(pidof udisksd) | tail
udisksd 17041 root    3u     unix 0xffff88003a49d400      0t0     611852 socket
udisksd 17041 root    4u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    5u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    6u     unix 0xffff88003a49c000      0t0     611853 socket
udisksd 17041 root    7u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    8r      REG                0,3        0     611907 /proc/17041/mountinfo
udisksd 17041 root    9r      REG                0,3        0 4026532019 /proc/swaps
udisksd 17041 root   10r  a_inode                0,9        0       4852 inotify
udisksd 17041 root   11u  netlink                         0t0     611910 KOBJECT_UEVENT
udisksd 17041 root   12u  a_inode                0,9        0       4852 [eventfd]

Там не так много всего, главное, что бросается в глаза, это inotify. Всякий раз, когда я это вижу, я сразу же думаю об udev.

Поиск правил udev

$ find /etc/udev/rules.d/ /usr/lib/udev/rules.d  | grep sto
/usr/lib/udev/rules.d/90-alsa-restore.rules
/usr/lib/udev/rules.d/60-persistent-storage.rules
/usr/lib/udev/rules.d/60-persistent-storage-tape.rules

Второй файл выглядит интересно, загляните внутрь. Эта строка выглядит как причина:

$ cat /usr/lib/udev/rules.d/60-persistent-storage.rules
...
# enable in-kernel media-presence polling
ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"

ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"

Ссылки

2
28.01.2020, 02:31

Теги

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