小编Jus*_*son的帖子

在脚本中使用“${a:-b}”进行变量赋值

我一直在看其他人写的一些脚本(特别是 Red Hat),他们的很多变量都是使用以下符号分配的 VARIABLE1="${VARIABLE1:-some_val}" 或一些扩展其他变量 VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"

使用这种表示法而不是直接声明值有什么意义(例如, VARIABLE1=some_val)有什么意义?

这种表示法是否有好处或可以防止可能出现的错误?

是否:-有特定的含义在这方面?

scripting bash shell-script variable

593
推荐指数
3
解决办法
44万
查看次数

限制 ssh 从 LDAP 登录到拥有 /home 目录的用户

我有一个 Apache 服务器 (RHEL 6) 托管多个用户网页,该网页当前连接到我的 Active Directory 环境以对用户进行身份验证。服务器用于自动托管用户放入其 /home/<user>/public_html 文件夹中的内容。我还将此服务器配置为使用 chroot,因此用户将无法在其主文件夹之外浏览服务器上的任何其他内容。登录脚本不会为用户创建主文件夹。这些是手动创建的,因为我们只希望某些用户能够从该服务器托管网页。

问题是,任何用户当前都可以登录服务器,而不是进入他们的 /home 文件夹(因为它不存在),他们会自动进入 /。这使他们可以查看其组具有读取权限的服务器上的任何文件/文件夹。这是一个安全问题,我想将登录限制为拥有 /home 目录的用户。我们不想将 AD 组或用户列表指定为经过身份验证,因为该列表可能会变得很长并且难以管理,尽管它可能比编写 PAM 模块更容易。

有没有办法将 LDAP 登录限制为只有已经拥有 /home 目录的用户?我在 PAM 选项或文档中没有找到任何内容。

security chroot active-directory ldap pam

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

主机名、主机名 --fqdn 和主机名 -A 之间有什么区别

我有一台我更改了主机名的机器。我改变了它/etc/hosts/etc/sysconfig/network以及与hostname命令。hostname返回正确的短名称,hostname --fqdn返回预期的 FQDN,但hostname -A返回旧名称。我更改了机器的 IP 地址以确保它不是外部 DNS 缓存。

如果我打开 python 并运行

import socket
print(socket.gethostname())
print(socket.getfqdn())
Run Code Online (Sandbox Code Playgroud)

两者都返回旧的主机名/fqdn,与 hostname -A

从主机名手册页看来--fqdn,它只需要短名称和域并将它们放在一起。

显示 FQDN(完全限定域名)。FQDN 由短主机名和 DNS 域名组成。除非您使用 bind 或 NIS 进行主机查找,否则您可以更改 /etc/hosts 文件中的 FQDN 和 DNS 域名(它是 FQDN 的一部分)。

这些命令之间有什么区别,我如何更好地解决旧主机名仍然存在的原因。

networking rhel hostname

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

为什么 FOO=bar; 将变量导出到我的环境中

如果我跑

FOO=bar docker run -it -e FOO=$FOO debian env
Run Code Online (Sandbox Code Playgroud)

该环境变量未在命令的命令输出中设置env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=03f3b59c0aab
TERM=xterm
FOO=
HOME=/root
Run Code Online (Sandbox Code Playgroud)

但如果我跑

FOO=bar; docker run -i -t --rm -e FOO=$FOO debian:stable-slim env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=672bfdcde93c
TERM=xterm
FOO=bar
HOME=/root
Run Code Online (Sandbox Code Playgroud)

然后该变量可以从容器中获得,也可以导出到我当前的 shell 环境中。

echo $FOO
bar
Run Code Online (Sandbox Code Playgroud)

我期待这种行为,export FOO=bar但为什么;也会发生这种情况?

shell bash environment-variables

4
推荐指数
3
解决办法
2690
查看次数

使用 find + sed + cp 查找文件并将它们复制到不同名称的目录中

我试图将一堆名为 folder.jpg 的文件复制到一个文件夹中。问题是因为所有文件都命名为相同的东西,我需要在过程中重命名它们。我知道我可能可以用 sed 做到这一点,但我想将它们重命名为父文件夹的一部分的名称。这是我找到并复制文件所得到的

cp $(find . -iname "folder.jpg") .albumart/
Run Code Online (Sandbox Code Playgroud)

文件夹结构是 ./artist/artist.year.album/folder.jpg 以及我想使用父文件夹(或只是其中的一部分)来命名文件的内容。有人可以用一个班轮帮助我完成任务吗?更棘手的是,有些文件夹还有一层 CD1 和 CD2,如果它们存在,我想忽略它们(例如 ./artist/artist.year.album/CD1/folder.jpg)

sed find cp

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