UUID="14314872-abd5-24e7-a850-db36fab2c6a1" /lpo/sda ext4 defaults,noatime 0 0
UUID="6d439357-3d20-48de-9973-3afb2a325eee" /lpo/sdb ext4 defaults,noatime 0 0
Формат записей в fstab следующий:
<file system> <dir> <type> <options> <dump> <pass>
Где <file system>
— это устройство, которое вы хотите смонтировать (, например /dev/sdb
, а <dir>
— это путь к месту, куда должно быть смонтировано устройство(/lpo/sda
в вашем случае ).
Существует несколько способов указать <file system>
, самый простой из которых — это путь к рассматриваемому устройству файловой системы /dev/sdb
в вашем случае (, хотя обычно они указывают на раздел на диске, а не на диск, например /dev/sdb1
, но похоже, что на ваших дисках нет таблицы разделов и просто есть файловая система на основном устройстве ). Но вы также можете использовать устройство UUID
или PARTUUID
, указав его как пару ключ/значение UUID="14314872-abd5-24e7-a850-db36fab2c6a1"
вместо /dev/sdb
.
Основная причина использования UUID
или PARTUUID
вместо путей к устройствам заключается в том, что они более согласованы при смене физических дисков. Устройства пронумерованы в соответствии с тем, как они представлены операционной системе биосом (, который обычно упорядочен по сокету, к которому они подключены ). Это означает, что если вы добавите новое устройство или физически переупорядочите существующие устройства, они будут перенумерованы, и то, что было раньше /dev/sdb
, может не быть сейчас. Как вы можете себе представить, это приведет к тому, что неправильный диск будет смонтирован в неправильном месте.UUID
и PARTUUID
— это идентификаторы, которые записываются как часть форматирования файловой системы для UUID
или во время создания раздела в случае PARTUUID
. Эти номера записываются на диск и всегда остаются неизменными, поэтому их можно использовать для монтирования правильного диска, даже если базовый файл устройства будет перенумерован.
Дополнительное примечание :Ваши устройства немного сбивают с толку -вы установили /dev/sdb
на /lpo/sda
-, хотя это работает, это может сбивать с толку и приводить к ошибкам при обслуживании/настройке вашей системы, вы можете захотеть сделать их более последовательными.
Используемый скрипт следует изменить следующим образом:
if [[ ! -z "$1" && ! -z "$2" && "$2" = "comment" ]]; then
# remove multi # comments if there's any
sed -i "s/#*export PATH=\"\/usr\/local\/opt\/php@$1/export PATH=\"\/usr\/local\/opt\/php@$1/g" ~/.zshrc
# Finally add a single # comment
sed -i "s/export PATH=\"\/usr\/local\/opt\/php@$1/#export PATH=\"\/usr\/local\/opt\/php@$1/g" ~/.zshrc
fi
if [[ ! -z "$1" && ! -z "$2" && "$2" = "uncomment" ]]; then
# remove one or more # comments
sed -i "s/#*export PATH=\"\/usr\/local\/opt\/php@$1/export PATH=\"\/usr\/local\/opt\/php@$1/g" ~/.zshrc
fi
Проблемы были:
Это будет работать надежно, эффективно и портативно.:
#!/usr/bin/env bash
infile=~/.zshrc
tmp=$(mktemp) || exit 1
awk -v ver="$1" -v cmd="$2" '
index($0,"php@"ver"/") {
if ( cmd == "comment" ) { sub(/^#*/,"#") }
else if ( cmd == "uncomment" ) { sub(/^#+/,"") }
else { printf "bad cmd: %s\n", cmd | "cat>&2" }
}
{ print }
' "$infile" > "$tmp" && mv "$tmp" "$infile"
При необходимости измените "php@"ver"/"
на "export PATH=\"/usr/local/opt/php@"ver"/"
, чтобы избежать ложных совпадений с другими строками, которые существуют в вашем реальном вводе, но не показаны в вашем примере.
Если у вас есть GNU awk, вы можете использовать -i inplace
вместо создания файла tmp вручную.