ls -l /usr/bin/wall
sudo chmod g+s /usr/bin/wall
echo foo | wall
mesg y
acb$ wall test
Необходимо исправить нужный файл.
Как вы его называете, он попытается исправить новый файл и, таким образом, правильно предполагает обратное исправление.
Попробуйте скопировать старую версию файла в текущий каталог, и патч будет применен.
Что касается теста -p0
: есть ли у вас разрешение на изменение/usr/bin/gradle?
Есть ли у вас разрешение на создание файлов в/usr/bin?
Также обратите внимание, что существуют отклоняющиеся правила для исправления имени файла.
Правила, используемые gpatch
, отличаются как от исходного патча, так и от стандарта патча POSIX.
Обратите внимание, что сообщение «not a regular file» специфично для gpatch
. Перечислите файл /usr/bin/gradle
. Сообщение печатается только тогда, когда файл не является обычным файлом, поэтому что-то выглядит странно.
Таким образом, решение состоит в том, что
patch
исправляет только обычные файлы, но файл, который вы хотите исправить, является символической ссылкой.
Если у вас есть копия обычного файла (старой версии) в вашем текущем каталоге, патч будет делать то, что вы ожидаете.
BTW: обычным правилом получения имени файла для исправления является поиск кратчайшего имени, так как обычно используется правило именования:
file.orig
и
file
Если оба файла являются текстовыми, можно использовать команду diff
.
FILE_ONE=/home/file_one.txt
FILE_TWO=/home/file_two.txt
if [ -n "$(diff $FILE_ONE $FILE_TWO)" ];then
cp $FILE_ONE /new_place/
cp $FILE_TWO /new_place/
else
cp $FILE_ONE /new_place/
fi
Проверяется, возвращает ли diff
что-либо, если это так, файлы отличаются и должны быть скопированы, в противном случае он просто копирует файл один.
Должны работать:
sudo useradd -m -k /home/user1/ user2
, где -m говорит создать домашний каталог, а -k предоставляет каталог скелета для использовать.