baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • 计算机网络

  • 操作系统

    • 如何在VM上创建一个linux虚拟机
    • linux命令解析
      • free命令
      • mkswap指令
      • swapon指令
      • dd
      • df
      • linux 查看端口占用情况
    • linux一些重要的命令
    • linux中的文件类型
    • linux中的交换区
    • linux中分区是什么
    • 环境变量
    • 银行家算法
    • 操作系统内存管理
    • 虚拟内存
    • 硬链接和软链接有什么区别
    • 常见的调度算法
    • 零拷贝技术
    • yum
    • systemctl
    • 汇编语言
    • 汇编语言实操
    • 死锁
  • 算法

  • 计算机基础
  • 操作系统
xugaoyi
2023-06-09
目录

linux命令解析

https://blog.csdn.net/qq_35462323/article/details/105724468 (opens new window)

# free命令

查看内存使用情况

free -m 
free -h
free -k
1
2
3

通常使用free -h的格式可以看到更符合人行为的内存大小

一般会展示出下面的情况:

#free
             total       used       free     shared    buffers     cached
Mem:      16467424   15696636     770788          0     158636    7059612
-/+ buffers/cache:    8478388    7989036
Swap:            0          0          0
1
2
3
4
5

每一列的特殊含义:

  • total:物理内存大小,就是机器实际的内存
  • used:已使用的内存大小,这个值包括了 cached 和 应用程序实际使用的内存
  • free:未被使用的内存大小
  • shared:共享内存大小,是进程间通信的一种方式
  • buffers:被缓冲区占用的内存大小
  • cached:被缓存占用的内存大小

对于Mem对应的行:total = used + free

下面一行,代表应用程序实际使用的内存:

前一个值表示 - buffers/cached,即 used - buffers/cached,表示应用程序实际使用的内存。 后一个值表示 + buffers/cached,即 free + buffers/cached,表示理论上都可以被使用的内存。 这两个值相加=total

什么是swap

操作系统 进程识别的是虚拟内存地址。每个物理内存都有一个或多个虚拟内存进行对应

内存分页:

什么使用分页

通过上面对虚拟内存的介绍得知,操作系统必须能高效地翻译虚拟内存和物理内存地址映射。 Linux采用了分页(paging)的方式来记录对应关系。 所谓的分页,就是以更大尺寸的单位页(page)来管理内存。 内存分页,可以极大地减少所要记录的内存对应关系。我们已经看到,以字节为单位的对应记录实在太多。如果把物理内存和进程空间的地址都分成页,内核只需要记录页的对应关系,相关的工作量就会大为减少。

linux中内存页是多大?

getconf PAGE_SIZE
1

当物理内存大小不够时,会将部分页(暂时未使用)暂存到磁盘上。swap字面意思就是交换,指硬盘上一块分区或者文件。

使用swapon -s可以查看当前系统上正在使用的交换空间清单

[root@PCS101 ~]# swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1                               partition    16777208    0    -1
1
2
3

当然,以上在你物理内存足够的情况下应该不会显示什么。

# mkswap指令

创建交换区

Linux mkswap命令用于设置交换区(swap area)。

mkswap可将磁盘分区或文件设为Linux的交换区。

mkswap [-cf][-v0][-v1][设备名称或文件][交换区大小]
1
  • -c 建立交换区前,先检查是否有损坏的区块。
  • -f 在SPARC电脑上建立交换区时,要加上此参数。
  • -v0 建立旧式交换区,此为预设值。
  • -v1 建立新式交换区。
  • [交换区大小] 指定交换区的大小,单位为1024字节。

例子:

①准备我们需要创建交换区的分区,例如fdisk提前创建好分区 ( /dev/sdb2 )

②使用mkswap创建交换区

mkswap /dev/sdb2

③使用swapon启动分区

Swapon /dev/sdb2

④查看已经启动的交换区

Swapon -s

$ swapon -s
Filename				Type		Size	Used	Priority
/dev/sdb2       partition	2097148	0	-2
1
2
3

⑤若有需求,可以禁用交换区

swapoff /dev/sdb2

⑥如果想要扩大交换区的容量

可以通过增加或减少交换分区的大小来调整系统的内存和交换空间比例。要调整交换分区的大小,需要先禁用该分区,然后重新创建和启用一个新的交换分区。

请注意,在Linux中,交换空间对于系统性能和稳定性非常重要,因此应根据实际情况合理设置并管理交换空间。通常建议将交换空间设置为物理内存容量的1-2倍,但这也取决于系统负载和应用程序需求等因素。

参考:可以查看相关的链接:https://wangchujiang.com/linux-command/c/mkswap.html (opens new window)

# swapon指令

Linux swapon命令用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存。

相关语法:

/sbin/swapon -a [-v]
/sbin/swapon [-v] [-p priority] specialfile ...
/sbin/swapon [-s]
1
2
3
  • -h 请帮帮我
  • -V 显示版本讯息
  • -s 显示简短的装置讯息
  • -a 自动启动所有SWAP装置
  • -p 设定优先权,你可以在0到32767中间选一个数字给他。或是在 /etc/fstab 里面加上 pri=[value] ([value]就是0~32767中间一个数字),然后你就可以很方便的直接使用 swapon -a 来启动他们,而且有优先权设定。

swapon 是开启swap.

相对的,便有一个关闭swap的指令,swapoff.

# dd

dd命令也是Linux/Unix操作系统中的一个命令,全称为“data duplication”,用于复制文件或者设备内容。通过dd命令,你可以将一个文件或者设备的内容复制到另外一个文件或者设备中,还可以进行转换、合并等操作。

dd文件和我们平时touch出来的文件有什么区别?

dd命令中的"指定文件"通常是指一个磁盘设备或者一个磁盘映像文件,而不是我们平时使用touch创建的普通文件。

具体来说,当使用dd命令时,if参数和of参数分别表示输入文件和输出文件,它们可以是设备文件(如/dev/sda)或磁盘映像文件(如image.img)。在使用dd命令时,需要特别小心,因为如果不小心选择了错误的输入或输出文件,可能会导致数据丢失或者覆盖掉重要的数据。

而touch命令则用来创建一个新的空白文件或者更新已有文件的时间戳,它并不涉及磁盘设备或磁盘映像文件。

详细区别:

dd命令常用来操作块设备文件。

块设备是一种能够随机读写固定大小数据块的设备,如硬盘、USB闪存驱动器等。块设备中的数据可以被按照固定大小的块进行读取或写入,这与处理普通文件时的逐字节读取或写入方式不同。因此,dd命令在进行磁盘镜像、备份和恢复等操作时,需要正确指定输入和输出块设备,并按照合适的块大小进行读写操作。

在使用dd命令时,可以指定if参数表示输入文件即源文件,of参数表示输出文件即目标文件。而这些输入或输出文件通常是指磁盘设备文件或磁盘映像文件,例如/dev/sda或image.img。通过按照规定的块大小读写这些文件,dd命令就可以进行磁盘复制、备份和恢复等操作。但需要注意的是,在使用dd命令时需要格外小心,确保输入和输出设备参数正确,以避免意外情况的发生。

磁盘文件和普通文件有什么区别

  1. 磁盘设备文件

磁盘设备文件是用于访问硬件设备的特殊文件,它对应着计算机中的物理存储设备(如固态硬盘、机械硬盘等)。在Linux/Unix系统中,所有的设备都被视为文件,这些设备文件通常以/dev开头,例如/dev/sda表示第一个SATA磁盘设备。磁盘设备文件可以被dd命令所使用,通过读取或写入磁盘设备文件,可以进行磁盘复制、备份等操作。但需要注意的是,由于磁盘设备文件是直接与硬件设备交互的,如果不小心操作有可能导致数据的丢失或破坏。因此,在使用dd命令时一定要格外小心,确保输入和输出设备参数正确,以避免意外情况的发生。

  1. 普通文件

普通文件也就是我们平时创建和编辑的文件,它们是存在于文件系统中的一种实体,与磁盘设备相比,普通文件更加容易被处理和操作。普通文件的内容是由字符或二进制数据组成,可以通过文本编辑器、命令行工具等进行读取或编辑。普通文件可以被用于存储各种类型的数据,例如文本、音频、视频、图片等等,我们平时使用的所有应用程序和系统组件都是由多个不同类型的文件构成的。

总的来说,磁盘设备文件和普通文件都是存在于计算机系统中的一种实体,但它们的作用和使用方式有所不同。磁盘设备文件是用于访问硬件设备的特殊文件,它们可以被dd命令等工具使用来进行磁盘复制、备份等操作;而普通文件则是用于存储各种类型的数据,它们可以被用于存储和处理应用程序和系统组件中所需要的数据。

dd 命令是一个用于在Unix和类Unix系统中进行底层数据复制的程序。它可以从输入文件或设备中读取指定长度的数据块,并将其写入到输出文件或设备中。

dd 命令的基本语法如下:

dd [选项]
1

常用的选项包括:

  • if:指定输入文件或设备。
  • of:指定输出文件或设备。
  • bs:指定每次操作的块大小,默认为512字节。
  • count:指定要复制的块数。
  • skip:跳过输入文件或设备前面的块数。
  • seek:在输出文件或设备中跳过指定数量的块。
  • status:指定 dd 命令的进度报告频率。

例如,下面这个命令将从 /dev/sda 这个磁盘读取两个块(每个块1024字节),并将它们写入到 backup.img 文件:

dd if=/dev/sda of=backup.img bs=1024 count=2
1

除了上述基本语法外,dd 命令还支持许多选项和参数,可以实现更加高级的功能,例如对文件进行加密、压缩、转换等操作。不过需要注意的是,dd 命令的使用需要非常小心,不当的使用可能会导致数据丢失或损坏。

其实从分区当中复制出来的文件会被输出到其他分区中,且复制应该是深复制,复制出来的文件进行修改不会改变原分区

# df

df命令是Linux/Unix操作系统中的一个命令,全称为“disk free”,用于显示文件系统的可用空间和已用空间。通过df命令,你可以查看当前所有挂载的文件系统的使用情况。

操作系统怎么记录一个磁盘的容量使用情况:

操作系统中记录磁盘被占用的情况通常是通过文件系统来实现的。每个文件系统都会在硬盘上分配一些数据结构来管理文件和目录。这些数据结构(例如inode、块位图等)会记录哪些块已经被分配给了文件,哪些块还没有被分配。

具体来说,文件系统通常会有一个块位图(block bitmap),它记录了硬盘上所有块的状态:已分配或未分配。如果一个块已经被分配给了一个文件,那么在块位图中相应的位就会被标记为已用;反之,如果该块还没有被分配,那么位图中对应的位就表示该块空闲可用。

当操作系统需要写入一个新的文件时,它会检查块位图,找到第一个空闲块,并将该块的状态标记为已分配。然后,系统将文件数据写入到该块中,并更新文件系统的元数据信息(例如 inode、目录结构等)。由此可以看出,块位图是判断磁盘空间占用情况的关键所在。

在Linux系统中,可以使用 df 命令查看文件系统的使用情况,它会显示磁盘总容量、已使用的容量、可用容量等信息。另外,也可以使用 du 命令查看指定目录或文件的大小,这个命令会遍历整个目录树,并计算出其中所有文件和子目录的大小。

image-20230411181052116

image-20230411181225523

image-20230411181338850

上面是连续几次dd的结果,然后我们可以看到磁盘的available的大小是越来越少的。就可以表示其实是复制的情况。

我们使用file命令查看我们的文件类型

image-20230411185518413

这个输出表示该文件系统使用 SGI XFS 格式,并且块大小为 4096,inode 大小为 512,并且使用 v2 目录结构。SGI XFS 是一种高性能的文件系统,通常用于处理大型文件和高并发访问。在 Linux 系统中,XFS 文件系统已成为许多企业使用的首选文件系统之一。

关于linux的分区

​ 不是,Linux 中的交换分区需要手动分配和配置。在 Linux 系统中,交换分区是一种特殊类型的分区,用于存储系统内存中暂时不使用的数据,以便为正在运行的进程提供额外的内存空间。

​ 通常情况下,在安装 Linux 操作系统时会创建一个默认的交换分区,但也可以手动创建和配置多个交换分区。用户可以使用 fdisk 或其他分区工具来创建新的分区,并使用 mkswap 命令将其格式化为交换分区。然后,可以使用 swapon 命令将该分区添加到系统中,并使用 /etc/fstab 文件配置在系统启动时自动加载该分区作为交换分区。

​ 总之,Linux 中的交换分区需要手动分配和配置,根据系统需求和资源管理需要,可以创建多个交换分区来提高系统性能和稳定性。

# linux 查看端口占用情况

参考:https://www.runoob.com/w3cnote/linux-check-port-usage.html (opens new window)

编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19
如何在VM上创建一个linux虚拟机
linux一些重要的命令

← 如何在VM上创建一个linux虚拟机 linux一些重要的命令→

最近更新
01
spark基础
02-22
02
mysql读写分离和分库分表
02-22
03
数据库迁移
02-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式