小编Cit*_*ght的帖子

SIGTERM 偶尔不工作

我们使用常规/etc/init.d/jboss stop来停止我们机器上的 jboss。但有时,它不会停止这个过程,我们会得到下面粘贴的内容。当发生这种情况时,我们用kill -9. 这可能是应用程序代码中的错误还是可以修复的操作系统级别问题?

waiting for processes to stop/usr/local/jboss/bin/run.sh

waiting for processes to stop/usr/local/jboss/bin/run.sh

waiting for processes to stop/usr/local/jboss/bin/run.sh
/usr/local/jboss/bin/run.sh

Timeout: Shutdown command was sent, but process is still running with PID 7252
[root@mercury02 ~]#  
Run Code Online (Sandbox Code Playgroud)

PS:我打开了 /etc/init.d/jboss 文件,正如预期的那样,它kill -15在使用stop.

kill rhel signals jboss

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

字符在 vi 中可见,但在 cat 中不可见。

我有一个 300 行的文件,文件中的^@每个字符之间都有字符。

(出于安全原因,我无法发布全部内容,所以我只粘贴了第一行)

[mercury@app01 ftp_logs]$ cat cl.txt
2015-01-22 03:00:01; local;
Run Code Online (Sandbox Code Playgroud)

现在,当我vi打开文件时,我看到以下相同的内容:

2^@0^@1^@5^@-^@0^@1^@-^@2^@2^@ ^@0^@3^@:^@0^@0^@:^@0^@1^@;^@ ^@l^@o^@c^@a^@l^@;^@

由于cat不显示^@字符,自然我认为对某个字符串进行 grep 可以在cat.

[mercury@app01 ftp_logs]$ cat cl.txt
2015-01-22 03:00:01; local;
[mercury@app01 ftp_logs]$ cat cl.txt | grep local
[mercury@app01 ftp_logs]$
Run Code Online (Sandbox Code Playgroud)

用 替换空字节后sed,文件现在可以读取vigrep从 返回结果cat

[mercury@app01 ftp_logs]$ sed -i 's/\x0//g' cl.txt
[mercury@app01 ftp_logs]$ cat cl.txt | grep local
2015-01-22 03:00:01; local;
[mercury@app01 ftp_logs]
Run Code Online (Sandbox Code Playgroud)

问题:

1) 为什么grep在替换空字节之前不起作用,因为没有显示空字节。这是否意味着即使没有显示在终端中也grep看到了 …

grep character-encoding cat

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

SWAP 失败的影响

一位团队成员在我们的一台需要更多交换的机器上创建了一个交换文件。他在 SSD 上的文件系统上创建了它。虽然我们的服务器没有进行很多交换,并且可能安全地将交换文件保存在 SSD 上,其有限的写入周期,但我很想知道如果使用交换的服务器上的 SWAP 分区失败会发生什么(比如 SWAP 驱动器)死了)。

  • 正在运行的机器上的 SWAP 分区故障是灾难性的吗?或者它会像某人发出的一样被处理,swapoff -a尽管没有刷新缓冲区和缓存。

  • 我假设在 SWAP 上有其页面的程序可能会崩溃。

  • 如果我要重新启动一台 SWAP 失败的机器,在 fstab 中注释掉交换条目是否足以防止在启动时卡住?我可以添加一个新的交换分区并更新 fstab 条目,然后它会像什么也没发生一样重新启动吗?

swap

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

通过创建软链接运行 sudo 受限命令

我可以sudo访问我们的一台测试机器,以下是对我限制的命令:

user_sree@sel8585:~> sudo -l
user_sree's password:
User user_sree may run the following commands on this host:
    (ALL) ALL, (ALL) !/bin/sh, !/bin/bash, !/bin/ksh, (ALL) !/bin/su, (ALL) !/usr/bin/passwd, !/usr/sbin/useradd, !/usr/sbin/userdel, !/usr/sbin/usermod,
    !/usr/sbin/visudo
Run Code Online (Sandbox Code Playgroud)

这说我不能运行visudo/usr/sbin/visudo. 我证实了这一点:

user_sree@sel8585:~> sudo /usr/sbin/visudo
Sorry, user user_sree is not allowed to execute '/usr/sbin/visudo' as root on sel8585.
Run Code Online (Sandbox Code Playgroud)

现在,出于好奇,我创建了一个符号链接/usr/sbin/visudo

ln -s /usr/sbin/visudo myvi`
Run Code Online (Sandbox Code Playgroud)

我尝试通过调用这个软链接来访问 sudoers 文件,它工作正常。

user_sree@sel8585:~> sudo /home/user_sree/myvi
myvi: /etc/sudoers.tmp unchanged
Run Code Online (Sandbox Code Playgroud)

同样,我能够通过创建软链接来运行其他受限制的命令。

如果我要sudo为他人配置,如何阻止他人这样做?我不想限制他们创建软链接。

user_sree@sel8585:~> sudo -l | grep bash …
Run Code Online (Sandbox Code Playgroud)

security sudo

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

将大写变量分配给命令

在尝试破译我现在公司的前雇员编写的一些脚本时,在许多脚本中,我遇到了以下语句,这些语句将变量分配给一些命令,如下所示:

CAT=cat
GREP=grep
SED=sed
Run Code Online (Sandbox Code Playgroud)

在脚本的后面,我看到他们使用了这些变量而不是常规命令:

$GREP -v "^#" `dirname $0`/abcdfilename | while read line
do
<some loop operations>
done
Run Code Online (Sandbox Code Playgroud)

我没有看到使用这个变量而不是grep直接使用的意义。我的问题是:

  • 以这种方式执行 grep 或 sed(在我们的例子中)是否有意义?
  • 这是某人试图编写脚本的结果,目的是让其他人更难理解吗?
  • 或者这只是一个错误脚本的例子?

ksh variable-substitution

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

使用 sed 删除除一条注释之外的注释行

不太熟悉 的复杂用法sed,但我现在有这个要求。我有一个文件 1.txt,其内容格式如下:

sree@amby01:/home/sree : cat 1.txt
SSL
 this first line
#comment line
 second line
# third comment
# line nline
#ApiText
lkjfl
# my line
your line
sree@amby01:/home/sree :
Run Code Online (Sandbox Code Playgroud)

现在,我想删除 block 之间的注释行SSL....#ApiText,但#ApiText不应删除该行。

输出应如下所示:

SSL
this first line
 second line
#ApiText
Run Code Online (Sandbox Code Playgroud)

它是一个 bash shell。我知道如何单独删除注释行,但不知道如何删除注释行,除非注释后面跟着某个文本。我只能使用sed.

sed

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