作为一名 C 程序员,我惊讶地看到wc -c(计算字节数)和wc -m(计算字符数)对于我的一个长文本文件输出非常不同的结果。我一直被告知那sizeof(char)是 1 个字节。
qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv
Run Code Online (Sandbox Code Playgroud)
有什么解释吗?
我在这个页面中看到 inode 有一个链接计数器来知道有多少文件(阅读:“目录条目”)指向这个 inode。有没有办法在不遍历整个文件系统的情况下知道哪些目录包含这些条目?这些信息是否存储在某个地方?
struct inode {
kdev_t i_dev;
unsigned long i_ino;
umode_t i_mode;
nlink_t i_nlink;
uid_t i_uid;
gid_t i_gid;
…
};
Run Code Online (Sandbox Code Playgroud) 在这个页面,从设计和4.4BSD操作系统的实现,据说:
管道和套接字的主要区别在于管道需要一个共同的父进程来建立通信通道
但是,如果我记录正确,则创建新流程的唯一方法是创建fork现有流程。所以我真的看不出两个进程怎么可能没有共同的祖先。那么我认为任何一对进程都可以通过管道相互连接是否正确?
在第一个 shell 上,我tail不带参数运行命令。
在第二个 shell 上,我使用 strace 杀死第一个尾部来监视系统调用。
qdii@nomada ~ $ strace kill 1713
execve("/bin/kill", ["kill", "1713"], [/* 82 vars */]) = 0
brk(0) = 0x2533000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dacfe8000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
Run Code Online (Sandbox Code Playgroud)
我不知道brk命令,所以我查了一下,发现它改变了进程的数据段的末尾。为什么kill要这样做?特别是将数据段设置为0似乎没有什么意义。
在 Gnome 密钥环的 Gentoo 安装过程中,我被告知要打开 EXT4 安全标签,内核文档中对此进行了描述:
安全标签支持由 SELinux 等安全模块实现的替代访问控制模型。此选项为 ext4 文件系统中的文件安全标签启用扩展属性处理程序。
该文档并没有多大帮助,因为我现在了解到它启用了一个属性处理程序,该处理程序将反过来为 ext4 文件系统启用安全标签。我可以从功能的名称中推断出这一点。那些标签是什么?他们如何提高安全性?
此页面展示了碎片整理对 SSD 有益。我想这种类型的碎片整理必须具有修剪意识,以保持磁盘的使用寿命。我怎么能在linux上做到这一点?
编辑:评论指出这篇文章的内容有问题。
我想将内核的页面大小从 4KB 更改为 4MB,因为我的计算机增加了大量 RAM,而且我再也不会用完。
这个想法是需要大量内存的程序将在分配页面上花费更少的时间。我想它会提高性能,我想尝试一下。
运行时找不到任何地方make menuconfig。有没有办法做到这一点?
在解释算术扩展的段落中,Bash 的用户指南揭示了两种评估表达式的不同方法,第一种使用$((?EXPRESSION?)),第二种使用$[?EXPRESSION?]. 这两种方式看起来非常相似,因为我发现的唯一区别是:
$[?EXPRESSION?]只会计算 EXPRESSION 的结果,不做测试:
然而,我很感兴趣,因为同一份文档建议使用$[?EXPRESSION?]而不是$((?EXPRESSION?)).
在可能的情况下,Bash 用户应该尝试使用带方括号的语法:
如果进行的测试较少,您为什么要这样做?