小编use*_*676的帖子

将 shell 脚本作为守护进程运行的“正确”方式

我正在编写一个shell 脚本,我想在启动时作为守护程序运行,而不使用daemontoolsdaemonize等外部工具


Linux 守护进程编写 HOWTO

根据Linux Daemon Writing HOWTO,一个合适的守护进程具有以下特征:

  • 来自父进程的分叉
  • 关闭所有文件描述符(即stdin, stdout, stderr
  • 打开日志以进行写入(如果已配置)
  • 工作目录更改为持久目录(通常为/
  • 重置文件模式掩码(umask)
  • 创建唯一的会话 ID (SID)

daemonize简介

守护进程介绍更进一步,指出一个典型的守护程序也:

  • 与其控制终端(如果有)解除关联并忽略所有终端信号
  • 与其进程组分离
  • 把手 SIGCLD

我将如何做到这一切的shdashbash只用普通的Linux工具脚本?

该脚本应该能够在尽可能多的发行版上运行而无需额外的软件,尽管Debian是我们的主要关注点。


注意:我知道StackExchange网络上有很多建议使用nohup …

linux debian shell-script daemon

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

shell 命令输出中的字符数

我正在编写一个脚本,它需要一步计算命令输出中的字符数。

例如,使用该命令readlink -f /etc/fstab应该返回,10因为该命令的输出长度为 10 个字符。

这已经可以使用以下代码存储变量:

variable="somestring";
echo ${#variable};
# 10
Run Code Online (Sandbox Code Playgroud)

不幸的是,对命令生成的字符串使用相同的公式不起作用:

${#(readlink -f /etc/fstab)};
# bash: ${#(readlink -f /etc/fstab)}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我知道可以通过首先将输出保存到变量来做到这一点:

variable=$(readlink -f /etc/fstab);
echo ${#variable};
Run Code Online (Sandbox Code Playgroud)

但我想删除额外的步骤。

这可能吗?最好仅使用内置或标准实用程序与 Almquist shell (sh) 兼容。

shell string variable

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

为什么 Debian Jessie (8.0) 不能使用“强化”软件包套件?

其中包括Debian 自动强化文档 ( https://www.debian.org/doc/manuals/securing-debian-howto/ch-automatic-harden.en.html ) 中列出的所有强化包,包括:

  • 硬化
  • 硬化工具
  • 强化服务器
  • 强化客户
  • 等等等等。

令人困惑的是,该套件的文档似乎可用于Debian Stretch (9.0),但目前也没有任何强化元包计划用于该版本。

是什么赋予了?是否有我忽略的替代替换包?如果有,它们是什么?


可能值得注意的是,我花了大量时间在网上搜索这个问题的答案。似乎没有关于这个主题的信息,我在邮件列表中也没有找到任何内容,尽管我没有在那里进行彻底的搜索。

我所发现的只是 Jessie 必须在某个时候可以使用这些包,但后来被删除了,因为一些 Google 查询仍然返回指向 Jessie 包信息页面的无效链接。

harden 软件包是新手管理员的天赐之物,尽管我知道它们从来都不是保护 Debian 服务器的完整答案。尽管如此,奇怪的是没有看到任何解释将它们排除在 Debian 的最新版本中。


debian hardening

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

在 Linux 上挂载受 SafeDisc 保护的 ISO

我有一张非常古老且晦涩难懂的软件 CD(大约 2004 年)的副本。该光盘使用SafeDisc 复制保护,需要放在 CD 托盘中才能运行程序。

多年来,我一直在 Linux 上的 Wine 下使用原始 CD,没有任何问题。然而,几周前,CD 损坏了,不再可行。

幸运的是,我确实有使用 120% 酒精创建的 CD的ISO 备份,这意味着它包含程序验证 CD 所需的所有保护数据。在 Windows 中,我所要做的就是使用光盘模拟器(例如Alcohol 120%MagicISO)安装ISO,并且程序可以完美运行。

是否有类似的方法可以在 Linux 下直接在 Wine 下通过复制保护仿真挂载 ISO ,以便可以访问 SafeDisc 数据?我已经尝试过 Wine 中的本地 GUI 挂载方法以及 Linux 挂载实用程序 ( mount -o loop src.iso /media/cdrom) 等,但这些方法都无法模拟 SafeDisc 复制保护。

我应该注意,我已获得发行商的许可,可以绕过 SafeDisc DRM 在 Linux 上运行它,只要我不透露我正在这样做。他们也不再制作软件或在他们的库存中有任何旧 CD。

linux iso mount wine drm

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

仅使用必要的软件包安装 Debian

我正在尝试构建一个非常小的 Debian 安装。

仅使用标记为Essential 的软件包(不包括重要推荐软件包)来安装操作系统的最佳方法是什么?

Debian 甚至会在这种配置下运行吗?


注意:按照这些说明操作似乎仍然会安装一些标记为“重要”的包。

debian system-installation debian-installer

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