小编Alo*_*dal的帖子

nc -l 在后台立即关闭 (nc -l 1234 &)

当我把这个

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 上,ncnmap-ncat 都是这种行为,但 Debian 的nc-traditional确实接受连接并让我将数据保存到 nc_out。

  • 无论我是从同一个脚本还是不同的(SSH)会话中调用 telnet,行为都是一样的

  • 我还按照@Hauke Laging 的建议使用 strace …

tcp telnet netcat

7
推荐指数
1
解决办法
8365
查看次数

KVM 报告奇怪的 CPU 使用率峰值(bash 无限递归)

在运行 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% 的峰值。好像这还不够奇怪,在每个连续峰值之间观察到的延迟正在增长(最终延迟停止增长并变得一致):

CPU 使用高峰

为什么是这样?里面究竟发生了什么?或者 virt-manager 报告的用法是否具有误导性?那么是什么创造了在峰之间看到的图案?

bash cpu kvm virtual-machine

7
推荐指数
1
解决办法
629
查看次数

无法访问 SD 卡(不过可以在旧​​诺基亚中使用)

背景

我有两张外观相同的 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)与“好”和“坏”卡进行比较:

mkdosfs

使用方法 …

linux debian sd-card

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

正确使用 -R 查找点文件?

有时我需要在未知的点文件中找到罪魁祸首,而不是试图找出应该归咎于哪个包(例如 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. 太糟糕了,我无法找出快速、干净和正确的方法。(而且我的磁头正在慢慢磨损。)

是否有可能在通配符扩展中实现这一点?即.*不匹配..(和../.....)的变体?

command-line shell grep dot-files

6
推荐指数
3
解决办法
9120
查看次数

为什么 ssh 不会将终端标题转回?

您可能知道,当您从 X 终端(rxvt、gnome-terminal...)ssh 到服务器时,ssh 会更改窗口标题以反映 user@host,它不会将其更改回来。

互联网上有很多解决方法的技巧。我不是要另一个1

我正在寻找的是解释为什么会这样。所以我可以学会忍受它。为什么 ssh 不设置标题?

更符合 FITD 的方式:如果 vim 可以做到,为什么 ssh 不能?

1 ...除非解释是问题仅由 ssh 配置错误引起,在这种情况下,我欢迎解决该问题。

command-line ssh terminal window-title

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

为什么我不能从 /var/tmp 移动到垃圾箱?

我刚刚在 Fedora 20 上发现,无论是 Thunar 还是 Nautilus(我在这里使用的是 Xfce4),我都无法将文件从 /var/tmp 移动到垃圾箱。更准确地说,在 Nautilus 中菜单选项不可用,而在 Thunar 中它表现为“永久删除”。在任何一种情况下,这是特殊情况。

这是为什么?垃圾箱应该只能从主文件夹工作吗?

desktop file-manager trash files

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

sort -n 的最大可能数

如何确定“最大数字”,以便 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 有更好的价值吗?

sort

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

带有 `*.in` 扩展名的源文件

在查看某些源代码树时,有时我会遇到扩展名为“*.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,情况类似。

compiling source

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

挂载使用 partimage 创建的 NTFS 映像文件

从我手头没有的旧磁盘,我创建了一个名为 winxp.img 的文件,使用partimage. 正如文件名所暗示的那样,该分区包含 Windows XP 并使用 NTFS 格式化。

(该文件仅包含一个 4.6 GiB 的 NTFS 分区,而不是整个磁盘。)

如何在不将其恢复到物理磁盘上的情况下访问该映像中的文件?

partition mount ntfs partimage

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

为什么进程在fifo读取之前(似乎)不存在

我有一个简单的 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)...?

shell process io-redirection fifo

5
推荐指数
2
解决办法
1091
查看次数