Вы можете попробовать сами:
$ cp /usr/bin/sleep /tmp/sleep
$ /tmp/sleep 20 &
$ truncate -s 1 /tmp/sleep
truncate: cannot open '/tmp/sleep' for writing: Text file busy
Система не позволяет вам изменить запущенный двоичный файл. Однако вы можете разорвать связь с файлом и изменить его:
$ /tmp/sleep 20 &
$ rm /tmp/sleep
$ cp /usr/bin/ls /tmp/sleep
$ [2]- Done /tmp/sleep 20
Обратите внимание, что для сценариев оболочки ядро не защищает сценарий, поскольку занятый двоичный файл - это, например, / bin / bash. Вы не должны перезаписывать файл сценария оболочки, но вы можете удалить его и заменить новым.
Что касается установки обновленных пакетов, то зависит от упаковщика, будет ли запущен запущенный демон или нет.Я не знаю, существует ли соглашение, но я просмотрел несколько примеров скриптлетов rpm в моей системе Fedora, и они, похоже, перезапускаются при обновлении. Например,
$ rpm --scripts -qf /usr/sbin/xinetd
...
postuninstall scriptlet (using /bin/sh):
...
if [ $1 -ge 1 ] ; then
# Package upgrade, not uninstall
systemctl try-restart xinetd.service >/dev/null 2>&1 || :
fi
Обновление пакета rpm -U
запустит новые сценарии до и после установки, а затем старые сценарии до и после удаления. Как видно выше, postuninstall перезапустит службу systemd.
Из комментариев ознакомьтесь также с этим ответом об общих библиотеках и обратите внимание, как изменение интерпретируемых сценариев очень сильно зависит от того, как интерпретатор буферизует или перечитывает файл, или перекомпилирует его в новый файл на летать.
поскольку внешний адрес является 5-м столбцом, попробуйте вывести netstat
с awk
, вы можете легко собирать/манипулировать данными для каждого столбца.
netstat -tn|awk '{print $5}'
вывод предоставит вам только пятый столбец, который является внешним адресом
#!/bin/bash
while true
do
netstat -tn|awk '{print $5}' >> output.netstat
sleep 60
done