如何在 Linux 上使用 chmod 命令
已發表: 2022-10-25 使用 Linux 的chmod
命令控制誰可以訪問文件、搜索目錄和運行腳本。 此命令修改 Linux 文件權限,乍一看看起來很複雜,但一旦你知道它們是如何工作的,它實際上非常簡單。
chmod 修改文件權限
在 Linux 中,誰可以對文件或目錄執行什麼操作是通過權限集來控制的。 共有三組權限。 一組用於文件的所有者,另一組用於文件組的成員,最後一組用於其他所有人。
權限控制可以對文件或目錄執行的操作。 它們要么允許或阻止文件被讀取、修改,或者如果它是腳本或程序,則被執行。 對於目錄,權限控制誰可以cd
進入目錄以及誰可以創建或修改目錄中的文件。
您可以使用chmod
命令來設置這些權限中的每一個。 要查看在文件或目錄上設置了哪些權限,我們可以使用ls
。
查看和了解文件權限
我們可以使用-l
(長格式)選項讓ls
列出文件和目錄的文件權限。
ls -l
在每一行,第一個字符標識正在列出的條目的類型。 如果它是一個破折號 ( -
) 它是一個文件。 如果是字母d
它是一個目錄。
接下來的九個字符代表三組權限的設置。
- 前三個字符顯示擁有文件的用戶的權限(用戶權限)。
- 中間三個字符顯示文件組成員的權限(組權限)。
- 最後三個字符顯示不屬於前兩個類別的任何人的權限(其他權限)。
每組權限包含三個字符。 這些字符是存在或不存在權限之一的指示符。 它們是破折號 ( -
) 或字母。 如果字符是破折號,則表示未授予權限。 如果字符是r
、 w
或x
,則已授予該權限。
字母代表:
- r :讀取權限。 可以打開文件並查看其內容。
- w :寫權限。 該文件可以被編輯、修改和刪除。
- x :執行權限。 如果文件是腳本或程序,則可以運行(執行)。
例如:
-
---
表示根本沒有授予任何權限。 -
rwx
表示已授予完全權限。 讀取、寫入和執行指示符都存在。
在我們的屏幕截圖中,第一行以d
開頭。 這一行引用了一個名為“archive”的目錄。 該目錄的所有者是“dave”,該目錄所屬的組的名稱也稱為“dave”。
接下來的三個字符是此目錄的用戶權限。 這些表明所有者俱有完全權限。 r
、 w
和x
字符都存在。 這意味著用戶 dave 對該目錄具有讀、寫和執行權限。
第二組三個字符是組權限,它們是rx
。 這些表明 dave 組的成員對該目錄具有讀取和執行權限。 這意味著他們可以列出目錄中的文件及其內容,並且可以cd
(執行)進入該目錄。 他們沒有寫入權限,因此無法創建、編輯或刪除文件。
最後一組三個字符也是rx
。 這些權限適用於不受前兩組權限約束的人員。 這些人(稱為“其他人”)對該目錄具有讀取和執行權限。
因此,總而言之,組成員和其他人具有讀取和執行權限。 所有者,一個名為 dave 的用戶,也具有寫入權限。
對於所有其他文件(除了 mh.sh 腳本文件),dave 和 dave 組的成員對文件具有讀寫屬性,而其他人只有讀取權限。
對於 mh.sh 腳本文件的特殊情況,所有者 dave 和組成員具有讀、寫和執行權限,其他人只有讀和執行權限。
理解權限語法
要使用chmod
設置權限,我們需要告訴它:
- 誰:我們為誰設置權限。
- What :我們正在做哪些改變? 我們是添加還是刪除權限?
- which :我們設置了哪些權限?
我們使用指標來表示這些值,並形成簡短的“權限聲明”,例如u+x
,其中“u”表示“用戶”(who),“+”表示添加(what),“x”表示執行權限(哪個)。
我們可以使用的“誰”值是:
- u :用戶,表示文件的所有者。
- g :組,表示文件所屬組的成員。
- o :其他,表示不受
u
和g
權限約束的人。 - a :全部,意思是以上所有。
如果這些都沒有使用, chmod
的行為就像使用了“ a
”一樣。
我們可以使用的“what”值是:
- – :減號。 刪除權限。
- + :加號。 授予權限。 該權限將添加到現有權限中。 如果您想擁有此權限且僅擁有此權限集,請使用
=
選項,如下所述。 - = :等號。 設置權限並刪除其他權限。
我們可以使用的“which”值是:
- r :讀取權限。
- w :寫權限。
- x :執行權限。
設置和修改權限
假設我們有一個文件,每個人都對其擁有完全權限。
ls -l new_file.txt
我們希望用戶 dave 具有讀寫權限,而組和其他用戶只有讀取權限。 我們可以使用以下命令:
chmod u=rw,og=r new_file.txt
使用“=”運算符意味著我們清除所有現有權限,然後設置指定的權限。
讓我們檢查一下這個文件的新權限:
ls -l new_file.txt
正如我們所料,現有權限已被刪除,並已設置新權限。
如何在不刪除現有權限設置的情況下添加權限? 我們也可以輕鬆做到這一點。
假設我們有一個已完成編輯的腳本文件。 我們需要讓它對所有用戶都可執行。 它當前的權限如下所示:
ls -l new_script.sh
我們可以使用以下命令為每個人添加執行權限:
chmod a+x new_script.sh
如果我們看一下權限,我們會看到現在每個人都授予了執行權限,並且現有權限仍然存在。
ls -l new_script.sh
如果沒有“a+x”語句中的“a”,我們也可以達到同樣的效果。 以下命令也可以正常工作。
chmod +x new_script.sh
設置多個文件的權限
我們可以一次對多個文件應用權限。
這些是當前目錄中的文件:
ls -l
假設我們要從具有“.page”擴展名的文件中刪除“其他”用戶的讀取權限。 我們可以使用以下命令來做到這一點:
chmod 或 *.page
讓我們檢查一下產生了什麼影響:
ls -l
正如我們所見,“其他”類別用戶的“.page”文件的讀取權限已被刪除。 沒有其他文件受到影響。
如果我們想在子目錄中包含文件,我們可以使用-R
(遞歸)選項。
chmod -R 或 *.page
數字速記
使用chmod
的另一種方法是將您希望授予所有者、組和其他人的權限以三位數的形式提供。 最左邊的數字代表所有者的權限。 中間的數字代表組成員的權限。 最右邊的數字代表其他人的權限。
此處列出了您可以使用的數字及其代表的含義:
- 0: (000) 沒有權限。
- 1:(001)執行許可。
- 2:(010)寫權限。
- 3:(011)寫入和執行權限。
- 4:(100)讀取權限。
- 5:(101)讀取和執行權限。
- 6:(110)讀寫權限。
- 7:(111) 讀取、寫入和執行權限。
這三個權限中的每一個都由十進制數的二進制等效位中的一個位表示。 所以 5,即二進制的 101,表示讀取和執行。 2,二進制010,表示寫權限。
使用此方法,您可以設置您希望擁有的權限; 您不要將這些權限添加到現有權限中。 因此,如果讀取和寫入權限已經到位,您將不得不使用 7 (111) 來添加執行權限。 使用 1 (001) 將刪除讀寫權限並添加執行權限。
讓我們為其他類別的用戶重新添加“.page”文件的讀取權限。 我們還必須設置用戶和組權限,因此我們需要將它們設置為它們已經存在的值。 這些用戶已經具有讀寫權限,即 6 (110)。 我們希望“其他”具有讀取和權限,因此需要將它們設置為 4 (100)。
以下命令將完成此操作:
chmod 664 *.page
這會將我們需要的用戶、組成員和其他人的權限設置為我們需要的權限。 用戶和組成員的權限被重置為原來的狀態,其他人的讀取權限被恢復。
ls -l
高級選項
如果您閱讀chmod
的手冊頁,您會看到一些與 SETUID 和 SETGID 位以及受限刪除或“粘滯”位相關的高級選項。
對於您需要chmod
的 99% 的情況,此處描述的選項將涵蓋您。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev ·查看·字符串·類型·重命名· zip ·解壓縮· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice ·進度· strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重新啟動·停止·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦