macOS - không thể rm mà không có sudo


0

Chủ sở hữu hoàn toàn mới của máy Mac, làm quen với máy.

Tôi đã vấp phải một vấn đề khá phiền phức - tôi không thể sử dụng rm mà không có sudo. Thật vậy, bất cứ khi nào tôi viết một lệnh rm, kết quả là như sau:

rm: illegal option -- I
usage: rm [-f | -i] [-dPRrvW] file ...
   unlink file

trong khi đó nếu tôi sudo thì lệnh đó được thực hiện thành công.

Thông tin bổ sung:

  • macOS Sierra v.10.12.6
  • Tất cả các tệp đều có quyền truy cập 777 và thuộc về 'nhân viên' của người dùng.
  • staffkhông phải là một nhóm / người dùng do người dùng tạo ra. Mong đợi là một người dùng / nhóm cơ sở được cung cấp bởi os.

Vì vậy, câu hỏi là, làm thế nào tôi có thể làm cho nó để tôi không cần phải sudo bất cứ lúc nào tôi muốn sửa đổi các tệp này? (Và bằng cách mở rộng, người dùng 'nhân viên' này là gì?)


1
Thư mục này nằm trong cái gì? Ý bạn là ở mọi nơi? Ngay cả thư mục nhà của bạn? Nếu bạn đã đi vào thư mục chính của bạn ( cd ~/) và sau đó tạo một tệp thông qua touchnhư thế này touch zzz_test.txtvà sau đó rm zzz_test.txtbạn đang nói rằng nó sẽ không hoạt động?
JakeGould

1
Bạn không cần quyền truy cập ghi vào một tệp để xóa nó: bạn cần quyền truy cập ghi vào thư mục mẹ của nó. Lưu ý rằng sudohoạt động trong một môi trường khác với bashvỏ nó được gọi từ. Dường như bạn có một bí danh hoặc hàm được xác định lại rmbằng cách thêm các tham số bổ sung: sử dụng type -a rmđể tìm tất cả các giải thích có thể. Ngoài ra, hãy thử $(which rm) ...thay vì rm ..., để đảm bảo bạn đang sử dụng tệp thực thi phù hợp (điều này là bình thường /bin/rm, nhưng tôi có cảm giác nó có thể khác trên máy Mac).
AFH

1
Tôi lo lắng thư mục / tệp cụ thể mà bạn đang cố gắng làm việc. Trong một thư mục thông thường mà người dùng hiện tại sở hữu khi làm việc với một tệp thông thường mà người dùng hiện tại sở hữu, bạn sẽ có thể xóa các tệp mà không gặp sự cố.
Con tin Christopher

@AFH Tuyệt vời tìm thấy! Tôi đã chuyển .bash_aliases của mình từ linux và tôi có một bí danh dung sai cho rm => rm -Iđược liệt kê ở cuối tệp. Loại bỏ các dòng đã làm rõ vấn đề! Nếu bạn muốn, bạn có thể sao chép nhận xét của mình dưới dạng câu trả lời và tôi sẽ chấp nhận đó là câu trả lời thích hợp.
Philippe Hebert

Câu trả lời:


3

Từ thông báo lỗi, có vẻ như bạn có một bí danh hoặc hàm được xác định lại rmbằng cách thêm các tham số bổ sung, do sudohoạt động trong một môi trường khác với shell mà nó được gọi từ và thường không nhập các định nghĩa bí danh và hàm từ khởi tạo của shell kịch bản.

Lệnh này hiển thị tất cả các giải thích có thể có của rmlệnh:

type -a rm

Ngoài ra, trong shell bạn có thể sử dụng $(which rm) ...thay vì rm ...để đảm bảo rằng bạn đang sử dụng tệp thực thi phù hợp, vì whichchương trình bên ngoài không biết về các định nghĩa bí danh và hàm mà typelệnh nội bộ kiểm tra. Một lệnh với một thành phần thư mục luôn đi đến hệ thống tệp để tìm nó, do đó bỏ qua các bí danh và hàm.

Lưu ý rằng bạn không cần quyền truy cập ghi vào một tệp để xóa nó: điều bạn cần là quyền truy cập ghi vào thư mục mẹ của nó.


1

Dựa trên các nhận xét cho câu hỏi của bạn, trừ khi người dùng của bạn sở hữu tệp, nhiều khả năng bạn sẽ không thể xóa đối tượng mà không có quyền siêu người dùng.

Stafflà nhóm hệ thống của MacOS. Sửa đổi các tệp thuộc sở hữu của nhóm này sẽ có khả năng nguy hiểm, mặc dù rất có thể bạn biết bạn đang làm gì trong trường hợp sử dụng của mình.

Đối với -Ichỉ thị, đó không phải là rmlệnh của MacOS ; bạn sẽ cần sử dụng -i, trừ khi nó có sự thay thế tương tự.

Để bỏ qua sudo, bạn có thể thêm bí danh rm trong .bashrc ( rm='sudo rm -i') và tự thêm vào tệp Sudoers của MacOS sudo visudo, sau đó thêm YOUR_USERNAME_HERE ALL=NOPASSWD: ALLquyền truy cập sudo đầy đủ vào tất cả các lệnh hoặc YOUR_USERNAME_HERE ALL=(ALL:ALL) NOPASSWD: /bin/rmchỉ giới hạn quyền truy cập đầy đủ vào lệnh rm.

Lưu ý: Lệnh rm của MacOS có thể không được đặt trong / bin / rm. Gần đây tôi không sử dụng nó, nhưng giả sử nó nằm ở đó từ những kiến ​​thức trước.


Câu trả lời của bạn, cùng với AFH khiến tôi nhận ra rằng tôi đã thiết lập bí danh cho rm bao gồm -Inhư một tham số mặc định. Nắm bắt tốt!
Philippe Hebert
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.