我有一个 Fedora 28 系统(编辑:从 Fedora 27 升级,而不是全新安装)。我可以运行dnf list --installed
来列出我的系统上安装的 2165 个软件包。我可以运行dnf leaves
(使用 leaves 插件)来列出所有 368 个软件包,这些软件包是独立安装的,而不是作为其他东西的依赖项。
叶子列表包括诸如 之类的东西sudo-1.8.22-0.2.b1.fc28.x86_64
,它是系统的一个非常重要的部分,以及诸如 之类的东西steam-1.0.0.54-17.fc28.i686
,它不是系统的重要部分,并且存在,因为我自己安装了它。
Fedora / RPM / dnf 是否有“属于基本系统一部分的软件包”而不是“用户要求的软件包”的概念?如果是这样,有什么办法列出所有后面的包吗?如果没有,是否有其他方法可以生成该列表,甚至是近似的?
我的最终目标是通过删除我安装但不再需要的旧软件包来清理我的系统。问题是我不知道我安装了什么。
在 Linux 上(我的实时服务器在 RHEL 5.5 上 - 下面的 LXR 链接指向内核版本),man 7 ip
说:
已绑定的 TCP 本地套接字地址在关闭后的一段时间内不可用,除非设置了 SO_REUSEADDR 标志。
我没有使用SO_REUSEADDR
. “一段时间”是多长时间?我怎样才能知道它有多长,我怎样才能改变它?
我一直在谷歌上搜索这个,并找到了一些信息,但没有一个能从应用程序程序员的角度真正解释这一点。以机智:
net/tcp.h
是“要等待多久才能破坏TIME-WAIT状态”,固定为“大约60秒”我绊倒的地方在于弥合内核的 TCP 生命周期模型和程序员的端口不可用模型之间的差距,即理解这些状态与“一段时间”的关系。
我想定义一个 find 表达式,其中在 -name 子表达式中包含通配符:
find_expression="-type f -name *.csv -mtime +14"
Run Code Online (Sandbox Code Playgroud)
然后稍后在几个地方使用它:
find /var/data $find_expression -delete -print
Run Code Online (Sandbox Code Playgroud)
如果我不引用 的使用$find_expression
,那么当变量扩展时,glob 就会被解析,并且如果当前目录中碰巧有 CSV 文件,则 find 命令将执行错误的操作。
如果我确实引用了 的使用$find_expression
,那么当变量扩展时,它不会拆分为多个参数来查找,并且 find 命令会执行错误的操作。
这没有帮助:
find_expression="-type f -name '*.csv' -mtime +14"
Run Code Online (Sandbox Code Playgroud)
我相信,因为它会产生第四个参数,该参数实际上以单引号字符开头和结尾。
set -f
我可以用/对包围find 的调用set +f
。但是,这意味着我无法使用 glob 作为查找表达式的路径,因此这不是通用的解决方案。
也许我可以在这里使用数组。
但是有没有什么方法可以专门将字符串扩展为参数而不解析全局变量呢?
我(或我的一位同事)需要编写一个或多个 shell 脚本来控制守护进程的执行。我们需要能够启动守护进程,告诉它正常关闭,并强制关闭。基本上,这是人们传统上使用脚本进行的那种事情/etc/init.d
。
我们将部署到 Ubuntu。我们可能希望部署到 RedHat/CentOS,也可能部署到 AIX。我希望能够部署到任何 unix,因为我喜欢可移植性地做事。
那么,是否可以编写可移植的服务脚本?
我想我可以编写一个便携式 Bourne shell 脚本,它的工作方式类似于普通的 init.d 脚本,并接受“开始”和“停止”作为命令。这可以在任何地方工作,并且至少可以在 Debian 和 RedHat 风格的系统上提供自然的界面。它适合其他地方吗?init.d 是通用的吗?有什么需要注意的陷阱吗?
有没有什么工具可以生成不同形式的服务脚本?我可以编写用于启动和停止的脚本片段,并让该工具为各种不同平台生成脚本。
对于特定于平台的服务脚本约定,是否有任何替代方案?我遇到过daemontools和runit;这些是 init.d 脚本的替代品吗?他们有什么好处吗?还有什么这样的?
这有道理吗?
我有一个文件层次结构,例如:
\ndata\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 debug.log\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 messages\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 msg001.txt\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 msg002.txt\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 msg003.txt\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pictures\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 msg002\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pic001.jpg\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 msg003\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pic001.jpg\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pic002.jpg\n
Run Code Online (Sandbox Code Playgroud)\n我想找到所有文件以及前两层以下的所有目录(数据、数据/消息和数据/图片)。所有不属于层次结构固定结构一部分的事物(如果有意义的话)。
\n我可以通过一次查找调用来完成此操作吗?
\n我可以找到这些文件:
\n$ find data -type f | sort\ndata/debug.log\ndata/messages/msg001.txt\ndata/messages/msg002.txt\ndata/messages/msg003.txt\ndata/pictures/msg002/pic001.jpg\ndata/pictures/msg003/pic001.jpg\ndata/pictures/msg003/pic002.jpg\n
Run Code Online (Sandbox Code Playgroud)\n我可以找到目录:
\n$ find data -mindepth 2 -type d | sort\ndata/pictures/msg002\ndata/pictures/msg003\n
Run Code Online (Sandbox Code Playgroud)\n但我无法将这些结合起来,因为 -mindepth 是一个选项,而不是测试:
\n$ find data -type f -o \\( -mindepth 2 -type d \\) | sort\nfind: warning: you have specified the -mindepth option after a non-option argument -type, …
Run Code Online (Sandbox Code Playgroud) 我们的站点使用 Active Directory,并且许多组名都包含空格。这使得groups
即使通过肉眼也无法可靠地解析输出(是否有“伦敦”和“开发人员”组,或“伦敦开发人员”组?)。
我看不到groups
使用另一个分隔符(换行符或 NUL 可以)或按 GID 列出组的方法。
当某些组名包含空格时,有没有办法可靠地获取用户组的列表?
我正在使用 Ubuntu 18.04.3,并且会很乐意安装更多软件包,或者编写脚本!