Як я можу використовувати команди з sudo, не змінюючи власника файлів?


12

Коли я використовую sudo, щоб виконувати деякі дії з файлами, ці файли змінюють право власності. Як я можу використовувати команди з sudo, не змінюючи власника файлів?

Приклад файлу archivos35.sh - від apache, але я використовую sed (з usr admin sudo)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

Користувач adminз sudo ---

sudo sed -i s/old/new/g archivos35.sh

Але виконання цієї команди з sudo змінює власника файлу

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

Як я можу уникнути використання команди з sudo для зміни власника файлу? Я просто хочу внести зміни у файл, не змінюючи його власника.


Чому ваш сценарій написаний у всьому світі?
Джим Л.

Я помилково встановив це 756. Я не повинен
Док Гус

Відповіді:


29

Якщо вам потрібно sudoзмінити файл, то використовуйте його для переключення на потрібного користувача. Вам не потрібно переходити на root, це лише типовий режим. Тож у вашому випадку ви хочете зробити:

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

Це запустить sedкоманду як користувач apache.


2

Ви насправді не змінюєте право власності на файл, скоріше ви видаляєте старий файл і створюєте новий. Коли ви це зробите, новий файл створюється у власності uid автора. Щоб цього уникнути, ви повинні змінити файл на місці. Відредагуйте його за допомогою текстового редактора, який зберігає, перезаписавши оригінальний файл на місце. Або запустіть ваші команди sed з виведенням у тимчасовий файл, а потім скопіюйте тимчасовий файл у вихідний файл.


1
Ви могли б подумати, що -iопція ака --in-placeфактично
JShorthouse

У відповідь @teldon мені вдалося зробити все, що мені потрібно. з sed я змінюю місце, не відкриваючи файл.
Док Гус

1
@JShorthouse Ви могли б подумати, але це не так, принаймні, не скрізь.
Кайл Джонс

3
@JShorthouse більшість так званих "на місці" редагувань не є, вони здебільшого змінюють тимчасовий файл, а потім переносять його на оригінал (і це включає більшість, якщо не всі, реалізацій сед. Та пер. Та більшість інших програм з опцією "на місці редагування"). Якщо ви хочете реально редагування на місці, використовуйте текстовий редактор , що підтримує сценарії , як edі exчи vi/ vim.
cas

1
Навіть деякі текстові редактори використовують метод temp + перейменувати під час запису файлу як безпечний засіб у разі аварії під час запису. Наприклад, Emacs робить це за замовчуванням, але ви можете перезаписати його конфігурацією.
Бармар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.