Articles of unix

用netpipes / netcat绑定端口

我正在尝试编写一个简单的bash脚本,它正在端口上侦听,并用一个简单的HTTP响应进行响应。 我的具体问题是,我不知道端口是否可用,并在绑定失败的情况下,我回落到下一个端口,直到绑定成功。 到目前为止,实现这个目标的最简单的方法是这样的: for (( i=$PORT_BASE; i < $(($PORT_BASE+$PORT_RANGE)); i++ )) do if [ $DEBUG -eq 1 ] ; then echo trying to bind on $i fi /usr/bin/faucet $i –out –daemon echo test 2>/dev/null if [ $? -eq 0 ] ; then #success? port=$i if [ $DEBUG -eq 1 ] ; then echo "bound on […]

从Linux进程分配的堆栈内存在哪里?

我们知道当创build一个进程时,为这个进程分配一个堆栈。在linux中,堆栈的大小通常是8Mb。我的问题是,从这个堆栈分配的位置?从用户空间还是从系统空间?

相对shebang:如何编写一个运行它的可移植解释器的可执行脚本

比方说,我们有一个程序/软件包,它有自己的解释器和一组脚本,应该在执行时调用它(使用shebang)。 假设我们想保持它的可移植性,即使只是复制到不同的位置(不同的机器),它仍然可以运行,而不需要调用setup / install或者修改环境(PATH)。 系统解释器不应该混入这些脚本。 给定的约束条件不包括像绝对path这样的已知方法: #!/usr/bin/python 并在环境中search #!/usr/bin/env python 单独的发射器看起来很丑,不能接受。 我发现了很好的总结了shebang局限性,这些局限性描述了为什么shebang中的相对path是无用的,解释者不能有多于一个参数: http : //www.in-ulm.de/~mascheck/various/shebang/ 而且我也用“多线社帮”技巧find了大多数语言的实用解决scheme 。 它允许写这样的脚本: #!/bin/sh "exec" "`dirname $0`/python2.7" "$0" "$@" print copyright 但是有时候,我们不希望用这种方法来扩展/修补依赖于shebang的现有脚本和绝对path的解释器。 例如,Python的setup.py支持–executable选项,它基本上允许为它生成的脚本指定shebang内容: python setup.py build –executable=/opt/local/bin/python 所以,特别是,可以指定–executable=为了使所需的种类的可移植性? 或换句话说,因为我想保持这个问题不是太具体到Python … 这个问题 如何写一个指定解释器的shebang,其path与正在执行的脚本的位置有关?

如何将回车作为字符添加到文件?

我想要一个string: blablbabla<carriage return goes here> 我的意思是string应该包含回车。 有没有简单的方法来做到这一点? 或者,如果在c中编写程序并使用blablabla\r fputs,这是否有诀窍?

什么是最安全的方式来清空* nix中的目录?

我很害怕,总有一天我会在我目前使用的命令中放置一个空间或者错过一些东西: rm -rf ./* 有清空当前目录内容的安全方法吗?

如何获取NIC卡的逻辑名称,给出与其相关的IP地址?

我正在研究一个shell脚本,它需要知道与给定ip关联的逻辑名(eth0,eth1等)。 我正在使用的当前过程是使用filterparsingifconfig的输出并获取与给定IP关联的NIC卡。 我想知道是否存在一个简单的方法或直接stream水线Linux命令来获得上述细节?

在cURL命令中使用环境variables – Unix

我的问题很简单。 我想在cURL命令中使用环境variables,类似于: curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"$USERNAME","password":"$PASSWORD"}' 当我运行命令$ USERNAME作为“$ USERNAME”string传递给命令而不是variables的值。 有没有办法摆脱这种情况? 谢谢。

使用SIGKILL杀死父进程和subprocess

我正在写一个shell脚本,在其中我有父进程,它有由sleep &命令创build的subprocess。 现在我想杀死父进程,这样subprocess也会被杀死。 我可以用下面的命令来做到这一点: trap "kill $$" SIGINT trap 'kill -HUP 0' EXIT trap 'kill $(jobs -p)' EXIT 这些命令正在使用kill [parent_process_ID]命令,但是如果我使用kill -9 [parent_process_ID]那么只有父进程将被终止。 请进一步指导我实现此function,以便当我用任何命令杀死父进程时,subprocess也应该被终止。

UNIX / Linux IPC:从pipe道读取。 如何知道运行时的数据长度?

我有一个subprocess生成一些可变长度的输出,然后使用半双工pipe道将其发送给父进程。 在父,如何使用read()函数? 由于每次数据可以有不同的长度,我怎么能在运行时知道数据的大小来做缓冲区的任何malloc()? fstat()函数可以在pipe道文件描述符上使用吗? 我知道read()函数将读取指定数量的字节,但如果在请求的字节被读取之前到达文件结尾(而不是EOF字符),将返回0。 我专门运行一个2.6.27-9内核的Ubuntu GNU / Linux。 理查德·史蒂文森在UNIX环境下的高级编程中的所有例子都指定了写入pipe道时的数据长度,或者依赖于fgets()stdio.h函数。 由于我关心速度,我想尽可能远离使用stdio.h。 这将有必要共享内存更快? 谢谢,德鲁夫

Sed:如何replace特定模式位于文件中后发现的string

如果我在文件中有以下列表: integer, parameter :: ni = 1024 integer, parameter :: nj = 256 integer, parameter :: nk = 16 并希望基于string'ni ='进行search,然后用例如'512'这样的新stringreplace后面的string(本例中为'1024')(我想保留空格)。 我该如何使用sed? 请注意,我想只是擦除等号后的任何内容,这是因为有时string不会是一个简单的整数,它可能是“1.D0”。 在某些情况下,可能会有评论。 所以我只是想把等号前面的东西抹掉,换成新的值。 结果将是: integer, parameter :: ni = 512 integer, parameter :: nj = 256 integer, parameter :: nk = 16