CHMOD - Áp dụng các quyền khác nhau cho tệp so với thư mục


9

Tôi đã cố gắng dọn sạch các quyền trên một vài hộp và đã tìm kiếm người đàn ông chmod cũng như tất cả các tài liệu internet mà tôi xử lý mà không gặp may mắn - vì vậy chúng tôi đi đây.

Về cơ bản, tôi đã có một thư mục có nhiều thư mục và tệp phụ - và tôi muốn đặt các quyền sau:

Đối với thư mục: 770 (u + rwx, g + rwx, o-rwx)

Đối với tệp: 660 (U + rw, g + rw, ax, o-rw)

Tôi muốn thử và thực hiện điều này với một chmod đệ quy duy nhất nếu có thể - như để tránh đệ quy qua từng thư mục và thiết lập quyền theo từng tệp.

Tôi tưởng tượng rằng có một cách để làm điều này mà không cần viết một kịch bản shell của riêng tôi - nhưng tôi không thể tìm thấy bất cứ điều gì.

Tôi đánh giá cao sự giúp đỡ của bạn!

Câu trả lời:


10

Tôi thấy một tập lệnh hữu ích vì nó thường hữu ích để thay đổi cả quyền của tệp và thư mục trong một thao tác và chúng thường được liên kết. 770 và 660 cho các thư mục được chia sẻ trên một máy chủ tệp, 755/644 cho các thư mục máy chủ web, v.v. Tôi giữ một tập lệnh với chế độ được sử dụng phổ biến nhất cho loại máy chủ đó trong bin / và chỉ thực hiện tìm thủ công khi phổ biến chế độ không áp dụng.

#!/bin/sh
# syntax: setperm.s destdir
#
if [ -z $1 ] ; then echo "Requires single argument: <directoryname>" ; exit 1 ;                                       fi

destdir=$1

dirmode=0770
filemode=0660

YN=no

printf "\nThis will RECURSIVELY change the permissions for this entire branch:\n                                      "
printf "\t$destdir\n"
printf "\tDirectories chmod = $dirmode\tFiles chmod = $filemode\n"
printf "Are you sure want to do this [$YN]? "

read YN

case $YN in
        [yY]|[yY][eE][sS])
        # change permissions on files and directories.
        find $destdir -type f -print0 | xargs -0 chmod $filemode $i
        find $destdir -type d -print0 | xargs -0 chmod $dirmode $ii ;;

        *) echo "\nBetter safe than sorry I always say.\n" ;;
esac

Ồ Điều này thật đúng với gì mà tôi đã tìm kiếm. Cảm ơn rât nhiều!
Skone

Xin chào iPaulo - bạn có thể tình cờ giải thích "$ ii" trên dòng "tìm $ Destdir -type d -print0 | xargs -0 chmod $ dirmode $ ii ;;". Tôi không chắc tại sao tôi không hiểu tại sao nó không chỉ "tìm $ Destdir -type d -print0 | xargs -0 chmod $ dirmode $ i ;;" Cảm ơn!
Skone

20

Không cần kịch bản.

// Thư mục:

find . -type d -exec chmod XXX {} \;

// Các tập tin:

find . -type f -exec chmod XXX {} \;

17

Trong trường hợp của bạn, nó có thể không phải phức tạp như những người khác đã làm được (mặc dù findthực sự là một công cụ tốt cho loại điều này nói chung). Sự khác biệt giữa các chế độ là bit thực thi. Nếu đó là trường hợp không có tệp nào có tập bit thực thi, thì bạn có thể thực hiện nó trong một lệnh gọi duy nhất chmod, giống như bạn đã hỏi.

chmod -R u=rwX,g=rwX,o= FILE...

Chìa khóa ở đây là thủ đô X, mà trang man giải thích là

chỉ thực hiện / tìm kiếm nếu tệp là một thư mục hoặc đã có quyền thực thi cho một số người dùng.

Vì vậy, nếu các tệp của bạn chưa có tập bit thực thi, nó sẽ chỉ được đặt cho các thư mục.


Điều này thật tuyệt, nhưng lâu hơn nhiều so với việc chỉ viết 777. Có một tốc ký cho -X không?
Elliott B

6

Tôi thấy rằng đối với trường hợp sử dụng của tôi ít nhất, việc sử dụng rsyncđể sao chép thư mục vào chính nó nhanh hơn nhiều so với việc sử dụng chmodtrực tiếp với một danh sách các tệp từ đó find.

rsync -rpt --chmod=D770,F660 . .

Nếu bạn muốn thêm một chownthao tác tương tự, hãy rsynccho phép bạn thực hiện điều đó với --chown=user:grouptùy chọn.


Whoah, cái này thực sự nhanh hơn rất nhiều so với chmod -R.
Epeli

Vì vậy, nhanh hơn nhiều so với chmod. Có bất kỳ nhược điểm nào khi sử dụng rsync theo cách này không? Tôi đã làm điều đó rất nhiều và mọi thứ dường như tốt đẹp.
lười

1

Sạch sẽ và đơn giản:

chmod 660 $(find . -type f)
chmod 770 $(find . -type d)

Cách tiếp cận rất thanh lịch.
dùng5336

3
có lẽ, nhưng lưu ý rằng điều này chỉ hoạt động nếu các tệp không có khoảng trắng trong chúng. Một cách tiếp cận "an toàn" hơn làfind ... -exec chmod ... {} \;
isaaclw 18/07 '
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.