linux基础知识-14

一个有趣的逻辑,把一个文件保存在两个地方,但只有一份, 或者说用两个不同的文件名保存一个文件,这种思想有些反人类,但这就是linux下的硬链接。

下面是见证奇迹的时刻,老陌认真的做了这个例子,一来是巩固一下之前学习的知识,二来体验一下硬链接。



故事是这样的……

某天一个帅哥(kevin),一个美女(alice)来找老陌,他们要共同编写一本小说,想让老陌在服务器上创建两个账号,他们谁有空闲时间就登录服务器进行编写。由于是共同合作编写,所以他们不想每写一点就通过email传来传去,之后拼接整理,很麻烦。 能不能有一种方法两个人在各自的目录里编写,但对方打开自己的文件之后却是更新的。

挺晕,因为老陌头一次接触,所以换个说法:

kevin在自己的家目录里创建了story目录,里面有一个小说叫九阳神帝。 这一天kevin心血来潮写下了一段,之后没词了,保存之后出去渡假了。

alice也在自己的家目录里创建了story目录,因为和kevin共同编写,所以alice的story目录里的小说也叫九阳神帝。在kevin渡假其间alice打开九阳神帝,发现开头已经写好了,于是继续写。

这一天alice打小怪兽去了,正好kevin回来,打开九阳神帝发现alice已经写好多了。于是kevin继续写……

现在老陌懂了,在不同目录里的两个文件,好像同一个文件一样,其中一人修改,另一端也发生变化。当然,这个思维很无聊,不要上纲上线,就是为了说明硬连接的问题。

在alice和kevin的不断请求下,老陌答应了。

一、硬连接

老陌分析了一下需求,首先要添加两个用户,这还不简单,打开控制中心……

NO! No! 这样逼格太低了,怎么也得让老陌在帅哥,美女面前炫耀一翻。

(一)创建用户

#创建用户
sudo useradd -m  -s /bin/bash kevin
sudo useradd -m  -s /bin/bash alice

#设置密码
sudo passwd kevin
sudo passwd alice

(二)创建组

因为两个不同的用户要共同访问同一个文件,根据前面学习的知识,应该在组或其它人的权限上下手。由于他们二人共同合作,不想让第三方人来破坏,所以老陌选择用共同组的方式来管理文件。

##创建组
sudo groupadd story

##把alice, kevin添加到组中
sudo usermod -a -G story kevin
sudo usermod -a -G story alice

(三)构建结构

kevin,alice各自登录构建自己的目录结构。

1. kevin构建结构

#切换用户
su - kevin

#创建目录
mkdir story

#修改story目录的组所有者为:story组,并设置组所有者的权限为:rwx
chgrp story story
chmod g=rwx story

#创建小说,修改小说的组所有者为story,并设置组所有者的权限为:rw-
touch story/九阳神帝
chgrp story story/九阳神帝
chmod g=rw- story/九阳神帝

2. alice构建结构

#切换用户
su - alice

#创建目录
mkdir story

#修改story目录的组所有者为:story组,并设置组所有者的权限为:rwx
chgrp story story
chmod g=rwx story

(四)创建硬连接

目前alice并没有创建九阳神帝这个文件,因为需要把kevin的九阳神帝文件硬连接到alice的story目录中,硬连接之后表示这两个文件是同一个文件。

ln story/九阳神帝 /home/alice/story/九阳神帝

ln命令是创建链接的命令,比如快捷方式(软链接)就是通过这个命令创建的。类似于cp命令,把一个文件复制到另一个地方,但ln是在另一个地方创建的链接,而不是文件的副本。

(五)测试

这一天kevin心血来潮写下了一段,之后没词了,保存之后出去渡假了。

一阵剧痛,老陌醒来发现这是一个陌生的地方……

看看自己的双手满是鲜血,衣服和之前也不一样,莫非穿越了?

在kevin渡假其间alice打开九阳神帝,发现开头已经写好了,于是继续写……

见证奇迹的时刻来了:

alice登录之后发现九阳神帝中已经有写好的内容了。

二、硬链接详述

当kevin创建/home/kevin/story/九阳神帝时,就包括了一个dentry,inode,data,当用ln命令创建一个硬连接后,该文件还是只有一个inode和data,但有两个dentry与之相连。

结构如下:

可以看出一个文件两个文件名。 此时用ls -l查看一下:

[email protected]:~$ ls -l /home/alice/story/九阳神帝
-rw-rw-r-- 2 kevin story 152 7月  17 08:35 /home/alice/story/九阳神帝

我们发现链接数是2,如果修改文件权限呢?看看另一端是不是发生变化:

首先查看两个文件的权限相同,之后给其他人一个w权限,再查看发现另一端也变化了,因为他们是同一个inode。

如果删除该文件是什么效果呢?

[email protected]:~/story$ rm 九阳神帝
[email protected]:~/story$ ls /home/kevin/story/
九阳神帝

alice删除了自己的九阳神帝,但我们发现kevin目录中的九阳神帝还存在。再查看一下链接点:

-rw-rw-rw- 1 kevin story 152 7月  17 08:35 九阳神帝

发现刚才是2,现在变成1了,可以看出rm删除文件时,并不是把数据清空,而是脱链,当inode连接数是0了,表示这个文件被删除了。

三、软链接

软链接就是一个快捷方式,有windows经验的人都能理解。软链接本身是一个文件,但这个文件不存放数据,存放一个链接,指向其它文件。

创建的方法和硬链接类似:

发现就是多了一个选项 -s 表示这是软链接。

通过 ls-l 我们发现软链接的文件类型是l,这说明软链接不是一个常规文件,而是一个符号链接文件。符号链接文件有自己的dentry,有自己的inode,但data域中存放的是另一个文件名,从而实现了链接。当linux访问符号链接文件时会自动解析目标文件。

注意事项

软链接有几个硬连接不会出现的问题:

  • 空链接:目标丢失,连接失效。
  • 递归链接:即a -> b, b -> a

我们发现linux在尝试多层后,认为这是递归链接,警告退出。

四、软硬链接比较

硬链接 软链接
目录之间不能用硬链接 软链接可以关联到目录
硬链接没有原始和复制的概念 软链接有引用和被引用的概念,删除目标则成为空链接
硬链接必须在同一个分区内 软链接可以在不同的分区进行链接
chroot的目录间可共享硬链接 软链接不能引用chroot目录外的文件

对于chroot这点老陌不懂,没有见过,先记下,等以后学到chroot再研究。

原文地址:https://www.cnblogs.com/myccloves/p/9322739.html

时间: 2024-10-16 06:50:42

linux基础知识-14的相关文章

Linux基础知识题解答(五)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (1)155729 -rw-r--r--.  1 root root   35 Oct 28 2011  oldboy 请解析上面的每一列内容 文件inode号,文件访问权限,硬链接数,文件所属用户,文件所属组,文件最后修改时间,文件名 (2)描述下硬链接和软连接的区别 1.硬链接原文件/链接文件共用

linux基础知识题解答(九)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (Linux用户权限-磁盘-网络) (1)列出 IPv4 的网络地址的分类,各分类容纳的网络数和主机数,以及前三类中的私有地址. A类:1~126,私有地址10.0.0.0~10.255.255.255 B类:128~191,私有地址172.16.0.0~172.31.255.255 C类:192~2

linux基础知识的总结

例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结,由于水平有限.难免有疏忽或者不准确的地方.希望大家可以直接指出来,我会及时改正.一切为了知识的传播.^_^ ? *********************************************************************************************

linux基础知识---用户

用户和组 一.用户和组的概念 随着计算机对多用户需求越来越多,才引入了用户和组的概念.所谓的用户就是操作系统用来标识登陆系统的.就是用户和组是实现计算机资源分配的核心要素.组:是具有相同计算机资源(主要指权限)用户的一个集合. 在计算机内核中,用户和组都是一个数字,我们称之为UID和GID.UID和GID在系统中具有唯一性.实现这个过程进行名称解析才能完成,在Linux系统中使用glib库中的系统调用来完成. 二.用户识别 识别用户通过3A(Authentication,Authorizatio

Linux基础知识题解答(三)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. 1.  存放系统的二进制命令的目录是(/bin) 超级用户二进制命令的目录是(/sbin) /dev指的是什么(设备文件目录) /etc指的是什么(配置文件目录) /mnt指的是什么(文件挂载目录) /proc指的是什么(内存的映射,是系统内核和进程的虚拟文件目录) 2.  开机自动挂载设备的文件是(

Linux基础知识题解答(六)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (1)怎样查看文件或目录的属性,给出命令. ls -l 或者 ll (2)描述硬链接和软链接的区别 1.硬链接原文件/链接文件共用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件:2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写

Linux基础知识之挂载详解(mount,umount及开机自动挂载)

Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点",解除此关联关系的过程称之为"卸载" 1.挂载:根文件系统外通过关联至根文件系统上的某个目录来实现访问

老男孩26期运维班linux基础知识大比拼即将开始

老男孩26期运维班linux基础知识大比拼 1 比赛说明 比赛时间:2015年11月12日下午15点 比赛地点:老男孩教育教室二 比赛人员:老男孩教育26期全体同学 奖项:团体奖(按组奖励共1-9组): 一等奖奖励300元人民币或每人老男孩老师新书一本和老师合影签名. 二等奖奖励200元人民币 三等奖奖励100元人民币 个人奖:3名,赠老男孩新书一本 惩罚:没有得奖的组,或者组内无人得奖的组,罚100元或派选代表表演一个节目(唱歌或其它) 比赛规则当场宣布: 主评委:老男孩老师,张导 辅助评委:

(转)Linux基础知识学习

Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过修改配置文件来完成. 1.1.Linux磁盘分区 Linux可以将磁盘分为多个分区,每个分区可以被当做一个独立的磁盘使用,磁盘类型:主分区.扩展分区.逻辑分区. 主分区标记为活动,用于操作系统的引导,一块磁盘最多划分4个主分区,主分区存放操作系统的文件或用户数据. 扩展分区:主分区小于4个时才可以划