Linux 文件属性及详细操作
Linux 文件属性
文件属性信息组成
图示如下:
- 文件索引属性信息-inode
- 文件类型权限信息
- 文件链接属性信息-硬链接个数
- 文件属主属性信息-文件所有者
- 文件属组属性信息-文件所属组
- 文件大小属性信息-最小单位字节(大小、kb)
- 文件修改时间信息
- 文件名称信息说明-文件名
文件属性概念说明
-
inode 编号
Linux系统中文件的唯一编号,就相当于身份证号
- 常见文件类型
文件类型 | 对应字符 |
---|---|
普通文件 | f/- |
文件夹 | d |
链接文件 | l |
设备文件 | b:磁盘文件 / c:字符文件 |
套接字文件(socket) | s |
管道文件 | p |
图示如下:
-
文件类型查看方法
file 文件信息:
- 配置文件---.conf
- 日志文件---.log
- 脚本文件---.sh
- 脚本文件---.py
注意不能以颜色判断文件类型,如果关闭颜色参数呢?
这样一种颜色的时候在文件多的时候很难判断是什么类型!
文件软硬链接说明
- 命令:ln
- 参数:-s --- 软连接
- 不加参数创建的是硬链接
- 格式1:ln [原文件路径] [硬链接文件路径]
- 格式2:ln -s [原文件路径] [软链接文件路径]
图示:
硬链接
硬链接好比商场的出口,商场有多个出口,就相当于多个接口去操作文件,硬链接直接指向index node编号,当文件修改时候,硬链接产生的文件也修改,他们的inode编号相同
# 创建硬链接
[root@localhost ~]# ln /root/test /root/test01
ps:修改原文件或者硬链接产生的文件都是对原文件的修改!
软链接
相当于Windows中的快捷方式,主要用来指向对应文件的路径。
# 创建软连接
[root@localhost ~]# ln -s /root/test /root/test02
验证软链接是指向路径,删除原文件观察
[root@localhost ~]# rm -rf /root/test
[root@localhost ~]# ls
anaconda-ks.cfg test01 test02
[root@localhost ~]# ll -i
total 8
134319695 -rw-------. 1 root root 1691 Dec 9 19:03 anaconda-ks.cfg
134930018 -rw-r--r--. 1 root root 12 Dec 14 16:17 test01
135086254 lrwxrwxrwx. 1 root root 10 Dec 14 16:25 test02 -> /root/test
[root@localhost ~]# cat test01
chinaaaaaaa
[root@localhost ~]# cat test02
cat: test02: No such file or directory
补充知识
如何真正删除一个文件:
删除文件的底层逻辑:
1、删除的是硬链接
2、判断该文件硬链接数是否为0
3、如果为0,则在磁盘中将其删除
4、如果不为0,则只删除一个硬链接
存储数据相关-inode/block
inode:
inode用于存放的是文件属性、指针位置,主要在是在格式化创建文件系统的时候诞生的,创建一个文件至少占用一个inode和一个block,在同一分区中,两个文件的inode号码相同,两个文件互为硬链接。
- 展示inode信息:
[root@localhost ~]# cd /etc/
[root@localhost etc]# ll -hi /etc/hosts
67109955 -rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
-
统计inode数目
- 命令:df -i
[root@localhost etc]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 56934 334 56600 1% /dev
tmpfs 59949 1 59948 1% /dev/shm
tmpfs 59949 692 59257 2% /run
tmpfs 59949 16 59933 1% /sys/fs/cgroup
/dev/mapper/centos-root 52164608 77758 52086850 1% /
/dev/sda1 262144 326 261818 1% /boot
tmpfs 59949 1 59948 1% /run/user/0
block:
用于存储数据-block块信息,存储文件数据信息,主要在是在格式化创建文件系统的时候诞生的;
block默认大小为4k,比较大的文件,会占用多个block
当文件比较大的时候,磁盘放不下,会导致空间无法使用-显示磁盘空间不足(no space left on device)
创建一个文件至少占用一个inode和一个block(非空文件)
磁盘读取数据按block为单位读取的
读取一个block会消耗一次磁盘I/O(input/output 磁盘读写)
- 命令:df
- 相关文件:/etc/hosts
[root@localhost etc]# ll -hi /etc/hosts
67109955 -rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
[root@localhost etc]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 227736 0 227736 0% /dev
tmpfs 239796 0 239796 0% /dev/shm
tmpfs 239796 5624 234172 3% /run
tmpfs 239796 0 239796 0% /sys/fs/cgroup
/dev/mapper/centos-root 104278276 2636220 101642056 3% /
/dev/sda1 520868 134236 386632 26% /boot
tmpfs 47960 0 47960 0% /run/user/0
读取文件原理图
- 文件首先存储在硬盘上,文件最小的单位是
块(block)
,块由扇区(sector)
组成,块一般大小为4kb
,连续8个扇区组成一个块- 硬盘的最小存储单位
扇区(sector)
,每个扇区存储512字节
- 操作系统读取硬盘数据:一次性读取一块数据
-
读取文件流程
以读取/etc/passwd文件内容为例
Linux文件系统
Linux文件系统可以简单分为
inode table
和data area
,inode table
中存有inode
,文件系统通常会将文件的权限与属性放置到inode
中,至于实际内容则放置到data block
区块中,还有一个超级区块(superblock)
会记录整个文件系统的整体信息。
- 文件的元数据 :权限(rwx)与属性(拥有者、群组、时间参数、大小等)
- 文件的数据:实际记录文件的内容 若文件太大时,会占用多个block
- 文件系统的整体信息:inode/block的总量、使用量、剩余量, 以及档案系统的格式与相关信息等
inode | block | superblock |
---|---|---|
记录文件的元数据 | 记录文件的数据 | 记录文件系统的整体信息 |
图示:
文件用户和用户组
用户:相当于账号,例如root(超管用户)
用户组:某些具有相同属性的账号的集合
- 用户分为系统用户和普通用户:
- uid在[0 - 999] 之间的用户为系统用户,一般用在启动程序上,一般不需要登录系统,root不一定为超级管理员,uid=0的为超管
- uid在[1000+]的用户为普通用户,一般用在登录上
-
命令1:
-
添加用户:useradd [用户]
-
参数: -g :指定
存在
用户组 -r :创建一个系统用户
-M :不创建家目录
-u :指定创建用户ID
-
-
删除用户:userdel -r [用户]
-
相关文件:/etc/passwd
-
-
命令2:
- 添加用户组:groupadd [组名]
- 参数 -g:指定用户组的ID
- 删除用户组:groupdel [组名]
- 修改用户组:usermod -g [组名] [用户名]
- 相关文件:/etc/group
- 添加用户组:groupadd [组名]
-
命令3:id [用户名] / [组名]
-
用户文件操作
# 查看用户详情文件
[root@localhost mail]# useradd hammer
[root@localhost mail]# cat /etc/passwd
# 格式如下
hammer:x:1000:1000:[用户简介]:/home/hammer:/bin/bash
用户名 :hammer
密码占位符 :x
1000 :userid
1000 :组id
/home/hammer :家目录
/bin/bash :默认的解析器
# 默认的解析器为bash
# 解析器的种类 (可以修改)
bash / sh / zsh
# sh和bash解析器切换
/bin/bash
/bin/sh
切换用户
su - [用户名]
su [用户名]
# 在已存在的用户组内添加用户
# 通过指定组名添加
[root@localhost mail]# id hammer
uid=1000(hammer) gid=1000(hammer) groups=1000(hammer)
[root@localhost mail]# useradd wang -g hammer
[root@localhost mail]# id wang
uid=1001(wang) gid=1000(hammer) groups=1000(hammer)
# 通过指定组id添加
[root@localhost mail]# useradd -g li 1000
[root@localhost mail]# id li
uid=1002(li) gid=1000(hammer) groups=1000(hammer)
- 用户组操作
[root@localhost mail]# groupadd hammer
[root@localhost mail]# cat /etc/group
hammer:x:1000:
hammer :组名
x :密码占位符
1000 :组id
用户相关文件
- 用户的特征信息:/etc/passwd (掌握文件各列信息)
- 用户的密码信息:/etc/shadow
- 用户组特征信息:/etc/group
- 用户组密码信息:/etc/gshadow
- 用户家目录默认隐藏文件:/etc/skel/
不使用useradd命令添加用户
步骤如下:
# 添加用户
vim /etc/passwd
test08:x:2001:2001:自建用户:/home/test08:/bin/bash
# 添加组
vim /etc/group
test08:x:2001:
# 添加用户密码密码
vim /etc/shadow
test08:$6h4j93wta/:18974:0:99999:7:::
# 添加用户组密码
vim /etc/gshadow
test08:!::
# 家目录
mkdir test08
cp /etc/skel/.bash* /home/test08/
chown -R test08.test08 test08
chmod 700 test08/
【续:文件权限】