文章目录
1 一切都是文件
Linux系统下,命令、磁盘、文件、目录等都是文件
2 文件的分类
1.文件的表示
- -普通文件 可以cat more出来
- d 目录文件:目录,存储文件的唯一地方
- l 链接文件:指向同一个文件或目录的文件
- 磁盘设备文件(在/dev下):
b 块设备文件:与系统外设相关的。支持以块为单位进行随机访问。
c 字符设备文件:支持以字符为单位进行访问 - p 管道(PIPO)文件:提供进程之间通信的一种方式。
- s 套接字(socket)文件:与网络通信有关。
2.查看文件相关信息
ls -l
file 【文件名】
stat
3 文件系统
层级结构:目录和文件的一个组合层级结构,起点是根/,组成一个倒置的树状结构
[root@yr /]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 #第一个文件系统(相当于windows的C盘)
35G 2.4G 31G 8% /
/dev/sda1 99M 23M 71M 25% /boot #另一个文件系统/另一个分区
tmpfs 995M 0 995M 0% /dev/shm
/dev/sr0 3.6G 3.6G 0 100% /media/OL5.7 x86_64 dvd 20110728
文件系统指文件存在的物理空间
Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构
一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统(因为一切都是文件)
4 文件系统filesystem的命名规则
- 严格区分大小写
- 目录也是文件,在同一个路径下,两个文件不能同名
- 支持使用除了/以外的所有字符
- 最长不能超过255字符
5 filesystem类型
-
ext2:早期Linux中常用的文件系统
-
ext3:ext3升级版,带日志功能
-
FAT:Windows XP操作系统的文件系统
-
NTFS:Windows NT/XP操作系统采用的文件系统
-
NFS:网络文件系统,用于远程文件共享
-
XFS:新版本的Linux的文件系统,支持大容量文件
-
MS-DOS:MS-DOS文件系统
-
VFAT:Windows 95/98操作系统的文件系统
-
RAMFS:内存文件系统,速度很快
-
HPFS:OS/2操作系统采用的文件系统
-
PROC:虚拟的进程文件系统
-
ISO9660:大部分光盘所采用的文件系统
-
ufsSun:OS所采用的文件系统
-
NCPFS:Novell服务器所采用的文件系统
-
SMBFS:Samba的共享文件系统
-
JFS:IBM的AIX使用的日志文件系统
-
ReiserFS:基于平衡树结构的文件系统
6 文件系统特性
- 当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode和data block
- 实际数据放置在data area,文件在一个文件系统的唯一标识在inode area
- inode是(目录、文件)文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个文件的inode。inode存储了文件的重要参数,其中唯一标识称作Inumber,其他信息还有创建时间ctime(create time)、修改时间mtime(modified tine)、owner、group、读写权限、数据所在的block号等。
[root@yr /]#ls -ldi hr
98307 drwxrwxrwx 3 root hr 4096 Jan 13 11:34 hr
# 都是98307
[root@yr /]#stat hr
File: `hr'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 98307 Links: 3
Access: (0777/drwxrwxrwx) Uid: ( 0/ root) Gid: ( 5001/ hr)
Access: 2019-01-14 10:45:24.000000000 +0800
Modify: 2019-01-13 11:34:46.000000000 +0800
Change: 2019-01-13 11:55:20.000000000 +0800
7 链接文件
7.1 软链接
- 软链接:类似于Windows的快捷方式。软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它link的文件,只是作为一个指向的动作,所以当来源文件被删除,软连接的文件无法开启,因为找不到原始档名。
- 它实际上是⼀个特殊的文件。在符号连接中,文件实际上是⼀个文本文件,其中包含的有另⼀文件的位置信息。比如:A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是⼀个无效的链接。
- ln -s 源文件及路径 目标路径及文件名
[root@yr /]#ln -s /root/install.log /l_install.log
[root@yr /]#ll /l_install.log
lrwxrwxrwx 1 root root 17 Jan 14 13:06 /l_install.log -> /root/install.log
找不到源文件时,会红色闪烁
7.2 硬链接
- 硬链接:硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配⼀个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同⼀索引节点是存在的。⽐比如:A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即⼀个inode节点对应两个不同的⽂文件名,两个文件名指向同一个⽂文件,A和B对⽂文件系统来说是完全平等的。删除其中任何一个都不不会影响另外一个的访问。
- ln -h 源文件及路径 目标路径及文件名
硬链接类似于Windows的副本。
[root@yr /]#ln /root/install.log /h_install.log
[root@yr /]#ll *_install.log
-rw-r--r-- 2 root root 7 Jan 14 13:11 h_install.log # 显示的是2
lrwxrwxrwx 1 root root 17 Jan 14 13:06 l_install.log -> /root/install.log
[root@yr /]#ls -li /*_install.log
9306855 -rw-r--r-- 2 root root 7 Jan 14 13:11 /h_install.log
98313 lrwxrwxrwx 1 root root 17 Jan 14 13:06 /l_install.log -> /root/install.log
[root@yr /]#
[root@yr /]#ls -li /root/install.log
9306855 -rw-r--r-- 2 root root 7 Jan 14 13:11 /root/install.log # 号已经对应上了
如果vi一个和源文件同名的文件,软连接会傻傻的连到名字跟源文件名字一样的文件上,而硬链接根据inode号会找到源文件。
修改硬链接文件,源文件也随之改变,硬链接文件相当于隐分身。如果删除源文件,硬链接文件还存在,并且内容与源文件old相同,再创建一个和源文件old名字相同的文件new,软链接直接链接到new,而硬链接文件还链接在old上。
7.3 软硬连接的区别:
- 软链接是以路径的形式存在的,硬链接是以文件副本的形式存在
- 软链接可以跨文件系统,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接(闪红色)
- 软链接可以对目录进行链接,硬链接不允许给目录创建链接
- 软链接是符号链接,硬链接是实体链接
8 磁盘分区
磁盘分区的两种方式:fdisk和LVM
8.1 fdisk分区工具
- 分区将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当作一个独立的磁盘使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。
- 每个硬件设备都映射到一个系统的文件。硬盘、光驱等IDE或SCSI设备也不例外。
- 不同的接口链接进来的文件名不同。hd开头的是IDE设备(光驱);对于SDSI设备(硬盘SATA),分配由sd前缀组成的文件。
- 为什么要分区:1)防止数据丢失。2)增加磁盘空间使用效率:可以用不同的区块大小来格式化分区。(如果给1K/次的程序分配10M,要读10240次,和系统交互浪费时间;如果文件都是1K,而硬盘4K,那么每存储一个文件都会浪费3K,浪费资源)3)数据激增到极限不会让系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起系统挂起。
1.查看磁盘信息
1)fdisk -l
[root@yr /]#fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes # 再添加一块就是sdb、sdc、sdd
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
# 磁盘是42.9GB,有255个磁面,63代表一个磁面的扇区,9729个磁柱,每个cylinders的容量是8225280bytes(约为8M)
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux # 磁盘sda1被划分成了2块,分别是sda1和sda2
/dev/sda2 14 5221 41833260 8e Linux LVM
Disk /dev/dm-0: 38.6 GB, 38621151232 bytes
255 heads, 63 sectors/track, 4695 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-0 doesn't contain a valid partition table
Disk /dev/dm-1: 4194 MB, 4194304000 bytes
255 heads, 63 sectors/track, 509 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-1 doesn't contain a valid partition table
2)/dev/sd* 也可以查询
但是没有fdisk -l显示的全。
2.fdisk对硬盘进行分区
fdisk 【磁盘名】
step1:
在虚拟机里添加新磁盘后,再查看磁盘信息。
[root@yr ~]#fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 5221 41833260 8e Linux LVM
Disk /dev/sdb: 21.4 GB, 21474836480 bytes # 新添加的磁盘叫sdb
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table # sdb还没有分区表
step2:
[root@yr ~]#fdisk /dev/sdb 使用fdisk命令
step3
Command (m for help): n # n新建一个分区
Command action
e extended # 扩展
p primary partition (1-4)
p
Partition number (1-4): 1 # 设定分区编号
First cylinder (1-2610, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610): size^H^H
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610): 5GB
# +大小 设定大小(如果不写加号,就自动生成是到多少磁道)或者写到多少磁道
Command (m for help): P # p打印分区表
Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 5 40131 83 Linux # 多了一个分区
Command (m for help): W # w把分区写进分区表,保存并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@yr ~]#fdisk -l # 再查看磁盘信息
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 5221 41833260 8e Linux LVM
Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 5 40131 83 Linux
命令:
p:打印分区表
n:新建一个分区
d:删除一个分区
q:退出不保存
w:把分区写进分区表,保存并退出
8.2 LVM(Logical Volume Manager)
可以动态扩展
LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,LVM对分区进行扩缩空间大小非常安全快捷而且方便管理。
1.四个概念
- PV(physical volume)物理卷:一块物理磁盘被格式化为一个PV,PV是能被Linux接受的。
- VG(Volume group)卷组
- LV(logical volume)逻辑卷
- PE(physical extend) 物理拓展
物理上是一个一个磁盘,然后通过Linux将它们放在一起,再通过逻辑分为逻辑卷,逻辑卷可以被任意的划分
2.流程
1)先将物理磁盘格式化,指定为PV,空间被划分为一个个的PE。
2)不同的PV加入到同一个VG,不同PV的PE全部进入到VG的PE池里。
不论磁盘是物理的还是逻辑的,他们都是PE。
3)LV基于PE创建,大小为PE的整数倍(组成LV的PE可能来自不同的物理磁盘),现在的LV就可以直接格式化后挂在使用了。
3.通过LVM分区
step1:创建PV
[root@yr ~]#pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
step2:查看PV
[root@yr ~]#pvdisplay
--- Physical volume ---
PV Name /dev/sda2 # 设备名
VG Name VolGroup00 # 这个PV逻辑卷所属的物理卷
PV Size 39.90 GB / not usable 20.79 MB
Allocatable yes (but full)
PE Size (KByte) 32768 # 默认值
Total PE 1276
Free PE 0
Allocated PE 1276
PV UUID t0tHsF-yL8M-THw1-bZas-5tIe-H4eb-cYrKrK
# UUID是物理卷设备的唯一编号
"/dev/sdc" is a new physical volume of "10.00 GB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name # 目前还没指定给哪一个VG使用,所以现在是空的
PV Size 10.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID rAYYMw-oz76-HTB3-qrVj-nyuy-ywJy-bRX4bI
step3:查看VG
[root@yr ~]#vgdisplay
--- Volume group ---
VG Name VolGroup00 # 目前只有一个VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 39.88 GB
PE Size 32.00 MB
Total PE 1276
Alloc PE / Size 1276 / 39.88 GB
Free PE / Size 0 / 0
VG UUID NwSZeh-WrqL-1UPz-4Kva-TgOm-ZrwL-onyl55
step4:创建新VG
[root@yr ~]#vgcreate vg_data /dev/sdc创建一个VG名为vg_data,pv_path是/dev/sdc
step5:查看已有的VG有哪些LV
[root@yr ~]#lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00 # LV名字
VG Name VolGroup00 # 这片蛋糕从哪里切的
LV UUID HTcMa4-Ugik-HeOP-VzCT-Ymuw-BNfV-tlR12v
LV Write Access read/write
LV Status available
# open 1
LV Size 35.97 GB
Current LE 1151
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00 # 和上面的LV属于同一个VG
LV UUID AeUYgI-LrPY-2rF3-zhLD-Pumc-zagT-jbDPrc
LV Write Access read/write
LV Status available
# open 1
LV Size 3.91 GB
Current LE 125
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
- 查看内存信息
[root@yr ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 # 根目录下的东西都是 LogVol00的
35G 2.4G 31G 8% /
/dev/sda1 99M 23M 71M 25% /boot
tmpfs 995M 0 995M 0% /dev/shm
/dev/sr0 3.6G 3.6G 0 100% /media/OL5.7 x86_64 dvd 20110728
step6:创建新LV
[root@yr ~]#lvcreate -n lv_00 -L 2G vg_data 在vg_data这个VG里创建一个名为lv_00,大小为2G的LV
Logical volume "lv_00" created
- 查看LV信息
[root@yr ~]#lvdisplay
--- Logical volume ---
LV Name /dev/vg_data/lv_00
VG Name vg_data
LV UUID h35oO9-2eWb-P8Th-6ON2-Ydsh-z31z-f1ddCS
LV Write Access read/write
LV Status available
# open 0
LV Size 2.00 GB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
删除是lvremove vgremove pvremove
[root@yr ~]#lvremove -f /dev/vg_data/lv_01
Can't remove open logical volume "lv_01"
[root@yr ~]#umount /dev/vg_data/lv_01
[root@yr ~]#lvremove /dev/vg_data/lv_01
Do you really want to remove active logical volume lv_01? [y/n]: y
Logical volume "lv_01" successfully removed
9 格式化
用来在特定的分区上建立Linux文件系统
mkfs.ext3 /dev/sdb1
# 或(写法不同,用法相同)
mkfs -t ext3 /dev/sdb1
mkfs -V -t 【文件系统】 【存储设备】
-V 显示详细信息
-t 指定文件系统类型,默认为ext2,还有ext3、nfs、xfs等
-c 在建立文件系统前,检查该分区是否有坏道
[root@yr ~]#mkfs -t ext3 /dev/vg_data/lv_00
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
10 blkid用于显示块设备
- blkid显示关于可用块设备的信息,可以识别一个块设备内同的类型(如文件系统、交换区)以及从内容的元数据(如卷标或UUID字段)中获取属性
- 主要作用有两类:用指定的键值对搜索一个设备
[root@yr ~]#blkid
/dev/mapper/VolGroup00-LogVol01: TYPE="swap"
内存是40G,但根目录只占用了35G,说明剩下的这一部分空间作为虚拟内存使用了
/dev/mapper/VolGroup00-LogVol00: UUID="9c10d30b-b27e-404f-a706-1e3a389c0381" TYPE="ext3"这一部分空间被格式化后类型是ext3
/dev/sda1: LABEL="/boot" UUID="cd5502db-9423-4b09-ba86-58b32f9b6b29" TYPE="ext3"
/dev/VolGroup00/LogVol00: UUID="9c10d30b-b27e-404f-a706-1e3a389c0381" SEC_TYPE="ext2" TYPE="ext3"
/dev/VolGroup00/LogVol01: TYPE="swap"
/dev/mapper/vg_data-lv_00: UUID="1258f4aa-73eb-4cff-a3d6-aaae30e44886" SEC_TYPE="ext2" TYPE="ext3"
根目录是用LVM进行管理的,可以动态扩展,sda1是用fdisk分区来的,和LVM的区别在于无法再扩展了。一般都采用LVM这种方式进行磁盘划分和日后的管理。