linux那点事儿(七)----文件系统管理

来源:岁月联盟 编辑:exp 时间:2012-05-30

相关链接:linux那点事儿(一)http://www.2cto.com/os/201205/131407.html;linux那点事儿(二)http://www.2cto.com/os/201205/131408.html;linux那点事儿(三)http://www.2cto.com/os/201205/131409.html;linux那点事儿(四)----用户管理详解http://www.2cto.com/os/201205/131410.html;linux那点事儿(五)----用户管理常用命令http://www.2cto.com/os/201205/131411.html;linux那点事儿(六)----进程管理详解http://www.2cto.com/os/201205/132474.html 如果你是一位忠实的windows 用户,那么现在请你打开的的c盘,打开WINDWOS目录,下面存放了哪些文件和目录,相信没有人关心过吧!即便是用windows多年的人。额!其实,我也知道WINDOWS目录下面都放了些什么,在我的记忆中,几乎都没打开那个目录过,这就是windows 。linux则需要我们日久生情,我们只有在慢慢的与之了解下才会爱上它。 
 linux文件系统                                                                                在linux中所有的东西都是文件    Linux文件系统的组织方式称做Filesystem Hierarchy Standard(文件系统分层标准,简称FHS),即采用层次式的树状目录结构。在此结构的最上层是根目录"/"(斜杠),然后在此根目录下是其他的目录和子目录  www.2cto.com  

     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 -hFilesystem 容量 已用 可用 已用% 挂载点/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 添加磁盘、分区、格式化、挂载                                                              www.2cto.com    这是我们在玩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 unavailablesdb: assuming drive cache: write throughSCSI device sdb: 20971520 512-byte hdwr sectors (10737 MB)sdb: cache data unavailablesdb: assuming drive cache: write throughsdb: unknown partition tableAttached scsi disk sdb at scsi0, channel 0, id 1, lun 0如果敲入dmesg | grep sdb命令没有任何信息,那问题就大了,你的系统没有识别新添加胡硬盘。 对硬盘进行分区  下面先看一下我们添加的第二块硬盘的一些信息。[root@bogon ~]# fdisk -l /dev/sdbDisk /dev/sdb: 10.7 GB, 10737418240 bytes255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDisk /dev/sdb doesn't contain a valid partition table  sdb中b表示第二块硬盘,如果想看我们第一块硬盘的信息,可以输入sda
 [root@bogon ~]# fdisk -l /dev/sdaDisk /dev/sda: 21.4 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice 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/sdbThe 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 actiona toggle a bootable flagb edit bsd disklabelc toggle the dos compatibility flagd delete a partition -----删除分区l list known partition typesm print this menun add a new partition -----添加一个新的分区o create a new empty DOS partition tablep print the partition table -----显示分区表q quit without saving changes -----不保存退出s create a new empty Sun disklabelt change a partition's system id -----改变文件系统类型u change display/entry units  www.2cto.com  v verify the partition tablew write table to disk and exit ----- 保存退出x extra functionality (experts only)------------------------------------------------------添加第一个主分区--------------------------Command (m for help): p   ----- 显示分区表Disk /dev/sdb: 10.7 GB, 10737418240 bytes255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id SystemCommand (m for help): n   ----- 添加新分区Command actione extended e是扩展分区p primary partition (1-4)   ----p是主分区,我们最多可以添加4个主分区p   ----- 按p表示我们要划分主分区Partition number (1-4): 1    -----给主分区的一个编号1First cylinder (1-1305, default 1):    -----这1到1305是指扇面,这个比较麻烦,不选择直接回车Using default value 1Last 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 bytes255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System/dev/sdb1 1 623 5004216 83 Linux   ----- 划分的第一个主分区信息出来了-----------------------------------------------------添加第二个主分区---------------------------------Command (m for help): n   ----- 按n继续划分分区Command actione extendedp primary partition (1-4)p    -----p再划一个主分区Partition number (1-4): 2   ----- 这里输入2表示第二个主分区First cylinder (624-1305, default 624):Using default value 624Last cylinder or +size or +sizeM or +sizeK (624-1305, default 1305):   ----- 我们要把剩余空间都给2,这里直接回车Using default value 1305Command (m for help): p   ----- 再来查看分区表Disk /dev/sdb: 10.7 GB, 10737418240 bytes255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System/dev/sdb1 1    623     5004216   83   Linux/dev/sdb2 624   1305    5478165    83   Linux   ----- 划分的两个分区都出来了   www.2cto.com  指定磁盘的格式  接下来要指这文件系统的类型,现在的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): PDisk /dev/sdb: 10.7 GB, 10737418240 bytes255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice 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 mktempmkbootdisk mke2fs mkfs.ext3 mklost+found mkxauthmkcfm mkfifo mkfs.msdos mkmanifest mkzftreemkcramfs mkfontdir mkfs.vfat mknod mkzonedbmkdict mkfontscale mkhtmlindex mkSimNodeDirmkdir mkfs mkhybrid mksock  www.2cto.com  mkdirhier mkfs.cramfs mkinitrd mkswap
   windwos下我们在格式化的时候,可以指定FAT32和NTFS,那么linux下流行的格式为ext2和ext3 ,这里我们对划分好的第1个分区进行格式化,选用ext3的格式[root@bogon ~]# mkfs.ext3  /dev/sdb1mke2fs 1.35 (28-Feb-2004)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)626496 inodes, 1251054 blocks62552 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=128345702439 block groups32768 blocks per group, 32768 fragments per group16064 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736Writing inode tables: doneCreating journal (8192 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 25 mounts or180 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  -hFilesystem 容量 已用 可用 已用% 挂载点/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    -----看!我们的系统是不是多了一个盘,嘿嘿!!   www.2cto.com  如何解决每次重启都要挂载的问题                                                         上面的方式虽然完成了,但是有一个问题,我们重启系统后,新划分的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/swap2、# dd if=/dev/zero of=/var/swap/file.swp bs=1024 count=655263、# mkswap /wap/swap/file.swp4、# vi /etc/fstab/var/swap/file.swp swap swap defaults 0 05、free  www.2cto.com  6、swapon /var/swap/file.swp7、free解释一下思路:1、mkdir 创建一个虚拟内存的目录,chmod 让这个目录只有管理员权限,2、dd 一个强大的复制命令,神奇的linux可以创建一个空的文件并指定它的大小,windows下面,文件的大小决定于文件中存放的内容的多少,如果文件是空的,那么这一文件一定显示0字节。而linux却可以创建空的又有大小的文件,这个特性刚好满足我们虚拟内存的要求。3、mkswap 设置交换区,把file.swp设置成交换区。4、编辑fstab文件,把设置虚拟内存的文件写进去。5、free 指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等.6、swapon开启虚拟内存   作者 虫师