(二)文件管理-文件權限-chmod命令的使用

文章目錄

  • 1. 命令格式
  • 2. 基本用法
    • 2.1 符號模式
    • 2.2 八進制數字模式
  • 3. 高級用法
    • 3.1 遞歸操作
    • 3.2 參考權限
    • 3.3 特殊權限位(Setuid, Setgid, Sticky Bit)
    • 3.4 X 特殊執行權限
  • 4. 注意事項
    • 4.1權限與所有權
    • 4.2 Root 權限
    • 4.3 安全風險
    • 4.4 -R 的風險
    • 4.5 目錄的執行權限

1. 命令格式

chmod 命令的完整格式如下:

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
  • [OPTION]: 可選的操作選項
  • MODE: 權限模式,通常由 [ugoa...][[+-=][perms...]...] 部分組成
    • ugoa: 指定權限作用的對象
      • u: 文件所有者 (user)
      • g: 文件所屬組 (group)
      • o: 其他用戶 (others)
      • a: 所有用戶 (all),是默認值
    • +-=: 指定操作動作
      • +: 添加權限
      • -: 移除權限
      • =: 設置權限為精確值
    • perms: 具體的權限
      • r: 讀 (read)
      • w: 寫 (write)
      • x: 執行 (execute)
      • X: “特殊”的執行權限(后面詳解)
      • s: 設置用戶ID (setuid) 或 設置組ID (setgid)
      • t: 粘滯位 (sticky bit)
  • OCTAL-MODE: 八進制數字模式
    • 由 4 位或 3 位數字組成(如 755, 644, 4755)
  • --reference=RFILE: 參考另一個文件 RFILE 的權限來設置當前文件
  • FILE: 要操作的一個或多個目標文件或目錄

2. 基本用法

基本用法主要通過 符號模式 和 八進制數字模式 來修改文件權限。

2.1 符號模式

# 為所有用戶添加執行權限
chmod a+x script.sh
# 或省略 'a',因為默認就是 all
chmod +x script.sh# 移除所屬組和其他用戶的寫權限
chmod go-w document.txt# 為文件所有者設置精確的讀寫執行權限,并清除組和其他用戶的所有權限
chmod u=rwx,go= myfile
# 執行后權限為:-rwx------

2.2 八進制數字模式

這是一種最常用且最精確的方式。三位數字分別代表 所有者(u)所屬組(g)其他用戶(o) 的權限。

數字權限含義
4r–
2-w-
5r-x (4+1)讀和執行
6rw- (4+2)讀和寫
7rwx (4+2+1)讀寫和執行
  • 示例:
chmod 755 my_script.sh
# 結果:-rwxr-xr-x
# 所有者:讀、寫、執行 (7)
# 組:讀、執行 (5)
# 其他用戶:讀、執行 (5)chmod 600 secret.txt
# 結果:-rw-------
# 所有者:讀、寫 (6)
# 組:無權限 (0)
# 其他用戶:無權限 (0)

3. 高級用法

3.1 遞歸操作

使用 -R 選項可以遞歸地修改目錄及其內部所有文件和子目錄的權限。

chmod -R 755 /var/www/mywebsite/
# 目錄:rwxr-xr-x
# 文件:rwxr-xr-x (注意:這會讓所有文件都可執行,可能不安全)

3.2 參考權限

不需要記住復雜的八進制數,直接復制另一個文件的權限。

# 讓 file2 的權限和 file1 一模一樣
chmod --reference=file1 file2

3.3 特殊權限位(Setuid, Setgid, Sticky Bit)

這些權限用于特殊功能,請謹慎使用

  • Setuid (s 在用戶執行位): 以文件所有者的身份運行程序,而不是執行者。
    • 八進制表示:在三位數前加 4 (如 4755)
    • 案例passwd 命令就需要 setuid 來修改 /etc/shadow 文件:
chmod u+s /usr/bin/passwd
# 或
chmod 4755 /usr/bin/passwd
# 結果:-rwsr-xr-x (其中的 's')
  • Setgid (s 在組執行位):
    • 對文件:以文件所屬組的身份運行程序。
    • 對目錄:在該目錄下創建的任何新文件或子目錄,其所屬組都將繼承此目錄的所屬組,而不是創建者的主要組。這對于團隊協作共享目錄極其重要。
    • 八進制表示:在三位數前加 2 (如 2770)
    • 案例:設置一個共享目錄:
chmod g+s /path/to/shared_directory
# 或
chmod 2770 /path/to/shared_directory
# 結果:drwxrws--- (其中的 's')
  • Sticky Bit (t 在其他用戶執行位):它保證只有文件的所有者或 root 才能刪除或重命名該目錄下的文件。
    • 八進制表示:在三位數前加 1 (如 1777)
    • 案例:查看 /tmp 目錄的權限
ls -ld /tmp
# 輸出:drwxrwxrwt ... /tmp (其中的 't')
# 設置一個目錄的粘滯位:
chmod o+t /tmp/mydir
# 或
chmod 1777 /tmp/mydir

3.4 X 特殊執行權限

它是一個智能的 x。當使用 X 而不是 x 時,權限只會被應用到:

  • 目錄(目錄天然需要 x 權限才能進入)
  • 那些已經至少擁有一個執行權限的文件(即它本身已經是可執行文件或腳本)

這在遞歸操作中非常有用。

  • 案例:遞歸地為目錄添加執行權限,并只為已經是可執行的文件添加執行權限:
chmod -R a+rX myproject/
# 這條命令會:
# 1. 為所有用戶(ugo/a)添加讀(r)權限。
# 2. 為所有目錄添加執行(X)權限(因為目錄是“可執行”的)。
# 3. 只為那些原本就有x權限的文件添加執行(X)權限,不會讓普通文本文件變成可執行文件。

4. 注意事項

4.1權限與所有權

chmod 改變的是權限,而 chownchgrp 改變的是所有者和所屬組。不要混淆。

4.2 Root 權限

修改你不擁有的文件(非 root 用戶創建的文件)的權限通常需要 sudo

4.3 安全風險

  • 切勿隨意將文件設置為 777。這意味著任何用戶都可以修改或執行它,是巨大的安全漏洞
  • 謹慎使用 setuid/setgid 權限,特別是放在 root 擁有的文件上時,這可能成為提權漏洞。

4.4 -R 的風險

遞歸修改權限是一把雙刃劍。一個錯誤的遞歸命令(如 chmod -R 777 /)會徹底破壞你的系統。在執行遞歸操作前,務必雙重檢查路徑。

4.5 目錄的執行權限

目錄的 x(執行)權限意味著 “可進入” 。沒有 x 權限,即使有 r(讀)權限,也無法用 ls 列出其內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97759.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

醫院預約掛號腳本

醫院預約掛號腳本 功能介紹 本腳本是一個用 Python 編寫的醫院預約掛號程序,支持以下功能: 自動預約:通過api交互選擇醫院、科室、醫生和時間段。自動監控:持續檢查指定醫生的號源狀態,發現可預約時段時自動嘗試預約。…

.NET駕馭Word之力:理解Word對象模型核心 (Application, Document, Range)

在使用MudTools.OfficeInterop.Word庫進行Word文檔自動化處理時,深入理解Word對象模型的核心組件是至關重要的。Word對象模型提供了一套層次化的結構,使開發者能夠通過編程方式控制Word應用程序、文檔以及文檔內容。本章將詳細介紹Word對象模型中最核心的…

Kotlin在醫療大健康域的應用實例探究與編程剖析(上)

一、引言 1.1 研究背景與意義 在當今數字化時代,醫療行業正經歷著深刻的變革。隨著信息技術的飛速發展,尤其是人工智能、大數據、物聯網等新興技術的廣泛應用,醫療行業數字化轉型已成為必然趨勢。這種轉型旨在提升醫療服務的效率和質量,優化醫療資源配置,為患者提供更加…

AI智能體的應用前景

AI智能體的應用前景正從技術探索邁向規模化落地的關鍵階段,其發展動力源于大模型能力的突破、行業需求的深化以及商業化模式的創新。以下是基于最新技術動態和行業實踐的深度解析: 一、技術突破:從「有腦無手」到「知行合一」 大模型的進化顯著提升了智能體的多模態交互與…

高系分四:網絡分布式

目錄一、我的導圖和思考二、大模型對我導圖的評價優點可優化之處三、大模型對這章節的建議一、網絡知識范疇(一)網絡基礎理論(二)局域網與廣域網(三)網絡安全(四)網絡性能優化&#…

Day24_【深度學習(1)—概念】

一、AI、ML、DL基本關系 機器學習是實現人工智能的途徑,深度學習是機器學習的一種方法。人工智能 (AI)↓ 機器學習 (ML) —— 讓機器從數據中學習規律↓ 深度學習 (DL) —— 使用深層神經網絡的機器學習方法二、深度學習與機器學習概念深度學習(Deep Lea…

VTK基礎(01):VTK中的基本概念

VTK中的基本概念 1.三維場景中的基本要素 三維場景的基本要素包含:燈光、相機、顏色和紋理映射 (1)燈光vtkLight 光的本質是特定頻段的電磁波,所以燈光的本質是特定頻段(可見光頻段)的電磁波發射器;依據發射可見光頻段…

LeetCode 2348.全0子數組的數目

給你一個整數數組 nums ,返回全部為 0 的 子數組 數目。 子數組 是一個數組中一段連續非空元素組成的序列。 示例 1: 輸入:nums [1,3,0,0,2,0,0,4] 輸出:6 解釋: 子數組 [0] 出現了 4 次。 子數組 [0,0] 出現了 2 次。…

【wpf】從 DataContext 到依賴屬性:WPF 自定義控件 ImageView 的優化之路

從 DataContext 到依賴屬性:WPF 自定義控件 ImageView 的優化之路 最近我在做一個 WPF 項目,需要封裝一個 ImageView 控件,用來顯示圖像并處理鼠標交互。 在實際開發中,我遇到了一系列和 數據綁定 有關的問題: 控件需要…

人力資源管理的思維方式學習筆記2

戰略人力資源管理的思維方式——北京師范大學政府管理學院——王建民 教授3.1.理念:人力資源是第一戰略資源 我們先來了解海爾集團公司實施發展戰略的情況。海爾集團創立于1984年,根據官方網站的介紹,目前是一家全球領先的美好生活解決方案服…

汽車網絡安全 CyberSecurity ISO/SAE 21434 測試之一

一、什么是網絡安全? 在智能網聯和自動駕駛技術進入汽車行業之前,功能安全 一直是汽車開發的核心。 簡單來說,功能安全的目標是確保車輛的系統在出現故障時,不會對人、環境或者設備造成危害。比如,剎車失靈了&#xff…

力扣(LeetCode) ——217. 存在重復元素(C++)

題目:217. 存在重復元素 示例1: 輸入: nums [1,2,3,1] 輸出: true 解釋: 元素 1 在下標 0 和 3 出現。 示例2: 輸入: nums [1,2,3,4] 輸出: false 解釋: 所有元素都…

Redis 高可用與集群原理

Redis 高可用與集群原理1. 前言 Redis 單機雖然高性能,但一旦節點宕機,數據丟失或服務不可用問題會非常嚴重。為了解決這一問題,Redis 提供了 主從復制、哨兵(Sentinel)、Cluster 集群 等高可用機制。 這一篇文章我們重…

Oracle OCP認證考試題目詳解082系列第31題

考察知識點:SET VERIFY ON命令 英文題目 Which two statements are true about the SET VERIFY ON command? A.It displays values for variables prefixed with && B.It displays values for variables created by the DEFINE command C.It can be used in SQL Dev…

【WebSocket?】入門之旅(五):WebSocket 的安全性

本篇文章將講解 WebSocket 的安全性,特別是如何防止常見的 WebSocket 安全漏洞,如中間人攻擊(MITM)、XSS、CSRF 等。我們將介紹如何使用 wss:// 協議保障數據傳輸的安全,并給出一些安全最佳實踐,幫助你在使…

流程圖用什么工具做?免費/付費工具對比,附在線制作與下載教程

在日常工作和學習中,流程圖是一種高效的可視化工具——項目開發時梳理需求邏輯、業務推進中拆解步驟節點、學術研究里呈現論證框架,甚至是生活中規劃旅行路線,都能借助流程圖讓復雜信息變得清晰易懂。但面對市面上五花八門的流程圖工具&#…

Oracle重做日志(Redo Log):數據一致性的“守護者“

在Oracle數據庫的三大核心文件中,數據文件承載著最終的業務數據,控制文件記錄著數據庫的"身份檔案",而重做日志(Redo Log)則扮演著"事務日記"的關鍵角色——它以不可篡改的方式記錄每一次數據變更…

C++學習:map/set源碼剖析+利用紅黑樹封裝map/set

前面我們已經學習了紅黑樹這個高級數據結構的實現。我們知道STL的map/set的底層數據結構為紅黑樹,本期就查看STL源碼的map/set,并結合著這之前的紅黑樹的實現,模擬實現map和set的一部分功能 STL源碼:樓田莉子/CPP代碼學習 作者的個…

【c++進階系列】:map和set的模擬實現(附模擬實現的源碼)

🔥 本文專欄:c 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄:每一次抉擇,都是將未來的自己輕輕推向某個方向 ★★★ 本文前置知識: 紅黑樹 原理 那么在上一期博客中&#xf…

JVM默認棧大小

JVM 里線程棧的大小不是一個固定值,而是由 操作系統平臺、JVM 實現版本、以及啟動參數 共同決定的。 常見情況(以 HotSpot 為例): Linux / macOS 64 位 JVM 默認大約是 1M (1024 KB)32 位 JVM 默認大約是 3…