内存和磁盘使用率查看
内存使用状况查看 free && top
如果没有使用swap(虚拟内存),在linux内存被即将占满的情况下 ,内核会随机杀死占用较大的应用/进程。
## 以兆(m)为单位显示内存情况
$ free -m
# total used free shared buff/cache available
# Mem: 1838 560 76 0 1202 1094
# Swap: 0 0 0
# buff/cache为缓存的内容占用内存大小(可以释放的)
# available 表示 buff/cache 释放后还有多少内存可以使用
# Swap 交换分区 (虚拟内存)
磁盘使用状况查看
fdisk
参考:fdisk命令
fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣
语法:fdisk(选项)(参数)
选项:
-b<分区大小>:指定每个分区的大小;
-l:列出指定的外围设备的分区表状况;
-s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块;
-u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址;
-v:显示版本信息。
df
参考:df命令
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法:df(选项)(参数)
选项:
-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
--sync:在取得磁盘使用信息前,先执行sync指令;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help:显示帮助;
--version:显示版本信息。
du
du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
语法:du [选项][文件]
选项:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
## 查看磁盘有哪些分区
$ ls -l /dev/sd??
## 查看磁盘分区
$ fdisk -l
## 将afile文件中的内容写入到bfile文件中(分10次写入每次4M)
$ dd if=afile bs=4M count=10 of=bfile
## 查看磁盘分区占用情况
$ df
# 文件系统 1K-块 已用 可用 已用% 挂载点
# /dev/sda2 146294492 28244432 110498708 21% /
## 友好的展示方式
$ df -h
## /home/chri文件实际占用磁盘大小
$ du /home/chris
不停机磁盘扩容
ext4&xfx文件系统
ext4文件系统详解
ext4文件系统的基本构造
超级块、 超级块副本 、i节点(inode)、 数据块(datablock)
linux系统中每个目录或者文件都有一个对应的i节点 ,使用 ls -i命令可以查看而ext4的i节点
ext4/xfx 默认创建一个数据块的大小是4k (创建一个文件的最小占用大小是4k)
## 以查看而ext4的i节点
$ ls -i
## echo > 方式添加内容不会改变i节点(普通的修改方式会改变i节点[变为新的i节点])
$ echo xxx > /home/chris/1.txt
## rm 删除文件/目录只是将i节点 与 数据块(datablock)的连接关系断开了,所以删除1G的文件和删除1K的文件速速是相同的(rm 删除的文件 并没有真正删除)
$ rm /home/chris/1.txt
## 将afire 和 bfire 做硬链接(afire 和 bfire指向的i节点相同)(删除其中一个不影响另外一个)
$ ln afire bfire
# 131486 -rw-r--r-- 2 root root 16 Jun 6 11:01 1.txt
# 131486 -rw-r--r-- 2 root root 16 Jun 6 11:01 2.txt
## 将afire 和 bfire 做软链接(afire 和 bfire指向的i节点不同)(删除1.txt 3.txt的软链接失效)
$ ln -s 1.txt 3.txt
# 131486 -rw-r--r-- 2 root root 16 Jun 6 11:01 1.txt
# 131486 -rw-r--r-- 2 root root 16 Jun 6 11:01 2.txt
# 131476 lrwxrwxrwx 1 root root 5 Jun 6 11:20 3.txt -> 1.txt
##
$
Linux setfacl/getfacl命令详解
文件ACL针对特定用户指定权限的规则,比UGO规则更灵活
setfacl 设置文件访问控制列表,即ACL规则。而Acl(Access Control List)就是访问控制列表
语法: setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
-m, --modify=acl 更改文件的访问控制列表
-M, --modify-file=file 从文件读取访问控制列表条目更改
-x, --remove=acl 根据文件中访问控制列表移除条目
-X, --remove-file=file 从文件读取访问控制列表条目并删除
-b, --remove-all 删除所有扩展访问控制列表条目
-k, --remove-default 移除默认访问控制列表
–set=acl 设定替换当前的文件访问控制列表
–set-file=file 从文件中读取访问控制列表条目设定
–mask 重新计算有效权限掩码
-n, --no-mask 不重新计算有效权限掩码
-d, --default 应用到默认访问控制列表的操作
-R, --recursive 递归操作子目录
-L, --logical 依照系统逻辑,跟随符号链接
-P, --physical 依照自然逻辑,不跟随符号链接
–restore=file 恢复访问控制列表,和“getfacl -R”作用相反
–test 测试模式,并不真正修改访问控制列表属性
-v, --version 显示版本并退出
-h, --help 显示本帮助信息
语法: getfacl [-aceEsRLPtpndvh] file …
-a, --access 只显示文件访问控制列表
-d, --default 只显示默认的访问控制列表
-c, --omit-header 不显示注释头
-e, --all-effective 打印所有有效的权利
-E, --no-effective 没有有效的打印没有有效的权利
-s, --skip-base 只包含基本项的跳过基文件
-R, --recursive 递归递归到子目录中
-L, --logical 依照系统逻辑,跟随符号链接
-P, --physical 依照自然逻辑,不要遵循符号链接
-t, --tabular 使用列表输出格式
-n, --numeric 打印数字用户/组标识符
-v, --version print version and exit
## 查看afile的控制列表
$ getfacl afile
# 结果:
# # file: 2.txt
# # owner: root
# # group: root
# user::rw-
# group::r--
# other::r--
## 给chris用户赋予afile文件的读写权限(+号表示额外赋予的权限)
$ setfacl -m u:chris:rw afile
# 结果:
# -rw-r--r--+ 1 root root 16 Jun 6 11:01 2.txt
## 取消赋予chris用户afile文件的执行权限
$ setfacl -x u:chris:x afile
linux RM删除文件,磁盘空间没有释放解决
磁盘的分区与挂载
现在大多使用虚拟化及docker技术进行磁盘配额划分
常用命令: fdisk、mkfs、parted、mount
大于2T使用parted进行挂载
mkfs
mkfs命令用于在设备上(通常为硬盘)创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。
(在特定的分区建立Linux文件系统)
语法:mkfs(选项)(参数)
选项:
fs:指定建立文件系统时的参数;
-t<文件系统类型>:指定要建立何种文件系统;
-v:显示版本信息与详细的使用方法;
-V:显示简要的使用方法;
-c:在制做档案系统前,检查该partition是否有坏轨。
参数:
文件系统:指定要创建的文件系统对应的设备文件名;
块数:指定文件系统的磁盘块数。 、
## 在/dev/sdc 下建立分区(问答式)
$ fdisk /dev/sdc
## 查看mkfs支持的文件系统格式
$ mkfs.
## 在/dev/sdc1 分区上建立ext4文件系统
$ mkfs.ext4 /dev/sdc1
mount
mount命令用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命令来手动完成挂载。
语法:mount(选项)(参数)
选项:
-V:显示程序版本;
-l:显示已加载的文件系统列表;
-h:显示帮助信息并退出;
-v:冗长模式,输出指令执行的详细信息;
-n:加载没有写入文件“/etc/mtab”中的文件系统;
-r:将文件系统加载为只读模式;
-a:加载文件“/etc/fstab”中描述的所有文件系统。
-t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。
参数:
设备文件名:指定要加载的文件系统对应的设备名;
加载点:指定加载点目录。
## 创建目录
$ mkdir /mnt/sdc1
## 通常不用指定
$ mount -t ext4 /dev/dec1 /mnt/sdc1
$ mount -t auto /dev/dec1 /mnt/sdc1
## 将分区/dev/dec1 挂载到/mnt/sdc1目下(对/mnt/sdc1读写数据都会落到/dev/dec1下 )
$ mount /dev/dec1 /mnt/sdc1
用户磁盘配额
xfs文件系统的用户磁盘配额 quota
mkfs.xfs/dev/sdb1
mkdir/mnt/disk1
mount-o uquota,gquota/dev/sdb1/mnt/disk1
chmod 1777/mnt/disk1
xfs_quota-x-c’report-ugibh’/mnt/disk1
xfs_quota-x-c’limit-u isoft=5 ihard=10 user1’/mnt/disk1