Необходимо было бы использовать что-то большее чем просто sort
команда. Сначала grep
b
строки, затем d
строки и затем сортируют что-либо без b
или d
в конце этого.
grep '^b' myfile > outfile
grep '^d' myfile >> outfile
grep -v '^b' myfile | grep -v '^d' | sort >> outfile
cat outfile
приведет к:
b
d
a
c
Это предполагает, что строки запускаются с 'шаблона' b
и d
если это - целый шаблон, или что-то в строке можно не учесть каре (^
)
Короткий эквивалент был бы:
(grep '^b' myfile ; grep '^d' myfile ; grep -v '^b' myfile | grep -v '^d' | sort)
Я не знаю точно о файле init.d
, но правило udev
для выполнения скрипта на устройстве может выглядеть так:
ACTION=="add", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", RUN+="/path/to/executable"
Вам следует немного покопаться в udevadm
, чтобы узнать больше о том, как обычно добавляется устройство и как загружаются его модули. Там же вы найдете правильные значения для VID
и PID
.
Принимает ли он комбинацию и устройства, и модуля ядра?
Да. Ну... нет. Может быть? Ответ на этот вопрос полностью зависит от уровня, на котором вы перехватываете устройство. udev
должен делать много вещей от точки, в которой он изначально обнаруживает устройство, до точки, в которой он полностью загрузил и инициализировал устройство, и это можно считать до .
Некоторые из этих вещей вполне вероятны:
изначальное обнаружение аппаратуры на его родительской шине/устройстве/подсистеме
поиск и загрузка соответствующего модуля ядра
, заполняющего файловую систему /dev
devfs
с соответствующим специальным файлом устройства
обнаружение любых дочерних устройств, которые текущее устройство добавляет и прополосканивает, повторите
Вы можете указать правило для всех или любого из этих уровней действия. Вы также можете udevadm
trigger
или monitor
или несколько других вещей непосредственно в реальном времени, чтобы точно определить, какими могут быть эти уровни действий.
Я рекомендую вам внимательно ознакомиться с этой информацией , если вы хотите подробнее с ней ознакомиться.
.Для этого используйте задание Upstart:
# Ensures that the device is up and filesystem is too
start on filesystem and net-device-up IFACE=ib0
stop on runlevel [016]
# Ensures that module is loaded
pre-start exec modprobe -q knem
exec /path/to/exec