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的特点
- inode存放文件属性
- 存放block的位置(指向block的指针)
- 创建一个文件要占用一个inode
- inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
- 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的特点
- block是实际存放数据的位置
- block 默认4k(centos 6.x) 1k 8k
- 创建大文件会占用多个block,如果文件很小1k,4k剩余的空间会被浪费。
- 创建一个非空文件要占用一个inode和至少1个block
- 每读取一个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 扩展名是用来给我们自己看的。就算手动修改或者添加了扩展名,他的文件类型还是不会改变
# 创建压缩包文件 [root@luffy_boy-001 ~]# tar zcf /oldbo_y.txt /oldboy/alex.txt tar: Removing leading `/\' from member names # 查看文件 [root@luffy_boy-001 ~]# cat /oldboy.txt Dz Y@P²\'PؽF;MpM以上是关于Linux之文件属性的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情