我正在阅读一篇关于 GNU 的文章,内容如下
确实有一个 Linux,这些人正在使用它,但它只是他们使用的系统的一部分。Linux 是内核:系统中的程序,它将机器的资源分配给您运行的其他程序。内核是操作系统的重要组成部分,但它本身毫无用处;它只能在完整的操作系统环境中运行。Linux 通常与 GNU 操作系统结合使用:整个系统基本上是 GNU 加上 Linux,或 GNU/Linux。所有所谓的“Linux”发行版实际上都是 GNU/Linux 的发行版。
我一直认为 Linux 是一个内核和操作系统,但它看起来像 Linux = Linux 内核和 GNU OS。
有人可以指出我们日常生活中使用的“Linux”术语中每个术语的确切功能。此外,根据维基,GNU 的设计类似于 Unix,但与 Unix 的不同之处在于它是自由软件并且不包含 Unix 代码。我认为 Unix 是开源的。不是吗?
大多数 gnu 手册文件使用info,编写一个texinfo然后makeinfo生成信息文件,这很棒。
texinfo 可以包含非英语字符然后生成非英语信息或 pdfs 吗?
如何写中文信息手册?什么是非英文软件手册的最佳解决方案,文档只是一个源文件到 info、man、html 和 pdf。
当我find --version与 GNU find 一起使用时,我得到如下信息:
find (GNU findutils) 4.5.9
[license text]
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
Run Code Online (Sandbox Code Playgroud)
这些“特征”是什么意思?在 中有一些关于O_NOFOLLOW作为安全措施的参考man find,并且提到了LEAF_OPTIMISATION一种优化,可以节省lstat对叶节点的一些调用。但我找不到任何关于FTS,D_TYPE或 的信息CBO。
Unix iMac 外壳终端
sed -i 's/original/new/g' maths.tx
Run Code Online (Sandbox Code Playgroud)
返回消息:sed:-i 不能与标准输入一起使用
根据这个问题,学习系统编程的一个好方法是实现现有的工具。我决定尝试重写ls和ps.
我的问题是如何获得此类文件?
我在哪里可以找到查询内核、文件系统等所需的系统调用 API...
我想也许我可以看看 GNU 工具的源代码。我在哪里可以找到它?
有没有(希望可以在线免费获得)好的文档,你们会推荐从哪里开始?
要创建列标题,如下所示:
1234567890123456789
Run Code Online (Sandbox Code Playgroud)
我(正在尝试)使用 seq 和 echo:
seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9
Run Code Online (Sandbox Code Playgroud)
但是, seq 在每次运行后都会输出一个换行符。我怎样才能避免这种情况?
这是我的工作代码,但我相信它没有优化 - 必须有一种方法可以比这更快地完成工作:
find . -type f -iname '*.py' -printf '%h\0' |
sort -z -u |
xargs -r -0 -I{} sh -c '
find "{}" -maxdepth 1 -type f -iname "*.py" -print0 |
xargs -r -0 du -sch |
tail -1 |
cut -f1 |
tr "\n" " "
echo -e "{}"' |
sort -k1 -hr |
head -50
Run Code Online (Sandbox Code Playgroud)
目标是递归搜索所有包含目录的目录,*.py然后*.py按每个目录的名称打印所有文件的总大小,按大小按相反顺序对它们进行排序并仅显示前 50 个。
任何想法如何改进此代码(性能方面)但保持相同的输出?
我在以下示例中测试了您的建议:47GB total: 5805 files
不幸的是,我无法逐一比较,因为并非所有建议都遵循相同的准则:总大小应该是磁盘使用量,分隔符应该只是一个空格。格式应如下所示:numfmt --to=iec-i --suffix=B
以下 4 个是排序输出,但 …
我有可以重新启动其内部状态的长时间运行的程序。我只想查看最新状态的日志文件条目(加载到vim's quickfix)。如何在最后一次出现字符串后显示所有行STARTING SESSION?
我目前的解决方案(日志文件有时有千兆字节长,所以我从不查看超过最后 5000 行的内容):
tail -n5000 logfile.log | grep -B5000 -v -e 'STARTING SESSION'> shortened.log
Run Code Online (Sandbox Code Playgroud)
当会话产生大量日志时,这很有效,但如果我有更短的日志并多次重启,则它包含多个会话。
本质上,我想要一个类似于--reverse标志的东西,它可以从文件的末尾而不是开头进行 grep 搜索:
grep --reverse --after-context=5000 --max-count=1 'STARTING SESSION' logfile.log
Run Code Online (Sandbox Code Playgroud)
笔记:
问题类似于在第 n 次出现匹配后打印行,但我想要最后一次出现。
该问题与在 POSIX.2 中从最后一个标记获取文本到 EOF几乎相同,只是我没有 POSIX 要求并且我的文件很大。我更喜欢使用 GNU utils 的高效解决方案(我正在使用mingw64)。
我有一些带有 grep 版本 2.16 的 SLES 12 SP5 机器,并且在一台机器上我大量使用包含以下grep --quiet条件的脚本:
# $pid_list contains the result of pstree and $script_pid equals $$
if echo "$pid_list" | grep -qF "($script_pid)"; then
continue
fi
if echo "$pid_list" | grep -qF "($script_pid)"; then
echo "Error: grep has a bug!"
continue
fi
Run Code Online (Sandbox Code Playgroud)
我将其加倍,因为第一个条件失败的概率约为 0.1%,而第二个相同条件成功?!
按如下方式更改条件后,它可以完美运行(完整代码此处):
if echo "$pid_list" | grep -F "($script_pid)" >/dev/null; then
continue
fi
Run Code Online (Sandbox Code Playgroud)
关于手册,该quiet选项的行为应该符合我的预期。如果发生错误,它甚至应该返回 true:
如果发现任何匹配,即使检测到错误,也会立即以零状态退出
所以我很困惑为什么有时会失败。机器的 RAM 和文件系统都很好。grep 二进制文件也具有正确的文件哈希值。
gnu ×10
find ×2
grep ×2
bash ×1
bsd ×1
c ×1
disk-usage ×1
gnu-parallel ×1
info ×1
ksh ×1
linux ×1
locale ×1
man ×1
parallelism ×1
performance ×1
sed ×1
seq ×1
sles ×1
system-calls ×1