請幫我弄清楚這個命令有什麼作用?
我在 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/'
一般情況下是什麼