Linux文件系统的理解总结
前言:在比赛当中,我们获取的flag文件并不总是在根目录、工作目录下,而是隐藏在了Linux系统当中某些位置。
参考内容 : Linux中“一切皆文件”是什么意思?中刘长元大佬回答
万物皆文件
Linux中的一切对象都可以通过文件的方式访问、保存、管理。它体现了一种面向对象的设计思想。
在Linux下,
普通文件、目录、硬件设备、进程和资源甚至命令,都以文件的形式存在,如,我们可以通过读取文件的形式查看进程信息、管理设备或工具。
一个解释实例
观察下面的命令,
ls /var
实际上就是基于文件完成的,ls是存在于/bin下的工具,以64-bit ELF文件形式存在,我们可以通过file查看它的文件属性,
file /bin/ls
/bin/ls: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=de05fcef79d88af9cf9a71ed38e73af0b179bfb2, stripped
将它翻译为以下命令,
/cat/ls /var
同时,在Linux当中,目录文件存放了文件信息和指向文件的指针,执行
vim /var
你可能会惊奇的发现,目录同样是文件,皆由以上的实验,你会惊奇的发现,这个命令竟然完全是由文件完成的,这就是我们说的,Linux当中万物为文件。
常见的文件类型
我们使用ls -al
命令即可查看所有文件的详细信息,
(1) 普通文件:第一列的字母为-
,颜色为灰色。绿色标记可执行文件(即ELF),红色为压缩类文件。
(2) 目录文件:第一列的字母为d
,颜色为(深)蓝色,目录文件保存目录下文件的文件名和inode
(文件索引节点,ls -i
可查看inode
)。
(3) 链接文件:第一列的字母为l
,颜色为(浅)蓝色,是指向文件的软连接或符号链接,可理解为win的快捷方式。
软链接的创建方式,
ln -s a SoftlinkOfa
另一种为硬链接,但是它不属于链接文件,是为原文件创建别名文件,指向相同的inode
,删除原文件和硬链接其中之一互不影响,inode
指向的文件不会被删除。
ln -s a HardlinkOfa
(4) 设备文件:第一列的字母为c
或b
,颜色为黄色,在Linux当中,一切物理设备均被表示为文件,分为块设备文件(c\一般为硬盘等存储设备\随机读取)和字符设备文件(b\字节流形式读取的设备,如串口\顺序读取)。设备有自己的目录结构,当我们想使用和设备进行数据交换时,我们要将其挂载。对设备我们可以open、close、read、write,不同设备具体表现形式不同。
(5) 管道文件:第一列的字母为p
,管道文件主要用于进程间通信,读写普通文件是在磁盘上速度慢,而创建管道文件可以基于内存读写,在读取数据时,FIFO 管道中同时清除数据,随写随读。
以使用 mkfifo
命令来创建一个管道文件:
mkfifo fifo_file
(6) 套接字文件:第一列的字母为s
,用于进程间的网络通信。
进程
通过 /proc
文件夹,我们可以查到进程信息,文件名即对应的进程号,
lsof -p [pid]
可以查看对应进程打开的文件,
对于指定名称的进程信息,我们可以通过如下方式查找,
ps -ef|grep [名称关键字]
进入该进程的文件夹可以看到相关文件目录,对于文件可以直接cat。