
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Linux文件系统及磁盘命名
文章目录

文件系统(File System)是文件在逻辑上的组织形式,它以一种更加清晰的方式来存放各个文件。
在 Linux 系统中一切皆为文件(其中包括计算机的各种软硬件信息)。Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户看到的文件、目录、软链接及文件保护信息等都存储在其中。
在Linux ext2/ext3格式的文件系统下,针对文件的文件名长度限制可分为:
1. 单一文件或目录的文件名的最大长度为255个字符。
2. 包含完整路径名称及目录在内的完整的文件名长度为4096个字符。
Linux一般对组成文件名的字符没有限制,但最好可以避免一些特殊的字符,如* ? <> ;@![]|“‘{}等。
Linux的文件类型大致可分为5类。利用ls –l命令查看文件信息的第1列显示的10个字符中的第1个字符即为文件的类型。常见的一般文件为[-],目录文件为[d],在/dev目录下执行ls –l命令可以看到第1列的第1个字符出现了[ c ]、[ b ]、[ l ]等,如下所示。

(1) 普通文件第1个字符为[ - ]
文本文件(ASCII):采用ASCII编码方式,可编辑,可修改。
(2) 目录文件(directory)第1个字符为[ d ]
存放的内容是目录中的文件名和子目录名,第一属性为[ d ]。
(3) 设备文件(device)
用于用户访问物理设备所用,分为块设备和字符设备文件。与系统外设及存储等相关的文件,通常都集中在/dev目录下。块设备第1个属性为[ d ],字符设备第1个属性为[ c ]。
(4) 链接文件(link)第1个字符为[ l ]
软链接文件:目标文件和链接文件可以跨越索引点,相当于文件的快捷方式,第1个属性为[ l ]。对于软链接删除了源文件,则符号链接文件失去意义,删除符号链接文件,不影响源文件。
硬链接文件:链接同一索引点中的文件,相当于文件的副本。两个文件指向同一存储区,内容、长度相同,删除一个文件不影响其他文件。
(5) 管道文件(FIFO,pipe)第1个字符为[ p ]
FIFO也是一种文件类型,它主要的目的是解决多个程序同时访问一个文件所造成的错误。缓存队列,第1个属性为[ p ]。
在windows中区分文件类型依据的是文件的扩展名,比如whb.txt、zj.exe、qianru.doc、dianshang.mp4、wangluo.rar等。
在Linux系统中一个文件是否能被执行,和其扩展名没有太大的关系,主要与文件的属性有关。Linux下的文件扩展名不是给机器看的,而是给人看的,因此我们创建一些文件时,最好还是加扩展名,这样不但在应用时很方便,而且可以根据扩展名了解关于此文件的更多信息。
Linux系统中常用的一些扩展名如下:
.sh:脚本或者批处理文件(scripts);
.Z、.tar、.tar.gz、.zip、.tar.bz2:经过打包的压缩文件;
.html、.php:网页相关文件;
file.so:这类是库文件;
file.doc、file.obt:这是OpenOffice能打开的文件。
用一些工具创建的文件,其后缀也不相同,就看我们用什么工具了,比如Gimp、Gedit、OpenOffice等工具,创建出来的文件后缀名也是不一样的。
在Linux操作系统下面,所有的文件与目录都是由根目录“/”开始的,这是所有文件与目录的源头。然后逐渐扩展出枝干,就像一棵倒置的树,所有的文件和外部设备都以文件的形式挂结在这个文件树上,包括硬盘、U盘、光驱、调制解调器等,也正因如此习惯上将Linux的这种目录配置方式称作“目录树”。Linux系统中的这棵树具有以下特点:
Linux系统采用虚拟文件系统技术(VFS),结构采用倒立树状、VFS使Linux支持以下文件系统所支持的的文件类型(其中常用的为ext2,ext3)。
ext2:二次扩展;
ext3:三次扩展;
SWAP:交换文件系统;
FAT、FAT32:Windows分区格式;
NTFS:默认不支持,需要特定的模块;
VFAT:虚拟FAT;
SYSV:UNIX的文件系统;
HPFS:OS/2的文件系统;
ISO9660:光盘文件系统;
NFS:网络文件系统。
根目录下用ls -l命令来查看这棵树中的所有枝干

(1)/bin
bin是binary的缩写。这个目录是对UNIX系统习惯的沿袭。用于存放引导启动Linux系统所需的命令或普通用户可能用的命令(可能在引导启动后)
(2)/boot
启动Linux操作系统所必须的文件,其中包括Linux内核所依赖的配置文件。
(3)/dev
在Linux中,任何设备与接口都是以文件的形式存储在这个目录中。如果想访问某个设备,只能通过访问该目录下的某个文件来实现对设备的访问。
(4)/etc
该目录下存储着几乎所有Linux系统下的主要配置文件。例如:用户的账号密码文件。
(5)/home
系统默认的用户主目录(home directory),只要启动了创建主目录的功能,在每次创建账号的时候都会在该目录下为创建的账号新建一个主目录。
(6)/lib
开机时用到的函数库。
(7)/lost+found
当文件发生错误时,将一些丢失的文件碎片放到该目录下。
(8)/media
放置的是可以卸载的设备,如:光盘、U盘等。
(9)/root
root用户的根目录。
(10)/sbin
类似bin,但不给普通用户使用,在必须且允许时可以使用。
(11)/selinux
存放的是内存中的信息,不会占用任何硬盘空间,是SELinux的执行目录。
(12)/tmp
该目录存放一些临时文件,任何人都能访问。
(13)/mnt
/mnt目录通常包含一些子目录,每个子目录是某种特定设备类型的一个挂载点。
一块磁盘只有通过分区和格式化的操作之后才可以挂载并使用。
不同的操作系统使用的文件系统类型是不一样的,Windows系统里,默认支持使用的文件系统格式为FAT32和NTFS;Linux系统里,最常用的文件系统格式为ext4(The Fourth Extended File System),同时也向下兼容ext2和ext3的文件系统。
ext4文件系统具有如下优点:
① 支持更大的文件系统和文件:ext4可以支持1EB(1 048 576TB,1EB=1024PB,1PB=1024TB)的文件系统,以及单个最大16TB的文件;支持无限数量的子目录。(ext3支持32 000个子目录)。
② 更快的速度:ext4引入的Extends技术和优化技术,使得ext4文件系统在进行大文件的操作、数据分配以及执行fsck命令时的速度都提高了很多。
③ 更大的inode:在ext4文件系统中,默认inode大小为256B,扩展了inode中存放的文件属性(纳秒时间戳和inode版本等)。
一块磁盘的MBR分区表中最多只能包括4个分区的记录(主分区或者扩展分区的记录),如果需要更多的分区,则需要建立一个扩展分区,然后在该扩展分区上建立逻辑分区,一个扩展分区可以包括最多23个逻辑分区,每个逻辑分区上有一个逻辑磁盘驱动器。
在操作系统中,是看不到扩展分区的,因为扩展分区是不能直接使用的,是没有盘符的,只有在扩展分区里面再划分逻辑分区后才会有盘符,才可以使用。
虽然硬盘分区为分为“主分区”、“扩展分区”、“逻辑分区”三种类型,但是只有主分区能完成操作系统引导过程,一般需要安装多个操作系统的时候,会建立多个分区,一块硬盘最多设置四个主分区,或者一至三个主分区加一个扩展分区。
一般主板上有2个IDE接口,一共可以安装4个IDE设备。
在Linux下对IDE的设备是以 hd 命名的,主IDE上的主从两个设备分别为had和hdb,第二个IDE接口上的主从两个设备分别为hdc和hdd。一般硬盘安装在主IDE的主接口上,所以其名称通常是hda。
IDE 设备的名称是固定的,和内核检测的顺序无关。
SCSI接口、USB接口、SATA接口设备是用 sd 命名的,第一个设备是sda,第二个设备是sdb,以此类推。该类接口的磁盘在系统内没有固定的顺序,而是靠内核的检测顺序决定其命名。
Linux系统内,磁盘设备也被看成是一种类型的文件。
IDE设备
| IDE | MASTER | SLAVE |
|---|---|---|
| IDE1(primary) | /dev/had | /dev/hdb |
| IDE2(secondary) | /dev/hdc | /dev/hdd |
设备总结
| 设备类型 | 设备名称 |
|---|---|
| IDE接口硬盘 | /dev/hd[a-d] |
| SCSI/SATA/USB/Flash接口的硬盘 | /dev/sd[a-p] |
| 打印机 | /dev/lp |
| CDROM | /dev/cdrom |
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只