Làm cách nào tôi có thể sử dụng các lệnh với sudo mà không thay đổi chủ sở hữu của các tệp?


12

Khi tôi sử dụng sudo để thực hiện một số hoạt động với các tệp, các tệp này thay đổi quyền sở hữu. Làm cách nào tôi có thể sử dụng các lệnh với sudo mà không thay đổi chủ sở hữu của các tệp?

Ví dụ tệp archivos35.sh là từ apache nhưng tôi sử dụng sed (với usr admin sudo)

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

Người dùng adminvới sudo ---

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

Nhưng thực hiện lệnh đó với sudo sẽ thay đổi chủ sở hữu của tệp

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

Làm thế nào tôi có thể tránh sử dụng lệnh với sudo để thay đổi chủ sở hữu của tệp? Tôi chỉ muốn thay đổi tập tin mà không sửa đổi chủ sở hữu của nó.


Tại sao kịch bản của bạn có thể viết được trên thế giới?
Jim L.

Do nhầm lẫn, tôi đã đặt nó với 756. Tôi không nên
Dok Gus

Câu trả lời:


29

Nếu bạn cần sử dụng sudođể sửa đổi tập tin, sau đó sử dụng nó để chuyển sang đúng người dùng. Bạn không cần phải chuyển sang root, đó chỉ là mặc định. Vì vậy, trong trường hợp của bạn, bạn muốn làm:

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

Điều đó sẽ chạy sedlệnh như người dùng apache.


2

Bạn không thực sự thay đổi quyền sở hữu tệp, thay vào đó bạn đang xóa tệp cũ và tạo tệp mới. Khi bạn làm điều đó, tập tin mới được tạo ra thuộc sở hữu của uid của người tạo. Để tránh điều này, bạn phải sửa đổi các tập tin tại chỗ. Chỉnh sửa nó bằng trình chỉnh sửa văn bản lưu bằng cách ghi đè tệp gốc vào vị trí. Hoặc chạy các lệnh sed của bạn với đầu ra thành tệp tạm thời và sau đó sao chép tệp tạm thời qua tệp gốc.


1
Bạn sẽ nghĩ rằng -itùy chọn aka --in-placethực sự sẽ sửa đổi tại chỗ ...
JShorthouse

Whit Phản hồi @teldon, tôi quản lý để làm những gì tôi cần. với sed tôi sửa đổi địa điểm mà không cần mở tập tin.
Dok Gus

1
@JShorthouse Bạn sẽ nghĩ, nhưng nó không, ít nhất là không phải ở mọi nơi.
Kyle Jones

3
@JShorthouse hầu hết các chỉnh sửa được gọi là 'tại chỗ' không phải, họ chủ yếu thay đổi một tệp tạm thời và sau đó chuyển nó qua bản gốc (và bao gồm hầu hết, nếu không phải tất cả, triển khai sed và perl. Và hầu hết các chương trình khác với tùy chọn "chỉnh sửa tại chỗ"). Nếu bạn muốn thực sự chỉnh sửa tại chỗ, sử dụng một trình soạn thảo văn bản kịch bản như edhoặc exhoặc vi/ vim.
cas

1
Thậm chí, một số trình soạn thảo văn bản sử dụng phương thức temp + đổi tên khi viết tệp, vì không an toàn trong trường hợp bị sập trong khi viết. Ví dụ, Emacs thực hiện điều này theo mặc định, nhưng bạn có thể ghi đè lên nó bằng cấu hình.
Barmar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.