Linux基礎(day9)

2.18 特殊權限set_uid

set_uid

例子 -rwsr-xr-x.中的s的權限

[root@hf-01 ~]# which passwd
/usr/bin/passwd
[root@hf-01 ~]# ls -l /usr/bin/passwd        會發現passwd文件含有特殊的s權限
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

set_uid介紹

  • set_uid(s):該權限針對二進制可執行文件使文件在執行階段具備文件全部者的權限。
    • 可使用chmod u+(-)s 【二進制文件名】 來設置權限。
  • 至關於set_uid設置user的權限位。
[root@hf-01 ~]# ls /etc/shadow
/etc/shadow     改用戶密碼的文件
[root@hf-01 ~]# ls -l !$    會發現更改密碼的文件權限爲000
ls -l /etc/shadow
----------. 1 root root 665 10月 26 08:04 /etc/shadow

set_uid總結

  • set_uid命令,就是保證普通用戶臨時擁有該命令全部者的身份
  • 給一個文件設置set_uid擁有臨時全部者的權限
    • 前提,是該文件必須是二進制文件,並且是一個可執行(x)的文件
      • 例如:ls,passwd這些文件就是二進制文件
      • 而像,1.txt去設置set_uid權限是沒有意義的
    • 小寫的s包括了x權限,大寫的S表示沒有x權限
[root@hf-01 ~]# ls -l /usr/bin/ls     這裏想給ls命令加一個
-rwxr-xr-x. 1 root root 117616 6月  10 2014 /usr/bin/ls

而後複製SSH渠道,打開另外一個終端2hf(1)下
[root@hf-01 ~]# su - hanfeng        切換到普通用戶hanfeng下去
[hanfeng@hf-01 ~]$ whoami       來查看當前用戶
hanfeng
[hanfeng@hf-01 ~]$ ls /root/    這時訪問/root/目錄,會提示沒權限
ls: 沒法打開目錄/root: 權限不夠

這時回到以前的終端下1hf(0)下
[root@hf-01 ~]# chmod u+s /usr/bin/ls       給ls命令增長+s權限
[root@hf-01 ~]# ls -l /usr/bin/ls           這時查看ls命令,會發現x變化爲了s權限(小寫的s包括了x權限,大寫的S表示沒有x權限)
-rwsr-xr-x. 1 root root 117616 6月  10 2014 /usr/bin/ls

在切換到另外一個終端2hf(1)下
[hanfeng@hf-01 ~]$ ls /root/        這時會看到有訪問權限了,就是由於set_uid權限賦給ls。(當在其餘用戶下使用ls命令時,在執行過程當中會以root身份來運行)
11.txt  123  234  2.txt  33.txt  anaconda-ks.cfg.1  ha.txt  hf
[hanfeng@hf-01 ~]$ ls -ld /root/
dr-xr-x---. 5 root root 4096 10月 26 09:41 /root/

回到終端1hf(0)下
[root@hf-01 ~]# chmod u-s /usr/bin/ls   去除set_uid賦予給ls的權限

set_uid的寫法

  • ls命令的絕對路徑爲 /usr/bin/ls
[root@hf-01 ~]# chmod u+s /usr/bin/ls       命令ls被賦予了s權限
[root@hf-01 ~]# chmod u-s /usr/bin/ls       收回s權限
[root@hf-01 ~]# chmod u=rws /usr/bin/ls     這也是賦予ls權限的方法,可是它缺乏可執行的權限(小寫的s包括了x權限,大寫的S表示沒有x權限)
[root@hf-01 ~]# !ls     會發現這裏顯示的是大寫S
ls -l /usr/bin/ls
-rwSr-xr-x. 1 root root 117616 6月  10 2014 /usr/bin/ls
[root@hf-01 ~]# chmod u+x /usr/bin/ls       在這裏再給它加上+x可執行的權限便可
[root@hf-01 ~]# !ls     會發現這裏顯示的是小寫s
ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117616 6月  10 2014 /usr/bin/ls
[root@hf-01 ~]#
  • 目錄可增長set_uid權限,可是基本沒啥做用,目錄基本不用去執行啥
  • set_uid權限自己的做用就是給一個普通用戶的用戶執行,臨時擁有全部者的身份

2.19 特殊權限set_gid

set_gid

  • set_gid(s):可做用於文件(二進制可執行文件)和目錄。
  • 至關於set_gid 設置group組的權限位。
  • 可使用chmod g+(-) 【文件名/目錄名】 來設置權限。
  • 也就是將標誌s加到gid的x標誌位,sgid用在目錄上最多。

set_gid做用

- set_gid做用在文件上時,和set_uid效果一致,會使普通用戶臨時擁有所屬組的身份
[root@hf-01 ~]# chmod u=rwx /usr/bin/ls     將ls命令權限恢復成默認初始權限
[root@hf-01 ~]# !ls
ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117616 6月  10 2014 /usr/bin/ls
[root@hf-01 ~]# chmod g+s /usr/bin/ls     設置set_gid權限
[root@hf-01 ~]# !ls
ls -l /usr/bin/ls
-rwxr-sr-x. 1 root root 117616 6月  10 2014 /usr/bin/ls

在切換到另外一個終端2hf(1)下
[hanfeng@hf-01 ~]$ ls /root/    將set_gid權限賦給ls,當在其餘用戶下使用ls命令時,(由於ls的所屬組是root,因此就會以root身份來執行)
11.txt  123  234  2.txt  33.txt  anaconda-ks.cfg.1  ha.txt  hf
[hanfeng@hf-01 ~]$ ls -ld /root/
dr-xr-x---. 5 root root 4096 10月 26 09:41 /root/

set_gid用法——>目錄

[root@hf-01 ~]# ls -l
總用量 8
-rw-r--r--. 1 root root   0 10月 26 08:39 11.txt
drwxr-xr-x. 2 root root   6 10月 26 08:39 123
drwxrwxr-x. 2 root root   6 10月 26 08:57 234
-rwxrwxrwx. 1 root root 924 10月 25 06:49 2.txt
-rw-rw-r--. 1 root root   0 10月 26 08:56 33.txt
-rw-------. 1 root root 973 8月  21 05:05 anaconda-ks.cfg.1
-rw-rw-r--. 1 root root   0 10月 26 09:41 ha.txt
dr-x--xr-x. 2 root root  18 10月 26 06:56 hf
[root@hf-01 ~]# chmod g+s 234       更改234目錄的set_gid權限
[root@hf-01 ~]# ls -ld 234
drwxrwsr-x. 2 root root 6 10月 26 08:57 234
[root@hf-01 ~]# chown :hanfeng 234      再來更改234目錄所屬組的權限
[root@hf-01 ~]# ls -ld 234
drwxrwsr-x. 2 root hanfeng 6 10月 26 08:57 234
[root@hf-01 ~]# touch 234/gurui         在目錄234下新建文件gurui
[root@hf-01 ~]# ls -l 234/      查看全部者和全部組
總用量 0
-rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui
[root@hf-01 ~]# mkdir 234/am            在目錄234下新建目錄am 
[root@hf-01 ~]# ls -l 234/
總用量 0
drwxr-sr-x. 2 root hanfeng 6 10月 27 07:47 am
-rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui
[root@hf-01 ~]# chmod g-s 234       去除set_gid臨時權限
[root@hf-01 ~]# touch 234/gurui111  在234目錄下新建gurui111文件
[root@hf-01 ~]# !ls     發如今root用戶下建立的文件,全部組默認都是root
ls -l 234/
總用量 0
drwxr-sr-x. 2 root hanfeng 6 10月 27 07:47 am
-rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui
-rw-r--r--. 1 root root    0 10月 27 07:48 gurui111
[root@hf-01 ~]# mkdir 234/am1   在目錄234下新建目錄am1
[root@hf-01 ~]# ls -l 234/  發如今root用戶下建立的目錄,全部組默認都是root
總用量 0
drwxr-sr-x. 2 root hanfeng 6 10月 27 07:47 am
drwxr-xr-x. 2 root root    6 10月 27 07:49 am1
-rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui
-rw-r--r--. 1 root root    0 10月 27 07:48 gurui111
  • 當給一個目錄設置了set_gid以後,再去這個目錄下面建立子目錄和子文件的時候,那這個子文件和子目錄的所屬組會跟着父級目錄(就是剛剛建立的set_gid權限的目錄)保持一致。

set_gid總結

  • set_gid這個權限的做用,他不只僅能夠做用在文件上,也能夠做用在目錄上
    • 看成用在文件上,和set_uid做用相似,可讓執行文件的普通用戶臨時擁有所屬組的身份。
    • 看成用在目錄上,在建立子目錄和子文件的時候,子目錄和子文件所屬組和該目錄的所屬組保持一致

2.20 特殊權限stick_bit

stick_bit介紹

系統中的/tmp/目錄是擁有stick_bit權限的
[root@hf-01 ~]# ls -ld /tmp/
drwxrwxrwt. 9 root root 4096 10月 27 05:14 /tmp/
  • 這drwxrwxrwt.裏面的t(t裏面包含x權限),就是stick_bit權限,
  • stick_bit(t):又叫作防刪除位。只對目錄有效,對文件無效。
    • 在/tmp/下有不少相似的文件,擁有777權限,說明任何一個用戶均可對這個目錄可寫,並建立本身的文件
    [root@hf-01 ~]# cd /tmp/
    [root@hf-01 tmp]# ls
    aminglinux  amning  mysql.sock  yum.log
  • 至關於stick-bit設置others權限位。

stick_bit用法

在終端2hf(1)下

[hanfeng@hf-01 ~]$ whoami   查看所屬主
hanfeng
[hanfeng@hf-01 ~]$ cd /tmp/     切換到/tmp/目錄下
[hanfeng@hf-01 tmp]$ ls
aminglinux  amning  mysql.sock  yum.log
[hanfeng@hf-01 tmp]$ touch yunwei   新建文件yunwei
[hanfeng@hf-01 tmp]$ ls -l  會看到文件yunwei的所屬主和所屬組都是hanfeng
總用量 0
drwxr-xr-x. 4 user1   hanfeng 39 10月 26 08:23 aminglinux
drwxr-xr-x. 3 root    root    14 10月 25 06:29 amning
srwxrwxrwx. 1 mysql   mysql    0 10月 27 02:47 mysql.sock
-rw-r--r--. 1 user1   root     0 10月 26 07:48 yum.log
-rw-rw-r--. 1 hanfeng hanfeng  0 10月 27 08:40 yunwei
[hanfeng@hf-01 tmp]$ vi yunwei  並能夠編輯文件
[hanfeng@hf-01 tmp]$ chmod 777 yunwei   將yunwei文件權限修改成777
[hanfeng@hf-01 tmp]$ ls -l  會看到yunwei的權限變化爲-rwxrwxrwx.
總用量 4
drwxr-xr-x. 4 user1   hanfeng 39 10月 26 08:23 aminglinux
drwxr-xr-x. 3 root    root    14 10月 25 06:29 amning
srwxrwxrwx. 1 mysql   mysql    0 10月 27 02:47 mysql.sock
-rw-r--r--. 1 user1   root     0 10月 26 07:48 yum.log
-rwxrwxrwx. 1 hanfeng hanfeng 26 10月 27 08:41 yunwei

這時在切換到1hf(0)下
[root@hf-01 tmp]# whoami    查看所屬主
root
[root@hf-01 tmp]# su - user1    切換到user1用戶下
[user1@hf-01 ~]$ cd /tmp/       切換到目錄/tmp/下
[user1@hf-01 tmp]$ ls       會發現能夠查看到文件
aminglinux  amning  mysql.sock  yum.log  yunwei
[user1@hf-01 tmp]$ vi yunwei    也能夠進行編輯
[user1@hf-01 tmp]$ rm -f yunwei     不能夠刪除文件yunwei的
rm: 沒法刪除"yunwei": 不容許的操做

因此說,這個stick_bit權限叫防刪除位,只有有權限的用戶(好比root)才能夠刪除,而其餘的用戶是根本沒法刪除掉的node

stick_bit例子

  • 就是防止別人刪除本身的文件(root用戶除外)
在終端1hf(0)下

[user1@hf-01 tmp]$ mkdir user1  新建目錄user1
[user1@hf-01 tmp]$ chmod 777 user1  並把權限修改成777
[user1@hf-01 tmp]$ ls -l
總用量 4
drwxr-xr-x. 4 user1   hanfeng 39 10月 26 08:23 aminglinux
drwxr-xr-x. 3 root    root    14 10月 25 06:29 amning
srwxrwxrwx. 1 mysql   mysql    0 10月 27 02:47 mysql.sock
drwxrwxrwx. 2 user1   user1    6 10月 27 08:57 user1        777權限,意味着任何用戶均可以去寫,可讀,可執行
-rw-r--r--. 1 user1   root     0 10月 26 07:48 yum.log
-rwxrwxrwx. 1 hanfeng hanfeng 45 10月 27 08:43 yunwei

切換到終端2hf(1)下

[hanfeng@hf-01 tmp]$ cd user1   切換到目錄user1下面
[hanfeng@hf-01 user1]$ touch 1.txt  發現能夠建立文件
[hanfeng@hf-01 user1]$ mkdir 234    能夠建立目錄
[hanfeng@hf-01 user1]$ ls -l
總用量 0
-rw-rw-r--. 1 hanfeng hanfeng 0 10月 27 09:03 1.txt
drwxrwxr-x. 2 hanfeng hanfeng 6 10月 27 09:03 234

在切換到終端1hf(0)下

[user1@hf-01 tmp]$ cd user1
[user1@hf-01 user1]$ ls
1.txt  234
[user1@hf-01 user1]$ ls -l
總用量 0
-rw-rw-r--. 1 hanfeng hanfeng 0 10月 27 09:03 1.txt
drwxrwxr-x. 2 hanfeng hanfeng 6 10月 27 09:03 234
[user1@hf-01 user1]$ rm -f 1.txt
[user1@hf-01 user1]$ ls
234
[user1@hf-01 user1]$ rm -r 234
rm:是否刪除有寫保護的目錄 "234"?y
[user1@hf-01 user1]$ ls
[user1@hf-01 user1]$ pwd    
/tmp/user1
[user1@hf-01 user1]$ ls -ld .
drwxrwxrwx. 2 user1 user1 6 10月 27 09:07

上述例子,這是由於這個目錄,刪除的這個文件所在的目錄有沒有寫權限,而不是看刪除的文件自己的權限,user1目錄下有1.txt文件,要想刪除1.txt,看的不是1.txt文件的權限,而是看1.txt所在目錄的權限,它所在的目錄是user1,user1就是777,777是任何用戶可編輯的,因此就可刪除,而一旦咱們加上了stick_bit權限mysql

stick_bit總結

  • 文件是否能夠被某用戶刪除,主要取決於該文件所在的目錄是否對該用戶具備寫權限。若是沒有寫權限,則這個目錄下的全部文件都不能刪除,同時也不能添加新的文件。linux

  • 若是但願用戶可以添加文件,可是不能刪除該目錄下其餘用戶的文件,則能夠對該目錄增長這個權限。sql

  • 設置該權限後,就算用戶對目錄具備寫權限,也不能刪除其餘用戶的文件。windows

  • 有時候,set-uid上的權限爲大寫的S,而不是小寫的s。這是由於該文件沒有x權限所致,不論是大寫的S仍是小寫s,都表示它存在set-uid和set-gid權限。同理stick-bit也同樣。ui

  • 當有特殊權限時,第一位數字能夠是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)、7(sst),這裏的「(---)」,分別指user、group、others的權限位(rwx rwx rwx)。 如:/tmp是--t,因此第一位爲1,因此/tmp權限用數字表示爲1777。3d

  • 文件的讀寫執行權限不要和目錄的讀寫執行權限混淆。日誌

  • 好比:一個文件設置了可寫權限,但目錄未設置可寫權限,表示不能刪除該文件,但文件內容是可編輯的。code

  • 一個目錄設置了可寫權限,但目錄下文件沒有可寫權限,表示可刪除該文件,但該文件不能編輯。可否刪除一個文件或者目錄,看得是這個文件或目錄所在的父目錄的權限,可否刪除和文件自己的權限無關。it

2.21 軟連接文件

軟連接介紹

  • 連接文件分爲硬連接文件(hard link)和軟連接文件(symbolic link),兩種連接的本質區別在於inode。
    • 軟連接文件:是創建一個獨立的文件,當讀取這個連接文件時,它會把讀取的行爲轉發到該文件所連接的文件上。作軟連接儘可能使用絕對路徑。

例子

```
[root@hf-01 ~]# ls -l /bin     這個/bin,就是一個軟連接文件,真正是在/usr/bin/下
lrwxrwxrwx. 1 root root 7 8月  21 05:03 /bin -> usr/bin
[root@hf-01 ~]# /bin/ls
11.txt	123  234  2.txt  33.txt  anaconda-ks.cfg.1  ha.txt  hf
[root@hf-01 ~]# /usr/bin/ls     會發現和/bin/ls是一個軟連接文件
11.txt	123  234  2.txt  33.txt  anaconda-ks.cfg.1  ha.txt  hf
```
  • 軟連接其實就是在一個文件自己存了另外一個文件目錄的路徑。連接文件的大小適合路徑是有關係的,路徑越長,那這個軟連接文件越大
    在/lib64/目錄中軟連接文件最多
    [root@hf-01 ~]# ls -l /lib64/

軟連接優點

軟連接就像是windows中的快捷方式,能夠很大程度的節省磁盤空間

案例分析

好比要找一個文件,必需要在/tmp/123/12/1.txt,而自己這個1.txt文件放到了/root/123/這個目錄下
而這個程序必需要在/tmp/12/目錄下找到1.txt文件

方法一:能夠拷貝一份到該目錄下,但如果文件更改後,就會繼續要拷貝,因此很麻煩。

方法二:給/root/123/1.txt作一個軟連接

ln -s建立軟連接

  • ln -s 源文件 軟連接文件
[root@hf-01 ~]# ls
11.txt  123  234  2.txt  33.txt  anaconda-ks.cfg.1  ha.txt  hf
[root@hf-01 ~]# cd /tmp/
[root@hf-01 tmp]# ls
aminglinux  amning  mysql.sock  user1  yum.log  yunwei
[root@hf-01 tmp]# ln -s /tmp/yum.log /root/123/yum.log
[root@hf-01 tmp]# ls -l /root/123/      這樣就造成了一個軟連接文件
總用量 0
lrwxrwxrwx. 1 root root 12 10月 30 05:44 yum.log -> /tmp/yum.log

ln -s 連接目錄

  • 不只能夠連接文件,還能夠連接目錄
[root@hf-01 tmp]# ln -s /tmp/amning/ /root/amning111
[root@hf-01 tmp]# ls -l !$
ls -l /root/amning111
lrwxrwxrwx. 1 root root 12 10月 30 05:51 /root/amning111 -> /tmp/amning/

同一目錄,建立軟連接

  • 在/tmp/目錄下,源文件aa.log連接——》目標文件ss.log
[root@hf-01 tmp]# ls -l
總用量 4
-rw-r--r--. 1 root    root     0 10月 30 06:09 aa.log
srwxrwxrwx. 1 mysql   mysql    0 10月 30 04:49 mysql.sock
drwxrwxrwx. 2 user1   user1    6 10月 27 09:07 user1
[root@hf-01 tmp]# ln -s aa.log ss.log
[root@hf-01 tmp]# ls -l
總用量 4
-rw-r--r--. 1 root    root     0 10月 30 06:09 aa.log
srwxrwxrwx. 1 mysql   mysql    0 10月 30 04:49 mysql.sock
lrwxrwxrwx. 1 root    root     6 10月 30 06:13 ss.log -> aa.log
弊端——在同一目錄下
  • 弊端——假設作了一個相對路徑的軟連接,再把全部的文件拷貝到另外一臺機器上的時候(軟連接自己也是一個文件),結果會發現這個文件不存在,(也就是源不存在),因此儘可能使用絕對路徑
弊端解決方法
  • 儘可能使用絕對路徑,這樣就會避免文件的不存在
[root@hf-01 ~]# cd /tmp/
[root@hf-01 tmp]# ls -l
總用量 4
drwxr-xr-x. 4 user1   hanfeng 53 10月 30 06:01 aminglinux
lrwxrwxrwx. 1 root    root     6 10月 30 06:13 ss.log -> aa.log
[root@hf-01 tmp]# mv ss.log aminglinux/
[root@hf-01 tmp]# cd aminglinux
[root@hf-01 aminglinux]# ls -l
總用量 0
drwxr-xr-x. 4 user1 hanfeng 31 10月 25 06:55 aming2
lrwxrwxrwx. 1 root  root     6 10月 30 06:13 ss.log -> aa.log

這裏會發現aa.log在飄紅閃爍,這是由於這個文件不存在

阿銘工做中例子

[root@hf-01 ~]# df -h    查看磁盤分區狀況
文件系統        容量  已用  可用 已用% 掛載點
/dev/sda3        18G  2.4G   16G   14% /
devtmpfs        489M     0  489M    0% /dev
tmpfs           494M     0  494M    0% /dev/shm
tmpfs           494M  6.7M  487M    2% /run
tmpfs           494M     0  494M    0% /sys/fs/cgroup
/dev/sda1       197M   75M  123M   38% /boot
  • 假如在/boot下,一個hanfeng.log日誌文件佔用很大空間,可是這個yin.log日誌文件必須在這個/boot目錄下,不能更改文件路徑,那麼就可使用軟連接來完美解決這個問題。能夠將hanfeng.log 複製到/根目錄下(大磁盤空間下)cp /boot/hanfeng.log /hanfeng.log 而後刪除/boot/hanfeng.log文件,儘快的將複製的那個日誌作個軟連接連接到/boot,ln -s /hanfeng.log /boot/hanfeng.log就能夠解決文件過大可是不能改路徑的問題。

總結

  • 命令ln(link)
  • 格式:ln【-s】 【來源文件】【目的文件】
  • -s 創建軟連接,不加-s創建硬連接。

2.22 硬鏈接文件

硬連接定義

  • 硬連接:當系統要讀取一個文件時,會先讀inode信息,而後再根據inode中的信息到塊區域將數據取出來。而硬連接是直接再創建一個inode連接到文件放置的塊區域。即創建硬連接時該文件內容沒有變化,只是增長了一個指向這個文件的inode,並不會額外佔用磁盤空間。

  • 硬連接不支持對目錄作連接,只支持對文件作連接

硬連接和軟鏈接對比

  • 硬連接
[root@localhost ~]# ln 1.txt 1_heard.txt
  • 軟連接
[root@localhost ~]# ln -s 1.txt 1_sorft.txt
  • 對比:會發現軟連接很小,硬連接很大
    • ls -i 查看inode號
    • 會發現硬連接文件和源文件使用了同一個inode號,大小相同,可以使用find命令查找到硬連接
[root@localhost ~]# ls -l
總用量 32
drwxr-xr-x. 3 root root   45 10月 26 16:11 111
-rw-r--r--. 1 root root    0 10月 26 15:54 111.12.txt
-rw-r--r--. 2 root root  391 10月 30 15:10 1_heard.txt
lrwxrwxrwx. 1 root root    5 10月 30 15:06 1_sorft.txt -> 1.txt
[root@localhost ~]# ls -i
33584735 111          33575033 1_sorft.txt  33575034 2.txt   33574987 anaconda-ks.cfg
33584737 111.12.txt   33575035 1.txt        33584734 3.txt   33575006 anaconda-ks.cfg.1
33575035 1_heard.txt  33584733 1.txt~       33584736 3.txt~  33575036 windows.txt

硬連接文件特性

  • 就是建立的文件和另一個文件是相同的inode號,這兩個文件相互爲硬連接文件。(軟連接文件是有原有的目標,它有一個真正的文件,軟連接僅僅爲一個快捷方式)
  • 再刪除源文件後,會發現==軟連接==一直閃爍,表示找不到源文件了,那這個軟連接文件就沒有用了
  • 再刪除源文件後,會發現==硬連接==,會發現正常使用,但inode會變成1
[root@localhost ~]# rm 1.txt
rm:是否刪除普通文件 "1.txt"?y
[root@localhost ~]# ls -l
總用量 28
drwxr-xr-x. 3 root root   45 10月 26 16:11 111
-rw-r--r--. 1 root root    0 10月 26 15:54 111.12.txt
-rw-r--r--. 1 root root  391 10月 30 15:10 1_heard.txt
lrwxrwxrwx. 1 root root    5 10月 30 15:06 1_sorft.txt -> 1.txt
  • 真正存數據的地方,存這個文件信息的位置在inode上
    • inode號表明着一個inode,inode是存在於文件系統中特殊的東西,這個inode會去記錄一些文件的屬性,如文件的時間、權限、位置等
[root@localhost ~]# ls -i 1_heard.txt
33575035 1_heard.txt
  • 硬連接不會佔用雙份空間,由於使用的同一個inode

硬連接的限制

  • 硬連接的限制:
  1. 目錄不能作硬連接
    [root@localhost ~]# ln 111 hf11     在硬連接指向目錄的時候,會提示錯誤
    ln: "111": 不容許將硬連接指向目錄
  2. 不能跨文件系統(跨分區),由於不一樣的文件系統有不一樣的inode,不一樣的table目錄體系。
[root@localhost ~]# df -h
文件系統        容量  已用  可用 已用% 掛載點
/dev/sda3        18G  1.1G   17G    6% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  6.7M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M  109M   88M   56% /boot
tmpfs            99M     0   99M    0% /run/user/0
[root@localhost ~]# ls -i /boot/
    71 config-3.10.0-514.el7.x86_64
    67 grub
131136 grub2
    76 initramfs-0-rescue-513f8b3950084e768a99df3a6cd3d9e6.img
    75 initramfs-3.10.0-514.el7.x86_64.img
189445 initramfs-3.10.0-514.el7.x86_64kdump.img
    74 initrd-plymouth.img
    72 symvers-3.10.0-514.el7.x86_64.gz
    70 System.map-3.10.0-514.el7.x86_64
    77 vmlinuz-0-rescue-513f8b3950084e768a99df3a6cd3d9e6
    73 vmlinuz-3.10.0-514.el7.x86_64
[root@localhost ~]# ln /boot/config-3.10.0-514.el7.x86_64 /tmp/conifg.1
ln: 沒法建立硬連接"/tmp/conifg.1" => "/boot/config-3.10.0-514.el7.x86_64": 無效的跨設備鏈接

硬連接總結

  • 硬連接文件不能跨分區建立,由於每一個分區都有各自的inode。
    • 好比、:d1分區有a文件的inode號是88,而d2分區的b文件的inode號也是88.
    • 正是由於各個分區的inode號各自爲營,若是跨分區建立硬連接文件就會致使混亂。
    • 爲了不這個問題,因此不容許跨分區建立硬連接文件。
  • 硬連接能夠刪除,由於使用了相同的inode 顯示沒法建立硬連接
相關文章
相關標籤/搜索