我可以使用日志分析器,但通常我需要解析最近的网络日志以查看当前发生的情况。
我有时会做一些事情,比如找出请求某个文件的前 10 个 ip
cat foo.log | grep request_to_file_foo | awk '{print $1}' | sort -n | uniq -c | sort -rn | head
Run Code Online (Sandbox Code Playgroud)
你的工具箱里有什么?
注意:这不是一个真正的问题,因为我已经找到了答案,但是由于我在这里不容易找到它,所以我将其发布,以便它可以使其他人受益。
问题:如何读取连接的 PEM 文件作为 apache/mod_ssl 指令SSLCACertificateFile使用的文件?
答案(原文)(来源):
cat $file|awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
Run Code Online (Sandbox Code Playgroud)
如果末尾有一个空行,这可能会留下一个空文件,例如openssl pkcs7 -outform PEM -in my-chain-file -print_certs. 为防止出现这种情况,请在打印前检查行的长度:
cat $file|awk 'split_after==1{n++;split_after=0}
/-----END CERTIFICATE-----/ {split_after=1}
{if(length($0) > 0) print > "cert" n ".pem"}'
Run Code Online (Sandbox Code Playgroud)
回答 29/03/2016:
按照@slugchewer answer,csplit可能是一个更清晰的选择:
csplit -f cert- $file '/-----BEGIN CERTIFICATE-----/' '{*}'
Run Code Online (Sandbox Code Playgroud) 一个 bash 命令输出这个:
Runtime Name: vmhba2:C0:T3:L14
Group State: active
Runtime Name: vmhba3:C0:T0:L14
Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14
Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14
Group State: active
Runtime Name: vmhba2:C0:T2:L14
Group State: active
Run Code Online (Sandbox Code Playgroud)
我想把它用管道输送到某个东西上,使它看起来像这样:
Runtime Name: vmhba2:C0:T1:L14 Group State: active
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]
Run Code Online (Sandbox Code Playgroud)
即删除所有其他换行符
我试过了,... |tr "\nGroup" " "但它删除了所有换行符并吃掉了其他一些字母。谢谢
有没有一种简单的方法来获取 .ssh/authorized_keys 中输入的所有指纹的列表?.ssh/authorized_keys2 文件?
ssh-keygen -l -f .ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
只会返回第一行/条目/公钥的指纹
用 awk 破解:
awk 'BEGIN {
while (getline < ".ssh/authorized_keys") {
if ($1!~"ssh-(r|d)sa") {continue}
print "Fingerprint for "$3
system("echo " "\""$0"\"> /tmp/authorizedPublicKey.scan; \
ssh-keygen -l -f /tmp/authorizedPublicKey.scan; \
rm /tmp/authorizedPublicKey.scan"
)
}
}'
Run Code Online (Sandbox Code Playgroud)
但是有没有更简单的方法或我没有找到的 ssh 命令?
是否有一些简单的方法可以找出我网络上所有机器的 mac 地址,而不是对每个机器进行 SSH,ifconfig | grep HWaddr如果网络上有 300 台机器,我真的需要一些简单的解决方案。
有没有更有效的方法来检索 Linux 中网卡的 MAC 地址?
这有效:
ip link show dev eth0 | awk ' /link\/ether/ { print $2 }'
Run Code Online (Sandbox Code Playgroud)
但可以通过以下方式找到:
cat /sys/net/something
Run Code Online (Sandbox Code Playgroud) 我有一个 30gb 的磁盘分区(认为dd if=/dev/sda1 of=diskimage),我需要从中恢复一些文本文件。数据雕刻工具foremost只能处理具有明确定义的标题的文件,即不能处理纯文本文件,所以我依靠我的好朋友strings.
strings diskimage > diskstrings.txt 生成了一个 3gb 文本文件,其中包含一堆字符串,其中大部分是无用的东西,与我真正想要的文本混合在一起。
大多数垃圾往往是非常长的,不间断的胡言乱语。我感兴趣的东西保证小于16kb,所以我将按行长过滤文件。这是我用来执行此操作的 Python 脚本:
infile = open ("infile.txt" ,"r");
outfile = open ("outfile.txt","w");
for line in infile:
if len(line) < 16384:
outfile.write(line)
infile.close()
outfile.close()
Run Code Online (Sandbox Code Playgroud)
这有效,但供将来参考:是否有任何神奇的单行咒语(想想awk, sed)可以按行长度过滤文件?
我想从中获取数字rating作为输出
# nc localhost 9571
language:
language:en_ZA.UTF-8
language:en_ZW.UTF-8
session-with-name:Ubuntu Classic (No effects):gnome-session --session=2d-gnome
session-with-name:Ubuntu (Safe Mode):gnome-session -f --session=2d-gnome
session-with-name:Ubuntu Classic:gnome-session --session=classic-gnome
xsession:/etc/X11/Xsession
rating:94
Run Code Online (Sandbox Code Playgroud)
我可以这样做
# nc localhost 9571 | grep rating | cut -d: -f2
94
Run Code Online (Sandbox Code Playgroud)
但可以awk用来代替更简单的解决方案吗?
我正在尝试将 ini 文件转换为 bash 数组变量。示例ini如下:
[foobar]
session=foo
path=/some/path
[barfoo]
session=bar
path=/some/path
Run Code Online (Sandbox Code Playgroud)
所以这些变成:
session[foobar]=foo
path[foobar]=/some/path
session[barfoo]=bar
Run Code Online (Sandbox Code Playgroud)
等等。
现在,我只能想出这个命令
awk -F'=' '{ if ($1 ~ /^\[/) section=$1; else if ($1 !~ /^$/) print $1 section "=" $2 }'
Run Code Online (Sandbox Code Playgroud)
此外,另一个问题是,它没有考虑附近的空间=。我认为sed可能更适合这项工作,但我不知道如何在sed.
那么知道如何做到这一点吗?
tldr:我怎样才能让 iptables 只显示一个链?
我可以让 iptables 只显示一个表,但一个表由多个链组成。我需要找到链 INPUT 中的最后一条规则(通常但不总是拒绝所有规则)。
我尝试过 awk 甚至一些 grep,但我在这些方面的技能肯定会减弱。我试过使用 awk 只获取一个段落,但这似乎不适用于输出,iptables --line-numbers -n -L -t filter也许是因为那些空行并不是真正的空白。
我正在寻找可以安装在 CentOS 6 最小环境中的任何普通 gnu 工具的解决方案。