我可以通过直接点击我的网络服务器来访问一个网页,如下所示:
$ echo "GET /sample" | nc web-server 80
This is contents of /sample...
$
Run Code Online (Sandbox Code Playgroud)
现在,我希望 netcat 通过 Squid HTTP 代理(侦听端口 3128),就像我可以通过其代理首选项配置我的 Firefox 浏览器并让它通过 HTTP 代理运行一样。
我尝试了以下方法,但没有奏效:
$ echo "GET /sample" | nc -x squid-proxy:3128 web-server 80
<Seemed to be blocked FOREVER on input, so I killed it.>
<Ctrl-C>
$
Run Code Online (Sandbox Code Playgroud)
注意:我使用的是 RHEL 5.3 版本的 netcat,它具有以下选项:
$ nc --help
nc: invalid option -- -
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
[-x proxy_address[:port]] …
Run Code Online (Sandbox Code Playgroud) 我可以轻松地使用 Netcat(或 Socat)来捕获我的浏览器和特定主机:端口之间的流量。
但是对于 Linux,是否存在类似 Squid 的 HTTP 代理的任何命令行对应物,我可以使用它来捕获我的 HTTP 客户端(浏览器或命令行程序)和任意主机:端口之间的流量?
我有一个只读文件,F
.
程序,P
的,我不是作者,需要读取F
。
我希望 的内容F
来自另一个“生成器”程序,G
每当P
尝试读取F
(假设F
为普通文件)而不是更早时。
我尝试执行以下操作:
$ mkfifo /well-known/path/to/F # line #1
$ G > /well-known/path/to/F # line #2
Run Code Online (Sandbox Code Playgroud)
现在,当P
启动并尝试读取时F
,它似乎能够G
像我希望的那样读取由生成的输出。但是,它只能执行一次,因为 G 毕竟只能运行一次!所以,如果P
在执行过程中需要F
再次读取,它最终会阻塞在先进先出!
我的问题是,除了在某种无限循环中将上面的第 2 行括起来之外,还有其他(优雅的)替代方案吗?
我希望的是,某种方式将“钩子”程序注册到文件打开系统调用中,这样文件打开将导致钩子程序的启动和文件读取钩程序输出。显然这里的假设是:读取将从文件开始到文件结束顺序发生,并且永远不会随机查找。
这是我在打算替换/path/to/a
为/path/to/b
usingNUL
作为分隔符/定界符时尝试的方法:
$ cat pathsList| sed -r -e 's\0/path/to/a\0/path/to/b\0g'
sed: -e expression #1, char 27: number option to `s' command may not be zero
Run Code Online (Sandbox Code Playgroud)
我想要使用NUL
: NUL
和/
是唯一不允许的字符ext4fs
,并且/
已经被大量用作路径名分隔符。另外,我想避免仅仅为了能够使用而引用和取消引用我的数据sed
。
如果NUL
不能用作分隔符(比方说),我可以接受任何比引用和取消引用我的数据更好的解决方法。
$ sed --version
sed (GNU sed) 4.4
Run Code Online (Sandbox Code Playgroud) 我知道 Linux 不允许硬链接到目录。我在某处读到,
这是为了防止文件系统中的无意循环(或图形,而不是更理想的树结构)。
某些 *nix 系统确实允许 root 用户硬链接到目录。
因此,如果我们在一个这样的系统上(确实允许硬链接到目录)并且如果我们是 root 用户,那么..
在删除(硬链接的)目标和它的父母?
a (200)
\-- . (200)
\-- .. (100)
\-- b (300)
| \-- . (300)
| \-- .. (200)
| \-- c (400)
| \-- . (400)
| \-- .. (300)
| \-- d (500)
<snip>
|
\-- H (400)
Run Code Online (Sandbox Code Playgroud)
(上图中,括号中的数字是inode地址。)
如果a/H
是到目录的(尝试的)硬链接a/b/c
,则
inode 400 中存储的引用计数应该是多少:2、3 或 4?换句话说,硬链接到目录是否会将目标目录的 inode 的引用计数增加 1 或 2?
如果我们删除a/b/c
,inode 400 中的.
和..
条目将继续分别指向有效的 inode …
通过执行以下操作,我可以myHandler()
在bash
命令之前执行一个函数:
function myHandler() {
...
}
trap 'myHandler' DEBUG
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够BASH_COMMAND
根据以下运行时条件继续或中止即将执行的操作myHandler
:
function myHandler() {
if ! myCondition ; then
abort the execution of BASH_COMMAND right here
fi
# Proceed with the execution of BASH_COMMAND
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
当我使用 rpm 或 yum 从二进制包安装软件时,我可以稍后查询元信息 ( rpm -qi PACKAGE
, rpm -ql PACKAGE
, ...) 并可以卸载它 ( rpm -e PACKAGE
)。
但是对于我从源代码构建和安装的软件,我必须永远挂在构建目录上以便以后能够卸载它,因为删除构建目录将使我以后无法卸载该软件!即使您可以永远保留 build 目录,查询元信息也不容易,除非您知道 make 文件的复杂性。
问题:有什么办法可以make install
在 rpm/yum 数据库中“注册”正在安装的二进制文件(通常在大多数软件包的步骤中),以便以后轻松卸载和元信息查询?