当我把这个
nc -l 12345 >nc_out
Run Code Online (Sandbox Code Playgroud)
在一个 shell 脚本中,运行它,然后使用 telnet 从其他 shell 连接,它允许我输入一些文本并让它在nc_out 中结束。
但是如果我在后台启动 nc (我想稍后从同一个脚本启动 telnet):
nc -l 12345 >nc_out &
Run Code Online (Sandbox Code Playgroud)
连接立即关闭:
# telnet localhost 12345
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host
#
Run Code Online (Sandbox Code Playgroud)
将 nc_out 文件留空。
这是为什么?如何让nc正常接受连接?
笔记:
在 RHEL 和 Fedora 上,nc和nmap-ncat 都是这种行为,但 Debian 的nc-traditional确实接受连接并让我将数据保存到 nc_out。
无论我是从同一个脚本还是不同的(SSH)会话中调用 telnet,行为都是一样的
我还按照@Hauke Laging 的建议使用 strace …
在运行 Fedora 20 的 KVM 机器上,我运行了ulimit -s unlimited(这消除了对堆栈大小的限制)和一个实验性的折磨测试脚本。这个脚本所做的只是无限递归:
#!/bin/bash
fn() {
true
fn
}
fn
Run Code Online (Sandbox Code Playgroud)
我所期望的是 CPU 使用率将达到 100%,并且在一些资源耗尽(这可能需要很长时间)之后,bash 最终会被内核击落。
但真正发生的事情有些奇怪,我没有正确的知识来解释:
在 VM 内部,top 通过这个有趣的脚本报告了 100% 的 CPU 使用率。那讲得通。
但从外部来看,virt-manager 显示 0% 没有 CPU 使用率,预计会出现 100% 的峰值。好像这还不够奇怪,在每个连续峰值之间观察到的延迟正在增长(最终延迟停止增长并变得一致):

为什么是这样?里面究竟发生了什么?或者 virt-manager 报告的用法是否具有误导性?那么是什么创造了在峰之间看到的图案?
我有两张外观相同的 2GB microSD 卡,在“2GB microSD”标志下都标有“SD-C02G JAPAN”。
我的问题是,除了旧的诺基亚 5310 "XpressMusic"之外,我无法在任何设备上阅读其中一个 。手机快要死了,我的意思是它很难操作(功能失调的键,显示器发疯),但它可以读/写卡的事实让我相信卡没有坏(不管那意味着什么)。
(我愿意相信这张卡已经死了,只是把它扔进垃圾桶,但我不得不忍受这样的问题:为什么旧的诺基亚仍然可以读取它?)
我还应该提一下,这张卡可能之前已经在诺基亚手机中通过某种技术加密了(不是同一台机器,而是另一块相同型号的手机,现在也已经死了。)。(“可能”,因为房子里有更多的卡片,我知道其中一张已经过加密,而且由于到处都是其他工作,我认为就是这张卡片)。
现在我用两张卡尝试了其他方法(我将主要描述“坏”卡行为):
(A) 两款不同的安卓手机,都显示卡根本没有插入,因此不提供格式化选项
(B) 一台装有 Ubuntu 12.04 LTS(内核 3.2.0-37-generic,x86_64)的 PC,使用小型金士顿 USB 记忆棒大小的 microSD 读卡器
一台带有 Debian Wheezy(内核 3.0.0.1-amd64)的笔记本电脑,使用
(C) 与 (B) 相同的方法;lsusb 告诉我:
Bus 001 Device 005: ID 14cd:121c Super Top microSD card reader
Run Code Online (Sandbox Code Playgroud)(D) 一个内置的,即 PCI SD 读卡器(借助 microSD 转 SD 适配器,因为读卡器没有足够小的插槽);lspci 告诉我:
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)
Run Code Online (Sandbox Code Playgroud)(A) 没有给我任何有用的信息,据我所知,(B) 和 (C) 的行为是一样的。因此,我将(C)和(D)与“好”和“坏”卡进行比较:
使用方法 …
有时我需要在未知的点文件中找到罪魁祸首,而不是试图找出应该归咎于哪个包(例如 xfce4 或 thunar?)以及它们的命名约定是什么(.app vs .application vs .some_old_name vs .config/app...),我只想快速而肮脏的方式:
me@here:~$ grep -IR .* -e culprit
Run Code Online (Sandbox Code Playgroud)
但这种快速而肮脏的方式也是愚蠢的方式。几分钟后,我明白这也.*意味着..,我们就这样了。有时我会求助于可能更快更脏的变体:
me@here:~$ grep -IR /home/me -e culprit
Run Code Online (Sandbox Code Playgroud)
结果证明这是一种非常愚蠢的行为,特别是如果我对mount我的$HOME. 太糟糕了,我无法找出快速、干净和正确的方法。(而且我的磁头正在慢慢磨损。)
是否有可能在通配符扩展中实现这一点?即.*不匹配..(和../.....)的变体?
您可能知道,当您从 X 终端(rxvt、gnome-terminal...)ssh 到服务器时,ssh 会更改窗口标题以反映 user@host,但它不会将其更改回来。
互联网上有很多解决方法的技巧。我不是要另一个1。
我正在寻找的是解释为什么会这样。所以我可以学会忍受它。为什么 ssh 不设置标题?
更符合 FITD 的方式:如果 vim 可以做到,为什么 ssh 不能?
1 ...除非解释是问题仅由 ssh 配置错误引起,在这种情况下,我欢迎解决该问题。
我刚刚在 Fedora 20 上发现,无论是 Thunar 还是 Nautilus(我在这里使用的是 Xfce4),我都无法将文件从 /var/tmp 移动到垃圾箱。更准确地说,在 Nautilus 中菜单选项不可用,而在 Thunar 中它表现为“永久删除”。在任何一种情况下,这是特殊情况。
这是为什么?垃圾箱应该只能从主文件夹工作吗?
如何确定“最大数字”,以便 sort -n 始终将其放在最后?我正在考虑Inf一些语言中的一些东西,但我不确定是否存在这样的排序。
背景是我正在按年龄对可能不存在的路径列表进行排序,以便
存在先行,从新到旧,
不存在的走最后。
我正在使用装饰方法并试图惩罚那些未出生的孩子:
INFINITY=99999999999999 # ...close enough, right?
age_of() {
if [ -e $1 ];
then
local ctime=$(stat -c %Z "$1" 2>/dev/null)
local now=$(date +%s)
echo $(($now - $ctime))
else
echo $INFINITY
fi
}
cat - \
| while read path;
do
echo "$(age_of $path) $path"
done \
| sort -n \
| cut -d\ -f 2-
Run Code Online (Sandbox Code Playgroud)
但显然评论很幼稚;即使 99999999999999 也不够接近,这只是时间问题。;)
那么 INFINITY 有更好的价值吗?
在查看某些源代码树时,有时我会遇到扩展名为“*.in”的文件,通常是属于 /etc 或 /usr/share 下某处的未编译文件。
例如,在openwsman源代码中,我可以看到文件:
etc/owsmangencert.sh.in
Run Code Online (Sandbox Code Playgroud)
按内容对应
/etc/openwsman/owsmangencert.sh
Run Code Online (Sandbox Code Playgroud)
从 RPM (RHEL7) 部署时,保存一些变量引用。
我假设在构建过程中使用这样的文件最终出现在提到的路径中。但为什么他们被命名originalname.in而不是originalname?像这样的文件在登陆之前通常会发生什么?
这些文件是如何命名的?有人能指出我正确的文件吗?
注意 Openwsman 也有 etc/owsmangencert.sh.cmake,情况类似。
从我手头没有的旧磁盘,我创建了一个名为 winxp.img 的文件,使用partimage. 正如文件名所暗示的那样,该分区包含 Windows XP 并使用 NTFS 格式化。
(该文件仅包含一个 4.6 GiB 的 NTFS 分区,而不是整个磁盘。)
如何在不将其恢复到物理磁盘上的情况下访问该映像中的文件?
我有一个简单的 Python 脚本:
#!/usr/bin/python
import os, sys
sys.stderr.write('I am %s' % os.getpid())
sys.stderr.flush()
print "hello"
sys.stderr.write('I am done')
Run Code Online (Sandbox Code Playgroud)
当我从 Bash 运行此脚本并将标准输出重定向到 FIFO 时:
$ mkfifo fifo
$ /pyscript > fifo
Run Code Online (Sandbox Code Playgroud)
奇怪的是,在我从 FIFO 读取之前:
我不会收到“我是(PID)”消息,
我看不到脚本使用 ps -ef
并使用lsof,我看不到任何人打开了fifo文件!
一旦我从 FIFO 中读取数据,我写入 stderr 的两条消息就会立即出现。
怎么了?
背景:我正在编写一个测试,在其中创建 FIFO 并向其写入“hello”;然后我运行一个测试并期望 SUT不会从中读取;IE。只需忽略该文件。我试图这样做,mkfifo test_fifo; /bin/echo hello > test_fifo &; run_the_test; killall echo但令我惊讶的是,这个echo过程根本不存在!在这样的测试之后我应该如何“清理”(除了rm test_fifo)...?
command-line ×2
shell ×2
bash ×1
compiling ×1
cpu ×1
debian ×1
desktop ×1
dot-files ×1
fifo ×1
file-manager ×1
files ×1
grep ×1
kvm ×1
linux ×1
mount ×1
netcat ×1
ntfs ×1
partimage ×1
partition ×1
process ×1
sd-card ×1
sort ×1
source ×1
ssh ×1
tcp ×1
telnet ×1
terminal ×1
trash ×1
window-title ×1