Linux 文件链接

文件系统中存储的最小单位是块(Block),块的大小在格式化时确定。Linux 的文件系统将磁盘的整个分区划成若干个同样大小的块组(Block Group),每个块组由 超级块,inode 表,数据块 等部分组成。

超级块(Super Block): 描述整个分区的文件系统信息,例如块大小、文件系统版本号、上次 mount 的时间等等。超级块在每个块组的开头都有一份拷贝。inode表(inode Table): 一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规、目录、符号链接等),权限,文件大小,创建/修改/访问时间等,这些信息存在 inode 中而不是数据块中。每个文件都有一个 inode,一个块组中的所有 inode 组成了 inode 表。数据块(Data Block): 根据不同的文件类型有以下几种情况:(1)对于常规文件,文件的数据存储在数据块中;(2)对于目录,该目录下的所有文件名和目录名存储在数据块中,注意文件名保存在它所在目录的数据块中,除文件名之外,'ls -l' 命令看到的其它信息都保存在该文件的 inode 中(注意: 目录也是一种文件,是一种特殊类型的文件);(3)对于符号链接,如果目标路径名较短则直接保存在 inode 中以便更快地查找,如果目标路径名较长则分配一个数据块来保存;(4)设备文件、FIFO 和 socket 等特殊文件没有数据块,设备文件的主设备号和次设备号保存在 inode 中。

所以目录文件仅相当于存储了一张表,该表记录着该目录下所有文件名和 inode 的映射关系。

  • 硬链接

即是同一个文件在文件系统中的不同名字,这些名字都指向同一个 inode, “ls -l” 显示信息的第二栏便是文件的硬链接数。硬链接相当于是以文件副本的形式存在,但其不占用实际空间。需要注意的是,目录不允许创建硬链接,且硬链接只有在同一个文件系统中才能创建。

ln 源文件 目标文件 (默认不带参数的 ln 是创建硬链接)

  • 软链接

即相当于快捷方式,软链接又称之为符号链接文件,该文件中相当于存放着源文件的路径名。软链接克服了硬链接的不足,没有任何文件系统的限制(可跨文件系统创建)也可以对目录进行链接,而且还可以将软连接文件指向一个不存在的文件。

ln -s 源文件 目标文件

PS 命令简介

Linux 上进程的几种状态为:

  • (1)R: 运行,正在运行或在运行队列中等待
  • (2)S: 中断,休眠中,受阻,在等待某个条件的形成或接收到信号
  • (3)D: 不可中断,收到信号不唤醒和不可运行,进程必须等待直到有中断发生
  • (4)Z: 僵死,进程已终止,但进程描述还在,等待父进程调用 wait 系统调用后释放
  • (5)T: 停止,收到 SIGSTOP, SIGSTP, SIGTOU 信号

附加状态表示:

  • <:优先级高的进程
  • N:优先级低的进程
  • L:有些页被锁进内存
  • X:退出(进程即将被销毁,基本很少见)
  • W:进入内存交换(从内核2.6开始无效)
  • s:进程的领导者(在它之下有子进程)
  • l:是多线程
  • +:位于后台的进程组

常用选项说明:

-e 显示所有进程
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出

a 显示终端上的所有进程,包括其他用户的进程
r 只显示正在运行的进程
u 以用户为主的格式来显示程序状况
x 显示所有程序,不以终端机来区分

常用方法:

(1)列出目前所有的,正在内存中的进程

ps aux 或者 ps -aux (加“-”与不加一样)

该命令列出进程信息的格式为:

USER  PID  %CPU  %MEM  VSZ  RSS  TTY  STAT  START  TIME  COMMAND

(2)显示所有进程信息,连同命令行

ps -ef

该命令列出进程信息的格式为:

UID  PID  PPID  C  STIME  TTY  TIME CMD

显示信息各列含义:

UID 用户ID
PID 进程ID
PPID 父进程ID
C CPU占用率
STIME 开始时间
TTY 开始此进程的TTY
TIME 此进程运行的总时间
CMD 命令名

其实 ps auxps -ef 的功能几乎一样。如果要讨论他们的差别,则要追溯到Unix系统中的两种风格,System V 风格和 BSD 风格,ps aux 最初用到 Unix Style 中,而 ps -ef 被用在 System V Style 中,两者输出略有不同。现在的大部分 Linux 系统都是可以同时使用这两种方式的。

(3)列出类似程序树的程序显示

ps -axjf