linux中exec命令 linux的exec命令

LINUX NGINX下的PHP shell_exec()函数执行linux命令 2019-08-08LINUX NGINX下的PHP shell_exec()函数执行linux命令
环境说明
手头有一台linux的测试服务器,最近因为业务需要,需要通过php访问另一台服务器去执行某些命令 。
由于另一台服务器已经对这台服务器开了私钥,所以在终端上是可以直接执行命令而不需要输入密码的 。
问题
PHP无法使用exec命令,没有任何返回值 。
解决途径
1.php.ini的配置有问题 。
由于php是7.0以上的版本,取消了安全模式,所以考虑PHP.ini文件配置 。
打开php配置文件,里面有一行disabel_function的值,此处记录了禁止运行的函数,在里面讲exec和shell_exec,system等函数删除 。
2.权限问题
修改以后PHP可以运行部分命令了,但是部分外部程序和命令仍然不能运行 。使用sudo返回失败 。
于是运行“whoami”查看,环境下php-frm的运行角色是www 。
于是修改sudoers文件 。
【linux中exec命令 linux的exec命令】 vi /etc/sudoers
将www添加到
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
下面:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) NOPASSWD:ALL
然后找到Default requiretty这一行,把他注释掉
# Default requiretty
ps:意思就是sudo默认需要tty终端,注释掉就可以在后台执行了.
重启nginx和php-fpm
service nginx restart
service php-fpm restart
这样,PHP就可以在需要执行外部命令的时候使用sudo利用root身份执行命令,而不会报错或者执行失败了!
Linux常用命令1、ls命令
ls是list的缩写,常用命令为ls(显示出当前目录列表),ls -l(详细显示当前目录列表),ls -lh(人性化的详细显示当前目录列表),ls -a(显示出当前目录列表,包含隐藏文件)
2、cd 命令
cd是change direcory的缩写,常用命令为 cd 目录,cd ..为返回上级目录,cd - 返回上次所在目录
3、pwd命令
常用命令为pwd 显示当前所在目录
4、mkdir命令
mkdir命令为创建空目录命令 , 通常用法为mkdir 目录名,mkdir -p 目录名/目录名 可以递归创建多个不存在的目录
5、rm命令
rm为删除命令remove,rm 文件 , 谨慎操作
6、rmdir命令
rm为删除命令remove direcory , rm 目录,谨慎操作
7、mv命令
mv命令move,移动剪切命令,mv 文件 目录,mv 文件 文件(会覆盖)
8、cp命令
cp命令为copy命令,复制文件或目录到别的目录里面,cp 文件/目录 目录/文件
9、touch命令
touch命令创建空文件,比如touch xx.txt,touch 目录 文件
10、cat命令
cat命令查看当前文件内容,cat fi.txt f2.txtf3.txt合并文件内容,cat -n 对所有行进行编号
11、nl命令
nl命令 为文件加入显示行号 , nl 文件名 , nl -b a 文件名 , 将空行也加如行号
12、more 命令
more命令 按页显示文件内容,more 文件名,more -2 文件名 每2行显示一页
13、less命令
less命令查看文件内容,可以上下翻页,less 文件名
14、head命令
head命令可以查看文件前几行内容,head -n 2 文件名
15、tail命令
tail命令可以查看文件后几行内容,tail -n 2 文件名
16、which命令
which 可以执行文件名称,显示路径
17、whereis命令
whereis -m svn 查出说明文档路径,whereis -s svn 找source源文件 。
18、locate命令
locate /etc/m 搜索ect目录下所有m开头的文件
19、find 命令
find . -name "*.log"根据关键字查找
20、find exec命令
ls -l命令放在find命令的-exec选项中 find . -type f -exec ls -l {} ;
21、find xargs命令
find . -type f -print | xargs file查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
22、ls -lih命令
详细的文件属性
23、zmodem
linux中find /_name massage -exec chmod 777 {};什么意思?是中横线linux中exec命令,不是下划线
find命令 – 查找和搜索文件
语法格式:find [参数] [路径] [查找和搜索范围]
常用参数:
-name按名称查找
使用-name参数查看/根目录下面所有linux中exec命令的 名为message
exec命令 – 调用并执行指定的命令
exec命令用于调用并执行指定的命令 。exec命令通常用在shell脚本程序中,可以调用其他的命令 。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端 。
chmod命令的英文原意是“change the permissions mode of a file”,我们简称为“change mode” , 意为用来改变文件或目录权限的命令,但是只有文件的属主和超级用户root才能执行这个命令 。有两种模式 , 一种是采用权限字母和操作符表达式linux中exec命令;另一种是采用数字 。《Linux就该这么学》中有Linux命令大全查询
【exec】shell脚本中的 exec 命令exec 是 bash 的内置命令
shell 的内件命令exec执行命令时 , 不启用新的shell进程 。
source 和 . 不启用新的shell,在当前shell中执行,设定的局部变量在执行完命令后仍然有效 。
bash 或 sh 或 shell script 执行时,另起一个子shell,其继承父shell的环境变量,其子shelll的变量执行完后不影响父shell 。
exec是用被执行的命令行替换掉当前的shell进程 , 且exec命令后的其他命令将不再执行 。
例如在当前shell中执行 exec ls表示执行ls这条命令来替换当前的shell ,即为执行完后会退出当前shell 。
为了避免这个结果的影响,一般将exec命令放到一个shell脚本中,用主脚本调用这个脚本,调用处可以用bashxx.sh(xx.sh为存放exec命令的脚本) , 这样会为xx.sh建立一个子shell去执行,当执行exec后该子脚本进程就被替换成相应的exec的命令 。
其中有一个例外:当exec命令对文件描述符操作的时候,就不会替换shell,而是操作完成后还会继续执行后面的命令!
在shell脚本中使用exec命令,根据操作的对象不同会有不同的行为
文件描述符
shell中描述符一共有12个
0代表标准输入
1代表标准输出
2错误输出
其他 3-9 都是空白描述符
#exec31 42 1 bash.log 21
其含义是: 复制标准输出到3,错误输出到 4 , 把 3 4 保存在bash.log 这个文件中 。
#./bash.shbash.log21
其含义是:将bash.sh脚本执行的标准输出和错误输出追加重定向到 bash.log
如果exec 跟的是其他命令,则其他命令结束后,本shell也随之停止
#cat test_exec.sh
###################
#!/bin/bash
#
echo "Hello mysql"
exec echo "Hello oracle"
echo "Hello sqlserver"
####################
可以看到随着 echo " hello oracle"这条指令运行完本 整个脚本执行完毕,后面的 echo " hello db2" 没有执行!
Linux shell 脚本中,$@ 和$# 分别是什么意思?
$@表示所有脚本参数的内容
$# 表示返回所有脚本参数的个数
示例:编写如下shell脚本 , 保存为test.sh
###############
#!/bin/sh
echo "number:$#"
echo "argume:$@"
###############
执行脚本:
./test.sh first_argsecond_arg
说明:给脚本提供了两个参数,所以$#输出的结果是2,$@代表了参数的内容!
怎么理解shell脚本中exec "`dirname "$0"`/node""$0""$@" ?
$0# 脚本自己的路径
"`dirname "$0"`"/node# 脚本目录下的node程序的路径
$@# 脚本被执行时的命令行参数
合起来就是:用脚本目录下的node程序来解释这个脚本本身
exec scala "$0" "$@"是什么意思
这是bash语法 。
$0表示当前脚本的名字
$@表示当前脚本执行的所有参数
exec scala "$0" "$@"表示用scala命令,带参数,执行当前脚本
execsh "$0在这个文件里,exec sh$0是什么意思?
############
#!/bin/sh
echo"Hello!"
sleep 2
execsh "$0"
#############
$0是位置参数,表示脚本名称
$1表示脚本的第一个参数,依次类推直到$9
exec用于执行命令、或脚本、或外部可执行程序 , 会新建一个shell去执行
综上,这里exec sh"$0"就是执行脚本本身
所以,就是一个循环过程,每隔两秒打印一次 Hello
#############
#!/bin/sh
echo"Hello!"
sleep 2
exec"$0"
#############
linux系统-execcmd{}什么意思linux系统-execcmd括号意思是对查找出linux中exec命令的文件执行cmd命令 。根据查询相关资料信息显示linux中exec命令 , 括号表示找到的文件linux中exec命令,命令要以分号结尾,linux是一套免费使用和自由传播的类Unix操作系统 , 是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统 。
linux的exec是什么意思?前三个和最后一个是两个类型 。前三个主要是Linux用来创建新的进程(线程)而设计的,exec()系列函数则是用来用指定的程序替换当前进程的所有内容 。所以exec()系列函数经常在前三个函数使用之后调用 , 来创建一个全新的程序运行环境 。Linux用init进程启动其他进程的过程一般都是这样的 。
下面说fork、vfork和clone三个函数 。这三个函数分别调用了sys_fork、sys_vfork、sys_clone,最终都调用了do_fork函数,差别在于参数的传递和一些基本的准备工作不同 。可见这三者最终达到的最本质的目的都是创建一个新的进程 。在这里需要明确一下,Linux内核中没有独立的“线程”结构,Linux的线程就是轻量级进程,换言之基本控制结构和Linux的进程是一样的(都是通过struct task_struct管理) 。
fork是最简单的调用,不需要任何参数 , 仅仅是在创建一个子进程并为其创建一个独立于父进程的空间 。fork使用COW(写时拷贝)机制,并且COW了父进程的栈空间 。
vfork是一个过时的应用 , vfork也是创建一个子进程,但是子进程共享父进程的空间 。在vfork创建子进程之后,父进程阻塞,直到子进程执行了exec()或者exit() 。vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork 。而现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中 。在Linux的manpage中队vfork有这样一段话:Itis rather unfortunate that Linux revived this specter from the past.The BSD man page states: "This system call will be eliminated when proper system sharing mechanisms are implemented.Users should not depend on the memory sharing semantics of vfork() as it will, in that case, be made synonymous to fork(2)."
clone是Linux为创建线程设计的(虽然也可以用clone创建进程) 。所以可以说clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等 。clone和fork的调用方式也很不相同,clone调用需要传入一个函数,该函数在子进程中执行 。此外,clone和fork最大不同在于clone不再复制父进程的栈空间,而是自己创建一个新的 。
关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html
关于linux中exec命令和linux的exec命令的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读