我有一组需要查看的日志文件,我想一次在同一文件上搜索特定字符串 这可能吗?目前我正在使用
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
Run Code Online (Sandbox Code Playgroud)
如何使用它并一次搜索多个文件的字符串?如果这是需要编写脚本的内容,有人可以提供一个简单的脚本来执行此操作吗?
我注意到使用以下内容重新启动服务:
service sshd restart
Run Code Online (Sandbox Code Playgroud)
非常类似于执行以下操作:
pkill -HUP sshd
Run Code Online (Sandbox Code Playgroud)
但是,pkill 会关闭我的 ssh 会话,在该会话中,服务重新启动会使其保持打开状态。这引出了我的问题,即服务重启是否会像 pkill 命令一样发送真正的 HUP?如果他们做同样的事情,为什么服务重启让我的 ssh 会话保持打开状态但 pkill 关闭它?
我的分区表如下所示:
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 32505855 16251904 83 Linux
/dev/sda2 32505856 33554431 524288 83 Linux
Run Code Online (Sandbox Code Playgroud)
当我在 上放置文件系统时sda2
,它抛出了这个错误:
sudo mkfs -t ext4 /dev/sda2
mke2fs 1.42.9 (4-Feb-2014)
mkfs.ext4: inode_size (128) * inodes_count (0) too big for a
filesystem with 0 blocks, specify higher inode_ratio (-i) or lower inode count (-N).
Run Code Online (Sandbox Code Playgroud)
我已经尝试了扩展分区和主分区并得到相同的错误。我有 Ubuntu 14.04TLS。该怎么办?
我能够使用以下命令存档和压缩文件夹:
tar -cvfz example2.tgz example1
Run Code Online (Sandbox Code Playgroud)
然后我删除了 example1 文件夹并尝试使用以下命令解压缩存档:
tar -xvfz example2.tgz
Run Code Online (Sandbox Code Playgroud)
并尝试
tar -zxvf example2.tgz
Run Code Online (Sandbox Code Playgroud)
这些命令都没有工作。返回的错误是:
gzip: example2.tgz: not in gzip format
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
它显然使用了 gzip 压缩,因为我z
在初始命令中传递了 tar限定符。我究竟做错了什么?我在 Ubuntu 14.0.4
我们使用的日志文件的行条目以日期/时间格式开头,例如:
20150408 13:29:28 <rest of text>
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能grep
获得日期范围?
比如说所有20150408 13:29:28
以20150408 17:55:02
?开始和结束的行?
将grep
是适合工作的工具或将别的更好样sed
?
我需要在某个文件夹中搜索最新创建的文件并 grep 模式的内容。到目前为止,我已经使用此命令取得了成功:
find /var/log/folder -type f -printf '%T+ %p\n' | sort | tail -n1 | xargs grep 'string to find'
Run Code Online (Sandbox Code Playgroud)
这确实找到了具有匹配项的最新文件,但我在标准输出中得到了意外的一行。
$ find /var/log/folder -type f -printf '%T+ %p\n' | sort | tail -n1 | xargs grep 'string to find'
grep: 2016-05-12+20:01:59.0570667340: No such file or directory
/var/log/folder/file:string to find
Run Code Online (Sandbox Code Playgroud)
如何更改我的命令,使其不给我“没有这样的文件或目录”行?
我正在使用以下格式的日志文件:
Oct 12 01:28:26 server program: 192.168.1.105 text for 1.105
Oct 12 01:30:00 server program: 192.168.1.104 text for 1.104
Oct 12 01:30:23 server program: 192.168.1.103 text for 1.103
Oct 12 01:32:39 server program: 192.168.1.101 text for 1.101
Oct 12 02:28:26 server program: 192.168.1.105 text for 1.105
Oct 12 02:30:00 server program: 192.168.1.104 text for 1.104
Oct 12 02:30:23 server program: 192.168.1.103 text for 1.103
Oct 12 02:32:39 server program: 192.168.1.101 text for 1.101
Run Code Online (Sandbox Code Playgroud)
我需要实现这一点:
Oct 12 02:28:26 server program: 192.168.1.105 …
Run Code Online (Sandbox Code Playgroud) 我有一个服务在关闭时并不总是删除其 pid 文件。所以当它再次启动时就会失败。我的系统是 RHEL 7.2 系统,我想要做的是让系统在启动之前查找该文件,如果找到则将其删除。我需要使用 systemctl 完成所有这些操作,或者需要在有人运行之前进行systemctl start <service>
。我有我想要使用的命令,我只是不确定如何将其与 systemctl 集成以实现无缝过程。这是命令:
[ -f /var/run/dir/file.pid ] && echo "Found and removing" && rm -f /var/run/dir/file.pid || echo "Not Found"
Run Code Online (Sandbox Code Playgroud)
是否可以将其粘贴到位于 /usr/lib/systemd/system/ 的服务文件中?如果是这样,我会把它放在哪里?这是需要进入的文件的内容。我们将其称为 dns.service。
[Unit]
Description=DNS daemon
BindTo=dns.service
After=syslog.target network.target dns.service
ConditionPathExists=/etc/dns/dns.conf
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/dns
ExecStart=/usr/sbin/dns -u dns -g dns -f /etc/dns/dns.conf -d -P 17500
Restart=on-abort
[Install]
WantedBy=network.target
Run Code Online (Sandbox Code Playgroud)
这看起来是完成此任务的正确方法还是有更好的方法?
我必须编写一个脚本,该脚本将通过 ssh 进入设备以运行“show running-config”等命令,并将输出保存到本地计算机上的文件中。我已经从命令行完成了类似的任务,并将文件保存到我的本地系统。例如,
ssh test@192.168.142.15 ls > ls_from_remotes_sys
Run Code Online (Sandbox Code Playgroud)
文件 ls_from_remotes_sys 位于我的本地系统上。然而,我需要编写这个脚本,而我知道如何做到这一点的唯一方法是使用expect。所以我整理了这个:
#!/usr/bin/expect -f
spawn ssh test@192.168.142.15 ls > ls_from_remotes_sys
expect "test@192.168.142.15's password:"
send "password\r"
interact
Run Code Online (Sandbox Code Playgroud)
Expect 脚本可以工作,但文件会保存到远程系统,这不是我想要的。
问题 1 - 为什么文件从命令行保存到本地系统,为什么用expect保存到远程系统?
问题 2 - 有没有办法将文件发送到我的本地系统?(ssh 返回不是一个选项)
我在想,也许我可以让脚本将命令结果输出到屏幕上,而不是重定向到文件。所以,
问题 3 - 如果我这样做,如何从远程系统捕获屏幕上的标准输出并将其发送到本地系统上的文件?
我有一个包含 2 列数据的文件。我需要从每列中找到具有公共字符串的行。我只对逐行的匹配感兴趣,而不是来自第 1 列第 10 行和第 2 列第 3 行的匹配字符串。
我的文件:
023q 023q023q
0adc 0adc0adc
123456 123456
abcde abcdefg
08tgdf 90alkhg
Run Code Online (Sandbox Code Playgroud)
因此,在此示例中,除最后一行之外的每一行都共享一个公共字符串,该行的一部分或这些行是相同的,这就是我需要找到的。我已经从 2 个文件中看到了关于常见字符串的大量问题和线索,但到目前为止我的确切用例还没有。
更新:每行至少需要匹配 4 个字符。