小编mal*_*lat的帖子

dmesg:读取内核缓冲区失败:权限被拒绝

由于最近 Debian 更改了默认行为dmesg,我不能简单地从本地用户使用它。

% dmesg
dmesg: read kernel buffer failed: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

同样适用于:

% cat /dev/kmsg                      
cat: /dev/kmsg: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

以错误跟踪器为主角,这导致:

如何将此行为改回前一个行为,其中允许本地用户使用 dmesg。我找不到它的特定组(例如 sudoers 或类似的东西)。

linux debian sysctl dmesg

33
推荐指数
1
解决办法
4万
查看次数

为什么来自 /dev/urandom 的 dd 提前停止?

在我当前的 Linux 系统(Debian Jessie amd64)上,我的dd使用行为有所不同/dev/urandom/dev/random行为已正确记录)。如果我天真地想要 1G 的随机数据:

$ dd if=/dev/urandom of=random.raw bs=1G count=1
0+1 records in
0+1 records out
33554431 bytes (34 MB) copied, 2.2481 s, 14.9 MB/s
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只存储了 34MB 的随机数据,而如果我使用多次读取:

$ dd if=/dev/urandom of=random.raw bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 70.4749 s, 14.9 MB/s
Run Code Online (Sandbox Code Playgroud)

然后我正确地得到了我的 1G 随机数据。

的文档/dev/urandom相当难以捉摸:

从 /dev/urandom 设备读取不会阻塞等待更多熵。因此,如果熵池中没有足够的熵,则返回值理论上容易受到对驱动程序使用的算法的加密攻击。当前未分类的文献中没有关于如何做到这一点的知识,但理论上可能存在这种攻击。如果这是您的应用程序中的一个问题,请改用 /dev/random。

我猜文档暗示urandom.

我还猜测我的系统上熵池的大小是 34MB,这可以解释为什么read1G 中的第一个失败了大约 …

dd

14
推荐指数
1
解决办法
6960
查看次数

GNU/Linux 3.2.0 有什么特别之处?

我盯着以下的输出:

% file -b /lib/x86_64-linux-gnu/*.so | grep ", for"  | colrm 1 130 | sort -u
=5018237bbf012b4094027fd0b96fc22a24496ea4, for GNU/Linux 3.2.0, not stripped
9f21d, for GNU/Linux 3.2.0, stripped
bee51, for GNU/Linux 3.2.0, stripped
, for GNU/Linux 3.2.0, stripped
sha1]=2e5abcee94f3bcbed7bba094f341070a2585a2ba, for GNU/Linux 3.2.0, stripped
Run Code Online (Sandbox Code Playgroud)

GNU/Linux 3.2.0 有什么特别之处?这是在 Debian/bullseye 系统 (amd64) 上。


换句话说:GNU/Linux 3.2.0 中引入了哪些 API/功能(线程模型、安全功能...)如此重要?所需版本的显式设置将阻止用户使用某些LD_ASSUME_KERNEL值,因此我猜测有充分的理由拒绝旧值,例如LD_ASSUME_KERNEL=2.4.19(例如)。

debian linux-kernel

11
推荐指数
1
解决办法
3705
查看次数

如何调试无法绑定到 Linux 上的设备的驱动程序?

我想弄清楚为什么以下设备未在我的Creator CI20上设置为其驱动程序。作为参考,我使用的是 Linux 内核 v4.13.0 并在本地进行编译:

make ARCH=mips ci20_defconfig
make -j8 ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- uImage
Run Code Online (Sandbox Code Playgroud)

从正在运行的系统中,我可以看到:

ci20@ci20:~# find /sys | grep rng
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/compatible
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/name
/sys/bus/platform/drivers/jz4780-rng
/sys/bus/platform/drivers/jz4780-rng/bind
/sys/bus/platform/drivers/jz4780-rng/unbind
/sys/bus/platform/drivers/jz4780-rng/uevent
Run Code Online (Sandbox Code Playgroud)

所以设备在运行时被内核看到,现在缺少的部分是为什么驱动程序从未绑定?我会期待这样的事情:

/sys/bus/platform/drivers/jz4780-rng/100000d8.rng
Run Code Online (Sandbox Code Playgroud)

我确实找到了其他一些解释如何调试正在运行的系统的帖子,例如:

虽然这些帖子上的信息是准确的,但对我来说并不是很有帮助。由于我在本地构建我的内核(我printkjz4780-rng驱动程序的探测功能中添加了),我的问题是:

  • 我应该在编译时打开什么选项,以便内核打印有关其未能为jz4780-rng驱动程序调用探测函数的准确信息?
  • 特别是如何打印已测试总线/驱动程序的完整列表driver_probe_device

printk可以在代码中的任何地方添加来调试它。问题是:哪个函数正在遍历设备树并调用probe/init 函数?

以供参考:

$ dtc -I fs -O dts /sys/firmware/devicetree/base | grep -A 1 rng
              rng@d8 {
                      compatible = "ingenic,jz4780-rng";
              };
Run Code Online (Sandbox Code Playgroud)

兼容字符串声明为:

cgu: jz4780-cgu@10000000 {
    compatible = …
Run Code Online (Sandbox Code Playgroud)

linux drivers devices mips device-tree

10
推荐指数
1
解决办法
5175
查看次数

系统正在启动。尚未允许非特权用户登录

有没有办法(除了在目标机器上允许 root 登录)来解决以下问题:

$ ssh 192.168.0.14
user@192.168.0.14's password:
"System is booting up. Unprivileged users are not permitted to log in yet. Please come back later. For technical details, see pam_nologin(8)."
Run Code Online (Sandbox Code Playgroud)

我正在尝试远程调试无法启动 X 会话。


目前,以下链接对我不起作用:

startup boot ssh debian

9
推荐指数
1
解决办法
1万
查看次数

高效合并/排序/独特的大量文本文件

我正在尝试一个天真的:

$ cat * | sort -u > /tmp/bla.txt
Run Code Online (Sandbox Code Playgroud)

失败了:

-bash: /bin/cat: Argument list too long
Run Code Online (Sandbox Code Playgroud)

因此,为了避免像(创建一个巨大的临时文件)这样的愚蠢解决方案:

$ find . -type f -exec cat {} >> /tmp/unsorted.txt \;
$ cat /tmp/unsorted.txt | sort -u > /tmp/bla.txt
Run Code Online (Sandbox Code Playgroud)

我虽然我可以使用一个一个地处理文件(这应该减少内存消耗,并且更接近流式机制):

$ cat proc.sh
#!/bin/sh
old=/tmp/old.txt
tmp=/tmp/tmp.txt
cat $old "$1" | sort -u > $tmp
mv $tmp $old
Run Code Online (Sandbox Code Playgroud)

接着是:

$ touch /tmp/old.txt
$ find . -type f -exec /tmp/proc.sh {} \;
Run Code Online (Sandbox Code Playgroud)

是否有更简单的更 unix 风格的替代:cat * | sort -u当文件数量达到时MAX_ARG?为这样一个常见的任务编写一个小的 shell 脚本感觉很尴尬。

shell sort uniq

8
推荐指数
3
解决办法
4086
查看次数

NFS 挂载:设备或资源繁忙

我参考了以下链接,解决方案有效。

如何克服“设备或资源繁忙”?

当您手动删除文件时,上述解决方案有效。但我有一个删除文件的 python 脚本(自动过程)。有时,当脚本尝试删除文件时,我会收到“设备或资源繁忙错误”。因此,我的脚本失败了。我不知道如何使用我的 python 脚本解决这个问题。

编辑: 脚本从日志服务器下载日志文件。然后这些文件由我的脚本处理。处理完成后,脚本会删除这些日志文件。我不认为设计有什么问题。

确切错误:

OSError: [Errno 16] Device or resource busy: '/home/johndoe/qwerty/.nfs000000000471494300000944'
Run Code Online (Sandbox Code Playgroud)

rhel python lock files

7
推荐指数
1
解决办法
2万
查看次数

Linux:替代 MLC NAND 上的 UBIFS

UBIFS在基于MLC NAND 的Linux 中的地位从来都不是完美的。虽然如今此条目已从常见问题解答中删除,但现在官方报告称不支持 MLC NAND 上的 UBIFS:

patchwork.kernel.org 上的完整线程:

所以我现在正在寻找MIPS Creator CI20上的 MLC NAND 的长期文件系统替代品:

这是三星 K9GBG08UOA NAND 闪存,似乎没有办法将此设备置于 SLC 模式。

似乎 jffs2 也不是替代品:

是否有其他替代文件系统(可能具有可比的性能)?

linux filesystems ubifs

7
推荐指数
1
解决办法
1250
查看次数

配置电源按钮以在 Debian/Mac Mini G4 上关闭

我在旧的 Mac Mini G4 上使用 Debian/PPC,它目前用作 DLNA 服务器 (UPnP),没有插入鼠标或键盘。

我希望我的电源按钮也可以关闭盒子。目前它什么都不做,在最近的 x86 上,我会使用这里描述的 ACPI 。

但是,我的 G4 盒子中似乎没有 ACPI(例如,请参见此处此处),仅pbbuttonsd可用,请参阅链接

我找不到按下电源按钮时是否发送了任何事件(APM 类型?)。我知道我可以按住电源按钮 4 秒然后机器停止,但我更喜欢干净的关机。作为最后的手段,我可​​以插入键盘,但我正在寻找没有鼠标或键盘的解决方案。

怎么做呢?

编辑:使用 web.archive.org 我能够阅读:http ://web.archive.org/web/20110317165103/http://blog.blinker.net/2010/06/20/mac-mini-g4- homeserver-with-ubuntu-linux-10-04-wpa2/

我使用了建议的解决方案:

我通过安装 pbbuttonsd 在我的 G4 Quicksilver 和 Ubuntu 上工作。

我不得不修改 /etc/pbbuttonsd.conf 并更改这一行:

OnAC_KeyAction = 无

到:

OnAC_KeyAction = 关机

我运行 /etc/init.d/pbbuttonsd restart 重新启动守护程序,然后电源按钮起作用以触发干净关闭。

但这对我不起作用,也许 PowerBook 和 Mac Mini G4 之间存在差异。

shutdown acpi powerpc

6
推荐指数
1
解决办法
731
查看次数

cifs:无法 cd 进入目录

出于某种原因,我无法 cd 进入我有权访问的特定远程目录,它失败了:

$ cd Data\ Services/
-bash: cd: Data Services/: Invalid argument
Run Code Online (Sandbox Code Playgroud)

这是我安装它的方式:

$ sudo mount -t cifs //big.acme.corp/network/ ~/z -o username=myuser,domain=mydomain,uid=$(id -u),gid=$(id -g),vers=1.0
Password for myuser@//big.acme.corp/network/:  *********
Run Code Online (Sandbox Code Playgroud)

我可以从我的 Windows 8 笔记本电脑(相同的用户名/密码)访问它。

以供参考:

$ ls -ald "Data Services"
drwx--x--x 2 myuser myuser 0 Dec 13 09:21 Data Services
Run Code Online (Sandbox Code Playgroud)

至少在我这边,这个快捷方式似乎被视为一个目录:

$ find Data\ Services -type d
Data Services
find: ‘Data Services’: Invalid argument
Run Code Online (Sandbox Code Playgroud)

因此,我不能用它做太多事情:

$ cat Data\ Services
cat: Data Services: Invalid argument
Run Code Online (Sandbox Code Playgroud)

甚至

$ hexdump Data\ Services
hexdump: Data …
Run Code Online (Sandbox Code Playgroud)

fedora cd-command cifs

6
推荐指数
1
解决办法
2183
查看次数