本章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