linux中文件类型说明

1 基本文件类型(ls命令)

使用ls -l或者ll查看文件详细信息。
在这里插入图片描述

  • 从上面可以看到,每一行都有7列,分别是:
  • 第一列共10位,第1位表示文档类型
    • d表示目录,-表示文件,l表示链接文件,d表示可随机存取的设备,如U盘等,c表示一次性读取设备,如鼠标、键盘等。
    • 后9位,依次对应三种身份所拥有的权限,身份顺序为:owner、group、others,权限顺序为:readable、writable、excutable。如:-r-xr-x—的含义为当前文档是一个文件,拥有者可读、可执行,同一个群组下的用户,可读、可执行,其他人没有任何权限。
  • 第二列表示链接数,表示有多少个文件链接到inode号码。
  • 第三列表示拥有者
  • 第四列表示所属群组
  • 第五列表示文档容量大小,单位字节
  • 第六列表示文档最后修改时间,注意不是文档的创建时间哦
  • 第七列表示文档名称。以点(.)开头的是隐藏文档

例如:

  • 对于第二行,也就是文件anyq_deps来说,其第一列内容为-rw-r--r--,其中第一个符号是-(英文字符减号),在linux中,这样的字符开头就表示普通文件(regular file)
    • 这些文件一般是用相关的应用程序或系统命令创建,比如touch、cp、tar等工具命令。普通命令的删除方式可以使用rm命令。
    • 提示:windows下的doc、ppt、zip、jpg等格式的文档在linux下都属于普通文件。
  • 对于最后一行,也就是文件夹third_party来说,其第一列内容为drwxr-xr-,其中第一个符号是d,表示目录类型
    • 如果仅仅想看目录权限属性时,可以使用ls的-d参数,搭配组合为ls -ld 目录名
    • 创建目录的命令可以用mdkir命令,或cp可以把一个目录复制为另一个目录。删除用rm -r或rmdir(删除空目录才可以)命令。
  • 执行ls -F,返回结果时可以直接区别目录和文件,每个目录的后面多了个斜线。如下: 在这里插入图片描述
    • 关于-F参数的解释:
      -F, --classify             append indicator (one of */=>@|) to entries
      --file-type            likewise, except do not append '*'
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                               single-column -1, verbose -l, vertical -C
      --full-time            like -l --time-style=full-iso
    
    • 代表可执行文件
    • /代表目录
    • 代表链接文件
    • | 代表管道文件
    • 代表套接字
    • > 代表进程间通讯设备

参考:

2. 可执行文件后缀

  • 在linux中,可执行文件一般没有后缀,
  • 因为linux可以自动识别文件类型,有很多类型都不用加后缀。
  • 只要设了执行权限,有elf文件头,就可以看成可执行文件,即便是纯文本文件也可以看成是可执行的脚本。
  • 一部分下载的商业软件安装程序之类的可执行文件有.bin的后缀。有些时候可执行文件的后缀名为.out。
  • Linux下的后缀名并没用windows下那么有用,Linux不根据扩展名判断文件类型,而是根据文件的内容来判断。所以扩展名的作用是帮助人来识别文件,对于Linux系统本身来说没有什么用处。

可执行文件:
指计算机的操作系统能够解释并执行的二进制代码文件。最初的可执行文件包括代码段、数据段、堆栈段和扩展段等。代码段存放了计算机的执行指令,即CPU要进行的操作指令,数据段存放了CPU要用到的数据,堆栈段则存放了与寄存器有关的信息等等。现在你觉得许多文件都能够被计算机执行,是因为操作系统已经做得比较人性化,例如你双击一个文本文件(*.txt),该文件即被打开,这是因为操作系统调用了Notepad.exe这个可执行文件打开了这个文本文件。实际上,被执行的文件是Notepad.exe,而文本文件只是Notepad.exe的执行目标

  • 所以在linux系统中,使用ls命令返回的内容中,绿色显示的文件就都是可执行文件,没有后缀。

elf:(Executable and Linking Format)是可执行连接格式
可执行连接格式是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface(ABI)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。

参考:

3. linux的.a文件,.so文件等理解/动态链接库和静态链接库

  • .o 就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件
  • .a 是好多个.o合在一起,用于静态连接 ,即STATIC mode,多个.a可以链接生成一个exe的可执行文件
  • .so 是shared object,用于动态连接的,和windows的dll差不多,使用时才载入。

(注意,上面这几个链接库文件并不是可执行文件,其可以被可执行文件调用!)

参考:


  • 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
  • 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 windows上对应的是.lib .dll linux上对应的是.a .so
  • 所谓静态、动态是指链接,下图是一个典型的编译过程
  • 静态库之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。
  • 试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。
  • 静态库特点总结:
    • 静态库对函数库的链接是放在编译时期完成的。
    • 程序在运行时与函数库再无瓜葛,移植方便。
    • 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
  • 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。
  • 不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。
  • 动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。
    在这里插入图片描述
  • 动态库特点总结:
    • 动态库把对一些库函数的链接载入推迟到程序运行的时期。
    • 可以实现进程之间的资源共享。(因此动态库也称为共享库)
    • 将一些程序升级变得简单。
    • 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)

参考:

猜你喜欢

转载自blog.csdn.net/Castlehe/article/details/121224312