平台:Linux Bash shell
只需要修改 /etc/fstab 文件中的第二列,即 NAS 共享 /vol/wrm6 的挂载点。
NAS1:/vol/wrm6 /archive/net1 NFS default 0 0
NAS2:/vol/wrm6 /archive/06 NFS default 0 0
NAS3:/vol/wrm7 /archive/07 NFS default 0 0
NAS4:/vol/wrm8 /archive/09 NFS default 0 0
应修改路径以在第二列上添加后缀:
NAS1:/vol/wrm6 /archive/net1_05042018 NFS default 0 0
NAS2:/vol/wrm6 /archive/06_05042018 NFS default 0 0
NAS3:/vol/wrm7 /archive/07 NFS default 0 0
NAS4:/vol/wrm8 /archive/09 NFS default 0 0
/archive/
NAS 共享 /vol/wrm6下的任何目录都会被附加_05042018
,如/archive/*_05042018
.*
意味着可以是任何目录
答案1
这应该会照顾到您想要的内容,并将添加到涉及 wrm6 的_05042018
所有目录中。archive
sed -i -E "s/(.*wrm6[[:space:]]+\/archive\/)(.+)([[:space:]]+NFS.*)/\1\2_05042018\3/g" /etc/fstab
答案2
以下脚本将
- 检查新的挂载点是否确实存在(否则中止),
- 对现有文件进行日期备份
/etc/fstab
,最后 - 修改
/etc/fstab
文件。
我建议在复制fstab
多次检查该文件以确保它可以在您的系统上运行。只需更改fstab
脚本顶部的变量以指向不同的文件即可。
仅脚本添加挂载点的后缀。如果那里已经有一个,它不会尝试删除它。
#!/bin/sh
set -e # terminate on errors (don't remove!)
fstab='/etc/fstab' # these could be made command line arguments
device_pattern='^NAS[0-9]:/vol/wrm6' # but I kept them like this for simplicity
dir_pattern='^/archive/'
suffix='_05042018'
# Check for non-existing mount points
awk -v suf="$suffix" -v dev="$device_pattern" -v dir="$dir_pattern" \
'$1 ~ dev && $2 ~ dir { print NR, $1, $2 suf }' "$fstab" |
while read lineno device mtpoint; do
if [ ! -d "$mtpoint" ]; then
printf 'Mount point "%s" for "%s" is missing on line %d of %s\n' \
"$mtpoint" "$device" "$lineno" "$fstab" >&2
#exit 1
fi
done
# Make backup
bkname="$fstab-backup.$(date +%F_%H%M%S)"
cp "$fstab" "$bkname"
# Modify file
awk -v suf="$suffix" -v dev="$device_pattern" -v dir="$dir_pattern" \
'$1 ~ dev && $2 ~ dir { $2 = $2 suf } 1' "$bkname" >"$fstab"
echo 'Done.'
echo 'New fstab:'
cat "$fstab"
“不要删除!”评论是真实的。如果set -e
删除,则如果找到无效的安装点,脚本将不会终止(至少在bash
或下运行时pdksh
)。