Поскольку вы запускаете это от имени root (используя sudo
), вы проверили, есть ли псевдоним для cp
в .bashrc
или .profile
?
Что-то вроде:
alias cp="cp -i"
Попробуйте запустить команды с '\
', например так:
sudo \cp -R /home/git/repo /var/www/website
\
в \cp
заставит cp
работать без псевдонима.
Каталоги /home
и /tmp
не очень подходят для этого, как и использование символической ссылки. Создайте каталог для хранения файла и установите для него разрешения с помощью ACL. Допустим, ваше имя пользователя - peter
. Некоторые из приведенных ниже команд могут оказаться лишними, и они приведены просто для наглядности.
# Make a new directory to store the `file.txt`.
#
sudo mkdir /var/my_dir
# Change ownership and group ownership to root.
#
sudo chown root:root /var/my_dir
# Only allow root and members of root to read the directory.
#
sudo chmod 0750 /var/my_dir
# Begin to augment standard permissions with ACLs.
# Below, allow peter rwx for all new file system objects in /var/my_dir.
# (-d means "default" and -m means "mask")
#
setfacl -d -m u:peter:rwx /var/my_dir
# Set the same mask for the directory itself.
#
setfacl -m u:peter:rwx /var/my_dir
# Below, allow postgres r-x for all new file system objects in /var/my_dir.
#
setfacl -d -m u:postgres:r-x /var/my_dir
# Set the same mask for the directory itself.
#
setfacl -m u:postgres:r-x /var/my_dir
Теперь peter
может создавать файлы в /var/my_dir
, а postgres
может их читать.
Также может быть удобно связать каталог в вашем домашнем каталоге.
cd && ln -s /var/my_dir .
Файлы в /tmp
должны исчезать при перезагрузке. Вообще говоря, или, возможно, спорно, не стоит ссылаться на файлы в вашем домашнем каталоге. Я могу объяснить это утверждение, если вы еще не поняли. Лучшим расположением для этой цели может быть /usr/local/var/my_dir
, но главное - постараться правильно установить права доступа, а не использовать для этого символические ссылки /tmp
и /home
.
Обновление
Это также может быть сделано стандартным, более простым способом, который будет более совместим с другим программным обеспечением, таким как SFTP/SCP клиенты.
sudo mkdir /var/my_dir
sudo chown peter:postgres /var/my_dir
sudo chmod 0750 /var/my_dir
Теперь все файлы, существующие в /var/my_dir
, могут быть прочитаны только root
, peter
и postgres
, а записаны только peter
и root
.
Затем просто убедитесь, что ваша umask
создает файлы, которые postgres
может читать.
cd
touch test
ls -l test
Если результат показывает r
для "others", то postgres
сможет прочитать файл в /var/my_dir
.
Еще один подход...
sudo touch /usr/local/var/file.txt
sudo chown peter:postgres /usr/local/var/file.txt
sudo chmod 0640 /usr/local/var/file.txt
cd
ln -s /usr/local/var/file.txt .
Выше мы работаем с одним файлом, без каталогов. Опять же, все это просто установка прав доступа. Вы просто должны решить, как вы хотите подойти к ситуации, имея больше знаний о том, что вы делаете, чем то, что мы можем прочитать в вопросе.
Здесь существует заблуждение. Нет смысла менять права символической ссылки. Цитирую страницу руководства chmod
(выделение жирным - моё):
chmod
никогда не изменяет права символических ссылок; системный вызовchmod
не может изменить их права. Это не является проблемой, поскольку разрешения символических ссылок никогда не используются.
Символьные ссылки не нужны. Чтобы поделиться файлом с PostgreSQL, вы должны изменить группу-владельца файла на группу пользователя postgres
(то есть postgres
на Debian-подобных системах), затем chmod g+rw
вашего файла.