小编Mar*_*tin的帖子

理解“IFS= read -r line”

我显然明白可以为内部字段分隔符变量添加值。例如:

$ IFS=blah
$ echo "$IFS"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

我也明白这read -r line会将数据保存stdin到名为的变量line

$ read -r line <<< blah
$ echo "$line"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

但是,命令如何分配变量值?它是否首先存储来自stdinto 变量的数据line,然后赋予lineto 的值IFS

bash shell-script

94
推荐指数
3
解决办法
10万
查看次数

cron 忽略“.bashrc”和“.bash_profile”中定义的变量

我在 /etc/crontab 文件中定义了“SHELL”变量:

[martin@martin ~]$ grep SHELL /etc/crontab 
SHELL=/usr/local/bin/bash
[martin@martin ~]$ file /usr/local/bin/bash
/usr/local/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 8.0 (800107), stripped
[martin@martin ~]$ 
Run Code Online (Sandbox Code Playgroud)

此外,我在 /etc/crontab 文件中的所有脚本都是在用户“martin”下启动的。但是/home/martin/.bash_profile(用于登录 shell)和/home/martin/.bashrc(用于非日志 shell)包含一些变量,这些变量在 cron 作业的情况下被忽略,但在我登录机器时使用SSH 或打开新的 bash 会话。为什么 cron 忽略这些变量?cron 不是简单地以用户“martin”的权限执行“/usr/local/bin/bash my-script.sh”吗?

bash cron

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

了解 Linux 中的日志记录

据我了解,Linux 内核会记录到/proc/kmsg文件(主要是与硬件相关的消息)和/dev/log套接字吗?还有其他地方吗?其他应用程序是否也能够向/proc/kmsg或发送消息/dev/log?最后但并非最不重要的,我是正确的,这是系统日志守护程序(rsyslog现在syslog-ng的),该检查的消息来自这两个地方,然后分发到那些像各种文件/var/log/messages或者/var/log/kern.log甚至是中央系统日志服务器?

syslog-ng rsyslog syslog linux-kernel

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

理解“apt-cache policy”的输出

apt-cache policy sudo在安装之前和之后运行sudo

安装前:

# apt-cache policy sudo
sudo:
  Installed: (none)
  Candidate: 1.8.5p2-1+nmu1
  Version table:
     1.8.5p2-1+nmu1 0
        500 http://ftp.se.debian.org/debian/ wheezy/main i386 Packages
#
Run Code Online (Sandbox Code Playgroud)

安装后:

# apt-cache policy sudo
sudo:
  Installed: 1.8.5p2-1+nmu1
  Candidate: 1.8.5p2-1+nmu1
  Version table:
 *** 1.8.5p2-1+nmu1 0
        500 http://ftp.se.debian.org/debian/ wheezy/main i386 Packages
        100 /var/lib/dpkg/status
# 
Run Code Online (Sandbox Code Playgroud)

如何理解数字500和100?这些是某种状态代码吗?另外,安装包版本前面的***是什么意思?

apt

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

X 客户端通过 SSH 转发“无法打开显示:本地主机:11.0”

我在运行 SSH 服务器的远程机器上启用了 X 转发:

# grep -i forward /etc/ssh/sshd_config 
X11Forwarding yes
# 
Run Code Online (Sandbox Code Playgroud)

在本地机器上,我已经启动了带有-X标志的SSH 客户端,该标志指示在远程机器上运行的 SSH 服务器设置 X 服务器代理。此外,它还会创建$DISPLAY指向此代理的变量并调用xauth安装代理密钥,该密钥可在远程计算机上对此 X 服务器代理进行身份验证:

# echo "$DISPLAY"
localhost:11.0
# xauth list | grep 11
A58/unix:11  MIT-MAGIC-COOKIE-1  39324086672d1ae35e373476c3891a77
# 
Run Code Online (Sandbox Code Playgroud)

但是,远程机器上的 X 客户端无法正常启动:

# wireshark 

(wireshark:10083): Gtk-WARNING **: cannot open display: localhost:11.0
# xterm
Warning: This program is an suid-root program or is being run by the root user.
The full text of the error …
Run Code Online (Sandbox Code Playgroud)

ssh x11 sshd

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

在包装脚本中执行 exec 的原因

我看过包装脚本示例,简而言之如下:

#!/bin/bash

myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""

exec "$myprog" "$@"
Run Code Online (Sandbox Code Playgroud)

如上所示,它们exec几乎立即用$myprog. 一个人可以在没有exec

#!/bin/bash

myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""

"$myprog" "$@"
Run Code Online (Sandbox Code Playgroud)

在最后一个示例中,启动了一个新的 bash 实例,然后$myprog作为 bash 实例的子进程启动。

第一种方法有什么好处?

shell scripting bash shell-script exec

35
推荐指数
2
解决办法
7618
查看次数

“netstat -s”的替代方案

netstat -s 打印出许多非常详细的协议统计信息,例如收到的 TCP 重置消息数或发送的 ICMP“回显请求”消息数或由于丢失路由而丢弃的数据包数。

netstat现在在 Linux 中被认为已弃用时,还有其他选择吗?

ss -s与提供的统计数据相比,由 提供的统计数据是肤浅的netstat

linux netstat iproute

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

如果我以“/bin/bash”或“/usr/bin/env bash”开始 bash 有什么区别?

在 shell 脚本中,在 shebang( #!) 行指定语言解释器。据我所知,建议使用,#!/usr/bin/env bash因为env它总是位于/usr/bin目录中,而位置bash可能因系统而异。但是,如果bash直接使用/bin/bash或通过env实用程序启动,是否有任何技术差异?另外,如果我没有为 指定任何变量envbash则在未修改的环境中启动,我是否正确?

bash environment-variables

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

什么是来自接口的热插拔事件?

根据 Debian网络设置文档中的allow-hotplug <interface_name>节,/etc/network/interfaces当内核从接口检测到热插拔事件时,文件中的节会启动一个接口。这个热插拔事件是什么?

networking debian network-interface

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

/etc/networks 文件的实际使用

/etc/networks文件的实际用途是什么?据我了解,可以在此文件中为网络命名。例如:

root@fw-test:~# cat /etc/networks
default         0.0.0.0
loopback        127.0.0.0
link-local      169.254.0.0
google-dns      8.8.4.4
root@fw-test:~# 
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在ip实用程序中使用此网络名称,则它不起作用:

root@fw-test:~# ip route add google-dns via 104.236.63.1 dev eth0
Error: an inet prefix is expected rather than "google-dns".
root@fw-test:~# ip route add 8.8.4.4 via 104.236.64.1 dev eth0
root@fw-test:~#
Run Code Online (Sandbox Code Playgroud)

/etc/networks文件的实际用途是什么?

linux networking standard hosts

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