我們在iOS
開發(fā)的時候很少關(guān)注Shell
和MacOS
的權(quán)限問題,但是說起來Shell
我們也是經(jīng)常使用的嵌溢,比如我們終端輸入ls
弥虐,會列舉出當(dāng)前目錄下的所有文件夾和文件漓踢,其實ls
就是一條Shell
指令。
1疚颊、什么是Shell?
對于圖形界面,用戶只需要點擊圖標即可啟動某個軟件渣淤;對于命令行挺据,輸入某個程序的名字(可以看做一個命令)啟動某個程序。所以圖形界面和命令行要達到的目的是一樣的其掂,都是讓用戶控制計算機油挥。
然而,真正能夠控制計算的硬件(CPU款熬、內(nèi)存深寥、顯示器等
)的只有操作系統(tǒng)內(nèi)核(Kernel
),圖形界面和命令行只是架設(shè)在用戶和內(nèi)核之間的一座橋梁贤牛。
由于安全惋鹅、復(fù)雜、繁瑣的原因盔夜,不能讓用戶直接接觸內(nèi)核(也沒有必要)负饲,需要另外再開發(fā)一個程序堤魁,讓用戶直接使用這個程序;該程序的作用就是接收用戶的操作(點擊圖標返十、輸入命令)妥泉,并進行簡單的處理,然后再傳遞給內(nèi)核洞坑,這樣用戶就能間接地使用操作系統(tǒng)內(nèi)核了盲链。
為了既能簡化用戶的操作,又能保障內(nèi)核的安全迟杂,就需要在用戶和內(nèi)核之間增加一層“代理”刽沾,而開發(fā)的用戶界面和命令行程序就是這層“代理”。在Unix或Linux
下排拷,這個命令行程序就叫做 Shell
侧漓。
2、Shell的種類有哪些监氢?
Shell
的種類有很多種布蔗,在我們MacOS
操作系統(tǒng)上默認的是bash
。
我們可以查看一下當(dāng)前MacOS
有多少種Shell
浪腐。
打開終端纵揍,進入 /private/etc
,然后當(dāng)前文件夾下有一個叫做Shells
,Shells
里面存儲了我們當(dāng)前Mac
電腦的操作系統(tǒng)里擁有的Shell
種類议街。zsh
是目前比較流行的且更友好的Shell
泽谨,有興趣的課可以裝一裝。
3特漩、Shell的使用
這里使用2個簡單的例子
- 新建一個文件夾
- 在新建的文件夾里面新建一個文件
新建一個文件夾吧雹,終端輸入:mkdir 代碼
新建一個文件,終端輸入:touch appShell.sh
4拾稳、Shell腳本的介紹和使用
Shell腳本
也就是用各類命令預(yù)先放入到一個文本文件中吮炕,方便一次性執(zhí)行的一個腳本文件。
我們把剛才的指令放到Shell
腳本中
執(zhí)行腳本bash appShell.sh
同理我們可以用其他的Shell
執(zhí)行访得,比如:
ksh appShell.sh
-
zsh appShell.sh
(我電腦安裝的zsh
)
我們也可以使用source appShell.sh
執(zhí)行龙亲。注意:source
后路徑變了,
我們平常最常用的就是./appShell.sh
了悍抑,執(zhí)行后發(fā)現(xiàn)沒有權(quán)限鳄炉,我們添加一個權(quán)限(權(quán)限下一條說)chmod 755 appShell.sh
,然后再執(zhí)行./appShell.sh
腳本執(zhí)行相關(guān)命令的區(qū)別
-
$source FileName
- 意思:在當(dāng)前shell環(huán)境中讀取并執(zhí)行FileName中的命令
- 特點:
- 命令可以強行讓一個腳本去立即影響當(dāng)前的環(huán)境(一般用于加載配置文件)拂盯。
- 命令會強制執(zhí)行腳本中的全部命令,而忽略文件的權(quán)限。
-
$bash FileName记靡、zsh FileName
- 意思:重新建立一個子shell谈竿,在子shell中執(zhí)行腳本里面的句子团驱。
-
$./FileName
- 意思:讀取并執(zhí)行文件中的命令。但有一個前提空凸,腳本文件需要有可執(zhí)行權(quán)限嚎花。
5、MacOS權(quán)限的介紹和文件權(quán)限的修改
MacOS
是基于Unix
內(nèi)核的圖形化操作系統(tǒng)呀洲,而Unix
是多用戶紊选、多任務(wù)的系統(tǒng),所以這樣的系統(tǒng)里面就擁有了用戶道逗、組的概念兵罢,那么同樣文件的權(quán)限也就有相應(yīng)的所屬用戶和所屬組了。
在Windows
上只要能進入系統(tǒng)硬盤上的所有東西都可以訪問滓窍,由于Unix
的多用戶多任務(wù)優(yōu)點卖词,所以Unix
和Linux
多被用于服務(wù)器。
如下圖中顯示贰您,明顯的能看到Unix(Linux)
的多用戶和Windows
的一個用戶訪問區(qū)別坏平。
稍微了解一下MacOS
系統(tǒng),上條中./appShell.sh
的提示權(quán)限不足原來是我們當(dāng)前登錄的用戶未擁有對appShell.sh
執(zhí)行的權(quán)限锦亦。
好,我們查看一下文件權(quán)限令境,終端輸入ls -l
杠园,顯示如下
tancheng@localhost ~/Documents/SecurityProducts/003-CodeSign應(yīng)用重簽名/代碼/WeChatDemo : ls -l
total 8
drwxr-xr-x 3 tancheng staff 96 10 17 11:07 APP
drwxr-xr-x 13 tancheng staff 416 10 19 10:21 WeChatDemo
drwxr-xr-x 5 tancheng staff 160 10 19 10:50 WeChatDemo.xcodeproj
drwxr-xr-x 4 tancheng staff 128 10 19 10:02 WeChatDemoTests
drwxr-xr-x 4 tancheng staff 128 10 19 10:02 WeChatDemoUITests
-rw-r--r-- 1 tancheng staff 1979 10 19 10:40 appShell.sh
[ 權(quán)限 ] [連接] [所有者] [所屬組] [文件大小] [最后修改日期] [文件名稱]
上方第一列就是權(quán)限,接下來依次是連接數(shù)舔庶,文件所有者抛蚁、所屬組,文件大小惕橙、最后修改時間和文件名稱瞧甩,下圖說明了,文件類型和權(quán)限:
那么我們上方使用的chmod 755 appShell.sh
是怎么來的呢弥鹦?
我們在iOS
開發(fā)的時候經(jīng)常能看到類似于下方這種的枚舉肚逸,代表二進制往前移動幾位,這是為了我們能一次使用多個枚舉彬坏,比如UIRectCornerTopLeft
和UIRectCornerTopRight
同時使用朦促。
typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
UIRectCornerTopLeft = 1 << 0,
UIRectCornerTopRight = 1 << 1,
UIRectCornerBottomLeft = 1 << 2,
UIRectCornerBottomRight = 1 << 3,
UIRectCornerAllCorners = ~0UL
};
其實權(quán)限也是一樣的,那么755
代表如下:
-
7
:第一組文件所有者權(quán)限 栓始, 二進制為111
务冕,表示可讀、可寫幻赚、可執(zhí)行(rwx
) -
5
:第二組用戶所在組其他用戶權(quán)限禀忆,二進制為101
臊旭,表示可讀、不可寫箩退、可執(zhí)行(r-x
) -
5
:第三組非本組用戶的權(quán)限巍扛,二進制為101
,表示可讀乏德、不可寫撤奸、可執(zhí)行(r-x
)
相應(yīng)的我們也可以直接操作執(zhí)行權(quán)限chmod a+x appShell.sh
去執(zhí)行,下方圖明確的介紹了改變權(quán)限的方法喊括。u
所屬用戶胧瓜,g
用戶所屬組,o
非本組用戶的權(quán)限郑什,a
以上3種都添加府喳。
以上就是對Shell&Shell腳本&MacOS權(quán)限的一些簡單介紹了,對于我的日常也是夠用了蘑拯。