Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。硬盘驱动器可以有不同的分区。这些分区通常只包含一个文件系统。每个分区一个文件系统允许对不同的文件系统进行逻辑维护和管理。Linux中的一切都被认为是一个文件,包括物理设备,如DVD-ROM、USB设备和软盘驱动器。本文主要介绍Linux 文件系统基础及相关命令。

1、目录结构

Linux的文件系统是采用级层式的树状目录结构,在此结构中最上层是根目录/,然后在此目录下再创建其它的目录。Linux文件系统是具有以下属性的文件和目录的集合。

它有一个根目录(/),其中包含其他文件和目录。

每个文件或目录由其名称、其所在目录和一个唯一标识符(通常称为inode)唯一标识。

一般情况下,根目录的inode2,而lost+found目录的inode3inode01没被使用。通过为ls命令指定-i选项,可以看到文件inode编号。它是自包含的。文件系统之间没有依赖关系。

文件数据都储存在“块”中,必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

目录有特定的用途,通常保存相同类型的信息以方便定位文件。Linux主要版本上存在的目录如下表:

目录

 

/bin

存放二进制可执行文件(ls,cat,mkdir等),

常用命令一般都在这里。

/etc

存放系统管理和配置文件

/home

存放所有用户文件的根目录,

是用户主目录的基点,

比如用户user的主目录就是/home/user,

可以用~user表示

 

/usr

用于存放系统应用程序,

比较重要的目录/usr/local 

本地系统管理员软件安装目录(安装系统级的应用)。

这是最庞大的目录,

要用到的应用程序和文件几乎都在这个目录。

/usr/x11r6 存放x window的目录

/usr/bin 众多的应用程序  

/usr/sbin 超级用户的一些管理程序  

/usr/doc linux文档  

/usr/include linux下开发和编译应用程序所需要的头文件  

/usr/lib 常用的动态链接库和软件包的配置文件  

/usr/man 帮助文档  

/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里  

/usr/local/bin 本地增加的命令  

/usr/local/lib 本地增加的库

/opt

额外安装的可选应用程序包所放置的位置。

一般情况下,我们可以把tomcat等都安装到这里。

/proc

虚拟文件系统目录,是系统内存的映射。

可直接访问这个目录来获取系统信息。

/root

超级用户(系统管理员)的主目录(特权阶级^o^)

/sbin

存放二进制可执行文件,只有root才能访问。

这里存放的是系统管理员使用的系统级别的管理命令和程序。

如ifconfig等。

/dev

用于存放设备文件。

/mnt

系统管理员安装临时文件系统的安装点,

系统提供这个目录是让用户临时挂载其他的文件系统。

/boot

存放用于系统引导时使用的各种文件

/lib

存放跟文件系统中的程序运行所需要的共享库及内核模块。

共享库又叫动态链接共享库,作用类似windows里的.dll文件,

存放了根文件系统程序运行所需的共享文件。

/tmp

用于存放各种临时文件,是公用的临时文件存储点。

/var

用于存放运行时需要改变数据的文件,

也是某些大文件的溢出区,

比方说各种服务的日志文件(系统启动日志等。)等。

/lost+found

这个目录平时是空的,

系统非正常关机而留下“无家可归”的文件

(windows是.chk)就在这里

2、文件系统命令

可以通过命令来管理文件,常用文件管理命令如下表:

命令

描述

cat filename

查看文件内容。

cd dirname

改变所在目录。

cp file1 file2

复制文件或目录。

file filename

查看文件类型(binary, text, etc)。

find filename dir

搜索文件或目录。

head filename

显示文件的开头,与tail命令相对。

less filename

查看文件的全部内容,可以分页显示,比more命令要强大。

ls dirname

遍历目录下的文件或目录。

mkdir dirname

创建目录。

more filename

查看文件的全部内容,可以分页显示。

mv file1 file2

移动文件或重命名。

pwd

显示用户当前所在目录。

rm filename

删除文件。

rmdir dirname

删除目录。

tail filename

显示文件的结尾,与head命令相对。

touch filename

文件不存在时创建一个空文件,存在时修改文件时间戳。

whereis filename

查看文件所在位置。

which filename

如果文件在环境变量PATH中有定义,那么显示文件位置。

参考文档Linux shell man命令查看帮助文档

3、df命令

管理磁盘分区时经常会使用 df (disk free) 命令,df -k 命令可以用来查看磁盘空间的使用情况(以千字节计),

例如,

$ df -k

文件系统 1K-块 已用 可用 已用% 挂载点

/dev/mapper/centos_kvm-root 38770180 28915420 9854760   75% /
devtmpfs 929164 0 929164 0% /dev
tmpfs 941432 0 941432 0% /dev/shm
tmpfs 941432 17008 924424 2% /run
tmpfs 941432 0 941432 0% /sys/fs/cgroup
/dev/vda1 1038336 145624 892712 15% /boot
tmpfs 188288 0 188288 0% /run/user/0
$

如果是英文每列的含义如下:

说明

Filesystem

代表文件系统对应的设备文件的路径名(一般是硬盘上的分区)。

kbytes

分区包含的数据块(1024字节)的数目。

used

已用空间。

avail

可用空间。

capacity

已用空间的百分比。

Mounted on

文件系统挂载点。

注意:某些目录(例如, /devices)的 kbytes、used、avail 列为0,use列为0%,这些都是特殊(或虚拟)文件系统,即使位于根目录下,也不占用硬盘空间。

df -h 查看文件系统磁盘的使用情况(单位为K、M、G),可以方便查看。

4、du 命令

du (disk usage) 命令可以用来查看特定目录的空间使用情况。du 命令会显示每个目录所占用数据块。根据系统的不同,一个数据块可能是 512 字节或 1024 字节。

例如,

$ du /data
717604 /data/mongodb_bak/mongodb_bak_list
2124224 /data/mongodb_bak/mongodb_bak_now/2021_10_15/cjavapy
2124224 /data/mongodb_bak/mongodb_bak_now/2021_10_15
2124224 /data/mongodb_bak/mongodb_bak_now
2841828 /data/mongodb_bak
4266724 /data
$

du -h 查看特定目录的空间使用情况(单位为K、M、G),可以方便查看。

$ du -h  /data
701M /data/mongodb_bak/mongodb_bak_list
2.1G /data/mongodb_bak/mongodb_bak_now/2021_10_15/cjavapy
2.1G /data/mongodb_bak/mongodb_bak_now/2021_10_15
2.1G /data/mongodb_bak/mongodb_bak_now
2.8G /data/mongodb_bak
4.1G /data
$

5、挂载文件系统

文件系统必须被挂载才能被系统使用。要查看系统上当前挂载的内容,可以使用以下命令:

$ mount
/dev/disk1s5s1 on / (apfs, sealed, local, read-only, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk1s4 on /System/Volumes/VM (apfs, local, noexec, journaled, noatime, nobrowse)
/dev/disk1s2 on /System/Volumes/Preboot (apfs, local, journaled, nobrowse)
/dev/disk1s6 on /System/Volumes/Update (apfs, local, journaled, nobrowse)
/dev/disk1s1 on /System/Volumes/Data (apfs, local, journaled, nobrowse)
map auto_home on /System/Volumes/Data/home (autofs, automounted, nobrowse)
/dev/disk2s1 on /Volumes/vm (exfat, local, nodev, nosuid, noowners)
//GUEST:@192.168.11.1/XiaoMi on /Volumes/XiaoMi (smbfs, nodev, nosuid, noowners, mounted by levizhong)
/Users/levizhong/Downloads/Microsoft Remote Desktop Beta.app on /private/var/folders/b8/tblgt5fd48x0x8pgkwj9l8fh0000gn/T/AppTranslocation/AEF28EBD-C67F-4596-B6C2-89DD9D77F8F6 (nullfs, local, nodev, nosuid, read-only, nobrowse, mounted by levizhong)
$

注意: /mnt目录是临时挂载(如CDROM驱动器、远程网络驱动器和软盘驱动器)的位置。如果需要挂载文件系统,可以使用如下格式的mount命令:

mount -t file_system_type device_to_mount directory_to_mount_to

例如,

mount -t ext4 /dev/sdb1 /sdb1

6、卸载文件系统

要从系统中卸载(删除)文件系统,可以通过挂载点或设备使用umount命令。

例如,

$ umount /sdb1

7、用户和组配额

用户和组配额提供了一种机制,通过这种机制,单个用户或特定组内的所有用户所使用的空间量可以被限制在管理员定义的值内。

配额围绕两个限制操作,如下:

软限制:如果用户超过指定的空间,会有一个宽限期,等待用户释放空间。

硬限制:没有宽限期,超出指定空间立即禁止操作。

管理配额可以使用命令如下表:

命令

说明

quota

显示磁盘使用情况以及每个用户组的配额。

edquota

编辑用户和群组的配额。

quotacheck

查看文件系统的磁盘使用情况,创建、检查并修复配额文件。

setquota

设置配额。

quotaon

开启用户或群组的配额功能。

quotaoff

关闭用户或群组的配额功能。

repquota

打印指定文件系统的配额。

推荐文档