文件就是任意源,有一个名称,可以从中写入读出数据。

文件类型

unix中有三种文件类型,普通文件,目录和伪文件。

普通文件是大多数时候所使用的文件,包括文本文件和二进制文件。例如,纯文本,shell脚本,源程序,配置文件,html文件等。

目录不同之处在于他们用来组织,访问其他文件。从概念上讲,目录包含其他文件。这个文件其实类似于windows下的文件夹。

伪文件有时候也称为设备文件。这种文件是物理设备的内部表示。例如键盘,显示器,打印机等,这些设备都可以当成一个文件进行访问。

有一种特殊的伪文件时proc文件,这种文件可以访问linux内核中的信息,设置可以修改Linux内核中的数据。

特殊文件

特殊文件就是表示物理设备的伪文件。这些文件都被存放于/dev下

一些常见的设备如下

位置 硬件
/dev/sda SCSI硬盘
/dev/sda 第一分区
/dev/hda 硬盘
/dev/Ip0 打印机
/dev/tty 当前终端
/dev/random 随机数生成器
/dev/null 放弃输入 输入不返回内容
/dev/zero 放弃送站,输入返回0

写入到/dev/null 或/dev/zero 中的任何文件都会被抛弃,因此这些文件又叫做位桶。

如果想读取随即数,只需要读取/dev/random。

mkfifo 命名管道

在前面我们已经介绍过了管道,那种管道是匿名管道,就是只有当程序运行的时候它才被创建。

命名管道与匿名管道的显著区别就是必须显式的创建管道,其次,当命令结束之后,管道并不会消失,而是会继续存在,除非使用命令删除他们。

通常将命名管道称为FIFO,实际上就是队列。

语法: mkfifo [-m mode] pipe

其中,mode是chmod程序使用的一种文件类型,pipe是希望创建的管道名称。

用途:经常被用来两个进程中的通信。

例:

mkfifo fifotest
grep bash /etc/passwd > fifotest //第一个窗口上的命令
wc -l < fifotest //这是第二个窗口上的命令

如果想要去除管道,只需要rm + 管道名即可。

proc文件

proc文件时那些提供一些简单途径来检查多种类型的系统信息的伪文件。proc文件可以直接从内核中提取数据。

所有的proc文件都存放在/proc目录下,在这个目录中,可以发现每一个进程对应一个子目录。

如果想提取这些进程的信息,可以使用cat命令去找到当前有那些进程正在执行,如果进入这些目录,还可以知道这些进程的详细状态。

有一个特殊的proc文件,/proc/kcore,这个文件表示计算机的实际物理内存。可以使用ls -l选项查看这个文件的大小。

目录

根目录 子目录

目录是一个树形结构,对于每一层一定会有一个根,而用root过于麻烦,所以一般用/表示根目录。

例如 ls / 表示列举根目录下的所有文件。这样 ls /bin代表列bin目录下的所有文件。但是实际上如果列举根目录下的文件是不需要加/的,直接加上名字就好了,如果想访问根目录下子目录中的文件,就需要在子目录和子目录文件之间加一个/

例如: ls homework/bomb

mount umount挂载文件系统

在系统中,有许多设备,也就有许多个文件系统。但是如果都是完全分隔的话,没办法在不同文件系统之间进行访问,所以一定有一颗主树,然后其他树挂载在主树上,这一个个文件系统其实类似于windows下的磁盘分区。

当小的文件系统连接上主树时,我们称为挂载。小文件系统附加到主树上的目录叫做挂载点

一般来说,系统已经自动挂载好了子树,但是有时候需要我们手动挂载子树(例如插入u盘时,当然现在也是自动挂载了)。这时需要mount程序。这里不再展开

漫游根目录

目录 内容
/ 根目录
/bin 基本程序
/boot 启动系统时所需要的文件
/etc 配置文件
/dev 设备文件
/home 用户home目录
/lib 基本共享库,内核模块
/lost+found 由fsck恢复的受损文件
/media 可移动介质的挂载点
/mnt 不能挂载在其他位置的挂载点
/opt 第三方应用程序
/proc
/root 超级用户home目录
/srv 本地系统提供服务的数据
/tmp 临时文件
/usr 静态数据使用的文件系统
/var 可变数据使用的文件系统