LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: 哈蜜瓜

我写的一个自动mount各类分区的脚本(能为vfat分区加上iocharset参数)

[复制链接]
发表于 2004-10-27 18:20:02 | 显示全部楼层
最初由 ccwufu 发表
在knoppix , morphix , gnoppix 等live cd 中, 已经有了auto-buildfstab
可以实现类似功能(不会根基$LANG or $LC_CTYPE来处理不同的语言环境)

因为我正在定制morphix(不想定制base-module, auto-buildfstab 在其中)
想在auto-buildfstab生成的fstab基础上,给vfat , ntfs 分区加上iocharset / codepage 选项,
能否帮忙写一个script : fstab-convert.sh
"fstab-convert.sh  fstab.org  fstasb.cn"

请指教!谢谢!

请参考ibox livecd的domount代码。
发表于 2004-10-27 20:52:44 | 显示全部楼层
看来我能写出这样子的代码还得拼命学几天啊,呵呵
发表于 2004-10-28 10:56:24 | 显示全部楼层

看不懂

那位高手能讲解以下其中的 代码,能让新手看明白亚 !!
多谢了!!!!!!!!
发表于 2004-10-28 11:38:40 | 显示全部楼层
MOUNTOPTIONS="iocharset=gb2312,codepage=936"
对ntfs也好用吗?
怎么在网上,很多人提到对ntfs用utf8比较好。
发表于 2004-10-28 19:56:26 | 显示全部楼层
无论utf8还是cp936,我在ntfs下的目录或文件总有只见名称无法打开的。报错说没有这个文件或目录。
发表于 2004-10-28 20:08:01 | 显示全部楼层
ntfs 用utf8
在rox-filer下中文显示很好,也可以进入中文目录
(基本没有漏字,LANG=zh_CN.GBK)
发表于 2004-10-28 20:12:39 | 显示全部楼层
scanpartitions in morphix / knoppix

#!/bin/bash
# (C) Klaus Knopper Nov 2002
# Reads /proc/partitions, returns table of the form
# basename(devicefile) mountpoint filesystemtype
# Useful for automatic generation of /etc/fstab entries (you
# still may have to add noauto 0 0).
#
# $Id: scanpartitions,v 1.2 2004/04/12 00:05:26 paul_c Exp $
#

[ ! -e /proc/partitions ] && { echo "$0: /proc not mounted, exiting" >&2; exit 1; }

fstype(){
[ -n "$1" ] || return 1

# Check if partition is already mounted
while read device mountpoint filesystem relax; do
case "$device" in *$1*) echo "$filesystem"; return 0;; esac
done <<EOT
$(cat /proc/mounts)
EOT

# Check if a device/medium is present at all
dd if="$1" count=1 bs=1024 >/dev/null 2>&1 || return 2
FILE="$(LANG=C LC_ALL=C LC_MESSAGES=C file -Ls "$1")"
[ "$?" = "0" ] || return 2

# File systems to try first
FILESYSTEMS=""
case "$FILE" in
*[Ff][Aa][Tt]*|*[Xx]86*) FILESYSTEMS="vfat msdos ntfs";;
*[Rr][Ee][Ii][Ss][Ee][Rr]*)  echo "reiserfs"; return 0;;
*[Xx][Ff][Ss]*)  echo "xfs"; return 0;;
*[Ee][Xx][Tt]3*) echo "ext3"; return 0;;
*[Ee][Xx][Tt]2*) echo "ext2"; return 0;;
*[Ss][Ww][Aa][Pp]*) echo "swap"; return 0;;
esac
# It seems that only reliable way to identify the filesystem is to attempt a mount
TMPDIR="/tmp/autmount.${1##*/}.$$.dir"
mkdir -p "$TMPDIR" || return 3
FS=""
# Don't clobber console while attemting a mount
read LOGLEVEL relax < /proc/sys/kernel/printk
echo "0" >/proc/sys/kernel/printk
for f in $FILESYSTEMS $(</etc/filesystems); do
mount -r -t "$f" "$1" "$TMPDIR" >/dev/null 2>&1 && { umount "$TMPDIR"; FS="$f"; break; }
umount -f "$TMPDIR" >/dev/null 2>&1
done
echo "$LOGLEVEL" >/proc/sys/kernel/printk
rmdir "$TMPDIR"
[ -n "$FS" ] && echo "$FS" || return 4
}

###

if [ -z "$1" ]; then
partitions=""
disks=""
pold="none"
while read major minor blocks partition relax; do
partition="${partition##*/}"
[ -z "$partition" -o ! -e "/dev/$partition" ] && continue
[ "$blocks" -lt 2 ] && continue
case "$partition" in
[hs]d?) disks="$disks $partition";;
*) partitions="$partitions /dev/$partition";;
esac
done <<EOT
$(awk 'BEGIN{old="__start"}{if($0==old){exit}else{old=$0;if($4&&$4!="name"){print $0}}}' /proc/partitions)
EOT

# Add disks without partition table (probably ZIP drives)
for d in $disks; do
case "$partitions" in */dev/$d*) continue;; esac
partitions="$partitions /dev/$d"
done
else
partitions="$*"
fi

for p in $partitions; do
fs="auto"
scanfs="$(fstype $p)"
[ -n "$scanfs" ] && fs="$scanfs"
mountpoint="/mnt/${p##*/}"
[ "$fs" = "swap" ] && mountpoint="none"
echo "${p}" "${mountpoint}" "${fs}"
done

exit 0
发表于 2004-10-28 20:14:46 | 显示全部楼层
rebuildfstab in morphix / knoppix

#!/bin/bash
# (C) Klaus Knopper Nov 2002
# Calls scanpartitions as root and adds entries to /etc/fstab
# slightly editted for morphix usage
#
# $Id: rebuildfstab,v 1.3 2004/04/12 00:05:26 paul_c Exp $
#

PATH="/bin:/sbin:/usr/bin:/usr/sbin"
export PATH
umask 022

[ ! -e /proc/partitions ] && { echo "$0: /proc not mounted, exiting" >&2; exit 1; }

if [ -e /var/run/rebuildfstab.pid ]; then
ps "$(</var/run/rebuildfstab.pid)" >/dev/null 2>&1 && exit 0
rm -f /var/run/rebuildfstab.pid
fi

echo "$$" >/var/run/rebuildfstab.pid

XSH=""
[ -n "$DISPLAY" ] && XSH="rxvt -bg black -fg green -cr red -T $0 -e"

[ "`id -u`" != "0" ] && { exec $XSH sudo $0 "$@"; }


TMP="/tmp/fstab.$$.tmp"
ADDEDBYKNOPPIX="# Added by Morphix"

# Simple shell grep, searches for lines STARTING with string
stringinfile(){
while read line; do
case "$line" in $1*) return 0;; esac
done <"$2"
return 1
}

removeentries(){
# Remove comment line $1 and the following line from file $2
# sed '/^# Added by KNOPPIX/{N;d;}'
while read line; do
case "$line" in $1) read line; continue ;; esac
echo "$line"
done <"$2"
}

verbose=""
remove=""
user=""
group=""
arg="$1"
while [ -n "$arg" ]; do
case "$arg" in
  -v*) verbose="yes" ;;
  -r*) remove="yes" ;;
  -u*) shift; user="$1" ;;
  -g*) shift; group="$1" ;;
  *) echo "Usage: $0 [-v[erbose]] [-r[emove_old]] [-u[ser] uid] [ -g[roup] gid]" ;;
esac
shift
arg="$1"
done

[ -n "$verbose" ] && echo "Scanning for new harddisks/partitions..." >&2
rm -f "$TMP"

if [ -n "$remove" ]; then
removeentries "$ADDEDBYKNOPPIX" /etc/fstab >"$TMP"
else
cat /etc/fstab >"$TMP"
fi

count=0
while read device mountpoint fstype relax; do
stringinfile "$device " "$TMP" || \
{ count="$((count + 1))"
   [ -d "$mountpoint" ] || mkdir -p "$mountpoint" 2>/dev/null
   options="noauto,users,exec"
   case "$fstype" in
    ntfs) options="${options},ro,umask=000" ;;
    vfat|msdos) options="${options},umask=000" ;;
    swap) options="defaults" ;;
   esac
   case "$fstype" in
   ntfs|vfat|msdos)
   [ -n "$user" ] && options="$options,uid=$user"
   [ -n "$group" ] && options="$options,gid=$group"
   ;;
   esac
   echo "$ADDEDBYKNOPPIX"
   echo "$device $mountpoint $fstype $options 0 0"; }
done >>"$TMP" <<EOT
$(scanpartitions)
EOT

[ -n "$verbose" ] && { [ "$count" -gt 0 ] && echo "Adding $count new partitions to /etc/fstab." >&2 || echo "No new partitions found." >&2; }
mv -f "$TMP" /etc/fstab

rm -f /var/run/rebuildfstab.pid

[ -n "$DISPLAY" ] && sleep 2

exit 0
发表于 2004-10-29 16:00:50 | 显示全部楼层
强。uuuuuuuuuuuuup
发表于 2004-10-29 18:29:13 | 显示全部楼层
谢谢ccwufu指点,我常用krusader。试验了fox和nautilus在utf8下挂载可以显示。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表