一、文件系统概述
在Linux操作系统中,文件系统是用来组织、管理、存放文件的一套管理机制。文件系统可以有不同的格式,叫做文件系统类型(file system types)。这些格式决定信息如何被存储为文件和目录。
二、文件系统目录结构
Linux采用与Windows完全不同的独立文件存储方式。 Linux的文件系统采用分层结构。其顶层为根目录,用符号“/”表示,在根目录下是不同的子目录。 这个树状结构构成Linux中的文件系统,从而管理组织系统的所有文件。
三、文件系统类型
Linux支持的文件系统类型有ext2、ext3、ext4、vfat、ntfs、iso9660、jiffs、romfs、cramfs和nfs等。
ext2文件系统:(也称为第二扩展文件系统)旨在克服早期Linux版本中使用的Minⅸ文件系统的缺点。多年来,该文件系统直广泛应用于 Linux。但ext2中没有日志,现在基本上已被ext3和最新的ext4所取代。
ext3文件系统:向标准ext2文件系统添加了日志功能,因此是个非常稳定的文件系统的一个演化发展。它在大多数情况下提供合理的性能并且仍旧在改进。由于它在可靠的ext2文件系统上添加了日志功能,因此可以将现有ext2文件系统转换为ext3文件系统,并且在必要时还可以转换回来。
ext4文件系统:作为ext3的扩展来启动的,它通过增加存储限制和提高性能来满足更大文件系统的需求。为了保留ext3的稳定性,在2006年6月,该扩展被拆分成一个新的文件系统,即ext4。
vfat文件系统:(也称为FAT32)没有日志功能,且缺乏完整的Linux文件系统实现所需的许多特性。它可用于在 Windows和Linux系统之间交换数据,因为 Windows和Linuⅹ都能读取它不要将这个文件系统用于 Linux,除非要在 Windows和 Linux之间共享数据。如果您在一个vfat磁盘上解压缩一个 Linux归档文件,那么您将丢失权限(比如执行权限),还会丢失该归档文件中可能存储的符号链接。
NFS:网络文件系统。
ISO9660:CD-ROM标准文件系统。
四、创建文件系统
挂载:在Linux中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用mount命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂载时,要提供文件系统类型、文件系统和一个挂载点。
Linux使用mkfs命令来创建文件系统。
语法:mkfs [-t 文件系统格式] 分区设备文件名
常用参数:
示例:
① 查看当前分区
命令:fdisk
fdisk命令操作磁盘详解–查看、添加、删除、转换分区等。
#fdisk –l
② 创建分区
命令:fdisk + 硬盘设备
#fdisk /dev/sda
然后输入m显示所有的命令列示,根据示例执行后续分区操作。
创建文件系统
#mkfs –t ext4 /dev/sda1
挂载
#mount /dev/sda1 /mnt/test
挂载点要求:
目录没有被其他进程占用
目录必须事先存在
目录中原先文件会被隐藏,直到卸载
五、文件的属性与权限
1、文件命名
(1)由字母(可用汉字)、数字、下划线、圆点等字符构成。
(2)长度不超过255个字符,避免使用特殊字符?*$等
(3)同一目录下不能有相同的文件名,不同目录下可以同名。
(4)圆点“.”在第一位置时表示隐含文件。
(5)文件的属性与取名无关,文件名中不规定扩展名。
(6)区分英文字符的大小写。比如 myfile, Myfile和myFILE表示的是三个不同的文件。
2、目录、路径基础
(1)目录:目录是指包含许多文件项目的一类特殊文件。子目录、父目录、工作目录、用户主目录( Home directory)
(2)路径:由目录名和“/“(斜杠)做分隔符组成的字符串,用来表示文件或目录在文件系统中所处的层次的一种方法。路径又分绝对路径和相对路径。
(3)“.”表示当前目录,“…”表示父目录。
3、文件类型
(1)普通文件(-):用于存放数据、程序等信息的一般文件,包括文本文件和二进制文件。
(2)目录文件(d):相当于 Windows系统中的文件夹,由该目录所包含的目录项所组成的文件。
(3)套接字文件(s):套接字文件系统是一个用户不可见的,高度简化的,用于汇集网络套接字的内存文件系统,它没有块设备,没有子目录,没有文件缓冲,它借用虚拟文件系统的框架来使套接字与文件描述字具有相同的用户接口。当用户用socket(family,type,protocol)创建一个网络协议族为family,类型为type,协议为 protocol的套接字时,系统就在套接字文件系统中为其创建了一个名称为其索引节点编号的套接字文件。
(4)块设备文件(b):存取是以一个字块为单位。普通文件的处理是不必要对硬件进行过多操作的,而字符型设备和块设备就不同了,所以是以特别形式文件出现。 dev/cdrom,/dev/fd0,dev/hda都是磁盘(光驱,软驱,主硬盘),它们的存取是通过数据块来进行的。
(5)字符设备文件©:存取数据时是以单个字符为单位的。/ dev/audio是字符设备文件,对audio的存取是以字节流方式来进行的。
(6)命名管道文件§:负责将一个进程的信息传递给另一个进程,从而使该进程的输出成为另一个进程的输入。
(7)符号链接文件(l) :符号链接又叫软链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
用ln -s source_file softlink_file命令可以生成一个软链接,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作。
但删除链接文件时,系统仅仅删除链接文件而不删除源文件本身。删除软链接用rm softlink_file或者 unlink softlink_file。
4、Linux文件的组成
Linux 文件被分成两个部分:用户数据 (user data) 与元数据 (metadata)。
用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。
在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(soft link)。链接不仅解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等优势。
5、 Linux文件的链接
硬链接:硬链接复制文件inode,也就是保留文件所链接文件的索引节点信息,即使文件更名或改变、移动,硬链接文件仍然存在。
软链接:软链接仅仅指向目的文件的路径,类似于Windows下的快捷方式,如果被链接的文件更名或移动,软链接文件就无任何意义。
ln链接命令
硬链接格式:ln 源文件 链接文件
软连接格式:ln –s 源文件 链接文件
示例:
(1)在目录下创建一个文件,然后对这个文件进行链接的创建
inux@ b 09: 99:1 test nmyfile mrfi1e && echo "This is a plain text file." myfile Limuxwblvg1gg.1 This is a plain text file. IllyIlB
(2)为myfile文件创建一个硬链接,并查看一下当前目录:
linux@b109199: /test$ 1n myfile hard linux@b109199:/test$1s-1i tota1 0 10696049115179401 trw-r--r-- 2 1inux 1inux27 Apr 8 14:34 hard 10696049115179401 trw-r--r-- 2 linux linux 27 Apr 8 14:34 myfile
(3)为myfile文件创建一个软链接,并查看一下当前目录:
linux@b109199: /test$ 1n -s myfile soft linux@b109199:/test$1s-1i tota1 0 10696049115179401 -rw-r--r-- 2 1inux 1inux 27 Apr 8 14:34 hard 10696049115179401 -rw-r--r-- 2 1inux 1inux 27 Apr 8 14:34 myfile 16888498602743385 1rwxrwxrwx 1 1inux1inux 6 Apr 8 14:38 soft -> myfile
6、文件权限
Linux系统中的每个文件和目录都有访问许可权限,这是加在文件上的一个数据结构。
访问权限规定三种不同类型的用户:
文件属主(owner):文件的所有者,称为属主。
同组用户(group):文件属主的同组用户。
其他用户(others):系统内除了以上两种用户之外的所有用户。
访问权限规定三种访问文件或目录的方式:
读®:允许读取文件内容或者列目录。
写(w):允许修改文件内容或者创建、删除文件。
可执行(x):允许执行文件或者允许使用cd命令进入目录。
示例:ls –l -rw-r–r-- 1 test gtest 31 Apr 9 11:10 test.txt
第一组字符(-rw-r–r--):访问权限清单,共有10个位置。第一个字符指出文件的类型,短划线“-”代表一个文件,如果是字母“d”代表子目录。随后9个字符是根据不同用户的分类来排列的,第一组3个字符是文件属主对该文件的权限集;第二组3个字符是用户所在组对该文件的权限集;第三组3个字符是其他用户对该文件的权限集。
⊙字符“-”:代表空白权限
⊙字母“r”:代表读权限,数字代表为4
⊙字母“w”:代表写权限,数字代表为2
⊙字母“x”:代表执行权限,数字代表为1
第二组字符(1):链接个数
第三组字符( test):文件属主
第四组字符( gtest):用户分组名
第五组字符(31):文件长度
第六组字符(Apr 9 11:10 ):文件上次修改的日期和时间
第七组字符( test.txt):文件名
7、使用chmod命令更改文件属性
chmod命令用于更改文件对于某类用户的操作权限。
示例:ls –l -rw-rw–r-- 1 linux linux 31 Apr 9 11:10 test.txt (1)增加文件属主linux的执行权限(x) #chmod u+x test.txt 等价于 #chmod 764 test.txt (2)去除文件属组linux的写权限(w) #chmod g-w test.txt 等价于 #chmod 744 test.txt
8、修改文件或目录的拥有者
在Linux中,使用chown命令改变文件或目录的所有者(属主)和所属的用户组,用法为:
chown [-R]新所有者:新用户组 要改变的文件名或目录
常用参数:-R:处理指定目录以及其子目录下的所有文件
注,在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。
使用chgrp命令只能更改指定文件或目录所属的用户组,其用法为:
chgrp 新用户组 要改变所属用户组的目录或文件
常用参数:-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理
六、目录及文件操作基本命令
1、pwd:查看当前所在目录
示例:[root@test:~/test]#pwd /home/root/test
2、cd:切换目录命令
示例:[root@test:~]#cd /test [root@test:~/test]#pwd /home/root/test
3、ls:显示目录信息命令
参数:
-a: 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-l :除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-t :将文件依建立时间之先后次序列出
4、mkdir:用于创建目录命令参数:-p :确保目录名称存在,不存在的就建一个。
示例:在当前目录下创建test目录: #mkdir test
5、rmdir:删除空的目录
参数:-p :是当子目录被删除后使它也成为空目录的话,则顺便一并删除。
示例:在工作目录下的 AAA 目录中,删除名为 Test 的子目录。若 Test 删除后,AAA 目录成为空目录,则 BBB 亦予删除。 #rmdir -p BBB/Test。
6、touch:修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件
7、cp:复制文件或目录命令参数:-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-f:覆盖已经存在的目标文件而不给出提示。示例:将当前目录 test/ 下的所有文件复制到新目录 newtest 下
#cp –r test/ newtest
8、mv:为文件或目录改名、或将文件或目录移入其它位置
示例:将文件 aaa 改名为 bbb :
#mv aaa bbb
将 info 目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logs。
#mv info/ logs
将 /usr/runoob 下的所有文件和目录移到当前目录下:
# mv /usr/runoob/* .
9、rm:删除一个文件或者目录
参数:
-i: 删除前逐一询问确认。
-r: 将目录及以下之档案亦逐一删除。
-f :即使原档案属性设为唯读,亦直接删除,无需逐一确认。
示例:删除文件可以直接使用rm命令,若删除目录则必须配合选项“-r“:
# rm test.txt rm:是否删除 一般文件 “test.txt”? y # rm homework rm: 无法删除目录"homework": 是一个目录 # rm -r homework rm:是否删除 目录 “homework”? y 删除当前目录下的所有文件及目录: #rm -r *
七、查看文件内容基本命令
1、输出重定向命令
输出的内容默认是到屏幕,使用输出的重定向,将输出到屏幕的内容输出到其他地方
示例:#echo‘123456’> /1/1.txt
2、追加输出重定向
将输出重定向内容追加输出到其他地方
示例:#echo‘123456’>>/1/1.txt
3、cat:查看文件内容
参数:
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
示例:把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
cat -n textfile1 > textfile2
清空 /etc/test.txt 文档内容:
cat /dev/null > /etc/test.txt
4、grep:指定文件中查找指定字符串
示例:查找前缀有“test”的文件包含“test”字符串的文件
#grep test test*
5、more:以一页一页的形式显示文件内容
示例:从第 20 行开始显示 testfile 之文档内容:
#more +20 testfile
6、less:与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
7、head:查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
示例:显示 test.log 文件的开头 10 行:
#head test.log 显示 test.log 文件的开头 5 行: #head -n 5 test.log
8、tail:此命令从指定点开始将文件写到标准输出,将最尾部的内容显示在屏幕上,并且不断刷新,看到最新的文件内容。
八、压缩及解压缩基本命令
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
1、tar:
用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件
参数
-c:创建打包文件
-x:解开打包文件
-z:geip压缩与解压
-j:bzip2压缩与解压
-v:显示压缩与解压过程
-f:目标文件名
-C:指定解压位置
示例:
解包: #tar xvf FileName.tar 打包: #tar cvf FileName.tar DirName 解压: #tar zxvf FileName.tar.gz 压缩: #tar zcvf FileName.tar.gz DirName
2、zip:
用于压缩文件,压缩后的文件后缀名为 .zip,使用unzip命令解压。
参数:
-r:递归压缩,将自定目录下的所有子文件以及文件一起处理
-m:将文件压缩后,删除原文件
-q:安静模式,在压缩的时候不显示指令执行的过程
九、linux下创建一个指定大小的文件
1.创建一个大小为500M的文件
dd if=/dev/zero of=test.log bs=1M count=500
2.查看文件大小
[root@]$ ls -lh test.log -rw-r–r-- 1 root root 500M Mar 6 14:20 test.log [root@ ]$