如果用户无法正常访问系统,我在Lua中使用以下命令字符串来关闭我的Linux系统:
os.execute 'sleep 5 && echo password | sudo -S poweroff'
我知道以下内容:
os.execute =执行OS命令的简单Lua命令。 睡眠5 =在执行下一个命令之前暂停“X”时间。 && = AND(简单且有很多含义但是这个例子,做&&的两边)。 echo = Linux中Lua版本的“打印”。
但请帮助我了解其余部分。我知道sudo意味着什么,但为什么root密码 之前 “sudo”?为什么管道消除器?为什么在sudo中使用“-S”,这意味着Linux中的Stdin?
还有另一种方法可以让Lua中的脚本关闭/重启操作系统吗?
答案 0 :(得分:1)
管道将|
之前的命令的标准输出重定向到|
之后的命令的标准输入。
因此,echo password
输出password
,用作sudo -S poweroff
的标准输入。并从sudo
手册
‑S
(stdin)选项使sudo
从标准输入而不是终端设备读取密码。密码必须后跟换行符。
让sudo
从stdin
读取密码,在这种情况下,恰好是echo password
的输出。
答案 1 :(得分:1)
让我们分一杯羹:
sleep 5
:阻止5秒&&
:只有这样成功(它会!) - 又是另一个含义
“和”echo password
:写密码|
:无论之前的命令输出是什么(在这种情况下是
密码),不要写出来,但用它作为输入
下一个命令......管道是什么,当一件事情出来的时候
导入下一件事; - )sudo -S
:充当系统管理员,但不要求
密码(那里没有人),而是使用来自的密码
标准输入作为密码poweroff
:这是以系统管理员身份运行的命令总结:等待5秒后,将密码提供给sudo,执行poweroff