linux文件link
ln -s bbb的文件目录 ccc的文件目录
In的功能是为某一个文件在另外一个位置建立一个同步的链接,命令最常用的参数是-s,具体用法是:
ln -s 源文件 目标文件
-s 是 symbolic的意思。
ln的链接有软链接和硬链接两种。
软链接就是ln -s ** **,只会在选定的位置上生成一个文件的镜像,不会占用磁盘空间。
硬链接ln
** **,没有参数-s,在选定的位置上生成一个和源文件大小相同的文件。
无论是软链接还是硬链接,文件都保持同步变化。软链接是可以跨分区的,但是硬链接只能在同一分区内。
(1)linux文件link扩展阅读:
1、目录不能建立硬链接,但可以建立软链接。
ln-s
test_chk test_chk_ln
2、正确的删除方式(删除软链接,但不删除实际数据):
rm -rf ./test_chk_ln
3、错误的删除方式:
rm -rf ./test_chk_ln/ (这样就会把原来test_chk下的内容删除)
4、用ls查看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件。用ls
-l命令去查看,就可以看到显示的link的路径。
‘贰’ linux系统中链接文件什么意思
链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。
Linux中包括两种链接:硬链接(Hard
Link)和软链接(Soft
Link),软链接又称为符号链接(Symbolic
link)。
我们首先来了解一下几个名词:
索引节点(inode)
要了解链接,我们首先得了解一个概念,叫索引节点(inode)。在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。系统是通过索引节点(而不是文件名)来定位每一个文件。
硬链接(Hard
Link)
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。
引用
ln
[options]
existingfile
newfile
ln
[options]
existingfile-list
directory
用法:
第一种为”existingfile”创建硬链接,文件名为”newfile”。
第二种在”directory”目录中,为”
existingfile-list”中包含的所有文件创建一个同名的硬链接。
常用可选[options]:-f
无论”newfile”存在与否,都创建链接。-n
如果”newfile”已存在,就不创建链接。
软链接(Soft
Link)
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。
可以用:ln
-s
命令来建立软链接。
引用
ln
-s
existingfile
newfile
ln
-s
existingfile-list
directory
下面我们用一个实例来说明硬链接和软链接。
现在目录下有两个文件,一个名为file1,一个名为file2。
引用
$
ls
–il
1052671
-rw-r--r--
1
Leanx
Leanx
0
2010-03-29
13:46
file1
1052670
-rw-r--r--
1
Leanx
Leanx
0
2007-03-29
13:46
file2
首先先做一个file1的硬链接。
引用
$
ln
file1
file1hard
$ls
–il
1052671
-rw-r--r--
2
Leanx
Leanx
0
2010-03-29
13:46
file1
1052670
-rw-r--r--
1
Leanx
Leanx
0
2010-03-29
13:46
file12
1052671
-rw-r--r--
2
Leanx
Leanx
0
2010-03-29
13:46
file1hard
这里我们注意在创建链接前,file1显示的链接数目为1,创建链接后
1.file1和file1hard的链接数目都变为2。
2.file1和file1的inode号是一样的,都是1052671。
3.file1和file1hard显示的文件大小也是一样,都是0B。
可见进行了ln命令的操作结果:file1和file1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件file1的硬链接,就是为
file1的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm
file1,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。
尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:
1.不允许给目录创建硬链接。
2.不可以在不同文件系统的文件间建立链接。
接着我们做一个指向file2的软链接,软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
引用
$
ln
-s
file2
file2soft
$
ls
–il
总用量
0
1052671
-rw-r--r--
2
Leanx
Leanx
0
2010-03-29
13:34
file1
1052670
-rw-r--r--
1
Leanx
Leanx
0
2010-03-29
13:35
file2
1053313
lrwxrwxrwx
1
Leanx
Leanx
5
2010-03-29
13:45
file2soft
->
file2
1052671
-rw-r--r--
2
Leanx
Leanx
0
2010-03-29
13:34
file1hard
从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。
区别:
1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3.链接数目是不一样的,软链接的链接数目不会增加;
4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,file2大小是0B,而file2soft是5B。
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
‘叁’ LINUX 中 的 mount 和 link 分别是什么作用呀谁能给详细解释解释区别呀
使用上两者没有区别,都是挂载挂载linux系统外的文件,mmount为挂入ms-dos文件系统,为mtools工具指令。
mount命令
使用权限
:
系统管理者或/etc/fstab中允许的使用者
使用方式
:
mount
[-hv]
mount
-a
[-ffnrsvw]
[-t
vfstype]
mount
[-fnrsvw]
[-o
options
[,...]]
device
|
dir
mount
[-fnrsvw]
[-t
vfstype]
[-o
options]
device
dir
说明
:
将某个档案的内容解读成档案系统,然后将其挂在目录的某个位置之上。当这个命令执行成功后,直到我们使用
umnount
将这个档案系统移除为止,这个命令之下的所有档案将暂时无法被调用。
这个命令可以被用来挂上任何的档案系统,你甚至可以用
-o
loop
选项将某个一般的档案当成硬盘机分割挂上系统。这个功能对于
ramdisk,romdisk
或是
iso
9660
的影像档之解读非常实用。
参数
-v
显示程序版本
-h
显示辅助讯息
-v
显示较讯息,通常和
-f
用来除错。
-a
将
/etc/fstab
中定义的所有档案系统挂上。
-f
这个命令通常和
-a
一起使用,它会为每一个
mount
的动作产生一个行程负责执行。在系统需要挂上大量
nfs
档案系统时可以加快挂上的动作。
-f
通常用在除错的用途。它会使
mount
并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和
-v
一起使用。
-n
一般而言,mount
在挂上后会在
/etc/mtab
中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-s-r
等于
-o
ro
-w
等于
-o
rw
-l
将含有特定标签的硬盘分割挂上。
-u
将档案分割序号为
的档案系统挂下。-l
和
-u
必须在/proc/partition
这种档案存在时才有意义。
-t
指定档案系统的型态,通常不必指定。mount
会自动选择正确的型态。
-o
async
打开异步模式,所有的档案读写动作都会用异步模式执行。
-o
sync
在同步模式下执行。
-o
atime
-o
noatime
当
atime
打开时,系统会在每次读取档案时更新档案的‘上一次调用时间’。当我们使用
flash
档案系统时可能会选项把这个选项关闭以减少写入的次数。
-o
auto
-o
noauto
打开/关闭自动挂上模式。
-o
defaults
使用预设的选项
rw,
suid,
dev,
exec,
auto,
nouser,
and
async.
-o
dev
-o
nodev-o
exec
-o
noexec
允许执行档被执行。
-o
suid
-o
nosuid
允许执行档在
root
权限下执行。
-o
user
-o
nouser
使用者可以执行
mount/umount
的动作。
-o
remount
将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
-o
ro
用唯读模式挂上。
-o
rw
用可读写模式挂上。
-o
loop=
使用
loop
模式用来将一个档案当成硬盘分割挂上系统。
范例
将
/dev/hda1
挂在
/mnt
之下。
#mount
/dev/hda1
/mnt
将
/dev/hda1
用唯读模式挂在
/mnt
之下。
#mount
-o
ro
/dev/hda1
/mnt
将
/tmp/image.iso
这个光盘的
image
档使用
loop
模式挂在
/mnt/cdrom之下。用这种方法可以将一般网络上可以找到的
linux
光
碟
iso
档在不烧录成光盘的情况下检视其内容。
#mount
-o
loop
/tmp/image.iso
/mnt/cdrom
mmount命令
说明:
挂入ms-dos文件系统。
语法:
mmount
[驱动器代号][mount参数]
补充说明:
mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内容挂入到linux目录中。
参数:
[mount参数]的用法请参考mount指令。
‘肆’ 什么是Linux操作系统文件链接
链接类型及其意义
符号链接与硬链接在链接意义没有什么不同,只是在对目标文件的链接原理上有所不同。符号链接对应于C语言上的指针,符号链接文件只是保存目标文件的路径,访问是根据链接文件的路径进行访问;而硬链接是对应于C语言中的引用,硬链接文件中保存的是目标文件的inode结点。
正是由于链接方式的不同,这两种链接呈现出不同的特性。符号链接通常被称为软链接,它的目标文件既可以是目录,也可以是普通文件。由于符号链接文件中只是存放的目标文件的路径,故它不会改变目标文件中的inode的引用计数。删除目标文件对符号链接文件没有什么影响。硬链接文件则不同,它会改变目标文件的inode的引用计数,每新建一个硬链接文件时,目标文件的inode引用计数就会加一。删除目标文件时,目标文件并不会真正的删除,这里只是简单的将目标文件的引用计数减一,目标文件并没有删除。详情查看网页链接
创建链接文件
创建硬链接文件的命令格式:ln [链接目标文件] [硬链接文件名]
创建符号链接文件的命令格式:ln -s [链接目标文件或目录] [符号链接文件名]
举例(以下例子中的当前目录均为"/home/tingyu"):
在"/home/tingyu"目录中创建目录"/home/tingyu/hkc"的链接文件:ln -s /home/tingyu/hkc lnk
执行后的结果为:
tingyu@tingyu-laptop:~$ ln -s ./hkc lnk
tingyu@tingyu-laptop:~$ ls -l
total 32
drwxr-xr-x 2 tingyu tingyu 4096 2011-03-20 12:43 hkc
lrwxrwxrwx 1 tingyu tingyu 5 2011-03-20 12:43 lnk -> ./hkc
在"/home/tingyu"目录中创建文件"/home/tingyu/hkc"的链接文件:ln /home/tingyu/hkc lnk
‘伍’ linux如何复制移动文件
linux如何复制文件夹和移动文件夹
linux下文件的复制、移动与删除命令为:cp,mv,rm
一、文件复制命令cp
命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination)
cp [option] source1 source2 source3 ... directory
参数说明:
-a:是指archive的意思,也说是指复制所有的目录
-d:若源文件为连接文件(link file),则复制连接文件属性而非文件本身
-f:强制(force),若有重复或其它疑问时,不会询问用户,而强制复制
-i:若目标文件(destination)已存在,在覆盖时会先询问是否真的操作
-l:建立硬连接(hard link)的连接文件,而非复制文件本身
-p:与文件的属性一起复制,而非使用默认属性
-r:递归复制,用于目录的复制操作
-s:复制成符号连接文件(symbolic link),即“快捷方式”文件
-u:若目标文件比源文件旧,更新目标文件
如将/test1目录下的file1复制到/test3目录,并将文件名改为file2,可输入以下命令:
cp /test1/file1 /test3/file2
二、文件移动命令mv
命令格式:mv [-fiv] source destination
参数说明:
-f:force,强制直接移动而不询问
-i:若目标文件(destination)已经存在,就会询问是否覆盖
-u:若目标文件已经存在,且源文件比较新,才会更新
如将/test1目录下的file1复制到/test3 目录,并将文件名改为file2,可输入以下命令:
mv /test1/file1 /test3/file2
三、文件删除命令rm
命令格式:rm [fir] 文件或目录
参数说明:
-f:强制删除
-i:交互模式,在删除前询问用户是否操作
-r:递归删除,常用在目录的删除
如删除/test目录下的file1文件,可以输入以下命令:
rm -i /test/file1
复制:
CP命令
格式: CP [选项] 源文件或目录 目的文件或目录
选项说明:-b 同名,备分原来的文件
-f 强制覆盖同名文件
-r 按递归方式保留原目录结构复制文件
cp -Rf /home/user1/* /root/temp/
将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。
即格式为:cp -Rf 原路径/ 目的路径/
移动:
mv ./WorkReport/web.xml ./WorkReport/WEB-INF/注:移动/WorkReport/web.xml文件到/WorkReport/WEB-INF/mv /data/new/data/old/注:移动/data/new到/data/old/文件夹下
注意点:移动文件夹的话就不要再加 / 了
如果是移动文件夹下的所有文件的话就可以文件夹后面跟上 /*
mv /data/new/* /data/old/
‘陆’ linux ln 连接命令怎么用
1、首先有一个目录dir, 执行ln -s dir dir_link 创建目录的软链接。
‘柒’ Linux里面怎么查看link文件的全路径
传给函数的路径是/root/file,如果这是函数的第一个参数,那么函数中可以用 $1 获龋 得到文件名file1和file2后,echo "$1/file1" 就输出/root/file/file1,echo "$1/file2" 输出/root/file/file2。
‘捌’ linux下,如何自动link目录
#!/bin/bash
#new一开始就是个symboliclink,不能是空目录
#这个脚本在“同文件夹”下执行,可以放在后台执行
#符号链接名:new
target=new
whiletrue
do
#每秒钟检查一次
sleep1
#如果符号链接不存在,就什么都不做
[!-h$target]&&continue
#找一个最新目录
newdir=$(find.-typed-newer$target|tail-1)
#如果找到,更新符号链接
[-d"$newdir"]&&ln-nsf$newdir$target
done
‘玖’ LINUX 怎么删除 文件link
每一个文件,都可以通过一个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_RDONLY);//打开已存在文件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,文件内容被删除。。。。
‘拾’ link的linux中link函数
头文件
#include <unistd.h>
函数原型
int link (const char * oldpath,const char * newpath);
说明
link()以参数newpath指定的名称来建立一个新的连接(硬连接)到参数oldpath所指定的已存在文件。如果参数newpath指定的名称为一已存在的文件则不会建立连接。函数在执行成功时则返回0,失败时则返回-1,错误原因存于errno。 link()所建立的硬连接无法跨越不同文件系统,如果需要请改用symlink()。
errno错误代码:
EXDEV 参数oldpath与newpath不是建立在同一文件系统。
EPERM 参数oldpath与newpath所指的文件系统不支持硬连接
EROFS 文件存在于只读文件系统内
EFAULT 参数oldpath或newpath 指针超出可存取内存空间。
ENAMETOLLONG 参数oldpath或newpath太长
ENOMEM 核心内存不足
EEXIST 参数newpath所指的文件名已存在。
EMLINK 参数oldpath所指的文件已达最大连接数目。
ELOOP 参数pathname有过多符号连接问题
ENOSPC 文件系统的剩余空间不足。
EIO I/O 存取错误。
范例
/* 建立/etc/passwd 的硬连接为pass */ #include<unistd.h>main(){link(/etc/passwd,pass);}