Link目录是Linux文件系统中的一种特殊类型的文件,它提供了一种方法来链接不同目录中的文件,从而方便用户进行文件的访问和管理。本文将介绍Link目录的概念、类型、创建以及应用等方面,希望对Linux系统的初学者和使用者有所帮助。
在德江等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都做网站 网站设计制作定制网站开发,公司网站建设,企业网站建设,品牌网站设计,网络营销推广,外贸营销网站建设,德江网站建设费用合理。
1. Link目录的概念
Link目录是Linux文件系统中的一种特殊类型的文件,它是一个空文件,但它有一个特殊的属性,可以指向其他文件或目录。Link目录包含了对其他文件或目录的链接,用户可以通过Link目录访问被链接的文件或目录。
相对于物理文件,Link目录是一种虚拟的文件,它的存在只是为了方便用户对其他文件或目录的链接和访问。Link目录在Linux系统中有两种主要的类型:硬链接和软链接。
2. Link目录的类型
2.1 硬链接
硬链接是Linux中Link目录的一种类型,它是通过在不同目录下创建硬链接文件来实现彼此之间的链接的。硬链接文件与原文件相互独立,但它们具有相同的inode节点号,可以像原始文件一样进行读写操作。在Linux系统中,一个物理文件可以有多个硬链接文件,它们之间的关系是相互独立的。
硬链接的使用方法如下:
ln 源文件名 硬链接文件名
2.2 软链接
软链接是Linux中Link目录的另一种类型,它是通过在一个目录下创建一个指向另一个目录或文件的虚拟文件来实现链接的。软链接文件和原文件之间相互独立,它是一个真实的文件名,但与原文件通过inode节点号链接,可以实现对资源文件的访问。
软链接的使用方法如下:
ln -s 源文件名 软链接名
3. Link目录的创建
创建Link目录只需要使用linux系统自带的命令即可,命令格式如下:
ln [-s] 源文件路径 目标文件路径
其中,-s代表创建符号链接,不加-s表示创建硬链接。
4. Link目录的应用
Link目录是Linux文件系统中非常常用的一种特殊目录类型,它在文件管理和维护中有着非常广泛的应用。具体应用如下:
4.1 共享库管理
在Linux系统中,一些重要的共享库文件被保存在特定的目录中,但是在运行时,在系统不同目录下的应用程序都需要读取和使用这些共享库文件。使用Link目录可以将共享库文件链接到各个应用程序的工作目录下,让应用程序能够直接访问它们,简化了共享库的管理。
4.2 软件配置管理
Link目录还可以用于软件配置文件的管理,通过在不同目录下创建配置文件的软链接,软件就能够在不同工作目录下读取或保存它们。这样,软件的配置文件就可以在不同的工作目录中复用,便于软件的管理和维护。
4.3 多用户环境下的资源共享
在多个用户同时使用Linux系统时,Link目录非常方便用于维护共享资源的访问。比如说,在一个文件服务器上,共享文件可以通过Link目录的硬链接方法分配给多个用户使用,这样,每个用户就可以方便地访问它们,同时避免了不必要的文件拷贝操作和文件重命名操作。
Link目录是Linux文件系统中的一种非常实用的目录类型,它方便了用户对不同目录中的文件进行管理和访问。同时,硬链接和软链接两种不同类型的Link目录都各自有着重要的应用场景。希望本文能够帮助读者更好的了解Link目录的相关概念和应用。
成都网站建设公司-创新互联为您提供网站建设、网站制作、网页设计及定制高端网站建设服务!
软链接是linux中一个常用命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接。
具体用法是: ln -s 源文件 目标文件
当 我们需要在不同的目录,用到相同的文件迹谨散时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在其它的 目录下用ln命令链接(link)就可以,不必重复的占用磁盘空间。
例如:
这样我们就对/usr/bin目录下的mysql命令创建了软连接 。
创建软连接
ln -s
例如:当前路径创建test引向/var/www/test 文件夹
创建/var/test 引向/var/www/test 文件夹
删除软连接
和删除普通的文件是一样的,删除都是使用姿氏 rm 来进行操作
例:
删除test
修改软链接
ln –snf
这将会修晌乱改原有的链接地址为新的地址
例如:
创建一个软链接
修改指向新的路径
常用参数:
-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
-V METHOD : 指定备份的方式
help : 显示辅助说明
最近在使用 fs.symlink 实现软链时,发现文档里面写的是:fs.symlink(target, path);然而 man ln 的时候显示的是:ln source_file target_file;而且,require 模块的时候其实还会处理软链但是处理的又不是想象中那样。于是,我彻底被相关东西绕晕。这篇文章算是我的学习笔记,希望对你有帮助。
inode
我们首先来看看 Linux 系统里面的一个重要概念:inode。
我们知道,文件存储在硬盘上,硬盘存储的最小单位是扇区(sector,每个扇区 512 B)。而操作系统读取文件时,按块读取(连续的多个扇区),也就是说文件存取的最小单位是块(block,块通常是 4 KB)。
除了文件数据,我们还必须存储文件的元信息(如:文件大小、文件创建者、文件数据的块位置、文件读/写/执行权限、文件时间戳等等),这种存储文件元信息的结构就称为 inode。我们可以使用 stat 命令查看文件的 inode 信息。在 Node.js 中,调用 fs.stat后返回的结果盯圆中也有相关信息
每个 inode 都有一个唯一的号码标志,Linux 系统内部使用 inode 的号码来识别文件,并不使用文件名。我们打开一个文件时,系统首先找到文件名对应的 inode 号码,然后通过 inode 号码获取 inode 信息,最后根据 inode 信息中的文件数据所在的 block 读出数据。
实际上,在 Linux 系统中,目录也是一种文件。目录文件包含一系列目录项,每个目录项由两部分组成:所包含文件的文件名,以及该文件名对应的 inode 号码。我们可以使用 ls -i 来列出目录中的文件以及它们的 inode 号码。这其实也解释了仅更改目录的读权限,并不能实现读取目录下所有文件内容的原因,通常需要 chmod -R 来进行递归更改。
总结下:硬盘存取的最小单位是扇区,文件存取的最小单位是块(连续的扇区)存储文件元信息(文件大小、创建者、块位置、时间戳、权限等非数据信息)的结构称为 inode每个 inode 拥有一个唯一号码,系统内部通过它来识别文件目录也是一种文件,其内容包含一系列目录项(每个目录项由文件的文件名和文件对应的 inode 号码组成)
硬链接和软链接
硬链接
一般情况,一个文件名“唯一”对应一个 inode。但是,Linux 允许多个文件名都指向同一个 inode。这表示我们可以使用不同的文件名访问同样的内容;对文件内容进行修改将“反映”到所有文件;删除一个文件不影响另一个文件的访问 。这种机制就被称磨冲为“硬链接”。
我们可以使用 ln source target 来建立硬链接(注意:瞎则歼source 是本身已存在的文件,target 是将要建立的链接)。
形象化的表示为下图:
需要注意的是,只能给文件建立硬链接,而不能给目录建立硬链接。另外,source 文件必须存在,否则将会报错。
删除一个文件为什么不影响另一个文件的访问呢?实际上,文件 inode 中还有一个链接数的信息,每多一个文件指向这个 inode,该数字就会加 1,每少一个文件指向这个 inode,该数字就会减 1,当值减到 0,系统就自动回收 inode 及其对应的 block 区域。很像是一种引用计数的垃圾回收机制。
当我们对某个文件建立了硬链接后,对应的 inode 的链接数会是 2(原文件本身已经有一个指向),当删除一个文件时,链接数变成 1,并没达到回收的条件,所以我们还是可以访问文件。
软链接
软链接类似于 Windows 中的”快捷方式“。两个文件虽然 inode 号码不一样,但是文件 A 内部会指向文件 B 的 inode。当我们读取文件 A 时,系统就自动导向文件 B,文件 A 就是文件 B 的软链接(或者叫符号链接)。这表示我们同样可以使用不同的文件名访问同样的内容;对文件内容修改将”反映“到所有文件。但是当我们删除掉源文件 B 时,再访问文件 A 时会报错 “No such file or directory”。
我们可以使用 ln -s source target 来建立软链接(注意:表示让 target “指向” source)。
形象化的表示为下图:
和硬链接不同,我们可以给目录建立软链接,这带来许多便利。比如我们有一个模块有很多个版本,分别存放在 1.0.0、2.0.0 这样的目录下面,当更新模块时,只需要建立一个软链接指向最新版本号的目录就能很方便的切换版本。
另外,建立软链接时,source 是可以不存在的。这很像一种”运行时“机制,而不是“编译时”机制,建立的时候不报错,等执行的时候发现找不到就报错了。
总结使用 ln source target 建立硬链接;使用 ln -s source target 建立软链接硬链接不会创建额外 inode,和源文件共用同一个 inode;软链接会创建额外一个文件(额外 inode),指向源文件的 inode建立硬链接时,source 必须存在且只能是文件;建立软链接时,source 可以不存在而且可以是目录删除源文件不会影响硬链接文件的访问(因为 inode 还在);删除源文件会影响软链接文件的访问(因为指向的 inode 已经不存在了)对于已经建立的同名链接,不能再次建立,除非删掉或者使用 -f 参数
关于软链接的补充
上面的例子 ln -s file file-soft 给我们的感觉像是 file-soft 是“凭空”出现的。当我们跨目录来创建软链接时,可能会“幻想”这样的命令也是可以生效的:ln -s ~/development/mod ~/production/dir-not-exits/mod。
这里并没有 ~/production/dir-not-exits/ 这个目录,而软链接本质上是一个新的“文件”,所以,我们不可能正确建立软链接(会报错说 “no such file or directory”)。
如果我们先通过 mkdir 建立好目录 ~/production/dir-not-exits/,再进行软链接,即可达到预期效果。
fs.symlink
在 Node.js 中,我们可以使用方法 fs.symink(target, path) 建立软链接(符号链接),没有直接的方法建立硬链接(就算通过子进程的方式直接指向 shell 命令也不能跨平台)。
如果是对目录建立链接,请总是传递第三个参数 dir(虽然第三个参数只在 Windows 下生效,这可以保证代码跨平台):fs.symlink(target, path, ‘dir’)。
为啥这个接口的参数会是 target 和 path。实际上这是一个 Linux 的 API,symlink(target, linkpath)。它是这样描述的:建立一个名为 linkpath 的符号链接并且含有内容 target。其实就是让 linkpath 指向 target,和 ln -s source target 功能一样,让 target 指向 source。
是不是有点晕?其实我们只需要明白 ln -s 和 fs.symlink 后面传递的两个参数顺序是一致的,只是叫法不一样,使用起来也就没那么纠结了:
require
在 Node.js 中,我们经常通过 require 来引用模块。非常有趣的是,require 引用模块时,会“考虑”符号链接,但是却使用模块的真实路径作为 __filename、__dirname,而不是符号链接的路径。
考虑下面的目录结构:
以及下面的文件内容:
执行 node index.js 后输出是下面这样:
我们发现,index.js 可以成功的 require(‘dep1’)。这很好啊,这让我们调试本地开发中的 npm 模块很方便。我们只需要去 require 模块的文件所在的 node_modules 下面建立一个符号链接就行了。
但是在模块 dep1 中,__dirname、__filename 都变成了模块实际的路径,更要命的是模块查找路径 module.paths 也变成了从实际路径开始查找。
这会带来什么问题?
再考虑下面的目录结构:
以及下面的文件内容:
当我们再执行 node index.js 时,输出是下面这样:
发现了吗?dep1 根本就 require 不到 dep2,因为 dep2 不在它的查找路径里面!
关于这个问题,github 上有一个冗长的 issue 在讨论。问题解决起来确实很麻烦,而且会 break 掉一大堆已有功能,所以,最终的结论是在找到更好的方法前给 Node.js v6 增加了一个 –preserve-symlinks 选项来禁止这种 require 的行为,而是使用全新的 require 逻辑。有兴趣和闲情的可以去围观:
至于全新的 require 逻辑会不会有新的坑,在没有具体实践前,我也不知道。
那我们上面的情况有办法解决吗?其实也有,那就是将目录结构调整成下面这样,从而让 dep2 能在 dep1 的查找路径里面:
参考链接
回答
java服务端
分布式服务架构
java并发编程
JavaScript生态体系
大数据与人工智能
数据库
服务器运维
全文搜索
W3C&前端开发
项目构建管理
php
编程语言
常用软件
软件测试
java教程
freemarker教程
ActiveMQ教程
RabbitMQ 教程
kafka教程
spring教程
Spring Batch教程
Spring Boot教程
Spring MVC教程
httpclient 教程
Netty教程
shiro教程
MyBatis 教程
Hibernate教程
JPA教程
OAuth 2.0教程
activiti工作流教程
Quartz教程
Guava教程
Kotlin教程
Apache Commons教程
WebSocket教程
POI教程
Struts2教程
HTTP教程
TCP/IP教程
YAML教程
Web Services教程
Memcached教程
JFinal教程
jsp&servlet教程
jstl el 教程
oup教程
ON教程
tomcat教程
JFreeChart教程
XStream教程
Thymeleaf教程
Groovy教程
Log4j教程
JasperReports教程
正则表达式
i18n 国际化
F教程
设计模式
JAVA GUI教程
JOGL教程
PDFBox教程
相关问答
更多
LINUX LN命令 怎么操作
最直接的方式就是在终端中 man ln然后就是详细说明。 ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件。 使用方式 : ln source dist,其中 option 的格式为 : ln source dist 是产生一个连结(dist)…
linux中的ln命令如何使用?举2个具体例子!谢谢!
ln命令用来建立链接文件 命令格式:ln 源文件或目录 链接名或目录 常用选项: -s 建立符号链接 -f 强行建立链接 -i 交互式建立链接 例:要为当前目录下的file文件建立一个硬链接,名为/home/lbt/doc/file/,可用如下命令: ln file /home/lbt/doc/file 建立名为 /home/lbt/doc/file1 的符号链接: ln -s file /home/lbt/doc/file1
创建符号链接以供其他Linux实例使用(Creating a symbolic link for use by another Linux instance)
符号链接时应使用相对路径,例如 cd /home/paul/target/rootfs/etc/init.d ln -s mndns ../rc0.d/K16mdns You should use relative paths when symlinking, e.g. cd /home/paul/target/rootfs/etc/init.d ln -s mndns ../rc0.d/K16mdns
Unix中的硬链接和符号链接(Hard link and Symbolic links in Unix)
是的,没有:-) 在UNIX中,文件的内容与该文件的目录条目不同。 您可以有多个目录项指向相同的内容(查找inode以获取有关这个工作原理的描述),这里有一个棘手的问题: 所有这些目录条目都是相同的。 尽管可能先创建了一个,但没有什么特别的。 如果删除它,内容不会消失,只是目录条目。 一旦inode有零个目录项指向它,内容就会消失(并且所有进程都关闭该文件 – 我之前尝试清除删除日志文件的磁盘空间以找到该文件,因为进程仍然有文件打开,即使没有目录条目指向它们,也不会恢复文件内容)。 这是硬链接。 …
linux mysql 启动问题
你在 ln -s /in/mysql /usr/local/mysql 看看
Proguard – 删除日志roboguice.util.Ln(Proguard – removing logs roboguice.util.Ln)
您对roboguice.util.Ln配置看起来是正确的。 但是,选项-assumenosideeffects仅在启用优化时生效。 在Android构建中,这意味着:在发布模式下,在project.properties针对Ant的共享配置proguard-android-optimize.txt ,或者针对Gradle使用build.gradle 。 Your configuration for roboguice.util.Ln looks correct. However, the optio…
linux的根目录下面都包含什么目录
linux根目录下各文件夹的作用 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /in 系统管理命令,这里存放的是系统管理员使用的管理程序 /tmp 公用的临时文件存储点 /root 系统管理员的主目录(呵呵,特权阶级) /mnt …
在Linux上编译驱动程序问题,怎么解决
可以用ln -s命令创建一个软连接,也就是快捷方式 它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。 当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。 例如:ln -s /bin/less /usr/local/bin/less -s 是代号(symbol…
最新问答
更多
我在哪里可以找到Visual Studio 2023中的Microsoft.TeamFoundation.Build.Client?(Where can I find Microsoft.TeamFoundation.Build.Client in Visual Studio 2023?)
Microsoft.TeamFoundation.Build.Client.dll仍与VS 2023一起发布。对于2023版本,我们已从GAC中删除了客户端OM DLL。 在RC版本中,您可以在c:\ program files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TeamFoundation \ Team Explorer中找到该DLL。 这是一个不起眼的地方。 T…
为什么选择计数明显不能在yii中工作?(Why is select count distinct not working in yii?)
$count_participants = BridgeMeeting::Model()->with(‘idUserRegistry’)->count(array( ‘condition’ => ‘id_meeting=:id_meeting’, ‘select’ => ‘id_user_registry’, ‘distinct’ => true, ‘params’ => array( “:id_meeting” => $data->id_meeti…
无法将参数传递给SAS宏(Fail to Pass Parameter to SAS Macro)
您无法在宏调用中引用数据步变量的值。 因此,在您的宏调用中,值VAR_NAME只是作为要在其生成的PROC中使用的变量名称传递给宏。 你不能在彼此之间嵌套步骤。 当宏调用执行时,它会生成SAS代码,然后由SAS编译和执行。 当SAS看到PROC或DATA步骤启动时,它会立即停止编译当前步骤。 因此,当SAS看到宏调用生成的PROC语句时,您的数据步骤将具有未闭合的DO循环。 您可以使用新宏来生成对现有宏的多个调用。 %macro run_charts(varlist); %local i ; …
shell_exec无法返回dig命令的输出(shell_exec cannot return output of the dig command)
以下是否显示您的情况? echo shell_exec(“dig google.com AAAA 2>&1”); 我会使用exec() ,你可以传递一个包含所有输出的变量,如果你给它一个returnvar,它将包含退出状态。 Does the following show you anyting? echo shell_exec(“dig google.com AAAA 2>&1”); I would use exec() though, you can pass it a variabl…
Android中的分组水平按钮组(Grouped Horizontal Button Group in Android)
你可以为每个人制作Shape文件。 只需创建Shape文件,并定义特定按钮的角半径并使用它。 例如顶部按钮1 像这样设置按钮背景 在drawable文件夹…
Java:对象字段赋值(Java: object fields assignment)
当你做Student bob = new Student()你正在创建一个Student类的实例,并在bob变量中保存对该位置的引用。 当你执行jian = bob ,你将相同的引用保存在jian变量中的内存位置,所以现在jian和bob指向Student类的完全相同的实例 。 When you do Student bob = new Student() you’re creating an instance of the Student class, and saving a referenc…
Intellij和当地Tomee 7.0.1(Intellij and local Tomee 7.0.1)
这个版本的想法是什么? 当7.x发布时,他们有一个bug,你需要自定义它们传递给tomee部署者的属性以及tomee属性,但它在最近的版本中已经修复。 which version of idea is it? They had a bug when 7.x was released and you needed to customize the properties they passed to the deployer of tomee as well as tomee properties b…
如何根据上述条件转换字符串以及如何将这个新转换的字符串作为文件名应用于用户上传的文件?(How to convert a string according to said criteria and how to apply this newly converted string as a file name to the file uploaded by user?)
使用$_POST在PHP脚本中接收标题 使用strtolower()将标题转换为小写 使用str_replace()替换所有带下划线的空格 使用rename()函数重命名用户上传的文件 这应该让你开始: if (isset($_POST)) { $title = $_POST; $title = strtolower($title); $title = str_replace(‘ ‘, ‘_…
bundle:找不到命令(bundle: command not found)
您需要将ruby gem可执行文件目录添加到路径中 export PATH=$PATH:/opt/ruby-enterprise-1.8.7-2023.02/bin You need to add the ruby gem executable directory to your path export PATH=$PATH:/opt/ruby-enterprise-1.8.7-2023.02/bin
如何在遇到特殊字符时拆分列(how to split column when meet special character)
以下解决方案应该有效 无论哪个订单用于Comment栏目( Reg, Inv, Cus Br或Cus, Br, Reg, Inv或其他)以及 Comment栏的某些项目可能会丢失(例如,缺少TEST4 / Cus) 如果Comment包含XML保留字符,则代替REPLACE(t1.Comment,应该使用REPLACE((SELECT t1.Comment AS ‘*’ FOR XML PATH(”)), DECLARE @Table1 TABLE ( ID …
创建软连接,命令如下:
ln -s / /home/good/linkname
ln的链接分软链接和
硬链接
两种:
1、软链接就是:“ln –s
源文件
目标文件”,只会在选定的位置上生成一个文件的镜像,不会占用磁盘空间,类似与windows的
快捷方式
。
2、硬链接ln源文件目标文件,没有参数-s, 会在选定的位置上生成笑敏正一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
扩展资料
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同
文件拿闹系统
的文件。
链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的现象,链接文件甚至可以循环链接自己。类似于
编程语言
中的递归。
软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。
用ln -s 命令可以生成一个软连接,如下:
# ln -s source_file softlink_file
在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文碰悔件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
删除硬/软链接用rm softlink_file
或者unlink softlink_file
参考资料:
百度百科—软链接
创建软连接,命令如下宴好:
ln -s / /home/good/linkname
ln的链接分软链接晌哗铅和硬链接两种:
1、软链接就是:“ln –s 源文件 目标文件”,只会在选定的位置上生成一个文件的镜像,不会占用磁盘空间,类似与windows的快捷方式。
2、硬链接ln源文件目标文件,没有参数-s, 会在选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件芦樱都保持同步变化。
ln -s / /home/good/linkname
rm -f 用于强制删除某个文件
每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。
当通过shell的touch命令或者在程序中open一个带有O_CREAT的不存在的文件时,文件的链接数为1。
通常open一个已存在的文件不会影响文件的链接数。open的作用只是使调用进程与文件之间建立一种访问关系,即open之后返回fd,调用进程可以通过fd来read 、write 、 ftruncate等等一系列对文件的操作。
close()就是消除这种调用进程与文件之间的访问关系。自然,不会影响文件的链接数。在调用close时,内核会检查打开该文件的进程数,如果此数为0,进一步检查文件的链接数,如果这个数也为0,那么就删除文件内容。
link函数创建一个新目录项,并且增加一个链接数。
unlink函数删除目录项,并且减少一个链接数。如果链接数达到0并且没有任何进程打开该文件,该文件内容才被真正删除。如果在unlilnk之前没有close,那么依旧可以访问文件内容。
综上所诉,真正影响困弯链接数的操作是link、unlink以及open的创建。
删除文件内容的真正含义是文件的链接数为0,而这个操作的本质完成者是unlink。close能够实施删除祥敬文件内容的操作,必定是因为在close之前有一个unlink操作。
举个例子简单说明:通过shell touch test.txt
1、stat(“test.txt”,&buf);
printf(“1.link=%d\n”,buf.st_nlink);//未打开文件之前测试链接数
2、fd=open(“test.txt”,O_RDON);//打开已存在文件test.txt
stat(“test.txt”,&buf);
printf(“2.link=%d\n”,buf.st_nlink);//测试链接数
3、close(fd);//关闭文件test.txt
stat(“test.txt”,&buf);
printf(“3.link=%d\n”,buf.st_nlink);//测试链接数
4、link(“test.txt”,”test2.txt”);//创建硬链接test2.txt
stat(“test.txt”,&buf);
printf(“4.link=%d\n”,buf.st_nlink);//测试链接数
5、unlink(“test2.txt”);//删除test2.txt
stat(“test.txt”,&buf);
printf(“5.link=%d\n”,buf.st_nlink);//测试链接数
6、重复步骤2 //重新打开test.txt
7、unlink(“test.txt”);//删除test.txt
fstat(fd,&buf);
printf(“7.link=%d\n”,buf.st_nlink);//测试链接数
8、close(fd);//此步骤可以不显示写出,因为汪宴闷进程结束时,打开的文件自动被关闭。
顺次执行以上8个步骤,结果如下:
1.link=1
2.link=1 //open不影响链接数
3.link=1 //close不影响链接数
4.link=2 //link之后链接数加1
5.link=1 //unlink后链接数减1
2.link=1 //重新打开 链接数不变
7.link=0 //unlink之后再减1,此处我们改用fstat函数而非stat,因为unlilnk已经删除文件名,所以不可以通过 文件名访问,但是fd仍然是打开着的,文件内容还没有被真正删除,依旧可以使用fd获得文件信息。
执行步骤8,文件内容被删除。
linux ln(link) 命令详解
功能说明:连接文件或目录。
语 法:ln 或 ln
补充说明:ln指令用在连接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后州雀的目的地并非是一个已存在的目录,则会出现错误信息。
参 数:
-b或–backup 删除,覆盖目标文件之前的备份。
-d或-F或–directory 建立目录的硬连接。
-f或–force 强行建立文件或目录的连接,不论文件或目录是否存在。
-i或–interactive 覆盖既有文件之前先询问用户。
-n或–no-dereference 把符号连接的目的目录视为一般文件。
-s或–symbolic 对源文件建立符号连接,而非硬连接。
-S或–suffix= 用”-b”参数备份目标文件.
linux ln(link) 命令详解
功能说明:连接文件或目录。
语 法:ln 或 ln
补充说明:ln指令用在连接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
参 数:
-b或–backup 删除,覆盖目标文件之前的备洞明乎份。
-d或-F或–directory 建立目录的硬连接。
-f或–force 强行建立文件或目录的连接,不论文件或目录是否存在。
-i或–interactive 覆盖既有文件之前先询问用户。
-n或–no-dereference 把符号槐宏连接的目的目录视为一般文件。
-s或–symbolic 对源文件建立符号连接,而非硬连接。
-S或–suffix= 用”-b”参数备份目标文件.
我可纳悉以帮助你,你先设置我更佳答案后,我百度Hii教你。
linux link 目录的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux link 目录,Linux中的Link目录简介,linux软链接(符号链接),linux ln -s 用ln -s 链接 根目录到 /home/good怎么做啊。,LINUX 怎么删除 文件link的信息别忘了在本站进行查找喔。
香港云服务器机房,创新互联(www.cdcxhl.com)专业云服务器厂商,回大陆优化带宽,安全/稳定/低延迟.创新互联助力企业出海业务,提供一站式解决方案。香港服务器-免备案低延迟-双向CN2+BGP极速互访!
网站标题:Linux中的Link目录简介(linuxlink目录)
文章链接:http://www.shufengxianlan.com/qtweb/news38/232688.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联