学习记录006-文件删除原理和相关知识点

文件删除原理有以下三点:
1.文件系统回收inode,或被覆盖神仙也找不回
2.所有硬链接都要删除(i_nlink等于0)
3.服务进程不读取inode(i_ count等于0)

linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,文件才能被删除,一般文件有两个link 一个i_count和一个i_nlink
i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 是磁盘的引用计数器
当一个文件被某一个进程引用时,对应i_count数就会增加。当创建文件的硬链接时,对应的i_nlink就会增加

对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink。这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?

这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。

下面来模拟真实的场景,如果磁盘快满了,你怎么处理?(结合文件删除原理理解)
安装httpd web 服务
yum install httpd -y
/etc/init.d/httpd start
/etc/init.d/iptables stop
cd /etc/httpd/httpd.conf //编辑配置文件,输入5223gg 在该页面中找到 CustomLog /app/log/accedd_log combined ,加粗字体为修改的路径,日志会存放在这里面,退出后用grep "/app/log"/ httpd.conf 来查看是否修改正确
[[email protected] ~]# dd if=/dev/zero of=/dev/sdc bs=8k count=10 //创建新的磁盘
10+0 records in
10+0 records out
81920 bytes (82 kB) copied, 8.4851e-05 s, 965 MB/s
ls -l /dev/sdc
mkfs -t ext3 /dev/sdc
mount -o -loop /dev/sdc/app/log
重启httpd服务,确保日志记录到/app/log 文件中
访问网站10万次的命令:for n in `seq 10000`;do curl -s 10.0.0.27 >/dev/null;done 将磁盘写满
写了这么多,也是为了模拟真实的场景,如果磁盘快满了,你删除了 rm -rf /app/log/accedd_log 后用df -h 命令查看依旧没有变化,你该怎么处理?
其实只需要重启一下服务就可以把这个问题解决

4.用户主、用户组
linux是多用户,多任务的操作系统
用户角色划分,角色是通过uid和Gid识别
GID为GroupId,即组ID,用来标识用户组的唯一标识符
UID为UserId,即用户ID,用来标识每个用户的唯一标示符
扩展:
用户组:将同一类用户设置为同一个组,如可将所有的系统管理员设置为admin组,便于分配权限,将某些重要的文件设置为所有admin组用户可以读写,这样可以进行权限分配。
每个用户都一个唯一的用户id,每个用户组都有一个唯一的组id
超级用户root的uid和gid都是0 用命令id root 查看

普通用户:仅仅具备操作自己家目录中的文件和目录的权限,为普通用户授权(sudo) uid 从500开始
虚拟用户:与真实的普通用户区分开来,安装系统后默认就存在,大多数情况不能登录,那岂不是鸡肋?不是的,他们可以方便系统管理。它的UID大多数在1-499
awk -F ":" ‘{print $1 "" $3}‘ /etc/passwd 可以查看uid和用户
用户的之间的切换依赖于 .bash_logout .bash_profile .bashrc 如果没有,用su - stt 时候,会提示-bash-4.1$
可以在etc/skel 中找到 利用ls -a 把隐藏的找出来

用户组:多个用户归属于多个不同的用户组

5. ls - l - -full-time //可以完整的显示时间
ls -l - - time-style=long-iso //可以完整的显示时间
270260 drwxr-xr-x. 2 root2 root2 4096 Jun 23 19:06 Videos //.代表selinux开启

6.文件的权限
rwx rwx rw- 权限依次对应
主(owner) 读 read 写write 执行0
组 (group)
其他文件(other)
- 代表啥权限都没有
要特别注意:执行mkdir /com/123.txt -p ,创建目录与文件
要想删除123.txt,必须要经过他的老大允许,也就是rwx都有或者chown 用户主 /com 更改用户主 chmod如果想所有文件或子目录同时改变,需要使用-R参数 (recursive)
chmod u+r,g+r,o+r 1.txt //给用户主,用户组,其他用户加上可读权限等同于 chmod a+r 1.txt all
chmod o=rwx 1.txt //等于号有清除原有权限,后面跟的什么,就改变成什么
WIN32下可执行文件:*.exe,*.bat,*.com
linux下可执行文件:*.sh,*.py,*.perl等

[[email protected] ~]$ touch 11
[[email protected] ~]$ ls -li 11
134891 -rw-rw-r--. 1 root2 root2 0 Jun 27 05:56 11
[[email protected] ~]$ mkdir 111
[[email protected] ~]$ ls -ld 111
drwxrwxr-x. 2 root2 root2 4096 Jun 27 05:56 111
[[email protected] ~]$ su -
Password:
[[email protected] ~]# touch 11
[[email protected] ~]# ls -li 11
141211 -rw-r--r--. 1 root root 0 Jun 27 05:57 11
[[email protected] ~]# mkdir 111
[[email protected] ~]# ls -ld 111
drwxr-xr-x. 2 root root 4096 Jun 27 05:57 111

由上述实验可以得知在root 用户下创建目录的权限是755 文件644
普通用户 目录权限775 文件是664
改变系统的默认权限 umask值决定(几乎不去动它)
umask=022 则666-022=644
umask=021 则666-021=643 643+001=644 //在奇数位加一

7.改变文件属主,属组
[[email protected] kak]# chown root2 1.txt
[[email protected] kak]# ls -li
total 4
521237 -rwxr-x-w-. 1 root2 root 6 Jun 27 00:19 1.txt
[[email protected] kak]# chown .root2 1.txt // .root2 或者:root分割
[[email protected] kak]# ls -li
total 4
521237 -rwxr-x-w-. 1 root2 root2 6 Jun 27 00:19 1.txt
有一种特殊情况,删除用户之后文件的属主 属组为数字
这时就增加 chmod kk -u 2000 //-u 是给设置uid如果不加从501开始

8.简单命令积累
chattr +i 1.txt //上锁 +a 只能汪里面加,不能删
lsattr 1.txt // 查看文件

isof -i :80等同于netstat -lnt|grep 80 //查看端口开启了什么服务

9.如果创建文件tmp/1.txt,想删除1.txt,怎么处理?

下图是读取1.txt文件的步骤

首先想把1.txt删除,最容易进入的误区是直接对1.txt进行操作

能不能删,你必须要看1.txt上一级目录的权限

我们先从文件的读取来着手,想打开1.txt文件,那么就需要先从根目录上最开始读取数据,就像打游戏通关似的,欲过此地,留下买路钱

过了几个关卡,留了遍地的钱,那么1.txt的买路钱是由/tmp 目录把控的,才能看见最后的hello world

所以更改/tmp中的other中的权限可以达到目的

相关博文:http://blog.sina.com.cn/s/blog_3edf6ca20100qvif.html

时间: 2024-10-16 14:59:00

学习记录006-文件删除原理和相关知识点的相关文章

程序员面试笔试宝典学习记录(三)(数据库相关知识)

关系数据库系统与文件数据库系统的区别如下: (a)关系数据库系统的主要特征是数据的结构化,而文件数据库系统是数据的非结构化. (b)关系数据库系统中,用户看到的逻辑结构是二维表,而文件数据库系统中,基本元素是文件. (c)文件数据库系统可以实现多媒体文件管理,支持C/S工作模式. acid,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability). 数据查询:select sele

ln命令总结,软链接&硬链接&文件删除原理画图详解

ln命令总结,软链接&硬链接&文件删除原理画图详解

linux基础学习-9.6-文件删除原理

1.文件删除原理 rm 删除文件删除的只是文件名 2.控制文件删除:以下两个条件同时具备才生效 1.文件的硬链接数,有一个硬链接i_link +1 减少一个硬链接,i_link-1 2.是否有进程占用使用这个文件,有一个进程占用这个文件,i_count+1 当没有进程调用时i_count=0 当i_link=0并i_count=0时,文件被删除 3.文件删除,磁盘空间不释放的原因 1.hardlink 2.另一个进程还在使用这个文件 3.磁盘空余空间维护出现问题 ln 源 目标 [[email 

linux下的文件删除原理

Lniux下控制文件真正被删除的计数器 Linux是link的数量来控制文件删除的.只有当一个文件不存在任何link的时候,这个文件才会被删除.一般来讲,每个文件都有两个link计数器:i_count和i_link i_count的意义是当前文件使用者(或被调用)的数量 当一个文件被某一个进程引用时,对应的这个值就会增加 i_nlink的意义是介质连接的数量(硬链接的数量) 当创建文件的硬链接的时候,这个值就会增加 可以理解为i_count是内存引用计数器,i_nlink是硬盘的引用计数器 rm

[Android学习笔记]理解焦点处理原理的相关记录

焦点处理相关记录 以下所涉及的焦点部分,只是按键移动部分,不明确包含Touch Focus部分 需解决问题 控件的下一个焦点是哪? 分析思路 当用户通过按键(遥控器等)触发焦点切换时,事件指令会通过底层进行一系列处理.在ViewRootImpl.java中有一个方法,deliverKeyEventPostIme(...),因为涉及到底层代码,所以没有详细的跟踪分析此方法的调用逻辑,根据网上的资料,按键相关的处理会经过此方法. private void deliverKeyEventPostIme

hadoop学习记录--hdfs文件上传过程源码解析

本节并不大算为大家讲接什么是hadoop,或者hadoop的基础知识因为这些知识在网上有很多详细的介绍,在这里想说的是关于hdfs的相关内容.或许大家都知道hdfs是hadoop底层存储模块,专门用于存放数据,那么在进行文件上传的时候hdfs是如何进行的呢?我们按照宏观和微观来进行相关解析工作. 首先需要向大家解释如下几个概念: (1) secondaryNamenode: 其实起初我对SN的理解也和大部分人相同,认为SN是NN(nameNode)的一个实时热备份实现HA,并且在一次笔试的过程中

PHP学习记录之文件的处理一

fopen打开一个文件如果没有的话就重新创建,如果有的话就直接删除里面的内容.fclose关闭一个文件fwrite把内容写入到文件.file_put_contentsPHP5中用到写入一句简单的话的时候用. <?php $fp=fopen('file.txt','w'); $outputstring='我将要被写入进去了'; fwrite($fp,$outputstring,strlen($outputstring)); fclose($fp); ?> //file_put_contents的

SpringMVC学习记录(四)--文件上传

学习一个框架少不了学习文件上传 在使用springMVC进行系统实现时,springMVC默认的解析器里面是没有加入对文件上传的解析的,这可以方便我们实现自己的文件上传.但如果你想使用springMVC对文件上传的解析器来处理文件上传的时候就需要在spring的applicationContext里面加上springMVC提供的MultipartResolver的申明.这样之后,客户端每次进行请求的时候,springMVC都会检查request里面是否包含多媒体信息,如果包含了就会使用Multi

PHP学习记录之文件的处理三

1.file_exists()判断文件是否存在: <?php $path='E:\PHP\phpStudy\WW\20160722\demo1.php'; if(file_exists($path)) { echo '已存在这个文件'; } else { $fp=fopen($path,'w'); echo '创建成功'; fclose($fp); } ?> 2.unlink删除一个文件 <? $path='E:\PHP\phpStudy\WW\20160722\demo3.php';