OSError: [Ошибка 1] Операция не разрешена

Я пытаюсь запустить скрипт Python, который использует двоичный файл (xFiles.bin.addr_patched), созданный постлинкером. Однако я получаю эту ошибку.

File "abc.py", line 74, in ParseCmd
shutil.copy(gOptions.inputX, gWorkingXFile)
File "/usr/lib/python2.6/shutil.py", line 89, in copy
copymode(src, dst)
File "/usr/lib/python2.6/shutil.py", line 66, in copymode
os.chmod(dst, mode)

OSError: [Errno 1] Operation not permitted: 'myPath/xFiles.bin.addr_patched'

Когда я проверил разрешения этого xFiles.bin с помощью ls-l, он показывает, что

-rwxrwxrwx 1 nobody  nogroup 

Я предполагаю, что ошибка связана с тем, что этот файл был создан каким-то другим приложением, а скрипт Python, который я запускаю, не имеет к нему доступа. Поскольку я новичок в Ubuntu, я действительно не знаю, как это исправить. Любые предложения о том, как это исправить?

РЕШЕНО:

В качестве одного из предложенных ответов: chown имя пользователя:имя_группы имя файла устраняет эту проблему


person user1357576    schedule 07.06.2012    source источник
comment
Вы должны показать некоторый код, который вы используете. Что вы на самом деле делаете? Здесь может быть несколько случаев, которые вызывают эту проблему.   -  person Fatih Arslan    schedule 07.06.2012
comment
Каков полный путь к myPath? Это в каталоге, принадлежащем root? Это в /tmp? Это где-то в вашей домашней папке?   -  person Linuxios    schedule 07.06.2012
comment
Может быть, это может помочь -- заголовок stackoverflow.com/questions/10922020/   -  person corn3lius    schedule 07.06.2012
comment
@Linux_iOS.rb.cpp.c.lisp.m.sh мой путь — это /home/anotherfolder/...   -  person user1357576    schedule 07.06.2012
comment
@ user1357576: И это твой домашний каталог?   -  person Linuxios    schedule 07.06.2012
comment
Хорошо, проблема в том, что вы выполняете это не в том месте. /home/anotherfoler не принадлежит вам. Просто скопируйте скрипт в /tmp или ~ (ваша домашняя папка).   -  person Fatih Arslan    schedule 07.06.2012
comment
Или дайте вывод pwd пожалуйста   -  person Fatih Arslan    schedule 07.06.2012


Ответы (4)


Вы можете попробовать (из командной строки, но я уверен, что в python есть синтаксис):

sudo chown your_username:your_groupname filename

Примечание. Группа обычно представляет собой просто ваше имя пользователя. Я чувствую, что с этими разрешениями что-то не так. Чтение, запись, выполнение для всех, похоже, выключено. Как был создан этот файл? Как получилось, что его создал пользователь nobody?

person Linuxios    schedule 07.06.2012
comment
@ user1357576: С sudo? И что не работает? Права не меняются? Есть ли ошибка? Что такое ls -l filename вывод? - person Linuxios; 07.06.2012
comment
-rwxrwxrwx 1 myUsername nogroup — это изменение. Однако я имел в виду, что это не работает. Так как ошибка не исчезает - person user1357576; 07.06.2012
comment
Какие права доступа к папке myPath? - person Linuxios; 07.06.2012
comment
drwxrwxrwx — разрешение на путь - person user1357576; 07.06.2012
comment
@Linux_iOS.rb.cpp.c.lisp.m.sh Я попробовал отредактированный скрипт. Теперь я владелец, и группа также установлена, но ошибка просто не исчезнет. Я все еще сталкиваюсь с той же проблемой. - person user1357576; 08.06.2012
comment
@ user1357576: Что произойдет, если вы попробуете что-то вроде echo Bork > thefile? - person Linuxios; 08.06.2012
comment
@Linux_iOS.rb.cpp.c.lisp.m.sh Большое спасибо за вашу помощь. Скрипт сработал. Я был так глуп. Я устанавливал неправильное имя пользователя. в основном у меня другое имя для входа и другое имя пользователя. Я неправильно указал имя владельца, поэтому не смог решить проблему. Всем большое спасибо и извините за мою глупость и трату вашего времени. В итоге все хорошо :) - person user1357576; 08.06.2012
comment
Нам действительно не нужно менять владельцев файлов только для того, чтобы их скопировать (и довольно часто это все равно недопустимо). Разве ответ не совпадает с stackoverflow.com/questions/11835833/ - вместо этого использовать Shutil.copyfile ()? - person Joe Watkins; 17.02.2015

Код Python для изменения разрешения:

from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("YOUR_USERNAME")[2]
gid = grp.getgrnam("YOUR_GROUPNAME")[2]
os.chown("myPath/xFiles.bin.addr_patched", uid, gid)

Запустите скрипт с помощью sudo, и все готово.

person Fatih Arslan    schedule 07.06.2012
comment
Не лучшая идея запускать собственные сценарии с помощью sudo... Особенно, если вы не знаете, работают ли они. - person Linuxios; 07.06.2012
comment
@FatihArslan Дело в том, что я не хочу вмешиваться в код Python, потому что это стандартное приложение, и внесение изменений в этот скрипт может быть головной болью. Я запускаю внешний скрипт оболочки, который вызывает скрипт python. Как вы думаете, могу ли я внести какие-либо изменения в этот сценарий оболочки? - person user1357576; 07.06.2012

Я предполагаю, что вместо этого вы должны смотреть на права доступа к папке myPath. Похоже, вы не можете писать на него, отсюда и проблема. Попробуйте ls -l myPath/.. и посмотрите разрешения для myPath. Если проблема в этом, измените права доступа к папке с помощью chmod.

P.S. Также см. лучшие результаты Google по разрешениям на доступ к файлам в Linux.

person Lev Levitsky    schedule 07.06.2012
comment
Может chmod, но скорее chown. - person Linuxios; 07.06.2012
comment
Я проверил разрешение всего пути. Все каталоги имеют полные права доступа, и ни один из них не защищен от записи. - person user1357576; 07.06.2012
comment
namei -m myPath/ — это удобный ярлык для проверки всех разрешений на пути. - person 7yl4r; 14.05.2018

У меня была эта проблема при запуске скрипта Python на моем Mac (10.14 Mojave), пытающегося получить доступ к /Users/xxx/Pictures/Photos Library.photoslibrary. Полное решение можно найти на странице http://osxdaily.com/2018/10/09/fix-operation-not-permitted-terminal-error-macos/

Резюме. Перейдите в «Системные настройки» > «Безопасность и конфиденциальность» > «Конфиденциальность» > «Полный доступ к диску» и добавьте в список свою IDE или интерпретатор Python.

person Federico    schedule 03.01.2020
comment
Да, это было единственное решение, потому что Apple изменила (снова) что-то, чтобы сделать его более неудобным. Не могу дождаться, пока я получу свою систему Linux. Спасибо. - person Coliban; 14.10.2020