我有一个二进制文件,我想包含在我的 C 源代码中(暂时用于测试目的),所以我想以 C 字符串的形式获取文件内容,如下所示:
\x01\x02\x03\x04
Run Code Online (Sandbox Code Playgroud)
这可能吗,也许是通过使用od
或hexdump
实用程序?虽然不是必需的,但如果字符串可以每 16 个输入字节换行到下一行,并在每行的开头和结尾包含双引号,那就更好了!
我知道字符串将嵌入空值 ( \x00
),因此我需要在代码中指定字符串的长度,以防止这些字节提前终止字符串。
有没有办法创建一个包含一组文件的 FAT32 文件系统,而无需挂载它或具有 root 访问权限?
我正在为旧操作系统开发一个软件应用程序作为一种爱好,作为构建过程的一部分,我想将一些源文件打包到一个 FAT32 磁盘映像中,然后启动 QEMU 以启动该映像并在其中运行一个旧编译器它。之后我想从 FAT32 磁盘映像中提取编译后的文件。
我可以使用 来创建文件系统mkfs.vfat
,但是我所知道的将文件放入和取出图像的唯一方法是挂载它,这通常需要 root 访问权限并且不利于嵌入到构建过程中。
理想情况下,我追求的是zip
和unzip
实用程序,而不是创建/提取 .zip 文件,它会以 FAT16 或 FAT32 格式创建和提取磁盘映像。
这样的东西存在吗?我唯一能在网上找到的东西都涉及安装磁盘映像。
有谁知道如何通过 SSHFS 挂载远程 SFTP 路径,以便您可以使用符号链接?当我这样做时,我创建的所有符号链接都指向错误的文件(不是我链接到的文件)。我感兴趣的所有符号链接都是相对的(不是绝对的),因此让它们看起来与远程机器上的完全一样是理想的。
使用带有默认挂载选项的 sshfs,我无法创建指向当前目录中另一个文件的符号链接:
$ cd /mnt/path/to/sshfs/mount
$ ln -s ./test ./test2
$ ls test2
lrwxrwxrwx 1 root webusers 11 Jul 3 09:11 test2 -> /test
Run Code Online (Sandbox Code Playgroud)
这显然是不正确的,因为链接目标在当前目录 ( ./test
) 中,但在这里您可以看到 sshfs 创建了一个/test
不正确的链接 - 链接目标/mnt/path/to/sshfs/mount/test
不是/test
.
通过transform_symlinks
在挂载 sshfs 文件系统时添加该选项,我使用相同的命令获得了一个相对链接,但它仍然指向错误的位置:
$ cd /mnt/path/to/sshfs/mount
$ ln -s ./test ./test2
$ ls test2
lrwxrwxrwx 1 root webusers 11 Jul 3 09:13 test2 -> ../../../test
Run Code Online (Sandbox Code Playgroud)
在这里,我试图链接到./test
当前目录,但我得到了一个指向../../../test
三个级别的链接!
但是,使用命令行 SFTP 客户端连接sftp …
概括
如何将 Linux 配置为同时从本地磁盘/文件系统读取并写入网络共享,而不是在没有数据通过网络时读取,然后在本地磁盘处于传输状态时通过网络发送该数据闲置的?
同时读取和写入要快得多,而不是只执行一个操作,然后以交替方式执行另一个操作。
细节
我正在将大量数据从 Linux 机器上的本地磁盘移动到 NAS 设备。
我rsync
用来基本上复制/srv/data
到/mnt/nas
,这是一个 CIFS 挂载。
它开始很好,读取速度为 100MB/秒,写入 NAS 速度为 100MB/秒(千兆网络的限制),读取和写入同时进行。
但是现在,几个小时后,我发现它正在从本地磁盘读取,然后在写入 NAS 时停止读取,然后当没有更多数据要写入 NAS 时,它恢复从磁盘读取再次。读取磁盘时网络空闲,使用网络时磁盘空闲。
不用说,读取 200MB 然后写入 200MB 比同时读取和写入 200MB 花费的时间要长得多。
如何配置内核,使其坚持早期同时读取和写入的行为,而不是在读取和写入之间交替,一次只执行一个操作?
一些观察:当本地磁盘以 100+MB/秒的速度读取时,一切似乎都并行发生,但是一旦磁盘变慢(由于某种原因,现在似乎只有 20MB/秒),这就是读取/写入的时间切换似乎发生了。
我也sync
可以每隔几秒钟手动运行一次以使写入与读取并行发生(尽管显然速度降低了)但是放入sync
一个while
循环中使其每五秒运行一次似乎不是正确的解决方案......
内核似乎缓存了大约 1GB 的数据,然后尽可能快地通过网络将其写出 - 这很好 - 我只是不明白为什么在通过网络发送数据时需要停止读取慢速磁盘网络。
我正在试验一些旧的 SCSI 磁带驱动器,我已经成功地将一些数据写入磁带,但我正在努力尝试再次读取它。
# tar tvf /dev/st0
tar: /dev/st0: Cannot read: Cannot allocate memory
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
# dd if=/dev/st0 of=test
dd: error reading '/dev/st0': Cannot allocate memory
0+0 records in
0+0 records out
0 bytes copied, 3.20155 s, 0.0 kB/s
Run Code Online (Sandbox Code Playgroud)
在这些命令之后,dmesg
说:
st 10:0:3:0: [st0] Block limits 1 - 16777215 bytes.
st 10:0:3:0: [st0] Failed to read 65536 byte block with 512 byte transfer.
st 10:0:3:0: [st0] …
Run Code Online (Sandbox Code Playgroud) 有没有办法xscreensaver
在整个 X 显示器上运行单个屏幕保护程序,而忽略 Xinerama/XRANDR 几何?
我有三台显示器在一个 X 显示器上显示为单个 X 屏幕。XRANDR 提供有关每个物理监视器在单个 X 屏幕上的开始和结束位置的信息。 xscreensaver
使用它在每台显示器上运行不同的屏幕保护程序,或者运行相同的屏幕保护程序三次,每个监视器一次。
我想改变这一点,以便只运行一个屏幕保护程序,它跨越所有三个显示器(即它占据了整个 X 屏幕。)这样屏幕保护程序中的动画可以自由地从一个显示器漫游到下一个显示器.
这可能吗?
我想用它iptraf-ng
来查看我的机器正在从 Internet 发送/接收多少数据,但我想排除 LAN 上的流量,因为我只对异地数据感兴趣。
我按如下方式创建了一个过滤器,但是当我激活它时,iptraf-ng
根本没有显示任何流量!
192.168.0.0
255.255.255.255
192.168.0.0
255.255.255.255
All IP
, TCP
, UDP
, ICMP
(设置或取消设置的实际值没有区别)E
如果我将其更改I
为没有区别)N
如果我改成Y
没有区别)这让我觉得要么过滤器完全坏了,要么我真的误解了它们的工作原理。
我应该如何创建一个iptraf-ng
过滤器来排除源和目标 IP 都在 192.168.0.0/24 中的所有流量?
当我使用rdesktop
连接到 Microsoft Windows 服务器时,鼠标光标设置为 Windows 真彩色光标的单色版本。这最终是一个没有轮廓的白色箭头,因此很难在白色表面上看到它。
我不想更改 Windows 机器上的光标,但我对 Xcursor 工作原理的理解如下:
当设置任何光标时,它会通过文件名(使用光标图像的散列)进行查找,以便如果找到匹配项,则使用该 Xcursor 而不是原始的单色光标。
我的想法是,如果我可以提供这个文件并在其中放置一个更清晰的光标图像(如默认箭头),那么它会在大多数情况下通过使用默认箭头来解决我的问题。此外,rdesktop
如果远程机器需要,它仍然允许将光标更改为其他内容(如调整大小的箭头)。
rdesktop
我得到的光标图像要使用的哈希值?我正在设计一个处理扫描文档的 GUI 应用程序。它允许在保存/导出扫描之前对其进行操作,因此它需要在处理每个扫描页面时临时存储每个扫描页面的数据。
数据量非常大(即使压缩也经常超过 100MB),因此将其存储在内存中是不切实际的。扫描大量页面也是一项繁重的工作,因此应将扫描结果保存在磁盘上的“工作区”中,以便即使在重新启动系统后也可以重新打开应用程序,并且先前扫描的数据将在那里准备好继续处理。
我不太确定我应该在哪里保存这个重要但临时的数据:
/tmp/
不好,因为数据应该在退出并重新打开应用程序后保留,甚至在重新启动后保留。$HOME/.config/appname/
不是真的正确,因为它不是我要保存的配置数据。$HOME/.local/share/
不正确,因为XDG 规范说这是为了覆盖存储在/usr/share/
其中的图标之类的东西,并且永远不会放入“全局”扫描/usr/share/
。$HOME/.cache
很接近,但这不是缓存数据,如果用户在扫描 100 页后被删除并且不得不重新扫描所有内容,那么用户会非常恼火。$HOME/.local/lib/appname
没有出现在任何规范中,但如果.local
意味着用户本地(lib
来自/var/lib/
使用)可能没问题。如果它意味着机器本地,那么它不适合,因为用户应该能够登录到机器高速扫描仪,使用此应用程序进行扫描,注销,然后在普通 PC 上登录并打开应用程序以查看他们刚刚扫描的内容 - 即数据应在注销时通过网络保留,并且~$HOME/.cache
不需要在机器之间共享,所以$HOME/.local
可能也不是 - 我不确定。那么对于存储此类数据的最合适位置有什么建议吗?
编辑:只是为了澄清,这是每个用户的数据,并且应用程序以普通用户身份运行,因此将其放入/var/
可能不正确,因为您必须处理运行应用程序的多个用户,除了没有写入的普通用户访问那里。
当尝试在 Ubuntu 上使用 NetworkManager 的 ModemManager 修复 DNS 问题时,我在systemd-resolve --status
连接时的输出中发现了这种差异。(ping
ip 有效,手动编辑/etc/resolv.conf
可以解决问题,设置 FallbackDNS 也可以解决问题,但都有副作用。
工作安装 - PPP 调制解调器(Ubuntu 17.10)
Link 3 (wwp0s20u6)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 198.142.0.51
211.29.132.12
Run Code Online (Sandbox Code Playgroud)
安装损坏 - PPP 调制解调器(相同硬件 - Lubuntu 17.04)
Link 2 (wwp0s20u6)
Current Scopes: LLMNR/IPv4 LLMNR/IPv6
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Run Code Online (Sandbox Code Playgroud)
它们都是 Ubuntu 的版本,并且硬件相同。中的网络连接配置/etc/NetworkManager/system-connections …