sudo 仅在 lost+found 文件夹中执行一个命令,不需要执行更多

sudo 仅在 lost+found 文件夹中执行一个命令,不需要执行更多

我有这个脚本

# 检查丢失+找到的文件夹
函数 chklnf {
#DOC echo "chklnf - 列出已安装设备上 lost+found 文件夹中的所有文件"
x="失物招领/"
如果 [ "$EUID" != 0 ] ;那么
  echo "请输入 sudoers 密码以允许访问 $x 文件夹。"
  sudo echo “谢谢……”
对于 $(mount | sed -nre 's,^/dev/.+ on ([^ ]+).*$,\1,p') 中的 p
    如果 [ -d "$p/$x" ] ;那么
      回显-n“ --- $ p / $ x ---”
      sudo ls -l "$p/$x"
  完毕
}

我希望在 .bash_profile 末尾运行一次,但是,
每次出现新的 shell 提示时都必须输入密码,这很不方便。
那么,是否可以“去掉”其中的“ls -l”?

或者:
如何检测“sudo 模式”是否已经存在?(参考:脚本中的“$EUID”)


剪切 function-def 后,保存为文件 /home/hannu/bin/checklostfound,并添加最后一行 /etc/sudoers(如下所示)
$ sudo cat /etc/sudoers
[sudo] hannu 的密码:****************           
#
# 必须以 root 身份使用“visudo”命令编辑此文件。
#

... {剪切}

# 特殊单脚本 hannu ALL=(root) NOPASSWD: /home/hannu/bin/checklostfound

$ ls -l /home/hannu/bin/checklostfound -rwx------ 1 hannu hannu 526 9 月 24 日 16:30 /home/hannu/bin/checklostfound

$须藤〜/ bin / checklostfound --- //丢失+找到/ --- 共 0 个

$

最后,对 $p 进行调整,/最后得到:

$ cat /home/hannu/bin/checklostfound
/bin/env bash #!/bin/环境
# 检查丢失+找到的文件夹

#DOC echo "chklnf - 列出已安装设备上 lost+found 文件夹中的所有文件"
x="失物招领/"
如果 [ "$EUID" != 0 ] ;那么
  echo "请输入 sudoers 密码以允许访问 $x 文件夹。"
  sudo echo “谢谢……”
对于 $(mount | sed -nre 's,^/dev/.+ on ([^ ]+).*$,\1,p') 中的 p
    九月=“/”
    如果 [ “${p: -1}” = “/” ]; 然后 sep=""; fi
    如果 [ -d "$p$sep$x" ] ;那么
      回显 -n "--- $p$sep$x --- "
      sudo ls -l "$p$sep$x"
  完毕


$ sudo /home/hannu/bin/checklostfound
-- /丢失+找到/ --- 共 0 个
--- /media/hannu/Data8/lost+found/ --- 总计 0

$ /home/hannu/bin/checklostfound
请输入 sudoers 密码以允许访问 lost+found/ 文件夹。
[sudo] hannu 的密码:           
谢谢...
--- /丢失+找到/ --- 总计 0
--- /media/hannu/Data8/lost+found/ --- 总计 0
$

答案1

将您的函数转换为 中的独立脚本/usr/local/bin。现在您有一个更简单的问题,只需授予对该固定命令的无密码“sudo”访问权限,这可以通过 /etc/sudoers 完成:

hannu ALL=(root) NOPASSWD: /usr/local/bin/checklostfound

如何检测当前用户是否已处于“sudo”模式?(参考:脚本中的“$EUID”)

“sudo 模式”的字面意思是当前用户是不是原来的用户,这意味着 root 现在是“当前用户”。

您的比较语法是错误的 - 周围的空格=不是可选的。它必须是:

if [ "$EUID" = 0 ]; then

相关内容