줄을 삭제 /etc/fstab
하고 해당 sed
명령을 사용하고 싶지만 파일의 모든 내용이 삭제됩니다.
내 거 fstab
:
/dev/mapper/vg00-lv_root / xfs defaults 0 0
/dev/mapper/vg00-lv_backup /backup xfs defaults 0 0
UUID=30d58f5e-a432-4739-98f9-3f2ceb66fc03 /boot ext4 defaults 1 2
/dev/mapper/vg00-lv_wsbackup /wsbackup xfs defaults 0 0
UUID=a59bad9c-8c89-4b20-aadd-e83c4ab22a6c swap swap defaults 0 0
10.10.10.10 /mnt/wsbackup cifs user=user,password=password,domain=domain,vers=2.1 0 0
내 스크립트:
MNTDIR="/mnt/wsbackup"
if grep -q "$MNTDIR" "/etc/fstab"
then
sed -i -n "\:$MNTDIR:d" /etc/fstab
else
...
fi
스크립트에서 해당 명령을 사용하면 sed "\:$MNTDIR:d" /etc/fstab
내가 원하는 결과가 출력됩니다.
[root@labor-ssd ~]# sh check.sh
/dev/mapper/vg00-lv_root / xfs defaults 0 0
/dev/mapper/vg00-lv_backup /backup xfs defaults 0 0
#/dev/sdb /backup ext4 defaults 0 0
UUID=30d58f5e-a432-4739-98f9-3f2ceb66fc03 /boot ext4 defaults 1 2
/dev/mapper/vg00-lv_wsbackup /wsbackup xfs defaults 0 0
UUID=a59bad9c-8c89-4b20-aadd-e83c4ab22a6c swap swap defaults 0 0
INFO: user mount configuration removed
하지만 변경 사항은 파일에 기록되지 않으므로 이 -i
옵션을 사용하여 변경 사항을 파일에 기록합니다. 그 이후에는 파일이 완전히 비어 있는데 이유를 모르겠습니다.
답변1
./etc/fstab
-i
-n
이 옵션은 일반적으로 각 주기가 끝날 때 실행되는 "기본(인쇄) 명령"을 -n
끕니다 .p
을 사용하면 -n
스크립트는 실제로 아무 것도 출력하지 않습니다. 옵션을 제거하더라도 -i
스크립트에 명령이 없기 때문에 아무 것도 출력하지 않습니다. 루프 끝의 기본값도 아니기 때문에 모든 줄을 인쇄합니다.p
p
아니요삭제되었습니다. sed
스크립트는 아무 것도 출력하지 않으므로 변경 사항이 적용되도록 지시하면 파일 sed
이 -i
지워집니다.
따라서 문제를 해결하려면 -n
명령에서 문제를 제거하십시오.
개인적으로 저는 다음과 같이 코드를 작성하겠습니다.
mntdir=/mnt/wsbackup
cp /etc/fstab /etc/fstab.orig
sed "\\:$mntdir:d" /etc/fstab.orig >/etc/fstab
이를 통해 원본 파일의 복사본을 유지할 수 있습니다 fstab
.
또는,
mntdir=/mnt/wsbackup
sed -i.orig "\\:$mntdir:d" /etc/fstab
sed
이는 사용하는 구현 에 따라 거의 동일한 작업을 수행합니다 .
파일에서 문자열을 찾을 수 없으면 파일에 아무 작업도 수행하지 말고 grep -q -F -e "$mntdir" /etc/fstab
테스트로 래핑해야 합니다(이미 수행한 것과 유사).$mntdir
mntdir=/mnt/wsbackup
grep -q -F -e "$mntdir" /etc/fstab &&
sed -i.orig "\\:$mntdir:d" /etc/fstab