目錄
權限是什么
權限的本質
權限(用戶)的修改
權限的匹配機制
目錄的權限
初始權限(文件和目錄)
粘滯位
結語
權限是什么
在現實世界中就有權限的概念,也就是,一部分人能做但是其他沒有相關身份的人做不了
舉個例子,愛某藝的會員,當你充了會員之后,那么有很多需要會員才能看的劇你就能看了,但是這并不對非會員開放
這就是權限
那么放在Linux中就是,一個文件(或者目錄),你有相關的權限,你在能對這個文件執行相關的操作
權限的本質
權限的本質就是:角色 + 事物本身的屬性
角色的概念
在Linux里,我們有角色這個概念,我們可以用su指令(或者su -)進行切換角色
比如我直接su,然后默認切換成root,而我們root也叫做超級用戶,root可以在Linux里面為所欲為,一句話,權限只是用來限制普通人的,但是root顯然不是普通人
最后還可以不切換身份,直接sudo提權
身份的概念
而我們在權限章節里面,有一個身份·的概念:
擁有者,所屬組,other
我們來說一下擁有者,其實就是這個文件是誰的
所屬組也是一種身份,而不是擁有者也不是所屬組的就是other
(可能會有人疑惑為什么要有所屬組,試想一下,如果我們這時候要將一個文件分享給另一個人的話,如果沒有所屬組,那么我們就只能將other的權限全部打開,這就意味著如果這時候你的競爭對手很壞的話,那你就完蛋了,而現在我們可以將另一個人變成所屬組,那么other能不能看得到全部取決于你了)
事物本身的屬性
最后來講一講這個,其實很好理解,你可以在leedcode上面看電影嗎?顯然不行,因為leedcode使用來刷題用的
所以事物有沒有特權,取決于他的身份,他有了符合條件的身份之后才能做特殊的事情,其次就是,這個事物本身是可以支持做這些特殊的事情的
(你在愛某藝上面充再多你也不能在上面刷算法,因為愛某藝本來就不是用來刷算法的)
權限(用戶)的修改
在修改之前,我們需要知道權限在文件中是長什么樣的:
首先我們看到藍色的框框,這個就是文件(或目錄,下文會重點講)權限,而紅色框框分為左右兩個,其實就是擁有者和所屬組(other并不需要標識,因為不是擁有者也不是所屬組的就是other)
而我們的文件權限一共可以分為三個部分:
如上圖,分為三個部分,分別對應擁有者、所屬組、other的權限
每一個身份對應的權限分為三個:rwx
rwx 三個分別代表讀權限、寫權限、可執行權限
讀寫權限很容易理解,就是你能不能讀這個文件和能不能對這個權限進行寫入、修改內容操作
至于可執行,則是比如 .cpp 文件,需要通過g++操作變成對應可執行文件之后才能執行對應內容,或者是,Linux下一切皆文件,我們的指令就是可執行文件,我們所有的指令都是可執行的
而想要執行一個文件,需要有可執行權限的同時,還需要這個文件本身可執行
權限的修改相關操作指令
首先,因為權限分為三種身份,所以我們修改的時候也需要指明對應的角色來修改(當然不全是,下文會講到二進制的方式修改權限,這種就不需要指明身份了)
身份分為:u(user擁有者)、g(所屬組)、o(other)、a(all,代表一次性對上面三種身份同時進行操作)
而我們對應修改的指令則是 chmod
舉個例子:
chmod u-x,o-x big.txt
chmod u+x big.txt
chmod g-rw?big.txt
chmod a+rwx big.txt
諸如此類
同時我們還可以用二進制的方式進行權限的修改
指令同樣還是chmod
rwx,三個權限,我們可以看作三個二進制為,也就是111,那么rw-(-代表沒有)也就對應110,而111對應的10進制值就是421
比如rw-,對應的值就是6
最后我們有三個身份,也就是三組rwx,所以我們可以直接對三組進行修改
比如我們想讓擁有者和所屬組有讀寫權限,而other則只能讀,那么我們就可以這樣寫
chmod 664 filename
權限身份的修改
一個文件有擁有者、所屬組、other
而我們是可以對其進行修改的,但是只有對擁有者和所屬組的操作,因為不是他兩的就自動是other
修改擁有者:chown
修改所屬組:chgrp
舉個例子,我們要將一個文件的擁有者換成root(所屬組也是一樣的):
sudo chown root filename
sudo chgrp?root filename(修改所屬組)
當然chown還有一種特殊用法,也就是,如果你想要同時修改擁有者和所屬組的話,你可以直接這樣:
chown? name1:name2? filename
權限的匹配機制
首先我們來看一下這張圖
對于big.txtx這個文件來說,擁有者和所屬組都是hjx
但是擁有者什么權限都沒有,而所屬組什么權限都有
這時候如果hjx想讀這個文件的話,會發現讀不了,什么都干不了
這是因為,我們的系統會先看,你是不是擁有者,不是的話再去看是不是所屬組,不是的話就是other了
但是這時,我們系統看到,我們是擁有者了之后,那就認定了,你有沒有權限,他不管
這就是權限的匹配機制,只會匹配一次
目錄的權限
上文我們一直講的都是文件的權限,但其實目錄和文件是不一樣的
r:代表你能不能查看這個目錄里面的文件(比如cd進目錄之后能不能ls)
w:代表能否對目錄里的文件進行增刪改
x:能否 cd 進入目錄
初始權限(文件和目錄)
創建文件的起始權限:664
創建文件的起始權限:775
為什么是這樣的呢?其實是有原因的
首先,新建文件夾默認權限=0666,新建目錄默認權限=0777
而我們在Linux里面有一個指令叫做umask,也叫做權限掩碼
權限 = 起始權限 &(~umask)
也就是說,我們的權限是由umask決定的,先對其進行取反,然后再用起始權限與上,就是最終的權限,換句話說,如果我們此時將umask修改成0777的話,那么初始的不管是文件還是目錄,權限都會是000
因為0777取反之后,對應位置就是全0,那么&的時候,就會全部變成0
粘滯位
粘滯位是長這個樣子的:rwt(也就是將原來的x換成t)
假想一下,你現在想要創建一個文件,然后你想和另一個人共享這個文件,那么你只能創建一個目錄,將other的權限全部放開
為什么說只能這么做呢,因為單單對文件權限進行操作是沒有用的,不是你的文件,你雖然沒資格用,但是你可以刪啊,因為刪文件取決于目錄,就好比,雖然這個東西不是我的,但是你為什么要把它放在我家里?
但是這樣的話,就有一個隱患,你和另一個人可以看,但是所有人都可以看,因為大家都是other,而且不光可以看,還能刪
所以解決辦法就是粘滯位,也就是:
chmod o+t 目錄名字
粘滯位的作用就是,你想看,無所謂,這個不歸我管,但是你不能刪,刪除不了
結語
這篇文章到這里就結束啦!!~( ̄▽ ̄)~*
如果覺得對你有幫助的,可以多多關注一下喔