标签: bsd

如何在 BSD find 中使用 xargs?

有了 GNU find,就可以很容易地通过管道传输xargs。一个典型的(无用的)例子:

find /var/log -name "*.log" | xargs dirname
Run Code Online (Sandbox Code Playgroud)

这将返回包含某个日志文件的所有目录名称。

同样的命令在 BSD 中find不起作用,结尾为:

usage: dirname path
Run Code Online (Sandbox Code Playgroud)

xargs无法将文件列表条目传递给dirname.

BSDfind的联机帮助页提到了-exec-execdir选项,指出“此行为类似于 xargs(1)”。

-exec utility [argument ...] {} + 与 -exec 相同,但每次调用实用程序时,将“{}”替换为尽可能多的路径名。此行为与 xargs(1) 类似。

-execdir utility [argument ...] {} + 与 -execdir 相同,只是“{}”在每次调用实用程序时被替换为尽可能多的路径名。此行为与 xargs(1) 类似。

每次我依靠这两个标志时,我都必须再次阅读文档。我似乎记不起它们的用法了!另外,我还关心 GNU/BSD 系统(主要是 Linux、Open/FreeBSD 和 MacOS)之间的脚本可移植性。

有什么方法可以将 BSD 传输findxargs,或者-exec确实是唯一的选择?

shell portability bsd find xargs

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

OpenBSD 无法执行 a.out

我编写了这个程序,应该以 exitcode 44 退出:

// prog.S
#include <sys/syscall.h>
        .text
        .globl _start
_start:
        subl $8, %esp
        pushl $44
        pushl $0
        movl $SYS_exit, %eax
        int $0x80
Run Code Online (Sandbox Code Playgroud)

我编译了

$ cc prog.S -nostdlib -o a.out
Run Code Online (Sandbox Code Playgroud)

并运行

$./a.out
Run Code Online (Sandbox Code Playgroud)

在 FreeBSD 13.0-RELEASE i386 (clang 11.0.1) 上这样做效果很好。事实上,可执行文件运行并且程序的退出代码应该是 44。

但是,在 OpenBSD 7.0 GENERIC.MP#5 i386(clang 版本 11.1.0)和 NetBSD 9.2 i386(gcc 7.5.0)上执行相同操作时,内核拒绝执行代码,并将其传递给 shell,其中课程失败:

openbsd$ ./a.out
./a.out[1]: syntax error: `(' unexpected
Run Code Online (Sandbox Code Playgroud)

奇怪的是,该文件说它是一个 ELF 二进制文件,因此通常应该由内核执行

openbsd$ file a.out

a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped …
Run Code Online (Sandbox Code Playgroud)

assembly openbsd bsd freebsd netbsd

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

GNU sed 和 BSD sed 区别说明

我写了以下命令

echo -en 'uno\ndue\n' | sed -E 's/^.*(uno|$)/\1/'
Run Code Online (Sandbox Code Playgroud)

期待以下输出

uno

Run Code Online (Sandbox Code Playgroud)

我的 GNU Sed 4.8 确实就是这种情况。

但是,我已经验证 BSD Sed 输出



Run Code Online (Sandbox Code Playgroud)

为什么会这样?

bsd gnu sed gnu-sed

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

是否有充分的理由编写自己的守护进程函数而不是使用守护进程(3)?

网上有很多守护进程的示例实现.我看到的大多数都不使用守护进程(3)函数在后台运行程序.这只是一个品味,无知的问题,还是有充分的理由来编写我自己的守护进程功能?使用守护进程(3)有特定的缺点吗?它不安全吗?

c unix linux bsd daemon

4
推荐指数
1
解决办法
1230
查看次数

BSD操作系统上的原始套接字

我一直在用C编写一些套接字代码.我需要修改数据包头并控制它们的发送方式,所以我采用了原始套接字方法.但是,我写的代码不能在BSD系统上编译(Mac OS X/Darwin,FreeBSD等)

我已经对此进行了大量研究,并发现BSD系统无法像Linux(甚至Windows)那样处理原始套接字.从我读过的内容来看,似乎我需要使用bpf(berkley数据包过滤器),但我无法弄清楚bpf是如何工作的,或者我将如何使用原始套接字.

如果有人能对这一点有所了解,我会非常兴奋:D

PS我甚至会对一些显示如何在BSD环境中处理原始套接字的源代码感到满意.它不一定是指导或解释.我只想看看它是如何工作的.

c sockets bsd

4
推荐指数
1
解决办法
3336
查看次数

Mac OS X和BSD上的'git grep'和单词边界

我运行git grep "\<blah\>"规律我的Linux开发服务器上,但我刚发现我不能够使用\<,并\>在Mac(Mac OS X的10.6.8)(无法使用它=没有找到任何东西)。Mac中的正则表达式语法是否不同?

我尝试使用git grep -E "\<blah\>"但无济于事!:-(

regex git macos grep bsd

4
推荐指数
3
解决办法
1545
查看次数

C网络编程?

在Windows和UNIX上使用C进行网络编程最好(在性能方面)哪些库?

我对高频交易非常感兴趣.

我听说过BSD和POSIX,但我不确定是否有更快的性能特定库?

c unix bsd posix

4
推荐指数
1
解决办法
880
查看次数

我如何知道为*.a文件构建的架构?

我正在研究mac OS 10.7.4.使用Xcode 4.3.2.

我有一个来自我的合作伙伴的*.a静态库文件.我想知道它是为哪个架构而构建的.是ARMv6,ARMv7,i386还是其他架构?

是否有任何命令或方法来获取有关文件架构的信息?

bsd arm ios

4
推荐指数
1
解决办法
2205
查看次数

typedef int function(void*)的含义是什么?

我使用以下构造看到了一些BSD代码:

typedef int driver_filter_t(void*);
Run Code Online (Sandbox Code Playgroud)

这究竟是什么意思?我不认为它是一个函数指针,因为否则会是这样的typedef int (*driver_filter_t)(void*),对吧?

c bsd typedef function

4
推荐指数
1
解决办法
728
查看次数

OpenBSD 上有哪些类似 Jail/Chroot/Sandbox 的机制?

我最近开始使用 OpenBSD。我想创建简单的即发即弃容器/VM 或其他东西(它应该用作沙箱)。

用户可以上传他的源代码(C++/Java/Perl),它会在服务器(OpenBSD)上编译,如果编译成功,它应该执行这个文件,然后将结果返回到网页。

我如何在 OpenBSD 中提供这个?

另外,我应该使用 chroot,因为 'jail' 将在 6.0 中删除吗?或者还有其他可能在 OpenBSD 中创建“沙箱”吗?

security openbsd bsd chroot sandbox

4
推荐指数
1
解决办法
8022
查看次数

标签 统计

bsd ×10

c ×4

openbsd ×2

unix ×2

arm ×1

assembly ×1

chroot ×1

daemon ×1

find ×1

freebsd ×1

function ×1

git ×1

gnu ×1

gnu-sed ×1

grep ×1

ios ×1

linux ×1

macos ×1

netbsd ×1

portability ×1

posix ×1

regex ×1

sandbox ×1

security ×1

sed ×1

shell ×1

sockets ×1

typedef ×1

xargs ×1