1 回顾分区与系统

(1)分区类型

Linux的分区一般包括主分区,扩展分区和逻辑分区。其中:

主分区最多只能分4个;

扩展分区只能有一个,也算作主分区的一种,即主分区加扩展分区最多有4个。但扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用;

逻辑分区是由扩展分区划分出来的。如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘,Linux最多只能支持11个逻辑分区。

(2)文件系统

Linux中常见的文件系统包括ext2,ext3,ext4。

ext2是ext文件系统的升级版本,RedHat Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件。

ext3是ext2文件系统的升级版本,最大的区别在于增加了日志功能,可以在系统突然停止时提供系统文件系统的可靠性。支持最大16TB的分区和最大2TB的文件。

ext4是ext3的升级版本。ext4在性能、伸缩性和可靠性方面进行了大量改进。ext4的变化有向下兼容了ext3,最大支持1EB文件系统和16TB文件,无线数量子目录,Extents连续数据块概念,多块分配,延迟分配,持久预分配,快速fsck,日志校验,无日志模式,在线碎片整理,iNode增强,默认启动barrier等。

2 文件系统常用命令

(1)df,du,fsck及dumpe2fs命令

1)df是文件系统查看命令,其格式为:

df [选项] [挂载点]

其中,-a选项表示显示所有文件系统信息,包括特殊文件系统如/proc,/syfs等,-h选项表示使用习惯单位显示容量如KB、MB、GB等,-T表示显示文件系统的文件类型,-m选项表示以MB为单位显示容量,-k选项表示以KB为单位显示容量,默认就是以KB为单位。

例:查看本机的文件系统:

[root@localhost ~]# df -Th

Filesystem     Type     Size  Used   Avail  Use%  Mounted on

/dev/sda5      ext4    14G  .0G   11G  %    /

tmpfs          tmpfs  504M       504M   %  /dev/shm

/dev/sda1      ext4   291M   32M  244M  %  /boot

/dev/sda2      ext4   .0G  136M  .7G    %   /home

2)du命令用于统计目录或文件的大小,其格式为:

du [选项] [目录或文件名]

其中,-a选项表示显示每个子文件的磁盘占用量,默认只统计子目录的磁盘统计量,-h选项表示使用习惯单位显示磁盘占用量,-s选项表示统计总占用量,而不是列出子目录和子文件的占用量。

注:ls命令只会统计目录下的第一级子目录及文件的占用空间。

例:使用ls命令和du命令分别统计/etc目录的大小:

[root@localhost ~]# du -sh /etc/

27M     /etc/

[root@localhost ~]# ls -ld /etc/

drwxr-xr-x.  root root  1月   : /etc/

3)df与du命令的区别

df命令时从文件系统考虑的,不仅考虑文件的占用空间,还要统计被命令或程序占用的空间。最常见的就是文件已经删除,但是程序并没有释放空间。

du命令是面向文件的,只会计算文件或目录占用的空间。

例:分别使用df和du显示根目录"/"的大小:

[root@localhost ~]# df -h /

Filesystem      Size  Used   Avail  Use%  Mounted on

/dev/sda5      14G  .0G   11G   %   /

[root@localhost ~]# du -sh /

du: 无法访问"/proc/1597/task/1597/fd/4": 没有那个文件或目录

du: 无法访问"/proc/1597/task/1597/fdinfo/4": 没有那个文件或目录

du: 无法访问"/proc/1597/fd/4": 没有那个文件或目录

du: 无法访问"/proc/1597/fdinfo/4": 没有那个文件或目录

.9G    /

4)fsck是文件系统的修复命令,其格式为:

fsck [选项] 分区设备文件名

其中,-a选项表示不同显示用户提示,自动修复文件系统,-y选项表示自动修复,和-a的作用一致,不过有些文件系统只支持-y。

5)dumpe2fs命令用于显示磁盘状态命令,其格式为:

dumpe2fs 分区设备文件名

例:查看/dev/sda1的磁盘状态,使用-h选项仅显示超级块信息:

[root@localhost ~]# dumpe2fs -h /dev/sda1

dumpe2fs 1.41. (-May-)

Filesystem volume name:   <none>

Last mounted on:          /boot

Filesystem UUID:          0b5697a3--4b75-bf4c-71b4891d5e86

Filesystem magic number:  0xEF53

Filesystem revision #:     (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize

Filesystem flags:         signed_directory_hash

Default mount options:    user_xattr acl

Filesystem state:         clean

…………

(2)挂载命令

1)查询与自动挂载

mount命令用于查询系统中已经挂载的设备,如显示系统已挂载的设备:

[root@localhost ~]# mount

/dev/sda5 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=,mode=)

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

/dev/sda2 on /home type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

加上-l选项表示显示卷标名称。加上-a选项则表示依据配置文件/etc/fstab的内容,自动挂载。

2)挂载命令格式为:

mount [-t 文件系统] [-L卷标名] [-o 特殊选项] 设备文件名 挂载点

其中,-t选项表示加入文件系统类型来指定挂载的类型,可以为ext3、ext4(针对于Linux)、iso9660(光盘)、fat(win16)、vfat(win32)等文件系统;

-L选项为卷标名,表示挂载指定卷标的分区,而不是安装设备文件名挂载;

-o选项为特殊选项,可以指定挂载的额外选项,常见的选项有

参数

说明

atime/noatime

更新访问时间/不更新。访问分区文件时,是否更新文件的访问时间,默认为更新

async/sync

异步/同步,默认为异步

auto/noauto

自动/手动,mount –a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动

defaults

定义默认值,相当于rw,suid,dwv,exec,auto,nouser,async这七个选项

exec/noexec

执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许

remount

重新挂载已经挂载的文件系统,一般用于指定修改特殊全乡

rw/ro

读写/只读,文件系统挂载时,是否具有读写权限,默认是rw

suid/nosuid

具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有

user/nouser

允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区

usrquota

写入代表文件系统支持用户磁盘配额。默认不支持

grpquota

写入代表文件系统支持组磁盘配额,默认不支持

例:重新挂载/home分区,并使用noexec权限,尝试运行shell脚本helloworld.sh:

[root@localhost ~]# mount -o remount,noexec /home

[root@localhost ~]# cd /home/

[root@localhost home]# vi helloword.sh

[root@localhost home]# chmod  helloword.sh

[root@localhost home]# ./helloword.sh

-bash: ./helloword.sh: 权限不够

[root@localhost home]# ll

总用量 

-rwxr-xr-x.  root root     1月   : helloword.sh

[root@localhost home]# cp helloword.sh /root/

[root@localhost home]# /root/helloword.sh

hello world!

[root@localhost home]# mount -o remount,exec /home

可见在/home下设置noexec权限后无法执行shell脚本,而在其他默认的分区中如/root是可以执行的。注意最后要修改回来,否则会影响系统启动。

(3)挂载光盘和U盘

1)挂载光盘

首先在Vmware虚拟机设置中选中挂载的光盘镜像,然后确保“设备状态”处于“已连接”,如下图所示:

其次,在/mnt目录下创建cdrom挂载点,然后挂载光盘,最后显示光盘内容,具体过程如下:

[root@localhost ~]# mkdir /mnt/cdrom/                  #建立挂载点

[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/        #挂载光盘

mount: block device /dev/sr0 is write-protected, mounting read-only

[root@localhost ~]# ls /mnt/cdrom/

CentOS_BuildTag Packages    RPM-GPG-KEY-CentOS-Security-

EULA     RELEASE-NOTES-en-US.html    RPM-GPG-KEY-CentOS-Testing-

GPL       repodata                    TRANS.TBL

images           RPM-GPG-KEY-CentOS-

isolinux         RPM-GPG-KEY-CentOS-Debug-

[root@localhost ~]# umount /mnt/cdrom/               #最后卸载挂载点

注:挂载点卸载命令umount的格式为:umount 设备文件名或挂载点。

2)挂载U盘

光标定位到Vmware虚拟机中,然后插入U盘。这样做U盘将被Linux识别,而不是被Windows识别。

首先使用fdisk命令查看U盘的设备文件名,具体命令为:fdisk –l。

其次挂载U盘:mount –t vfat /dev/sdb1 /mnt/usb

注意:U盘为FAT16文件系统,Linux的挂载文件系统格式为fat,若为FAT32,则Linux对应的挂载文件系统格式为vfat。Linux默认是不支持NTFS文件系统的移动硬盘。

(4)支持NTFS的文件系统

若要在Linux中挂载NTFS的文件系统,可以利用第三方软件ntfs-3g。其下载地址为:http://www.tuxera.com/community/ntfs-3g-download/

安装编译的过程如下:

①解压缩:tar -xzvf ntfs-3g-ntfsprogs-2014.2.15.tar.gz

②进入压缩包:cd ntfs-3g-ntfsprogs-2014.2.15

③编译器准备,无需指定安装目录,将被安装到默认的位置中:./confgure④编译:make

⑤编译安装:make install

安装好之后,插入移动硬盘(和U盘的插入方法一样),然后进行挂载:

mount –t ntfs-3g 分区设备文件名 挂载点

3 fdisk分区

(1)fdisk命令的分区过程

①使用VMware新建硬盘:

在“虚拟机设置”中,选中“硬盘”,点击“添加”,随后选择默认即可添加新硬盘。注意:添加硬盘在系统尚未启动时进行。

②打开虚拟机,使用命令:fdisk –l查看新添加的硬盘:

[root@localhost ~]# fdisk -l

Disk /dev/sdb: 10.7 GB,  bytes

 heads,  sectors/track,  cylinders

Units = cylinders of  *  =  bytes

Sector size (logical/physical):  bytes /  bytes

I/O size (minimum/optimal):  bytes /  bytes

Disk identifier: 0x00000000

③使用fdisk /dev/sdb命令为新硬盘进行分区,fdisk交互指令说明如下表:

命令

说明

a

设置可引导标记

b

编辑bsd磁盘标签

c

设置DOS操作系统兼容标记

d

删除一个分区

l

显示已知的文件系统类型,82为swap分区,83为Linux分区

m

显示帮助菜单

n

新建分区

o

建立空白DOS分区表

p

显示分区列表

q

不保存退出

s

新建空白SUN磁盘标签

t

改变一个分区的系统ID

u

改变显示记录单位

v

验证分区表

w

保存退出

x

附加功能(仅专家)

新建/dev/sdb1主分区,/dev/sbd2扩展分区,/dev/sdb5逻辑分区。

#新建主分区,并分配2G硬盘空间

Command (m for help): n

Command action

   e   extended

   p   primary partition (-)

p

Partition number (-): 

First cylinder (-, default ):

Using default value 

Last cylinder, +cylinders or +size{K,M,G} (-, default ): +2G

#新建扩展分区,并分配剩余的硬盘空间

Command (m for help): n

Command action

   e   extended

   p   primary partition (-)

e

Partition number (-): 

First cylinder (-, default ):

Using default value 

Last cylinder, +cylinders or +size{K,M,G} (-, default ):

Using default value 

#新建逻辑分区,其硬盘空间大小为扩展分区的硬盘空间

Command (m for help): n

Command action

   l   logical ( or over)

   p   primary partition (-)

l

First cylinder (-, default ):

Using default value 

Last cylinder, +cylinders or +size{K,M,G} (-, default ):

Using default value 

#使用w命令保存并退出

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

④建立好分区后,使用partprobe命令重新读取分区表信息,显示正常报警。

[root@localhost ~]# partprobe

Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (设备或资源忙).  As a result, it may not reflect all of your changes until after reboot.

Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。

Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。

Error: 无效的分区表 - /dev/sr0 出现递归分区。

⑤格式化分区,写入文件系统,采用:mkfs –t ext4 /dev/sdb1,/dev/sdb5同样处理。

[root@localhost ~]# mkfs -t ext4 /dev/sdb1

mke2fs 1.41. (-May-)

文件系统标签=

操作系统:Linux

块大小= (log=)

分块大小= (log=)

Stride= blocks, Stripe width= blocks

 inodes,  blocks

 blocks (5.00%) reserved for the super user

第一个数据块=

Maximum filesystem blocks=

 block groups

 blocks per group,  fragments per group

 inodes per group

Superblock backups stored on blocks:

        , , , , 

正在写入inode表: 完成                           

Creating journal ( blocks): 完成

Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every  mounts or

 days, whichever comes first.  Use tune2fs -c or -i to override.

⑥建立分区挂载点并挂载。在根分区下创建disk1和disk5目录分别作为/devsdb1和/dev/sdb5的挂载点

[root@localhost ~]# mkdir /disk1 /disk5

[root@localhost ~]# mount /dev/sdb1 /disk1

[root@localhost ~]# mount /dev/sdb5 /disk5

⑦使用df或mount命令查看挂载

[root@localhost ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda5        14G  .0G   11G  % /

tmpfs           504M       504M   % /dev/shm

/dev/sda1       291M   32M  244M  % /boot

/dev/sda2       .0G  136M  .7G   % /home

/dev/sdb1       .0G   68M  .9G   % /disk1

/dev/sdb5       .9G  146M  .4G   % /disk5

(2)分区自动挂载

以上的分区为手动挂载,系统重启之后需重新挂载,所以需要设置自动挂载。主要是设置/etc/fstab文件

UUID=9288c490--471c-b63a-6e56699065d5 /        ext4    defaults    

UUID=0b5697a3--4b75-bf4c-71b4891d5e86 /boot    ext4    defaults    

UUID=fe5a8908-97e6--a114-8bcc43af1bc2 /home    ext4    defaults    

UUID=3ae64e9d--478b-b35f-14df91638287 swap    swap    defaults    

tmpfs                   /dev/shm        tmpfs   defaults         

devpts                  /dev/pts         devpts  gid=,mode=   

sysfs                   /sys              sysfs   defaults         

proc                    /proc            proc    defaults         

fstab共有六个字段,其中:

第一个字段为分区设备文件名或UUID(硬盘通用唯一标识码);

第二个字段为挂载点;

第三个字段为文件系统名称;

第四个字段为挂载参数,与mount –o选项的参数含义一样;

第五个字段为指定分区是否被dump备份,0表示不备份,1表示每天备份,2表示不定期备份。注:每个分区目录均有备份目录lost+found;

第六个字段为指定分区是否被fsck检测,0表示不检测,其他数字代表检测的优先级。

因此,将新建的分区/dev/sdb1和/dev/sdb5写入fstab中进行自动挂载:

/dev/sdb1             /disk1                  ext4    defaults         

/dev/sdb5             /disk5                  ext4    defaults         

(3)fstab文件修复

如果在/etc/fstab文件中输入的内容有误,则系统在重启时将报错,此时需要对其进行修复。

例:对/dev/sdb5分区进行自动挂载设置时,误输入/dev/sdb,即

/dev/sdb             /disk5                  ext4    defaults        1 2

系统在重启时,出现找不到指定分区的报错如下:

此时,输入密码重新修改/etc/fstab文件,由于该文件是只读文件,因此,需要先将其所在的根分区重新挂载为读写权限,即:

mount –o remount,rw /

随后将输入的fstab文件修改过来,然后进行重启。

Linux学习笔记(14)文件系统管理的更多相关文章

  1. Linux学习笔记14—文件的压缩与打包

    1..gz   gzip 压缩工具压缩的文件 .bz2   bzip2 压缩工具压缩的文件 .tar   tar 打包程序打包的文件(tar并没有压缩功能,只是把一个目录合并成一个文件) .tar.g ...

  2. Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum

    写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...

  3. Linux学习笔记14——使用fcntl实现文件锁定

    期末考试快要来了,Linux学习进度一下拉下来许多.今天学习的是文件锁定,在Linux中,实现文件锁定的方法很多,例如fcntl和lockf.下面主要是fcntl的调用. fcntl函数的原型是:in ...

  4. Linux学习笔记之文件权限

    前言: 说起文件权限,大家在windows下应该很熟悉就对文件右键属性,然后配置一点什么读写之类的权限,然后可以分配到每个的人. 对于linux 我先为大家介绍一个使用者和组和其他的概念说明一下 文件 ...

  5. Linux学习笔记 -- 话说文件

    文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Li ...

  6. linux 学习笔记之文件与管理

    前言: 对于windows来说,文件的系统管理都是非常简单的(这个应该有一个捂脸),通常就是重命名,复制,移动,删除,查看文件属性,查看文件内容,寻找文件.其实在图形化行中的linux也是有这样子功能 ...

  7. Java 学习笔记(14)—— 文件操作

    java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java.io 包中.Java中流可以理解为一个有序的字符序列,从一端导向到另一端.建立了一个流 ...

  8. linux学习笔记一----------文件相关操作

    一.目录结构 二.文件管理操作命令(有关文件夹操作,使用Tab键自动补全文件名(如果多个默认第一个)) 1.ls 查看目录信息:ls -l 查看目录详细信息(等价于ll 某些系统不支持) 2.pwd ...

  9. Linux学习笔记11——文件I/O之二

    一.文件共享 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响. 1.每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表 2.内 ...

  10. linux学习笔记之文件类型,及目录介绍

    引用A:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/20/3033131.html 引用B:http://www.cnblogs.c ...

随机推荐

  1. iis 错误解决汇集

    1. Windows7,VS2013,网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“NickLeeCallbackHand ...

  2. c++ 文件utf-8格式

    #include <stdio.h> int i = 0; while (i < 20) {    i++;    WriteLog("d:\\log.txt", ...

  3. 8.js模式-状态模式

    1. 状态模式 var offLightState = function(light){ this.light = light; } offLightState.prototype.buttonWas ...

  4. 移动端设页面根目录HTML的字体大小

    @media (max-width: 359px){ html { font-size: 62.5%; }}@media (min-width: 360px) and (max-width: 374p ...

  5. plsql客户端显示菜单等

    不小心把plsql的左边的都关了,如图 菜单条---工具---浏览器. 即可.

  6. 【leetcode】 search Insert Position(middle)

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  7. CCF 最大的矩形

    问题描述 试题编号: 3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个 ...

  8. tableView性能优化

    针对滑动时出现卡的现象 参考:http://blog.sina.cn/dpool/blog/s/blog_b638dc890101ep3x.html?plg_nld=1&plg_auth=1& ...

  9. 如何让Table中的第一列和第二列的值相乘然后赋值给第三列

    因为需求的原因所以这样做,不废话了,直接上代码,我用的GridView绑定的数据,table也一样,因为GridView通过浏览器编译后的代码就是table.下面是aspx页面的Html代码: < ...

  10. jquery阻止事件冒泡的3种方式

    第一种:return false, 缺点:直接返回了函数,函数后面的语句没法执行了: $('.btn').on('click',function(event){ do something ... re ...