⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dasd.agent

📁 这是关于usb等方面的热拔插源代码
💻 AGENT
字号:
#!/bin/bash## Dasd hotplug policy agent for Linux 2.4 kernels## Copyright (c) 2002 SuSE Linux AG, Nuremberg## the GNU Public License applies## Author:  Susanne Oberhauser <froh@suse.de>, 2002### Kernel DASD hotplug params include:##   s390 device address: ${DEVNO?Bad DASD invocation: \$DEVNO is not set}#   Linux major and minor: ${MAJOR?Bad DASD invocation: \$MAJOR is not set}: ${MINOR?Bad DASD invocation: \$MINOR is not set}#   Linux device name (dasda, ...): ${DASDNAME?Bad DASD invocation: \$DASDNAME is not set}#   Hotplug event type (add, remove, partchk or partremove): ${ACTION?Bad DASD invocation: \$ACTION is not set}## they are generated here: /usr/src/linux/drivers/s390/block/dasd.c### HISTORY:## 2002-08-06 Susanne Oberhauser <froh@suse.de>#            created scriptcd /etc/hotplug. hotplug.functionstest -d /dev/dasd -a -d /dev/labels || {    debug_mesg "/etc/init.d/boot.dasd_devfs_compat is not started.ignoring $ACTION  $DEVNO  $MAJOR $MINOR  $DASDNAME"    exit 0}mesg "$ACTION  $DEVNO  $MAJOR $MINOR  $DASDNAME"test -r dasd.permissions && . dasd.permissions || {    mesg DASD permission handling not found    exit 1}# to preserve the script from doing anything real, call it with# CONDOM=echo: ${CONDOM=}# abort on error or unset variables:set -o errexitset -o nounsetfunction die {    mesg "$*"    exit 1}function create_node ## environment:#  TYPE (char, block)#  NODE (filename including any leading directories)#  MAJOR, MINOR#  OWNER (user.group or unset, which means)#  PERMISSIONS (symbolic or unset, which means minimal settings)## when this function exits sucessfully,# $NODE exists as $TYPE-device with $MAJOR and $MINOR, belongs to# $OWNER and has $PERMISSIONS.{    debug_mesg "create_node  $PERMISSIONS $OWNER $MAJOR $MINOR $TYPE $NODE"    case "$TYPE" in	block|b) TYPE=b;;	char|c)  TYPE=c;;	*) die "create_node: wrong TYPE given"    esac    # Don't remove the node, if it has the correct major/minor    if test -e "$NODE"    then	# if the file exists, check that it is a $TYPE device with the	# correct major and minor	if test -$TYPE "$NODE"	then	    ls -l $NODE | {		read existing_mode existing_nlink \		    existing_user existing_group \		    existing_major existing_minor \		    dummy		if test "$existing_major" != "$MAJOR," -o "$existing_minor" != "$MINOR"		then		    # create a new node using the existing		    # permissions, ownership and timestamp		    $CONDOM rm -f $NODE		    $CONDOM mknod --mode="a="  $NODE $TYPE $MAJOR $MINOR		fi	    }	else            # create a new node using the existing            # permissions, ownership and timestamp	    $CONDOM rm -f $NODE	    $CONDOM mknod --mode="a="  $NODE $TYPE $MAJOR $MINOR	fi    else	# TODO?: this does not support missing directories, yet:	# if the node does not exist yet, create it	$CONDOM mknod --mode="a="  $NODE $TYPE $MAJOR $MINOR    fi    # always set ownership and permissions    $CONDOM chown $OWNER       $NODE    $CONDOM chmod $PERMISSIONS $NODE}function create_symlink# uses these from the environment:# LINK# TARGET# OWNER (user.group) of the link.  Directory components belong to root.root# CONDOM{    debug_mesg "create_symlink $OWNER  $LINK -> $TARGET"    # first create the directory if necessary:    local link_dir=$(dirname "$LINK")    test -d "$link_dir" || {	test -e "$link_dir" && die "$link_dir exists but is not a directory:$(ls -l $link_dir)"    } || {	$CONDOM install --directory --owner=root --group=root "$link_dir"    }    test -e "$LINK" && rm -rf "$LINK"    $CONDOM ln -snf "$TARGET" "$LINK"    $CONDOM chown   "$OWNER"  "$LINK"}case $ACTION in    add)	export NODE=/dev/$DASDNAME	export TYPE=block	# get $OWNER and $PERMISSIONS	MISC=$DEVNO \	    dasd_permissions	create_node	LINK=/dev/dasd/$DEVNO/device TARGET=$NODE \	    create_symlink	LINK=/dev/dasd/$DEVNO/disk TARGET=$NODE \	    create_symlink	;;    remove)	$CONDOM rm -f /dev/$DASDNAME*	VOLSER=$(ls -l /dev/dasd/$DEVNO/VOLSER | sed -e 's,.*-> ,,')	$CONDOM rm -rf /dev/dasd/$DEVNO	test "${VOLSER}" != "" && $CONDOM rm -f "$VOLSER"	;;    partchk)	export NODE=/dev/$DASDNAME	export VOLSER=$(dasdview -j -f $NODE | sed -e 's,[[:space:]]\+$,,')	CHECKED_VOLSER=$(	    echo "$VOLSER" |	    sed -e '		# spaces, slashes, asterisks and questionmarks are no good for filenames		s/[ /*?]/  space, slash, asterisk or questionmark /g		# nor are nonprinting characters		s/[^[:print:]]/ nonprinting characters /g		# "." and ".." are evil as well		s/^\.$/ dot /		s/^\.\.$/ dot dot /		'	    )	if test "$VOLSER" != "$CHECKED_VOLSER"        then		mesg "VOLSER label of $NODE is no legal filename: <$VOLSER> ->  <$CHECKED_VOLSER> ignoring it."		VOLSER=""	fi			# If the volser label has changed, this is also notified as a	# 'partchk' action.  remove the old volser if present and	# different from the new one.	# The VOLSER symlink in the DEVNO directory points to the	# VOLSER file for deletion of the VOLSER label after device	# removal (the device is no longer available then to query the	# VOLSER from there).	test -e /dev/dasd/$DEVNO/VOLSER && {	    OLD_VOLSER="$(ls -l /dev/dasd/$DEVNO/VOLSER | sed -e 's,.*-> ,,')"	    test "$OLD_VOLSER" = "/dev/labels/$VOLSER" || {		$CONDOM rm -f "$OLD_VOLSER"	    }	}	# Get ownership and permissions for the nodes and ownership	# for the symlinks:	MISC=$VOLSER-$DEVNO \	    dasd_permissions	# add the volser symlink if no other dasd uses that volser yet.	test "$VOLSER" != "" -a ! -e /dev/labels/"$VOLSER" && {	    LINK=/dev/labels/"$VOLSER" TARGET=../dasd/$DEVNO \		create_symlink	    TARGET=/dev/labels/"$VOLSER" LINK=/dev/dasd/$DEVNO/VOLSER \		create_symlink	}	# TODO: for the time being, we ignore /proc/partitions and	# create all candidate partitions	export TYPE=block	for partition in 1 2 3	  do	  NODE=/dev/$DASDNAME$partition	  # get ownership and permissions for the partition	  MISC="$VOLSER"-$DEVNO-$partition dasd_permissions	  MINOR=$((MINOR + partition)) create_node	  LINK=/dev/dasd/$DEVNO/part$partition TARGET=$NODE \	      create_symlink	done	;;    partremove)	$CONDOM rm -f /dev/$DASDNAME[123]	$CONDOM rm -rf /dev/dasd/$DEVNO/part*	;;    *)	mesg DASD $ACTION event not supported	exit 1 ;;esac

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -