LINUX的文件分类及软硬链接文件

时间:2022-03-25 16:30:36
LINUX文件的分类
LINUX常见的文件类型有;普通文件,目录文件,设备文件,管道文件,套接字文件和链接文件等等。
其中:
  普通文件分为:文本文件,二进制文件
  对于普通文件,可以看到有 "-rw-rw--r"的文件属性,第一个符号是 "-" 。
  如:
 [root@localhost ~]# ls -l a1
 -rw-rw-r- 1 root root 2431 07-30 20:10 a1
  对于目录文件,可以看到有 "drwxrw-r--"的文件属性,第一个符号是 "d" 。
  如:
 [root@localhost ~]# ls -l a2
 drwxrw-r-- 1 root root 2445 07-30 20:15 a2
   设备文件分为:块设备文件,字符文件
   对于块设备文件,可以看到有 "brw-rw-r--"的文件属性,第一个符号是 "b" 。
  如:
 [root@localhost ~]# ls -l a3
 brwxrw-r-- 1 root root 5723 07-30 20:17 a3
   对于字符文件,可以看到有 "crw-rw-r--"的文件属性,第一个符号是 "c" 。
  如:
 [root@localhost ~]# ls -l a4
 crwxrw-r-- 1 root root 2577 07-30 20:20 a4
   对于管道文件,可以看到有 "prwxrx-x--"的文件属性,第一个符号是 "p" 。
  如:
 [root@localhost ~]# ls -l a3
 prwxrw-r-- 1 root root 2231 07-30 20:26 a5
   链接文件分为:硬链接文件,软链接文件
   对于硬链接文件,可以看到有 "-rw-rw-r--"的文件属性,第一个符号是 "-" 。
  如:
 [root@localhost ~]# ls -l a6
 -rwxrw-r-- 1 root root 6345 07-30 20:52 a6
   对于软链接文件,可以看到有 "lrw-rw-r--"的文件属性,第一个符号是 "l" 。
  如:
 [root@localhost ~]# ls -l a7
 lrwxrw-r-- 1 root root 4763 07-30 20:56 a7

那么我们来看一下硬连接文件和软链接文件的如何创建,并分析软,硬链文件的异同点。
例如有一源文件f2.c,我们根据该源文件创建一个硬链接文件f3.c和软链接文件f4.c。
  
   f2.c(源文件)
     /      \
    /        \
 f3.c      f4.c
           硬链接文件  软链接文件
首先创建一个源文件num:
 [root@localhost ~]# gedit f2.c
 [root@localhost ~]# ls -l f2.c
 -rw-r--r-- 2 root root 64 07-30 23:12 f2.c

硬链接文件的创建:
 [root@localhost ~]# ln f2.c f3.c
       |     |
       |     |
源文件 硬链接文件
 [root@localhost ~]# ls -l f3.c
 -rw-r--r-- 2 root root 64 07-30 23:12 f3.c
软链接文件的创建:
 [root@localhost ~]# ln -s f2.c f4.c
           |     |
           |     |
       源文件 软链接文件
 [root@localhost ~]# ls -l f4.c
 lrwxrwxrwx 1 root root 4 07-30 23:11 f4.c -> f2.c

软,硬链接文件与源文件三者的关系:
1.首先看一下软,硬链接文件和源文件在系统中所占内存空间
 源文件:
 -rw-r--r-- 2 root root 64 07-30 23:12 f2.c
      -
 硬链接文件:
 -rw-r--r-- 2 root root 64 07-30 23:12 f3.c
      -
 软链接文件:
 lrwxrwxrwx 1 root root 4 07-30 23:13 f4.c -> f2.c
          -
可以看到源文件和硬链接文件所占内存空间相等,而软链接文件所占内存空间很小,只有4k,实际上硬链接文件是一种特殊的复制文件,即在创建硬链接文件时,直接将源文件的内容复制给硬链接文件,所以所占内存也相等,而软链接文件可以看作是源文件的一个镜像文件,实际上只是一个虚拟文件,所以占用内存很小。
2.接下来看一下源文件的格式,然后对比软,硬链接文件的格式:
 源文件:
 -rw-r--r-- 2 root root 64 07-30 23:12 f2.c
 ------    
 硬链接文件:
 -rw-r--r-- 2 root root 64 07-30 23:12 f3.c
 ------    
 软链接文件:
 lrwxrwxrwx 1 root root 4 07-30 23:13 f4.c -> f2.c
 ------
可以看到硬链接文件的格式和源文件格式相同,而软链接文件的user,group和other均具有rwx的权限,实际上硬链接文件本身就是一种源文件的复制文件,所以其权具有和源文件相同的权限。
3.对源文件的内容进行修改操作,其硬链接文件和软链接文件的内容也会随之修改。
修改前源文件:
[root@localhost ~]# cat f2.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
        return 0;
}
修改前硬链接文件:
[root@localhost ~]# cat f3.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
        return 0;
}
修改前软链接文件:
[root@localhost ~]# cat f3.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
        return 0;
}

修改后源文件:
[root@localhost ~]# cat f2.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
修改后硬链接文件:
[root@localhost ~]# cat f3.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
修改后软链接文件:
[root@localhost ~]# cat f3.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
4-1 删除软链接文件,源文件不会被删除,硬链接文件也不会被删除。
[root@localhost ~]# rm -rf f4.c
[root@localhost ~]# ls -l f4.c
ls: f4.c: 没有那个文件或目录
删除软链接文件后的源文件:
[root@localhost ~]# cat f2.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
删除软链接文件后的硬链接文件:
[root@localhost ~]# cat f3.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
4-2 删除硬链接文件,源文件不会被删除,软链接文件也不会被删除。
[root@localhost ~]# rm -rf f3.c
[root@localhost ~]# ls -l f3.c
ls: f3.c: 没有那个文件或目录
删除硬链接文件后的源文件:
[root@localhost ~]# cat f2.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
删除硬链接文件后的软链接文件:
[root@localhost ~]# cat f4.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
4-3 删除源文件,硬文件不会被删除,软链接文件则会被删除。
[root@localhost ~]# rm -rf f2.c
[root@localhost ~]# ls -l f2.c
ls: f2.c: 没有那个文件或目录
删除源文件后的硬链接文件:
[root@localhost ~]# cat f3.c
#include<stdio.h>
int main()
{
        int a,b;
        float c;
  printf("hello wrold!\n");
        return 0;
}
删除源文件后的软链接文件:
[root@localhost ~]# cat f4.c

下面是我创建的源文件,硬链接文件及软链接文件,仅供参考:
/*f2.c ->源文件,f3.c ->硬链接文件,f4.c ->软链接文件*/
[root@localhost ~]# gedit f2.c
[root@localhost ~]# ls -l f2.c
-rw-r--r-- 2 root root 64 07-30 23:12 f2.c
[root@localhost ~]# ln f2.c f3.c
[root@localhost ~]# ls -l f3.c
-rw-r--r-- 2 root root 64 07-30 23:12 f3.c
[root@localhost ~]# ln -s f2.c f4.c
[root@localhost ~]# ls -l f4.c
lrwxrwxrwx 1 root root 4 07-30 23:13 f4.c -> f2.c

其次,在验证源文件,软,硬链接文件其中一个被删除后,对其它两个文件的影响时,在gcc上先后创建了f5.c f6.c f7.c
文件,不过为了使阅读起来更方便直接,所以均按照f2.c f3.c f4.c 来说明。