修改权限与根脚本执行。 什么更好?

每次暂停后,当我唤醒我的笔记本电脑时,它从不连接到任何网络,必须重新启动NetworkManager。 所以,出于懒惰,我写了这个脚本按预期工作正常。

我使用了if块来检查脚本是否总是由root用户执行:

 if [ $(id -u) -ne 0 ] then echo "ERROR : Root Priveleges Required" exit NOT_ROOT else netrestart fi 

我给了这个脚本这个权限(执行这个命令时是root):

 chmod u+x netrestart 

现在,当我以非root用户身份运行此脚本时,它会显示此信息

 bash: ./netrestart: Permission denied 

然后,使用sudo运行脚本运行正常

 sudo ./netrestart 

我认为这使得脚本中的根检查毫无用处。 现在我有两个问题:

  1. 我要删除那部分代码还是仍在脚本中使用?

  2. 什么更好,怎么样?

    • 检查用户是否是脚本中的root用户并为每个人提供执行权限,即chmod 755 netrestart
    • 在脚本本身设置正确的所需权限,不包括检查脚本中是否为root用户,即chmod 711 netrestart

我认为您的脚本可以压缩为:

 #!/bin/bash NOT_ROOT=2 sudo service network-manager restart || exit $NOT_ROOT if service network-manager status then echo "Successfully Restarted NetworkManager" else echo "ERROR : Failed to work" exit 1 fi 

sudo将检查您的root访问权限,并在必要时提示。 service ... status检查将更可靠地告诉您NetworkManager是否正常启动。

您可以将此脚本的执行权限授予每个人, sudo将负责权限检查。