1、目录结构
Linux的文件系统是采用级层式的树状目录结构,在此结构中最上层是根目录/
,然后在此目录下再创建其它的目录。Linux文件系统是具有以下属性的文件和目录的集合。
它有一个根目录(/
),其中包含其他文件和目录。
每个文件或目录由其名称、其所在目录和一个唯一标识符(通常称为inode)唯一标识。
一般情况下,根目录的inode
为2
,而lost+found
目录的inode
为3
。inode
为0
和1
没被使用。通过为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中有定义,那么显示文件位置。 |
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 | 打印指定文件系统的配额。 |