小编Cit*_*ght的帖子

为什么 `[` 是 shell 内建的,而 `[[` 是 shell 关键字?

据我所知,[[是 的增强版本[,但是当我将其[[视为关键字并[显示为内置时,我感到困惑。

[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
Run Code Online (Sandbox Code Playgroud)

TLDP

内置命令可能是同名系统命令的同义词,但 Bash 在内部重新实现了它。例如,Bash echo 命令与 /bin/echo 不同,尽管它们的行为几乎相同。

关键字是保留字、标记或运算符。关键字对 shell 有特殊的意义,实际上是 shell 语法的构建块。例如,for、while、do 和 ! 是关键字。与内置函数类似,关键字被硬编码到 Bash 中,但与内置函数不同的是,关键字本身不是命令,而是命令结构的子单元。[2]

难道不应该使双方[[[关键字?有什么我在这里想念的吗?此外,此链接再次确认两者[[[应该属于同一类。

shell shell-builtin

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

进程的实际内存使用情况

以下是我服务器上mysql和的内存使用情况apache。根据pmapsay的输出,mysql正在使用大约 379M,apache正在使用 277M。

[root@server ~]# pmap 10436 | grep total
 total           379564K

[root@server ~]# pmap 10515 | grep total
 total           277588K
Run Code Online (Sandbox Code Playgroud)

将其与 的输出进行比较top,我发现值几乎匹配。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10515 apache    20   0  271m  32m 3132 S  0.0  6.6   0:00.73 /usr/sbin/httpd
10436 mysql     20   0  370m  21m 6188 S  0.0  4.3   0:06.07 /usr/libexec/mysqld --basedir=....
Run Code Online (Sandbox Code Playgroud)

现在这些值绝对不是这两个进程的当前内存使用情况,因为如果是的话,它会超过ram我系统上的 512M ,我明白这些是分配给这两个进程的页面大小的事实,而不是真的他们积极使用的内存大小。现在,当我们使用 时pmap -x …

memory virtual-memory

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

BOOTPROTO=无 | 静态 | dhcp 和 /etc/resolv.conf

当它BOOTPROTO=none/etc/sysconfig/network-scripts/ifcfg-eth0文件中说时是什么意思。

我记得曾经有过,BOOTPROTO=static并且非常清楚和直接地告诉我们,如果IPADDR=<x.x.x.x>给出an ,服务器将提供指定的 IP 地址。同样,BOOTPROTO=dhcp会寻找 DHCP 服务器以获取动态 IP 地址。红帽说:

 BOOTPROTO=protocol
    where protocol is one of the following:

        none — No boot-time protocol should be used.
        bootp — The BOOTP protocol should be used.
        dhcp — The DHCP protocol should be used.
Run Code Online (Sandbox Code Playgroud)
  • 这是否意味着如果我们不在 ifcfg-eth0 文件中指定 IP,它将查找 DHCP 服务器,如果指定了 IP,它会选择该静态 IP?

  • 即使IPADDR=在 BOOTPROTO 设置为 none 时指定了 IP 地址,它寻找 DHCP 服务器并修改 /etc/resolv.conf 的可能性有多大?

背景:- 我们移动了数据中心,不得不更改许多服务器中的 IP 地址。我们已经修改/etc/resolv.conf了新 DNS 服务器的 …

networking rhel resolvconf

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

如何以非 root 用户身份启动“屏幕”会话

有没有办法可以在我的 RHEL 机器上以非 root 用户身份打开一个新的“屏幕”会话?当我尝试以非 root 用户身份使用“screen”命令打开一个新屏幕时,它失败了,我收到以下消息:

Cannot open your terminal '/dev/pts/2' - please check.
Run Code Online (Sandbox Code Playgroud)

我进行了一些研究,发现有人建议更改 /dev/pts 上的权限,以授予非 root 用户(试图打开屏幕的用户)读/写访问权限。尽管它可能有效,但它看起来并不是一个巧妙的解决方案。是否有允许非 root 用户打开屏幕会话的“合法”方式?

编辑:我的 RHEL 5.5、6.2 和 6.5 机器上有这个问题。所有这些盒子上的屏幕版本都是“屏幕版本 4.00.03 (FAU) 23-Oct-06”。

PS:- 我知道我可以以 root 和 'su' 身份打开一个屏幕会话来启动我的命令/进程,但这不是我想要的。

users gnu-screen not-root-user

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

recvmsg 返回“EAGAIN(资源暂时不可用)”

在最近的服务器移动之后,我们正在解决这个奇怪的问题,即其中一个服务器无缘无故失去 n/w 连接并在几秒钟或几分钟内重新获得连接。在/var/log/messages dmesg或 mcelogs中没有它的踪迹。在试图调试这个时,我发出了strace ping google.com它说= -1 EAGAIN (Resource temporarily unavailable)

有人可以了解这条消息的含义吗?ping解析 google.com,但它不会显示任何响应,就好像 ping 回复在防火墙中设置为拒绝一样。

sendmsg(3, {msg_name(16)={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("74.125.131.113")}, msg_iov(1)=[{"\10\0005\321?i\0\3v\301lT\0\0\0\0\335\331\3\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64}], msg_controllen=0, msg_flags=0}, 0) = 64
recvmsg(3, 0x7fffd48b9cc0, 0)           = -1 EAGAIN (Resource temporarily unavailable)
Run Code Online (Sandbox Code Playgroud)

PS:这是一个 VMware VM,运行 RHEL 6.5

networking ping

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

以人性化的格式显示 cron 作业时间

有没有显示的方法或者有什么工具可以解析 crontab 表达式并以人性化的方式显示它?

10 6 * * * sh /usr/local/crons/file_check.sh

例如,对于上面的 cron,我希望上面的 cronjob 上的时间显示为

06:10 hrs

或以任何其他人性化的方式。

目前,我决定编写一个 shell 脚本或 python 来操作 的输出crontab -l以非技术人员可以理解下一次运行作业的方式显示它,但是如果有直接的方法,它会很棒。

PS:- 首选 bash 或 python 解决方案。

cron python shell-script

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

sed/bash 区别对待左右方括号

我有一个包含以下内容的文件:

[root@server list]# cat filenames.txt
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB]
[root@qa4app01 list]#
Run Code Online (Sandbox Code Playgroud)

我想这是一个名单,我python脚本使用,所以我试图改变AAA''AAA''BBB'BBB',我想我会用sed和替换[[']']

为了确认,我试过这个:

[root@server list]# cat filenames.txt | sed "s/]/']/g"
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','MENSCOGH','TESTENT','DORASINE','LOKAWINK','BBB']
[root@server list]#
Run Code Online (Sandbox Code Playgroud)

它起作用了,我能够]']. 因此,因为AAA我只需要更改用左方括号替换右方括号和 sed 中的单引号并尝试以下操作:

[root@server list]# cat filenames.txt | sed -e "s/]/']/g" -e "s/[/['/g"
sed: -e expression #2, char 8: unterminated `s' command
[root@server list]#
Run Code Online (Sandbox Code Playgroud)

好的。我认为由于某种原因附加sed命令无法正常工作,为了检查这一点,我分别尝试sed了左方括号:

[root@server list]# cat filenames.txt | sed …
Run Code Online (Sandbox Code Playgroud)

shell bash sed quoting

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

“task mysqld:xxx 阻塞超过 120 秒”是什么意思?

我们正在对一个 MySQL 问题进行故障排除,其中一些查询需要很长时间才能完成,我在 /var/log/messages 中看到了许多这样的条目:

Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616327] INFO: task mysqld:4123 blocked for more than 120 seconds.
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616525] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616813] mysqld        D  000000000000000d     0  4123   3142 0x00000080
Run Code Online (Sandbox Code Playgroud)

这是什么意思?它如何影响 MySQL 线程(4123 是线程 ID?)

/proc/sys/kernel/hung_task_timeout_secs我现在检查时的值是:

$ cat /proc/sys/kernel/hung_task_timeout_secs
120
Run Code Online (Sandbox Code Playgroud)

我特别想知道它如何影响流程?

我在一个论坛上读到,这意味着当该进程占用太多内存时会发生这种情况。

process memory mysql linux-kernel

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

统计、块和扇区大小 - ext4

在阅读文件如何存储在文件系统中时,我创建了一个大小为 217 字节的测试文件。检查stat这个文件的输出,我看到这个文件占用了8个块。最初我认为,当块大小为 4096 字节且值Blocks:18. 然后我读了thisthisthis,并意识到该Blocks:值是文件占用的512字节空间的数量。由于一个块的最小大小是 4096 字节,即使是 2 字节大小的文件也会占用 8 个块(因为 4096/512 = 8)。

[root@server ~]# stat smallfile.txt
  File: `smallfile.txt'
  Size: 217             Blocks: 8          IO Block: 4096   regular file
Run Code Online (Sandbox Code Playgroud)

我在这里读到:

“每个扇区存储固定数量的用户可访问数据,传统上硬盘驱动器 (HDD) 为 512 字节,CD-ROM 和 DVD-ROM 为 2048 字节。较新的 HDD 使用 4096 字节 (4 KiB) 扇区,这是众所周知的作为高级格式 (AF)。”

我可以访问使用过的扇区大小为 512 字节的 HDD 的所有系统。所以我相信st_blocks(如我给出的第二个和第三个超链接所解释的)与硬盘驱动器的扇区大小相匹配?所以问题是:

  • 将来,如果我要在扇区大小为 4096 字节的 HDD 上拥有相同的 217 …

filesystems stat

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

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
查看次数