当前位置:足彩让球-互动百科 > 3d开奖结果彩吧助手吧

3d开奖结果彩吧助手吧

发布时间:2018年12月15日10时35分2秒

udev入门:管理设备事件Linux子系统!__财经头条注册登录新闻头条号新浪财经APP宏观经济A股港股美股基金理财黄金期货能源互联网金融房地产更多外汇管理消费科技互联网手机保险数码科普创业银行新三板其他udev入门:管理设备事件Linux子系统!udev入门:管理设备事件Linux子系统!2018年12月13日10:16唧歪数码语音播报缩小字体放大字体微博微信分享0腾讯QQQQ空间:SethKenlon译者:qhwdw创建这样一个脚本,当指定的设备插入时触发你的计算机去做一个指定动作。

ude是一个为你的计算机提供设备事件的Linux子系统。

通俗来讲就是,当你的计算机上插入了像网卡、外置硬盘(包括U盘)、鼠标、键盘、游戏操纵杆和手柄、DD-ROM驱动器等等设备时,代码能够检测到它们。

这样就能写出很多可能非常有用的实用程序,而它已经很好了,普通用户就可以写出脚本去做一些事情,比如当某个硬盘驱动器插入时,执行某个任务。

这篇文章教你去如何写一个由一些ude事件触发的ude脚本,比如插入了一个U盘。

当你理解了ude的工作原理,你就可以用它去做各种事情,比如当一个游戏手柄连接后加载一个指定的驱动程序,或者当你用于备份的驱动器连接后,自动执行备份工作。

一个初级的脚本使用ude的最佳方式是从一个小的代码块开始。

不要指望从一开始就写出完整的脚本,而是从最简单的确认ude触发了某些指定的事件开始。

对于你的脚本,依据你的目标,并不是在任何情况下都能保证你亲眼看到你的脚本运行结果的,因此需要在你的脚本日志中确认它成功触发了。

而日志文件通常放在/ar目录下,但那个目录通常是root用户的领地。

对于测试目的,可以使用/tmp,它可以被普通用户访问并且在重启动后就被清除了。

打开你喜欢的文本编辑器,然后输入下面的简单脚本:echo$date>/tmp/ude.log把这个脚本放在/usr/local/bin或缺省可运行路径的位置中。

将它命名为trigger.sh,并运行chmod+x授予可运行权限:这个脚本没有任何和ude有关的事情。

当它运行时,这个脚本将在文件/tmp/ude.log中放入当前的时间戳。

你可以自己测试一下这个脚本:TueOct3101:05:28NZDT2035接下来让ude去触发这个脚本。

唯一设备识别为了让你的脚本能够被一个设备事件触发,ude必须要知道在什么情况下调用该脚本。

在现实中,你可以通过它的颜色、制造商、以及插入到你的计算机这一事实来识别一个U盘。

而你的计算机,它需要一系列不同的标准。

ude通过序列号、制造商、以及提供商和产品号来识别设备。

由于现在你的ude脚本还处于它的生命周期的早期阶段,因此要尽可能地宽泛、非特定和包容。

换句话说就是,你希望首先去捕获尽可能多的有效ude事件来触发你的脚本。

使用udeadmmonitor命令你可以实时利用ude,并且可以看到当你插入不同设备时发生了什么。

用root权限试一试。

该监视函数输出接收到的事件:UDE:在规则处理之后发出ude事件KERNEL:内核发送ueent事件在udeadmmonitor命令运行时,插入一个U盘,你将看到各种信息在你的屏幕上滚动而出。

注意那一个ADD事件的事件类型。

这是你所需要的识别事件类型的一个好方法。

udeadmmonitor命令提供了许多很好的信息,但是你可以使用udeadminfo命令以更好看的格式来看到它,假如你知道你的U盘当前已经位于你的/de树。

如果不在这个树下,拔下它并重新插入,然后立即运行这个命令:举例来说,如果那个命令返回sdb:sdb1,说明内核已经给你的U盘分配了sdb卷标。

或者,你可以使用lsblk命令去查看所有连接到你的系统上的驱动器,包括它的大小和分区。

现在,你的驱动器已经处于你的文件系统中了,你可以使用下面的命令去查看那个设备的相关ude信息:这个命令将返回许多信息。

现在我们只关心信息中的第一个块。

你的任务是从ude的报告中找出能唯一标识那个设备的部分,然后当计算机检测到这些唯一属性时,告诉ude去触发你的脚本。

udeadminfo命令处理一个(由设备路径指定的)设备上的报告,接着“遍历”父级设备链。

对于找到的大多数设备,它以一个“键值对”格式输出所有可能的属性。

你可以写一个规则,从一个单个的父级设备属性上去匹配插入设备的属性。

lookingatdeice'/deices/000:000/blah/blah//block/sdb':KERNEL==''sdb''SUBSYSTEM==''block''DRIER==''''ATTR{ro}==''0''ATTR{size}==''125722368''ATTR{stat}==''276515375393''ATTR{range}==''16''ATTR{discard\_alignment}==''0''ATTR{remoable}==''1''ATTR{blah}==''blah''一个ude规则必须包含单个父级设备的一个属性。

父级属性是描述一个设备的最基本的东西,比如它是插入到一个物理端口的东西、或是一个容量多大的东西、或这是一个可移除的设备。

由于KERNEL卷标sdb可能会由于分配给在它之前插入的其它驱动器而发生变化,因此卷标并不是一个ude规则的父级属性的好选择。

但是,在做概念论证时你可以使用它。

一个事件的最佳候选者是SUBSYSTEM属性,它表示那个设备是一个“block”系统设备(也就是为什么我们要使用lsblk命令来列出设备的原因)。

在/etc/ud3d开奖结果彩吧助手吧e/rules.d目录中打开一个名为80-local.rules的文件,然后输入如下代码:SUBSYSTEM==''block'',ACTION==''add'',RUN+=''/usr/local/bin/trigger.sh''保存文件,拔下你的测试U盘,然后重启动系统。

等等,重启动Linux机器?理论上说,你只需要运行udeadmcontrol—reload即可,它将重新加载所有规则,但是在我们实验的现阶段,最好要排除可能影响实验结果的所有因素。

ude是非常复杂的,为了不让你躺在床上整晚都在思考为什么这个规则不能正常工作,是因为语法错误吗?还是应该重启动一下。

所以,不管POSIX自负地告诉你过什么,你都应该去重启动一下。

当你的系统重启动完毕之后,(使用Ctl+Alt+F3或类似快捷键)切换到一个文本控制台,并插入你的U盘。

如果你运行了一个最新的内核,当你插入U盘后你或许可以看到一大堆输出。

如果看到一个错误信息,比如“Couldnotexecute/usr/local/bin/trigger.sh”,或许是因为你忘了授予这个脚本可运行的权限。

否则你将看到的是,一个设备插入,它得到内核设备分配的一些东西,等等。

现在,见证奇迹的时刻到了。

TueOct3101:35:28NZDT2035如果你在/tmp/ude.log中看到了最新的日期和时间,那么说明ude已经成功触发了你的脚本。

改进规则做一些有用的事情现在的问题是使用的规则太通用了。

插入一个鼠标、一个U盘、或某个人的U盘都将盲目地触发这个脚本。

现在,我们开始专注于希望触发你的脚本的是确定的某个U盘。

实现上述目标的一种方式是使用提供商和产品。

你可以使用lsusb命令去得到这些数字。

Bus001Deice002:8087:0024SlackerCorp.HubBus002Deice002:8087:0024SlackerCorp.HubBus003Deice005:03f0:3307TyCoonCorp.Bus003Deice001:1d6b:0002LinuxFoundation2.0hubBus001Deice003:13d3:5165SBoNetworks在这个例子中,TyCoonCorp前面的03f0:3307就表示了提供商和产品的属性。

你也可以通过udeadminfo-a-n/de/sdb|grependor的输出来查看这些数字,但是从lsusb的输出中可以很容易地一眼找到这些数字。

现在,可以在你的脚本中包含这些属性了。

SUBSYSTEM==''block'',ATTRS{idendor}==''03f0'',ACTION==''add'',RUN+=''/usr/local/bin/thumb.sh''测试它(是的,为了确保不会有ude的影响因素,我们仍然建议先重新启动一下),它应该会像前面一样工作,现在,如果你插入一个不同公司制造的U盘(因为它们的提供商不一样)、或插入一个鼠标、或插入一个打印机,这个脚本将不会被触发。

继续添加新属性来进一步专注于你希望去触发你的脚本的那个唯一的U盘。

使用udeadminfo-a-n/de/sdb命令,你可以找出像提供商名字、序列号、或产品名这样的东西。

为了保证思路清晰,确保每次只添加一个新属性。

我们(和在网上看到的其他人)在ude规则中所遇到的大多数错误都是因为一次添加了太多的属性,而奇怪为什么不能正常工作了。

逐个测试属性是最安全的作法,这样可以确保ude能够成功识别到你的设备。

安全编写ude规则当插入一个驱动器后自动去做一些事情,将带来安全方面的担忧。

在我的机器上,我甚至都没有打开自动挂载功能,而基于本文的目的,当设备插入时,脚本和规则可以运行一些命令来做一些事情。

在这里需要记住两个事情。

聚焦于你的ude规则,当你真实地使用它们时,一旦让规则发挥作用将触发脚本。

执行一个脚本去盲目地复制数据到你的计算上,或从你的计算机上复制出数据,是一个很糟糕的主意,因为有可能会遇到一个人拿着和你相同品牌的U盘插入到你的机器上的情况。

不要在写了ude规则和脚本后忘记了它们的存在。

我知道哪个计算上有我的ude规则,这些机器一般是我的个人计算机,而不是那些我带着去开会或办公室工作的计算机。

一台计算机的“社交”程度越高,它就越不能有ude规则存在于它上面,因为它将潜在地导致我的数据最终可能会出现在某个人的设备、或某个人的数据中、或在我的设备上出现恶意程序。

换句话说就是,随着一个GNU系统提供了一个这么强大的功能,你的任务是小心地如何使用它们的强大功能。

如果你滥用它或不小心谨慎地使用它,最终将让你出问题,它非常可能会导致可怕的问题。

现实中的Ude现在,你可以确认你的脚本是由ude触发的,那么,可以将你的点转到脚本功能上了。

到目前为止,这个脚本是没有用的,它除了记录脚本已经运行过了这一事实外,再没有做的事情。

我使用ude去触发我的U盘的自动备份。

这个创意是,将我正在处理的文档的主副本保存在我的U盘上(因为我随身带着它,这样就可以随时处理它),并且在我每次将U盘插入到那台机器上时,这些主文档将备份回我的计算机上。

换句话说就是,我的计算机是备份驱动器,而产生的数据是移动的。

源代码是可用的,你可以随意查看attachup的代码,以进一步限制你的ude的测试示例。

虽然我使用ude最多的情况就是这个例子,但是ude能抓取很多的事件,像游戏手柄(当连接游戏手柄时,让系统去加载xboxdr模块)、摄像头、麦克风(当指定的麦克风连接时用于去设置输入),所以应该意识到,它能做的事情远比这个示例要多。

我的备份系统的一个简化版本是由两个命令组成的一个过程:SUBSYSTEM==''block'',ATTRS{idendor}==''03f0'',ACTION==''add'',SYMLINK+=''safety%n''SUBSYSTEM==''block'',ATTRS{idendor}==''03f0'',ACTION==''add'',RUN+=''/usr/local/bin/trigger.sh''第一行使用属性去检测我的U盘,这在前面已经讨论过了,接着在设备树中为我的U盘分配一个符号链接,给它分配的符号连接是safety%n。

这个%n是一个ude宏,它是内核分配给这个设备的任意数字,比如sdb1、sdb2、sdb3、等等。

因此%n应该是1或2或3。

这将在de树中创建一个符号链接,因此它不会干涉插入一个设备的正常过程。

这意味着,如果你在自动挂载设备的桌面环境中使用它,将不会出现问题。

第二行运行这个脚本。

我的备份脚本如下:mount/de/safety1/mnt/hdsleep2rsync-az/mnt/hd//home/seth/backups/&&umount/de/safety1这个脚本使用符号链接,这将避免出现ude命名导致的意外情况(例如,假设一个命名为DISK的U盘已经插入到我的计算机上,而我插入的其它U盘恰好名字也是DISK,那么第二个U盘的卷标将被命名为DISK_,这将导致我的脚本不会正常运行),它在我喜欢的挂载点/mnt/hd上挂载了safety1(驱动器的第一个分区)。

一旦safely挂载之后,它将使用rsync将驱动器备份到我的备份文件夹(我真实使用的脚本用的是rdiff-backup,而你可以使用任何一个你喜欢的自动备份解决方案)。

ude让你的设备你做主ude是一个非常灵活的系统,它可以让你用其它系统很少敢提供给用户的方式去定义规则和功能。

学习它,使用它,去享受POSIX的强大吧。

本文内容SlackermediaHandbook,它以GNUFreeDocumentationLicense1.3许可证授权使用。