That may be true for some UNIXes, but not for all UNIXes. For example on FreeBSD, create a process that will stick around for a bit:
# cat >sleepy.c
#include <unistd.h>
int main(void) {
sleep(999);
return 0;
}
# cc -o sleepy sleepy.c
# ./sleepy &
Now try to overwrite it: # cp /bin/date sleepy
cp: sleepy: Text file busy
Now try with install: # install /bin/date sleepy
# ./sleepy
Install was able to get around the "Text file busy" error. Why? # touch a
# stat -f %i a
686974
# cp /etc/motd a
# stat -f %i a
686974
cp here has preserved the inode, it replaced the contents without deleting and recreating the file. Now lets try install: # stat -f %i a
686974
# install /etc/motd a
# stat -f %i a
687076
The inode changed. Why? 46785 install CALL unlink(0x7fffffffed52)
46785 install NAMI "a"
46785 install RET unlink 0
install unlinks the file first before copying the data over. Then it creates a new file/inode (F_CREAT): 46785 install CALL openat(AT_FDCWD,0x7fffffffed52,0x602<O_RDWR|O_CREAT|O_TRUNC>,0600<S_IRUSR|S_IWUSR>)
46785 install NAMI "a"
46785 install RET openat 4