#!/bin/bash gksudo -m "ハードディスクの状況を調べてマウントするためにパスワードを入力してください。" sleep 0 # sudo cp -f /boot/grub/menu.lst /boot/grub/menu.lst.bakkuappu && zenity --title="全パーティションの/boot/grub/menu.lstの最初の項目を連結" --info --text="現在の/boot/grub/menu.lstを/boot/grub/menu.lst.bakkuappuとして保存しました。" DEVICELIST="$(sudo fdisk -l|grep /dev/sd|grep -v ディスク|cut -d" " -f1)" # && echo "存在するパーティションは\n${DEVICELIST}\nです。\n" SWAPDEVICELIST="$(swapon -s|grep /dev/sd|cut -d" " -f1)" log="スワップとして使われているパーティションは${SWAPDEVICELIST}\nです。" GRUBDEVICE="" for a in $DEVICELIST do IFSWAP=$(echo ${SWAPDEVICELIST}|grep $a) if [ "$IFSWAP" ] then log="$log\n$a はスワップ領域です。今、スワップとして使われています。" else IFEXTENDED="$(sudo fdisk -l|grep $a|tr -s " "|cut -d" " -f5)" if [ "$IFEXTENDED" = "5" ] then log="$log\n$a は拡張パーティションです。" else MOUNTPOINT="$(more /etc/mtab|grep $a|tr -s " "|cut -d" " -f2)" if [ "${MOUNTPOINT}" ] then FILESYSTEM="$(more /etc/mtab|grep $a|tr -s " "|cut -d" " -f3)" log="$log\n$a は $MOUNTPOINT にマウントされています。ファイルシステムは $FILESYSTEM です。" if [ -e $MOUNTPOINT/boot/grub/menu.lst ] then log="$log この中に/boot/grub/menu.lstが存在します。" GRUBDEVICE="${GRUBDEVICE} $a" fi else IFSWAP="$(sudo blkid|grep $a|tr -s " "|cut -d" " -f2|cut -d\" -f2)" if [ "$IFSWAP" = "swap" ] then log="$log\n$a はスワップ領域です。今はスワップとして使われていません。" else FILESYSTEM="$(sudo blkid|grep $a|tr " " '\n'|grep -G ^TYPE=|cut -d\" -f2)" log="$log\n$a はマウントされていません。ファイルシステムは $FILESYSTEM です。" sudo umount -l /mnt 2>/dev/null sync sudo mount -t $FILESYSTEM $a /mnt -o ro if [ -e /mnt/boot/grub/menu.lst ] then log="$log この中に/boot/grub/menu.lstが存在します。" GRUBDEVICE="${GRUBDEVICE} $a" fi sudo umount -l /mnt fi fi fi fi done zenity --info --title="全パーティションの/boot/grub/menu.lstの最初の項目を連結" --text="$log\n結局、/boot/grub/menu.lstを持っているのは、$GRUBDEVICEです。" zenity --title="全パーティションの/boot/grub/menu.lstの最初の項目を連結" --info --text="次のウィンドウでは、作業用のファイルを一時的に保存するディレクトリを選択してください。右上のボタンを押して、新しく作成した方が安全です。" workdir=$(zenity --title="全パーティションの/boot/grub/menu.lstの最初の項目を連結" --file-selection --directory) if [ $? = 1 ] then zenity --warning --title="全パーティションの/boot/grub/menu.lstの最初の項目を連結" --text="キャンセルが押されました。終了します。" exit 0 fi if [ -x "$workdir" -a -d "$workdir" ] then sleep 0 else zenity --warning --title="全パーティションの/boot/grub/menu.lstの最初の項目を連結" --text="$workdirが無いか、書き込みできません。終了します。" exit 0 fi cd "$workdir" rm menuall.txt title.txt menu1.txt menu.lst.connected for a in $GRUBDEVICE do MOUNTPOINT=$(more /etc/mtab|grep $a|tr -s " "|cut -d" " -f2) if [ "${MOUNTPOINT}" ] then bb="1" else bb="0" FILESYSTEM=$(sudo blkid|grep $a|tr " " '\n'|grep -G ^TYPE=|cut -d\" -f2) sudo umount -l /mnt 2>/dev/null sync sudo mount -t $FILESYSTEM $a /mnt -o ro MOUNTPOINT="/mnt" fi grep -A 7 -G ^title ${MOUNTPOINT}/boot/grub/menu.lst > menuall.txt cat menuall.txt|head -n 1 > title.txt a=`wc -l menuall.txt|cut -d" " -f1` b=`expr $a - 1` cat menuall.txt|tail -n $b > menu1.txt a=`cat menu1.txt|tr -d " "|grep -n -G ^title|head -n 1|cut -d: -f1` if [ $a ] then b=`expr $a - 1` cat menu1.txt|head -n $b >> title.txt else cat menu1.txt >> title.txt fi a=`cat title.txt|tr -d " "|grep -n -G ^\#|head -n 1|cut -d: -f1` if [ $a ] then b=`expr $a - 1` cat title.txt|head -n $b > menuall.txt else cat title.txt > menuall.txt fi a=`cat menuall.txt|tr -d " "|grep -n -G ^$|head -n 1|cut -d: -f1` if [ $a ] then b=`expr $a - 1` cat menuall.txt|head -n $b > title.txt else cat menuall.txt > title.txt fi cat title.txt >> menu.lst.connected echo >> menu.lst.connected if [ $bb = "0" ] then sudo umount -l /mnt fi done rm menuall.txt title.txt menu1.txt zenity --info --title="全パーティションの/boot/grub/menu.lstの最初の項目を連結" --info --text="各パーティションの/boot/grub/menu.lstの最初の起動項目だけを連結したものがmenu.lst.connectedに保存されました。" nautilus $PWD exit 0