您的位置:首页 > 运维架构 > Linux

linux 硬链接与软连接

2013-09-09 00:00 471 查看


[b]什么是硬链接,什么是软连接


硬链接特征:

硬链接是有着相同inode号仅文件名不同的文件,因此硬链接存在以下几点特性

*文件有相同的inode及data block

*只能对以存在的文件进行创建

*不能交叉文件系统进行硬链接的创建

*不能对目录进行创建,只能对文件进行创建

*删除一个硬链接文件不影响其他相同inode 号的文件

测试

1. 有相同的inode及 data block

[root@misw12c oracle]
# link test.dat test.dat.link ##创建硬链接

[root@misw12c oracle]
# stat test.dat ##查看源文件

File
:
`
test.dat
'
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 12 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-09 22:28:55.959255998 +0800
Modify: 2013-09-09 23:43:41.834592083 +0800
Change: 2013-09-09 23:44:43.259595001 +0800
[root@misw12c oracle]# stat test.dat.link ##查看硬链接
File: `test.dat.link'

Size
:
6 Blocks
:
8 IO Block
:
4096 regular file

Device
:
803h
/
2051d Inode
:
12 Links
:
2

Access
: (
0644
/
-rw
-r
--r
--) Uid
: (
0
/ root) Gid
: (
0
/ root)

Access
:
2013
-
09
-
09
22
:
28
:
55.
959255998
+
0800

Modify
:
2013
-
09
-
09
23
:
43
:
41.
834592083
+
0800

Change
:
2013
-
09
-
09
23
:
44
:
43.
259595001
+
0800

[root@misw12c oracle]
#

[root@misw12c oracle]
# echo ''>test.dat ##清空表

[root@misw12c oracle]
# stat test.dat ##源文件

File
:
`
test.dat
'
Size: 1 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 12 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-09 22:28:55.959255998 +0800
Modify: 2013-09-09 23:45:39.880602457 +0800
Change: 2013-09-09 23:45:39.880602457 +0800
[root@misw12c oracle]# stat test.dat.link ##硬链接文件
File: `test.dat.link'

Size
:
1 Blocks
:
8 IO Block
:
4096 regular file

Device
:
803h
/
2051d Inode
:
12 Links
:
2

Access
: (
0644
/
-rw
-r
--r
--) Uid
: (
0
/ root) Gid
: (
0
/ root)

Access
:
2013
-
09
-
09
22
:
28
:
55.
959255998
+
0800

Modify
:
2013
-
09
-
09
23
:
45
:
39.
880602457
+
0800

Change
:
2013
-
09
-
09
23
:
45
:
39.
880602457
+
0800

2.只能对以存在的文件进行创建

[root@misw12c oracle]
# link test.d test.da

link
: cannot create link
`
test.da
' to `test.d'
: No such file
or directory

3.不能交叉文件系统进行硬链接的创建

[root@misw12c oracle]
# link test.dat /tmp/test.dat

link
: cannot create link
`
/tmp
/
test.dat
' to `test.dat'
: Invalid cross
-device link

4.不能对目录进行创建,只能对文件进行创建

[root@misw12c oracle]
# file product

product
: directory

[root@misw12c oracle]
# link product /tmp/product

link
: cannot create link
`
/tmp
/product
' to `product'
: Invalid cross
-device link

5.删除一个硬链接文件不影响其他相同inode 号的文件

[root@misw12c oracle]
# file test.dat.link

test.dat.link
: ASCII text

[root@misw12c oracle]
# stat test.dat.link

File
:
`
test.dat.link
'
Size: 16 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 12 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-09 23:51:20.864610649 +0800
Modify: 2013-09-09 23:51:11.936609085 +0800
Change: 2013-09-09 23:51:11.936609085 +0800
[root@misw12c oracle]# stat test.dat
File: `test.dat'

Size
:
16 Blocks
:
8 IO Block
:
4096 regular file

Device
:
803h
/
2051d Inode
:
12 Links
:
2

Access
: (
0644
/
-rw
-r
--r
--) Uid
: (
0
/ root) Gid
: (
0
/ root)

Access
:
2013
-
09
-
09
23
:
51
:
20.
864610649
+
0800

Modify
:
2013
-
09
-
09
23
:
51
:
11.
936609085
+
0800

Change
:
2013
-
09
-
09
23
:
51
:
11.
936609085
+
0800

[root@misw12c oracle]
# cat test.dat.link

aaaaaaaaaaaaaaa

[root@misw12c oracle]
# cat test.dat

aaaaaaaaaaaaaaa

[root@misw12c oracle]
# rm -f test.dat.link

[root@misw12c oracle]
# cat test.dat

aaaaaaaaaaaaaaa

[root@misw12c oracle]
#

软连接特征:

软连接数据块中存放的内容是另一个文件路径名的指向,软连接有自己的inode号以及数据块

*软连接有自己的文件属性及权限等;

*可对不存在的文件和目录创建软连接

*软连接可交叉文件系统

*软连接可对文件或目录创建

*创建软连接时,链接计数i_nlink 不会增加;

*删除软连接不影响被指向的文件,但若被指向的原文件被删除,则该软连接为死链接

测试

1.软连接有自己的文件属性及权限等(ps:经过测试软连接虽然有自己的权限,但无法变更权限,而源文件变更权限不对软连接造成影响)

[root@misw12c oracle]
# ls -al | grep sort_link

-rw
-r
--r
--.
1 root root
8 Sep
10 00
:
10 sort_link

[root@misw12c oracle]
# ls -s sort_link sort_link.link

ls
: cannot access sort_link.link
: No such file
or directory

4 sort_link

[root@misw12c oracle]
# ln -s sort_link sort_link.link

[root@misw12c oracle]
# ls -al | grep sort

-rw
-r
--r
--.
1 root root
8 Sep
10 00
:
10 sort_link

lrwxrwxrwx.
1 root root
9 Sep
10 00
:
10 sort_link.link
-
> sort_link

[root@misw12c oracle]
# chmod 664 sort_link

[root@misw12c oracle]
# ls -l | grep sort

-rw
-rw
-r
--.
1 root root
8 Sep
10 00
:
10 sort_link

lrwxrwxrwx.
1 root root
9 Sep
10 00
:
10 sort_link.link
-
> sort_link

2.可对不存在的文件和目录创建软连接

[root@misw12c oracle]
# ls -al ##查看目录

total
40

drwxrwxr
-x.
6 oracle oinstall
4096 Sep
10 00
:
10 .

dr
-xr
-xr
-x.
28 root root
4096 Sep
9
22
:
36 ..

drwxrwxr
-x.
2 oracle oinstall
16384 Aug
16
21
:
34 lost
+found

drwxrwx
--
-.
5 oracle oinstall
4096 Aug
17
22
:
03 oraInventory

drwxrwxr
-x.
10 oracle oinstall
4096 Aug
17
22
:
08 product

-rw
--w
--w
-.
1 root root
8 Sep
10 00
:
10 sort_link

lrwxrwxrwx.
1 root root
9 Sep
10 00
:
10 sort_link.link
-
> sort_link

drwxrwxr
-x.
6 oracle oinstall
4096 Aug
22
15
:
54 src

[root@misw12c oracle]
# ln -s not_found not.link ##创建不存在的文件软连接

[root@misw12c oracle]
# ls -al | grep not ##创建成功

lrwxrwxrwx.
1 root root
9 Sep
10 00
:
18
not.link
-
> not_found

[root@misw12c oracle]
# cat not.link ##无法读取文件

cat
:
not.link
: No such file
or directory

[root@misw12c oracle]
# stat not.link ##使用stat 可以查看文件属性

File
:
`
not.link
' -> `not_found'

Size
:
9 Blocks
:
0 IO Block
:
4096 symbolic link

Device
:
803h
/
2051d Inode
:
14 Links
:
1

Access
: (
0777
/lrwxrwxrwx) Uid
: (
0
/ root) Gid
: (
0
/ root)

Access
:
2013
-
09
-
10 00
:
18
:
22.
293675539
+
0800

Modify
:
2013
-
09
-
10 00
:
18
:
19.
142679586
+
0800

Change
:
2013
-
09
-
10 00
:
18
:
19.
142679586
+
0800

3.软连接可交叉文件系统

[root@misw12c oracle]
# pwd

/oracle

[root@misw12c oracle]
# ln -s sort_link /tmp/sort_link.link

[root@misw12c oracle]
# ls -l /tmp | grep sort

lrwxrwxrwx.
1 root root
9 Sep
10 00
:
20 sort_link.link
-
> sort_link

[root@misw12c oracle]
# ls -l | grep sort

-rw
--w
--w
-.
1 root root
8 Sep
10 00
:
10 sort_link

lrwxrwxrwx.
1 root root
9 Sep
10 00
:
10 sort_link.link
-
> sort_link

4.软连接可对文件或目录创建

[root@misw12c oracle]
# file product

product
: directory

[root@misw12c oracle]
# file sort_link

sort_link
: ASCII text

[root@misw12c oracle]
# ln -s product /tmp/product.link

[root@misw12c oracle]
# ls -l /tmp | grep product

lrwxrwxrwx.
1 root root
7 Sep
10 00
:
21 product.link
-
> product

5.创建软连接时,链接计数i_nlink 不会增加;

[root@misw12c oracle]
# echo 'aaaa'>link_s #创建文件

[root@misw12c oracle]
# stat link_s

File
:
`link_s
'
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-10 00:24:06.530732057 +0800
Modify: 2013-09-10 00:24:06.530732057 +0800
Change: 2013-09-10 00:24:06.530732057 +0800
[root@misw12c oracle]# ln -s link_s link_s.link ##创建软连接
[root@misw12c oracle]# stat link_s ##查看(links 为1 ,证明软连接不增加links数)
File: `link_s'

Size
:
5 Blocks
:
8  
3ff0
; IO Block
:
4096 regular file

Device
:
803h
/
2051d Inode
:
12 Links
:
1

Access
: (
0644
/
-rw
-r
--r
--) Uid
: (
0
/ root) Gid
: (
0
/ root)

Access
:
2013
-
09
-
10 00
:
24
:
06.
530732057
+
0800

Modify
:
2013
-
09
-
10 00
:
24
:
06.
530732057
+
0800

Change
:
2013
-
09
-
10 00
:
24
:
06.
530732057
+
0800

[root@misw12c oracle]
# link link_s link_k ##创建硬链接

[root@misw12c oracle]
# stat link_s ##查看(links 为2 ,说明硬链接增加links 数)

File
:
`link_s
'
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 12 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-10 00:24:06.530732057 +0800
Modify: 2013-09-10 00:24:06.530732057 +0800
Change: 2013-09-10 00:24:39.847681150 +0800

6.删除软连接不影响被指向的文件,但若被指向的原文件被删除,则该软连接为死链接

[root@misw12c oracle]
# ls -al | grep link

lrwxrwxrwx.
1 root root
6 Sep
10 00
:
26 link_a
-
> link_s

-rw
-r
--r
--.
1 root root
5 Sep
10 00
:
24 link_s

[root@misw12c oracle]
# stat link_a ##文件属性

File
:
`link_a
' -> `link_s'

Size
:
6 Blocks
:
0 IO Block
:
4096 symbolic link

Device
:
803h
/
2051d Inode
:
14 Links
:
1

Access
: (
0777
/lrwxrwxrwx) Uid
: (
0
/ root) Gid
: (
0
/ root)

Access
:
2013
-
09
-
10 00
:
27
:
20.
718675016
+
0800

Modify
:
2013
-
09
-
10 00
:
26
:
58.
327686892
+
0800

Change
:
2013
-
09
-
10 00
:
26
:
58.
327686892
+
0800

[root@misw12c oracle]
# stat link_s ##软连接文件属性

File
:
`link_s
'
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 12 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-10 00:24:06.530732057 +0800
Modify: 2013-09-10 00:24:06.530732057 +0800
Change: 2013-09-10 00:27:05.371709433 +0800
[root@misw12c oracle]# cat link_a
aaaa
[root@misw12c oracle]# cat link_s
aaaa
[root@misw12c oracle]# rm -f link_s ##删除源文件
[root@misw12c oracle]# ls -l | grep link ##软连接还存在但已经是死链接
lrwxrwxrwx. 1 root root 6 Sep 10 00:26 link_a -> link_s
[root@misw12c oracle]# cat link_a ##cat软连接无法读取
cat: link_a: No such file or directory
[root@misw12c oracle]# echo 'bbbbb
'>link_s ##重新创建link_s 源文件
[root@misw12c oracle]# cat link_a ##文件内容改变
bbbbb
[root@misw12c oracle]#

使用find 来查找软连接与硬链接

1.查找路径在/home下的文件data.txt 的软连接

find
/home
-lname data.txt

2.查找路径 /home 有相同inode 的所有硬链接

find
/home
-samefile
/home
/old.file

3.列出/home下所有软连接文件

find
/home
-type l
-
ls

查看系统的inode值

[root@misw12c oracle]
# dumpe2fs -h /dev/sda1

dumpe2fs
1.
41.
12 (
17
-May
-
2010)

Filesystem volume name
:
<none
>

Last mounted on
:
/boot

Filesystem UUID
: f81f7297
-
1b91
-
4f15
-acaa
-
5668e276883a

Filesystem magic number
: 0xEF53

Filesystem revision
#: 1 (dynamic)

Filesystem features
: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize

Filesystem flags
: signed_directory_hash

Default mount options
: user_xattr acl

Filesystem state
: clean

Errors behavior
: Continue

Filesystem OS type
: Linux

Inode count
:
51200

Block count
:
204800

Reserved block count
:
10240

Free blocks
:
147096

Free inodes
:
51156

First block
:
1

Block size
:
1024

Fragment size
:
1024

Reserved GDT blocks
:
256

Blocks per g
3ff0
roup
:
8192

Fragments per group
:
8192

Inodes per group
:
2048

Inode blocks per group
:
256

Flex block group size
:
16

Filesystem created
: Fri Aug
16
21
:
34
:
07
2013

Last mount time
: Mon Sep
9
22
:
36
:
55
2013

Last write time
: Mon Sep
9
22
:
36
:
55
2013

Mount count
:
7

Maximum mount count
:
-
1

Last checked
: Fri Aug
16
21
:
34
:
07
2013

Check interval
:
0 (
<none
>)

Lifetime writes
:
55 MB

Reserved blocks uid
:
0 (user root)

Reserved blocks gid
:
0 (group root)

First inode
:
11

Inode size
:
128

Journal inode
:
8

Default directory hash
: half_md4

Directory Hash Seed
: f0e50be4
-
5870
-
404f
-
886e
-
8303a0e5b807

Journal backup
: inode blocks

Journal features
: (none)

Journal size
:
4096k

Journal length
:
4096

Journal sequence
: 0x0000002e

Journal start
:
0

总结:

相关命令:

ln,link,stat,file,find

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  硬链接 软连接