正文
调用linux命令行 linux 调用
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
在Python中调用linux命令
目的:用Python做出全自动化的pipline,用于rrbs
最近有个需求就是页面上执行shell命令,第一想到的就是os.system,
os.system('cat /proc/cpuinfo')
但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。
尝试第二种方案 os.popen()
output = os.popen('cat /proc/cpuinfo')printoutput.read()
通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。但是无法读取程序执行的返回值)
尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。
(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')printstatus, output
Python Document 中给的一个例子,
import commands commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls') commands.getstatusoutput('cat /bin/junk')
(256,'cat: /bin/junk: No such file or directory') commands.getstatusoutput('/bin/junk')
(256,'sh: /bin/junk: not found') commands.getoutput('ls /bin/ls')'/bin/ls' commands.getstatus('/bin/ls')'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
最后页面上还可以根据返回值来显示命令执行结果。
java程序里调用linux命令
1.Java调用shell
Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运
行的环境交互的接口,这就是Runtime类,在Runtime类里提供了获取当前运行环境的接口。
其中的exec函数返回一个执行shell命令的子进程。exec函数的具体实现形式有以下几种:
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throws
IOException
public Process exec(String command,String[] envp,File dir) throws
IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throws
IOException
public Process exec(String[] cmdarray, String[] envp,File dir)
throws IOException
我们在这里主要用到的是第一个和第四个函数,具体方法很简单,就是在exec函数中传递一个代表命令的字符串。exec函数返回的是一个Process类
型的类的实例。Process类主要用来控制进程,获取进程信息等作用。(具体信息及其用法请参看Java doc)。
1)执行简单的命令的方法:
代码如下:
上面的代码首先是声明了一个代表命令的字符串commands,它代表了ls -l
这个命令。之后我们用Runtime.getRuntime().exec(commands)来生成一个子进程来执行这个命令,如果这句话运行成功,则
命令 ls -l 运行成功(由于没有让它显示,不会显示ls -l
的结果)。后面的流操作则是获取进程的流信息,并把它们一行行输出到屏幕。2)执行带有参数的命令(尤其是参数需要用引号的)时则需要用String的数组来表示整个命令,而且要用转义符把引号的特殊含义去除,例如我们要执行
find / -name "*mysql*" -print 时,用如下代码
Java 可以通过 Runtime 调用Linux命令,形式如下:
Runtime.getRuntime().exec(command)
但是这样执行时没有任何输出,因为调用 Runtime.exec 方法将产生一个本地的进程,并返回一个Process子类的实例(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例)该实例可用于控制进程或取得进程的相关信息。
由于调用 Runtime.exec 方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过 Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream() 方法重定向给它的父进程了。
用户需要用这些stream来向子进程输入数据或获取子进程的输出,下面的代码可以取到 linux 命令的执行结果:
怎么在linux中调用命令行中的命令,比如我想在一个程序中用命令行运行另一个程序
Linux编程中在命令行启动另一个可执行文件或调用命令用system函数最简单了,这个函数原理是在你编写的那个程序的内部启动另一个程序或命令,从而创建一个新进程,并等待这个进程执行完毕退出。如果正常执行,system函数将返回被执行程序或命令的退出码;如果无法运行这个程序或命令,将返回错误代码127;如果是其他错误,返回-1。这个函数的原型是:
#include stdlib.h
int system(const char *string);
参数string是将要执行的程序文件名或路径,如果是启动一个命令就是一个命令字符串。
还有一种执行外部程序的方法是exec系列函数,一般是在fork的子进程里面调用exec系列函数,那主进程里直接调用exec系列不行吗,为什么要fork再在子进程里调用呢?因为exec系列的函数(包括execl函数)都是将当前进程替换成新进程,也就是说新进程启动后原来的进程就不存在了,exec系列函数后面的那些代码就不会再执行了。如果你不放在fork子进程里面,那主进程在执行execl函数后就完全不存在了,所以exec系列函数的使用都是先fork然后在子进程里面调用。因为exec系列函数都要使用fork调用,所以我一般是用system函数。
linux调用上一个使用过的命令?
Linux可以使用以下几种方法调用最近使用过的命令:
1. 使用历史命令:在终端中输入“history”可以列出使用过的所有命令,然后可以使用“!数字”来调用对应的命令,例如“!112”会调用最近使用过的第112个命令。
2. 使用递增搜索命令:在终端中按下“Ctrl+R”,然后开始键入已经使用过的命令的部分内容,终端会自动显示最近匹配的命令,可以按下“Enter”来执行该命令。
3. 使用递减搜索命令:在终端中按下“Ctrl+S”,然后开始键入已经使用过的命令的部分内容,终端会自动显示最近匹配的命令,可以按下“Enter”来执行该命令。
4. 简单命令复制:在终端中使用“↑”和“↓”键来移动历史命令,找到需要调用的命令,然后按下“Ctrl+A”将光标移到命令的开头,按下“Ctrl+K”剪贴该命令,再按下“Ctrl+U”将其粘贴到命令行中并执行。
5. 使用“!!”命令:在终端中输入“!!”会自动执行上一条命令。
以上内容参考:蓝易云-香港服务器
Linux 命令行技巧
ALT快捷键在WIN下Xshell不可用
ctrl + a 光标切换到命令行行首
ctrl + e 光标切换到命令行末尾
ctrl + l 清屏 等同于 clear
ctrl + u 清除剪切光标之前的内容
ctrl + k 清楚剪切光标之后的内容
ctrl + w 清除剪切光标之前的一个word
alt + d 清除剪切光标之后的一个word
ctrl + y 粘贴刚才删除字符
ctrl + h 向行首删除一个字符
ctrl + d 向行尾删除一个字符,空行时等于 exit 和 logout
ctrl + _ 恢复刚操作的命令 xshell无法使用
ctrl + b 光标向行首移动一个字符 ( backwards )
ctrl + f 光标向行尾移动一个字符( forwards )
ctrl + ← 光标向行首移动一个word
ctrl + → 光标向行尾移动一个word
ctrl + r 历史命令中查找 (关键字可用)
ctrl + z 转入后台运行
history 10 显示最近使用过的10个命令
!! 执行前一个命令
! + 字符 执行前一个以“字符”开头的命令
! + Num 执行对应行号的命令
! + ? abc 执行前一个包含abc的命令
! -n 执行n个命令之前的那个命令
!* 调用上一条命令的所有参数
!$ 调用上一条命令的最后一个参数
!-: 调用上一条命令除了最后一个参数的部分
ALT + num + . 调用上一条命令中任意一个部分
!!:gs/$1/$2 替换上一条命令中所有$1为$2
!!:gs^$1^$2 替换上一条命令中第一个$1为$2
如何编程调用linux系统命令
首先,命令应该是好和其他两个区分开来的调用linux命令行了,因为命令都是可以直接敲在shell上面回车执行的,而系统调用和库函数都不行;
其次,百Linux系统调用和C库函数都是函数的形式,即都是“func(args)”的形式,但系统调用是
由系统内核对外提供的服务接口;C库函数和调用linux命令行你自己写的普通的函数没有本质的区别,只是在度C标准库中而已,Linux上面glibc就是C函数库。从表专面上看两者不太好区分,不过,你可以从它们需要包含的头文件来区分,C库函数像printf在stdio.h中,std就是标准(standard)的缩写形式,因此在stdxxx.h中的函数,基本都是C库函数;像
ssize_t
read(int
fd,
void
*buf,
size_t
count);这样很多的系统调用是包含在unistd.h中的,unistd意思是UNIX
Standard,从这个意义就可以区分了。
希望对你有所帮助,如还有问题,可随属时联系调用linux命令行我:-)
调用linux命令行的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 调用、调用linux命令行的信息别忘了在本站进行查找喔。