小编Vol*_*gel的帖子

在大型日志文件上使用 tail -f 可以吗

我想监视一个大日志文件(接近 1 GB)是否有错误。我希望这接近实时(几秒钟延迟很好)。我的计划是使用tail -f | grep. 在长时间运行时使用这种方法是否有任何性能问题,比如从零字节到 1 GB?是否有任何用于此类监控的标准做法。请注意,我想使用 Solaris 10 上可用的标准 unix 命令来执行此操作。

如果可能的话,我的文件甚至会翻转,我还有一个问题需要解决:)。使用tail -F( --follow=name) 对我来说不是一个选项,因为-F在我想要运行它的服务器中不支持。我的计划是使用一个脚本来启动这个尾部并轮询以查找文件是否被翻转。如果是,则杀死尾部并重新启动它。有什么更好的方法吗?

logs monitoring tail

10
推荐指数
3
解决办法
5582
查看次数

将稀疏文件转换为非稀疏文件

在 Linux 上,给定一个稀疏文件,如何使其成为非稀疏文件?
可以用 复制cp --sparse=never ...,但是如果文件是10G,洞是2G(即分配的空间是8G),如何让文件系统分配剩余的2G而不将原来的8G复制到新文件中?

sparse-files files

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

如何使用 SED 或 AWK 将模板文件中的占位符替换为包含特殊字符的可变内容?

CentOS 6.3

我正在尝试使用一个小脚本来发送一封电子邮件,其中包含正文中的电子邮件标题副本(用于内部报告)。

模板文件包含以下内容:

Alert Report

Alert has triggered at TMPDATE

HEADERS
-------
TMPHEADERS

SOURCE IP
---------
TMPSOURCEIP
Run Code Online (Sandbox Code Playgroud)

我希望我的脚本找到并用与警报相关的实际信息替换“TMP”占位符。

日期和源 IP 变量似乎工作正常,但是如果/当我尝试查找/替换 TMPHEADERS 时,它会导致奇怪的症状,包括整个输出为空白。我有理由肯定它与包含大量特殊字符(@ % & 等)的标题有关。

有人可以建议如何最好地通过 bash 完成此操作吗?

我当前的代码如下所示:

cat /test/emailtemplate | sed s/TMPHEADERS/"$HEADERS"/ > /test/output
Run Code Online (Sandbox Code Playgroud)

更新

根据请求,这是我尝试插入模板文件的一组示例标头(IP 地址和电子邮件地址已更改以保护无辜者 :-) ):

From foo@yahoo.com Thu Apr 25 20:18:19 2013
Return-Path: <foo@yahoo.com>
Received: from nm30-vm0.bullet.mail.ne1.yahoo.com (nm30-vm0.bullet.mail.ne1.yahoo.com [98.138.11.36])
by serv.example.com (8.14.4/8.14.4) with ESMTP id r3Q3IJVV009411
for <test@example.com>; Thu, 25 Apr 2013 20:18:19 -0700
Received: from [108.108.108.108] by nm30.bullet.mail.ne1.yahoo.com with NNFMP; 26 …
Run Code Online (Sandbox Code Playgroud)

sed awk text-processing

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

获取最后一个斜线之前的一行部分

我正在尝试编写一个 conky 脚本来显示我的 MPD 专辑封面,专辑文件夹中的“folder.jpg”。我目前的计划是使用mpc -f %file%,它会打印出文件名和路径,然后切出实际的文件名(即最后一个 / 之后的所有内容),并将其用作 conky 图像对象的路径。

我在使用 grep/cut 时遇到了麻烦,特别是因为有些歌曲嵌套在两个文件夹中,而另一些则嵌套在一个文件夹中。(grep -m 1 . |cut -f1 -d /适用于单文件夹相册)

我该怎么办?有没有我想念的更简单的方法?

grep text-processing cut mpd

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

删除shell中的每第N行

我正在尝试使用 awk 在 N 行之后删除一行,但我似乎无法正确处理。文件格式是这样的

YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX
Run Code Online (Sandbox Code Playgroud)

真正的例子是

office3
3
1
office3
6
1
office3
6
3
office3
1
1
Run Code Online (Sandbox Code Playgroud)

如何删除 YY 行或说“办公室”的行。无论内容如何,​​我都需要每两行删除一行。

sed awk text-processing

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

将函数和变量转发到 sudo su - &lt;user&gt; &lt;&lt;EOF

我已经在 bash/ksh 中声明了函数和变量,我需要将它们转发到sudo su - {user} << EOF

#!/bin/bash

log_f() {
echo "LOG line: $@"
}

extVAR="yourName"

sudo su - <user> << EOF
  intVAR=$(date)
  log_f ${intVAR} ${extVAR}
EOF
Run Code Online (Sandbox Code Playgroud)

bash ksh sudo environment-variables function

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

“xmodmap -pke”显示超过 6 列

Arch Wiki和其他站点只解释了“xmodmap -pke”中的前 6 列:

打印格式化为表达式的当前键映射表:

$ xmodmap -pke
[...]
keycode  57 = n N
[...]
Run Code Online (Sandbox Code Playgroud)

每个键码后跟它映射到的键符。上面的例子表明键码 57 映射到小写 n,而大写 N 映射到键码 57 加 Shift。

表中的每个 keysym 列对应于特定的修饰键组合:

Key
Shift+Key
mode_switch+Key
mode_switch+Shift+Key
AltGr+Key
AltGr+Shift+Key
Run Code Online (Sandbox Code Playgroud)

并非所有的键符都必须设置,但要仅分配后一个键符,请使用 NoSymbol 值。但是,运行“xmodmap -pke”可为某些键提供大约 10 列:

[hax@localhost ~]$ xmodmap -pke
keycode   8 =
keycode   9 = Escape NoSymbol Escape
keycode  10 = 1 exclam 1 exclam onesuperior exclamdown
keycode  11 = 2 at 2 at twosuperior oneeighth
keycode  12 = 3 numbersign 3 numerosign threesuperior …
Run Code Online (Sandbox Code Playgroud)

x11 xmodmap keyboard-layout

8
推荐指数
1
解决办法
1615
查看次数

如何杀死 - 轻轻地?

如果我想尽可能小心和礼貌地终止进程,
我应该在终止命令中使用哪些信号,以什么顺序?

我想给程序任何时间来清理,如果它愿意的话,所以只是发送一个SIGTERM将是苛刻的,我想?

我会最后使用SIGKILL(" -9"),这很清楚。

但是从哪个开始呢?SIGHUP? 哪些信号只是浪费时间?


相关信号供参考,来自

man 7 signal

  Signal     Value     Action   Comment
   ??????????????????????????????????????????????????????????????????????
   SIGHUP        1       Term    Hangup detected on controlling terminal
                                 or death of controlling process
   SIGINT        2       Term    Interrupt from keyboard
   SIGQUIT       3       Core    Quit from keyboard
   SIGKILL       9       Term    Kill signal
   SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                 readers
   SIGTERM      15       Term    Termination signal
Run Code Online (Sandbox Code Playgroud)

process kill zombie-process

7
推荐指数
1
解决办法
7811
查看次数

“查找”命令可以更有效地删除许多文件吗?

我想删除在多个子目录中有大量文件的目录中的旧文件。

我正在尝试使用以下方法 - 经过一些谷歌搜索后,它似乎是推荐且有效的方法:

find . -mindepth 2 -mtime +5 -print -delete
Run Code Online (Sandbox Code Playgroud)

我的期望是,这应该打印一个满足条件的文件(5 天前修改并满足 mindepth 条件),然后将其删除,然后继续下一个文件。

但是,当这个命令运行时,我可以看到 find 的内存使用量在增加,但没有打印任何内容(因此我认为还没有删除任何内容)。这似乎意味着find首先收集满足条件的所有文件,在遍历整个文件系统树后,它会打印然后删除文件。

有没有办法让它在对文件运行测试后立即删除它?这将有助于逐步清理 - 我可以选择终止命令,然后稍后重新运行它(这将有效地恢复文件删除)。这目前似乎没有发生,因为 find 在遍历巨大的文件系统树之前还没有开始删除任何内容。有没有办法解决?

编辑 - 包括有关我的用例的请求数据:

我必须清理的目录最大深度约为 4;常规文件仅存在于文件系统的叶子上。大约有大约 6 亿个常规文件,其中叶目录最多包含 5 个文件。较低级别的目录扇出大约为 3。较高级别的扇出很大。单个 7.2TB LVM 磁盘(带有 4 个约 2 TB 的物理硬盘)上占用的总空间为 6.5TB

find

7
推荐指数
1
解决办法
5177
查看次数

这个带有睡眠的“while”循环倒计时不起作用

我的脚本有一些问题bash,但我不知道为什么。该脚本旨在将输入(以分钟为单位)转换为秒,然后开始倒计时直到达到零,此时脚本应停止。

当我sleep 1在中间添加一个时,它就不再倒计时了;为什么会发生这种情况?

代码:

if [ -z $1 ];
then
     read NUMBER
else NUMBER=$1
fi
SECONDS=$(( NUMBER * 60 ))

while [ $SECONDS -gt 0 ]
do
      sleep 1
      SECONDS=$(( SECONDS - 1))
      echo $SECONDS remaining
done

echo end
Run Code Online (Sandbox Code Playgroud)

linux scripting bash

7
推荐指数
2
解决办法
1544
查看次数