¿Cómo puedo usar comandos con sudo sin cambiar el propietario de los archivos?

12

Cuando uso sudo para hacer algunas actividades con archivos, estos archivos cambian de propietario. ¿Cómo puedo usar comandos con sudo sin cambiar el propietario de los archivos?

El archivo de ejemplo archivos35.sh es de apache pero uso sed (con usr admin sudo)

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

Usuario admincon sudo ---

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

Pero hacer ese comando con sudo cambia el propietario del archivo

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

¿Cómo puedo evitar usar el comando con sudo para cambiar el propietario del archivo? Solo quiero hacer cambios en el archivo sin modificar su propietario.

Dok Gus
fuente
¿Por qué tu guión se puede escribir en todo el mundo?
Jim L.
Por error lo configuré con 756. No debería
Dok Gus

Respuestas:

29

Si necesita usar sudopara modificar el archivo, úselo para cambiar al usuario correcto. No necesita cambiar a root, eso es solo lo predeterminado. Entonces, en su caso, querría hacer:

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

Eso ejecutará el sedcomando como el usuario apache.

terdon
fuente
2

Realmente no está cambiando la propiedad del archivo, sino que está eliminando el archivo antiguo y creando uno nuevo. Cuando haces eso, el nuevo archivo se crea propiedad del uid del creador. Para evitar esto, debe modificar el archivo en su lugar. Edítelo usando un editor de texto que guarde sobrescribiendo el archivo original en su lugar. O ejecute sus comandos sed con salida en un archivo temporal y luego copie el archivo temporal sobre el archivo original.

Kyle Jones
fuente
1
Se podría pensar que la -iopción de alias --in-placeen realidad modificar inplace ...
JShorthouse
Con la respuesta de @teldon, logré hacer lo que necesitaba. con sed modifico el lugar sin abrir el archivo.
Dok Gus
1
@JShorthouse Pensarías, pero no es así, al menos no en todas partes.
Kyle Jones
3
La mayoría de las ediciones 'in situ' de @JShorthouse no lo son, en su mayoría cambian un archivo temporal y luego lo modifican sobre el original (y eso incluye la mayoría, si no todas, las implementaciones de sed. Y Perl. Y la mayoría de los otros programas con una opción de "edición en el lugar"). Si desea una edición real en el lugar, use un editor de texto programable como edo exo vi/ vim.
cas
1
Incluso algunos editores de texto usan el método temp + rename al escribir el archivo, como una prueba de fallas en caso de un bloqueo al escribir. Por ejemplo, Emacs hace esto de manera predeterminada, pero puede sobrescribirlo con la configuración.
Barmar