本章Blog相关Linux知识点
Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 系统中的文件、目录、软连接及文件保护信息等都存储在其中。按照名称进行存取。
磁盘:磁道,扇区 ,柱面 ,固定角速度 ,平均寻道时间
MBR :master boot recoard 主引导记录 (512字节),存放bootloader (引导加载器 446字节)+ 磁盘分区 (64字节)
一块磁盘最多分为4个主分区 ,或者3主分区1扩展分区 ,磁盘在Centos 系统中表示为/dev
磁盘接口分为:IDE , SCSI ,SATA ,SAS ,USB ,Centos 系统表示为/dev/sd[a-z][1-n] ,其中[1-4]代表了主分区 ,[5+]代表了逻辑分区
光盘 : /dev/cdrom /dev/sr0 /dev/dvd [-t iso9600]
ID:对应默认的文件系统 ,节点(Inode号)
Inode 存放文件属性:Inode号,文件的时间戳,数组 ,权限 ,文件存放位置。
磁盘块(block) 1K ,2K ,4K
元数据区 、数据区 、日志区
文件系统检测和修复的过程
遍历所有磁盘文件
日志文件分区,保留元数据(写操作,大小 ,修改),若数据保存完成,把元数据转移到Inode 分区 ,若发生断电 ,文件检测日志区即可。检测扫描日志分区日志文件即可 ,加速系统检测
系统检测机制
超级块(super block)存放块组分配信息 ,整个分区的元数据
建立(Inode)位图 ,块位图 便于查看空闲Inode 号及 空闲磁盘块
VFS:virtual file system 虚拟文件系统
基本文件系统:ext2 ,ext3 ,ext4 ,xfs ,JFS, Vfat ,NTFS
交换分区:swap
集群文件系统:GFS2 ,OCFS2
网络文件系统:NFS ,smbfs
光盘文件系统:ISO9600
文件系统根/ (文件系统的访问入口)在内核中 ,但根/ 中的文件在磁盘上 ,内核也是保存到磁盘中
/bin ,/sbin 存放Centos 系统的可执行程序
/lib ,/lib64 存放Centos 系统的库文件
/etc 存放系统的配置文件
/boot 存放系统的系统引导文件,如内核 ,bootloader ,grub 等
/home 用户的家目录
/root 管理员家目录
/dev 设备文件存放目录
/media ,/mnt 专用挂载位置,通常用来挂载便携式或存储设备
/misc /opt 备用目录,通常用来安装第三方文件
/proc /sys 伪文件系统 ,如内核参数的映射及配置外围设备的参数
/tmp 临时文件系统
/var 频繁发生变化的文件目录
磁盘分区及文件系统管理
[root@study ~]# fdisk -l /dev/sd[a-z] 查看分区
[root@study ~]# fdisk /dev/sda 创建磁盘分区
d :删除分区
n :新建分区
p :列出已有分区
t :调整分区ID
l :列出内核支持的分区类型
w :存盘并退出
q :不保存退出
m :获取帮助
centos 5 :# parprobe 内核重读磁盘
Centos 6 :# partx -a 或 # kpartx -l ; 执行kpartx -l /dev/sda 再执行kpartx -af /dev/sda 再执行 partx -a /dev/sda
# mke2fs 创建文件系统
-t fstype /dev/somdevice 指定文件类型后,对磁盘进行格式化
-j 相当于-t ext3 ,专门创建ext3文件
-L label 指定卷标名称
-b {1024/2048/4096} 指定块大小
-i # #个字节预留一个inode
-I # 指定Inode 大小
-N # 直接指定预留多少个Inode
-m 预留管理空间的百分比
-O 指定分区特性
例:#mke2fs -b 2048 -m 2 -t ext3 /dev/sdb1 对磁盘/dev/sdb1 创建ext3格式文件系统,并指定管理空间百分比为2% ,块大小为2048字节
# e2label /dev/device 查看卷标
# e2label /dev/device label 指定磁盘卷标 ,相当于 #mke2fs -L /dev/device
创建ext4 文件系统 方式: mkfs -t ext4 =mke2fs -t ext4 =mkfs.ext4
创建ext3文件系统方式: mkfs -t ext3 =mke2fs -t ext3 =mkfs.ext3 =mke2fs -j
mke2fs配置文件: /etc/mke2fs.conf , /proc/meminfo (内存信息列表), /proc/cpuinfo (cpu信息列表),/proc/partitions (磁盘信息列表),/proc/mounts (挂载信息), /etc/fstab (磁盘挂载配置文件)
# blkid /dev/somedevice 查看磁盘设备信息,UUID 、type 及Label
# dumpe2fs -h /dev/somedevice 查看并显示磁盘超级快信息
# tune2fs 调整磁盘属性信息(块大小不可变)
-l /dev/somedevice 查看超级块中的详细 ,相当于 dumpe2fs -h
-L label 设定卷标
-m 调整预留管理员百分比
-j 如果原来的文件系统文ext2 ,则提升为ext3
-o [^]mount-options[,...] 设定其默认挂载选项
-O [^]feature[,...] 调整分区特性
# tune2fs -o mount-option 设备 ,例 #tune2fs -o acl /dev/sda1 增加acl 功能 # tune2fs -O ^dir_index /dev/sda7
# tune2fs -o ^mount-option 设备 ,如 #tune2fs -o ^acl /dev/sda1 取消acl 功能 # tune2fs -O dir_index /dev/sda7
# fsck 修复并检测
-t fstype /dev/somedevice 以fstype类型检测磁盘
-a 自动修复错误
-r 交互修复错误
# e2fsck 修复并检测
-f 强制检测
-y 对问题自动回答为yes
例# e2fsck -f -y /dev/sda7 修复并检测/dev/sda7 磁盘
磁盘交换分区
创建交换分区步骤 :
1、通过# fdisk /dev/sda 新建磁盘 /dev/sda7 ,调整磁盘为swap 类型
2、内核加载磁盘列表,再执行kpartx -af /dev/sda 再执行 partx -a /dev/sda
3、创建分区为swap文件系统并启动swap 分区
# mkswap 创建交换分区文件系统
-l label 设置卷标
-f label 强制创建
# swapon /dev/somedevice 启用swap 分区
-a 启用所有的swap 分区选项
-p # ,指定优先级
# swapoff /dev/somedevice 启用swap 分区
-a 启用所有的swap 分区选项
交换分区:
linux使用内存机制:/proc/sys/vm/swapiness
多大为好: 物理内存2G - 4G ,使用swap 为4G
物理内存小于2G ,使用 2* 内存
物理内存大于8G ,使用swap 为4G
查看内存空间使用状态:
# cat /proc/meminfo
# free -m (代表MB) -g(代表GB) # free -g
[root@study ~]# free -m
total used free shared buffers cached
Mem: 1861 341 1520 0 89 132
-/+ buffers/cache: 118 1742
Swap: 3999 0 3999
Buffers (缓冲) 代表加速写操作
Cached (缓存) 代表加速读操作
举例:分配/dev/sda7 分区空间为2G ,并将其配置为swap分区
[root@Study ~]# free -m 查看系统内存使用 total used free shared buffers cached Mem: 4231 187 4043 0 4 45 -/+ buffers/cache: 137 4094 Swap: 4095 0 4095 [root@Study ~]# fdisk /dev/sda 磁盘分区,并修改分区类型 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n First cylinder (10122-16579, default 10122): Using default value 10122 Last cylinder, +cylinders or +size{K,M,G} (10122-16579, default 16579): +2G Command (m for help): t Partition number (1-7): 7 Hex code (type L to list codes): 82 Changed system type of partition 7 to 82 (Linux swap / Solaris) Command (m for help): p Disk /dev/sda: 136.4 GB, 136365211648 bytes 255 heads, 63 sectors/track, 16578 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00083797 Device Boot Start End Blocks Id System /dev/sda1 * 1 39 307200 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 39 1951 15360000 83 Linux /dev/sda3 1951 2473 4194304 82 Linux swap / Solaris /dev/sda4 2473 16579 113306624 5 Extended /dev/sda5 2474 10122 61440000 8e Linux LVM /dev/sda6 2473 2473 1813 83 Linux /dev/sda7 10122 10383 2096840 82 Linux swap / Solaris Partition table entries are not in disk order Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. [root@Study ~]# kpartx -af /dev/sda7 内核重读磁盘信息 [root@Study ~]# partx -a /dev/sda7 [root@Study ~]# cat /proc/partitions major minor #blocks name 8 0 133169152 sda 8 1 307200 sda1 8 2 15360000 sda2 8 3 4194304 sda3 8 4 1 sda4 8 5 61440000 sda5 8 6 1813 sda6 8 7 2096840 sda7 [root@Study ~]# mkswap -f /dev/sda7 创建swap文件系统 Setting up swapspace version 1, size = 2096836 KiB no label, UUID=42b4b29c-c002-4e6e-83f1-9b6107ce3dbe [root@Study ~]# swapon /dev/sda7 启动swap 分区 [root@Study ~]# free -m 对比之前的free选项,发现swap分区增加了2G total used free shared buffers cached Mem: 4231 188 4042 0 4 45 -/+ buffers/cache: 138 4092 Swap: 6143 0 6143 [root@Study ~]# swapoff /dev/sda7 关闭swap分区 [root@Study ~]# free -m total used free shared buffers cached Mem: 4231 187 4043 0 4 45 -/+ buffers/cache: 137 4093 Swap: 4095 0 4095
磁盘挂载
# hdparm 获取或设置 SATA/IDE 硬盘属性信息
-I /dev/sda 查看磁盘信息
-i /dev/sda
-g /dev/sda 显示磁盘布局信息
-t 查看buffered disk 读取速度(硬盘读写)
-T 查看缓存读写速度
挂载类命令,mount ,unmount ;
挂载方式:手动挂载,按需挂载 ,开机自动挂载;若挂载点存有数据,重新挂载后则原始数据将被隐藏
挂载:
1、选择空闲路径
2、事先目录要存在
卸载:
1、空闲时可以卸载
# mount [options] [-t fstype] [-o options] 设备 挂载点
[options] :命令的选项
[-o options] :挂载时启动分区特性
#mount [options]:
直接# mount,显示当前系统所有已被挂载的分区
-a 自动挂载所有(/etc/fstab 文件中)支持自动挂载的设备
-t fstype 指定文件系统ext类型
-r 只读挂载
-w 读写挂载
-L label 以卷标指定挂载设备 或 LABLE=“MYDATA”
-U UUID 以UUID指定挂载设备
-n 不更新/etc/mtab 文件
--bind 把目录挂载到目录段 例 #mount --bind /usr/ /mnt
-o [ options ]
async 异步I/O ,提高磁盘性能
sync 同步I/O
noatime /atime 是否更新文件访问时间戳 ,建议noatime
diratime /nodiratime 是否更新目录访问时间戳
exec /noexec 是否允许执行二进制文件
_netdev 网络启用之前,避免挂载网络文件
remount 重新挂载 ,例 # mount -o remount,rw / 重新以读写方式挂载/ 根
acl 启动acl
defaults : rw ,suid ,dev ,exec ,auto ,nouser ,async ,relatime
挂载光盘:
# mount -t iso9660 /dev/cdrom /mnt
查看占用挂载的设备进程
# fuser 查看被挂载设备使用的进程
-v 显示进程正在访问的路径 。例:# fuser -v /mnt
-km 剔除访问该挂载设备的用户
# df [OPTION]... [DEVICE]…查看磁盘空间使用状态报告
-h human-read
-i Inode 使用
-P Posix
# du 评估文件占用磁盘空间情况 (与ls 相比较)
-sh 目录共占用磁盘的大小
[root@study ~]# cat /etc/fstab 显示文件系统挂载表
UUID=29e0a74e-d489-42bb-a1ac-6c29927293e3 /boot ext4 defaults 1 2
/etc/fstab 文件中定义的文件系统挂载表选项:
1、挂载设备名(格式可以是:设备文件名;LABEL="label" ;UUID=“uuid”)
2、挂载点 (swap 分区挂载点为swap)
3、类型 ( 文件类型 ,ext3 ,ext4 等)
4、Defaults (挂载选项,多个选项键使用逗号分隔,如 defaults,acl )
5、存储频率 (0代表从不备份 ,1代表每日备份 ,2代表每2日备份)
6、自检次序(0代表不自检;1表示首先自检,通常只能被/ 使用;2代表1自检后自检)
若要实现分区或磁盘自启动 ,添加以上选项到/etc/fstab 中即可 例: /dev/sda7 swap swap defaults 0 0 实现开机启动/dev/sda7 交换分区
dd复制命令与链接文件
# dd 文件复制命令(数据块级别复制,而copy 命令,需要使用文件系统)
# dd [OPERAND]...
bs=BYTES 字节数
count=N 数量N
if=file 输入目录
of=file 输出目录
例:# dd if=/etc/issue of=/tmp/issue.dd 复制/etc/issue 文件为 /tmp/issue.dd
例:# dd if=/dev/sda of=/dev/sdb 复制/dev/sda 中的文件到目录/dev/sdb 中
例:# dd if=/dev/cdrom of=/tmp/linux.iso 或 cat /dev/cdrom > /tmp/linux.iso 制作磁盘镜像
例:# dd if=/dev/sda of=/tmp/myfile bs=512 count=1 复制MBR (包括bootloder 和分区表)
例:# dd if=/dev/zero of=/dev/sdb bs=446 count=1 (删除bootloader ,但未损坏分区表)
例:# dd if =/dev/zero of=/swapfile bs=1M count=100 创建文件分区,把文件模拟成设备
目录是一种路径映射文件,目录的磁盘块存放的是所有文件名及inode号
Dentry 目录项 ,把目录项缓存到内存中, 叫slab
文件删除rm :告诉Inode位图此文件Inode 号为空 ,告诉块位图把数据块放置在尚未使用块位图列表中 ,下次分配直接覆盖原有数据即可
文件复制cp :元数据区新建Inode 号,数据区并复制数据到新的数据块。
文件移动mv:同一文件系统 ,在目标先建立目录项 ,指定名称 ,Inode 号指向原文件Inode 号 ,在原始路径中目录项移除原始文件项即可。跨分区,先复制Inode 和数据块 ,在删除原始数据块
硬链接:
#ln -sv SRC LINKFILE
特性:1、不能跨分区;不能对目录创建硬链接 ;硬链接会改变文件被链接的次数;删除硬链接,原始文件存在,除链接次数变为0外 ;源文件域链接文件指向的同一个Inode
符号链接:
# ln -lv SRC LINKFILE
特性:符号链接可以跨分区,可以对目录创建符号链接 ;符号链接文件与源文件不是同一个Inode ;符号链接不会改变被连接次数 ;同一文件路径的路径指向 ;不占用磁盘数据块
压缩及归档命令
zip 既能归档,又能压缩 ,unzip=zip -d 解压
后缀.zip ,压缩过程中保留源文件 例:# zip /tmp/boo.zip /boot/*
gzip :压缩文件 ,gunzip =gzip -d 解压
后缀.gz
-c 将压缩结果送往标准输出 ,可以和使用重定向将其保存为压缩文件,从而保留源文件 例:#gzip -c messages
bzip2 :压缩 文件 ,bunzip2 =bzip2 -d 解压
后缀.bz2
-k 保留原文件及压缩文件
xz :压缩文件 ,unxz =xz -d 解压 ,xzcat 不解压直接查看
后缀.xz
-k :保留原文件及压缩文件
-# 指定压缩比 ,范围1-9
归档工具:
tar [options] -f file.tar file1
-cf :创建归档# tar -cf boot.tar /boot/ 直接对目录进行归档
-xf :展开归档 # tar -xf boot.tar.bz2 直接展开进行归档
-tf :不展开而直接查看被归档的文件
归档,解压
-zcf ;-zxf :.gz
-jcf ,-jxf :.bz2
-Jcf ,-Jxf :.xz
[root@Study ~]# ls anaconda-ks.cfg boot install.log install.log.syslog messages [root@Study ~]# zip boot.zip /boot/ 归档压缩/boot 目录为boot.zip文件 adding: boot/ (stored 0%) [root@Study ~]# unzip boot.zip Archive: boot.zip creating: boot/ [root@Study ~]# gzip messages [root@Study ~]# ls anaconda-ks.cfg boot boot.zip install.log install.log.syslog messages.gz [root@Study ~]# gunzip messages.gz [root@Study ~]# ls anaconda-ks.cfg boot boot.zip install.log install.log.syslog messages [root@Study ~]# bzip2 messages [root@Study ~]# ls anaconda-ks.cfg boot boot.zip install.log install.log.syslog messages.bz2 [root@Study ~]# bunzip2 messages.bz2 [root@Study ~]# ls anaconda-ks.cfg boot boot.zip install.log install.log.syslog messages [root@Study ~]# xz messages [root@Study ~]# ls anaconda-ks.cfg boot boot.zip install.log install.log.syslog messages.xz [root@Study ~]# unxz messages.xz [root@Study ~]# ls anaconda-ks.cfg boot boot.zip install.log install.log.syslog messages [root@Study ~]# tar -zcf boot.tar.gz ./boot [root@Study ~]# ls anaconda-ks.cfg boot boot.tar.gz boot.zip install.log install.log.syslog messages [root@Study ~]# tar -zxf boot.tar.gz [root@Study ~]# ls anaconda-ks.cfg boot.tar.gz etc.tar.gz install.log.syslog boot boot.zip install.log messages [root@Study ~]# tar -jcf boot.tar.bz2 ./boot [root@Study ~]# ls anaconda-ks.cfg boot.tar.bz2 boot.zip install.log messages boot boot.tar.gz etc.tar.gz install.log.syslog [root@Study ~]# tar -jxf boot.tar.bz2 [root@Study ~]# ls anaconda-ks.cfg boot.tar.bz2 boot.zip install.log messages boot boot.tar.gz etc.tar.gz install.log.syslog [root@Study ~]# tar -Jcf boot.tar.xz ./boot [root@Study ~]# ls anaconda-ks.cfg boot.tar.bz2 boot.tar.xz etc.tar.gz install.log.syslog boot boot.tar.gz boot.zip install.log messages [root@Study ~]# tar -Jxf boot.tar.xz [root@Study ~]# ls anaconda-ks.cfg boot.tar.bz2 boot.tar.xz etc.tar.gz install.log.syslog boot boot.tar.gz boot.zip install.log messages
本章blog知识点汇总
文件系统
磁盘管理命令: fdisk ,mke2fs ,e2label ,blkid ,dumpe2fs ,tune2fs ,e2fsck
交换分区命令:mkswap ,swapon ,swapoff ,free
磁盘挂载命令: mount , fuser ,df ,du ,
dd复制命令与链接: dd , ln
压缩归档命令: zip ,gunzip ,gzip ,gunzip ,bzip2 ,bunzip2 ,xz ,unxz ,xzcat ,tar -jcf|-Jcf|-zcf