C 如何在Linux中构建自动运行程序

C 如何在Linux中构建自动运行程序,c,programming-languages,C,Programming Languages,我想创建一个应该自动运行的程序。当我插入pendrive时,它将在终端执行 如何用C语言编程?您可以跟踪/var/log/messages以查找插入消息。它们会因设备而异,但通常看起来有点像这样: [183532.373402] sda: sda1 [196936.098729] usb 1-3: USB disconnect, address 3 [196936.440424] usb 1-3: new high speed USB device using ehci_hcd and add

我想创建一个应该自动运行的程序。当我插入pendrive时,它将在终端执行


如何用C语言编程?

您可以跟踪/var/log/messages以查找插入消息。它们会因设备而异,但通常看起来有点像这样:

[183532.373402]  sda: sda1
[196936.098729] usb 1-3: USB disconnect, address 3
[196936.440424] usb 1-3: new high speed USB device using ehci_hcd and address 6
[196936.586043] usb 1-3: New USB device found, idVendor=0781, idProduct=9219
[196936.586052] usb 1-3: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[196936.586057] usb 1-3: Product: ImageMate CF Reader/Writer
[196936.586061] usb 1-3: Manufacturer: SanDisk 
[196936.586065] usb 1-3: SerialNumber: 0302855445
[196936.586286] usb 1-3: configuration #1 chosen from 1 choice
[196936.592552] scsi1 : SCSI emulation for USB Mass Storage devices
[196936.593074] usb-storage: device found at 6
[196936.593078] usb-storage: waiting for device to settle before scanning
[196941.592515] usb-storage: device scan complete
剩下的只是一个烟雾。

怎么样


您可以创建一个来检测pendrive插入,并在终端中执行您想要的操作。

如果我没弄错,您指的是类似Windows'
AUTORUN.INF
,不是吗


在这种情况下,我想你很难找到你想要的东西。这通常被认为是危险的,因为你可以运行任何你想要的,包括病毒和其他恶意软件

我认为KDE在插入设备的根目录中查找
autorun.sh
,但我不确定。

当您插入USB(或许多其他类型的可移动)存储设备时,内核在识别出它是什么后,会通知一个名为udevd的程序。udevd查看一些规则(存储在/etc/udev/rules.d/、/lib/udev/rules.d/、或/dev/.udev/rules.d/下的文件中)以查找与新设备匹配的规则,并执行与之匹配的规则。可移动块设备的规则之一是运行一个程序在该驱动器上装载文件系统(可能创建装载点/目录)

Gnome、KDE或类似的桌面界面通过D-BUS得到通知,新设备已经安装和安装(这里的确切步骤我不是100%)

无论如何,为了在新插入的驱动器上运行程序,您需要一个已经在运行的程序来为您执行。您可以尝试更改udev规则或装载新驱动器的脚本来为您执行此操作,或者编写一个新的守护程序,以通知gnome或KDE等桌面管理系统运行它的方式来获得通知,但我不知道是否已经有了这样的功能。这样做是一种安全风险,因为它允许任何可以访问USB(或类似)插头的人在计算机上运行任何程序。我可以在咖啡馆里走到使用笔记本电脑的人面前,在他们不同意的情况下很快在他们的电脑上运行程序。或者,如果我给某人一个USB驱动器,说“上面有我的度假照片”,他们把它放在他们的Linux计算机上,驱动器上的恶意自动运行程序将在没有他们同意的情况下运行

如果这些功能已经是某些Linux发行版的一部分(可能是,我不知道),那么在运行之前肯定需要用户同意,但即使这样,它也必须限于使用该用户的UID和GID运行(忽略更复杂的SELinux安全性的可能性),并且有一个对用户来说是安全的工作目录。这完全忽略了移动文件系统的所有权混淆和SUID位的问题


这可能不是解决您试图解决的任何问题的正确方法。

什么发行版?你想让它在所有发行版上运行吗?