cp and mv behaviour on a busy binary file

Lowell Gilbert freebsd-questions-local at be-well.ilk.org
Mon Jul 11 14:55:52 UTC 2016


Solène <solene at perso.pw> writes:

> I found a not coherent behaviour when overwriting a busy binary and I
> would like an explanation on this.
> When overwriting a busy binary file, without -f flag, cp won't copy
> the file over the executable while mv will ask if you really want to
> overwrite it.
> When using -f, they act the same, the file get overwrited.
>
> Example here :
>
> shell at example : cat test.c
> #include <unistd.h>
>
> int main() {
>         sleep(1000);
>         return 0;
> }
> shell at example : clang test.c
> shell at example : ./a.out &         <- I start the executable
> [1] 83540
> shell at example : touch file
> shell at example : cp file a.out
> cp: a.out: Text file busy         <- cp don't agree
> shell at example : mv file a.out
> override rwxr-xr-x  solene/solene for a.out? (y/n [n]) y <--- mv asks

I believe this behaviour is specifically required by POSIX.
mv(1) must act according to rename(2) and
cp(1) must act according to open(2).


More information about the freebsd-questions mailing list