linux使用udev配置U盤自動掛載

做者:三十三重天html

博客:http://www.zhouhuibo.clublinux

經過學習和分享的過程,將本身工做中的問題和技術總結輸出,但願菜鳥和老鳥都能經過本身的文章收穫新的知識,並付諸實施。程序員

udev介紹

來源:https://linux.cn/article-10329-1.html微信

建立這樣一個腳本,當指定的設備插入時觸發你的計算機去作一個指定動做。編輯器

udev 是一個爲你的計算機提供設備事件的 Linux 子系統。通俗來說就是,當你的計算機上插入了像網卡、外置硬盤(包括 U 盤)、鼠標、鍵盤、遊戲操縱桿和手柄、DVD-ROM 驅動器等等設備時,代碼可以檢測到它們。這樣就能寫出不少可能很是有用的實用程序,而它已經很好了,普通用戶就能夠寫出腳本去作一些事情,好比當某個硬盤驅動器插入時,執行某個任務。工具

使用udev進行一個簡單的配置

使用udev進行一個簡單配置,配置後的實際表現爲:當U盤插入機器時,向系統/tmp目錄生成一個寫入當前系統時間的文本文件學習

執行腳本

cd /tmp

打開你喜歡的文本編輯器,而後輸入下面的簡單腳本:測試

echo `date` >> /tmp/trigger.log

向臨時目錄寫入當前時間,腳本名稱保存爲trigger.sh.並執行並運行 chmod +x 授予可運行權限ui

接下來就是經過udev的方式去觸發此腳本url

udev腳本

使用 udevadm monitor 命令你能夠實時利用 udev,而且能夠看到當你插入不一樣設備時發生了什麼。用 root 權限試一試。

$ su
# udevadm monitor

udevadm monitor 命令提供了許多很好的信息,可是你可使用 udevadm info 命令以更好看的格式來看到。你也能夠經過fdisk -l命令查看當前已經分配的卷標。

udev的規則都保存在/etc/udev/rules.d目錄下,經過命令cd /etc/udev/rules.d`切換置當前目錄。

新增一個測試規則,規則後綴使用.rules纔可以被程序識別。

使用編輯器寫入以下內容,保存爲001.rules

SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/trigger.sh"

文件的內容解釋爲:當有一個usb設備新增的時候,執行定義的腳本文件。固然你也能夠經過更多的個性化配置讓觸發的範圍更加精細話,例如能夠指定某個品牌的設備,或者單獨的某個U盤。這些能夠經過百度查詢到內容,也能夠在上門的連接中得到內容。

啓動配置規則

udevadm control —reload

此時能夠經過插入u盤,查看系統盤符下是否會生成trigger文件,幷包含當前日期。若是不行,可能有倆個問題

一、腳本文件須要設置在/etc/udev/rules.d/目錄下,我也不知道 爲何,當腳本放置在當前文件中就能夠執行,若是有知道的請在評論區告訴我

二、有些時候重置配置規則沒用,使用重啓

實戰

配置u盤插入自動掛載

執行過程:使用udev配置規則,規則是當檢測到u盤插入時執行一段腳本【自動掛載腳本】,當u盤拔出時也執行一段腳本【自動卸載u盤腳本】。在實際使用過程當中能夠將掛載和卸載腳本放置在一箇中,根據參數進行區分。首先開始配置規則

udev規則文件

010.rules,放置在/etc/udev/rules.d 目錄下

###########---USB---################
#----------------------------------#
KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh usb %k"
KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh usb %k", OPTIONS="last_rule"
##########---CF card---#############
#----------------------------------#
KERNEL=="hd[a-z]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh cf %k"
KERNEL=="hd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh cf %k", OPTIONS="last_rule"
#########-----SD------##############
#----------------------------------#
KERNEL=="mmcblk[0-9]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh sd %k" 
KERNEL=="mmcblk[0-9]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh sd %k", OPTIONS="last_rule"

而後編寫執行腳本內容[zhiyuan_udev.sh] ,也放置在相同的目錄/etc/udev/rules.d中,放在其餘的目錄就算給了777的執行權限也沒法執行

#! /bin/sh

#通常U盤插入以後會在/dev下產生一個sda和一個sda1節點,
#可是隻有sda1是能夠掛載的。sda是設備,sda1是分區
#有的U盤只會產生一個/dev/sda節點,此時就應該掛載sda。
#這個腳本不區分設備節點和分區節點,一概先掛載,
#可是掛載失敗以後會當即清除創建的掛載點
#-------------------------------------------------#
#磁盤種類		設備節點			設備分區節點
#U盤			sd[a-z]				sd[a-z][0-9]
#SD卡			mmcblk[0-9]			mmcblk[0-9]p[0-9]
#CF卡			hd[a-z]				hd[a-z][0-9]
#-------------------------------------------------#
#說明:在這個腳本中的能夠把udev腳本的ACTION做爲環境變量來用,
#可是沒法使用KERNEL
#-------------------------------------------------#
if [ $# -ne 2 ] ; then	#輸入參數必須是兩個
	exit 1
fi

MNT_PATH=/media/		#掛載移動設備的目錄
#DEV_PRE=$1				#參數1:掛載點的前綴
DEV_NAME=$2				#參數2:設備在/dev下的名字
FS_TYPE=vfat			#設備的文件系統類型

if [ $ACTION == "add" ] ; then
#設備插入
#	echo "=======add==========" >> /media/udev.txt
	wr /bin/mkdir -p $MNT_PATH$DEV_NAME
	/bin/mount /dev/$DEV_NAME $MNT_PATH$DEV_NAME >& /dev/null
	if [[ $? -ne 0 ]] ; then #mount失敗則清除剛剛創建的目錄
#		echo "mount $DEV_NAME fialed" >> /media/udev.txt
		wr /bin/rmdir $MNT_PATH$DEV_NAME	
	fi
elif [ $ACTION == "remove" ] ; then 
#	echo "=======remove==========" >> /media/udev.txt
#設備移除
	if [[ -e  $MNT_PATH$DEV_NAME ]] ; then 
		/bin/umount -l  $MNT_PATH$DEV_NAME >& /dev/null
		wr /bin/rmdir  $MNT_PATH$DEV_NAME
	fi
fi

exit 0

END

歡迎關注公衆號 程序員工具集 👍👍 致力於分享優秀的開源項目、學習資源 、經常使用工具

回覆關鍵詞「關注禮包」,送你一份最全的程序員技能圖譜。

回覆關鍵詞"wx"添加我的微信,勾搭做者,歡迎來聊^-^。

相關文章
相關標籤/搜索