我已经安装了 jdk,但是当我尝试使用 java 命令时,它说“找不到命令”。
所以我然后在 .bashrc 中为我的帐户设置环境变量,它工作正常。
export JAVA_HOME=/usr/java/jdk1.7.0_03
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/l\
ib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用 sudo 执行 java 时,它又说了一遍。所以我曾经sudo -s切换到root,将它们放入/etc/profile,然后执行source /etc/profile
如果我继续以 root 身份登录,但在我返回到我自己的帐户并使用sudo java它之后,这仍然有效,它仍然显示 sudo: java: command not found 并且这些环境变量变为空白。
我应该怎么做才能解决问题?我想应该很容易解决。
我正在尝试编写一个覆盖我/etc/resolv.conf文件的小型Java应用程序(我在Ubuntu 12.04上).为此,我需要提供我的root密码:
myUser@myMachine:~$ sudo vim /etc/resolv.conf
[sudo] password for myUser: *****
Run Code Online (Sandbox Code Playgroud)
因此,执行此操作的过程包括三个步骤:
sudo vim /etc/resolv.conf终端root密码[Enter]从我研究的所有内容中,我可以使用以下内容执行上面的步骤#1:
try {
String installTrickledCmd = "sudo vim /etc/resolv.conf";
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(installTrickledCmd);
}
catch(Throwable throwable) {
throw new RuntimeException(throwable);
}
Run Code Online (Sandbox Code Playgroud)
但是当执行此操作时,shell将要提示我的Java进程输入密码.我不确定如何等待(上面的步骤#2),然后将我的密码提供给shell(上面的步骤#3).提前致谢.
更新
我已经接受了@Sean 的回答,并做了一些小的修改。
(defun sudo-shell-command (buffer password command)
(let ((proc (start-process-shell-command
"*sudo*"
buffer
(concat "sudo bash -c "
(shell-quote-argument command)))))
;;; Added to @Sean answer to display the passed buffer
(display-buffer buffer '((display-buffer . nil)) nil)
(process-send-string proc password)
(process-send-string proc "\r")
(process-send-eof proc)))
(defun sudo-bundle-install (password)
(interactive (list (read-passwd "Sudo password for bundle install: ")))
(let ((default-directory (concat default-directory
"./fixtures/test-kitchen-mode-test-run/"))
;;; Added from accepted answer below by @sean
;;; need a buffer to display process in.
(generated-buffer (generate-new-buffer "*test-kitchen-test-setup*"))) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个与 Epiphany 处理器 ( http://www.parallella.org/ ) 一起使用的代码,并且要运行 Epiphany 代码,我需要在主机端程序上有 sudo 权限。sudo 是逃不掉的!
现在我需要跨多个节点运行此代码,为了做到这一点,我使用 mpi 但 mpi 无法与 sudo 正常运行
#sudo mpirun -n 12 --hostfile hosts -x LD_LIBRARY_PATH=${ELIBS} -x EPIPHANY_HDF=${EHDF} ./hello-mpi.elf
Run Code Online (Sandbox Code Playgroud)
即使是进行节点通信的简单代码也不起作用。如果我使用 sudo,则排名为 0。线程之间可以进行通信,但不能跨节点进行通信。这很重要,因为我想在卡之间正确分配工作负载。
这是简单的代码
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
printf("Hello World from MPI Process %d on machine %s\n", rank, processor_name);
MPI_Finalize();
}
Run Code Online (Sandbox Code Playgroud)
此代码应该在节点之间以不同的方式输出排名号,但它不适用于 sudo
对此的任何帮助都会很棒
这是在不使用 sudo 的情况下运行上述代码的输出。
mpirun -n 3 …Run Code Online (Sandbox Code Playgroud) 所以问题是错误出现在 apache.err 中。
我可以在 shell 中以用户身份执行。
root@ubuntu:~# su www-data
www-data@ubuntu:/root$ sudo /usr/local/bin/metronomectl restart
Stopped
Started
www-data@ubuntu:/root$
Run Code Online (Sandbox Code Playgroud)
但是当我通过 php 尝试相同的命令时
exec('sudo /usr/local/bin/metronomectl restart');
Run Code Online (Sandbox Code Playgroud)
我收到错误
sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted
Run Code Online (Sandbox Code Playgroud)
用户 www-data 在 sudoers 中。
我已经无计可施了...任何帮助都是值得赞赏的。
附言。请询问您是否需要任何额外信息。
编辑:
root@ubuntu:~# uname -a
Linux ubuntu 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~#
Run Code Online (Sandbox Code Playgroud)
须藤线:
www-data ALL= NOPASSWD: /usr/local/bin/metronomectl
Run Code Online (Sandbox Code Playgroud) 如果使用 sudo 执行了 bash 脚本,脚本中的命令如何以当前登录的用户身份而不是 root 身份运行,然后恢复为 root 以继续运行其他命令?
例如: -
#!/usr/bash
touch fileOwnedByRoot.txt
touch fileOwnedByUser.txt
touch otherRootFile.txt
Run Code Online (Sandbox Code Playgroud)
如果这个脚本是用sudo运行的,不改变命令的顺序,第二个touch命令如何以标准用户的身份运行?
该脚本只是一个简单的示例,因此使用 chmod 更改创建的文件的所有权是无关紧要的。
我正在使用的实际脚本由安装程序运行,因此要求以提升的权限运行,但特定命令必须以运行安装程序的用户身份运行,其名称未知。
我正在尝试编写一个程序来执行系统的远程管理。为此,我发出 SSH 命令并通过管道以编程方式提供输入。我还捕获了他们的输出。
一些命令需要提升,所以我需要发出诸如ssh user@host "sudo apt-get install blah".
问题是,sudo除非在其标准输入上找到真正的终端,否则拒绝通过终端直接接受密码。有什么办法可以sudo让我愚蠢地允许这样做吗?
我有一个经销商 Web 服务器,我正在将其迁移到一台新机器上。源服务器所有者提供了一个用户(我们称之为用户 A),该用户对其他用户具有 sudo 访问权限,但对 root 没有权限。我的用户没有对我需要拉取的文件的直接文件访问权限,但我可以对正确的用户(对于我们的示例是用户 B)执行 sudo 并获取正确的内容。
我有一个从我的用户到目标机器的 ssh 密钥设置,但这显然不会传递给其他用户。我可以在 sudo 作为单个内容用户时传递目标服务器的密码,但对于要移动的数据量和要 sudo 的用户数量,这非常繁琐。
所以,我的问题是,有没有办法可以访问属于用户 B 的内容,我有 sudo 访问权限但没有直接访问权限,但是验证我的 rsync ssh 连接并以用户 A(我的 linux 用户)身份运行完整的 rsync 命令?
我正在使用AWS EC2 实例并在 AWS linux 上安装了docker和docker-compose。
现在我有一个正在尝试命令的 docker-compose.yml文件mkdir -p /workspace/.m2/repositories。现在这个命令需要sudo,否则它会给出权限错误。
我尝试在docker-compose 中添加sudo但它给了我一个错误说
须藤:找不到命令
我可以手动运行这个命令,也可以在docker-compose.yml文件中评论这个命令,但我很想知道有没有办法从docker-compose.yml文件内部运行这个命令?
我想更好地了解 bash 以及何时评估变量。
使用时sudo可以检出使用的用户环境env与root环境交换。因此env,sudo env产生不同的结果。
现在,如果我正在执行sudo echo "I am $USER"!结果是I am my-username!
而不是I am root!,大概是因为在执行 sudo 命令之前查找了 $USER 变量。
如何使用相同的命令I am root!来打印?我是否需要一些开关或以某种方式更改字符串?