我想读取整个文件并让它等待输入,就像tail -f 但是显示完整的文件一样。
这个文件的长度总是会改变的,因为这是一个.log文件。
如果我不知道文件的长度,我该怎么做?
我想删除当前目录树中的所有文件,除了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/ 中的所有文件都消失了。我错过了什么?
在 RHEL7 上,systemd-journald接管了许多曾经由rsyslogd. 无论是由于 bug 还是这两个守护进程之间的冲突,有时/dev/log都会丢失。因此,依赖syslog(3)调用的程序将无法正常运行,例如,包括logger. 如何恢复/dev/log插座?
注意:我在这里询问了有关这些捆绑包的第 6 版的类似问题。请注意,7 使用 systemd 并且可能有不同的实现
在极少数情况下,RHEL 或 CentOS 7 系统因(例如)不当关机或启动时强制 fsck-check 失败而无法启动,控制台会提示用户输入 root 密码。
如何禁用密码检查并直接删除到 root-shell?
不可接受的答案:
init内核命令行(即 grub)在 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 …
我需要确定文件是否在某一行包含某个正则表达式,如果找到则返回 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/screenrc是216。不存在线路时的 50k 次迭代,以挂墙时间衡量:
我一直在进行一些详细的测试,以确定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。
我真的很想理解为什么我们的来宾 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,则应该使用系统调用?
根据大量消息来源,KVM 时钟驱动程序加载如下所示:
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
Run Code Online (Sandbox Code Playgroud)
这些消息来源似乎都认为这必然意味着运行 Linux 的来宾 VM 正在从该时钟驱动程序中获取其时钟值。我的经验是事实并非如此。几个独立的测试表明,与主机时钟和网络时间源相比,来宾操作系统时钟每天关闭多达 3 秒。该hwclock程序也用于确认这一点。是否需要一些额外的步骤来获取 current_clocksource?还是其他地方的问题?还是应该使用tsc驱动程序?
我想像往常一样允许所有用户使用 SSH,但我想根据一组 IP 地址限制 root 的访问权限。因此,用户peter,paul,lary可以在任何地方登录,但root只能从主机登录a.b.c.d和q.r.s.t。
sshd_config的AllowUsers将不适合这项工作。如果我指定任何内容,那么我必须指定所有用户。AllowGroups,即使用户被列入白名单,也会无条件地进行检查AllowUsers;因此,如果我尝试通过将非 root 用户放入一个组来将非 root 用户列入白名单,然后将该组添加到AllowGroups,则身份验证仍然会失败,因为 root 不在有效的允许组中。sshd_config的DenyUsers可能的工作,如果我能以某种方式白名单设置的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地址,一行一行。我无法获得拒绝未列出的 …
我有一个客户在我的 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)