set命令做用主要是顯示系統中已經存在的shell變量,以及設置shell變量的新變量值。使用set更改shell特性時,符號"+"和"-"的做用分別是打開和關閉指定的模式。set命令不可以定義新的shell變量。若是要定義新的變量,可使用declare命令以變量名=值
的格式進行定義便可。node
set(選項)(參數)
-a:標示已修改的變量,以供輸出至環境變量。 -b:使被停止的後臺程序馬上回報執行狀態。 -C:轉向所產生的文件沒法覆蓋已存在的文件。 -d:Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。 -e:若指令傳回值不等於0,則當即退出shell。 -f:取消使用通配符。 -h:自動記錄函數的所在位置。 -H Shell:可利用"!"加<指令編號>的方式來執行history中記錄的指令。 -k:指令所給的參數都會被視爲此指令的環境變量。 -l:記錄for循環的變量名稱。 -m:使用監視模式。 -n:只讀取指令,而不實際執行。 -p:啓動優先順序模式。 -P:啓動-P參數後,執行指令時,會以實際的文件或目錄來取代符號鏈接。 -t:執行完隨後的指令,即退出shell。 -u:當執行時使用到未定義過的變量,則顯示錯誤信息。 -v:顯示shell所讀取的輸入值。 -x:執行指令後,會先顯示該指令及所下的參數。
取消某個set曾啓動的參數。python
使用declare命令定義一個新的環境變量"mylove",而且將其值設置爲"Visual C++",輸入以下命令:linux
declare mylove='Visual C++' #定義新環境變量
再使用set命令將新定義的變量輸出爲環境變量,輸入以下命令:shell
set -a mylove #設置爲環境變量
執行該命令後,將會新添加對應的環境變量。用戶可使用env命令和grep命令分別顯示和搜索環境變量"mylove",輸入命令以下:bash
env | grep mylove #顯示環境變量值
此時,該命令執行後,將輸出查詢到的環境變量值。函數
set_uid的表現,權限上添加了小寫的s,ui
更改密碼的文件/etc/shadow,root也沒法更改。spa
ls能夠查看root權限時。是添加了set_uid權限。.net
去掉set_uid權限方法。code
普通用戶用ls命令查看root權限。能顯示的內容。
(1)、設置set_gid的方法。設置過的文件會變成黃(橙)色。
(2)、更改所屬組方法。
在ls命令前面添加!號,顯示的全面。
(1).防刪除,在權限中以t顯示。
設置777權限,所屬者,所屬組。
Symbolic Links : 跟hard link不一樣,這個是創建一個獨立的文件,而這個文件的做用是當讀取這個連接文件時,它會把讀取的行爲轉發到該文件所link的文件上。這樣講,也許比較繞口,那麼就來舉一個例子。如今有文件a,咱們作了一個軟連接文件b(只是一個連接文件,很是小),b指向了文件a。當讀取b時,那麼b就會把讀取的動做轉發到a上,這樣就讀取到了文件a。因此,當你刪除文件a時,文件b並不會被刪除,可是再讀取b時,會提示沒法打開文件。而,當你刪除b時,a是不會有任何影響的。
命令: ln
語法 : ln [-s] [來源文件] [目的文件]
ln 經常使用的選項就一個 ‘-s’, 若是不加就是創建硬連接,加上就創建軟連接。
[root@localhost ~]# mkdir 123 [root@localhost ~]# cd 123 [root@localhost 123]# cp /etc/passwd ./ [root@localhost 123]# ll 總用量 4 -rw-r--r-- 1 root root 1097 5月 10 17:08 passwd [root@localhost 123]# du -sk 8 . [root@localhost 123]# ln passwd passwd-hard [root@localhost 123]# ll 總用量 8 -rw-r--r-- 2 root root 1097 5月 10 17:08 passwd -rw-r--r-- 2 root root 1097 5月 10 17:08 passwd-hard [root@localhost 123]# du -sk 8
實例淺綠色
若是刪除掉源文件,則軟連接文件不能讀取了,並且使用 ‘ll’ 查看發現顏色也變了。
[root@localhost ~]# ln -s 456 789 [root@localhost ~]# ls -ld 456 789 drwxr-xr-x 2 root root 4096 5月 10 17:22 456 lrwxrwxrwx 1 root root 3 5月 10 17:29 789 -> 456
注意:建立軟鏈接時,大文件放在前面;作軟鏈接儘可能使用絕對路徑
Hard Links : 當系統要讀取一個文件時,就會先去讀inode table,而後再去根據inode中的信息到塊區域去將數據取出來。而hard link 是直接再創建一個inode連接到文件放置的塊區域。也就是說,進行hard link的時候實際上該文件內容沒有任何變化,只是增長了一個指到這個文件的inode, hard link 有兩個限制:(1)不能跨文件系統,由於不一樣的文件系統有不一樣的inode table; (2) 不能連接目錄。
‘ll’ 命令等同於 ‘ls -l’, 請使用 ‘which’ 命令查看一下。作了硬連接後,雖然兩個文件大小都爲 ‘1097’, 可是目錄的大小並無變化。
[root@localhost 123]# ll 總用量 4 -rw-r--r-- 1 root root 1097 5月 10 17:08 passwd-hard [root@localhost 123]# rm -f passwd [root@localhost 123]# du -sk 8 .
刪除源文件passwd, 空間依舊不變。這說明硬連接只是複製了一份inode信息。
[root@localhost ~]# ln 123 456 ln: "123": 不容許將硬連接指向目錄
硬連接不能用於目錄。
[root@localhost ~]# mkdir 456 [root@localhost ~]# cd 456 [root@localhost 456]# cp /etc/passwd ./ [root@localhost 456]# ln -s passwd passwd-soft [root@localhost 456]# ll 總用量 4 -rw-r--r-- 1 root root 1097 5月 10 17:18 passwd lrwxrwxrwx 1 root root 6 5月 10 17:19 passwd-soft -> passwd [root@localhost 456]# head -n1 passwd-soft root:x:0:0:root:/root:/bin/bash [root@localhost 456]# head -n1 passwd root:x:0:0:root:/root:/bin/bash [root@localhost 456]# rm -f passwd [root@localhost 456]# head -n1 passwd-soft head: 沒法打開"passwd-soft" 讀取數據: 沒有那個文件或目錄 [root@localhost 456]# ll 總用量 0 lrwxrwxrwx 1 root root 6 5月 10 17:19 passwd-soft -> passw
注意:兩種連接的本質區別關鍵點在於inode.
其餘權限
除了讀寫執行權限外系統還支持強制位(s權限)和粘滯位(t權限)
s權限: 設置使文件在執行階段具備文件全部者的權限,至關於臨時擁有文件全部者的身份. 典型的文件是passwd. 若是通常用戶執行該文件, 則在執行過程當中, 該文件能夠得到root權限, 從而能夠更改用戶的密碼.
ls -al /usr/bin/passwd -rwsr-xr-x 1 pythontab pythontab 32988 2018-03-16 14:25 /usr/bin/passwd
咱們能夠經過字符模式設置s權限:chmod a+s filename,也可使用絕對模式進行設置:
設置suid:將相應的權限位以前的那一位設置爲4;
設置guid:將相應的權限位以前的那一位設置爲2;
二者都置位:將相應的權限位以前的那一位設置爲4+2=6。
注意:在設置s權限時文件屬主、屬組必須先設置相應的x權限,不然s權限並不能正真生效(c h m o d命令不進行必要的完整性檢查,即便不設置x權限就設置s權限,chmod也不會報錯,當咱們ls -l時看到rwS,大寫S說明s權限未生效)
t權限:要刪除一個文檔,您不必定要有這個文檔的寫權限,但您必定要有這個文檔的上級目錄的寫權限。也就是說,您即便沒有一個文檔的寫權限,但您有這個文檔的上級目錄的寫權限,您 也可以把這個文檔給刪除,而假如沒有一個目錄的寫權限,也就不能在這個目錄下建立文檔。
怎樣才能使一個目錄既可以讓任何用戶寫入文檔,又不讓用戶刪除這個目錄下他人的文檔,t權限就是能起到這個做用。t權限通常只用在目錄上,用在文檔上起不到什麼做用。
在一個目錄上設了t權限位後,(如/home,權限爲1777)任何的用戶都可以在這個目錄下建立文檔,但只能刪除本身建立的文檔(root除外),這就對任何用戶能寫的目錄下的用戶文檔 啓到了保護的做用。
能夠經過chmod +t filename 來設置t權限
資源 :
Linux權限管理:普通文件權限、特殊權限及ACL 薦 : http://blog.51cto.com/11551196/1833974