awk '{$1=$1}1' OFS="\t" students.txt
$ awk '{$1=$1}1' OFS="\t" students.txt
Surname Forename MSc Stream Date of Birth
Smith John IT 15.01.1986
Taylor Susan IT 04.05.1987
Thomas Steve MIT 19.04.1986
Причина это не работало, состоит в том потому что awk
требует, чтобы одно из полей было изменено, прежде чем оно применит нового выходного разделителя полей. Обходное решение для этого дефекта (по моему скромному мнению), должно просто установить поле на себя, следовательно $1=$1
Для этого простого типа изменения Вы - более обеспеченное использование tr
или sed
tr -s ' \t' '\t*' < students.txt
sed 's/[[:space:]]\+/\t/g' students.txt
Udev использует inotify механизм для наблюдения за изменениями в каталоге правил, и в библиотеке и в локальных деревьях конфигурации (обычно расположенный в /lib/udev/rules.d
и /etc/udev/rules.d
). Таким образом, большую часть времени Вы ничего не должны делать при изменении файла правил.
Только необходимо уведомить udev демона явно при выполнении чего-то необычного, например, если у Вас есть правило, которое включает файлы в другой каталог. Затем можно использовать обычную конвенцию для просьбы, чтобы демоны перезагрузили их конфигурацию: отправьте SIGHUP (pkill -HUP udevd
). Или можно использовать udevadm
команда: udevadm control --reload-rules
.
Однако остерегайтесь этого, различные версии udev исторически имели различные триггеры для перезагрузки правил автоматически. Таким образом, если в сомнении, звонить udevadm control --reload-rules
: это не будет делать ничего плохого так или иначе.
Правила udev только применяются, когда устройство добавляется. Если Вы хотите повторно применить правила к устройству, которое уже подключено, необходимо сделать это явно путем вызова udevadm trigger
с правильными опциями соответствовать устройству (устройствам), конфигурация которого изменилась, например. udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
.
Я добавляю это, потому что когда-нибудь оно мне понадобится ... снова.
Иногда вы получаете неправильное соответствие номеров устройств Ethernet и MAC-адресов. Иногда это действительно важно, например, при работе в виртуальной машине, когда каждое устройство назначается отдельной VLAN.
/etc/udev/rules.d/70-persistent-net.rules
(или его эквивалент) udevadm control --reload-rules
триггер udevadm --attr-match = subsystem = net
Я был удивлен, насколько хорошо это сработало.
Я не уверен, применимо ли это, и это определенно более старый пост, но он оказался довольно популярным в моем веб-поиске информации udev, поэтому я подумал, что могу поделиться некоторыми знаниями.
Вы можете запускать правила udev вручную для определенных устройств. Это относится только к дистрибутивам, относящимся к redhat (centos fedora и т. Д. И т. Д.)
После внесения соответствующих изменений в файл правил ( /etc/udev/rules.d/whateveryoucalledyourrules
) вы сможете повторить изменить
в uevent устройства.
echo change > /sys/block/devname/partname1/uevent
Это приведет к принудительному чтению правила udev ТОЛЬКО для этого устройства. На мой взгляд, гораздо лучше и целенаправленнее.
Для меня нижеприведенная последовательность команд сработала так, как нужно.
Я сделал изменения в /etc/udev/rules.d/70-persistent-net.rules
, чтобы изменить eth
номер и перезагрузить их без перезагрузки.
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
Следуя этому, он был успешно загружен во время выполнения без перезагрузки машины.
Любые предложения или рекомендации по этому поводу приветствуются, так как я обнаружил это самостоятельно, читая man-страницы.
Я добавляю сюда правильный ответ, потому что мне потребовалось некоторое время, чтобы заметить его в комментарии от @энтузиаста-гика. Все, что вам нужно сделать (при условии, что вы находитесь на консоли сервера — очевидно, что это плохо делать, если вы подключены по ssh!):
кошка /etc/udev/rules.d/70-persistent-net.rules | grep "PCI-устройство" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
В моем случае это igb
, поэтому он печатает именно это.
sudo rmmod igb
(замените igb
драйвером карты, полученным на шаге 1. затем отредактируйте /etc/udev/rules.d/70 -persistent-net.rules
по мере необходимости, затем снова загрузите модуль, используя modprobe igb
, снова заменив igb
на свой
в случае нескольких сетей
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | awk '{print $NF}'|sed -e 's/(//g' -e 's/)//g'| uniq > /tmp/listnet
rm -rf /etc/udev/rules.d/70-persistent-net.rules
for i in $(cat /tmp/listnet); do rmmod $i; modprobe $i;done
service network restart
rm -rf /tmp/listnet
Это небольшое изменение по сравнению с основной ответ:sudo
казался мне необходимым для обеих команд.
Неподтвержденное свидетельство :выполнение sudo udevadm trigger
заняло ~2 секунды, но выполнение этого без sudo заняло всего ~0,2 секунды. Так что ясно, что они не делают то же самое для меня. Сделайте это вместо этого:
sudo udevadm control --reload-rules
sudo udevadm trigger
И, наконец, (по 2-й ссылке ниже ), отключите устройство и снова подключите его .
См. также комментарии к обоим ответам выше.
udevtrigger
впоследствии? – Nils 26.05.2012, 23:28udevtrigger
(или скорееudevadm trigger
на большинстве дистрибутивов) вместо этого (что, или разъем устройство и спина это).--reload-rules
почти всегда бесполезно, как это происходит автоматически. – Gilles 'SO- stop being evil' 05.03.2013, 12:28udevadm trigger
добился цели на CentOS 6 для меня. – astrostl 07.08.2013, 21:19udevtrigger
илиudevadm trigger
не работал на меня. Я нашел, что некоторые устройства будут работать после разгрузки и загрузки модуля для того же (предположение, что это - загружаемый модуль). То, что я узнал, нужно не обязательно перезагрузить систему. Пример для сетевого устройства, я делаюrmmod ixgbe
,rmmod tg3
,rmmod e1000
затемmodprobe ixgbe
,modprobe tg3
,modprobe e1000
в зависимости от типа сетевого драйвера. – enthusiasticgeek 22.01.2015, 22:25ip link set $oldname name $newname
упомянутый здесь. В моем случае я должен был заменить названный ifacelan
с соединенным мостом iface (для KVM), и следовательно оригинал - теперь лежащий в основе - iface должен был получить свое старое название,eth1
, назад. Таким образом, прием был: 1) снижают iface; 2) ремонтируют сетевую конфигурацию; 3) обновлением udev называющий файл правил; 4) переименовывают использование ifaceip link...
; 5) поднимите мост. – kostix 20.03.2015, 17:53