我在 stackoverflow 上运行 cron 作业时看到了一个修复问题的命令。 https://stackoverflow.com/questions/21926465/issues-running-cron-in-docker-on-different-hosts 我不确定这个命令到底是做什么的,因为我是 unix 命令的新手。任何高贵的灵魂能说出每个部分的作用吗?
sed --regexp-extended --in-place 's/^session\s+required\s+pam_loginuid.so$/session optional pam_loginuid.so/' /etc/pam.d/crond
sed
是一个命令行文本编辑器,使用 likesed -flags command file
,最常用于使用正则表达式进行查找和替换。它可以做很多事情,我发现https://www.grymoire.com/Unix/Sed.html是一个很好的初学者指南(比man
页面友好)正则表达式 (regex) 有点像一个复杂的通配符系统,它可以让您查找文本模式而不是特定事物
--regexp-extended
告诉它使用扩展的正则表达式,它有更多的特性--in-place
告诉它更改文件,而不是将输出打印到 shell 或 stdout's/foo/bar'
是 sed 的替代命令(s 代表替代),它在每一行找到第一个 'foo' 并将其交换为 'bar'^session
:^
表示正则表达式中一行的开头\s+
:\s
在正则表达式中表示“任何空格”,即空格或制表符或类似内容;+
表示一个或多个,因此它匹配一个或多个空格/制表符/等。+
需要扩展正则表达式...nuid.so$
:$
表示正则表达式中的行尾所以,这是找到每一行,
session optional pam_loginuid.so
但有更多的空格/制表符,并将其替换为session optional pam_loginuid.so
一个空格,并required
替换optional
为文件中的 ,/etc/pam.d/crond
意思是“如果这个命令返回零,
&&
则运行下一个命令”,而 bash 中的大多数东西如果没有崩溃,就会返回零。即使 sed 没有找到任何可替代的东西,它也会返回零,所以这几乎总是会发生最后
\
的 使它忽略换行符,因此下一行的命令也会被执行,除非某些东西不起作用所以基本上它正在改变
required
并optional
删除额外的空格,但希望这可以帮助你弄清楚sed 's/thing/otherThing/'
一般情况下是什么