在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
插入一段自动化脚本:
#!/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 file
echo "count=$count" >> "$LOG_FILE"
while ! [ -f $MOUNT_POINT_USB ]
do
sleep 3
date >> "$LOG_FILE"
count=$((count+1))
if [ $count -eq 6 ]; then
break
fi
done
echo "count=$count" >> "$LOG_FILE"
# Create the mount point if it doesn't exist
mkdir -p "$MOUNT_POINT"
# cp file
cp "$MOUNT_POINT_USB" "$MOUNT_POINT"
# Mount the device
#mount "$DEVICE" "$MOUNT_POINT"
# Ensure the script is executable
# 检查文件是否存在
if [ -f "$SCRIPT_PATH" ]; then
echo "文件 $SCRIPT_PATH 存在" >> "$LOG_FILE"
# 尝试更改权限,并检查结果
chmod +x "$SCRIPT_PATH"
if [ $? -eq 0 ]; then
echo "chmod命令执行成功,已为$SCRIPT_PATH赋予了执行权限。" >> "$LOG_FILE"
else
echo "chmod命令执行失败,请检查当前用户是否真的有权限更改$SCRIPT_PATH的权限。" >> "$LOG_FILE"
fi
else
echo "文件 $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" ]; then
touch "$LOG_FILE"
fi
# 运行命令并重定向输出到日志文件
echo "Starting the command execution at $(date)" >> "$LOG_FILE"
result="`sidbg 3 webd on`"
cnt=1
echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
while [ "$result" != "upmod is set on now. " ]; do
result="$(sidbg 3 webd on)"
cnt=$((cnt+1))
done
echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
# 显示命令执行结果
echo "Command execution finished at $(date)" >> "$LOG_FILE"
fi
if [ ! -f "$SCRIPT_PATH" ]; then
echo "$SCRIPT_PATH文件不存在" >> "$LOG_FILE"
# 定义日志文件路径,并确保路径有效且存在
#LOG_FILE=/tmp/udisk.log
# 检查日志文件路径是否存在,如果不存在则创建
if [ ! -f "$LOG_FILE" ]; then
touch "$LOG_FILE"
fi
# 运行命令并重定向输出到日志文件
echo "Starting the command execution at $(date)" >> "$LOG_FILE"
result="`sidbg 3 webd on`"
cnt=1
echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
while [ "$result" != "upmod is set on now. " ]; do
result="$(sidbg 3 webd on)"
cnt=$((cnt+1))
done
echo "result = $result cnt = $cnt" >> "$LOG_FILE" 2>&1
fi
#------------------------------------------------
# 检查日志文件路径是否存在,如果不存在则创建
if [ ! -f "$LOG_FILE" ]; then
touch "$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" ]; then
echo "相等" >> "$LOG_FILE"
else
echo "不相等" >> "$LOG_FILE"
fi
if [ $UPMODE = "True" ] && [ $UPMODE_OFF = "False" ] && [ $UPMODE_ON = "True" ]; then
echo "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" ]; then
echo "upmode is set UPMODE_ON UPMODE UPMODE_OFF all is false" >> "$LOG_FILE"
modifications["upmode"]="False"
modifications["upmode_off"]="False"
modifications["upmode_on"]="False"
else
echo "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博客