Linux文件系统

在Linux下,我们要查看文件信息可以使用ls -l命令

[rlh@localhost ~]$ ls -l
总用量 14440
drwxr-xr-x. 2 root root       25 4月  17 21:42 bit
drwxr-xr-x. 2 rlh  rlh         6 3月  29 22:02 Desktop
drwxr-xr-x. 2 rlh  rlh         6 3月  29 22:02 Documents
drwxr-xr-x. 2 rlh  rlh         6 3月  29 22:02 Downloads
-rw-rw-r--. 1 rlh  rlh  14772022 3月  29 22:20 master.zip
drwxr-xr-x. 2 rlh  rlh         6 3月  29 22:02 Music
drwxr-xr-x. 2 rlh  rlh        52 4月  17 22:06 Pictures
drwxr-xr-x. 2 rlh  rlh         6 3月  29 22:02 Public
-rw-rw-r--. 1 rlh  rlh       975 4月   1 21:15 Startify
drwxr-xr-x. 2 rlh  rlh         6 3月  29 22:02 Templates
drwxrwxr-x. 5 rlh  rlh      4096 4月  19 20:06 test
drwxr-xr-x. 2 rlh  rlh         6 3月  29 22:02 Videos
drwxrwxr-x. 9 rlh  rlh      4096 3月  29 09:29 vim-master

如果要显示某个文件更加详细的信息可以使用stat命令

[rlh@localhost ~]$ stat bit
  文件:"bit"
  大小:25         块:0          IO 块:4096   目录
设备:803h/2051d   Inode107754522   硬链接:2
权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_home_t:s0
最近访问:2018-04-18 23:20:57.689729542 -0700
最近更改:2018-04-17 21:42:40.193992598 -0700
最近改动:2018-04-17 21:42:40.193992598 -0700

IO块是IO沟通的基本单元,它是4K。我这使用的的汉语版的,所以需要了解下最后三个信息Access(最近访问时间)Modify(最近更改时间)Change(最近改动时间)
着重需要了解的是inode
在硬盘上,存储文件有三个部分:超级块,i节点表,数据区
这里写图片描述
数据区:存放文件内容
i节点表:存放文件属性
超级块:存放文件本身的结构信息
其实在三个部分两两之间还存在一个位图(map),如data bit map和indoe bit map,用于更加快捷的查看修改

indoe就是i节点表的一个小格子,存储文件信息,每个文件只有一个indoe号,因此我们要找到一个文件,并不是通过文件名,而是通过indoe来查找。这里又不得不说下硬链接和软链接。
硬链接
ls -l命令所显示信息的第二列,就是硬链接数,硬链接与源文件拥有同一个indoe,就相当于两个文件只是文件名本质上还是同一个文件。
创建硬链接的命令:ln 硬链接 目标文件
目录的硬链接数为2,是因为目录中还有一个..文件,它是返回上一层目录,也就是原目录
删除硬链接,会使硬链接数减一
软链接
软链接就相当于一个快捷方式,它拥有独立的独立的indo号,只是可以更快速的找到目标文件
创建软链接的命令:ln -s 软链接 目标文件名

动态库和静态库
静态库(.a):程序在编译链接时会自动把库的代码链接到可执行文件中,也就是程序会拥有自己独立的一份静态库
动态库(.so):程序运行时采取链接库中文件,也就是动态库是多个文件共享的,它可以节省内存和磁盘的空间

生成静态库命令:ar -rc 以lib开头.o结尾的静态库名 编译链接文件
使用静态库命令:gcc main.c -L -l取出了前缀和后缀的静态库名

生成动态库命令:gcc -fPIC -c sub.c add.c
gcc -shared -o libmymath.so *.o
使用动态库命令:gcc main.o -o main -L. -lhello
L后要加路径
运行动态库:

  1. 拷贝.so文件到系统共享库路径下,/usr/lib
  2. 更改LD_LIBRARY_PATH
  3. ldconfig配置/etc/ld.so.conf.d/,ldconfig更新

实例:
静态库

//add.c
#include "add.h"

int myadd(int x, int y){ 
    return x + y ; 
}
//add.h
#ifndef  _ADD_H_
#define  _ADD_H_

#include <stdio.h> 

int myadd(int x, int y);

#endif
//sub.c
#include "sub.h"                                                                

int mysub(int x, int y){
    return x - y; 
} 
//sub.h
#ifndef _SUB_H_                                                                 
#define _SUB_H_  

#include <stdio.h>
int mysub(int x, int y);

#endif

//生成的静态库libmymath.a,全为乱码
!<arch>                                                                         
/               1524025363  0     0     0       24        ` 
^@^@^@^B^@^@^@\^@^@^Epmyadd^@mysub^@add.o/          1524024646  1000  1000  1006
^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^A^@>^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^X^A
^@^@^@^H^@^@^@^H^@^@^@^@^@^@^@^X^@^@^@^@^@^@^@  ^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@^@
^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^A^@>^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^X^A
^@^@^@^H^@^@^@^H^@^@^@^@^@^@^@^X^@^@^@^@^@^@^@  ^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@^@

//值给测试代码传了静态库和头文件
#include <stdio.h>                                                              
#include "sub.h"
#include "add.h"

int main(){
    int x = 10; 
    int y = 5;
    int z = myadd(x, y); 
    int w = mysub(x, y); 

    printf("%d , %d\n",z, w); 
}

动态库

//add.c
#include "add.h"

int myadd(int x, int y){ 
    return x + y ; 
}
//add.h
#ifndef  _ADD_H_
#define  _ADD_H_

#include <stdio.h> 

int myadd(int x, int y);

#endif
//sub.c
#include "sub.h"                                                                

int mysub(int x, int y){
    return x - y; 
} 
//sub.h
#ifndef _SUB_H_                                                                 
#define _SUB_H_  

#include <stdio.h>
int mysub(int x, int y);

#endif

//生成的动态库libmymath.so,全为乱码
^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^C^@>^@^A^@^@^@?^E^@^@^@^@^@^@@^@^@^@^@^@^@^@H^Q^@^
^@^@^@^M^@^@^@BE???r?^O???|???^O?qX^\???^N???^N^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
 ^@H??t^E?^[^@^@^@H??^H?^@^@^@^@^@^@?5?
 ^@?%?
 ^@^O^_@^@?%?
 ^@h^@^@^@^@??????%z
 ^@h^A^@^@^@?????H?^Ex
 ^@H?=j
 ^@UH)?H??H??^Nw^B]?H?^E^D
 ^@H??t?]??^O^_@^@H?^EA
 ^@H?=:
 ^@UH)?H??H??^CH??H???H^A?H??u^B]?H?^U?  ^@H??t?]H????^O^_@^@?=^A
 ^@^@u'H?=?  ^@^@UH??t^LH?=?^G ^@?]????h???]?^E?     ^@^A??^O^_@^@f.^O^_?^@^@^@^
^@^@^@^@^@^@^@?^@^@^@^@^@^@^@^K^@^@^@^@^@^@^@^X^@^@^@^@^@^@^@^C^@^@^@^@^@^@^@^@^
^@^@^@^H^@^@^@^@^@^@^@^X^@^@^@^@^@^@^@x^@^@^@^A^@^@^@^F^@^@^@^@^@^@^@`^E^@^@^@^@
^@?^E^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^C^@^K^@?^E^@^@^@^@^@^@^@^@^@^@^@^@^@^@

//测试代码
#include <stdio.h>                                                             
#include <math.h>

int main(){

    double f = pow(2.0, 3.0);


    printf("%f\n", f);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值