目录
一、mount基本语法
二、常见选项
三、常用命令
二 fdisk --磁盘分区工具
fdisk作用
命令格式:
选项
分区示例
查看分区情况 -p
删除分区 -d
新增分区 -n
修改分区类型 —— t
保存之前所有的操作 —— w
在Linux系统中,mount命令是一种非常常见且有用的工具,用于将文件系统连接到指定的挂载点。通过使用mount命令,管理员可以访问和管理存储设备上的文件和目录,包括硬盘驱动器、CD或DVD驱动器、闪存驱动器等。
一、mount基本语法
mount命令的基本语法如下:
mount [-l][-t <文件系统类型>][-o <选项>] <设备名称> <挂载点>
-
-l:以列表的形式显示当前已挂载的文件系统。
-
-t <文件系统类型>:指定要挂载的文件系统的类型,例如ext4、ntfs等。
-
-o <选项>:指定挂载选项,比如读写权限、访问控制等。
-
<设备名称>:指定要挂载的设备的名称或路径。
-
<挂载点>:指定要挂载到的目录路径。
-
二、常见选项
-
mount命令支持多种选项,可以组合使用,常见选项:
ro:以只读模式挂载文件系统。
rw:以读写模式挂载文件系统。
remount:重新挂载一个已经挂载的文件系统,可以修改挂载选项。
user:允许普通用户挂载文件系统,而不仅仅是超级用户。
nouser:只允许超级用户挂载文件系统。
exec:允许在文件系统中执行可执行文件。
noexec:禁止在文件系统中执行可执行文件。
-
三、常用命令
-
挂载设备到指定挂载点:
-
mount /dev/sdb1 /mnt
-
显示当前已挂载的文件系统:
-
mount -l
-
以只读模式挂载文件系统:
-
mount -o ro /dev/sdc1 /mnt
-
重新挂载已挂载的文件系统:
-
mount -o remount,rw /dev/sdc1 /mnt
二 fdisk --磁盘分区工具
-
分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。
防止数据丢失:如果系统只有一个分区,那么这个分区损坏,用户将会丢失所的有数据。
增加磁盘空间使用效率:可以用不同的区块大小来格式化分区,如果有很多1K的文件,而硬盘分区区块大小为4K,那么每存储一个文件将会浪费3K空间。这时我们需要取这些文件大小的平均值进行区块大小的划分。
数据激增到极限不会引起系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起的系挂起。
-
fdisk作用
- fdisk命令可以用于对磁盘进行分区操作,用户可以根据实际情况进行合理划分,这样后期挂载和用时会方便很多。
命令格式:
fdisk [选项] [磁盘设备]
选项
:指定要执行的操作。[磁盘设备]
:指定要操作的磁盘设备(例如/dev/sda
)。
选项
l:列出所有磁盘及其分区表,或者指定磁盘设备的分区表。
b [大小]:指定磁盘的逻辑块大小(如 512、1024、2048、4096 字节)。
u:显示分区的起始和结束位置,以扇区而不是柱面为单位。
c [体积]:忽略 DOS 兼容模式,或者开启 DOS 兼容模式(dos、nondos)。
v:显示 fdisk 的版本信息。
命令示例:
列出所有磁盘及其分区表:
fdisk -l
查看指定磁盘设备的分区表:
fdisk -l /dev/sda
显示分区的起始和结束位置,以扇区为单位:
fdisk -lu /dev/sda
分区示例
使用 fdisk命令对Ubuntu上 检测到的设备 /dev/sdb 进行分区
sudo fdisk /dev/sdb
之后会提示帮助提示指令
查看分区情况 -p
如果输入 p 此时就可以看到如下内容,这里展示的就是磁盘分区情况,该磁盘一共分为了三个区,每个区都有自己的编号,比如 sdb1,代表分区编号是1
删除分区 -d
输入 d 可以删除指定分区,每次只能删除一个分区,删除哪个分区需要你继续输入分区编号。
新增分区 -n
输入 n 开始新增一个分区,第一步选择主分区还是扩展分区
第二步,给新增分区分配编号,可选项为1、3、4
第三步,确定新增分区的起始位置,单位是扇区(注意不是字节)。假设新增分区从第 20480 个扇区开始。(第20480个扇区,也就是第 20480*512 个字节的位置,即第 10M 的位置)
第四步,确定新增分区的结束位置,或者确定分区大小。这里的写法比较多样,主要有三种写法:
- 确定分区的结束扇区位置(不推荐)
- 确定分区大小:比如 +500M,表示新增分区的大小是 500 M(单位不能省略)
- 确定分区所占扇区个数:比如 +1024000,表示新增分区的大小是1024000个扇区的大小
通常情况下,使用第二种方式即可
修改分区类型 —— t
输入 t 以后,先选择分区编号,即你要修改哪个分区的分区类型
接下来如果不知道分区类型对应的十六进制是多少,可以先输入 L 查看分区类型映射表
假设我们输入 83(分区类型为Linux)
然后输入 p 查看第二分区的分区类型
保存之前所有的操作 —— w
如果直接 Ctrl + C 退出,不会保存之前的所有操作。
三 mkfs
这里明确个小问题,为什么要进行磁盘格式化??
格式化,相当于给一片城区住宅标记路名门牌号,告诉邮局或其他什么需要登门拜访的单位和个人:
有谁住在哪、找谁往哪走。
格式化后,整个磁盘的所有可用磁记录表面,会被标记成一圈圈一段段的扇区和簇,对应的编号记录存放在当前分区的特定位置,做成一个数据库,便于操作系统访问,相当于黄页电话簿。
同理,分区表也是类似的数据库,存放在整个硬盘的头部,标记了该硬盘拥有多少个分区,可以理解为邮政编码。
mkfs => make file system 功能: 在特定分区上建立linux 文件系统
在磁盘分区上创建ext2、ext3、ext4、ms-dos、vfat、xfs文件系统,默认情况下会创建ext2。mkfs用于在设备上构建Linux文件系统,通常是硬盘分区。文件要么是设备名称(例如/dev/vda1,/dev/vdb1),要么是包含文件系统的常规文件。成功返回0,失败返回1。
命令详细使用说明
mkfs [options] [-t <type>] [fs-options] <device> [<size>]
mkfs [参数]...[设备]...Usage:mkfs [options] [-t <type>] [fs-options] <device> [<size>]Options:-t, --type=<type> filesystem type; when unspecified, ext2 is usedfs-options parameters for the real filesystem builder<device> path to the device to be used<size> number of blocks to be used on the device-V, --verbose explain what is being done;specifying -V more than once will cause a dry-run-V, --version display version information and exit;-V as --version must be the only option-h, --help display this help text and exit
命令选项说明
device 预备检查的硬盘分区,例如:/dev/vda1
-t 给定文件系统的型式,Linux 的预设值为 ext2
-V 详细显示模式
-c 在制做文件系统前,检查该partition 是否有坏轨
-l bad_blocks_file 将有坏轨的block资料加到 bad_blocks_file 里面
block 给定 block 的大小
四 tar 压缩与解压缩
在Linux系统中,tar
命令用于创建、查看、提取和解压 tar 存档文件。以下是 tar
命令的一些常见用法:
压缩文件或目录:
tar -czvf archive.tar.gz /path/to/directory # 压缩目录为 .tar.gz 格式的文件tar -czvf archive.tar.gz file1 file2 file3 # 压缩多个文件为 .tar.gz 格式的文件tar -cjvf archive.tar.bz2 /path/to/directory # 压缩目录为 .tar.bz2 格式的文件tar -cjvf archive.tar.bz2 file1 file2 file3 # 压缩多个文件为 .tar.bz2 格式的文件tar -cJvf archive.tar.xz /path/to/directory # 压缩目录为 .tar.xz 格式的文件tar -cJvf archive.tar.xz file1 file2 file3 # 压缩多个文件为 .tar.xz 格式的文件
选项说明:
-c
: 创建新的归档文件-z
: 使用 gzip 格式压缩/解压缩-j
: 使用 bzip2 格式压缩/解压缩-J
: 使用 xz 格式压缩/解压缩-v
: 显示详细信息-f
: 指定归档文件名
解压文件:
tar -xzvf archive.tar.gz # 解压 .tar.gz 格式的文件tar -xjvf archive.tar.bz2 # 解压 .tar.bz2 格式的文件tar -xJvf archive.tar.xz # 解压 .tar.xz 格式的文件tar -xvf archive.tar # 解压 .tar 格式的文件
选项说明:
-x
: 提取文件-z
: 解压 gzip 格式-j
: 解压 bzip2 格式-J
: 解压 xz 格式-v
: 显示详细信息-f
: 指定要解压的文件名
查看归档文件内容:
tar -tvf archive.tar.gz # 查看 .tar.gz 归档文件内容tar -tvf archive.tar.bz2 # 查看 .tar.bz2 归档文件内容tar -tvf archive.tar.xz # 查看 .tar.xz 归档文件内容tar -tvf archive.tar # 查看 .tar 归档文件内容
插入一段自动化脚本:
#!/bin/sh
# This script checks for the existence of /dev/sda1 and executes a user-defined startup script if it does. LOG_FILE="/tmp/udisk.log"
MOUNT_POINT_USB="/mnt/usb1_1/factory.sh"
MOUNT_POINT="/tmp/udisk"
SCRIPT_PATH="$MOUNT_POINT/factory.sh"
DEVICE="/dev/sda1"
DEVICE_USB_DIR="/mnt/usb1_1"
DEVICE_USB_DIR_MNT="/mnt"
count=1# Log start of script execution
echo "udisk_script_exec start" >> "$LOG_FILE" # Determine if the USB drive exists &&
# Check if the device exists and is a block device
if [ -b "$DEVICE" ]; then echo "$DEVICE exists" >> "$LOG_FILE"#Waiting to load the USB drive fileecho "count=$count" >> "$LOG_FILE" while ! [ -f $MOUNT_POINT_USB ]dosleep 3date >> "$LOG_FILE" count=$((count+1)) if [ $count -eq 6 ]; thenbreakfidoneecho "count=$count" >> "$LOG_FILE" # Create the mount point if it doesn't exist mkdir -p "$MOUNT_POINT" # cp filecp "$MOUNT_POINT_USB" "$MOUNT_POINT"# Mount the device #mount "$DEVICE" "$MOUNT_POINT" # Ensure the script is executable # 检查文件是否存在if [ -f "$SCRIPT_PATH" ]; thenecho "文件 $SCRIPT_PATH 存在" >> "$LOG_FILE" # 尝试更改权限,并检查结果chmod +x "$SCRIPT_PATH"if [ $? -eq 0 ]; thenecho "chmod命令执行成功,已为$SCRIPT_PATH赋予了执行权限。" >> "$LOG_FILE" elseecho "chmod命令执行失败,请检查当前用户是否真的有权限更改$SCRIPT_PATH的权限。" >> "$LOG_FILE" fielseecho "文件 $SCRIPT_PATH 不存在。" >> "$LOG_FILE" fi# Check if the script is executable and run it if [ -x "$SCRIPT_PATH" ]; then bash "$SCRIPT_PATH"echo "factory.sh run success" >> "$LOG_FILE" else echo "factory.sh is not executable" >> "$LOG_FILE" fi # Optionally, you can uncomment the following lines to unmount and remove the mount point # umount "$MOUNT_POINT" # rmdir "$MOUNT_POINT" else #echo "$DEVICE does not exist" >> "$LOG_FILE" echo "$MOUNT_POINT_USB文件目录不存在" >> "$LOG_FILE" # 定义日志文件路径,并确保路径有效且存在#LOG_FILE=/tmp/udisk.log# 检查日志文件路径是否存在,如果不存在则创建if [ ! -f "$LOG_FILE" ]; thentouch "$LOG_FILE"fi# 运行命令并重定向输出到日志文件echo "Starting the command execution at $(date)" >> "$LOG_FILE"result="`sidbg 3 webd on`"cnt=1echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1while [ "$result" != "upmod is set on now. " ]; doresult="$(sidbg 3 webd on)"cnt=$((cnt+1)) doneecho "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1# 显示命令执行结果echo "Command execution finished at $(date)" >> "$LOG_FILE"
fi if [ ! -f "$SCRIPT_PATH" ]; thenecho "$SCRIPT_PATH文件不存在" >> "$LOG_FILE" # 定义日志文件路径,并确保路径有效且存在#LOG_FILE=/tmp/udisk.log# 检查日志文件路径是否存在,如果不存在则创建if [ ! -f "$LOG_FILE" ]; thentouch "$LOG_FILE"fi# 运行命令并重定向输出到日志文件echo "Starting the command execution at $(date)" >> "$LOG_FILE"result="`sidbg 3 webd on`"cnt=1echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1while [ "$result" != "upmod is set on now. " ]; doresult="$(sidbg 3 webd on)"cnt=$((cnt+1)) doneecho "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
fi#------------------------------------------------
# 检查日志文件路径是否存在,如果不存在则创建
if [ ! -f "$LOG_FILE" ]; thentouch "$LOG_FILE"
fi# 定义配置文件路径
CONFIG_FILE="/etc/config_file.txt"
#将文件转换成Unix格式
dos2unix "$CONFIG_FILE"chmod 666 "$CONFIG_FILE"
#读取文件里面的每一个值
# 获取 upmode 的值
UPMODE="$(grep 'upmode=' "$CONFIG_FILE" | cut -d "=" -f2)"# 获取 upmode_off 的值
UPMODE_OFF="$(grep 'upmode_off=' "$CONFIG_FILE" | cut -d "=" -f2)"# 获取 upmode_on 的值
UPMODE_ON="$(grep 'upmode_on=' "$CONFIG_FILE" | cut -d "=" -f2)"# 输出结果
echo "upmode: $UPMODE" >> "$LOG_FILE"
echo "upmode_off: $UPMODE_OFF" >> "$LOG_FILE"
echo "upmode_on: $UPMODE_ON" >> "$LOG_FILE"
# 定义要修改的值及其新值
declare -A modifications
if [ $UPMODE = "True" ]; thenecho "相等" >> "$LOG_FILE"
elseecho "不相等" >> "$LOG_FILE"
fiif [ $UPMODE = "True" ] && [ $UPMODE_OFF = "False" ] && [ $UPMODE_ON = "True" ]; thenecho "need to set upmode_off is true" >> "$LOG_FILE"modifications["upmode"]="True" modifications["upmode_off"]="True" modifications["upmode_on"]="True" elif [ $UPMODE = "True" ] && [ $UPMODE_OFF == "True" ] && [ $UPMODE_ON == "True" ]; thenecho "upmode is set UPMODE_ON UPMODE UPMODE_OFF all is false" >> "$LOG_FILE"modifications["upmode"]="False" modifications["upmode_off"]="False" modifications["upmode_on"]="False"
elseecho "need to set upmode successful" >> "$LOG_FILE"
fi# 读取配置文件并修改值
while IFS="=" read -r var value || [[ -n "$value" ]]; do # 检查是否需要修改此变量 if [[ -n ${modifications["$var"]} ]]; then # 更新变量的值 new_value=${modifications["$var"]} echo "$var=$new_value" else # 如果不需要修改,则原样输出 echo "$var=$value" fi
done < "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" # 将修改后的内容移回原文件
mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE" echo "Values have been updated in the file: $CONFIG_FILE" >> "$LOG_FILE"# End of script logging
echo "udisk_script_exec end" >> "$LOG_FILE"
参考链接:Linux下的fdisk指令详解_linux fdisk-CSDN博客
Linux磁盘管理与文件系统(二):实用工具和命令、fdisk分区示例-CSDN博客
Linux命令之fdisk --磁盘分区工具-CSDN博客
mount命令最新详细教程-CSDN博客
【Linux命令】fdisk 相关分区命令_fdisk查看分区信息-CSDN博客
linux下tar命令的压缩和解压详细使用方法_linux tar解压缩-CSDN博客