cp without overwriting destination permissions

If you've only opened the manual for cp...

The next will not overwrite the file permissions and ownership + groupship:

cp --no-preserve=mode,ownership /tmp/file /home/file

Note that root privileges are needed if you want to preserve the ownership and groupship.

An excerpt from the manual:

  --preserve[=ATTR_LIST]
      preserve   the   specified   attributes   (default:  mode,owner-
      ship,timestamps), if possible  additional  attributes:  context,
      links, xattr, all

cat will work, too:

cat /tmp/file > /home/file

By default, GNU cp (version 8.32) will NOT overwrite destination permissions, so the question is moot:

% ls -li
total 8,192
19392015 -rwxrwxrwx 1 ravi ravi 4 Jan  3 16:54 bar*
19392014 -rw-r--r-- 1 ravi ravi 4 Jan  3 16:46 foo
% cp foo bar
% ls -li
total 8,192
19392015 -rwxrwxrwx 1 ravi ravi 4 Jan  3 16:57 bar*
19392014 -rw-r--r-- 1 ravi ravi 4 Jan  3 16:46 foo
%

In the case where the destination file is not writable (even though the directory is), cp will say:

cp: cannot create regular file 'dest-file': Permission denied

Other options besides cp:

cat will preserve the inode and permissions of the destination file:

cat file-with-new-data > file-to-overwrite

However, redirections won't work with sudo.

If you want to sudo and keep the destination permissions, use this:

< file-with-new-data sudo tee file-to-overwrite > /dev/null

This is equivalent to the more verbose:

cat file-with-new-data | sudo tee file-to-overwrite > /dev/null