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.* …
我已经下载了一个由第三方编译的可执行文件,我需要它在我的机器(Ubuntu 16.04 - x64)上运行,并且可以完全访问硬件资源,例如 CPU 和 GPU(通过 nVidia 驱动程序)。
假设这个可执行文件包含病毒或后门,我应该如何运行它?
我应该创建一个新用户,用它运行它然后删除用户本身吗?
编辑
尚未批准下面的答案,因为 firejail可能不起作用。
编辑 2
firejail是好的,但一个人必须在条款中指定的所有选项非常小心黑名单和白名单。默认情况下,它不会执行这篇 linux-magazine文章中引用的内容(另请参阅firejail 作者的一些评论)。
使用它时要格外小心,如果没有正确的选择,它可能会给您一种虚假的安全感。
该命令mogrify -format jpg *.NEF在目录中运行时会将所有*.NEF文件转换为 JPEG。我想要做的是能够使用一个命令在子目录内的*.NEF文件中运行 mogrify 。我正在尝试运行类似的东西:
find . -type d exec mogrify -format jpg *.NEF \;
Run Code Online (Sandbox Code Playgroud)
当然它不起作用。有人可以建议正确的命令吗?
我有一个网络服务器,也播放网络广播。作为 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)
它有效!谢谢!话题关闭。
这个问题可能看起来有点傻,但由于在基于 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开关,它都会以任何一种方式产生睡眠,所以似乎当前的代码变得更加复杂。
我正在寻找一个答案,其中还涵盖了为什么这是默认行为,以及它可以为我们带来哪些优势。
任何“find -exec”大师都在身边。
我有一个需要发送到的文件文件夹sendmail(当发生不好的事情时它们会出现在其中)。
命令
find . -type f -exec sendmail -t < {} \;
Run Code Online (Sandbox Code Playgroud)
给我
-bash: {}: No such file or directory
Run Code Online (Sandbox Code Playgroud)
看来不是很喜欢<。
和这个
find . type -f -exec cat {} |sendmail -t \;
Run Code Online (Sandbox Code Playgroud)
给我
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)
看来不是很喜欢|。
怎么了?
我正在 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)
第二个命令也从未完成。我听说过一些关于通配符的事情,但我不确定我是否完全理解它。欢迎任何提示或建议!
我在目录树下有一些可执行文件。我想找到它们并以最简单的方式执行它们。到目前为止,我已经尝试过:
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 {} \;
但是必须有一种更优雅和更短的方式来做到这一点。