комментировать/раскомментировать определенные записи в fstab

Попробуйте запустить X11 с startx и без .xinitrcи без .xsession.

Ваш Xorg.confвыглядит нормально. У меня была такая же проблема с аналогичной настройкой (Debian Stretch, i8700, Nvidia GTX2070 ). В моем случае проблема была в .xinitrc, которая содержала только одну строку для setxkbmap, которая мне все равно не нужна. После удаления .xinitrcя без проблем смог запустить X11 с startx.

-1
18.06.2020, 19:55
3 ответа

Вот так:

sed -i '/db1/s/^/#/g' /etc/fstab

Или с с более сильным соответствием:

perl -i -pe 's/^/#/g if m!/oradata/db1!' /etc/fstab

Если вы хотите более сильное соответствие сsed:

sed -i '/oradata\/db1/s/^/#/g' /etc/fstab

Выход

#/dev/disk/by-uuid/f40f5a40-4772-479e-9041-330c3afbfb40 /oradata/db1 auto nosuid,nodev,nofail,x-gvfs-show 0 0
/dev/disk/by-uuid/f40f5a40-4772-479e-9041-330c3afbfb40 /oradata/db2 auto nosuid,nodev,nofail,x-gvfs-show 0 0
/dev/disk/by-uuid/f40f5a40-4772-479e-9041-330c3afbfb40 /oradata/db3 auto nosuid,nodev,nofail,x-gvfs-show 0 0
0
18.03.2021, 23:26

Хорошо, учитывая SED это S treaming ED или лучше использовать edследующим образом:

ed -s /etc/fstab <<< $'/db1/s/^/#/\n,p'

Если приведенное выше выглядит хорошо, просто замените pend наw

p= Печать w= Запись

Если вы заинтересованы в глобальной замене всех вхождений, вы должны запустить что-то вроде:

ed -s /etc/fstab <<< $'g/db1/s/^/#/\n,p'

Снова замените pна wдля записи в файл.

Поскольку для <<<потребуется bash, есть и другие способы сделать это. Использование оболочки Борна сprintf

printf '%s\n' 'g/db1/s/^/#/' w q | ed -s /etc/fstab

Или оболочка Борна безprintf

ed -s /etc/fstab <<!
g/db1/s/^/#/
w
q
!
0
18.03.2021, 23:26

После долгих экспериментов я нашел решение своей проблемы.

По сути, мне пришлось заменить переменную MOUNTPOINT на другую, содержащую путь к точке монтирования с добавленными escape-символами.

MOUNTPOINTF="${MOUNTPOINT////\\/}

#!/bin/sh

FILE="./fstab"
TAG="#DO NOT EDIT THIS LINE "
COMMAND="do_mount"

f_usage(){
        echo "usage: sudo_mount_oradata1.sh -h"
        echo "       sudo_mount_oradata1.sh -m /oradata1 [-u]"
        exit 1;
}

f_mount() {
        if grep -q "${MOUNTPOINT}" $FILE ; then
                if grep -q "${TAG}" $FILE ; then
                        sed -i.bak "/${MOUNTPOINTF}/s/^${TAG}//g" $FILE
                else
                        echo "INFO: fstab does not contains a commented entry for ${MOUNTPOINT}."
                fi
        else
                echo "INFO: fstab does not contains an entry for ${MOUNTPOINT}."
        fi
}

f_unmount() {
        if grep -q "${MOUNTPOINT}" $FILE ; then
                if grep -q "${TAG}" $FILE ; then
                        echo "INFO: Entry for ${MOUNTPOINT} is already commented in fstab."
                else
                        sed -i.bak "/${MOUNTPOINTF}/s/^/${TAG} /g" $FILE
                fi
        else
                echo "INFO: fstab does not contains an entry for ${MOUNTPOINT}."
        fi
}

while getopts m:u opt
do
    case "$opt" in
                m) MOUNTPOINT="${OPTARG}" ; MOUNTPOINTF="${MOUNTPOINT////\\/}" ;;
                u) COMMAND="do_unmount" ;;
                *) f_usage ;;
        esac
done

clear
# remove leading whitespace from each line
sed -i "s/^[ \t]*//" $FILE

case "$COMMAND" in
        do_mount)   f_mount ;;
        do_unmount) f_unmount ;;
esac

# remove leading whitespace from each line
sed -i "s/^[ \t]*//" $FILE

# debug
echo;
cat $FILE
echo;
ls -lh $FILE*
exit 0
0
18.03.2021, 23:26

Теги

Похожие вопросы