高级DBA运维
成长之路

第6章:文件属性信息说明

文章目录

1.文件属性概念说明

[oldboy@linux ~]$ ll -i /etc/
total 1096
101115776 d rwxr-xr-x. 3 root root 101 Dec 29 16:33 abrt
34011044 - rw-r--r--. 1 root root 16 Dec 29 16:35 adjtime
33596583 - rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
33554501 - rw-r--r--. 1 root root 12288 Dec 29 16:42 aliases.db
33583455 d rwxr-xr-x. 2 root root 236 Dec 29 16:33 alternatives
34030593 - rw-------. 1 root root 541 Apr 11 2018 anacrontab
33880205 - rw-r--r--. 1 root root 55 Apr 11 2018 asound.conf
101198241 d rwxr-x---. 3 root root 43 Dec 29 16:33 audisp
01           02       03  04   05  06    07         08

01. index nodes 索引节点信息
02. 文件的类型 文件的权限 
03. 硬链接数 相当于进入超市的门(门的数量)
04. 直接监护人---文件所属用户
05. 亲人家人 ---文件所属组用户
    隔壁王 ---其他用户
06. 文件数据大小信息
07. 文件的时间信息
以上信息表示文件属性信息
08. 文件路径以及名称信息

2.文件类型概念详述

windows 利用扩展名区分文件类型(文本 视频 音频 压缩包)
linux 并不是利用扩展名区分文件类型(标识信息)

—2.1 文件类型分类

——2.1.1 普通文件 –

1) 纯文本普通文件 直接看文件内容 直接编辑文件 (配置文件)
[root@linux ~]# file oldboy.txt
oldboy.txt: ASCII text
2) 二进制普通文件 无法查看文件内容 具有执行权限 (命令文件 数据库文件)
[root@linux ~]# file /usr/bin/vim
/usr/bin/vim: ELF 64-bit LSB executable,
3) 数据类型普通文件 压缩包数据类型文件 无法查看文件内容 (压缩过的文件)

——2.1.2 目录文件 d

directory
[root@linux ~]# file old
old: directory

——2.1.3 链接文件 l

link == 快捷方式
ln -s 要被链接的文件路径信息 链接文件路径信息 
ln -s /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/ifcfg-eth0_soft-link
[root@linux ~]# file /etc/ifcfg-eth0_soft-link 
/etc/ifcfg-eth0_soft-link
企业应用:
方便开发人员 脚本或者代码信息进行调用

——2.1.4 设备文件 c

character 字符设备文件

源源不断的产生字符信息 /dev/urandom 随机设备文件 
tr -cd '0-9a-zA-Z' </dev/urandom|head -c 6 --- 生成随机数-创建用户密码信息 saDgu01 
/dev/zero -- 磁盘管理 
/dev/null -- 系统黑洞 命令生成的信息 定时任务
既不要放在屏幕上: 损耗内存空间资源
也不要放到文件中: 占用磁盘空间
[root@linux ~]# echo oldboy123 >/oldboy/oldboy.txt 标准输出
[root@linux ~]# ech oldboy123 >>/oldboy/oldboy.txt 标准输出追加重定向
[root@linux ~]# ech oldboy123 2>>/oldboy/oldboy.txt 错误输出追加重定向
[root@linux ~]# ech oldboy123 >>/oldboy/oldboy.txt 2>>/oldboy/err.txt 标准输出追加重定向和错误输出追加重定向

——2.1.5 数据存储磁盘文件 b

block 
/dev/sda 磁盘
/dev/sr0

——2.1.6 套接文件

 s socket 套接接口文件和网络通讯相关的文件(python 网络编程)

——2.1.7 管道文件 p(pipe)

—2.2 查看文件类型

[root@linux ~]# file oldboy.txt
oldboy.txt: ASCII text
配置文件.conf
日志文件.log
脚本文件.sh/py

—2.3 文件目录操作命令总结

显示文件信息类型命令 file
显示命令绝对路径信息 which
显示命令路径以及文件 whereis
[root@linux ~]# which vim
/usr/bin/vim
[root@linux ~]# whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz

——2.3.1 快速定位文件路径新locate

快速定位文件路径信息 locate
locate 文件名称 --- 快速找到文件所在的路径信息
yum provides locate 发现locate的文件大礼包在mlocate

常见错误:
01) 安装完软件, 直接执行命令会有报错
[root@linux ~]# yum install -y mlocate
[root@linux ~]# locate hosts
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
02) 执行命令查找存在的文件没有结果信息updatedb
[root@linux ~]# updatedb
[root@linux ~]# locate alex01
/root/alex01.txt

——2.3.2 快速查找数据信息命令 find

用法说明:
find 路径信息(从哪个位置进行查找) 查找的文件类型 文件名称 
find /oldboy -type f -name "oldboy.txt"
[root@linux ~]# find /oldboy -type f -name "oldboy.txt"
/oldboy/oldboy.txt

利用find命令配合*(通配符号)模糊查找数据信息
[root@linux ~]# find /oldboy -type f -name "oldboy*"
/oldboy/oldboy.mp3
/oldboy/oldboy.txt

文件类型标识 find命令文件类型标识
d              d 
l              l 
-              f 

利用find命令忽略大小写查找文件
[root@oldboy-xiaodao.com.cn oldboy]# find /oldboy -type f -name "oldboy*"
/oldboy/oldboy.mp3
/oldboy/oldboy.txt
[root@oldboy-xiaodao.com.cn oldboy]# find /oldboy -type f -iname "oldboy*"
/oldboy/oldboy.mp3
/oldboy/oldboy.txt
/oldboy/Oldboy.txt

如何利用find命令查找数据时,排除指定目录不需要进行查找
find / 没有放置在/proc /usr 

——2.3.3 find命令根据文件大小查找数据

`c' for bytes
`k' for Kilobytes (units of 1024 bytes)
`M' for Megabytes (units of 1048576 bytes)
`G' for Gigabytes (units of 1073741824 bytes)

a 找寻指定大小的文件
[root@linux ~]# find /oldboy -type f -iname "oldboy*" -size 10c

b 找寻比指定数值大的文件 +10
[root@linux ~]# find /oldboy -type f -iname "oldboy*" -size +10c
/oldboy/oldboy02.txt
/oldboy/oldboy03.txt

c 找寻比指定数值小的文件 -10
[root@linux ~]# find /oldboy -type f -iname "oldboy*" -size -10c
/oldboy/oldboy.mp3
/oldboy/oldboy.txt
/oldboy/Oldboy.txt
/oldboy/oldboy01.txt

——2.3.4 find命令指定查找数据目录层级

[root@linux oldboy]# tree
.
├── oldboy01
│?? ├── oldboy01.txt
│?? └── oldboy02
│?? ├── oldboy02.txt
│?? └── oldboy03
└── oldboy.txt
[root@linux oldboy]# find /oldboy -type f -name "oldboy*" -maxdepth 1
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not 
positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify 
options before other arguments.
查找:警告:您在非选项参数 -type 之后指定了 -maxdepth 选项,但选项不是位置性的(-maxdepth 影响在它之前指定的测试以及在它之后指定的测试)。 
请在其他参数之前指定选项。
/oldboy/oldboy.txt
[root@linux oldboy]# find /oldboy -maxdepth 1 -type f -name "oldboy*"
/oldboy/oldboy.txt
[root@linux oldboy]# find /oldboy -maxdepth 2 -type f -name "oldboy*"
/oldboy/oldboy.txt
/oldboy/oldboy01/oldboy01.txt
[root@linux oldboy]# find /oldboy -maxdepth 3 -type f -name "oldboy*"
/oldboy/oldboy.txt
/oldboy/oldboy01/oldboy02/oldboy02.txt
/oldboy/oldboy01/oldboy01.txt

补充: tree命令显示目录结构层级信息
[root@linux oldboy]# tree -L 1 ./
./
├── oldboy01
└── oldboy.txt
[root@linux oldboy]# tree -L 2 ./
./
├── oldboy01
│   ├── oldboy01.txt
│   └── oldboy02
└── oldboy.txt
[root@linux oldboy]# tree ./
./
├── oldboy01
│   ├── oldboy01.txt
│   └── oldboy02
│   ├── oldboy02.txt
│   └── oldboy03
└── oldboy.txt

只查看目录结构中目录信息
[root@linux oldboy]# tree -L 1 ./
./
├── oldboy01
└── oldboy.txt
[root@linux oldboy]# tree -dL 1 ./
./
└── oldboy01

——2.3.3 find命令找出文件xargs批量处理

批量删除
find /oldboy_dir/ -type f -mtime -1|xargs rm -f

xargs作用:
01. 可以将多行信息整合为一行 利用空格进行分隔
[root@linux ~]# find /oldboy_dir/ -type f -mtime -1
/oldboy_dir/test01.txt
/oldboy_dir/test02.txt
/oldboy_dir/test03.txt
/oldboy_dir/test04.txt
/oldboy_dir/test05.txt
[root@linux ~]# find /oldboy_dir/ -type f -mtime -1|xargs
/oldboy_dir/test01.txt /oldboy_dir/test02.txt /oldboy_dir/test03.txt /oldboy_dir/test04.txt /oldboy_dir/test05.txt

02. 可以将一行信息拆分为多行 利用空格作为拆分
结论: 在linux系统中,不是所有的命令都可以直接操作文件
tr -cd '0-9a-zA-Z' </dev/urandom
[root@linux ~]# xargs -n 2 <test01.txt
01 02
03 04
05 06
07 08
09 10
[root@linux ~]# xargs -n 3 <test01.txt
01 02 03
04 05 06
07 08 09
10

3. 数据文件压缩解压处理

—3.1 tar zcvf

环境准备: 利用循环命令进行准备环境
语法格式: for 变量名 in {01..10};do 具体执行命令信息;done
定义循环多少次 ; 开始进行循环执行命令 ; 结束
[root@linux oldboy]# for oldboy in {01..10};do cat /etc/services >>/oldboy/test.txt;done
[root@linux oldboy]# for oldboy in {01..10};do cat /etc/services >>/oldboy/test.txt;done
[root@linux oldboy]# ll /oldboy/test.txt -h
-rw-r--r-- 1 root root 26M Mar 13 03:34 /oldboy/test.txt

tar 参数信息 袋/箱子 要进行压缩处理东西(数据)
tar zcvf /oldboy/test01.tar.gz /oldboy/test01.txt /oldboy/test02.txt
z 利用gzip方式进行压缩 
c 创建出一个压缩包 creat 创建
v 显示压缩的过程 verbose 
f 指定压缩文件的路径信息 一定放在所有参数的最后面 

—3.2 检查压缩包中的数据

tar tf /oldboy/test01.tar.gz
t 对数据包进行查看

[root@linux oldboy]# tar tf /oldboy/test01.tar.gz
oldboy/test.txt

—3.3 压缩数据包解压缩

tar xvf /oldboy/test01.tar.gz
x Extract 对数据包进行解压

结论:
01. 默认解压文件时, 解压后的文件默认保存在当前目录路径中
02. 在压缩数据信息时, 不希望携带过多的目录结构信息
尽量先进入到要压缩文件的上一级目录,采用相对路径方式进行压缩数据

——3.3.1 指定解压后保存文件的路径信息

[root@linux oldboy]# tar xf test01.tar.gz -C /tmp/
[root@linux oldboy]# ll /tmp/oldboy -h
total 77M
-rw-r--r-- 1 root root 77M Mar 13 18:23 test.txt

——3.3.2  避免解压数据不会覆盖原文件

为了避免解压数据不会覆盖原文件,并且不要有过多提示信息
尽量使用相对路径进行压缩
提示信息: tar: Removing leading `/' from member names
将 / 信息进行移除 
/oldboy/test01.txt --- oldboy/test01.txt 
1). 备份压缩
tar zcvf /oldboy/oldboy.tar.gz /etc/selinux/config --- 优化前做了压缩备份
没有移除/
/etc/selinux/config
2). 要做文件对比
3). 解压文件
etc/selinux/config 保存到当前oldboy目录下/etc/selinux/config 
/etc/selinux/config 保存到/目录下/etc/selinux/config

备份文件的两个重要作用:
01. 还原数据信息
02. 做数据信息对比

如何利用find命令查找数据时,排除指定目录不需要进行查找
find / 没有放置在/proc /usr 

——3.3.3 特殊需求: 直接覆盖系统中的源文件(修复系统)

tar zcvPf /oldboy/selinux_conf.tar.gz /etc/selinux/config 
tar xvPf /oldboy/selinux_conf.tar.gz

4. 文件权限说明

系统中有什么权限
4 r read 读的权限
2 w write 写的权限
1 x execute 执行权限 可以运行
0 - 什么权限都不具有

相应的权限 赋予 用户
rw-r--r-- 一个数据文件拥有9位权限位,每三位权限位赋予一个用户
每三个权限位分别具体表示 r/- w/- x/- 

三个常见用户
1) 文件所属用户 (文件的创造者) 监护人 rw-(读 写 没有执行权限)
2) 文件所属用户组 亲人 家人 r--(读 没有写 没有执行) 
3) 文件其他用户 隔壁老王 r-- (读 没有写 没有执行)

5. 用户和用户组的概念

—5.1 用户创建及查看

[root@linux oldboy]#useradd oldboy 
[root@linux oldboy]#su - oldboy 
[root@linux oldboy]#id oldgirl
uid=1002(oldgirl) gid=1002(oldgirl)

—5.2 系统用户的分类

——5.2.1 超级管理员(root)

又称为皇帝 uid=0 

如何提升root用户安全性
01. 修改远程服务端口号
vim /etc/ssh/sshd_config
17 Port 52113
systemctl restart sshd 22
如何通过命令确认服务进程的端口号码
ss -lntup --- 查看服务进程端口信息
-l -- 列表显示详细信息
-n -- 信息中数字信息不要进行转换, 就以数值形式展示出来
-p -- 显示网络协议信息
-t -- 显示tcp协议信息
-u -- 显示udp协议信息

[root@linux ~]# ss -lntup|grep sshd
tcp LISTEN 0 128 *:52113 *:* users:(("sshd",pid=1480,fd=3))
tcp LISTEN 0 128 :::52113 :::* users:(("sshd",pid=1480,fd=4))
[root@linux ~]# netstat -lntup|grep sshd
tcp 0 0 0.0.0.0:52113 0.0.0.0:* LISTEN 1480/sshd 
tcp6 0 0 :::52113 :::* LISTEN 1480/sshd

02. 不允许root用户可以远程登陆
扩展自行研究

——5.2.2 虚拟用户 (nobody)

又称为傀儡用户
a 主要用于管理服务进程
b 没有家目录 
c 不需要进行登陆系统
centos6 uid1-499
centos7 uid1-999

——5.2.3 普通用户

又称为平民
centos6 uid500+
centos7 uid1000+

6.文件时间信息

—6.1 三个时间信息

1) atime访问时间信息 文件被查看之后时间会发生变更(第一次会看到变化,不是每次都变) 
2) mtime修改时间信息 文件只要被编辑,都会有时间变化
3) ctime改变时间信息 文件属性信息发生变化,都会有时间变化
[root@linux ~]# stat /etc/hosts
Access: 2019-01-15 08:42:31.759043280 +0800
Modify: 2019-01-07 15:35:38.743942454 +0800
Change: 2019-01-07 15:35:38.765942453 +0800

为什么第一次访问之后,时间就不会有变更了
inode存放什么 block存放什么 

—6.2 查看系统时间信息

如何查看系统时间信息
[root@linux oldboy]# date
Mon Mar 14 02:13:47 CST 2022

指定显示的日期格式信息
[root@linux oldboy]# date "+%Y-%m-%d %H:%M:%S"
2022-03-14 02:14:10
[root@linux oldboy]# date "+%F"
2022-03-14
[root@linux oldboy]# date "+%T"
02:14:51

—6.3 修改系统时间信息

[root@linux oldboy]# date -s "19960320"
Wed Mar 20 00:00:00 CST 1996
[root@linux oldboy]# date
Wed Mar 20 00:00:03 CST 1996
[root@linux oldboy]# date -s "19960320 11:00"
Wed Mar 20 11:00:00 CST 1996
[root@linux oldboy]# date "+%F %T"
1996-03-20 11:00:36

—6.4 扩展方式查看时间信息

[root@linux ~]# date "+%F %T"
1996-03-20 11:00:36

临时显示未来几天的时间信息
[root@linux ~]# date "+%F" -d "2 day"
1996-03-22
[root@linux ~]# date "+%F" -d "+2 day"
1996-03-22

临时显示前几天的时间信息
[root@linux ~]# date "+%F" -d "-2 day"
1996-03-18

—6.5 时间同步的方法

[root@linux ~]# yum install ntpdate -y
[root@linux ~]# ntpdate ntp1.aliyun.com
13 Mar 18:27:29 ntpdate[6388]: step time server 120.25.115.20 offset 819876061.082011 sec
[root@linux ~]# date "+%F %T"
2022-03-13 18:28:04

—6.6 文件时间信息作用

根据文件时间信息,对文件做处理
需求: 需要将7天以前数据信息查询出来
find /oldboy/ -type f -mtime +7
[root@linux ~]# date -s "20190204"
Mon Feb 4 00:00:00 CST 2019
[root@linux ~]#date
Mon Feb 4 00:00:01 CST 2019
[root@linux ~]# find /oldboy/ -type f -mtime +7
/oldboy/.oldboy.txt.swp
/oldboy/oldboy.txt
/oldboy/test.txt
/oldboy/test01.tar.gz
/oldboy/test02.tar.gz
/oldboy/test01.txt
/oldboy/oldboy/test01.txt
/oldboy/selinux_conf.tar.gz
/oldboy/etc/selinux/config
/oldboy/oldboy100.txt

find -mmin 按分钟查找数据

7. inode

—7.1 概念说明

即是index nodes,索引节点信息,可以找到真实数据信息
inode中一般存放着文件属性信息

—7.2 诞生过程

inode是在创建文件系统的时候产生出来

买来一块新的磁盘(好几片地), 你会如何进行处理
1) 做raid 地整合
2) 分区 进行房子结构规范
3) 格式化 给房子进行装修
4) 创建文件系统 装修的风格
5) 进行挂载 安装好门
6) 使用磁盘空间 可以入住 

—7.3 特点说明

inode用于存放的是文件属性
inode用于存放块的指针位置
创建一个文件至少占用一个inode和一个block

—7.4 查看方法

[root@linux ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 25165312 60968 25104344 1% /
devtmpfs 502976 378 502598 1% /dev
tmpfs 505699 1 505698 1% /dev/shm
tmpfs 505699 525 505174 1% /run
tmpfs 505699 16 505683 1% /sys/fs/cgroup
/dev/sda1 524288 326 523962 1% /boot
tmpfs 505699 1 505698 1% /run/user/0

8. block

—8.1 概念说明

块信息 存储数据信息
文件名称会存储到上一级目录的block 

—8.2 诞生过程

block是在创建文件系统的时候产生出来

—8.3 特点说明

block用于存放的是数据信息
创建一个文件至少占用一个inode和一个block(非空文件)
磁盘读取数据按block为单位读取的

1G数据会存储在多个block中, 每读取/写入一个block==就是用了一个I(input==写)O(output==读) 
磁盘中如果IO操作过多,会严重较低磁盘的性能

小的数据 占用的block会少 消耗IO少 性能更快
大的数据 占用的block会多 消耗IO多 性能更差

问题: 对于一个block而言,block是大些好,小一点好,默认4K
1) 磁盘中block数量是是有限的
2) 一个block只能被一个数据所占用 

一个block为100M,1G有10个block
block大点好,系统文件都是10M小文件,保存10个文件
一个block为1M,1G有1000个block
block小点好,系统文件都是100M大文件,占用100个block,消耗100IO

结论: 
1. 如果数据比较大的场景,尽量可以将block设置大一些,会有较少block占用,从而减少IO损耗
2. 如果数据比较小的场景,尽量可以将blcok设置小一些,节省磁盘空间,避免浪费 

—8.4 查看方法

[root@linux ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 50306052 6921440 43384612 14% /
devtmpfs 2011904 0 2011904 0% /dev
tmpfs 2022796 0 2022796 0% /dev/shm
tmpfs 2022796 9056 2013740 1% /run
tmpfs 2022796 0 2022796 0% /sys/fs/cgroup
/dev/sda1 1038336 129596 908740 13% /boot
tmpfs 404560 0 404560 0% /run/user/0

9.硬链接

—9.1 概念说明

1) 就好比房子的多个门,相当于访问文件的一个入口
2) 多个入口信息就组成了硬链接数

—9.2 创建方法

[root@linux ~]# ll -i /etc/hosts
33586486 -rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
[root@linux ~]# ln /etc/hosts /oldboy/hosts_hard_link
[root@linux ~]# ll -i /oldboy/hosts_hard_link
33586486 -rw-r--r--. 2 root root 158 Jun 7 2013 /oldboy/hosts_hard_link
[root@linux ~]# cat /oldboy/hosts_hard_link
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

—9.3 特点作用

1) 源文件被删除, 不会影响硬链接文件
2) inode号码相同的文件,互为硬链接文件
3) 可以对文件创建硬链接(硬链接文件和源文件必须在同一分区中) 
4)不能对目录创建硬链接

[root@linux ~]# mkdir /oldboy_dir
[root@linux ~]# ll -di /oldboy_dir/
2214 drwxr-xr-x 2 root root 6 Mar 13 20:24 /oldboy_dir/
[root@linux ~]# ll -ai /oldboy_dir/
total 0
2214 drwxr-xr-x 2 root root 6 Mar 13 20:24 .
64 dr-xr-xr-x. 20 root root 268 Mar 13 20:24 ..
[root@linux ~]# mkdir /oldboy_dir/oldboy01
[root@linux ~]# ll -ai /oldboy_dir/
total 0
2214 drwxr-xr-x 3 root root 22 Mar 13 20:24 .
64 dr-xr-xr-x. 20 root root 268 Mar 13 20:24 ..
33588613 drwxr-xr-x 2 root root 6 Mar 13 20:24 oldboy01
默认目录硬链接数为2 创建一个子目录, 目录硬链接数会加1
默认文件硬链接数位1

[root@linux ~]# ll -d /etc/
drwxr-xr-x. 80 root root 8192 Mar 20 1996 /etc/
[root@linux ~]# ll /etc/|grep -c "^d"
78
以上查看/etc目录硬链接数,表示/etc目录下面存在79个子目录

10.软链接

—10.1 概念说明

给源文件创建一个快捷方式

—10.2 创建方法

ln -s /etc/hosts /oldboy/hosts_soft_link

—10.3 特点作用

1) 源文件被删除, 会影响软链接(软链接会失效)
2) 既可以对文件创建软链接 也可以对目录创建软链接

只是避免文件丢失: 建议利用硬链接进行备份文件 节省磁盘空间
只是避免文件误修改: 建议利用cp命令进行备份文件

11. 文件数据删除原理

1)文件硬链接数为0 i_link=0
2)确保文件没有被其他进程所调用 i_count=0 
查看文件是否被进程调用:lsof |grep "secure"

企业案例: 磁盘空间报警了,需要删除清空没用数据
第一个历程: 确认磁盘空间是否真的满了
df -h 查看block空间是否不够了 磁盘管理演示
df -i 查看inode空间是否不够了 磁盘管理演示

第二个历程: 确认哪个数据占用磁盘空间比较多
du -sh /*
du -sh /etc
-s 汇总查看磁盘占用情况

第三个历程: 删除
第四个历程: 需要重启服务释放空间

用户访问文件原理过程 (/oldboy/oldboy01/oldboy.txt) 
绘图说明(文件权限)
赞(1)

评论 抢沙发

评论前必须登录!

 

LNMP社群 不仅仅是技术

关于我们网站地图