chown -R user: user. * thay đổi quyền ngược: đây có phải là hành vi đúng không?


8

Tôi đã gặp rất nhiều rắc rối khi thay đổi sự cho phép của một thư mục myfoldercư trú /. Tôi đã ra lệnh

sudo chown -R luca:luca /myfolder/.*

Ý định của tôi là thay đổi quyền sở hữu của tất cả các tập tin ẩn trong /myfolder.

Thật không may, tôi nhận ra rằng quyền sở hữu /cũng bị thay đổi, điều này tất nhiên khiến tôi bị hỏng hệ thống. Tôi nghĩ điều này xảy ra vì các ..trận đấu .*, nhưng vẫn có vẻ kỳ lạ với tôi.

Là thay đổi thư mục mẹ là hành vi chính xác hay tôi nên nộp báo cáo lỗi?

Nếu đó là lỗi của tôi khi sử dụng chown, thì cách tốt nhất để sử dụng là gì để ngăn thay đổi quyền sở hữu các thư mục và tệp hệ thống?


4
Đây là hành vi dự định như ..trận đấu.*
Uwe Plonus

.*có nghĩa là bất kỳ tệp nào kết thúc bằng . *.có nghĩa là bất kỳ tệp nào bắt đầu bằng.
NickTux

4
@NikTh Nó ngược lại!
Uwe Plonus

Vâng, một thực hành tốt nhất có thể là không sửa đổi /trực tiếp (tạo thư mục, xóa, v.v.) trừ khi hoàn toàn cần thiết (mở một câu hỏi cho những gì bạn muốn đạt được). Cũng nguy hiểm khi sử dụng ký tự đại diện + quyền root vì thường xuyên hơn không, bạn không chắc chắn 100% những gì bị ảnh hưởng bởi ký tự đại diện.
edwin

1
@LucaCerone Nó có liên quan chmodchownlà các lệnh tương tự, cả hai đều bắt đầu bằng ch, chứa một ovà có hai chữ cái tương tự khác ( nm). </ lítal> Nghiêm túc, cả hai đều có dạng : [cmd] -R [mode or user] [one or more files]. Một số giải pháp được đưa ra cho câu hỏi đó cũng phù hợp với trường hợp của bạn, ví dụ giải pháp này từ Sean Reifschneider (ở giữa). Câu trả lời này cũng được áp dụng cho các tập tin ẩn chỉ bằng cách loại bỏ các mẫu glob cho các tập tin không ẩn.
Lekensteyn

Câu trả lời:


5

Hãy nhớ rằng dòng lệnh được mở rộng (diễn giải) bởi shell trước khi được thực thi

sudo chown -R luca:luca /myfolder/.*

được hiểu đầu tiên là:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history

lưu ý /myfolder/..trong dòng lệnh của bạn

chown -R luca:luca /myfolder/..tương đương với chown -R luca:luca /
điều đó làm cho chown chạy "ngược"

Sử dụng echo /myfolder/.*khi bạn sử dụng "*" để xác minh.


@Emmanuel: tại sao bạn sẽ sử dụng xargs và tìm thấy khi tùy chọn -R là đủ?
Ngày

@Emmanuel: cảm ơn! bạn có thể mở rộng một chút về việc tìm và xargs không?
lucacerone

@LucaCerone Tôi không chắc tại sao bạn chấp nhận cái này, nó thay đổi đệ quy tất cả các tệp trong /myfolder. Các findlệnh là không cần thiết và phá vỡ với tên tập tin chứa khoảng trắng. (nếu bạn muốn thay đổi đệ quy các tệp, find /myfolder | xargs chown luca:lucatương tự như chown -R luca:luca /myfolder).
Lekensteyn

Lekensteyn nói đúng, tôi đã quên grep ^.
Emmanuel

@Lekensteyn Tôi đã thay đổi tìm kiếm để không khớp với không gian
Emmanuel

4

Tốt. Dòng lệnh là root rất mạnh. Đọc một số những tác phẩm kinh điển. Và có, .*phù hợp với ..chính xác những gì được dự định. Dot không phải là một nhân vật đặc biệt. Đó là một quy ước. Theo quy ước, các tệp bắt đầu bằng dấu chấm được ẩn khỏi chế độ xem mặc định khi liệt kê một thư mục - không hơn không kém, và không có gì nữa. Theo quy ước, inode dẫn đến thư mục hiện tại có được .tên và inode dẫn đến thư mục cha lấy ..tên.

Những gì bạn nên làm là

chown -R luca:luca /myfolder

Tôi đã đề cập rằng không có gì đặc biệt về tên tệp bắt đầu bằng dấu chấm? Đệ quy chownkhông nghĩ như vậy.

Ngay bây giờ, bạn có thể giải cứu một số chức năng bằng cách thay đổi quyền sở hữu trở lại root. Về lâu dài, có lẽ bạn sẽ phải cài đặt lại hệ thống.

Theo nguyên tắc chung:

  1. Tránh làm việc như root.
  2. Nếu bạn làm việc như root, hãy đọc từng lệnh hai lần trước khi nhấn Enter.
  3. Nếu bạn không chắc chắn về việc mở rộng, hãy thử trước bằng lệnh "an toàn" (như echo .*).
  4. Đừng làm việc như root.
  5. Có nhiều tác vụ có thể được thực hiện một cách an toàn bằng giao diện đồ họa (vấn đề của bạn là một ví dụ về tác vụ đó).
  6. Tôi đã đề cập rằng bạn nên tránh sử dụng tài khoản root?

Tôi không muốn thay đổi quyền sở hữu của tất cả các tệp trong thư mục ... chỉ các tệp bị ẩn ..
lucacerone

2
Được rồi, xấu của tôi rồi. Trong trường hợp đó, chown -R luca:luca /myfolder/.[^.]*tôi nghĩ
ngày

2
echo .*là một cách tốt để thử mở rộng. Nó sẽ cho bạn thấy chính xác những gì vỏ nhìn thấy. ls .*có thể khó hiểu hơn một chút, vì nó sẽ đi xuống các thư mục ( ls -d .*có thể tốt hơn, nhưng cũng có thể chỉ sử dụng echo .*)
Robie Basak

@RobieBasak điểm tốt!
Ngày
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.