标签: exec

如何将“tar”命令与“find”结合使用

find 命令给出以下输出:

[root@localhost /]# find var/log/ -iname anaconda.*
var/log/anaconda.log
var/log/anaconda.xlog
var/log/anaconda.yum.log
var/log/anaconda.syslog
var/log/anaconda.program.log
var/log/anaconda.storage.log

与 tar 结合后,它显示了这个输出:

[root@localhost /]# find var/log/ -iname anaconda.* -exec tar -cvf file.tar {} \;
var/log/anaconda.log
var/log/anaconda.xlog
var/log/anaconda.yum.log
var/log/anaconda.syslog
var/log/anaconda.program.log
var/log/anaconda.storage.log

但是在列出 tar 文件时它只显示一个文件

[root@localhost /]# tar -tvf file.tar
-rw------- root/root 208454 2012-02-27 12:01 var/log/anaconda.storage.log

我在这里做错了什么?

使用 xargs 我得到这个输出:

[root@localhost /]# find var/log/ -iname anaconda.* | xargs tar -cvf file1.tar

第二个问题

在var 前面键入/时,意味着find /var/log为什么它会给出此消息tar:从成员名称中删除前导 `/'

[root@localhost /]# find /var/log/ -iname anaconda.* …

linux centos find exec

38
推荐指数
4
解决办法
9万
查看次数

如何在 linux 上安全地运行不受信任的可执行文件?

我已经下载了一个由第三方编译的可执行文件,我需要它在我的机器(Ubuntu 16.04 - x64)上运行,并且可以完全访问硬件资源,例如 CPU 和 GPU(通过 nVidia 驱动程序)。

假设这个可执行文件包含病毒或后门,我应该如何运行它?

我应该创建一个新用户,用它运行它然后删除用户本身吗?

编辑

尚未批准下面的答案,因为 firejail可能不起作用

编辑 2

firejail是好的,但一个人必须在条款中指定的所有选项非常小心黑名单白名单。默认情况下,它不会执行这篇 linux-magazine文章中引用的内容(另请参阅firejail 作者的一些评论)。

使用它时要格外小心,如果没有正确的选择,它可能会给您一种虚假的安全感。

linux sandbox exec

33
推荐指数
1
解决办法
8966
查看次数

批处理运行 mogrify 包括子目录

该命令mogrify -format jpg *.NEF在目录中运行时会将所有*.NEF文件转换为 JPEG。我想要做的是能够使用一个命令在子目录内的*.NEF文件中运行 mogrify 。我正在尝试运行类似的东西:

find . -type d exec mogrify -format jpg *.NEF \;
Run Code Online (Sandbox Code Playgroud)

当然它不起作用。有人可以建议正确的命令吗?

linux command-line find exec

14
推荐指数
1
解决办法
8592
查看次数

sudo 作为 www-data 用户运行特定命令的权限,无需密码

我有一个网络服务器,也播放网络广播。作为 www-data 用户,我想运行一些命令,例如我在/etc/sudoers文件中做了这个:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer
Run Code Online (Sandbox Code Playgroud)

并形成 PHP 我可以在不使用密码的情况下通过以下方式操作音量:

exec('sudo -u user amixer set Master 3%-');
Run Code Online (Sandbox Code Playgroud)

和:

exec('sudo -u user amixer set Master 3%+');
Run Code Online (Sandbox Code Playgroud)

但是现在我希望能够通过运行命令来重新启动我自己的服务:

exec('sudo -u user service servicename restart');
Run Code Online (Sandbox Code Playgroud)

所以我试过:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /bin/service
Run Code Online (Sandbox Code Playgroud)

和这个:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, /bin/service
Run Code Online (Sandbox Code Playgroud)

甚至这个:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer
www-data        ALL=(ALL) NOPASSWD: /bin/service
Run Code Online (Sandbox Code Playgroud)

但他们似乎都没有工作。请帮帮我。


对不起,伙计们 - 我的错误。我做了一些更改,尝试将表单 /sbin 链接到 /bin

现在我已将其更改为:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /usr/sbin/service
Run Code Online (Sandbox Code Playgroud)

它有效!谢谢!话题关闭。

permissions php sudoers exec

8
推荐指数
1
解决办法
6万
查看次数

为什么 sudo 在执行进程之前会分叉?

这个问题可能看起来有点傻,但由于在基于 Unix 的系统中,替换可执行文件的映像是一步完成的,替换当前运行的进程,在函数调用execve(和派生类)中,问题是:

为什么sudo fork()默认情况下在execve更换过程之前?

通过之前的fork,额外的内核元素必须被初始化,虽然fork在一些Unices中已经相当优化,但仍然有一些不可避免的元素必须被初始化。如果fork()默认情况下没有发生,则 PID 空间会增加得更慢。

如果您好奇,可以通过发出如下命令来检查此默认行为

sudo sleep 30
Run Code Online (Sandbox Code Playgroud)

当前的代码 [ 1 ] 遵循起来要复杂得多,因为此后添加了许多功能;但在 Apple [ 2 ]托管的版本中,它的作用非常清楚。

#ifndef PROFILING
    if ((sudo_mode & MODE_BACKGROUND) && fork() > 0)
        exit(0);
    else
        EXEC(safe_cmnd, NewArgv);   /* run the command */
#else
/* Complicated code when profiling is enabled, but we don't care */
Run Code Online (Sandbox Code Playgroud)

我目前正在运行 sudo 版本 1.8.11p2,无论有没有-b开关,它都会以任何一种方式产生睡眠,所以似乎当前的代码变得更加复杂。

我正在寻找一个答案,其中还涵盖了为什么这是默认行为,以及它可以为我们带来哪些优势。

linux unix sudo exec

5
推荐指数
1
解决办法
1782
查看次数

`find -exec` 内的重定向或管道

任何“find -exec”大师都在身边。

我有一个需要发送到的文件文件夹sendmail(当发生不好的事情时它们会出现在其中)。

怎么了?

linux find exec

5
推荐指数
1
解决办法
3065
查看次数

xargs/exec 的参数列表太长

我正在 CentOS 服务器上工作,我必须四处移动并将数百万个文件整理在一起。我已经尝试了许多类似下面的内容,但所有这些都因参数列表太长错误而失败。

命令:

find ./ -iname out.* -type f -exec mv {} /home/user/trash
find ./paramsFile.* -exec cat > parameters.txt 
Run Code Online (Sandbox Code Playgroud)

错误:

-bash: /usr/bin/find: Argument list too long
-bash: /bin/cat: Argument list too long
Run Code Online (Sandbox Code Playgroud)

或者

echo ./out.* | xargs -I '{}' mv /home/user/trash
(echo ./paramsFile.* | xargs cat) > parameters.txt  
Run Code Online (Sandbox Code Playgroud)

错误:

xargs: argument line too long
xargs: argument line too long              
Run Code Online (Sandbox Code Playgroud)

第二个命令也从未完成。我听说过一些关于通配符的事情,但我不确定我是否完全理解它。欢迎任何提示或建议!

linux bash find xargs exec

3
推荐指数
1
解决办法
1万
查看次数

如何执行通过find找到的文件

我在目录树下有一些可执行文件。我想找到它们并以最简单的方式执行它们。到目前为止,我已经尝试过: find . -perm 0775 -type f | xargs exec 但是 exec 不是可执行文件,它是 bash 内部的。我可以创建一个包装脚本,它看起来像这样:

#!/bin/bash
# exec.sh
exec $1
Run Code Online (Sandbox Code Playgroud)

然后可以运行find . -perm 0775 -type f -exec ./exec.sh {} \; 但是必须有一种更优雅和更短的方式来做到这一点。

bash find exec

3
推荐指数
1
解决办法
2029
查看次数

标签 统计

exec ×8

linux ×6

find ×5

bash ×2

centos ×1

command-line ×1

permissions ×1

php ×1

sandbox ×1

sudo ×1

sudoers ×1

unix ×1

xargs ×1