在长时间运行的系统上,我通常有一个终端
$ tail -f /var/log/kern.log
Run Code Online (Sandbox Code Playgroud)
或类似的东西打开。
但有时我必须重新启动此类命令,因为不再显示新消息。
我认为这是因为替换日志文件的日志轮换作业tail -f正在“观察”。
如何避免这种重启问题?
我可以调用tail这样它注意到旋转过程并做正确的事情吗?
(我在rsyslogd默认使用的 Ubuntu 11.04 系统上注意到了这个问题。)
journalctl在 CentOS 7 系统下执行只会打印上次启动后生成的消息。
命令
# journalctl --boot=-1
Run Code Online (Sandbox Code Playgroud)
印刷
Failed to look up boot -1: Cannot assign requested address
Run Code Online (Sandbox Code Playgroud)
并以状态 1 退出。
将它与当前的 Fedora 系统进行比较,我注意到 CentOS 7 没有/var/log/journal(journalctl也没有提供--list-boots)。
因此,我的问题是如何显示在上次启动日期之前写入的日志消息。
或者,也许这个功能必须在 CentOS 7 上启用?
(journalctl手册页将“systemd 208”列为版本号。)
出于调试目的,我想监视网络接口上的 http 请求。
使用幼稚的tcpdump命令行,我得到了太多底层信息,而我需要的信息却没有很清楚地表示出来。
将流量转储tcpdump到文件然后使用wireshark的缺点是它不是即时的。
我想像这样的工具用法:
$ monitorhttp -ieth0 --only-get --just-urls
2011-01-23 20:00:01 GET http://foo.example.org/blah.js
2011-01-23 20:03:01 GET http://foo.example.org/bar.html
...
Run Code Online (Sandbox Code Playgroud)
我正在使用 Linux。
有时您必须确保同一时间只有一个 shell 脚本实例正在运行。
例如,通过 crond 执行的 cron 作业本身不提供锁定(例如默认的 Solaris crond)。
实现锁定的常见模式是这样的代码:
#!/bin/sh
LOCK=/var/tmp/mylock
if [ -f $LOCK ]; then # 'test' -> race begin
echo Job is already running\!
exit 6
fi
touch $LOCK # 'set' -> race end
# do some work
rm $LOCK
Run Code Online (Sandbox Code Playgroud)
当然,这样的代码有竞争条件。有一个时间窗口,其中两个实例的执行都可以在第 3 行之后才能访问$LOCK文件。
对于 cron 作业,这通常不是问题,因为两次调用之间有几分钟的间隔。
但是事情可能会出错——例如,当锁定文件在 NFS 服务器上时——挂起。在这种情况下,多个 cron 作业可以在第 3 行阻塞并排队。如果NFS服务器再次处于活动状态,那么你已经惊群并行运行的作业。
在网上搜索我发现工具lockrun似乎是该问题的一个很好的解决方案。使用它,您可以运行一个需要像这样锁定的脚本:
$ lockrun --lockfile=/var/tmp/mylock myscript.sh
Run Code Online (Sandbox Code Playgroud)
您可以将其放在包装器中或从您的 crontab 中使用它。
lockf()如果可用,它使用(POSIX) 并回退到flock()(BSD)。并且lockf()对 NFS …
当我列出一个键的详细信息时,我会得到如下输出:
$ gpg --edit-key SOMEID
pub [..] created: [..] expires: [..] usage:SC
[..]
sub [..] created: [..] expires: [..] usage: E
Run Code Online (Sandbox Code Playgroud)
甚至usage: SCA在另一个键上(主键部分)。
用法字段中的这些缩写是什么意思?
我可以得出:
S -> for signing
E -> for encrypting
Run Code Online (Sandbox Code Playgroud)
但是C和A呢?
还有更多吗?
在哪里可以找到这样的东西?
在当前的 Linux 发行版(如 Debian/CentOS/Fedora)下,在 USB 设备插件上自动执行自定义脚本的最先进方法是什么?
例如,如果您想根据 UUID(或设备 ID 等)自动挂载/复制某些文件/卸载 USB 大容量存储设备。
我刚刚从 Ubuntu 切换到 Fedora14。在 Ubuntu 中,我们apt-get autoremove可以删除孤立/未使用的包。Fedora 中的对应物是什么?
对于脚本,我需要获取 PDF 文件的页面尺寸(以毫米为单位)。
pdfinfo 只需将其打印在“pts”中,例如:
Page size: 624 x 312 pts
Run Code Online (Sandbox Code Playgroud)
我应该使用什么?
或者无论如何单位是'pts' - 如果我想转换它们......
我喜欢将整个分区或整个硬盘驱动器克隆到更大的外部磁盘上,但喜欢创建一个稀疏文件。我经常dd用于克隆,但它不支持稀疏文件。作为一种解决方法,我使用了类似的东西:
cp --sparse=always <(dd if=/dev/sda1 bs=8M) /mount/external/backup/sda1.raw
Run Code Online (Sandbox Code Playgroud)
但是,这对我的口味来说有点太棘手,并且如果中止,我将无法恢复该过程。有趣的是,有一个用于此 ( ntfsclone)的 NTFS 工具,但不存在用于 Linux (EXT2-4) 的本机文件系统的此类工具。
是否有一些更好的工具,例如dd具有稀疏支持的变体?我不寻找一些用于磁盘备份的专有软件,而只是想制作一个稀疏克隆副本,如果需要,我可以将其安装为循环设备。
我正在寻找一个命令行工具来侦听给定的部分,很高兴地排除每个 HTTP POST 请求并将其转储。
我想将它用于测试目的,即用于测试发出 HTTP POST 请求的客户端。
这意味着我正在搜索对应物curl -F(我可以使用它来将测试 HTTP POST 发送到 HTTP 服务器)。
也许类似socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...- 但 socat 是不够的,因为它不谈 HTTP。