在Linux系统下限制指定目录的大小以及文件/文件夹数量
背景说明
在Linux操作系统下有时需要限制一个指定文件夹的大小和文件夹内可存储的文件数量,有可能是出于安全的考量或者定制化的配置,这里我们提供了一种方案:用dd创建一个空的img镜像,进行格式化的配置,然后将其绑定到指定的文件夹上可以限制该文件夹的一些属性。
分配空置的img镜像
通过dd指令可以分配一个全为0的10M大小的img镜像:
[dechin-manjaro limits-test]# dd if=/dev/zero of=test.img bs=10M count=1
记录了1+0 的读入
记录了1+0 的写出
10485760字节(10 MB,10 MiB)已复制,0.0390058 s,269 MB/s
[dechin-manjaro limits-test]# ll
总用量 10240
-rw-r--r-- 1 root root 10485760 1月 11 17:11 test.img
注:如果这里使用/dev/urandom的话产生的img镜像则是一个随机的块,可用于模拟一个存储满各种数据资源的磁盘。
绑定一个循环分区
首先查看可用的循环分区:
[dechin-manjaro limits-test]# losetup -f
/dev/loop0
我们发现可用的是loop0这个分区,然后用该分区来初始化img镜像:
[dechin-manjaro limits-test]# losetup /dev/loop0 test.img
[dechin-manjaro limits-test]# mkfs.ext4 /dev/loop0 -N 5
创建含有 10240 个块(每块 1k)和 16 个inode的文件系统
文件系统UUID:7448390b-a205-41bd-bdc7-42fbf29c00ec
超级块的备份存储于下列块:
8193
正在分配组表: 完成
正在写入inode表: 完成
创建日志(1024 个块)完成
写入超级块和文件系统账户统计信息: 已完成
[dechin-manjaro limits-test]# losetup -d /dev/loop0
创建一个目录并绑定已创建镜像
[dechin-manjaro limits-test]# mkdir test-dir
[dechin-manjaro limits-test]# mount -o loop test.img test-dir/
查看与测试配置生效情况
执行命令以查看该绑定目录的挂载情况,可发现该目录已挂载在/dev/loop0下:
[dechin-manjaro test-dir]# cd test-dir/
[dechin-manjaro test-dir]# df -h
文件系统 容量 已用 可用 已用% 挂载点
dev 20G 0 20G 0% /dev
run 20G 1.6M 20G 1% /run
/dev/nvme0n1p9 144G 41G 95G 31% /
tmpfs 20G 0 20G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs 20G 69M 20G 1% /tmp
/dev/nvme0n1p1 300M 31M 269M 11% /boot/efi
tmpfs 3.9G 104K 3.9G 1% /run/user/1000
/dev/loop0 9.0M 172K 8.2M 3% /home/dechin/projects/2021-security/limits-test/test-dir
[dechin-manjaro test-dir]# df -i
文件系统 Inodes 已用(I) 可用(I) 已用(I)% 挂载点
dev 4.9M 545 4.9M 1% /dev
run 4.9M 949 4.9M 1% /run
/dev/nvme0n1p9 9.2M 833K 8.4M 9% /
tmpfs 4.9M 1 4.9M 1% /dev/shm
tmpfs 1.0K 18 1006 2% /sys/fs/cgroup
tmpfs 400K 199 400K 1% /tmp
/dev/nvme0n1p1 0 0 0 - /boot/efi
tmpfs 998K 92 998K 1% /run/user/1000
/dev/loop0 16 11 5 69% /home/dechin/projects/2021-security/limits-test/test-dir
从以上执行结果,我们还可以看到这个目录还有剩余9M的可用空间以及5个的可用文件innode数量。这里的innode数量是Linux系统对于文件和文件夹的一个标识符号,每一个文件或者文件夹都有这个标识,如果只给这个挂载盘分配5个可用的innode,这表示在该目录下最多只能存在5个的文件或者文件夹,这里让我们用实际的案例来测试一下:
[dechin-manjaro test-dir]# touch 1
[dechin-manjaro test-dir]# touch 2
[dechin-manjaro test-dir]# touch 3
[dechin-manjaro test-dir]# touch 4
[dechin-manjaro test-dir]# touch 5
[dechin-manjaro test-dir]# touch 6
touch: 无法创建 '6': 设备上没有空间
在上面这个测试中我们发现,对于innode数量的限制已经生效,接下来把这些文件都删除后,测试一下文件夹大小的限制:
[dechin-manjaro test-dir]# dd if=/dev/urandom of=test.img bs=10M count=1
dd: 写入 'test.img' 出错: 设备上没有空间
记录了1+0 的读入
记录了0+0 的写出
9039872字节(9.0 MB,8.6 MiB)已复制,0.289899 s,31.2 MB/s
[dechin-manjaro test-dir]# ll
总用量 8841
drwx------ 2 root root 12288 1月 11 17:24 lost+found
-rw-r--r-- 1 root root 9039872 1月 11 17:54 test.img
这里我们尝试去创建一个10M的文件,但是由于目录本身的限制,以及lost+found这个目录已经占用了一部分的资源,因此最终只有9M的文件大小能够分配成功。到这里为止,我们的测试就已经结束了,经过验证配置是完全生效的。
取消该文件的挂载
首先返回到绑定文件夹所在的目录层,然后执行umount指令:
[dechin-manjaro limits-test]# ll
总用量 9969
drwxr-xr-x 3 root root 1024 1月 11 17:54 test-dir
-rw-r--r-- 1 root root 10485760 1月 11 17:54 test.img
[dechin-manjaro limits-test]# umount test-dir/
[dechin-manjaro limits-test]# df -h
文件系统 容量 已用 可用 已用% 挂载点
dev 20G 0 20G 0% /dev
run 20G 1.6M 20G 1% /run
/dev/nvme0n1p9 144G 41G 95G 31% /
tmpfs 20G 0 20G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs 20G 69M 20G 1% /tmp
/dev/nvme0n1p1 300M 31M 269M 11% /boot/efi
tmpfs 3.9G 104K 3.9G 1% /run/user/1000
在umount之后,我们发现在挂载目录中的test-dir已经消失,这表示取消挂载成功。
总结
通过以上的方案可以很好的定制化一个特殊的目录,更好的用于管理和规范一个用于执行任务的文件系统,避免资源的恶意占用等问题。
在Linux系统下限制指定目录的大小以及文件/文件夹数量的更多相关文章
- linux系统下nginx安装目录和nginx.conf配置文件目录
linux系统下nginx安装目录和nginx.conf配置文件目录 1.查看nginx安装目录 输入命令 # ps -ef | grep nginx 返回结果包含安装目录 root 26 ...
- linux系统下自动删除前N天的日志文件
删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -mti ...
- linux系统下的/proc目录介绍
1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以 ...
- 在Linux系统下有一个目录/usr/share/dict/ 这个目录里包含了一个词典的文本文件,我们可以利用这个文件来辨别单词是否为词典中的单词。
#!/bin/bash s=`cat /usr/share/dict/linux.words` for i in $s; do if [ $1 = $i ];then echo "$1 在字 ...
- linux 系统下 ngnix 显示目录形式
vi /usr/local/nginx/conf/nginx.conf #编辑配置文件,在server {下面添加以下内容: location / { autoindex on; autoin ...
- linux系统下Apache日志分割(按天生成文件)
Apache日志按天显示,修改Apache http.conf文件,注释默认的日志文件,修改为下面2行 ErrorLog "| /usr/local/apache/bin/rotatelog ...
- linux系统编程----统计一个目录下的普通文件个数
主要是为了统计linux系统下一个指定目录下面的普通文件个数,运用目录操作的一些函数,配合递归调用来实现该功能. 首先介绍一下函数原型: 打开一个空目录 DIR ...
- Linux系统下授权MySQL账户访问指定数据库和数据库操作
Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...
- linux系统下修改文件夹目录权限
linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...
随机推荐
- vue+axois 封装请求+拦截器(请求锁+统一错误)
需求 封装常用请求 拦截器-请求锁 统一处理错误码 一.封装常用的请求 解决痛点:不要每一个模块的api都还要写get,post,patch请求方法.直接将这些常用的方法封装好. 解决方案:写一个类 ...
- [日常摸鱼]HDU3007Buried memory-最小圆覆盖
最小圆覆盖裸题 我求外接圆的方法比较奇怪-不过还是过掉了 #include<cstdio> #include<cmath> #include<cstdlib> #i ...
- Eureka部署在阿里云所带来的问题
没有那么多废话,直奔主题... 1.解决查看eureka界面时服务名显示而非ip+端口,以及解决显示ip而非阿里云公网ip问题(个人解决方式,如果和我这样配置还是不行,那就再百度或者谷歌下吧) eur ...
- 常用的一句话反弹shell总结
文章转载来源:https://blog.csdn.net/qq_38684504/article/details/90047213#1.%20bash%E7%9B%B4%E6%8E%A5%E5%8F% ...
- 神奇的BFC
BFC是什么? 块格式化上下文(Block/box Formatting Context,BFC) 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域 ...
- ADF 第六篇:Copy Data Activity详解
在Azure 数据工程中,可以使用Copy Data 活动把数据从on-premises 或云中复制到其他存储中.Copy Data 活动必须在一个IR(Integration Runtime)上运行 ...
- C# 队列Queue,ConcurrentQueue,BlockingCollection 并发控制lock,Monitor,信号量Semaphore
什么是队列? 队列Queues,是一种遵循先进先出的原则的集合,在.netCore中微软给我们提供了很多个类,就目前本人所知的有三种,分别是标题提到的:Queue.ConcurrentQueue.Bl ...
- 线程 - AtomicInteger
原理 AtomicInteger是如何使用非阻塞算法来实现并发控制的 性能提升 避免多线程的优先级倒置和死锁情况的发生 任然可能存在问题 ABA问题 CAS原理 调整具有竞争的并发应用程序的可伸缩性的 ...
- java中如何实现同一账号不能同时登录
经过两天的研究,下面给两个方法.不个是webwork版本的,一个是修改过后的网上的意见监听器版本的 (一) 首先先上自己的研究成果 1:首先在baseAction 中或者直接在action中写一个方法 ...
- 解决WebStorme点击谷歌浏览器图标无反应问题
解决思路: 在设置中重新设置谷歌浏览器路径,一定要选中到谷歌浏览器安装目录的Chrome.exe文件,选中后记得apply. 设置步骤: file->seeting->tools-> ...