ubuntu实现自动挂载u盘和SD卡

编写shell脚本

vim /home/usb-mount.sh
#!/bin/bashACTION=$1
DEVBASE=$2
DEVICE="/dev/${DEVBASE}"# See if this drive is already mounted
MOUNT_POINT=$(/bin/mount | /bin/grep ${DEVICE} | /usr/bin/awk '{ print $3 }')do_mount()
{if [[ -n ${MOUNT_POINT} ]]; then# Already mounted, exitexit 1fi# Get info for this drive: $ID_FS_LABEL, $ID_FS_UUID, and $ID_FS_TYPEeval $(/sbin/blkid -o udev ${DEVICE})# Figure out a mount point to useLABEL=${ID_FS_LABEL}if [[ -z "${LABEL}" ]]; thenLABEL=${DEVBASE}elif /bin/grep -q " /media/${LABEL} " /etc/mtab; then# Already in use, make a unique oneLABEL+="-${DEVBASE}"fiMOUNT_POINT="/media/${LABEL}"/bin/mkdir -p ${MOUNT_POINT}# Global mount optionsOPTS="rw,relatime"# File system type specific mount optionsif [[ ${ID_FS_TYPE} == "vfat" ]]; thenOPTS+=",users,gid=100,umask=000,shortname=mixed,utf8=1,flush"fi# 这里看需要使用sudo 和 <<EOF ,一些设备直接操作硬件SD卡槽需要root权限# 无需root权限 /bin/mount  ${DEVICE} ${MOUNT_POINT}   这样就行了sudo -S /bin/mount  ${DEVICE} ${MOUNT_POINT} << EOF
nle
EOF# 无需root权限 也可以用下面这一段代码# if ! echo "nle" | sudo /bin/mount -o ${OPTS} ${DEVICE} ${MOUNT_POINT}; then#     # Error during mount process: cleanup mountpoint#     /bin/rmdir ${MOUNT_POINT}#     exit 1# fi}do_unmount()
{if [[ -n ${MOUNT_POINT} ]]; then/bin/umount -l ${DEVICE}fi# Delete all empty dirs in /media that aren't being used as mount points. for f in /media/* ; doif [[ -n $(/usr/bin/find "$f" -maxdepth 0 -type d -empty) ]]; thenif ! /bin/grep -q " $f " /etc/mtab; then/bin/rmdir "$f"fifidone
}
case "${ACTION}" inadd)do_mount;;remove)do_unmount;;
esac
chmod 777 /home/usb-mount.sh

编写服务

vim /etc/systemd/system/usb-mount@.service
[Unit]
Description=Mount USB Drive on %i[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/homeusb-mount.sh add %i
ExecStop=/home/usb-mount.sh remove %i

编写udev规则

vim /etc/udev/rules.d/99-local.rules
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount@%k.service"
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/systemctl stop usb-mount@%k.service"
KERNEL=="sd[a-z]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount@%k.service"
KERNEL=="sd[a-z]", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/systemctl stop usb-mount@%k.service"# 这一段其实是 挂载mmc的SD卡或者TF卡的触发
KERNEL=="mmcblk[0-9]p[0-9]", SUBSYSTEMS=="mmc",ACTION=="add",  RUN+="/bin/systemctl start usb-mount@%k.service"
KERNEL=="mmcblk[0-9]p[0-9]", SUBSYSTEMS=="mmc",ACTION=="remove",  RUN+="/bin/systemctl stop usb-mount@%k.service"

更新配置

sudo udevadm control --reload-rules
sudo systemctl daemon-reload

结果

这样就可以,拔插U盘和SD卡,都可以自动挂载和卸载,并创建目录了。


其他问题

文件系统问题-exfat

挂载exfat文件,需要先安装一个组件

sudo apt-get install exfat-utils# 一些设备需要root权限才可以操作
sudo mount /dev/mmcblk1p1 /media/mmcblk1p1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust所有权

文章目录 什么是所有权Stack vs Heap所有权规则变量作用域String类型内存与分配所有权与函数 引用与借用可变引用悬垂引用引用的规则 切片字符串切片其他类型的切片 什么是所有权 什么是所有权 所有程序在运行时都必须管理其使用计算机内存的方式&#xff1a; 一些语言中具有垃…

Mr.Alright---MTK安卓13 抬手亮屏功能的逻辑

该功能在系统设置-显示-拿起设备时唤醒 alps\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\display\LiftToWakePreferenceController.javapublic boolean isAvailable() {SensorManager sensors (SensorManager) mContext.getSystemServ…

分库分表-ShardingSphere 4.x(2)

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

小知识(6) el-table表格选中行和回显行(vue3)

el-table表格选中行和回显行 官方文档说明 https://element-plus.org/zh-CN/component/table.html#table-%E6%96%B9%E6%B3%95 环境&#xff1a;vue3element-plus 选中行selection <el-table ref"baseTableRef" row-key"id" border :selection"tr…

SpringBoot整合XXL-JOB详解

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

12.4 组播鼠标批量执行

组播模式相比单播模式可以提高网络的效率和带宽利用率&#xff0c;因为组播数据包只需要发送一次&#xff0c;就可以被多个接收者接收&#xff0c;而不需要每个接收者都单独发送一份数据包。这在需要同时向多个接收者发送相同数据的场景下特别有用&#xff0c;如视频会议、在线…

【zookeeper】zk的ZAB原子广播协议

zk的ZAB原子广播协议来源于paxos算法[1]。paxos算法是一种基于消息传递的消息一致性算法&#xff0c;其特点是在可靠的通信环境下&#xff0c;可以保证消息的最终一致性。paxos要求每台server都持有自己的一个事务id的记录&#xff0c;这个事务id会每通过一个提议就自增加一&am…

矢量图形编辑软件 illustrator 2023 mac 中文软件特点

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软…

Ubuntu - sudo apt update 报错源问题解决方案

sudo apt update 报错…lease’ does not have a Release file. 反正就是觉得是网络的问题 尝试添加国内清华源、阿里源 不行 尝试DNS 为8.8.8.8&#xff0c;114.114.114.114 还是不行 解决方案&#xff1a;设置里面让 Ubuntu 找到适合自己的源 1、Settings -> About…

eval()函数的用法,计算字符串中的值,模板字符串进行计算

eval函数的定义&#xff1a; eval() 函数计算 JavaScript 字符串&#xff0c;并把它作为脚本代码来执行。 如果参数是一个表达式&#xff0c;eval() 函数将执行表达式。如果参数是Javascript语句&#xff0c;eval()将执行 Javascript 语句。 let a1 10; let a2 20; let calcu…

Android grantUriPermission的使用场景和方式

#grantUriPermission 作用 临时授权。 背景&#xff1a;FileProvider引入后应用之间想访问文件&#xff0c;都需要使用此接口。特别是两个独立的应用之间互通数据的时候。例如我们应用从图库获取文件的uri&#xff0c;显示在应用内的ImageView中。 #grantUriPermission 使用方…

分布式限流:Redis

目录 1:如何实现分布式限流 2:限流的几种类别 2.1:固定窗口限流 2.2:滑动窗口限流 2.3:漏桶限流 2.4:令牌桶限流 3:实现分布式限流:Redis 3.1:引入Redisson的依赖包 3.2:初始化Redisson 3.3:创建Redisson的限流类 1:如何实现分布式限流 1:把统计用户的使用频率等这些…

Spark简单回顾

星光下的赶路人star的个人主页 大鹏一日同风起&#xff0c;扶摇直上九万里 文章目录 1、Spark1.1 Spark入门1.1.1 Spark部署模式1.1.2 常用端口 1.2 SparkCore1.2.1 RDD不可变和五大属性1.2.2 RDD的弹性1.2.3 cache和Checkpoint的区别1.2.4 算子 1.3 SparkSQL1.4 内核1.4.1提交…

lv8 嵌入式开发-网络编程开发 20 域名解析与http服务实现原理

目录 1 域名解析 2 如何实现万维网服务器&#xff1f; 2.1 HTTP 的操作过程 2.2 万维网服务器实现 1 域名解析 域名解析gethostbyname函数 主机结构在 <netdb.h> 中定义如下&#xff1a; struct hostent {char *h_name; /* 官方域名 */char **h_alias…

hadoop伪分布式安装部署

首先jdk安装完毕 jdk安装文档参考&#xff1a; Linux 环境下安装JDK1.8并配置环境变量_linux安装jdk1.8并配置环境变量_Xi-Yuan的博客-CSDN博客 准备好hadoop的安装包 我的下载地址如下&#xff1a; We Transfer Gratuit. Envoi scuris de gros fichiers. 将hadoop包上传到随…

Redis数据类型——hash类型的概念及操作

1.hash类型介绍 可以理解为redis中的一个小型redis 2.v 3.hash数据类型的扩展操作 4.hash类型数据操作的注意事项

常用docker命令 docker_cmd_sheet

查看所有docker 容器 docker ps 查看 特定docker容器 比如con1 docker ps | grep con1 查看镜像 docker images 拉取镜像 docker pull imageXXX 打标签 docker tag imageXXX:1.4.0 镜像名冒号tag 按照docker-compose.yml 启动容器&#xff0c;在有docker-compose…

[T]一些基本的

#数组 ##定义:一组数 int a[100]; //一维 int b[10][10];//二维 int x[10]{0,1,2,3}//从下标为0开始存 int y[2][2]{1,2,3,4}; for(int i1;i<3;i)printf("%d ",x[i]);//一维输出 for(int i1;i<2;i) {for(int j1;j<2;j){printf("%d ",y[i][j]);…

WPF中的绑定知识详解(含案例源码分享)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

JSONP的安全性较差,那么在跨域情况下,有没有其他更安全的替代方案呢?

在跨域情况下&#xff0c;为了保证安全性&#xff0c;有几种更安全的替代方案可以考虑使用&#xff1a; 1&#xff1a;CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff1a; CORS 是一种现代化的跨域解决方案&#xff0c;通过在服务器端设置响应头来控制跨…