我想监视一个大日志文件(接近 1 GB)是否有错误。我希望这接近实时(几秒钟延迟很好)。我的计划是使用tail -f | grep. 在长时间运行时使用这种方法是否有任何性能问题,比如从零字节到 1 GB?是否有任何用于此类监控的标准做法。请注意,我想使用 Solaris 10 上可用的标准 unix 命令来执行此操作。
如果可能的话,我的文件甚至会翻转,我还有一个问题需要解决:)。使用tail -F( --follow=name) 对我来说不是一个选项,因为-F在我想要运行它的服务器中不支持。我的计划是使用一个脚本来启动这个尾部并轮询以查找文件是否被翻转。如果是,则杀死尾部并重新启动它。有什么更好的方法吗?
在 Linux 上,给定一个稀疏文件,如何使其成为非稀疏文件?
可以用 复制cp --sparse=never ...,但是如果文件是10G,洞是2G(即分配的空间是8G),如何让文件系统分配剩余的2G而不将原来的8G复制到新文件中?
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) 我正在尝试编写一个 conky 脚本来显示我的 MPD 专辑封面,专辑文件夹中的“folder.jpg”。我目前的计划是使用mpc -f %file%,它会打印出文件名和路径,然后切出实际的文件名(即最后一个 / 之后的所有内容),并将其用作 conky 图像对象的路径。
我在使用 grep/cut 时遇到了麻烦,特别是因为有些歌曲嵌套在两个文件夹中,而另一些则嵌套在一个文件夹中。(grep -m 1 . |cut -f1 -d /适用于单文件夹相册)
我该怎么办?有没有我想念的更简单的方法?
我正在尝试使用 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 行或说“办公室”的行。无论内容如何,我都需要每两行删除一行。
我已经在 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) Arch Wiki和其他站点只解释了“xmodmap -pke”中的前 6 列:
打印格式化为表达式的当前键映射表:
Run Code Online (Sandbox Code Playgroud)$ xmodmap -pke [...] keycode 57 = n N [...]每个键码后跟它映射到的键符。上面的例子表明键码 57 映射到小写 n,而大写 N 映射到键码 57 加 Shift。
表中的每个 keysym 列对应于特定的修饰键组合:
Run Code Online (Sandbox Code Playgroud)Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key并非所有的键符都必须设置,但要仅分配后一个键符,请使用 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) 如果我想尽可能小心和礼貌地终止进程,
我应该在终止命令中使用哪些信号,以什么顺序?
我想给程序任何时间来清理,如果它愿意的话,所以只是发送一个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) 我想删除在多个子目录中有大量文件的目录中的旧文件。
我正在尝试使用以下方法 - 经过一些谷歌搜索后,它似乎是推荐且有效的方法:
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
我的脚本有一些问题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)