关于对Linux系统的内存和磁盘的操作
查看内存使用率: free、top
查看磁盘使用率: fdisk、df、du
以KB为单位:
$ free total used free shared buff/cache available Mem: 16248492 2179340 8456660 440648 5612492 13299528 Swap: 2097148 0 2097148
以MB为单位:
$ free -m total used free shared buff/cache available Mem: 15867 2134 8239 430 5494 12981 Swap: 2047 0 2047
以GB为单位:
$ free -g total used free shared buff/cache available Mem: 15 2 8 0 5 12 Swap: 1 0 1
buff/cache是buffers和cache的和,buffer是内核使用的缓冲区,cache是页缓存
Swap是交换分区,程序的内存是虚拟内存,当实际的内存不够用时,会使用换页,如果不使用swap,那么当内存不够时,系统会随机kill掉占用较大的进程
top命令可以动态查看内存使用情况,不作赘述
... MiB Mem : 15867.7 total, 7515.7 free, 2437.6 used, 5914.4 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 12714.6 avail Mem ...
查看磁盘分区
$ sudo fdisk -l Disk /dev/loop0: 4 KiB, 4096 bytes, 8 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/loop1: 133.24 MiB, 139706368 bytes, 272864 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes ... Device Boot Start End Sectors Size Id Type /dev/nvme1n1p1 * 2048 1050623 1048576 512M 83 Linux /dev/nvme1n1p2 1050624 926812159 925761536 441.4G 5 Extended /dev/nvme1n1p3 926812160 966658047 39845888 19G 83 Linux /dev/nvme1n1p4 966658048 1000212479 33554432 16G 82 Linux swap / Solari /dev/nvme1n1p5 1052672 463931391 462878720 220.7G 83 Linux /dev/nvme1n1p6 463933440 926812159 462878720 220.7G 83 Linux ....
Linux中将磁盘当作文件来对待
查看分区使用和挂载点
$ df -h Filesystem Size Used Avail Use% Mounted on udev 7.8G 0 7.8G 0% /dev tmpfs 1.6G 2.5M 1.6G 1% /run /dev/nvme0n1p5 916G 74G 796G 9% / tmpfs 7.8G 75M 7.7G 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/loop0 128K 128K 0 100% /snap/bare/5 /dev/loop1 134M 134M 0 100% /snap/chromium/2020 /dev/loop2 531M 531M 0 100% /snap/datagrip/144 ...
查看磁盘占用空间
使用dd创造出一个空洞文件
$ dd if=/dev/zero bs=4M count=10 seek=20 of=afile 10+0 records in 10+0 records out 41943040 bytes (42 MB, 40 MiB) copied, 0.0187228 s, 2.2 GB/s
使用du和ls -l命令查看到的文件大小不一样,因为ls -l显示的文件实际大小,并非在磁盘中的占用空间
常见文件系统: ext4、xfs、NTFS(需要额外的软件)
一般可以发现windows的文件系统是NTFS,CentOS7是XFS,CentOS6是EXT4
基本结构较为复杂
超级块记录有关封闭文件系统的各种信息,例如块计数,inode计数,支持的功能,维护信息等,df查看到的信息就是超级块中的信息
i节点即index node索引节点,可以把i节点看作是一个指向磁盘上该文件存储区的地址,用于存储属性信息
$ ls -l total 41040 -rw-rw-r-- 1 hwx hwx 125829120 7月 14 14:47 afile drwxrwxr-x 4 hwx hwx 4096 7月 11 08:51 CLionProjects drwxrwxr-x 3 hwx hwx 4096 7月 12 13:21 DataGripProjects drwxr-xr-x 2 hwx hwx 4096 7月 9 15:19 Desktop drwxr-xr-x 8 hwx hwx 4096 7月 13 13:48 Documents drwxr-xr-x 4 hwx hwx 4096 7月 13 13:42 Downloads ...
ls -l输出的这些权限信息都被记录到i节点中,输入ls -i显示文件对应的i节点
57675187 CLionProjects 57147482 Public 58590896 DataGripProjects 57803301 PycharmProjects 57147479 Desktop 57280593 sdk 57147483 Documents 58590235 sensors 57147480 Downloads 57147872 snap ...
数据块记录了数据,i节点下会对应有数据块
对i节点和数据块的操作
创建文件
$ touch afile
向文件写入内容,并查看大小:
$ echo 123 > afile $ du -h afile 4.0K afile
显示大小为4K,因为ext4中一个块大小最小为4K
复制文件
$ cp afile afile2 $ ls -li afile* 57182948 -rw-r--r-- 1 root root 4 7月 14 21:11 afile 57185789 -rw-r--r-- 1 root root 4 7月 14 21:11 afile2
复制后虽然是同样的文件,但是i节点发生了变化
移动文件
$ mv afile2 afile3 $ ls -li afile* 57182948 -rw-r--r-- 1 root root 4 7月 14 21:11 afile 57185789 -rw-r--r-- 1 root root 4 7月 14 21:11 afile3
可以看到虽然文件名改变了,但i节点并未发生变化
链接文件
$ ln afile bfile
查看i节点可知,i节点相同,因此改变bfile的内容也会改变afile
$ ls -li bfile afile 57182948 -rw-r--r-- 2 root root 4 7月 14 21:11 afile 57182948 -rw-r--r-- 2 root root 4 7月 14 21:11 bfile
这样的链接不能跨越分区,要想跨越分区的话要使用软链接,又称符号链接:
$ ln -s afile aafile $ ls -li afile aafile 57183495 lrwxrwxrwx 1 root root 5 7月 14 21:30 aafile -> afile 57182948 -rw-r--r-- 2 root root 4 7月 14 21:11 afile
文件访问权限控制列表
使用getfacl可以查看该列表,标记了文件所有者和组
$ getfacl afile # file: afile # owner: root # group: root user::rw- group::r-- other::r--
使用setfacl 赋予权限
$ setfacl -m u:hwx:r afile $ ls -l afile -rw-r--r--+ 2 root root 4 7月 14 21:11 afile
如上为hwx这个用户赋予只读权限
权限描述符尾部的+号,号表示该文件或目录开启了Access Control Lists功能, 是对rwx权限的扩充
将u改为g,就能对组进行操作
常用命令: mount、mkfs、parted
使用fdisk/gdisk可以对硬盘进行分区
参数 | 作用 |
---|---|
-a | 挂载所有在/etc/fstab中定义的文件系统 |
-t | 指定文件系统的类型 |
例如要将设备/dev/sdb2挂载到/backup目录,只要在mount命令中填写设备与挂载目录参数即可,系统会自动去判断挂载文件的类型,因此只要执行下述命令:
mount /dev/sdb2 /backup
将挂载信息按照指定的填写格式设备文件 挂载目录 格式类型 权限选项 自检 优先级
写入到/etc/fstab文件中,该文件中包含着挂载所需的诸多信息项目,一旦配置好之后就能永久生效
字段 | 意义 |
---|---|
设备文件 | 一般为设备的路径+设备名称,可写成唯一识别码(UUID) |
挂载目录 | 指定要挂载到的目录,在挂载前创建好 |
格式类型 | 指定文件系统格式 |
权限选项 | 权限 |
自检 | 为1则开机进行磁盘自检,为0则不检验 |
优先级 | 若自检,则可对多块磁盘进行自检优先级设置 |
与mount相反,作用是撤销挂载
卸载设备文件: umount/dev/sdb2