小编Oth*_*eus的帖子

如何查看整个文件并等待更多数据添加到该文件中?

我想读取整个文件并让它等待输入,就像tail -f 但是显示完整的文件一样。

这个文件的长度总是会改变的,因为这是一个.log文件。

如果我不知道文件的长度,我该怎么做?

command-line tail

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

为什么 find with -delete 删除了我的 /save/ 目录中的文件,而 find without delete 无法找到它们?

我想删除当前目录树中的所有文件,除了save. 我运行了这个命令:

 find . \( -name save -prune \) -o -type f -ls | grep /save/
Run Code Online (Sandbox Code Playgroud)

它没有找到。但是当我运行这个命令时:

 find . \( -name save -prune \) -o -type f -delete
Run Code Online (Sandbox Code Playgroud)

/save/ 中的所有文件都消失了。我错过了什么?

find

21
推荐指数
1
解决办法
1318
查看次数

如何在 systemd+rsyslog 主机中恢复`/dev/log`?

在 RHEL7 上,systemd-journald接管了许多曾经由rsyslogd. 无论是由于 bug 还是这两个守护进程之间的冲突,有时/dev/log都会丢失。因此,依赖syslog(3)调用的程序将无法正常运行,例如,包括logger. 如何恢复/dev/log插座?

systemd-journald rsyslogd

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

如何永久禁用恢复模式的 root 密码提示,RHEL7

注意:我在这里询问了有关这些捆绑包的第 6 版的类似问题。请注意,7 使用 systemd 并且可能有不同的实现

在极少数情况下,RHEL 或 CentOS 7 系统因(例如)不当关机或启动时强制 fsck-check 失败而无法启动,控制台会提示用户输入 root 密码。

如何禁用密码检查并直接删除到 root-shell?

不可接受的答案:

  • 覆盖init内核命令行(即 grub)
  • 用/sbin/sushell 链接/替换/sbin/sulogin。(这会起作用,但它会引发安全框架的危险信号)。
  • 从其他设备启动

startup login rhel centos systemd

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

systemd 从哪里确定临时主机名?

在 RHEL 7.2 中,systemd启动并确定主机的主机名。如果/etc/hostname不可用(即,已删除)/etc/machine-info且不可用,并且内核未配置该信息(即sysctl's kernel.hostname),则为systemd主机分配一个“临时”主机名。问题是:它从哪里确定这一点?

主机最初是这样命名的。然后我克隆了主机(它是一个 VM)并清除了对该名称的所有引用。但是在启动过程中,很早就被设置成这样。

如果我启动,rescuemode我可以看到它很早就设置了主机名:

[    0.456076] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +AC
L +XZ)
[    0.456664] systemd[1]: Detected virtualization 'kvm'.
[    0.456955] systemd[1]: Running in initial RAM disk.
[    0.458496] systemd[1]: Set hostname to <badhostname.example.com>.
[    0.475394] systemd[1]: Expecting device dev-mapper-vgroot\x2dlvroot.device...
Run Code Online (Sandbox Code Playgroud)

在命令提示符下,它被设置为“临时”主机名:

# hostnamectl status
Transient hostname: badhostname.mydomain.com
...
Run Code Online (Sandbox Code Playgroud)

可能不是这样systemd:我什至在使用时遇到这个问题init=/bin/bash …

boot systemd

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

awk 或 sed 命令在特定行匹配正则表达式,如果成功则退出真,否则为假

我需要确定文件是否在某一行包含某个正则表达式,如果找到则返回 true(退出 0),否则返回 false。也许我想得太多了,但事实证明我的尝试有点笨拙。我有一个解决方案,但我正在寻找我没有想到的其他解决方案。我可以使用 perl,但我希望尽可能保持这种“轻量级”,因为它在 puppet 执行周期中运行。

这个问题很常见:​​在 RHEL6 中,screen 的打包方式将终端宽度限制为 80 个字符,除非您取消注释 132 行。此命令检查该行是否已修复:

 awk 'NR==132 && /^#termcapinfo[[:space:]]*xterm Z0=/ {x=1;nextfile} END {exit 1-x}' /etc/screenrc
Run Code Online (Sandbox Code Playgroud)

注意:如果文件少于 132 行,它必须以 false 退出。

我认为sed在这里会有帮助,但显然你必须做一些奇怪的技巧,比如空替换和分支。尽管如此,我还是希望看到一个 sed 解决方案来学习。也许还有一些我忽略的东西。

编辑 1:添加nextfile到我的 awk 解决方案中

编辑 2:基准 编辑 3:不同的主机(空闲)。编辑 4:错误地将 Gile 的 awk 时间用于优化运行。编辑 5:新长凳

基准

首先,请注意:wc -l /etc/screenrc216。不存在线路时的 50k 次迭代,以挂墙时间衡量:

  • 空操作:0.545s
  • 我原来的 awk 解决方案:58.417
  • 我编辑过的 awk 解决方案(使用 nextfile):58.364s
  • Giles 的 awk 解决方案:57.578s
  • 优化的 perl 解决方案 …

gnu-screen sed awk text-processing puppet

6
推荐指数
2
解决办法
2396
查看次数

尽管使用了 fsync,但未调用 NFS COMMIT 操作

我一直在进行一些详细的测试,以确定async模式下的NetApp NFS(v3 协议)服务器是否正确fsync响应客户端的请求。当我发现 Linux(RHEL 6,内核 2.6.32-431.5.1)从不发出 COMMIT 操作时,我遇到了困难!!!这个事实是通过使用nfsstat工具和nfstrace 工具发现的。没有一个 COMMIT。

这似乎违反了NFS 语义

在 close(2) 或 fsync(2) 系统调用期间,或在遇到内存压力时,将安全异步写入刷新到服务器时,版本 3 客户端使用 COMMIT 操作。

到底是怎么回事?

笔记:

挂载点肯定是用异步操作挂载的(这是默认的)。

为了生成 fsync 请求,我使用了 Postgresql 的test_fsync工具。它使用多种方式来发布基准测试的同步和报告,以便您可以确定哪种方式最适合您的系统。

时间差异test_fsync表明 fsync 函数在async挂载上执行的时间比sync挂载要长,大概是因为在sync挂载中,数据一直在刷新,只有在fsync调用时才会刷新数据。但是,时间差异非常不稳定,我可能只是遇到了性能瞬态问题。

使用该sync选项安装服务器没有任何改变。

更新:情节变厚了。

在 Ubuntu/Mint 17、Linux 内核 3.13.0(nfs 版本:1.2.8)上,我设置了一个环回挂载点,带有同步和异步选项,然后重新运行测试。速度差异肯定表明同步和异步之间存在差异。nfsstat显示在每次运行之后pg_fsync_test,恰好发生了1 个COMMIT。

跆拳道

linux rhel nfs

5
推荐指数
1
解决办法
1225
查看次数

为什么 Linux 工具不使用系统调用来获取当前时间?

我真的很想理解为什么我们的来宾 VM 没有“像他们应该那样”使用 kvm-clock 驱动程序。他们正在运行 RHEL 7.2、glibc-2.17、kern 3.10.0。诸如date和 之类的程序perl -e 'print time'获取当前时间,但无需进行系统调用即可。这证实使用Strace和ltrace和通过用gdb和组件跟踪通过该旁路进一步证实syscall和转而执行一些指令来调用rtdscp

这是 glibc 作者的优化尝试吗?有什么方法可以禁用它并强制 glibc 调用进行系统调用(缺少 LD_PRELOAD hacks)?

更新2016-10-14:

在查看了最新的POSIX 草案后,部分答案很清楚:有一种方法可以从 CPU 请求时钟,但是 GNU glibc 错误地将这种实现强加给了它的用户。解决方法是直接调用系统调用。(嘘)

如果定义了 _POSIX_CPUTIME,则实现应支持通过调用 clock_getcpuclockid() 获得的时钟 ID 值,它表示给定进程的 CPU 时间时钟。实现还应支持特殊的clockid_t 值CLOCK_PROCESS_CPUTIME_ID,它表示调用clock_ () 或timer_ () 函数之一时调用进程的CPU 时间时钟。

鉴于用户可以 是否有任何真正的论据反对将 ifclock_id设置为CLOCK_REALTIME,则应该使用系统调用?

linux clock syscalls

5
推荐指数
1
解决办法
5511
查看次数

我如何实际使用 kvm-clock 时钟驱动程序?

根据大量消息来源,KVM 时钟驱动程序加载如下所示:

 cat /sys/devices/system/clocksource/clocksource0/current_clocksource
Run Code Online (Sandbox Code Playgroud)

这些消息来源似乎都认为这必然意味着运行 Linux 的来宾 VM 正在从该时钟驱动程序中获取其时钟值。我的经验是事实并非如此。几个独立的测试表明,与主机时钟和网络时间源相比,来宾操作系统时钟每天关闭多达 3 秒。该hwclock程序也用于确认这一点。是否需要一些额外的步骤来获取 current_clocksource?还是其他地方的问题?还是应该使用tsc驱动程序?

linux kvm virtual-machine clock

5
推荐指数
0
解决办法
480
查看次数

允许 SSH 访问,但限制 root 访问一组给定的 IP

我想像往常一样允许所有用户使用 SSH,我想根据一组 IP 地址限制 root 的访问权限。因此,用户peterpaullary可以在任何地方登录,但root只能从主机登录a.b.c.dq.r.s.t

  • sshd_configAllowUsers将不适合这项工作。如果我指定任何内容,那么我必须指定所有用户。
  • 与手册页建议的方式不同AllowGroups,即使用户被列入白名单,也会无条件地进行检查AllowUsers;因此,如果我尝试通过将非 root 用户放入一个组来将非 root 用户列入白名单,然后将该组添加到AllowGroups,则身份验证仍然会失败,因为 root 不在有效的允许组中。
  • sshd_configDenyUsers可能的工作,如果我能以某种方式白名单设置的IP地址根已就其他拒绝。如果我只有一个 IP,它可能与!运营商合作。
  • 我可以使用optionsauthenticated_keys 文件中的密钥完全禁用root 密码来部分执行此操作。问题是这个文件不是系统策略,可能会被另一个(root 访问)用户覆盖。目前,这是我得到的最佳选择,我不喜欢它。另外,如果我取消root密码,我组中的某个人会生我的气。(如果我不使用 root 密码,有人可以使用来自任何 IP 的密码通过 root 登录。)
  • 我试图用 PAM 做到这一点,特别是通过pam_listfile,但我的方法似乎根本不起作用:

    auth       required     pam_sepermit.so
    auth       required     pam_listfile.so file=/etc/root-whitelist.txt sense=allow item=rhost apply=root
    auth       include      password-auth
    
    Run Code Online (Sandbox Code Playgroud)

    root-whitelist.txt文件里面是允许的IP地址,一行一行。我无法获得拒绝未列出的 …

security root pam sshd

3
推荐指数
2
解决办法
5729
查看次数

IPTables - 十六进制字符串块 DNS 查询

我有一个客户在我的 DNS 服务器上发送大量针对特定域的查询。我想阻止该查询,我找到了可以实现的十六进制字符串。那是字符串:

iptables -I INPUT 1 -p udp --dport 53 --match string --algo kmp --hex-string '|77 70 61 64 2e 64 6f 6d 61 69 6e 2e 6e 61 6d 65|' -j DROP
Run Code Online (Sandbox Code Playgroud)

——

0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 STRING match  "wpad.domain.name" ALGO name kmp TO 65535
Run Code Online (Sandbox Code Playgroud)

但似乎这不起作用,因为当我对该服务器查询该名称时,我可以看到回复并且计数器保持为零

root@banana:~# dig @5.172.120.59 wpad.domain.name

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @5.172.120.59 wpad.domain.name
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: …
Run Code Online (Sandbox Code Playgroud)

dns iptables

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