须藤还是不须藤?
sudo or not sudo?
最终目标是 运行 从 redhat 机器上的 shell 脚本中的这个单一命令。我在 ubuntu 机器上使用该脚本多年,但我在 redhat 上的权限较少。我将在下面描述我尝试的解决方案,但我想先提出问题。
read -r val1 val2 val3 <<<$(python3 script_name.py "$json_args")
在 redhat 中,我必须安装 python/pip3.5 作为 sudo...就像这样...
sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
sudo yum -y install python35u
sudo yum -y install python35u-pip
sudo pip3.5 install --upgrade pip
sudo pip3.5 install boto3
sudo pip3.5 install awscli --upgrade --user
不同的机器可能有不同的 python 版本,所以我在 .bash_profile 中为 python3
创建了一个别名,所以相同的 shell 脚本在任何地方都可以工作。
echo 'alias python3="python3.5"' >>~/.bash_profile
现在...一切都被锁定在 python...我可以导入 boto3,但它不可用...从 python3 命令行演示...
>>> import boto3
>>> boto3.__version__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'boto3' has no attribute '__version__'
所以我尝试 运行ning python3 作为 'sudo',但是得到...
sudo: python3: command not found
所以我给 .bashrc 添加了一个别名,就像这样...
echo 'alias sudo="sudo "' >>~/.bashrc
太棒了!现在事情似乎奏效了!我终于可以 运行 我最初想要的命令(见下文)。
sudo python3 script_name.py args
或更具体(注意与我的介绍相比添加的 sudo
)...
read -r val1 val2 val3 <<<$(sudo python3 script_name.py "$json_args")
命令行运行良好!
... 直到我尝试将其放入 shell 脚本中。现在我又回到了原来的错误...
sudo: python3: command not found
我尝试了各种方法...将 'sudo ' 别名放入脚本中...将其放入 /root/.bashrc...其他一些随机的东西。
在这一点上,我怀疑我也可以 运行 bash 脚本作为 sudo...但这开始导致各种其他问题,我怀疑这是一个非常糟糕的安全实践。我觉得我已经脱离了 rails,这里有一些更聪明的解决方案。
任何想法
- 如何在没有 sudo 的情况下 运行 python3.5 并让它工作
- 如何让
sudo python3
在 shell 脚本中工作而不 运行 将 shell 脚本设置为 sudo?
提前致谢
编辑
根据@JulianLoaiza 和@TerryCarmen 的以下建议,chown -R
允许我在没有 sudo
的情况下 运行 python3...但是 boto3 不能'当我这样做时,不要再授权我了。检查 sys.path
从 python 的角度来看只有一个不同......那就是
- sudo 有:
'/root/.local/lib/python3.5/site-packages'
- w/out sudo 有:
'/home/ec2-user/.local/lib/python3.5/site-packages'
两者都有 '/usr/lib/python3.5/site-packages'
,后者出现在最后(并且包含我明确安装的库)。
可能会发生什么.../root/.local/lib/python3.5/site-packages
中没有关于 awscli 或 boto 的内容.../home/ec2-user/.local/lib/python3.5/site-packages
中确实有 'awscli' 和 'botocore' 内容。 /usr/lib/python3.5/site-packages
...也是如此,它还有 boto3 和我明确安装的其他库。
当我没有以 'sudo' 身份登录时,python 会不会因为在 /usr/lib/python3.5/site-packages
之前查看 /home/ec2-user/.local/lib/python3.5/site-packages
而感到困惑?
您可以尝试更改文件夹所有权,
sudo chown -R ec2-user:ec2-user /usr/lib/python2.7
sudo chown -R ec2-user:ec2-user /usr/lib64/python2.7
sudo: python3: command not found
找不到您的 python 版本。
您需要指定 python 二进制文件的完整路径:
read -r val1 val2 val3 <<<$(sudo /location/of/your_python script_name.py "$json_args")
一旦你有了它运行,如果python找不到它的依赖项,你可以添加
import sys
sys.path.append('/location/of/your_python_libs')
到您的 python 代码
至于 sudo,您的选择是修复代码、目录和用户,使其不需要 root,或者继续使用 sudo。这不是一个好的做法,但归根结底,它们是您的系统和您的决定。
最终目标是 运行 从 redhat 机器上的 shell 脚本中的这个单一命令。我在 ubuntu 机器上使用该脚本多年,但我在 redhat 上的权限较少。我将在下面描述我尝试的解决方案,但我想先提出问题。
read -r val1 val2 val3 <<<$(python3 script_name.py "$json_args")
在 redhat 中,我必须安装 python/pip3.5 作为 sudo...就像这样...
sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
sudo yum -y install python35u
sudo yum -y install python35u-pip
sudo pip3.5 install --upgrade pip
sudo pip3.5 install boto3
sudo pip3.5 install awscli --upgrade --user
不同的机器可能有不同的 python 版本,所以我在 .bash_profile 中为 python3
创建了一个别名,所以相同的 shell 脚本在任何地方都可以工作。
echo 'alias python3="python3.5"' >>~/.bash_profile
现在...一切都被锁定在 python...我可以导入 boto3,但它不可用...从 python3 命令行演示...
>>> import boto3
>>> boto3.__version__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'boto3' has no attribute '__version__'
所以我尝试 运行ning python3 作为 'sudo',但是得到...
sudo: python3: command not found
所以我给 .bashrc 添加了一个别名,就像这样...
echo 'alias sudo="sudo "' >>~/.bashrc
太棒了!现在事情似乎奏效了!我终于可以 运行 我最初想要的命令(见下文)。
sudo python3 script_name.py args
或更具体(注意与我的介绍相比添加的 sudo
)...
read -r val1 val2 val3 <<<$(sudo python3 script_name.py "$json_args")
命令行运行良好!
... 直到我尝试将其放入 shell 脚本中。现在我又回到了原来的错误...
sudo: python3: command not found
我尝试了各种方法...将 'sudo ' 别名放入脚本中...将其放入 /root/.bashrc...其他一些随机的东西。
在这一点上,我怀疑我也可以 运行 bash 脚本作为 sudo...但这开始导致各种其他问题,我怀疑这是一个非常糟糕的安全实践。我觉得我已经脱离了 rails,这里有一些更聪明的解决方案。
任何想法
- 如何在没有 sudo 的情况下 运行 python3.5 并让它工作
- 如何让
sudo python3
在 shell 脚本中工作而不 运行 将 shell 脚本设置为 sudo?
提前致谢
编辑
根据@JulianLoaiza 和@TerryCarmen 的以下建议,chown -R
允许我在没有 sudo
的情况下 运行 python3...但是 boto3 不能'当我这样做时,不要再授权我了。检查 sys.path
从 python 的角度来看只有一个不同......那就是
- sudo 有:
'/root/.local/lib/python3.5/site-packages'
- w/out sudo 有:
'/home/ec2-user/.local/lib/python3.5/site-packages'
两者都有 '/usr/lib/python3.5/site-packages'
,后者出现在最后(并且包含我明确安装的库)。
可能会发生什么.../root/.local/lib/python3.5/site-packages
中没有关于 awscli 或 boto 的内容.../home/ec2-user/.local/lib/python3.5/site-packages
中确实有 'awscli' 和 'botocore' 内容。 /usr/lib/python3.5/site-packages
...也是如此,它还有 boto3 和我明确安装的其他库。
当我没有以 'sudo' 身份登录时,python 会不会因为在 /usr/lib/python3.5/site-packages
之前查看 /home/ec2-user/.local/lib/python3.5/site-packages
而感到困惑?
您可以尝试更改文件夹所有权,
sudo chown -R ec2-user:ec2-user /usr/lib/python2.7
sudo chown -R ec2-user:ec2-user /usr/lib64/python2.7
sudo: python3: command not found
找不到您的 python 版本。
您需要指定 python 二进制文件的完整路径:
read -r val1 val2 val3 <<<$(sudo /location/of/your_python script_name.py "$json_args")
一旦你有了它运行,如果python找不到它的依赖项,你可以添加
import sys
sys.path.append('/location/of/your_python_libs')
到您的 python 代码
至于 sudo,您的选择是修复代码、目录和用户,使其不需要 root,或者继续使用 sudo。这不是一个好的做法,但归根结底,它们是您的系统和您的决定。