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

📄 usb.sh

📁 BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版
💻 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 + -