2016-10-08 17:17:34 kelsel 阅读数 142

  1. 格式:
  2. -exec command {}空格\;

  3. find . -name Makefile -exec rm {} \;
  4. find . -name *.c -exec wc -l {} \;


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
2018-07-13 16:59:55 nicholas_dlut 阅读数 4585
在Linux中要使用exec函数族。系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文件名(filename)、参数列表(argv)以及环境变量(envp)。exec函数族当然不止一个,但它们大致相同,在 Linux中,它们分别是:execl,execlp,execle,execv,execve和execvp,下面我只以execlp为例,其它函数究竟与execlp有何区别,请通过manexec命令来了解它们的具体情况。
一个进程一旦调用exec类函数,它本身就"死亡"了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。(不过exec类函数中有的还允许继承环境变量之类的信息。)

如果我的程序想启动另一程序的执行但自己仍想继续运行的话,怎么办呢?那就是结合fork与exec的使用。下面一段代码显示如何启动运行其它程序:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
char command[256];
void main()
{
int rtn; /*子进程的返回数值*/
while(1) {
/* 从终端读取要执行的命令 */
printf( ">" );
fgets( command, 256, stdin );
command[strlen(command)-1] = 0;
if ( fork() == 0 ) {/* 子进程执行此命令 */
 execlp( command, NULL );
 /* 如果exec函数返回,表明没有正常执行命令,打印错误信息*/
 perror( command );
 exit( errno );
}
else {/* 父进程, 等待子进程结束,并打印子进程的返回值 */
 wait ( &rtn );
 printf( " child process return %d\n", rtn );
}
}
}
2014-04-30 01:23:40 EastonWoo 阅读数 1164

linux find -exec 用法

 

模式:

        find <dir> -name <expression> -exec <command> {} \;

 

       dir :检索路径

       expression: 表达式(通用模式,不是正则表达式)

       command: 二级命令

       {} : 表示find 每检索出来一条的替代符号,(固定格式)

       \;  (固定格式)

       另:{} \; 这两个固定格式之间是有空格的

 

如:

[user:public] find . -name test*.g* -exec ls -l {} \;
-rwxr-xr-x 1 user user 1441792  4月 29 23:37 ./lib_stream/simples/test.g711      #此时,{} 表示./lib_stream/simples/test.g711  
-rw-r--r-- 1 user user 3331  4月 29 23:32 ./app_dev/test.gps
-rw-r--r-- 1 user user 1441792  4月 29 23:32 ./app_dev/test.g711
[user:public]

我们可以做一下变形:

func() { find . -name $1  -exec ls -l  {} \; ; } ; func test*.g*

又如:

[user:public] func() { f $1  -exec ls -l  {} \; ; } ; func test*.g*
-rwxr-xr-x 1 user user 1441792  4月 29 23:37 ./lib_stream/simples/test.g711
-rw-r--r-- 1 user user 3331  4月 29 23:32 ./app_dev/test.gps
-rw-r--r-- 1 user user 1441792  4月 29 23:32 ./app_dev/test.g711
[user:public]

好了.把它加到 ~/.bashrc 里做一个别名

alias fll='func() { find . -name $1  -exec ls -l  {} \; ; } ; func '

如:
[user:public] fll test*.g*
-rwxr-xr-x 1 user user 1441792  4月 29 23:37 ./lib_stream/simples/test.g711
-rw-r--r-- 1 user user 3331  4月 29 23:32 ./app_dev/test.gps
-rw-r--r-- 1 user user 1441792  4月 29 23:32 ./app_dev/test.g711
[user:public]

 

command: 这个二级命令可以换成rm -rf 等. 也可以把检索出来文件名改名.

2014-08-29 16:27:05 yanggd1987 阅读数 624

exec在shell中使用时执行不会返回当前的shell, 而是和之前的shell独立,就像是两个程序,但是不会产生新的pid。

exec命令如下:

exec ls

在shell中执行ls,ls结束后不返回原来的shell中了

exec <file

将file中的内容作为exec的标准输入

exec >file

将file中的内容作为标准写出

exec 3<file

将file读入到fd3中

exec 4>file

将写入fd4中的内容写入file中

ls >&4
Ls将不会有显示,直接写入fd4中了,即上面的file中

exec 5<&4

创建fd4的拷贝fd5

exec 3<&-

关闭fd3


示例1如下:

[root@localhost jexusbak]# 
[root@localhost jexusbak]# pwd
/root/jexusbak
[root@localhost jexusbak]# ls
default  fanti  qqxdlq2  souhu  xdlq2  xdlq2ceshi  xunlei
[root@localhost jexusbak]# bash
[root@localhost jexusbak]# exec > test
[root@localhost jexusbak]# ls
[root@localhost jexusbak]# pwd
[root@localhost jexusbak]# exit
exit
[root@localhost jexusbak]# cat test
default
fanti
qqxdlq2
souhu
test
xdlq2
xdlq2ceshi
xunlei
/root/jexusbak
[root@localhost jexusbak]# 


如上:在执行exec >ls后,再输入命令ls,pwd不会输出到当前 shell中,而是重定向到test这个文件中,这些都是在一个shell中实现的,并不会产生新pid;关闭的exec请使用

exec <&-


示例2如下:

[root@localhost jexusbak]# cat test 
ls
pwd
[root@localhost jexusbak]# bash
[root@localhost jexusbak]# exec < test
[root@localhost jexusbak]# ls
default  fanti  qqxdlq2  souhu  test  xdlq2  xdlq2ceshi  xunlei
[root@localhost jexusbak]# pwd
/root/jexusbak
[root@localhost jexusbak]# exit
[root@localhost jexusbak]# 


如上:我们test中原来有ls,pwd两行命令,我们将test中的内容作为exec的标准输入,则会在屏幕上依次执行这两个命令。



综上所述,我们可以使用此种方法打印日志,而不必逐行命令加重定向生成。

如:exec 100>/tmp/test

exec 1>&100

exec 2>&1

exec 100<&-最后关闭fd,我们要有关闭文件描述符的习惯。


2019-06-19 14:54:08 ll148305879 阅读数 471

linux中exec 5</dev/button 中的5表示什么意思

打开设备文件/dev/button并将其关联到文件描述符5,以后就可以通过描述符5来访问设备button

 

可以理解为执行驱动的open函数

 

关闭命令 : exec 5<&-

 

另一个例子:

exec fd 打开文件描述符fd
exec 0</dev/tty1 表示将/dev/tty1的输入作为标准输入

Linux exec命令

阅读数 3372

linux exec命令

阅读数 1976

linux exec命令

博文 来自: wh62592855

linux find exec

阅读数 316

Linux下的exec函数

阅读数 614

没有更多推荐了,返回首页