前言
本文介紹了shell的相關(guān)概念以及linux中的基本權(quán)限。
一、Shell命令以及運(yùn)行原理
Linux嚴(yán)格意義上說(shuō)的是一個(gè)操作系統(tǒng),我們稱(chēng)之為“核心(kernel) “ ,但我們一般用戶,不能直接使用kernel。而是通過(guò)kernel的“外殼”程序,即shell,來(lái)與kernel溝通。
1.Shell的定義
從技術(shù)角度, Shell的最簡(jiǎn)單定義:命令行解釋器(command Interpreter)主要包含:
將使用者的命令翻譯給內(nèi)核(kernel)處理。將內(nèi)核的處理結(jié)果翻譯給使用者。 對(duì)比windows GUI,我們操作Windows 不是直接操作windows內(nèi)核,而是通過(guò)圖形接口,點(diǎn)擊,從而完成我們的操作(比如進(jìn)入D盤(pán)的操作,我們通常是雙擊D盤(pán)盤(pán)符或者運(yùn)行起來(lái)一個(gè)應(yīng)用程序)。(圖形化界面) shell 對(duì)于Linux,有相同的作用,主要是對(duì)我們的指令進(jìn)行解析,解析指令給Linux內(nèi)核。反饋結(jié)果在通過(guò)內(nèi)核運(yùn)行出結(jié)果,通過(guò)shell解析給用戶。(命令行)
Shell是外殼的統(tǒng)稱(chēng)。 centos 7中的Shell是bash。 Shell是包裹在系統(tǒng)外的一層軟件層:

2.為什么用戶不能直接使用kernel?用戶不擅長(zhǎng)直接與操作系統(tǒng)打交道(要用戶直接去和硬件進(jìn)行交互比較困難),所以需要一個(gè)中間介質(zhì)來(lái)輔助用戶可能會(huì)發(fā)布非法任務(wù)給系統(tǒng),導(dǎo)致內(nèi)核掛掉。為了保護(hù)內(nèi)核,就需要用Shell先對(duì)任務(wù)進(jìn)行分辨,再將合法的任務(wù)翻譯給內(nèi)核(非法的任務(wù)會(huì)被拒絕)。當(dāng)然Shell為了保護(hù)自己,它執(zhí)行用戶的任務(wù)也是將任務(wù)分配給子進(jìn)程執(zhí)行,即使子進(jìn)程掛掉也不會(huì)影響Shell。二、Linux中的權(quán)限
首先Linux中存在兩類(lèi)用戶: root用戶:超級(jí)管理員。(要注意保管好root密碼) 普通用戶:受權(quán)限約束的用戶。 從普通用戶切換為root用戶:su / su -(前者在當(dāng)前路徑下登錄,后者重新在家目錄進(jìn)行登錄) 【需要root密碼】 退出root用戶:exit/Ctrl + d 從root用戶切換為普通用戶:su (用戶名) 【不需要密碼】 如果是普通人需要使用root的命令但是不想將身份切換為root可以使用指令:sudo + (命令) 需要輸入用戶的密碼(十到十五分鐘內(nèi)不需要再次輸入密碼) 作用是短暫提權(quán)。 sudo whoami得到的是root的身份(以root身份執(zhí)行對(duì)應(yīng)的命令) 要能使用sudo命令,前提是當(dāng)前用戶是受系統(tǒng)信任的命令,要被添加到/etc/sudoers。(相當(dāng)于白名單用戶) 給受信任的用戶提供最少的障礙。
1.權(quán)限是什么?
權(quán)限:一件事情是否被誰(shuí)(該角色是否被限制)做(是否有對(duì)應(yīng)屬性),即權(quán)限是約束兩個(gè)東西,一個(gè)是人,一個(gè)是屬性。 權(quán)限是約束人的(一個(gè)或某些群體)。 目標(biāo)對(duì)象(電影網(wǎng)站,音樂(lè)app等),本身沒(méi)有該對(duì)應(yīng)的屬性(業(yè)務(wù)),比如在音樂(lè)app看電影。 舉個(gè)例子:某些視頻軟件,它的部分視頻是需要視頻會(huì)員才能進(jìn)行觀看的。 Linux中的角色:擁有者(owner,只能是具體的某個(gè)人)、所屬組(grouper)、其他人(other)。 用戶(具體的人)和角色(身份)之間是互補(bǔ)的不是沖突的,一個(gè)人可以有多種身份。 舉例: 文件 = 內(nèi)容 + 屬性。 屬性:
一個(gè)文件將用戶分為三種即上面的三種角色。文件后綴
注意:Linux本身不根據(jù)文件后綴對(duì)文件做區(qū)分,但是gcc等工具(在Linux中也是一個(gè)文件)它們對(duì)文件后綴是有要求的。 那么Linux中如何對(duì)文件類(lèi)型做區(qū)分呢? 是根據(jù)文件屬性。ls -l顯示的文件各列屬性中的第一行列用來(lái)區(qū)分文件類(lèi)型:
代碼語(yǔ)言:JavaScript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
- 普通文件(源文件、庫(kù)文件、可執(zhí)行程序、文檔壓縮包等)d 目錄文件c 字符設(shè)備文件(鍵盤(pán)、顯示器)b 塊設(shè)備文件(磁盤(pán))l 鏈接文件(類(lèi)似windows中的快捷方式)p 管道文件
一個(gè)文件有三種權(quán)限:讀文件(r)、寫(xiě)文件(w)、執(zhí)行文件(x) 文件的屬性信息和文件的角色(角色是由具體的人扮演)對(duì)應(yīng)起來(lái)(如果沒(méi)有對(duì)應(yīng)的權(quán)限,就是‘-’)。

2.如何操作權(quán)限呢?(怎么修改權(quán)限)
只有擁有者或者root用戶可以對(duì)文件權(quán)限進(jìn)行修改
1. 修改文件屬性直接給角色增刪權(quán)限代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod u-r (文件名)#給擁有者去掉讀權(quán)限chmod u+x (文件名) #給擁有者加上執(zhí)行權(quán)限chmod g-rwx (文件名) #將所屬組所有權(quán)限去掉chmod o+rwx (文件名) #將其他人加上所有權(quán)限chmod u+r,g+rwx,o-wx (文件名) #多個(gè)操作一起也是可以的chmod a-rwx (文件名)#將所有人的所有權(quán)限全部去掉
注意:擁有者與所屬組的權(quán)限是不相關(guān)的,擁有者的權(quán)限只是自己角色的權(quán)限。
八進(jìn)制方案 文件屬性是用1/0表示的(1表示有該權(quán)限,0表示沒(méi)有該權(quán)限)代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
rwx rwx rwx111 110 000 7 6 0
這種方案叫做ugo±rwx方案,即八進(jìn)制方案 因此我們修改屬性也可以用指令:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod 660(八進(jìn)制) (文件名)#修改屬性
2. 修改文件角色文件擁有者修改 可以將文件給別人,但是需要用root的權(quán)限強(qiáng)制給別人(因此也可以將文件要回來(lái))代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
sudo chown (用戶名) (文件名)
文件所屬組修改代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
sudo chgrp (用戶名) (文件名)
同時(shí)修改擁有者和所屬組代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
sudo chown (用戶名):(用戶名) (文件名)
3.為什么要有權(quán)限
便于系統(tǒng)進(jìn)行安全管理。
為什么我們創(chuàng)造出的文件的默認(rèn)權(quán)限是我們所看到這樣?

首先,LInux規(guī)定: 目錄: 起始權(quán)限為777; 普通文件: 起始權(quán)限為666. 其次,系統(tǒng)還有系統(tǒng)掩碼umask,凡是在umask中出現(xiàn)的權(quán)限都必須在起始權(quán)限中去掉!因?yàn)閡mask 為0002 =>000 000 010,所以我們創(chuàng)造出的文件的默認(rèn)權(quán)限就是這樣了。
注意:如果我們要進(jìn)入一個(gè)目錄我們需要什么權(quán)限? 答:x權(quán)限,即執(zhí)行權(quán)限。 這就是為什么目錄的默認(rèn)起始權(quán)限位777。
三、粘滯位1.背景
Linux系統(tǒng)中有很多用戶,有時(shí)候會(huì)有一種特定情況需要我們?cè)谝粋€(gè)公共目錄下進(jìn)行臨時(shí)文件的操作(增刪查改)。 具體某個(gè)用戶的目錄是不能被別人訪問(wèn)的(沒(méi)有權(quán)限),因此需要一個(gè)公共的目錄,大家一起進(jìn)行文件操作。 由于普通用戶沒(méi)有權(quán)限,因此一般這個(gè)目錄是由root進(jìn)行創(chuàng)建的。 剛這個(gè)目錄的權(quán)限必須是777,以為目錄的擁有者和所屬組都是root,其他人是others,為了讓其他人能在該目錄下進(jìn)行文件操作,必須將權(quán)限全部打卡。
2.具體操作
粘滯位是一種特殊的權(quán)限,由root用戶進(jìn)行設(shè)置,給others設(shè)置該權(quán)限。 在一個(gè)公共目錄下,我們都有對(duì)目錄的rwx權(quán)限,因此即使其他人的文件內(nèi)容不對(duì)我開(kāi)放,即我沒(méi)有讀取它的文件的權(quán)限,我們也是可以將它的文件刪除的(這是創(chuàng)建文件和刪除文件是目錄的權(quán)限)。 為了禁止這種刪除他人文件的行為,我們需要給該公共目錄設(shè)置粘滯位。
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod +t (公共目錄名)#給others設(shè)置了粘滯位(將x設(shè)置為了t)
總結(jié)