Операція не дозволена, коли в корі - El Capitan (без коренів)


236

Я намагаюся щось перенести в / usr / bin на OS X El Capitan. Я відключив безрезонне використання таких команд:, sudo nvram boot-args="rootless=0"; sudo rebootале я все одно отримую ту ж помилку:

MacBook-Air:~ Mark$ sudo cp class-dump /usr/bin
Password:
cp: /usr/bin/class-dump: Operation not permitted
MacBook-Air:~ Mark$ sudo mv class-dump /usr/bin
mv: rename class-dump to /usr/bin/class-dump: Operation not permitted

14
Чому ви намагаєтесь поставити клас-дамп у / usr / bin? Місцеві доповнення належать до / usr / local / bin, і без корінь ви можете помістити туди речі ...
Gordon Davisson,

1
Просто зробіть псевдонім у ~ / .bash_profile і не обробляйте з / usr / bin
Warren P

5
class-dump безпосередньо використовується для програмування (інструмент зворотного проектування - безпосередньо для програмування), тому причина закриття не здається дійсною. Крім того, 28 зірок, майже 40 оновлених запитань та 90 відповідей означає, що питання корисне.
Vive

зворотна інженерія, оскільки вона використовується для отримання списку класів?
marciokoko

Відповіді:


355

Нвм. Для всіх, хто має цю проблему, потрібно перезавантажити комп'ютер і натиснути ⌘ + R під час завантаження. Потім перейдіть до Утиліти> Термінал і введіть такі команди:

csrutil disable
reboot 

Це результат захисту цілісності системи. Більше інформації тут .

EDIT

Якщо ви знаєте, що ви робите, і звикли працювати з Linux, вам слід скористатися вищевказаним рішенням, оскільки багато SIP- обмежень - це повна біль у дупі.

Однак якщо ви володар / noob / "poweruser" і не знаєте, що ви робите, це може бути дуже небезпечно, і вам краще скористатися відповіддю нижче .


2
@Chris, Вам потрібно буде знову перезавантажити CMD + R, відкрити термінал і запустити csrutil enable; reboot. На жаль, команда не працює в звичайному режимі, на жаль.
Олександр Качкаєв

7
@AlexanderKachkaev Так, саме це я і зробив. Я просто хотів зазначити, що колись хтось повинен це ввімкнути знову після виконання змін! Інакше захист цілісності системи постійно відключений, що може призвести до серйозних проблем.
Кріс

9
Це призведе до серйозних проблем, якщо ви видалите / модифікуєте щось, чого не слід видаляти / змінювати. Іншими словами, якщо ви знаєте, що ви робите, цілком безпечно залишити це відключеним.
Клінтм

16
Будь-який користувач, який працює на Linux, швидше за все, захоче залишити цю функцію відключеною. Це повний біль у попі.
mschuett

3
@Chris не має сенсу прив’язати руки до свого офісного крісла, щоб не потрапити в машину ... іншими словами ... якщо ти знаєш шукати обидві сторони, перш ніж переходити вулицю ... це абсолютно безпечно не
прив’язати

254

Правильне рішення - скопіювати або встановити, щоб /usr/local/binне /usr/bin. Це пов’язано із захистом цілісності системи (SIP) . SIP робить /usr/binлише читання, але залишається /usr/localяк читання-запис.

SIP не слід відключати, як зазначено у відповіді вище, оскільки він додає ще один рівень захисту від зловмисного програмного забезпечення, що отримує кореневий доступ. Ось повне пояснення того, що робить SIP і чому це корисно.

Як запропоновано у цій відповіді, не слід вимикати SIP (без режиму без режиму) "Не рекомендується відключати режим без корінь! Найкраща практика - встановити власні речі лише для" / usr / local "."


8
Це вирішило мою проблему. Дякуємо за посилання! Перехід без корінь або відключення речей у режимі відновлення видався надзвичайно небезпечним! Радий, що я це знайшов.
caokey

1
Це не дуже зробило для мене хитрість - я мав певну удачу (наприклад, у моєму випадку) javaна /usr/local/bin/javaпсевдоніми bashrc, після того як я зробив відповідне посилання в цій папці, як підказує ця відповідь.
Елі Альберт

Ця відповідь прекрасно вирішила мою проблему. Це має бути прийнятою відповіддю, оскільки вона не потребує змін у системі та не потребує перезавантаження.
Стефан

Таким чином, не робить це залишає ніякої можливості rmщо - або в /usr/bin/? Я розумію, що SIP має своє призначення, але хочу видалити один конкретний виконуваний файл.
Бред Соломон

1
Я маю /usr/local/binна своєму шляху і openssl 1.0.2n правильно позначений, /usr/local/bin/opensslале кожен раз, коли я which opensslце роблю, все ще показує, /usr/bin/opensslяка є старіша OpenSSL 0.9.8zh 14 Jan 2016версія. Як змусити мою систему віддати перевагу /usr/local/bin/opensslтій, ніж іншу?
Франциск0

15

Якщо ви хочете взяти під контроль /usr/bin/

Вам потрібно буде перезавантажити систему:

Відразу після звуку завантаження, утримуйте Command-R для завантаження в систему відновлення

Клацніть меню Утиліти та виберіть Термінал

Введіть csrutil disabled і натисніть клавішу return

Клацніть меню and та виберіть Перезапустити

Після внесення змін обов’язково ввімкніть SIP! Це робить багато для захисту вашої системи. (Ті ж кроки, що й вище, крім типу: csrutil enable)


0

Якщо після виклику "csrutil disabled" все ж ваша команда не працює, спробуйте зі "sudo" в терміналі, наприклад:

sudo mv geckodriver /usr/local/bin

І це має працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.