1.文件属性

  1. [root@oldboyedu oldboy]# ls -lhi /etc/hosts
  2. 915740 -rw-r--r--. 2 root root 158 Mar 25 12:28 /etc/hosts
  3. 915740 - rw-r--r--. 2 root root 158
  4. inode号码 文件的类型 文件的权限.与selinux 有关 文件硬链接数量 主人 家人 文件大小
  5. Mar 25 12:28 /etc/hosts
  6. 文件修改时间 文件名

2.inode与block

引言:获得一个硬盘到可以向硬盘中存放数据:
硬盘(房子),分区(划分隔断),格式化创建文件系统 (装修,不同风格),挂载(安装门窗inode)

2.1inode:index node

1)含义:索引节点:
用来存放文件属性的空间,通过inode 号码找到这个空间的,文件名不存放在inode 中。
inode号码———-家庭住址 inode空间———-家 庭
2)怎么来的:
格式化创建文件系统
3)特点:

  • inode 存放文件属性
  • 存放 block 的位置 指向 block 的指针
  • 创建一个文件要占用一个 inode
  • inode 节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口。

硬链接数量:超市入口的数量

  • inode 在某一个文件系统(分区),是唯一的。

4)怎么用看:
ls -i (看某些文件的 inode 号码)
df -i (系统里面 inode 用了多少剩余多少)

  1. [root@oldboyedu oldboy]# ls -lih
  2. total 40K
  3. 917220 -rw-r--r--. 1 root root 0 Mar 25 23:16 alex.txt
  4. 917215 -rw-r--r--. 1 root root 292 Mar 25 22:55 ett.txt
  5. 917222 drwxr-xr-x. 3 root root 4.0K Mar 26 09:19 ext
  1. [root@oldboyedu oldboy]# df -i
  2. Filesystem Inodes IUsed IFree IUse% Mounted on
  3. /dev/sda3 1201872 55469 1146403 5% /
  4. tmpfs 125514 1 125513 1% /dev/shm
  5. /dev/sda1 51200 39 51161 1% /boot

2.2block

1)含义:数据块

block实际存放数据的位置
2)怎么来的
格式化创建文件系统
3)特点
block 是实际存放数据的位置
block 4k(centos 6.x) 1k 8k
创建大文件会占用多个 block, 如果文件很小 1k,4k 剩余的空间会被浪费。
创建一个非空文件要占用一个 inode 和至少 1 个 block
每读取一个 block 就会消耗一次磁盘 I /O input/output 磁盘读写)。
4)怎么用 怎么看
df -h( 磁盘 block 使用情况)
ls -lh

  1. [root@oldboyedu ~]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 18G 1.6G 16G 9% /
  4. tmpfs 491M 0 491M 0% /dev/shm
  5. /dev/sda1 190M 40M 141M 22% /boot

3.磁盘空间不足情况详解

若看见:no space left on device 磁盘空间不足 ,因为 block 满了。
seq 100000000 >/tmp/big # 写入大文件
第一个里程碑 :看看到底哪里满了

  1. [root@oldboyedu01-nb ~]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 8.8G 8.8G 0 100% /
  4. tmpfs 1.9G 0 1.9G 0% /dev/shm
  5. /dev/sda1 190M 40M 141M 22% /boot

第二个里程碑 :是哪一个目录占得空间大,最终定位到目录或文件

  1. [root@oldboyedu01-nb ~]#
  2. [root@oldboyedu01-nb ~]# du sh /*|grep G
  3. 1.1G /usr
  4. 7.4G /var
  5. [root@oldboyedu01-nb ~]# du sh /var/*|grep G
  6. 7.3G /var/log
  7. [root@oldboyedu01-nb ~]# du sh /var/log/*|grep G
  8. 7.3G /var/log/messages
  9. [root@oldboyedu01-nb ~]# ls lh /var/log/messages
  10. -rw-------- 1 root root 7.3G Oct 16 19:20 /var/log/messages

第三个里程碑 :问清楚是否可以删除,然后在操作。

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

  1. mkdir -p /app/logs
  2. dd if=/dev/zero of=/dev/sdc bs=8K count=10 # 创建一个小小的文件。
  3. ls -l /dev/sdc
  4. mkfs.ext4 /dev/sdc # 创建文件系统,即格式化。
  5. mount -o loop /dev/sdc /app/logs # 挂载
  6. [root@oldboyedu logs]# df -h # 查看是否挂载成功。
  7. Filesystem Size Used Avail Use% Mounted on
  8. /dev/sda3 18G 1.6G 16G 9% /
  9. tmpfs 491M 0 491M 0% /dev/shm
  10. /dev/sda1 190M 40M 141M 22% /boot
  11. /dev/sdc 73K 14K 55K 21% /app/logs # 挂载成功。
  12. [root@oldboyedu logs]# df -i # 查看inode
  13. Filesystem Inodes IUsed IFree IUse% Mounted on
  14. /dev/sda3 1201872 55475 1146397 5% /
  15. tmpfs 125514 1 125513 1% /dev/shm
  16. /dev/sda1 51200 39 51161 1% /boot
  17. /dev/sdc 16 11 5 69% /app/logs # 16个inode,可用5个

出现状况

[root@oldboyedu logs]# cd /app/logs/
[root@oldboyedu logs]# touch stu{1..6}.log
touch: cannot touch `stu6.log': No space left on device

# 查看block,此时还有空间
[root@oldboyedu logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        18G  1.6G   16G   9% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdc         73K   15K   54K  22% /app/logs

# 查看inode,此时inode已经没有了。
[root@oldboyedu logs]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda3      1201872 55475 1146397    5% /
tmpfs           125514     1  125513    1% /dev/shm
/dev/sda1        51200    39   51161    1% /boot
/dev/sdc            16    16       0  100% /app/logs

# 删除文件,再查看inode
[root@oldboyedu logs]# rm -f *.log
[root@oldboyedu logs]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda3      1201872 55475 1146397    5% /
tmpfs           125514     1  125513    1% /dev/shm
/dev/sda1        51200    39   51161    1% /boot
/dev/sdc            16    11       5   69% /app/logs

4.文件类型及扩展名

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

f file普通文件
[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

##二进制文件 命令
[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-n b ~]# file /tmp/etc.tar.gz
/tmp/etc.tar.gz: gzip compressed data, from Unix, last modified: Fri
Oct 20 01:36:16 2017

扩展名-文件后面的小尾巴
windows:windows通过扩展名区分不同类型的文件。
linux:扩展名是用来给我们看的。
.sh 脚本文件(命令大礼包,可以用,可以运行。)
.conf 配置文件

5.Linux用户分类

5.1用户和用户组简介

整体对于一个文件目录来说:用户可以分为 3 类
主人:所有者的名字
家人:所有者属于的组的名字
陌生人

[root@oldboyedu-01 nb ~]# id oldboy
uid=500(oldboy) gid=500(oldboy) groups=500(oldboy)
#id查询用户信息
#属于哪个用户组

5.2用户分类

UID: user id,用户的 id 号码 身份证号码
GID: group id,用户组的 id 号码 户口本的号码

用户 UID
皇帝 root 0
傀儡 虚拟用户 1-499 系统中每个进程要有一个对应的用户,无法
使用的
贫民百姓 普通用户 500+

如何保护皇帝
1.禁止 root 远程登录
2.修改 ssh 默认的端口号 22
3.定期分析 /var/log/secure 记录着用户的登录信息

6.rtc-passwd文件详解

与用户有关的文件
/etc/passwd 存放的是用户的信息
/etc/shadow 用户密码的信息
/etc/group 用户组的信息

[root@oldboyedu ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
oldboy:x:500:500::/home/oldboy:/bin/bash
第一列:用户名字
第二列:存放密码的地方
第三列:UID
第四列:GID
第五列:用户的说明信息,默认为空
第六列:用户的家目录
第七列:用户使用的 shell, 用户使用的命令解释 器
/bin/bash------------centos 默认的命令解释器
/sbin/nologin--------用户无法登陆系统,相当于是傀儡用户

7.linux位权限说明与计算

linux基础权限介绍
r 4 read 可以读取文件内容
w 2 write 修改文件内容
x 1 execute 可以运行文件 命令 脚本
- 0 什么权限都没有

[root@oldboyedu ~]# ls -l /etc/hosts
-  rw-  r--  r--. 2 root root 158 Mar 25 12:28 /etc/hosts
   主人 家人 陌生人  
   420  400  400
    6    4    4

[root@oldboyedu ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 117048 Mar 23  2017 /bin/ls
 421401401
  7  5  5

8.软链接和硬链接

8.1软链接———windows 快捷方式

符号链接

  • 怎么来的

    [root@oldboyedu oldboy]# ln -s oldboy.txt oldboy.txt-soft        # 创建软链接。
    [root@oldboyedu oldboy]# ls -l oldboy.txt*                        # 查看
    -rw-r--r--. 1 root root 29 Apr 11 14:53 oldboy.txt
    lrwxrwxrwx. 1 root root 10 Apr 11 19:19 oldboy.txt-soft -> oldboy.txt
    
  • 特点

1.存放着源文件的位置
2.源文件被删除
3.节约时间

8.2硬链接

相当于是超市的前后门,通过不同的大门进入超市
在同一个分区中,两个文件或多个文件的 inode 号码相同,这些文件互为硬链接

  • 怎么来的

ln创建

[root@oldboyedu oldboy]# ls -l oldboy.txt*
-rw-r--r--. 1 root root 29 Apr 11 14:53 oldboy.txt
lrwxrwxrwx. 1 root root 10 Apr 11 19:19 oldboy.txt-soft -> oldboy.txt
[root@oldboyedu oldboy]# ln oldboy.txt oldboy.txt-hard        # 创建硬链接
[root@oldboyedu oldboy]# ls -lhi oldboy.txt*                # 查看inode
917219 -rw-r--r--. 2 root root 29 Apr 11 14:53 oldboy.txt
917219 -rw-r--r--. 2 root root 29 Apr 11 14:53 oldboy.txt-hard
917205 lrwxrwxrwx. 1 root root 10 Apr 11 19:19 oldboy.txt-soft -> oldboy.txt
  • 特点

1.相当于是超市的前后门,硬链接数量就是超市一共有多少门
2.删除硬链接或源文件,文件还是可以使用的
3.把硬链接和源文件都删除,文件被删除 硬链接数量为 0

8.3软链接和硬链接的区别

描述 linux 下软链接和硬链接的区别(面试题)
解答:
1) 如何创建:
a) 默认不带参数情况下, ln 命令创建的是硬链接,带 -s 参数的 ln 命令创建的是软链接。
2) 含义:
a) 硬链接文件与源文件的 inode 节点号相同,而软链接文件相当于 windows下面的快捷方式( inode 节点号与源文件不同)
3) 特点:
a) 不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到
b) 软链接可以跨文件系统,硬链接不可以跨文件系统。
4) 怎么没的(源文件,软链接,硬链接与删除)
a) 除软链接文件 对源文件及硬链接文件无任何影响;
b) 除文件的硬链接文件,对源文件及软链接文件无任何影响;
c) 除链接文件的源文件 ,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状);
d) 删除源文件及其硬链接文件,整个文件才会被 真正 的删除

9.文件删除原理

某个文件没有被彻底删除,导致的磁盘空间满了。

模拟思路
向/var/log/secure 追加 8 亿行
seq 800000000

[root@oldboyedu01 nb oldboy]# 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
/dev/sdc 73K 14K 55K 21% /app/logs

#正常的排错过程。
[root@oldboyedu01-nb oldboy]# du -sh /* |grep G
du: cannot access `/proc/2904/task/2904/fd/4': No such file or directory
du: cannot access `/proc/2904/task/2904/fdinfo/4': No such file or
directory
du: cannot access `/p
roc/2904/fd/4': No such file or directory
du: cannot access `/proc/2904/fdinfo/4': No such file or directory
1.1G    /usr
7.4G    /var
[root@oldboyedu01-nb oldboy]# du -sh /var/* |grep G
7.3G    /var/log
[root@oldboyedu01-nb oldboy]# du -sh /var/log/* |grep G        # 把大文件过滤出来
7.3G    /var/log/secure
[root@oldboyedu01-nb oldboy]# \rm -f /var/log/secure        # 删除大文件

#磁盘空间满了
[root@oldboyedu01-nb oldboy]# 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
/dev/sdc 73K 14K 55K 21% /app/logs

[root@oldboyedu01-nb oldboy]# du -sh /* |grep G
du: cannot access `/proc/2914/task/2914/fd/4': No such file or directory
du: cannot access `/proc/2914/
task/2914/fdinfo/4': No such file or
directory
du: cannot access `/proc/2914/fd/4': No such file or directory
du: cannot access `/proc/2914/fdinfo/4': No such file or directory
1.1G    /usr

系统中某个文件没有被彻底删除。
如何找出硬链接数量为0 ,进程调用数不为 0

[root@oldboyedu01-nb o ldboy]# lsof |grep delete
rsyslogd 1250 root 2w REG 8,3             7803924480
130420 /var/log/secure (deleted)
软件名称                                   文件大小
文件名
deleted------ 标记 这个文件的硬链接数量为 0 ,进程调用数不为 0



##重启对应的服务            # 就可以彻底删除。
[root@oldboyedu01-nb oldboy]# /etc/init.d/rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@oldboyedu01-nb oldboy]# 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

10.磁盘空间不足总结

磁盘空间不足排查.png

11.linux修改、访问、改变时间简介

mtime modified time 文件的修改时间 文件内容的变化时间
ctime change time 文件属性的改变时间 硬链接数量 文件大小 文件权限
atime access time 文件的访问时间 cat

[root@oldboyedu ~]# cd /oldboy/
[root@oldboyedu oldboy]# ls -l oldboy.txt
-rw-r--r--. 2 root root 29 Apr 11 14:53 oldboy.txt
[root@oldboyedu oldboy]# stat oldboy.txt                # 查看mtime,ctime,atime
  File: `oldboy.txt'
  Size: 29            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 917219      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-11 14:53:25.159999113 +0800
Modify: 2020-04-11 14:53:07.892993990 +0800
Change: 2020-04-11 19:23:07.282989279 +0800


[root@oldboyedu oldboy]# echo hello >>oldboy.txt        # 更改文件再查看mtime,ctime,atime
[root@oldboyedu oldboy]# stat oldboy.txt        # 注意:由于文件大小也改变,所以mtime,ctime都发生变化
  File: `oldboy.txt'
  Size: 35            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 917219      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-11 14:53:25.159999113 +0800
Modify: 2020-04-11 20:10:15.263963946 +0800
Change: 2020-04-11 20:10:15.263963946 +0800


[root@oldboyedu oldboy]# ln oldboy.txt oldboy.txt-hard        # 创建硬连接再查看mtime,ctime,atime
ln: creating hard link `oldboy.txt-hard': File exists
[root@oldboyedu oldboy]# stat oldboy.txt
  File: `oldboy.txt'
  Size: 35            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 917219      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-11 14:53:25.159999113 +0800
Modify: 2020-04-11 20:10:15.263963946 +0800
Change: 2020-04-11 20:10:15.263963946 +0800


[root@oldboyedu oldboy]# cat oldboy.txt                        # 查看文件再查看mtime,ctime,atime
I am oldboy,myqq is 31333741
hello
[root@oldboyedu oldboy]# stat oldboy.txt
  File: `oldboy.txt'
  Size: 35            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 917219      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-11 20:11:35.951991033 +0800
Modify: 2020-04-11 20:10:15.263963946 +0800
Change: 2020-04-11 20:10:15.263963946 +0800