小编炸鱼薯*_*德里克的帖子

内核是否真的使用了所有内核参数?

为什么 Linux 允许 'init=/bin/bash'?

我读了这个,答案是说它是运行这个初始化程序的内核。

然后我开始怀疑,Linux通常带有一个initramfs,它最终会mount和pivot_root到真正的根文件系统。那么这个init论点是什么意思呢?initramfs中的路径?或者就像我猜的那样,它不是由内核读取,而是由 initramfs 的 init 来执行真正的 init。

另外,root=UUID=xxxx论点,是真正由内核读取还是仅由 initramfs 的 init 读取以找到真正的根文件系统?

似乎我可以将我想要的任何参数作为内核参数传递,那么它们是否都被内核读取,或者至少其中一些只对用户空间程序有意义?

linux-kernel

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

如何以事务方式复制文件?

我想将一个文件从 A 复制到 B,它可能位于不同的文件系统上。

还有一些额外的要求:

  1. 副本是全有或全无,崩溃时没有部分或损坏的文件 B 留在原地;
  2. 不要覆盖现有的文件 B;
  3. 不要与同一命令的并发执行竞争,最多一个可以成功。

我认为这很接近:

cp A B.part && \
ln B B.part && \
rm B.part
Run Code Online (Sandbox Code Playgroud)

但是 3. 如果 B.part 存在(即使使用 -n 标志),则 cp 不会失败。随后 1. 如果另一个进程“赢得”cp 并且链接到位的文件不完整,则可能会失败。B.part 也可能是一个不相关的文件,但我很高兴在这种情况下没有尝试其他隐藏名称而失败。

我认为 bash noclobber 有帮助,这是否完全有效?有没有办法在没有 bash 版本要求的情况下获得?

#!/usr/bin/env bash
set -o noclobber
cat A > B.part && \
ln B.part B && \
rm B.part
Run Code Online (Sandbox Code Playgroud)

后续,我知道一些文件系统无论如何都会失败(NFS)。有没有办法检测这样的文件系统?

其他一些相关但不完全相同的问题:

跨文件系统的近似原子移动?

我的 fs 上的 mv 是原子的吗?

有没有办法在 eMMC 上以原子方式将文件和目录从 tempfs 移动到 ext4 分区

https://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html

linux bash cp

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

如何判断 shell 命令是程序还是函数?

我想知道我们在shell中调用的命令函数还是程序

linux shell

8
推荐指数
2
解决办法
2380
查看次数

关于在新创建的挂载命名空间内挂载和卸载继承的挂载

实验1

从命名空间外部,cat /proc/self/mountinfo给出

291 34 0:37 / /tmp/IMJUSTTMP rw,relatime shared:152 - tmpfs tmpfs rw,size=102400k
34 23 0:32 / /tmp rw,nosuid,nodev shared:16 - tmpfs tmpfs rw
Run Code Online (Sandbox Code Playgroud)

然后我运行unshare -mU --map-root-user --propagation private /usr/bin/zsh在命名空间内获取一个新的 shell,但在新创建的安装命名空间内,我无法 umount /tmp/IMJUSTTMPumount只是告诉我它尚未安装。虽然我可以通过 检查新创建的挂载命名空间cat /proc/self/mountinfo,它提供了私有挂载

290 263 0:32 / /tmp rw,nosuid,nodev - tmpfs tmpfs rw
302 290 0:37 / /tmp/IMJUSTTMP rw,relatime - tmpfs tmpfs rw,size=102400k
Run Code Online (Sandbox Code Playgroud)

那么为什么umount: /tmp/IMJUSTTMP: not mounted.当我尝试/tmp/IMJUSTTMP在命名空间内卸载时会出现这种情况呢?

我正在使用 5.0.9-arch1-1-ARCH,带有kernel.unprivileged_userns_clone = 1.

实验2 …

mount linux-kernel namespace

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

在 unicode 文本上使用 uniq

我想从带有叙利亚文字的文件中删除重复的行。源文件有 3 行,第 1 行和第 3 行相同。

$ cat file.txt 
????
????
????
Run Code Online (Sandbox Code Playgroud)

当我使用sortand 时uniq,结果假定所有 3 行都相同,这是错误的:

$ cat file.txt | sort | uniq -c
      3 ????
Run Code Online (Sandbox Code Playgroud)

将语言环境显式设置为叙利亚语也无济于事。

$ LC_COLLATE=syr_SY.utf8 cat file.txt | sort | uniq -c      
     3 ????
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如果重要的话,我正在使用 Kubuntu 18 和 bash。

sort unicode uniq

5
推荐指数
2
解决办法
1120
查看次数

其他类 Unix 内核是否具有稳定的系统调用 ABI?

Linux有稳定的系统调用ABI,但NT没有,Windows只是确保Win32 ABI稳定,不会立即陷入内核空间。Windows 的较低级别功能(如 nt.dll)可能会在 Windows 更新或 Windows 版本之间发生变化。

我想知道对于其他内核,例如 FreeBSD 内核或 Mach,它们是否提供稳定的系统调用或仅提供 POSIX 接口的稳定 ABI?

osx freebsd linux-kernel unix-philosophy

5
推荐指数
1
解决办法
817
查看次数

我应该如何理解`dig`的输出?

我该如何理解 的输出dig

DNS 服务器存储资源记录的数据库。

是否dig返回某个 DNS 服务器的数据库中的资源记录?如果是,dig返回的是哪个 DNS 服务器的数据库资源记录?

例如,dig似乎没有返回 DNS 服务器数据库中的资源记录a.edu-servers.net

$ dig @a.edu-servers.net robot.cs.washington.edu

; <<>> DiG 9.11.3-1ubuntu1.3-Ubuntu <<>> @a.edu-servers.net robot.cs.washington.edu
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2401
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 7
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: …
Run Code Online (Sandbox Code Playgroud)

dig

5
推荐指数
1
解决办法
1688
查看次数

linux在execve一个ELF时如何决定加载地址和入口点?

当linux有execve()一个ELF时,它会将该ELF映射到进程的内存空间中,并从入口点开始运行代码。但是内核是如何决定ELF的加载地址和入口点的呢?

如果禁用 ASLR,它将查找.p_vaddr每个 PT_LOAD 段并使用.e_entryELF 标头作为入口点。

但是如果启用 ASLR 会怎样呢?内核是否会简单地向上述所有内容添加随机移位,但保持它们的相对位置?

ELF的内容会影响内核的行为吗?就像.p_vaddrPT_LOAD 段的最小值是零还是非零?比如.e_typeELF header是ET_DYN还是ET_EXEC?

我特别谈论的是 x86_64。

elf linux-kernel exec aslr

5
推荐指数
0
解决办法
907
查看次数

Linux如何检查文件描述符的权限?

当进程使用 成功获取 fd 时open(flags=O_RDWR),只要 fd 未关闭(本地文件系统上的常规文件),它就能够读/写该文件,即使其他进程使用 chmod 取消读/写对应用户的权限。Linux 内核是否检查 inode 上的文件权限或打开的文件描述?但是当进程尝试使用 执行该文件时execveat,内核是否会读取磁盘以检查 x 位和 suid 位权限?打开文件描述中记录了什么样的权限,它是否包含完整的 ACL 或简单的可读/可写位,以便每个操作 else( execveatfchdirfchmod等) 都会检查磁盘信息?

如果我将此 fd 传输到另一个进程,该进程的 fsuid 在该文件上没有读/写/执行位(根据磁盘文件系统信息),该接收进程是否能够读/写/执行通过fd文件?

linux permissions

5
推荐指数
1
解决办法
3288
查看次数

`/dev/pts/ptmx` 来自哪里?

在我的 Archlinux 上,/dev/pts是由 devpts 挂载的,那么谁创建了 /dev/pts/ptmx设备节点?这个节点的目的是什么?它与 相同(Major=5 Minor=2)设备节点/dev/ptmx/,但访问模式不同,这是为了什么?

linux pty

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

标签 统计

linux ×4

linux-kernel ×4

aslr ×1

bash ×1

cp ×1

dig ×1

elf ×1

exec ×1

freebsd ×1

mount ×1

namespace ×1

osx ×1

permissions ×1

pty ×1

shell ×1

sort ×1

unicode ×1

uniq ×1

unix-philosophy ×1