寫在前面
可以說,我們基本指令的那部分內容已經完了,下面需要開始我們新的篇章,權限.權限可能就這一篇博客,內容倒不多,關鍵是要我們理解,理解是很重要的,下面讓我們來開式正式的內容吧.
shell命令以及運行原理
嚴格來說,linux是一個一個操作系統,我們稱之為“核心(kernel)",但是我們一般不直接操著這個核心,而是通過一個外殼,也就shell,這是一個種類,包括我們現在使用的額XShell,那么我們在想,為什么我們不可以直接操作這個kernel呢?使用shell有什么好處呢?著都是需要我們考慮的.
從技術角度, Shell的最簡單定義:命令行解釋器(command Interpreter)主要包含:
將使用者的命令翻譯給核心(kernel)處理
同時,將核心的處理結果翻譯給使用者
這個大家看到可能感到有點抽象,不用擔心,這里我用一個例子和大家解釋.
這里有一個程序員叫做張三,一天他感到有點孤獨,想結婚了,張三有一個心上人,就是隔壁的如花.張三一直喜歡這個如花,但是那張三有點社恐,害羞的不敢表達出來.恰巧他們村里有一個媒婆,王婆.這一天張三告訴王婆:"王婆大娘,我這想結婚了,喜歡我隔壁的如花,想讓你幫忙說說,到時候喜酒一定不會少的".王婆一聽,來生意了,隨即去找了這個如花.告訴如花:"如花啊,這有一門婚事想和你說說,你知道張三不,這個有工作了,人品還是不錯的的,他托我想找一門婚事,從小就喜歡你了,你覺得他怎么樣".如花心里想,張三是哪個?想了一會,才知道就是那個小時候跟在我屁股后面的那個,他是一個好人,而且我也有男朋友了.如花婉拒了,告訴王婆,我有男朋友了.王婆一聽就知道這事成不了,回去告訴張三.但是過幾天張三還是放不下,又找王婆,還是想找如花.王婆一聽,就說我們立馬再去一趟.王婆出門轉了一圈,連如花都沒出找,回去說,張三如花她有男朋友了,我再給你說一門吧,長得很是水靈.
這個故事就可以告訴我們shell的作用.
可以這么說張三就是我們這個普通用戶,如花就是Linux核心,而王婆就是shell.
但張三請王婆說媒事,就是向核心發送請求,如花想了想張三是誰,就是解析指令,說不同意就是拒絕請求.張三不死心,再一次請求,王婆知道這事沒戲,直接自己拒絕了請求.
Linux用戶的分類
在用戶上會被分為兩類用戶,windows環境下也是一樣的.
普通用戶 多個 權限受限制
root 只有一個 用于最高權限
這里就不談如何創建普通用戶了,在這個系列最開始就分享了過了.
whoami 指令
這個指令是查看但當前用戶.
[bit@Qkj ~]$ whoami
如何進入root用戶
我們在普通用戶這里,可以直接使用指令和root密碼來進入root用戶.
[bit@Qkj ~]$ su -
輸入root密碼,記住root密碼最好不要和普通用戶的密碼一樣.
如何退出root用戶
直接使用熱鍵ctrl+d
su 指令
我們這里一個su指令,這個可以切換我們的用戶,上面我們也看到了切換到root用戶,這里的**-**就是超級用戶的代表,要是我們從一個普通用戶切換到另一個普通用戶該怎么做.
直接su+用戶名,你會發現,他要你輸入密碼,輸入你想進的用戶密碼就可以了
[bit@Qkj ~]$ su qkj
這里就有一個問題了,要是你不知道這個用戶密碼該怎么辦,這里還有一招,我們可以先進root,在直接切換,不用密碼.
[bit@Qkj ~]$ su -
文件
大家先看一下這張圖片,后面我們幾乎所有的知識都是圍繞這個圖片來展開的,可以說重中之重.
文件是什么
在Linux中,文件包含兩個部分的內容,一個事文件屬性,另一個事文件內容.這里文件內容就不用說了,談談屬性.
所謂的屬性可以理解為文件的一些信息,在這張圖上體現為下面.
我們需要理解一下這個些東西
文件類型
開門見山,這里我們提供幾個文件的類型,有的可以不用記,后面用到的時候就會知道了.
- 普通文件, 文本 , 源代碼, 可執行程序,第三方動態庫
d 目錄文件
l 鏈接文件
p 管道文件
b 塊設備文件,磁盤
c 字符設備文件
上面看到了什么文件類型,我們不由得疑惑,一個-也可以作為一個文件類型,這事怎么回事,這里要和大家說一個理念,**在Linux中,我們不以文件的后綴來區分文件的類型.**這個理念十分的重要.我們來證實一下.
我們把可執行程序修改一下文件的后綴發現人就可以執行,這是就可以證實了.
那么這里我們就開始疑惑了,既然Linux環境下不區分后綴,我們事不是可以使用gcc編譯.txt文件,我們試一試后發現,這是不允許的,這就讓我們感到疑惑了.實際上,是可以理解的,Linux不區分,但是gcc這個編譯器是會區分的,你不能那前朝的劍斬本朝的官吧.
權限
我們前面看到文件的權限,那么請問這個都是什么玩意,我這一點都看不懂,不要著急,我們會一一解釋的.
什么是權限
我們需要先認識一下究竟什么是權限.這是一切的基礎.
我們都知道,在學校里面考試,學生只有考試的資格,他絕對沒有資格去修改自己的成績,否則就亂套了,-這就是權限的作用.我們還知道在QQ中,有禁言的功能,但是一個普通群成員是不能禁言的,這是權限的魅力.我們來看看吧.
權限本質上是約束一個人可以做什么,不可以做什么.這里我還要提一個場景,權限的存在還需要環境,你想去一個博客網站去看電視劇,這可能嗎?所以說權限存在下面的要求.
約束人的
權限對應事物需要有相應的屬性
所謂的權限就是 人 + 屬性
我們Linux上學的是對文件的權限,我們按照上面來套套.
文件誰能"訪問",誰不能訪問?文件應該具有某種屬性,比如說可讀(r),可寫(w),可執行(x)...屬性.
Linux下人的分類
既然權限包含了人,那么Linux系統下有哪些人呢?Linux下人分三類.
文件所有者 owner
文件的所屬組 grouper
文件的其他用戶 other
我們需要理解一下這個分類,我們可以接受一個文件不屬于自己肯定屬于其他人,那這個文件的所屬組是怎么理解的?實際上我們可以這么理解,你寫的程序很大,獨自一個人是不可能完成的,這時候你會和其他人組隊,那么你會把自己的寫的文件放給其他的隊員來觀看,這就是文件的所屬組,這樣可以好理解一點.
權限格式
我們既然知道了Linux下人的分類,下面的圖片就有可以談的了.
這樣你就可以發現文件權限的格式,這里我們把前面9個字符三三分組,而且每一組的每一個位置都是確定的
第一組 代表owner 權限
第二組 代表grouper權限
第三組 代表other權限
后面跟著的一次式文件所有者和文件所屬組,我們可以想到,如果人不屬于這兩種,那么一定就是other,這里沒有什么好說的.
權限屬性
文件的權限屬性有四個,但是這里我和大家談三種
r 可讀 只能在第一個,否則就是 - 不可讀
w 可寫 只能在第二個 ,否則就是 - 不可寫
x 可執行 只能在第三個,否則就是 - 不可執行
我們先來談談這個圖片的認識.
owner 是 bit 權限是 rw- 也就是 可讀(r),可寫(w),不可執行(-)
grouper 是 bit 權限是 rw- 也就是 可讀(r),可寫(w),不可執行(-)
other 是 非bit,權限是 r-- 也就是 可讀(r),不可寫(-),不可執行(-)
修改文件權限
修改文件的權限總體來說分為兩類,可以這么說,我們可以修改所有者的權限和修改所有者.我么一次來說.
修改文件權限
我們可以使用chmod指令來修改所有者的權限.
我們可以知道,用u代表owner,g代表grouper,o代表other,+號表示添加權限,-表示去掉權限.
修改owner chmod u+r file.txt
修改grouper chmod g+x file.txt
修改other chmod o-r file.txt
下面就是去掉owner的讀權限.
[bit@Qkj 07_05]$ chmod u-r file.txt
我們可以通過一次增加所有者多個權限.
可以一次修改多個擁有者的權限.
這里我就要提一個問題了,我們對文件加上某個權限,那么這個文件一定可以這么做嗎?是不可以的,下面我們對.txt文件加上可執行,實際上,還是不能執行.
使用八進制
我們都知道在計算機中1代表正確,0代表錯誤,那么我們是不是可以用0和1來表示自己想要修改文件所有者的權限.而且所有者權限的位置都是固定的,每一組也是,這就可以用八進制來表示如何修改權限.
例如rwx = 111 => 7,-wx = 011 => 3,我們可以通過八進制來修改.
我們可以把777分為 111 111 111依次按位置對象相應的權限位置.
[bit@Qkj 07_05]$ chmod 777 file.txt
對應的權限列表
修改文件的所有者
我們可以修改文件的擁有者和文件的所屬組,這兩個是不同的指令,我們分開來談.但是這里需要知道我們要修該的擁有者和所屬組都是在Linux環境下存在的,不能給那些不存咋的用戶.
修改文件的擁有者
這個很簡單,只需要一個簡單的指令就可以了.
這個就是把該文件的擁有者改成了root
[bit@Qkj 07_05]$ chown root file.txt
但你一執行這條命令,你會發現報錯.
那么這是為什么呢?我這里給大家講一個故事,一天,你把你的玩具給你弟弟,但是你弟弟死活不要,請問你該怎么辦?這就是我們現在的處境,我把文件給了其他人,但是他不要.這時候你就想了個主意,我可叫我媽過來,強壓著我弟弟接受這個禮物,在Linux中也是如此,我們可以提高權限,我這里使用的sudo,你的服務器可能還沒配置,可以在root用戶下強壓,道理都一樣.
[qkj@Qkj linux]$ sudo chown root file.txt
但是你要記住,一旦你把文件給了別人,你就可可能擁有grouper或者other的權限了,這里我們沒必要在列出這個具體的解釋了.
修改文件的所屬組
這個是我們權限修改的最后一個內容,內容很上面的一樣在,這里我就不解釋了.
[qkj@Qkj linux]$ sudo chgrp root test.c
這里有一個很重要的東西,你可以一次性修改文件的擁有者和所屬組,使用下面的命令
[qkj@Qkj linux]$ sudo chown root:root test.c
[qkj@Qkj linux]$ sudo chown root:bit test.c
目錄權限的特別
我們想來談談目錄這種文件,對于一般文件,上面的很簡單,但是對于目錄文件我們存在下面的幾個疑惑.
可讀 是什么意思
可寫 什么意思
可執行 是什么意思
可執行
這是我們的三個問題,這里我們先從第三個來談,目錄的可執行是什么意思呢?這個是保證該目錄文件時候可以進入.
我們想來把目錄的rw都個去除掉,只保留x
[bit@Qkj 07_05]$ chmod u-wr lesson1
這時候我們進入這個目錄試試.
你會發現可以進入,但是你要是去除了這個x呢?
可寫
在目錄文件里面,可寫的權限是是可以創建文件.
可讀
可讀是我們進入后不能夠查看當前目錄下的文件.
那么這里有一個問題,如果我們知道文件名的,我們是否可以查看當前目錄下文件的內容?按道理來說,這是不允許的,畢竟我們都知道文件的路徑就像一個吊橋,一段出錯,就不可以,我們已經把可讀的權限給關了,按理說是不應該的,但是現實是可以的,我們可以理解這是Linux下的一個"bug",記住我們的理解是正確的.
root 權限
我們都知道root是擁有最高的權限,那么相對于一個普通用戶創建的文件,root屬于other,那么這個權限可以阻礙掉root用戶嗎?我們來看看現象.
我們把所有的權限都給它撤了,看看root可以嗎.
chmod u-rwx,g-rwx,o-rwx file.txt
我們切換到root用戶,然后去找到該文件所在的目錄,你會發現,即使上面寫著你沒有權限,但是你仍舊可可以完成你要的工作,root可以說是掌管一切,操縱一切.
我們疑惑為什么文件創建權限的是默認的,而且為何被默認了?這有兩個原因
默認 目錄的權限是從 777 開始的,普通文件是從666開始
Linux下有一個權限掩碼 umask
權限掩碼
我們來看Linux環境下的權限掩碼,最左邊的我們不關心,我們把它看成三個8進制,第一個0先不關心,這個另外的知識.
Linux下規定,凡是在權限掩碼出現的1在默認的權限中不出現,這就是775和664的來歷.
最終權限是默認的權限減去權限掩碼嗎
我們這里開始疑惑了,最終權限是默認的權限減去權限掩碼嗎?我看得到775的結果和減去差不多啊,這里究竟是不是啊?我可以明確告訴你不是.用777這個默認目錄權限驗證不出來,這里用普通文件的666來演示.
你會發現,這不是一樣的嗎,是的,這是一個特例,如果我們修改一下umask,你就會發現減法是不對的.
修改 umask
這個倒是挺簡單的, umask后面跟上我們想要的數字就可以了.
這樣的話我們需要在計算一下,看看文件最終的權限是減法的還是權限掩碼出現的1在默認的權限中不出現這個規則.
通過驗證就可以知道了,編譯器可不是使用的減法.
為何會有權限掩碼
這個問題問得好,為何會存在權限掩碼?大家想一個場景,你要創建一批特殊權限的文件,你不會一個一個再修改默認的權限吧,這太麻煩了,只要修改出你想的的權限掩碼,這樣編譯器創建的文件最終權限不就是你想要的嗎,這就是原因.
粘滯位
大家不要對粘滯位感到疑惑,這就是一個簡單的名稱.
共享目錄
在談這個之前,我們想來看看一個例子.在現實生活中,我們是不是存在論壇,來自天涯各地的人都可以在這里討論,我們想在Linux中,是不是可以存在一個目錄文件,這個在這個目錄文件可以被其他任何人訪問,修改等操作,我們用所有者和所屬組是root,other可以進行創建修改和查看來演示.
我們用普通用戶進入去看看,在理里面我們可以創建刪除和修改文件,那么我們已經做好了準備工作.
粘滯位
在這個用戶里面,我們也是可以觀看其他用戶創建的文件,只要是權限夠就可以了,但是有一天,你發現自己的文件被別人隨便的修改了心里面很惱,我把自己文件的權限給改了,不讓其他人人修改和訪問.
別人一看,好家伙,你不讓我看,好大的膽子,我把你的文件給刪了,咱們都別想好過.
這還的了,你刪我的,我也把你的的刪了,大家都別好過,最終就是兩敗俱傷.這時候我們需要做一個方法來杜絕這種事情的發生,我們給這個文件加上粘滯位,記住,這個為文件是這個公共的目錄文件,大家不要搞錯了.
[root@Qkj qkj]# chmod +t all
這樣別人就不能刪除你的文件了,只有你自己可以刪除這個也是粘滯位的作用.
file 指令
雖說我們可以通過文件的前綴可以來查看文件類型,但是還是比較麻煩的,這里提供一個指令,可以查看文件的類型.
[bit@Qkj 07_24]$ file a.out
-----------------------------------
©著作權歸作者所有:來自51CTO博客作者玄鳥軒墨的原創作品
https://blog.51cto.com/u_15132397/5624296