set_uid、set_gid、stick_bit、硬鏈接、軟連接
passwd這個命令是linux中普通用戶改密碼的命令,他的文件權限是
[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
這裏面多了一個“s”這個權限,這就是set-uid權限。它的作用是只要不是root用戶去執行set-uid這個命令時,在執行的那一瞬間臨時獲得root的身份。前提是這個文件必須是二進制的文件,而且是一個可執行的文件。
哪個如何給文件設置set-uid的權限呢?
set-gid
這是作用在組上的權限位。
[root@localhost ~]# chmod g+s /usr/bin/ls
[root@localhost ~]# ll /usr/bin/ls
-rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
這是讓普通用戶擁有所屬組的權限,他不僅可以作用在文件上,也可以作用在目錄上。
[root@localhost ~]# chmod g+s aming
drwxr-sr-x. 2 root root 6 1月 6 09:15 aming
當作用在文件上時,和set-uid是類似的。當做用在目錄上時,當你創建子目錄或者子文件的時候,創建的子文件和子目錄的所屬組和該目錄的所屬組保持一致。
stick-bit
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 29 root root 4096 1月 8 21:16 /tmp
這個t,這就是stick-bit權限,是防刪除位。只有有權限的人才可以刪除,比如所有者和root。
這裏還有一個知識點,就是你的文件權限是按照目錄的權限來執行,而不是按照文件的權限來執行。但是你如果加了stick-bit,你就不能刪除了,但是你可以修改。
軟連接
軟連接相當於windows的快捷方式。
作用是節省空間,而且還可以跨分區。
怎樣做軟連接,ln -s 源文件 軟連接文件
例如:我們要將12.txt的軟連接做到/tmp的目錄下,首先我們找到12.txt這個文件
然後輸入命令ln -s /root/12.txt /tmp/,回車。
然後我們到/tmp這個目錄下查看,
lrwxrwxrwx. 1 root root 12 1月 11 22:08 12.txt -> /root/12.txt
發現/tmp下已經產生了一個12.txt的軟連接。
軟連接不僅可以連接文件,也可以連接目錄
我們要將111目錄的軟連接放到/tmp下的aming目錄中,先找出111這個目錄,
[root@localhost ~]# ll
drwxrwxr-x. 3 root root 99 1月 11 22:23 111
然後和做文件的軟連接一樣
ln -s /root/111 /tmp/aming
然後到/tmp/aming下查詢這個軟連接
[root@localhost ~]# cd /tmp/aming
[root@localhost aming]# ll
drwxr-xr-x. 3 root root 15 12月 17 18:40 1
lrwxrwxrwx. 1 root root 9 1月 11 22:24 111 -> /root/111
這時111的軟連接已經放到aming的目錄下了。這就是軟連接的目錄。
在當前目錄下我們做的軟連接則不是以絕對路徑開頭的,這樣做會有一些弊端,比如你將數據拷貝到另一臺機器上,但是當你想要查詢或者使用時,會導致無法使用,所以我們創建軟連接一定要用絕對路徑,不要用相對路徑。
這裏舉一個例子,比如我們的/boot已經快存滿,但是有一個進程llt還在不停的往這裏寫數據在llt.log,這時我們就可以用一個軟連接來解決這個問題,我們先找一個空間比較大的磁盤,比如/,我們可以先將llt.log拷貝到/下,cp 、/boot/llt.log /llt.log,然後我們將/boot下的llt.log刪除,後面緊接著做一個llt.log的軟連接。rm -f llt.log;ln -s /llt.log /boot/llt.log,這樣這個服務按照路徑還是寫入/boot/llt.log,但實際是寫入/llt.log。
硬鏈接
硬鏈接是兩個文件同時用了相同inode號,那麽這兩個文件互為硬鏈接文件,刪除其中一個,對另一個沒有影響。他不會占用多余的空間。他只是源文件的一張皮,硬鏈接不支持目錄,只支持文件,而且不能跨分區。
創建硬鏈接的命令為ln
比如我們要為12.txt創建一個硬鏈接,並更名為123.txt
[root@localhost ~]# ll
-rw-rw-r--. 1 root root 130 1月 7 22:19 12.txt
然後我們輸入命令[root@localhost ~]# ln 12.txt 123.txt
創建完成後我們再查詢一下,輸入命令ll -i查看inode
[root@localhost ~]# ll -i
33583037 -rw-rw-r--. 2 root root 130 1月 7 22:19 123.txt
33583037 -rw-rw-r--. 2 root root 130 1月 7 22:19 12.txt
這時我們發現這兩個文件有相同的inode,相同連接數,大小相同,創建的時間也相同。他倆互為硬鏈接文件。
set_uid、set_gid、stick_bit、硬鏈接、軟連接