ln:该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我们删除这个链接,也不会破坏原来的目录。
格式:ln [选项] 目标 目录
链接有两种,一种被称为硬链接(Hard Link),另一种被称为软链接即符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。如果给ln命令加上- s选项,则建立符号链接。通常都用软连接,比如:ln -s /var linkdir,通过linkdir进入到/var目录。
(1)两者的使用比较
硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(inode)。当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置(删除链接不会删除源文件,删除源文件不会删除链接)。
符号链接是一个指针,指向文件在文件系统中的位置。符号链接可以跨文件系统,甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置,用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删除,所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置(删除链接并不会删除原文件,删除源文件会删除链接)。
(2)从Inode的层次来比较
在Linux 文件系统中,inode值相同的文件是硬链接文件,也就是说,不同的文件名,inode可能是相同的,一个inode值可以对应多个文件。
[root@localhost ~]# ls -li sun.txt //注:查看sun.txt的属性;
2408263 -rw-r--r-- 1 root root 29 04-22 21:02 sun.txt //注:这是sun.txt的属性;
[root@localhost ~]# ln sun.txt sun002.txt //注:我们通过ln 来创建sun.txt的硬链接文件sun002.txt
[root@localhost ~]# ls -li sun* //注:我们列一下sun.txt 和sun002.txt
2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun002.txt
2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun.txt
我们可以看到sun.txt在没有创建硬链接文件sun002.txt的时候,其链接个数是1(也就是-rw-r--r--后的那个数值),创建了硬链接 sun002.txt创建后,这个值变成了2。也就是说,我们每次为sun.txt创建一个新的硬链接文件后,其硬链接个数都会增加1。inode值也相同。
我们可以建立一个软链接看下:
[root@localhost ~]# ls -li linuxsir001.txt
2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
[root@localhost ~]# ln -s linuxsir001.txt linuxsir002.txt
[root@localhost ~]# ls -li linuxsir001.txt linuxsir002.txt
2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
两个文件的节点不同;两者的硬链接个数相同都是1 ;我们还注意到了linuxsir002.txt 后面有一个标记 ->,这表示linuxsir002.txt 是linuxsir001.txt的软链接文件。
========================================================================================================
(1)工程目录下的mkimage.sh解析,参见http://blog.chinaunix.net/uid-26009923-id-4068594.html。完整的分析了boot.img的生成过程,recovery.img的生成过程,system.img的生成过程。
(2)其中用到的工具mkbootfs、mkbootimg等源码在system\core\下,工具生成目录在out\host\linux-x86\bin\下。CPIO 的结构包括:
110字节的Head(6 + 8*13)
不定长的文件名(文件名的长度是olen)
结束字符 \0
文件的内容
.... //重复上面4个
最后的文件名是一个 TRAILER!!!
(3)ramdisk.img的解压过程,针对编译出来的ramdisk.img,可逆向解压来梳理其生成过程。
cong@ubuntu:/tmp/test$ file ramdisk.img
gzip compressed data, from Unix
cong@ubuntu:/tmp/test$ cp ramdisk.img ramdisk.img_bak.gz
cong@ubuntu:/tmp/test$ gunzip ramdisk.img_bak.gz
cong@ubuntu:/tmp/test$ file ramdisk.img_bak
ASCII cpio archive (SVR4 with no CRC)
cong@ubuntu:/tmp/test$ cpio -i -F ramdisk.img_bak
463 blocks
将解压后的文件与生成目录的root目录比较,完全一致。