小编Kaz*_*Kaz的帖子

GNU cp 和 mv 中 -T 选项的附加值是什么?

为什么有些 GNU Coreutils 命令有-T/--no-target-directory选项?似乎它所做的一切都可以使用.传统 Unix 目录层次结构中的(自点)语义来实现。

考虑:

cp -rT /this/source dir
Run Code Online (Sandbox Code Playgroud)

-T选项可防止副本创建dir/source子目录。而是/this/source被标识dir并相应地在树之间映射内容。因此,例如/this/source/foo.c转到dir/foo.c等等,而不是到dir/source/foo.c

但这可以很容易地完成,而无需-T使用以下选项:

cp -r /this/source/. dir  # Probably worked fine since dawn of Unix?
Run Code Online (Sandbox Code Playgroud)

从语义上讲,尾随点组件被复制为 的子级dir,但当然该“子级”已经存在(因此不必创建)并且实际上是dir它本身,因此效果是用/this/path标识的dir

如果当前目录是目标,它工作正常:

cp -r /this/tree/node/. . # node's children go to current dir
Run Code Online (Sandbox Code Playgroud)

有什么东西你只能-T它来合理化它的存在吗?(除了对未实现点目录的操作系统的支持,文档中未提及的基本原理。)

上面的点技巧是否不能解决 GNU 信息文档中提到的相同竞争条件-T

cp coreutils

26
推荐指数
3
解决办法
2525
查看次数

运行真正的 gnome-terminal 多进程实例

如果您已经在gnome-terminal运行,并且想要一个新的程序实例,您可能会认为gnome-terminal &从 shell运行就可以解决问题。

令人惊讶的是,这个新实例的行为就像一些乏味的 Windows 或 Mac 程序;它只向现有的发送消息,运行gnome-terminal以创建一个新窗口。如果这一gnome-terminal进程崩溃,您将丢失所有终端窗口!

(当然,每个窗口都有自己的外壳,它是一个独立的进程,但实际的终端模拟器及其 GUI 是由应用程序的单个实例管理的。)

我们如何创建 的独立实例gnome-terminal,每个实例都在自己的进程中运行,以便杀死该进程只会破坏与该进程关联的窗口?

gnome-terminal

20
推荐指数
2
解决办法
8344
查看次数

将年份添加到 rsyslogd 生成的条目中

rsyslogd的默认配置以传统格式写入日志条目,如下所示:

Nov 30 10:40:01 localhost CRON[30786]: pam_unix(cron:session): session closed for user list
Run Code Online (Sandbox Code Playgroud)

没有年份,这对于处理日志的工具来说很不方便,并且需要每个条目的确切时间戳,因此必须实施猜测年份的黑客。

我们可以将 rsyslogd 切换到一个名为的内置模板RSYSLOG_FileFormat,该模板会更改为高精度时间戳。虽然这是 RFC 时间戳格式适合处理,但它是冗长的胡言乱语,没有人眼难以看到的空白。

2013-11-30T10:50:01.478204-08:00 localhost CRON[31200]: ...
Run Code Online (Sandbox Code Playgroud)

不幸的是,rsyslogd 的模板系统非常不友好,文档也很差。令人难以置信的是,对于这个模板系统中所有不必要的复杂性, 的值dateformat显然与选择的硬编码 C 相关联enum

有一些参数,$YEAR但这些只是提取当前时间,而不是从消息时间戳中提取的时间,所以这是一个黑客。

我只想专注于编写处理条目的程序。

我可以放入rsyslogd.conf文件以获得准确输出的正确简介是什么:

Nov 30 2013 10:40:01 localhost CRON[31200]: ...
Run Code Online (Sandbox Code Playgroud)

只是传统的模板,加上年份。

rsyslog

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

标签 统计

coreutils ×1

cp ×1

gnome-terminal ×1

rsyslog ×1