小编x-y*_*uri的帖子

管道的链接目标是否存在于文件系统中的某处?

我正在谈论这个:

$ readlink <(echo test)
pipe:[80076194]
Run Code Online (Sandbox Code Playgroud)

pipe:[80076194]目标的路径还是只是表明文件描述符已连接到管道并且不存在于文件系统中?我问的主要原因是因为php有人试图取消引用它:

$ strace -f php -r 'var_dump(file_get_contents($_SERVER["argv"][1]));' -- <(echo test)
...
[pid   654] lstat("/dev/fd/63", {st_mode=S_IFLNK|0500, st_size=64, ...}) = 0
[pid   654] readlink("/dev/fd/63", "pipe:[80095114]", 4096) = 15
[pid   654] lstat("/dev/fd/pipe:[80095114]", 0x7fff9c3628a0) = -1 ENOENT (No such file or directory)
[pid   654] lstat("/dev/fd", {st_mode=S_IFLNK|0777, st_size=13, ...}) = 0
[pid   654] readlink("/dev/fd", "/proc/self/fd"..., 4096) = 13
[pid   654] lstat("/proc/self/fd", {st_mode=S_IFDIR|0500, st_size=0, ...}) = 0
[pid   654] lstat("/proc/self", {st_mode=S_IFLNK|0777, st_size=64, ...}) = 0
[pid …
Run Code Online (Sandbox Code Playgroud)

linux pipe proc

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

sed 范围并不总是只能匹配一行

考虑以下范围:1,/pattern/. 如果模式在第一行匹配,则整个文件的范围匹配:

$ cat 1.sh
#!/usr/bin/env bash
set -eu
seq 1 4 | sed -rn '1,/'"$1"'/p'
$ ./1.sh 1
1
2
3
4
$ ./1.sh 2
1
2
Run Code Online (Sandbox Code Playgroud)

你会怎么做?

UPD这是我所做的(以防万一):

re='/1/'
seq 1 4 | sed -rn "1{$re{p;q}}; 1,${re}p"
Run Code Online (Sandbox Code Playgroud)

或者这样:

seq 1 4 | sed -rn "1{/1/{p;q}}; 1,//p"
Run Code Online (Sandbox Code Playgroud)

shell sed

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

有没有办法在linux上安装多个版本的程序?

我正在尝试php-5.3在 Arch Linux上安装,但bison太新了,所以我bison从源代码构建了旧版本。并且它似乎/usr/local默认安装到其中。(这是某种约定吗?)所以我现在想知道我是否可以安装多个版本的bisonie,与默认系统一个版本和我刚刚安装的一个版本并排安装。这类东西可能很少需要。我只是对它很好奇。这是一件很难的事吗?我该怎么办?

software-installation

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

哪个 jabber 客户端接收消息?

jabber我的计算机 ( pidgin) 和手机 ( im+)上都有客户端。现在,每条消息都被其中的任意一个接收(或者看起来如此)。例如,如果一个人一个接一个地发送两条消息,一个可以进入一个客户端,第二个可以进入另一个客户端。是什么让某个特定客户端接收到消息?有没有办法让一个特定的客户端接收消息?所有的客户?

messaging jabber xmpp

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

gpg 导出哪些密钥,密钥环中有哪些?

最近我一直在浏览互联网上的内容gpg。我必须说这很令人困惑。

特别是导入/导出部分。生成密钥时,默认情况下基本上会获得 4 个密钥。导出密钥的可能方法有哪些(只有一个密钥,一次有多个密钥)?删除键的可能方法有哪些(相同)?另外,我现在不确定,如果我解释gpg --list-keysgpg --list-secret-keys结果是否正确。例如,我似乎只导出一个键(子键,gpg --export SUB_ID!),但在导入时我也得到了主键。

gpg

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

为什么 `journalctl --list-boots` 与 `uptime` 和 `who -b` 报告的内容不匹配?

这是我使用的测试脚本:

last_reboot=$(last reboot | grep 'still running' | awk '{for (i=5; i<=NF; i++) printf $i FS}' | awk '{for (i=1; i<=NF - 2; i++) printf $i FS}')
if [ "$last_reboot" ]; then
    date -d "$last_reboot" '+last reboot: %Y-%m-%d'
fi

days=$(uptime | awk '{print $3}')
hours=$(uptime | awk '{print $5}' | sed -E 's/,$//')
h=$(echo "$hours" | cut -d: -f 1)
m=$(echo "$hours" | cut -d: -f 2)
date -d "- $days days - $h hours - $m minutes" '+uptime: %Y-%m-%d' …
Run Code Online (Sandbox Code Playgroud)

boot systemd reboot journalctl systemd-journald

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

谁切断了进程替换文件的第一个符号,出于什么原因?

$ type 1.sh
#!/bin/bash -eu
php <(echo 12)
$ ./1.sh
2

$ type 2.sh
#!/bin/bash -eu
cat <(echo 12)
$ ./2.sh
12

$ type 3.sh
#!/bin/bash -eu
echo 12 | php
$ ./3.sh
12

$ type 4.sh
#!/bin/bash -eu
rm -f named_pipe
mknod named_pipe p
echo 12 > named_pipe
$ ./4.sh
$ php named_pipe   # from another window
2
Run Code Online (Sandbox Code Playgroud)

我在Debian( php-5.4.14, bash-4.1.5) 和Arch Linux( php-5.4.12, bash-4.2.42)上测试了它。

pipe php

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

为什么在 xterm + tmux 中按 Ctrl-h 会发送“^?”?

xterm

$ echo $TERM
xterm-256color
$ stty -a
speed 38400 baud; rows 52; columns 91; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk …
Run Code Online (Sandbox Code Playgroud)

gnu-screen tmux xterm gnome-terminal

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

捕获命令的退出代码和输出

我想做:

1.sh

#!/usr/bin/env bash
set -eu
r=0
a=$(./2.sh || r=$?)
echo "$a"
echo "$r"
Run Code Online (Sandbox Code Playgroud)

2.sh

#!/usr/bin/env bash
echo output
exit 2
Run Code Online (Sandbox Code Playgroud)

但它输出:

$ ./1.sh
output
0   # I'd like to have `2` here
Run Code Online (Sandbox Code Playgroud)

因为$(...)运行一个单独的shell。那么,我如何同时捕获退出代码和输出?

shell command-substitution exit-status

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

继承_errexit什么时候不起作用?

#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
a=$(cat no-such-file)
echo survived
Run Code Online (Sandbox Code Playgroud)
$ /tmp/a.sh
cat: no-such-file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
echo -n $(cat no-such-file)
echo survived
Run Code Online (Sandbox Code Playgroud)
$ /tmp/a.sh
cat: no-such-file: No such file or directory
survived
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
f() { :; }
f $(cat no-such-file)
echo survived
Run Code Online (Sandbox Code Playgroud)
$ /tmp/a.sh
cat: no-such-file: No such file or directory
survived
Run Code Online (Sandbox Code Playgroud)

还有其他案例吗?或者一些概括?

bash exit-status

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

qemu:从 CDROM 启动

我正在尝试按照此指南xubuntu在 USB 闪存驱动器上安装。我正在运行的命令是

qemu-system-x86_64 -drive file=/dev/sdc,media=disk,index=0,format=raw -cdrom ./xubuntu-15.10-desktop-amd64.iso -boot menu=on
Run Code Online (Sandbox Code Playgroud)

/dev/sdc我的 USB 驱动器格式化为ext4. 它开始从 启动xubuntu*.iso,我可以看到这个屏幕

但后来我遇到了内核恐慌

在此输入图像描述

不过,我能够使用 启动此映像virtualbox。它要挂载哪个分区?这一定和没有关系/dev/sdc吧?我究竟做错了什么?有什么线索吗?

kernel-panic qemu xubuntu root-filesystem

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

如何使用 ld-linux.so 运行程序?

动态链接器可以通过运行一些动态链接程序或共享对象来间接运行(在这种情况下,不能将命令行选项传递给动态链接器,在 ELF 情况下,动态链接器存储在 .interp程序的一部分被执行)或直接通过运行:

/lib/ld-linux.so.* [选项] [程序 [参数]]

https://jlk.fjfi.cvut.cz/arch/manpages/man/core/man-pages/ld.so.8.en

类似的信息可以在Program Library HOWTO 中找到。

但是当我尝试时,

$ LD_DEBUG=libs /usr/lib/ld-linux.so.2 ls
     23325: find library=ls [0]; searching
     23325:  search cache=/etc/ld.so.cache
     23325: 
ls: error while loading shared libraries: ls: cannot open shared object file

$ LD_DEBUG=libs ls
     23503: find library=libcap.so.2 [0]; searching
     23503:  search cache=/etc/ld.so.cache
     23503:   trying file=/usr/lib/libcap.so.2
...
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?有没有办法ld-linux.so直接使用来运行程序?

linux libraries dynamic-linking dynamic-loading ld

2
推荐指数
1
解决办法
5927
查看次数