Linux之文件属性

Posted 游小刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之文件属性相关的知识,希望对你有一定的参考价值。

文件属性是什么?

[root@luffy_boy-001 /]# ls -lhi /etc/hosts
129822 -rw-r--r--. 2 root root 198 Jan 11  2019 /etc/hosts

文件属性就是 ls  -lhi 命令输出结果每一列的含义

l   list one file per line
i   --inode   print the index number of each file
h  --human-readable       with -l, print sizes in human readable format
                               (e.g., 1K 234M 2G)
129822      # inode号码
-           # 文件类型
rw-r--r--.  # 文件的权限.(.与selinux有关)
2           # 文件硬链接数量
root        # 主人
root        # 家人
198         # 文件大小
Jan  11 2019    # 最后修改时间
/etc/hosts      # 文件名不是文件的属性

 

inod和block简介

我们从获得一个硬盘,到可以向硬盘中存放数据,都经历了哪些阶段?

做一个比喻,把硬盘比作房子的话。

有房子----------------->买了个硬盘

划分隔断-------------->分区

装修-不同风格-------->格式化创建文件系统

安装门窗--------------->挂载

住人--------------------->存数据

 

inode

1、inode的含义

用来存放文件属性的空间

我们通过iNode号码来找到这个空间

inode号码----家庭住址
inode空间----家

文件名不存放在inode中。

2、inode怎么出来的

通过格式化创建文件系统,得到

3、inode的特点

  1. inode存放文件属性
  2. 存放block的位置(指向block的指针)
  3. 创建一个文件要占用一个inode
  4. inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
  5. inode在某一个文件系统(分区),是唯一的

4、怎么使用inode和查看

[root@luffy_boy-001 /]# df -i (系统里面inode用了多少,剩余多少)
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda3      462384 55433 406951   12% /
tmpfs          488562     1 488561    1% /dev/shm
/dev/sda1       51200    39  51161    1% /boot
/dev/sr0            0     0      0     - /mnt
[root@luffy_boy-001 /]# df -ih (-h人类可读)
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda3        452K   55K  398K   12% /
tmpfs            478K     1  478K    1% /dev/shm
/dev/sda1         50K    39   50K    1% /boot
/dev/sr0            0     0     0     - /mnt
[root@luffy_boy-001 /]# ls -ilh (查看某些文件的inode)
total 122K
143585 drwxr-xr-x.   3 root root 4.0K Jan 12  2019 app
    29 dr-xr-xr-x.   2 root root 4.0K Jan 10  2019 bin
     2 dr-xr-xr-x.   5 root root 1.0K Jan 10  2019 boot
143562 drwxr-xr-x.   2 root root 4.0K Jan 10  2019 data
143552 drwxr-xr-x.   3 root root 4.0K Jan 10  2019 data_bak
     4 drwxr-xr-x.  20 root root 3.7K Jan 10  2019 dev
129795 drwxr-xr-x.  78 root root 4.0K May 20 01:08 etc
    30 drwxr-xr-x.   3 root root 4.0K Jan 11  2019 home

 

 

block

1、block的含义

 数据块,实际存放数据的位置

2、block是怎么来的

也是格式化创建文件系统

3、block的特点

  1. block是实际存放数据的位置
  2. block 默认4k(centos 6.x) 1k 8k
  3. 创建大文件会占用多个block,如果文件很小1k,4k剩余的空间会被浪费。
  4. 创建一个非空文件要占用一个inode和至少1个block
  5. 每读取一个block就会消耗一次磁盘I/O(input/output 磁盘读写)。

4、怎么使用和查看

[root@luffy_boy-001 /]# df -h  (查看磁盘block使用情况)
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.9G  1.5G  5.1G  22% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sr0        3.7G  3.7G     0 100% /mnt

 

 

[root@luffy_boy-001 /]# ls -lh  
total 122K
drwxr-xr-x.   3 root root 4.0K Jan 12  2019 app
dr-xr-xr-x.   2 root root 4.0K Jan 10  2019 bin
dr-xr-xr-x.   5 root root 1.0K Jan 10  2019 boot
drwxr-xr-x.   2 root root 4.0K Jan 10  2019 data
drwxr-xr-x.   3 root root 4.0K Jan 10  2019 data_bak
drwxr-xr-x.  20 root root 3.7K Jan 10  2019 dev

 

 

oldboyfile寻宝

 

经典案例:磁盘空间不足

no space left on device磁盘空间不足-因为block满了。
seq 100000000 >/tmp/big
#第一个里程碑-看看到底哪里满了
[root@oldboyedu01-nb ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  8.8G     0 100% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot

#第二个里程碑-是哪一个目录占得空间大,最终定位到目录或文件
[root@oldboyedu01-nb ~]#
[root@oldboyedu01-nb ~]# du -sh /*|grep G
1.1G    /usr
7.4G    /var
[root@oldboyedu01-nb ~]# du -sh /var/*|grep G
7.3G    /var/log
[root@oldboyedu01-nb ~]# du -sh /var/log/*|grep G
7.3G    /var/log/messages
[root@oldboyedu01-nb ~]# ls -lh /var/log/messages
-rw------- 1 root root 7.3G Oct 16 19:20 /var/log/messages
#第三个里程碑-问清楚是否可以删除,然后在操作。

 【Y】企业案例:如果向磁盘写入数据提示如下错误:No space left on device(磁盘空间不足),通过df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景什么情况下会导致这个问题发生?
inode用光了。

模拟环境的命令。
mkdir -p /app/logs
dd if=/dev/zero of=/dev/sdc bs=8K  count=10
ls -l /dev/sdc
mkfs.ext4 /dev/sdc

mount -o loop /dev/sdc /app/logs


[root@oldboyedu01-nb ~]# cd /app/logs/
[root@oldboyedu01-nb logs]# touch stu{1..6}.log
touch: cannot touch `stu6.log\': No space left on device
[root@oldboyedu01-nb logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.6G  6.9G  19% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdc         73K   14K   55K  21% /app/logs
[root@oldboyedu01-nb logs]# df -i
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda3      593344 58530 534814   10% /
tmpfs          488562     1 488561    1% /dev/shm
/dev/sda1       51200    39  51161    1% /boot
/dev/sdc           16    16      0  100% /app/logs

 

 解决办法:删除一些不需要的文件,释放一些inode

 

扩展

 linux中du与df的区别和联系

1,两者区别
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在
的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。
df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不
是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已
经删除的文件, df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除
的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。
当文件系统也确定删除了该文件后,这时候du与df就一致了。

2,du查看目录大小,df查看磁盘使用情况。
我常使用的命令(必要时,sudo使用root权限),
1).查看某个目录的大小:du -hs /home/master/documents
查看目录下所有目录的大小并按大小降序排列:sudo du -sm /etc/* | sort -nr | less
2).查看磁盘使用情况(文件系统的使用情况):sudo df -h
df --block-size=GB
-h是使输出结果更易于人类阅读;du -s只展示目录的使用总量(不分别展示各个子目录情况),-m是以
MB为单位展示目录的大小(当然-k/-g就是KB/GB了)。

3,du使用详细案例
a:显示全部目录和其次目录下的每个档案所占的磁盘空间
s:只显示各档案大小的总合
b:大小用bytes来表示
x:跳过在不同文件系统上的目录不予统计
a:递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数
...
使用du进行查看
root@tech163:/home/htmlfile# du
16 ./test
60 ./bbb
84 .

其中第一列是以块为单位计的磁盘空间容量,第二列列出目录中使用这些空间的目录名称
1)查看当前目录包含子目录的大小
root@tech163:/home/htmlfile# du -sm .
1 .
其中的du -sm . 的“.”是代表当前目录。
2)查看当前目录以及子目录的大小
root@tech163:/home/htmlfile# du -h
16K ./test
60K ./bbb
84K .
其中 -h 表示使用K,M,G的人性化形式显示。
3)看到当前目录下的bbb目录大小,但不想查看其他目录以及子目录
root@tech163:/home/htmlfile# du -ch bbb | tail -n 1
60K total
使用了管道包含了du和tail两个命令,-c表示最后计算出所列目录的大小之和。
4)列出当前目录下所有目录和文件的大小
root@tech163:/home/htmlfile# du -ah bbb
4.0K bbb/mysql.php
4.0K bbb/index.htm
4.0K bbb/p.php
28K bbb/memcache.php
12K bbb/.session.php.swp
4.0K bbb/hello.html
60K bbb
其中-a表示包含目录和文件
5)不换行列出目录以及子目录大小的信息
root@tech163:/home/htmlfile# du -0h
16K ./test60K ./bbb84K .root@tech163:/home/htmlfile#
其中 -0 表示列出一条信息后不换行,接着输出第二条信息。

4,df详细案例
a:显示全部的档案系统和各分割区的磁盘使用情形
i:显示i -nodes的使用量
k:大小用k来表示 (默认值)
t:显示某一个档案系统的所有分割区磁盘使用量
x:显示不是某一个档案系统的所有分割区磁盘使用量
T:显示每个分割区所属的档案系统名称
使用df进行查看
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/cciss/c0d0p1 2068156 611572 1351528 32% /
tmpfs 1038080 4 1038076 1% /lib/init/rw
udev 10240 64 10176 1% /dev
tmpfs 1038080 4 1038076 1% /dev/shm
/dev/cciss/c0d0p9 130700120 44034236 86665884 34% /home
/dev/cciss/c0d0p7 2068156 68932 1999224 4% /tmp
/dev/cciss/c0d0p8 4132372 1760620 2161840 45% /usr
/dev/cciss/c0d0p6 2068156 330104 1632996 17% /var
第一行是文件系统对应的硬盘分区
第二行是分区包含的数据块的数据(1数据库为1024字节)
第三四行是已用和未用的数据块数组
第五行是普通用户空间使用的百分比
第六行是文件系统的安装点
其中第三四行已用和未用数据块相加并不等于第二行总数据块,这是因为分区留了少量空间提供给
系统管理员使用。
1)
chenyz@gzhouse:~$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/cciss/c0d0p1 2.0G 598M 1.3G 32% /
tmpfs 1014M 4.0K 1014M 1% /lib/init/rw
udev 10M 64K 10M 1% /dev
tmpfs 1014M 4.0K 1014M 1% /dev/shm
/dev/cciss/c0d0p9 125G 42G 83G 34% /home
/dev/cciss/c0d0p7 2.0G 68M 2.0G 4% /tmp
/dev/cciss/c0d0p8 4.0G 1.7G 2.1G 45% /usr
/dev/cciss/c0d0p6 2.0G 333M 1.6G 18% /var
其中 -h 表示使用K,M,G的人性化形式显示。
2)
chenyz@gzhouse:~$ df -ia
文件系统 Inode (I)已用 (I)可用 (I)已用% 挂载点
/dev/cciss/c0d0p1 262752 60150 202602 23% /
tmpfs 224142 10 224132 1% /lib/init/rw
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
procbususb 0 0 0 - /proc/bus/usb
udev 224142 770 223372 1% /dev
tmpfs 224142 3 224139 1% /dev/shm
devpts 0 0 0 - /dev/pts
/dev/cciss/c0d0p9 130763968 1972907 128791061 2% /home
/dev/cciss/c0d0p7 262752 54 262698 1% /tmp
/dev/cciss/c0d0p8 524832 35743 489089 7% /usr
/dev/cciss/c0d0p6 262752 4896 257856 2% /var
所谓的 inode 是用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。在分割扇区
时,系统会先做出一堆 inode 以供以后使用,inode 的数量关系着系统中可以建立的档案及目录总数。
如果要存的档案大部分都很小,则同样大小的硬盘中会有较多的档案,也就是说需要较多的 inode 来挂
档案及目录

 

 

 

linux文件类型和扩展名

常见文件类型的种类

- f    file           普通文件
  d   directory  目录
   l   softlink     软链接(快捷方式)

普通文件的分类

普通文件 都显示的是 - ,但是也是有区别的,怎么查看不同类型的普通文件呢? 
[root@oldboyedu01-nb ~]# ls -l /tmp/etc.tar.gz  /bin/ls /etc/hosts
-rwxr-xr-x. 1 root root  117048 Mar 23  2017 /bin/ls
-rw-r--r--. 2 root root     200 Sep 25 20:19 /etc/hosts
-rw-r--r--  1 root root 9744299 Oct 20  2017 /tmp/etc.tar.gz

用file 查看文件详细类型
##二进制文件 命令 [root@oldboyedu01-nb ~]# 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.18, stripped ##文本文件 [root@oldboyedu01-nb ~]# file /etc/hosts /etc/hosts: ASCII text ##数据文件 data [root@oldboyedu01-nb ~]# file /tmp/etc.tar.gz /tmp/etc.tar.gz: gzip compressed data, from Unix, last modified: Fri Oct 20 01:36:16 2017

 

 

Linux下面的扩展名

windows     windows下通过扩展名区分不同类型的文件。
linux           扩展名是用来给我们自己看的。就算手动修改或者添加了扩展名,他的文件类型还是不会改变