我有一个运行 OpenWrt(一种用于路由器的嵌入式 Linux)的小型家用路由器。它有五个以太网端口,一个标记为 WAN,四个标记为 LAN 1 到 4。它具有以下定义的网络接口ifconfig:
root@TIBERIUS: ~ > ifconfig | grep Link
br-lan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
eth0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan1 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan2 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan3 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan4 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lo Link encap:Local Loopback
pppoe-wan Link encap:Point-to-Point Protocol
wan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
wlan0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
Run Code Online (Sandbox Code Playgroud)
如您所见,设备数量众多,但只有一个 MAC 地址。
我知道其中一些设备是虚拟的。让我们抛开lo和pppoe-wan,这是回环设备和我的PPPoE连接。但是对于其余的,我应该如何分辨它们是物理的还是虚拟的?我知道有一个命名约定来标记虚拟接口,如eth0.1,但显然这里没有遵守。让我们看看其中ifconfig两个接口的输出:
root@TIBERIUS: ~ > …Run Code Online (Sandbox Code Playgroud) 我需要能够经常记录鼠标移动(例如每 0.2 秒),并将它们放在坐标表示中而不是差异中。
我找到了以下脚本:
#!/bin/bash
while :
do
cat /dev/input/mice | read -n 1
date
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
但它似乎没有向终端打印任何内容(或者可能都是胡言乱语)。其他讨论表明 /dev/input/mice 已被弃用。最重要的是, /dev/input/mice 实际上不会以友好的格式保存数据。
我是否必须手动进行转换(从 /dev/input 文件中的格式),或者是否有用于此的 API?
我发现 nvram 用于 BIOS 刷新/备份的信息,并且它包含一些与 bios 相关的数据。会cat /dev/random > /dev/nvram永久砖电脑吗?我很想输入这个命令,但不知何故,我觉得这对我的机器来说不会很好,所以我想我想知道玩这个设备有多危险。
在 MacBook 2017 上禁用 SIP 的情况下安装 Ubuntu - 0 个问题,几秒钟内启动。
我一直在构建它并在尝试使 WiFi 工作时产生了问题。在某个时候(很晚了)发生了 3 件事的组合:
这些是项目:
[ +0.001007] input: Apple Inc. iBridge as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2/0003:05AC:8600.0001/input/input7
[ +0.057765] hid-generic 0003:05AC:8600.0001: input,hidraw0: USB HID v1.01 Keyboard [Apple Inc. iBridge] on usb-0000:00:14.0-3/input2
[ +0.000196] hid-generic 0003:05AC:8600.0002: hiddev0,hidraw1: USB HID v1.01 Device [Apple Inc. iBridge] on usb-0000:00:14.0-3/input3
[ +0.000230] PKCS#7 signature not signed with a trusted key
[ +0.000002] PKCS#7 signature not signed with a trusted …Run Code Online (Sandbox Code Playgroud) 在 linux 上,有一个/dev/root设备节点。这将是与另一个设备节点相同的块设备,例如/dev/sdaX. /dev/root在这种情况下,如何解析“真实”设备节点,以便向用户显示合理的设备名称?
比如我在解析/proc/mounts.
我正在寻找适用于 shell/python 脚本但不适用于 C 的解决方案。
/dev当插入特定板时,我有设备文件出现。对它的读写操作工作得很好,但为了打开设备文件,程序需要以 root 权限执行。有什么办法可以让所有非 root 用户打开这个特定的设备文件而不必使用 sudo?
这里的大多数答案[ 1 ] [ 2 ] [ 3 ]使用单个尖括号重定向到 /dev/null,如下所示:
command > /dev/null
Run Code Online (Sandbox Code Playgroud)
但附加到 /dev/null 也有效:
command >> /dev/null
Run Code Online (Sandbox Code Playgroud)
除了额外的字符,有什么理由不这样做吗?这些中的任何一个对 /dev/null 的底层实现“更好”吗?
编辑:
在开放式(2)手册页说lseek的是每次写在附加模式文件之前名为:
O_APPEND
文件以追加模式打开。在每次 write(2) 之前,文件偏移量位于文件末尾,就像使用 lseek(2) 一样。文件偏移的修改和写入操作作为单个原子步骤执行。
这让我认为使用>>. 但另一方面,根据该文档,截断 /dev/null 似乎是一个未定义的操作:
O_TRUNC
如果文件已经存在并且是一个常规文件并且访问模式允许写入(即,是 O_RDWR 或 O_WRONLY),它将被截断为长度 0。如果文件是 FIFO 或终端设备文件,则忽略 O_TRUNC 标志。否则,未指定 O_TRUNC 的效果。
并且 POSIX 规范说>应该 truncate an existing file,但是O_TRUNC 是为设备文件实现定义的,并且没有关于 /dev/null 应该如何响应被截断的消息。
那么,截断 /dev/null 实际上是未指定的吗?并做lseek的来电对写性能产生任何影响?
虽然我理解 udev 的伟大并感谢开发人员的努力,但我只是想知道是否有替代方案。
例如,我可能会想象应该有一种方法来制作启动脚本,该脚本创建我的系统(不更改硬件)上的大多数设备节点无论如何都是相同的。
我想跳过的好处或原因与跳过udev相同dbus,即降低复杂性并通过增加我的更改来更安全地设置系统。
如果我可以将音频发送到输出设备,那么我可以将相同的音频记录为波形。使用文件系统,您只需设置一个回送文件系统并在文件而不是设备上写入二进制数据。
我的问题是:我可以将音频信号发送到(例如)WAV 文件而不是我的音频设备吗?如何?
我很好奇硬件如何与操作系统交互并看到这篇文章:键盘输入和文本输出如何工作?
似乎很多魔法都发生在 /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) devices ×10
linux ×5
audio ×1
bios ×1
boot ×1
boot-loader ×1
input ×1
kernel ×1
linux-kernel ×1
macintosh ×1
mouse ×1
networkcard ×1
permissions ×1
proc ×1
recording ×1
udev ×1
users ×1