linux那点事儿(七)----文件系统管理
2012-05-29 22:32 虫师 阅读(13597) 评论(2) 编辑 收藏 举报
如果你是一位忠实的windows 用户,那么现在请你打开的的c盘,打开WINDWOS目录,下面存放了哪些文件和目录,相信没有人关心过吧!即便是用windows多年的人。额!其实,我也知道WINDOWS目录下面都放了些什么,在我的记忆中,几乎都没打开那个目录过,这就是windows 。linux则需要我们日久生情,我们只有在慢慢的与之了解下才会爱上它。
linux文件系统
在linux中所有的东西都是文件
Linux文件系统的组织方式称做Filesystem Hierarchy Standard(文件系统分层标准,简称FHS),即采用层次式的树状目录结构。在此结构的最上层是根目录"/"(斜杠),然后在此根目录下是其他的目录和子目录
Linux与DOS及Windows一样,采用"路径"来表示文件或目录在文件系统中所处的层次。路径由以"/"为分隔符的多个目录名字符串组成,分为绝对路径和相对路径。所谓绝对路径是指由根目录"/"为起点来表示系统中某个文件或目录的位置的方法。例如如果用绝对路径表示图中第4层目录中的bin目录,应为"/usr/local/bin"。相对路径则是以当前目录为起点,表示系统中某个文件或目录在文件系统中的位置的方法。若当前工作目录是"/home",则用相对路径表示图中第4层目录中的bin目录,应为"hls/bin"或"./hls/bin",其中"./"表示当前目录,通常可以省略。
Linux文件系统的组织与Windows操作系统不同。对于在Linux下使用的设备,不需要像Windows那样创建驱动器盘符,Linux会将包括本地磁盘、网络文件系统、CD-ROM和U盘等所有设备识别为设备文件,并嵌入到Linux文件系统中来进行管理。一个设备文件不占用文件系统的任何空间,仅仅是访问某个设备驱动程序的入口。Linux 系统中有两类特殊文件:面向字符的特殊文件和面向块(block)的特殊文件。前者允许I/O操作以字符的形式进行,而后者通过内存缓冲区来使数据的读写操作以数据块的方式实现。当对设备文件进行I/O操作时,该操作会被转给相应的设备驱动程序。一个设备文件是用主设备号(指出设备类型)和从设备号(指出是该类型中的第几个设备)来表示的,可以通过mknod命令进行创建。软盘、光盘和硬盘等典型设备文件在Linux系统中的表示方法。
典型设备文件在Linux系统中的表示方法
Linux文件名最长可允许256个字符,可以包括数字、字符,以及"."、"-"、"_"等符号。Linux文件名不像DOS或Windows由主文件名和扩展文件名两部分组成,Linux中没有扩展名的概念。Linux环境下,文件名对大小写敏感(Case Sensitive),例如test.txt与Test.txt会被识别成两个不同的文件,而DOS或Windows平台是不进行大小写区分的。
文件系统的构成
/usr/bin、/bin : -------------存放所有用户可以执行的命令
/usr/sbin、/sbin : -----------存放只有root可以执行的命令
/home :--------------------用户缺省宿主目录
/proc :---------------------虚拟文件系统,存放当前内存镜像
/dev :----------------------存放设备文件
/lib :-----------------------存放系统程序运行所需的共享库
/lost+foud :---------------存放一些系统出错的检查结果
/tmp :---------------------存放临时文件
/etc :-----------------------系统配置文件
/var :----------------------包含经常发生变动的文件,如:邮件、日志文件、计划任务等
/usr :----------------------存放所有命令、库、手册页等 类似于windows C盘下的WINDOWS目录
/mnt :----------------------临时文件系统的安装点
/boot :---------------------内核文件及自举程序文件保存位置
用windows下我们习惯把安装的程序放在Program files目录下,在linux下面习惯放在/user/local下。
查看文件命令
查看分区使用情况:df
查看文件、目录大小:du
检测修复文件系统: fsck、e2fsck
(单用户模式执行)
判断文件类型:file
df 查看linux磁盘分区情况
在windows下查看我们硬盘的分区很简单,打开“我的电脑”就知道有几个盘,鼠标放到盘符上就显示磁盘的大小,那么在linux下如何查看呢,其实也非常简单,一个命令的事儿
[root@bogon ~]# df -h
Filesystem 容量 已用 可用 已用% 挂载点
/dev/sda1 9.7G 3.3G 5.9G 37% /
none 506M 0 506M 0% /dev/shm
/dev/sda2 2.9G 37M 2.7G 2% /hzh
/dev/sda5 6.2G 47M 5.9G 1% /web
du 查看文件、目录的大小
windows下查看文件、目录的大小右键--属性,linux我们使用du命令进行查看。
root@fnngj-H24X:/hzh# du -h test.test ------查看文件的大小
4.0K test.test
root@fnngj-H24X:/# du -sh /etc ------查看目录的大小
7.1M /etc
file判断文件类型
我们知道linux下的文件不是同过后缀名来确定类型的,如果刚好某个文件没有定义后缀名,我们可以通过file命令来查看后缀名。
root@fnngj-H24X:/hzh# file test.test
test.test: ASCII text
添加磁盘、分区、格式化、挂载
这是我们在玩linux服务器时会遇到的一个问题,根据初期的规划,你linux上了一块500GB的硬盘,过了一段时间,不够用了。怎么办?换一个1TB的硬盘,把系统重装一下,把原来的数据拷贝到新硬盘上。这种方式可以,但太笨。直接在原系统上加一块硬盘不就行了。我们现在需要知道的就是如何让新加的这块硬盘给我们工作。
设置---根据图片的提示添加一块新的虚拟硬盘,嗯!这就是虚拟机的好处,可以帮我们模拟添加多块硬盘。呵呵
划分分区(fdisk)
创建文件系统(mkfs)
尝试挂载(mount)
写入配置文件(/etc/fstab)
查看新添加分区的硬盘信息:
[root@bogon ~]# dmesg | grep sdb sdb是我们添加的第二块硬盘
SCSI device sdb: 20971520 512-byte hdwr sectors (10737 MB)
sdb: cache data unavailable
sdb: assuming drive cache: write through
SCSI device sdb: 20971520 512-byte hdwr sectors (10737 MB)
sdb: cache data unavailable
sdb: assuming drive cache: write through
sdb: unknown partition table
Attached scsi disk sdb at scsi0, channel 0, id 1, lun 0
如果敲入dmesg | grep sdb命令没有任何信息,那问题就大了,你的系统没有识别新添加胡硬盘。
对硬盘进行分区
下面先看一下我们添加的第二块硬盘的一些信息。
[root@bogon ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
sdb中b表示第二块硬盘,如果想看我们第一块硬盘的信息,可以输入sda
[root@bogon ~]# fdisk -l /dev/sda
Disk /dev/sda: 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/sda1 * 1 1275 10241406 83 Linux
/dev/sda2 1276 1657 3068415 83 Linux
/dev/sda3 1658 1788 1052257+ 82 Linux swap
/dev/sda4 1789 2610 6602715 5 Extended
/dev/sda5 1789 2610 6602683+ 83 Linux
下面开始真正的对硬盘进行分区
[root@bogon ~]# fdisk /dev/sdb
The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): m ----- 按m可以获得帮助信息
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition -----删除分区
l list known partition types
m print this menu
n add a new partition -----添加一个新的分区
o create a new empty DOS partition table
p print the partition table -----显示分区表
q quit without saving changes -----不保存退出
s create a new empty Sun disklabel
t change a partition's system id -----改变文件系统类型
u change display/entry units
v verify the partition table
w write table to disk and exit ----- 保存退出
x extra functionality (experts only)
------------------------------------------------------添加第一个主分区--------------------------
Command (m for help): p ----- 显示分区表
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Command (m for help): n ----- 添加新分区
Command action
e extended e是扩展分区
p primary partition (1-4) ----p是主分区,我们最多可以添加4个主分区
p ----- 按p表示我们要划分主分区
Partition number (1-4): 1 -----给主分区的一个编号1
First cylinder (1-1305, default 1): -----这1到1305是指扇面,这个比较麻烦,不选择直接回车
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): +5120M ---- 这个地方我们要指定分区的大小,我们可以通过字节的方式来指定,国为我的硬盘是10G,我划分5G出来。
Command (m for help): p ----- 现在再来查看分区表
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 623 5004216 83 Linux ----- 划分的第一个主分区信息出来了
-----------------------------------------------------添加第二个主分区---------------------------------
Command (m for help): n ----- 按n继续划分分区
Command action
e extended
p primary partition (1-4)
p -----p再划一个主分区
Partition number (1-4): 2 ----- 这里输入2表示第二个主分区
First cylinder (624-1305, default 624):
Using default value 624
Last cylinder or +size or +sizeM or +sizeK (624-1305, default 1305): ----- 我们要把剩余空间都给2,这里直接回车
Using default value 1305
Command (m for help): p ----- 再来查看分区表
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 623 5004216 83 Linux
/dev/sdb2 624 1305 5478165 83 Linux ----- 划分的两个分区都出来了
指定磁盘的格式
接下来要指这文件系统的类型,现在的window分FAT32和NTFS是两种比较常见的分区,那linux下面磁盘支持的格式就非常多了
注:下面的操作不要退出fdisk模式
Command (m for help): t ----给分区指定表格
Partition number (1-4): 1 ----我们选编号为1的主分区
Hex code (type L to list codes): L ---- 这里我们不知道编号,可用L来查看所有的分区格式
83 Linux -----这个也就是我们刚划分的两个主分区的格式。
Hex code (type L to list codes): 83 ---- 如果不想改变原有格式直接输入83回车
删除分区
如果这时你发现自己的分区划分的不合理,想删除某一个分区,重新划分。
注:下面的操作不要退出fdisk模式
Command (m for help): d ----删除分区
Partition number (1-4): 2 ----这里选择删除第2个分区
Command (m for help): P
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 63 506016 83 Linux ---- 我们划分的两个分区只剩一个了
保存退出
当我们把分区分好以后,需要保存退出才能保存我们划分的分区。其它非正常退出都不能保存我们划好的分区。
注:此处才是我们要退出fdisk模式的时候^_^
Command (m for help): w --w是保存退出,q是不保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
磁盘格式话
ok!分区已经完毕,下面是不是应该对硬盘进行一下格式化了
[root@bogon ~]# mk -- 输入mk,按两下tab键,你会看到linux下面有许多分区命令
mkafmmap mkdosfs mkfs.ext2 mkisofs mktemp
mkbootdisk mke2fs mkfs.ext3 mklost+found mkxauth
mkcfm mkfifo mkfs.msdos mkmanifest mkzftree
mkcramfs mkfontdir mkfs.vfat mknod mkzonedb
mkdict mkfontscale mkhtmlindex mkSimNodeDir
mkdir mkfs mkhybrid mksock
mkdirhier mkfs.cramfs mkinitrd mkswap
windwos下我们在格式化的时候,可以指定FAT32和NTFS,那么linux下流行的格式为ext2和ext3 ,这里我们对划分好的第1个分区进行格式化,选用ext3的格式
[root@bogon ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
626496 inodes, 1251054 blocks
62552 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1283457024
39 block groups
32768 blocks per group, 32768 fragments per group
16064 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
挂载分区
OK!现在硬盘分区也分好了,也进行了格式化,下面要使用这个分区了。在使用的时候我们需要对其进行挂载。就像前面我讲的挂在光盘一样。使用mount命令。
[root@bogon /]# mkdir /newsdb -----我们在根目录下创建一个做挂载点的目录/newsdb
[root@bogon /]# mount /dev/sdb1 /newsdb/ ---- 然后把格式化好的第1个分区/dev/sdb1 挂载到/newsdb目录下
[root@bogon /]# df -h
Filesystem 容量 已用 可用 已用% 挂载点
/dev/sda1 9.7G 3.3G 5.9G 37% /
none 506M 0 506M 0% /dev/shm
/dev/sda2 2.9G 37M 2.7G 2% /hzh
/dev/sda5 6.2G 47M 5.9G 1% /web
/dev/sdb1 4.7G 42M 4.5G 1% /newsdb -----看!我们的系统是不是多了一个盘,嘿嘿!!
如何解决每次重启都要挂载的问题
上面的方式虽然完成了,但是有一个问题,我们重启系统后,新划分的sdb1分区又不见了,还需要我们重新进行挂载。那么如何解决这个问题,我们需要写入配置文件(/etc/fatab)
[root@bogon /]# vi /etc/fstab ----先来看一下这个配置文件里都存放了些什么东东
LABEL=/ / ext3 defaults 1(/0) 1(0/1/2)
LABEL=/ 物理分区名/卷标
/ 挂载点
ext3 文件系统
defaults 缺省设置
1(/0) 是否检测,O不检测,1检测
1(0/1/2) 检测顺序,O不检测,1优先检测,2其次检测
我们知道了每一部分的含义,把我们创建的分区的信息添加进去,那么在系统重启的时候,就自动加载我们的硬盘分区,我们就不用手动加载了。
/dev/sdb1 /newsdb ext3 defaults 1 2
增加虚拟内存的方式
这个虚拟内存是什么东东,此处就不解释了,windows下面增加虚拟内存方式,相信你懂的!如果你不懂,我想些节你可以略过了。呵呵!
下面告诉你如何增加LINUX的虚拟内存。
1、
# mkdir /var/swap
# chmod 700 /var/swap
2、
# dd if=/dev/zero of=/var/swap/file.swp bs=1024 count=65526
3、
# mkswap /wap/swap/file.swp
4、
# vi /etc/fstab
/var/swap/file.swp swap swap defaults 0 0
5、
free
6、
swapon /var/swap/file.swp
7、
free
解释一下思路:
1、mkdir 创建一个虚拟内存的目录,chmod 让这个目录只有管理员权限,
2、dd 一个强大的复制命令,神奇的linux可以创建一个空的文件并指定它的大小,windows下面,文件的大小决定于文件中存放的内容的多少,如果文件是空的,那么这一文件一定显示0字节。而linux却可以创建空的又有大小的文件,这个特性刚好满足我们虚拟内存的要求。
3、mkswap 设置交换区,把file.swp设置成交换区。
4、编辑fstab文件,把设置虚拟内存的文件写进去。
5、free 指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等.
6、swapon开启虚拟内存
7、