我注意到 Linux 发行版通常有一个 /dev/disk/by-label 目录,但情况并非总是如此(例如,CirrOS Linux 测试映像没有)。
在 Linux 系统上正确填充 /dev/disk/by-label 目录需要什么?
如果无法读取基本的 SQLite DB 文件(导致 I/O 错误),我想自动测试某个软件是否按预期做出反应。这正是几天前发生在客户身上的事情。我们手动修复了它,但现在我想创建自动代码来修复它,并且需要访问损坏的文件来测试它。
由于 Unix 中的一切都是一个文件,我怀疑可能有一个特殊的文件,当人们试图读取它时(例如在 /dev 中),它总是会导致 I/O 错误。
一些类似的文件(imo)是:
/dev/full 如果您尝试编写它,它总是显示“设备上没有剩余空间”/dev/null 和 /dev/zero所以我认为必须有一个这样的文件(但还没有找到)。
有谁知道这样的文件或任何其他方法可以让我获得所需的结果(故意错误的分区映像,使用 LD_PRELOAD 围绕 open() 的包装器,...)?
去这里的最佳方式是什么?
我写这个规则是为了测试目的:
SUBSYSTEMS=="usb", ATTRS{manufacturer}=="Kingston", ATTRS{serial}=="001CC0EC34A2BB318709004B", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1642", SYMLINK+="pen", NAME="pendrak"
Run Code Online (Sandbox Code Playgroud)
基于以下信息:
# udevadm info --name=/dev/sdb --attribute-walk
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host2/target2:0:0/2:0:0:0/block/sdb':
KERNEL=="sdb"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="30299520"
ATTR{stat}==" 419 …Run Code Online (Sandbox Code Playgroud) 我将红外接收器连接到 USB 端口......(dmesg 的最后一行告诉设备文件)
$ dmesg
[10496.596063] usb 7-2: new full-speed USB device number 2 using uhci_hcd
[10496.751112] usb 7-2: New USB device found, idVendor=0df7, idProduct=0620
[10496.751117] usb 7-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[10496.751120] usb 7-2: Product: USB-Serial Controller
[10496.751124] usb 7-2: Manufacturer: Prolific Technology Inc.
[10496.787441] usbcore: registered new interface driver usbserial
[10496.787467] usbcore: registered new interface driver usbserial_generic
[10496.787483] usbserial: USB Serial support registered for generic
[10496.795104] usbcore: registered new interface driver pl2303
[10496.795129] usbserial: …Run Code Online (Sandbox Code Playgroud) Posix 是否需要任何设备?例如,/dev/urandom,/dev/zero或/dev/null?
我怀疑不是因为非 *nix 操作系统,而是想要求完整性。
我想绑定/解除绑定我的 USB 设备 - 无线适配器。
echo -n "1-1:1.0" > /sys/bus/usb/drivers/ub/unbind
Run Code Online (Sandbox Code Playgroud)
所以为了能够做到这一点,我需要总线 ID。lsusb打印出以下内容:
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 148f:2573 Ralink Technology, Corp. RT2501/RT2573 Wireless Adapter
Run Code Online (Sandbox Code Playgroud)
并且lsusb -t:
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/3p, 480M
|__ Port …Run Code Online (Sandbox Code Playgroud) 我很好奇硬件如何与操作系统交互并看到这篇文章:键盘输入和文本输出如何工作?
似乎很多魔法都发生在 /dev/input 目录中。我决定看看我自己的操作系统(Ubuntu 16.10),看看我能找到什么。所有这些文件都列为 0 字节,当我这样做时,我会sudo cat mouse0 | hexdump -C得到大量如下所示的十六进制数据:
00000000 b3 82 8a 58 00 00 00 00 53 74 09 00 00 00 00 00 |...X....St......|
00000010 01 00 1c 00 00 00 00 00 b3 82 8a 58 00 00 00 00 |...........X....|
00000020 53 74 09 00 00 00 00 00 00 00 00 00 00 00 00 00 |St..............|
00000030 b6 82 8a 58 00 00 00 00 06 56 …Run Code Online (Sandbox Code Playgroud) 我没有访问netcat或nmap因此我试图使用bash和/dev/udp/特殊文件到测试端口。
我可以做这样的事情:
echo "" > /dev/udp/example.com/8000
Run Code Online (Sandbox Code Playgroud)
但在使用 UDP 时$?总是如此0。我假设那是因为那是echo ""命令的返回值正确吗?
我基本上是在尝试复制我能做的事情,nmap并且netcat:
nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'
Run Code Online (Sandbox Code Playgroud)
我将如何做到这一点/dev/udp?
我试图阐明哪种是在 Linux 中与设备交互的最有用(就功能而言)方法。据我了解,设备文件只公开了部分功能(块设备中的地址块,字符设备中的流等......)。 ioctl(2)似乎是最常用的,但有人说它不安全,等等。
一些好的文章或其他相关的指针将受到欢迎。
所以我只是想知道我对 udev 的解释及其工作原理是否正确,我的理解是否正确,请告诉我。
所以我对udev的理解是它是Linux 上的动态设备管理器,作为守护进程运行。
这基本上是我目前的理解,如果我错了,请纠正我,并告诉我额外的信息。