Come posso usare i comandi con sudo senza cambiare il proprietario dei file?


12

Quando uso sudo per svolgere alcune attività con i file, questi file cambiano proprietà. Come posso usare i comandi con sudo senza cambiare il proprietario dei file?

Il file di esempio archivos35.sh proviene da apache ma io uso sed (con usr admin sudo)

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

Utente admincon sudo ---

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

Ma fare quel comando con sudo cambia il proprietario del file

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

Come posso evitare di usare il comando con sudo per cambiare il proprietario del file? Voglio solo apportare modifiche al file senza modificarne il proprietario.


Perché la tua sceneggiatura è scrivibile in tutto il mondo?
Jim L.

Per errore l'ho impostato con 756. Non avrei dovuto
Dok Gus il

Risposte:


29

Se è necessario utilizzare sudoper modificare il file, quindi utilizzarlo per passare all'utente giusto. Non è necessario passare a root, questo è solo il valore predefinito. Quindi, nel tuo caso, vorresti fare:

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

Ciò eseguirà il sedcomando come utente apache.


2

Non stai davvero cambiando la proprietà del file, ma stai rimuovendo il vecchio file e creandone uno nuovo. Quando lo fai, il nuovo file viene creato di proprietà dell'Uid del creatore. Per evitare ciò, è necessario modificare il file in atto. Modificalo utilizzando un editor di testo che salva sovrascrivendo il file originale in posizione. Oppure esegui i tuoi comandi sed con l'output in un file temporaneo e quindi copia il file temporaneo sul file originale.


1
Penseresti che l' -iopzione aka --in-placecambierebbe effettivamente sul posto ...
JShorthouse,

Con la risposta di @teldon, sono riuscito a fare quello di cui avevo bisogno. con sed modifico il posto senza aprire il file.
Dok Gus,

1
@JShorthouse Penseresti, ma non lo è, almeno non ovunque.
Kyle Jones,

3
@JShorthouse la maggior parte delle cosiddette modifiche "sul posto" non lo sono, cambiano per lo più un file temporaneo e poi lo spostano sull'originale (e che include la maggior parte, se non tutte, le implementazioni di sed. E perl. E la maggior parte degli altri programmi con un'opzione di "modifica sul posto"). Se si desidera una modifica sul posto effettiva, utilizzare un editor di testo tramite script come edo exo vi/ vim.
CAS

1
Anche alcuni editor di testo usano il metodo temp + rename durante la scrittura del file, come fail-safe in caso di crash durante la scrittura. Ad esempio Emacs lo fa per impostazione predefinita, ma è possibile sovrascriverlo con la configurazione.
Barmar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.