Tôi có một vấn đề lạ với lệnh sau:
# chown -R myuser:mygroup *
chown: invalid option -- 'i'
Try 'chown --help' for more information.
lệnh không phải là bí danh
# type chown
chown is hashed (/bin/chown)
Nơi tôi có thể nhìn xa hơn?
Tôi có một vấn đề lạ với lệnh sau:
# chown -R myuser:mygroup *
chown: invalid option -- 'i'
Try 'chown --help' for more information.
lệnh không phải là bí danh
# type chown
chown is hashed (/bin/chown)
Nơi tôi có thể nhìn xa hơn?
Câu trả lời:
Vì việc mở rộng toàn cầu (tên đường dẫn) được thực hiện trước tiên bởi trình bao trước khi chown
chạy, mẫu toàn cầu *
được mở rộng cho tất cả các tệp trong thư mục hiện tại trước tiên và chown
lấy đó làm các tùy chọn và đối số của nó. Bạn có một tệp trong thư mục hiện tại bắt đầu bằng -i
, do đó chown
đang xem nó như một tùy chọn, không phải là một đối số (tên tệp).
Bạn cần sử dụng --
để chỉ ra phần cuối của các tùy chọn cho chown
:
chown -R myuser:mygroup -- *
Hoặc đi trước mẫu hình cầu ( *
) với ./
để chỉ rõ nó là đối số:
chown -R myuser:mygroup ./*
chown -R myuser:mygroup ./*
, nó chia tách nó thành chown
, -R
, myuser:mygroup
, ./*
và sau đó thay thế mẫu glob với các đường dẫn hệ thống tập tin tương ứng, ví dụ. chown
, -R
, myuser:mygroup
, ./-index.html
, ./favicon.ico
, ./My -ve Numbers
. Vì chown chỉ tìm ký tự đầu tiên là dấu gạch ngang khi tìm tùy chọn args, nên nó sẽ cho rằng đó là các đối số vị trí.
Vấn đề là một tập tin có tên -index.php
trong thư mục, do đó, chown diễn giải nó như là một tùy chọn dòng lệnh.
Giải pháp là sử dụng dấu gạch nối kép chown -R myuser:mygroup -- *
chown -R myuser:mygroup ./*