zoukankan      html  css  js  c++  java
  • 26.centos7基础学习与积累-012-文件和目录的属性

    从头开始积累centos7系统运用

    大牛博客:https://blog.51cto.com/yangrong/p5

    1.文件的属性(文件的信息描述):

    [root@python01 ~]# ls -lih
    total 24K
    100663363 -rw-------.  1 root root 1.6K May 24 23:28 anaconda-ks.cfg
    101300544 -rw-r--r--.  1 root root  15K Oct  3  2017 epel-release-latest-7.noarch.rpm
       690709 drwxr-xr-x   7 root root  171 Jul 11 11:23 oldboy
     33575402 drwxr-xr-x  26 root root 4.0K Jun 18 10:50 test

    节点号  文件类型及权限  属主及所归属的组  最近修改时间  文件或目录名

    文字解释:

    第一列:inode索引节点编号(人的身份证,全国唯一);

        系统读取文件时首先通过文件名找到inode,如何才能读取文件内容。

    第二列:文件类型及权限(共11个字符,第一个字符为类型,后面9个字符为文件权限,最后的.点是与selinux相关的);

    第三列:硬链接个数(详细参看ln命令的讲解);

    第四列:文件或目录所属的用户(属主);

    linux里面文件和程序的存在必须要有用户和组满足相应的存在需求。

    第五列:文件或目录所属的组;

    第六列:文件或目录的大小;

    第七、八、九列:文件或目录的修改时间;默认月日时分

    第十列:实际的文件名或目录名;文件名不算文件的属性

     2.索引节点inode

      硬盘要存储数据(房子住人),首先要分区(隔断),然后格式化创建文件系统(装修),最后存数据(住人)。

      inode,中文意思是索引节点(index node)。在每个linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘,U盘... ...)

    被格式化为ext4文件系统后,一般都有两个部分:第一部分是Inode(很少个),第二部分是Block(很多个)。

      Block是用来存储实际数据用的,例如:照片,视频等普通文件数据。

      而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode包含的属性信息包括不限于文件大小、属主(用户)、归属的用户组、

    文件权限、文件类型,修改时间,还包含指向文件实体的指针功能(inode节点--block的对应关系)等,但是inode唯独不包含文件名

       inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了Inode的数值,操作系统根据指令,

    即可通过inode的值最快的找到相对应的文件实体,文件inode,block之间的关系见下图

     

     [root@python01 ~]# stat epel-release-latest-7.noarch.rpm
      File: ‘epel-release-latest-7.noarch.rpm’
      Size: 15080           Blocks: 32         IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 101300544   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2019-05-24 16:07:02.794093305 +0800
    Modify: 2017-10-03 01:52:02.000000000 +0800
    Change: 2019-05-24 16:06:56.308813213 +0800
     Birth: -

       第一列:inode值是101300544;查看一个文件或目录的inode,通过ls命令的-i参数即可。

      因为inode要存放文件属性信息,所以每个inode本身是有大小的,centos5系统inode的默认大小是128字节,

    而centos6系列inode的默认大小是256字节,inode的大小在分区被格式化创建文件系统之后就无法更改了,格式化前可以指定inode大小,

    但是一般工作环境没有这个需求。

      不同centos版本inode大小不同;

    centos6

     [root@python01 ~]# dumpe2fs /dev/sda1
    dumpe2fs 1.42.9 (28-Dec-2013)
    dumpe2fs: Bad magic number in super-block while trying to open /dev/sda1
    Couldn't find valid filesystem superblock.

    查看剩余和使用中的inode

    [root@python01 ~]# df -i
    Filesystem                Inodes IUsed    IFree IUse% Mounted on
    /dev/mapper/centos-root 24414208 58468 24355740    1% /
    devtmpfs                  479656   392   479264    1% /dev
    tmpfs                     482689     1   482688    1% /dev/shm
    tmpfs                     482689  1232   481457    1% /run
    tmpfs                     482689    16   482673    1% /sys/fs/cgroup
    /dev/sda1                 256000   327   255673    1% /boot
    /dev/mapper/centos-data 79134720    20 79134700    1% /data
    tmpfs                     482689     1   482688    1% /run/user/0

     centos7

    centos7的文件格式:xfs

    [root@python01 ~]# xfs_growfs /dev/sda1|grep -i "isize"     
    meta-data=/dev/sda1              isize=512    agcount=4, agsize=32000 blks

    [root@python01 ~]# cat /etc/fstab

    #
    # /etc/fstab
    # Created by anaconda on Fri May 24 23:24:42 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=1653bc45-1d10-4e98-805f-6615d99d551f /boot                   xfs     defaults        0 0
    /dev/mapper/centos-data /data                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0

     磁盘空间是否满了,是由两项参数觉得的:

    第一个是inode满了,

    第二个是block满了,  磁盘满提示(no space on device left)

    inode小结:

      1.磁盘被分区并格式化为ext4文件系统后会生成一定数量的Inode和block.

      2.inode称为索引节点,它的作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)。

      3.ext3/ext4文件系统的block存放的是文件的实际内容。

      4.inode是磁盘上的一块存储空间,C6非启动分区inode默认大小256字节,C5是128字节。

      5.inode的表现形式是一串数字,不同的文件对应的inode(一串数字)在文件系统里是唯一的

      6.inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口

      7.ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个block.

      8.ext3/ext4文件系统下,正常情况一个文件占用且只有占用一个Inode(人和身份证)

      9.block是用来存储实际数据的,它的大小一般有1k,2k,3k几种。其中引导分区等为1k,其他普通分区为4k(C6)

      10.如果一个文件很多,可能占多个block,如果文件很少,至少占一个,并且剩余空间浪费了。

      11.inode查看 xfs_growfs /dev/sda1 

      12.查看inode总量和使用量命令df -i

      13.查看文件的Inode信息方法:ls -li   stat /etc/hosts

      14.如何生成及指定inode大小  mkfs.ext4 -b 2048 -l 256 /dev/sdb

    block小结:

    1.磁盘读取数据是按block为单位读取的。

    2.一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O.

    3.如果要提升磁盘IO性能,那么就要尽可能一次性读取数据尽量的多。

    4.一个block只能存放一个文件的内容,无论内容有多小,如果block 4k,那存放1k的文件,剩余3k就浪费了。

    5.block并非越大越好。block太大对应肖文杰存放就会浪费磁盘空间,例如:1000k的文件,block为4k,占用250个block;block为1k,占1000个block,访问效率谁更高?消耗IO分别为250次和1000次。

    6.根据业务需求,确定默认的block大小,如果是大文件(大于16k)一般设置block大一点,小文件(小于1k)一般设置block小一点。

    7.block太大例如4k,文件都是0.1k的,大量浪费磁盘空间,访问性能高。

    8.block太小例如1k,文件都是1000k,消耗磁盘IO,访问性能低。

    9.block的设置也是格式化分区的时候确定,mkfs.ext4 -b 2048 -I 256 /dev/sdb

    10.文件较大时,block设置大一些会提升磁盘访问效率。

    11.ext3/ext4文件一般设置为4k.

    block=4k=1024*4=4096

    [root@python01 ~]# xfs_growfs -i /dev/sda1|grep "bsize"
    log size unchanged, skipping
    data     =                       bsize=4096   blocks=128000, imaxpct=25
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=855, version=2

    总的小结:

    1.磁盘被分区格式化文件系统后,会分为inode和blcok两部分内容。

    2.inode存放文件的属性以及指向文件实体的指针,文件名不在inode里,

    一般在上级目录的block存放。

    3.访问文件,通过文件名-->inode-->blocks.

    4.inode一般情况默认大小256B,block大小1,2,4K,默认是4K,注意,引导分区等特殊分区除外。

    5.通过df -i查看inode的数量及使用情况,centos6/--命令dumpe2fs /dev/sda3 centos7--命令xfs_growfs  /dev/sda1 查看inode及block的大小及数量。

    通过inode删除文件,没有必要

    [root@python01 ~]# ls -lhi

    rm `find . -inum 159004`

    find .inum 159004 -exec rm {} ;

    文件删除恢复ext3grep,应该养成好习惯,先备份再操作,要能快速还原,不容易还原的,先通过多套测试环境测试,然后再操作。

    面试题:一个100M(102400k)的磁盘分区,分别写入1k的文件或写入1M的文件,分别可以写多少个?

    错误解答:很容易计算1k的个数:100*1024=102400个,1M文件的个数:100/1=100个。

    假设block=4k  写入 1k文件的数量:

      假设inode数量够多的时候,就是block的数量,浪费3/4的容量= 25600

      假设inode数量小于block的数量,就是inode的数量

    假设block=4k 写入1M的文件的数量:

      假设磁盘空间足够大,基本上就可以写入100/1M数量,一般情况inode和block都是足够。

    a.上面的考试题考察的是文件系统inode和block的知识

    b.inode是存放文件属性信息的(也包含指向文件实体的指针),默认大小128byte(c58),256byte(c64)l

    c.block是存放文件时间内容的,默认大小1k(boot)或4k(费系统分区默认给4k),一般企业多用4k的block.

    d.一个文件至少要占用一个inode及一个block。

    e.默认较大分区常规企业真实场景情况下,inode数量足够的。而block数量消耗的会更快。

    f.xfs--centos7中的文件系统默认 inode / block 等于1/4.

    企业案例:

    如果想磁盘写入数据提示如下错误:No space left on device,通过df -h查看磁盘空间,发现没有满,请问可能原因是什么?

    解答:可能是inode数量被耗尽了。

    企业工作中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件占满导致no space left on device的错误。

    clientmquene目录只有安装了sendmail服务,才会有,是sendmail邮件的临时队列,centos5.8默认就会装sendmail,centos6.6默认没有sendmail

    删除此目录文件的方法:

    /var/spool/clientmquene

    find . -print|xargs rm

    做定时任务删除此目录的文件

    * * * * * /etc/init.d/snmp_cron.sh >/dev/null 2>&1

    第二列的意义:

    [root@python01 ~]# ls -lhi
    total 24K
    100663363 -rw-------.  1 root root 1.6K May 24 23:28 anaconda-ks.cfg
    101300544 -rw-r--r--.  1 root root  15K Oct  3  2017 epel-release-latest-7.noarch.rpm
       690709 drwxr-xr-x   7 root root  171 Jul 11 11:23 oldboy
     33575402 drwxr-xr-x  26 root root 4.0K Jun 18 10:50 test

    文件长格式第二列
    文件类型表示符 文件类型说明
    d(directory) 表示这是一个目录,如上文ext,在exr2fs中,目录是一个特殊的文件。
    -(regular file) 表示这是一个普通的文件
    l(link) 表示这是一个符号链接文件,实际上它指向另一个文件。
    b(block) 表示块设备和其他的外围设备,是特殊类型的文件。
    c(character) 表示字符设备文件
    s(socket) 表示socket文件
    p(named pipe) 表示管道文件

    普通文件(regular file):

    第一个属性为“-”,按照文件内容,又大略可以分为:

    1.纯文本文件(ascll):文件内容可以直接读到数据,例如:字母、数字、特殊符号等等。可以用cat命令读文件,比如配置文件几乎都是这种类型的。

    2.二进制文件(binary):linux中的命令程序就是属于这种格式。例如cat命令就是一个二进制文件。

    3.数据格式文件(data):有些程序在运行的过程中会读取某些特定格式的文件,哪些特定格式的文件可以被称为数据文件。

    例如:linux在用户登录时,都会讲登录的数据记录在/var/log/wtmp那个文件内,该文件是一个数据文件。通过last命令读出来。

    cat命令会读出乱码。因为他属于一种特殊格式的文件。

    补充:通过file命令可以查看文件的类型

    [root@python01 ~]# ls -l /bin/ls
    -rwxr-xr-x. 1 root root 117680 Oct 31  2018 /bin/ls

    [root@python01 honortone]# ls -l
    total 76
    -rw-r--r-- 1 root root 12916 Aug 12 11:43 1.txt
    -rw-r--r-- 1 root root 57572 Aug 12 09:25 aduser.txt

    [root@python01 honortone]# which lastlog
    /usr/bin/lastlog

    存放命令的结果数据文件

    [root@python01 honortone]# ls /var/log/lastlog
    /var/log/lastlog

    [root@python01 honortone]# last

    [root@python01 honortone]# which last
    /usr/bin/last

    存放命令的结果数据文件

    [root@python01 honortone]# ls /var/log/wtmp
    /var/log/wtmp

    file命令查看文件的类型

    [root@python01 honortone]# file /bin/ls
    /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
    [root@python01 honortone]# file /var/log/wtmp
    /var/log/wtmp: data

    last查看用户的登录信息:

    root     pts/1        192.168.50.171   Mon Aug 12 11:44   still logged in   
    root     pts/0        192.168.50.171   Mon Aug 12 09:16   still logged in   
    root     pts/0        192.168.50.171   Fri Aug  9 09:50 - 17:14  (07:23)    
    root     pts/0        192.168.50.171   Tue Jul 30 13:17 - 16:59  (03:42) 

    lastlog显示用户最近登录登录的信息:

    Username         Port     From             Latest
    root             pts/1    192.168.50.171   Mon Aug 12 11:44:42 +0800 2019
    bin                                        **Never logged in**
    daemon                                     **Never logged in**

    df汇报文件系统磁盘空间:

    df -i 查看inode

    df -h 人类可读

    dumpe2fs查看文件系统内部信息(元数据-基本信息)

    目录文件:

    创建目录:mkdir

    删除目录:rm -r    rmdir

    查找长格式然后以目录(d)过滤

    区分文件和目录方法一:

    [root@python01 ~]# ls -l|grep "^d"
    drwxr-xr-x   2 root root    37 Aug 12 11:43 honortone
    drwxr-xr-x   7 root root   171 Jul 11 11:23 oldboy
    drwxr-xr-x  26 root root  4096 Jun 18 10:50 test

    区分文件和目录方法二:

    [root@python01 ~]# ls -F
    anaconda-ks.cfg  epel-release-latest-7.noarch.rpm  honortone/  oldboy/  test/

    [root@python01 ~]# ls -F /etc/ |grep "/$"

    tree 大树的意思,显示目录树,-L layer层数, -d显示目录

    字符设备或块设备文件:

    用不上:

    ll -al /dev/tty

    [root@python01 ~]# ll -al /dev/tty
    crw-rw-rw- 1 root tty 5, 0 Jul 30 13:15 /dev/tty

    块设备:

    [root@python01 ~]# ll -al /dev/sda
    brw-rw---- 1 root disk 8, 0 Jul 30 13:15 /dev/sda

    创建块设备不讲

    [root@python01 ~]# find /dev -type b
    /dev/dm-2
    /dev/dm-1
    /dev/dm-0
    /dev/sda2
    /dev/sda1
    /dev/sda
    /dev/sr0

    [root@python01 ~]# find /dev -type b|xargs ls -l
    brw-rw---- 1 root disk  253, 0 Jul 30 13:15 /dev/dm-0
    brw-rw---- 1 root disk  253, 1 Jul 30 13:15 /dev/dm-1
    brw-rw---- 1 root disk  253, 2 Jul 30 13:15 /dev/dm-2
    brw-rw---- 1 root disk    8, 0 Jul 30 13:15 /dev/sda
    brw-rw---- 1 root disk    8, 1 Jul 30 13:15 /dev/sda1
    brw-rw---- 1 root disk    8, 2 Jul 30 13:15 /dev/sda2
    brw-rw---- 1 root cdrom  11, 0 Jul 30 13:15 /dev/sr0

    字符设备:串口设备

    [root@python01 ~]# find /dev -type c|xargs ls -l
    crw-rw---- 1 root video    10, 175 Jul 30 13:15 /dev/agpgart
    crw------- 1 root root     10, 235 Jul 30 13:15 /dev/autofs
    crw------- 1 root root    248,   0 Jul 30 13:15 /dev/bsg/0:0:0:0
    crw------- 1 root root    248,   1 Jul 30 13:15 /dev/bsg/2:0:0:0
    crw------- 1 root root     10, 234 Jul 30 13:15 /dev/btrfs-control
    crw-rw-r-- 1 root root    189,   0 Jul 30 13:15 /dev/bus/usb/001/001
    crw-rw-r-- 1 root root    189, 128 Jul 30 13:15 /dev/bus/usb/002/001
    crw-rw-r-- 1 root root    189, 129 Jul 30 13:15 /dev/bus/usb/002/002
    crw-rw-r-- 1 root root    189, 130 Jul 30 13:15 /dev/bus/usb/002/003
    crw------- 1 root root      5,   1 Jul 30 13:15 /dev/console

    创建字符设备有点印象就可以了:

    mknod erictse c 5 1

    [root@python01 ~]# mknod erictse c 5 1
    [root@python01 ~]# ls -l erictse
    crw-r--r-- 1 root root 5, 1 Aug 12 16:49 erictse

    创建块设备有点印象就可以了:

    [root@python01 ~]# mknod erictseb b 5 1
    [root@python01 ~]# ls -l erictseb      
    brw-r--r-- 1 root root 5, 1 Aug 12 16:50 erictseb

    链接文件

    [root@python01 ~]# find /etc/ -type  l -name "init.d"|xargs ls -ld
    lrwxrwxrwx. 1 root root 11 May 24 23:24 /etc/init.d -> rc.d/init.d

    [root@python01 ~]# ls -l /etc/init.d /etc/rc.d/init.d  -d
    lrwxrwxrwx. 1 root root 11 May 24 23:24 /etc/init.d -> rc.d/init.d
    drwxr-xr-x. 2 root root 85 Jul 12 15:56 /etc/rc.d/init.d

    拓展名:

    1.tar、 .tar.gz 、 tgz、 .zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,unzip等

    2.sh表示shell脚本文件,通过shell语音开发的程序。

    3.pl表示perl语音文件,通过perl语音开发的程序。

    4.py表示Python语音文件,通过python语音开发的程序。

    5.html、.htm、.php、.jsp、.do表示网页语言的文件。

    6.conf表示系统配置文件。

    7.rpm表示rpm安装包文件。

    富人的思想:

    1.越是免费的往往越是更贵的!

    便宜的往往也是更贵的。

    只选贵的,不选对的。

    2.学习的投资永远是最有价值的投资。

    投资自己的大脑永远是最有价值的投资

    3.相信只有努力付出才能得到回报!

    4.不断的向有经验的人学习

    5.定好只是边界,百分百的投入

    不管是新手还是老手,学习都一定要根据目标给自己划定正确的知识边界,这就好比MH370一样,如不定好坠楼方位,

    动用再多的人力和物力也是难以搜寻到的!

    没有清晰的知识边界的学习者,就像能瞎子掰苞米,学了后面的忘记前面的,复习前面的又忘掉后面的,将会一事无成!

    6.行动失败了比不做要好的多

    一个人不成功的原因往往并不是因为缺少能力和技术,而是缺少行动的魄力和勇气,以及持续坚持自己的行动并不断自我完善的品质

  • 相关阅读:
    git merge branch
    Notes on Large-scale Video Classification with Convolutional Neural Networks
    ubuntu shell编程笔记
    cpu-z for ubuntu 12.04 64bit : cpu-g
    Notation, First Definitions 转 http://brnt.eu/phd/node9.html
    textext for Inkscape
    read later
    Matlab远程调试 转
    Ubuntu中的在文件中查找和替换命令
    Ubuntu 下matlab 查看memory函数
  • 原文地址:https://www.cnblogs.com/ericchengge677/p/11196022.html
Copyright © 2011-2022 走看看