📄 usb.sh
字号:
#!/bin/bash# ==> usb.sh# ==> Script for mounting and installing pen/keychain USB storage devices.# ==> Runs as root at system startup (see below).# ==># ==> Newer Linux distros (2004 or later) autodetect# ==> and install USB pen drives, and therefore don't need this script.# ==> But, it's still instructive. # This code is free software covered by GNU GPL license version 2 or above.# Please refer to http://www.gnu.org/ for the full license text.## Some code lifted from usb-mount by Michael Hamilton's usb-mount (LGPL)#+ see http://users.actrix.co.nz/michael/usbmount.html## INSTALL# -------# Put this in /etc/hotplug/usb/diskonkey.# Then look in /etc/hotplug/usb.distmap, and copy all usb-storage entries#+ into /etc/hotplug/usb.usermap, substituting "usb-storage" for "diskonkey".# Otherwise this code is only run during the kernel module invocation/removal#+ (at least in my tests), which defeats the purpose.## TODO# ----# Handle more than one diskonkey device at one time (e.g. /dev/diskonkey1#+ and /mnt/diskonkey1), etc. The biggest problem here is the handling in#+ devlabel, which I haven't yet tried.## AUTHOR and SUPPORT# ------------------# Konstantin Riabitsev, <icon linux duke edu>.# Send any problem reports to my email address at the moment.## ==> Comments added by ABS Guide author.SYMLINKDEV=/dev/diskonkeyMOUNTPOINT=/mnt/diskonkeyDEVLABEL=/sbin/devlabelDEVLABELCONFIG=/etc/sysconfig/devlabelIAM=$0### Functions lifted near-verbatim from usb-mount code.#function allAttachedScsiUsb { find /proc/scsi/ -path '/proc/scsi/usb-storage*' -type f | xargs grep -l 'Attached: Yes'}function scsiDevFromScsiUsb { echo $1 | awk -F"[-/]" '{ n=$(NF-1); print "/dev/sd" substr("abcdefghijklmnopqrstuvwxyz", n+1, 1) }'}if [ "${ACTION}" = "add" ] && [ -f "${DEVICE}" ]; then ## # lifted from usbcam code. # if [ -f /var/run/console.lock ]; then CONSOLEOWNER=`cat /var/run/console.lock` elif [ -f /var/lock/console.lock ]; then CONSOLEOWNER=`cat /var/lock/console.lock` else CONSOLEOWNER= fi for procEntry in $(allAttachedScsiUsb); do scsiDev=$(scsiDevFromScsiUsb $procEntry) # Some bug with usb-storage? # Partitions are not in /proc/partitions until they are accessed #+ somehow. /sbin/fdisk -l $scsiDev >/dev/null ## # Most devices have partitioning info, so the data would be on #+ /dev/sd?1. However, some stupider ones don't have any partitioning #+ and use the entire device for data storage. This tries to #+ guess semi-intelligently if we have a /dev/sd?1 and if not, then #+ it uses the entire device and hopes for the better. # if grep -q `basename $scsiDev`1 /proc/partitions; then part="$scsiDev""1" else part=$scsiDev fi ## # Change ownership of the partition to the console user so they can #+ mount it. # if [ ! -z "$CONSOLEOWNER" ]; then chown $CONSOLEOWNER:disk $part fi ## # This checks if we already have this UUID defined with devlabel. # If not, it then adds the device to the list. # prodid=`$DEVLABEL printid -d $part` if ! grep -q $prodid $DEVLABELCONFIG; then # cross our fingers and hope it works $DEVLABEL add -d $part -s $SYMLINKDEV 2>/dev/null fi ## # Check if the mount point exists and create if it doesn't. # if [ ! -e $MOUNTPOINT ]; then mkdir -p $MOUNTPOINT fi ## # Take care of /etc/fstab so mounting is easy. # if ! grep -q "^$SYMLINKDEV" /etc/fstab; then # Add an fstab entry echo -e \ "$SYMLINKDEV\t\t$MOUNTPOINT\t\tauto\tnoauto,owner,kudzu 0 0" \ >> /etc/fstab fi done if [ ! -z "$REMOVER" ]; then ## # Make sure this script is triggered on device removal. # mkdir -p `dirname $REMOVER` ln -s $IAM $REMOVER fielif [ "${ACTION}" = "remove" ]; then ## # If the device is mounted, unmount it cleanly. # if grep -q "$MOUNTPOINT" /etc/mtab; then # unmount cleanly umount -l $MOUNTPOINT fi ## # Remove it from /etc/fstab if it's there. # if grep -q "^$SYMLINKDEV" /etc/fstab; then grep -v "^$SYMLINKDEV" /etc/fstab > /etc/.fstab.new mv -f /etc/.fstab.new /etc/fstab fifiexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -