`

windows下对应linux的ln命令

阅读更多
首先简单理解一下硬链接和符号(软)链接的区别(此文中的符号链接和软链接指同一概念):

硬连接指向的是节点(inode),而软连接指向的是路径(path) 。

最初的文件名与所有的硬链接地位是对等的,比如为文件 a 建立了硬链接 b、c、d。那么a、b、c、d之中只要有一个文件未删除,这个文件就可通未删除的名称访问的。你也可以认为每个文件都可认为至少有一个硬链接,就是说 a 也是一个硬链接。

软链接特性上有些类似于快捷方式,比如为原文件 a 建立了软链接 b、c、d。删除b、c 或 d 访问到 a,但是只要删除了 a,软链接就不可用了。但是 windows 下的快捷方式只能在资源管理器中有用,它只是一个 lnk 文件,如果是一个目录的快捷方式,它是不能通过 cd 命令或路径进入。

硬链接文件有两个限制(Unix/Linux 和 Windows 也都如此)

  1、不允许给目录创建硬链接;
  2、只有在同一文件系统中的文件之间才能创建链接。

更详细区别请见:硬链结和符号链接的区别 ,具体不多述,本文的内容关键在 Windows 下如何建立软硬链接。

熟悉过 Unix/Linux 都应该知道,Unix/Linux 用 ln 建立硬链接,ln -s 建立软链接,那么 Windows 下是如何做到的呢?

一: Windows 下创建硬链接,只能适用于 NTFS 文件系统。使用命令 fsutil hardlink

语法
fsutil hardlink create NewFileName ExistingFileName

参数
create 建立现有文件和新文件之间的 NTFS 硬链接。NTFS 硬链接与 POSIX 硬链接相似。

NewFileName 指定要将创建硬链接的文件。

ExistingFileName 指定要从中创建硬链接的文件。

当然,如果你想在自己的程序里创建硬链接,那也是很容易的,只需要一个很简单的 API 函数:

BOOL CreateHardLink(
     LPCTSTR lpFileName,
     LPCTSTR lpExistingFileName,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

适用于 Win2000 及以上版本的系统,前两个参数的意思就不用解释了,最后一个参数的用途暂时保留,必须为 NULL。

二: Windows 下创建软链接,NTFS 只支持对目录的软链接,微软把它称作 junction。但是对于文件的软链接,微软也有提供解决方案,那就是快捷方式(Shortcut,.lnk 文件)。不过软链接和快捷方式不是一个层次上的东西,前者是底层文件系统的功能,后者是应用层的功能。Windows 下目录的快捷方式用 dir 看起来是个文件。

http://www.microsoft.com/technet/sysinternals/FileAndDisk/Junction.mspx 下载 junction.exe。junction 的命令语是:

junction   LinkDirectory ExistingDirectory

例如:junction d:\link c:\winnt

将为c:\winnt 建立一个链接目录 d:\link,C和D分区都要是 NTFS 格式,在资源管理器和 dir 列示中 d:\link 都以目录的面目存在的。d:\link 就像是 c:\winnt 的一个引用一般,删除 d:\link 目录中的内容也就是删除了 c:\winnt 中的内容,但删除 d:\link 本身是不会影响到 c:\winnt 的。

相应的,在程序中也有一个 API 函数 CreateSymbolicLink 支持创建软链接,不过来得太晚了,要 Windows VISTA 和 Windows Server 2008 那样的版本才支持,先还是别想了,API 原型是:

BOOL WINAPI CreateSymbolicLink(
   __in   LPCWSTR lpSymlinkFileName,
   __in   LPCWSTR lpTargetFileName,
   __in   DWORD dwFlags
);

参数:
lpSymlinkFileName 要创建的符号链接名称.

lpTargetFileName 符号链接所对应目标的名称.

dwFlags 标识目标是文件还是目录. 取值0x0 代表是文件,SYMBOLIC_LINK_FLAG_DIRECTORY或0x1 代表是目录

三:其他方法

也可以使用 GNU utilities for Win32 中的 ln 来创建硬链接。这是一些 GNU 工具的 Win32 移植版本,非常好用。另外 Cygwin 里的 ln 不但可以创建硬链接也可以创建符号链接(在 Windows 里就是快捷方式 .lnk 文件)。

实际需求引出:Web 应用中上传文到 WEB 下的某个子目录中,这样可以直接通过网页链接的方式访问到这些文件。但是会出现的问题就是,每当完全重新部署应用时,如果忘了把存上传文件的目录进行备份,那么原有上传文件就全没了。原来项目部署在 Unix 下的做法是,把那个上传目录作为另一个目录的符号链接,实际存储文件的目录不在 WEB 应用目录下,重新部署时只要重建这个符号链接即可,不会有覆盖文件的危险。当然在 Unix/Linux 是好解决,只要用 ln -s 命令就行,然而对于 Windows 系统却要想点办法,为目录建立快捷的方式是行不通的,目录的链接只会当 lnk 文件对待,在 Explorer 中可以双击打开,但对于网页链接或者 cd 命令是无法正确定位的。于是思考起如何在 Windows 下创建符号连接的问题,才有了上文。

题外:对于以上的需求,可以在 Web 应用外部事先建立好一个目录,赋上相应的权限。然后在应用的配置文件中记下这个目录的绝对路径,上传时往其中写文件没问题,关键浏览时,因为文件在应用之后,不能直接通过网址浏览到,就需要通过一个程序去读取相应的文件,发送到浏览器之前必须设置根据文件类型设置响应 MINE 类型,这个 MINE 类型可以在上传时记载在库的。

现在觉得这种方法还优于用符号链接的方式,至为无需每次完整发布后重创建符号链接,而且实际中也出现过完全重部署后,目标目录中文件完全丢失的情况。
分享到:
评论

相关推荐

    常用Linux命令.pdf

    在提供的部分内容中,包含了丰富的Linux命令实例,以下是对应的知识点: 1. 用户管理命令:sudosu用于个人用户切换到root用户,对于需要执行特殊权限操作的用户来说,这是个非常重要的命令。 2. 文件和目录操作...

    Linux常用命令手册

    Donald通过整理和排版网络上的资源,形成了一本适合打印和查阅的《Linux常用命令手册》,便于用户在实际工作中快速找到需要的命令。 文件传输是Linux命令中非常重要的一个部分。包括FTP、TFTP等多种文件传输协议,...

    Windows 下的 busybox

    然而,Windows的内置命令行工具(CMD或PowerShell)并不包含所有Unix/Linux环境中常见的命令,比如`ln`命令,它用于创建软链接或硬链接到其他文件。在这样的情况下,我们可以借助于`busybox`这个工具来弥补这个不足...

    linux基础命令学习

    - **软链接**(符号链接):`ln -s 3.txt 4` 创建一个指向3.txt的快捷方式,相当于Windows中的快捷方式。 - **硬链接**:`ln 3.txt 5` 会在文件系统中创建一个新的索引节点,两个文件名都指向同一数据块,类似物理...

    linux常用命令总结1.docx

    - 软链接(符号链接)类似Windows的快捷方式,如`ln -s a b`。 6. **文件和目录的属性**: - `chown`命令改变文件所有者,例如`chown zwb a`将文件a的所有者改为zwb。 - `chmod 3777 zz`设置目录zz的权限,使它...

    linux常用命令.pdf

    ### Linux常用命令详解 #### 一、查看命令位置与Python环境 在Linux环境中,了解当前使用的命令路径对于环境切换尤其重要。以下两个命令可以帮助我们快速定位到特定命令的位置。 1. **`which`命令** - **用途**:...

    Linux操作命令

    - **ln命令** 用于创建文件链接。例如,`ln -s /etc/inittab inittab` 创建指向`/etc/inittab`的软链接`inittab`。 - **cat命令** 用于显示文件内容。 - **chmod命令** 用于更改文件或目录的访问权限。 - **chown...

    linux shell 命令, 脚本编程

    ### Linux Shell 命令与脚本编程知识点详解 #### 第一部分:Shell ##### 第1章:文件安全与权限 **1.1 文件** - **定义**:在Linux系统中,几乎所有东西都被视为文件,包括目录、设备等。 - **用途**:用于存储...

    Linux常用命令全集

    对于希望从DOS或Windows环境过渡到Linux环境的用户来说,掌握一些基本的Linux命令是非常必要的。本文将详细介绍一系列常用的Linux命令及其用法,帮助初学者更快地适应Linux环境。 #### 基本文件操作命令 1. **cat*...

    windows和Linux版本的jdk.rar

    5. **跨平台兼容性**: Java的一大特点就是“一次编写,到处运行”,这意味着同一份代码可以在Windows和Linux上编译并运行,只要确保系统中安装了对应版本的JDK。 总结,这个压缩包包含了Java开发环境的基础,无论是...

    linux操作命令

    #### 十六、ln命令 `ln` 命令用于创建硬链接或符号链接。硬链接是指指向同一个文件inode的不同文件名,而符号链接则是类似于Windows中的快捷方式。通过选项`-s`可以创建符号链接。 #### 十七、cp命令 `cp` 命令用于...

    图文Linux命令入门

    ### 图文Linux命令入门知识点详解 #### 一、文件系统管理 **1.1 路径** - **查看当前绝对路径**: `pwd` - 示例: 当前工作目录为`/etc/sysconfig`。 - **进入目标路径**: `cd` - 不带参数时返回用户家目录,...

    linux常用命令大全.docx

    ### Linux常用命令详解 #### 一、文件与目录管理 1. **ls**: 列出当前目录下的所有文件和子目录。默认情况下不显示隐藏文件(以`.`开头的文件),可以通过`ls -a`来查看所有文件,包括隐藏文件。 2. **cd**: 切换...

    Linux命令大全V1.0.docx

    Linux命令大全是Linux系统操作的核心,它包含了对系统进行各种操作的基本工具。下面将详细解释文档中提到的一些关键命令和概念。 1. **用户和权限管理**: - `whoami`:显示当前登录的用户名。 - `su`:切换用户...

    LINUX命令手册

    ### Linux命令手册精要 #### 文件管理篇 **1. `ls`命令:** - **功能:** 列出当前目录下的所有文件。 - **参数:** - `-a`:显示所有文件,包括隐藏文件(以`.`开头)。 - `-l` 或 `ll`:显示文件详细信息,...

    linux常用命令

    ### Linux常用命令与服务器管理要点详解 #### Linux 文件命名规则与目录概述 1. **文件命名规则** - 除了`/`字符之外,几乎所有的ASCII字符都可以用于文件名。 - 避免使用的字符包括但不限于空格、制表符、退格...

    双系统-XP下硬盘安装linux系统

    本文将详细介绍如何在Windows XP系统下通过硬盘安装Linux系统的过程。相比于光盘安装,硬盘安装Linux较为复杂,尤其是在早期的操作系统环境中,这一过程更加繁琐。下面将按照实际操作流程,详细解释每个步骤及其注意...

Global site tag (gtag.js) - Google Analytics