Articles of unix

从内部检测一个chroot监狱

如何检测没有root权限的chroot监狱? 假设一个标准的BSD或Linux系统。 我想到的最好的方法是查看“/”的inode值,并考虑是否合理低,但是我想要一个更准确的检测方法。 [edit 20080916 142430 EST]文件系统是不够的,因为复制像/ boot和/ dev这样的东西来欺骗被监禁的用户并不困难。 [edit 20080916 142950 EST]对于Linux系统来说,检查/ proc中的意外值是合理的,但是那些首先不支持/ proc的系统呢?

设置一个gdb退出断点不工作?

我已经设置了退出和_exit断点和我的程序(multithreading的应用程序,在Linux 2.6.16.46-0.12 sles10上运行),以某种方式仍然以我无法find的方式退出 (gdb)c … [新主题47513671297344(LWP 15279)] [新主题47513667103040(LWP 15280)] [新主题47513662908736(LWP 15281)] 程序退出代码0177。 (GDB) 退出函数驻留在libc中,因此不存在延迟加载共享库问题。 有人知道一些其他神秘的触发因素,不能被抓住吗? 编辑:问题现在只是学术。 我尝试二进制searchdebugging,支持我的更改的一个子集(问题消失了)。 再次依次施用后,即使事情恢复到原状,我也不能再复制这个问题。 编辑2:我发现最近这种错误的原因之一,这可能是这个问题的原始来源。 由于历史原因,我们的产品使用邪恶的链接器标志-Bsymbolic。 其中的一个副作用是,当一个符号未定义但被调用时,GLIBC运行时链接程序将以这种方式进行popup,并且在debugging程序中看到它作为一个进程退出0177.当运行时链接程序以这种方式退出时,假设它使系统调用直接退出(而不是使用C运行时库exit()或_exit())。 这与我无法用debugging器中的出口断点捕捉到这一事实是一致的。

使用`date`命令获取之前,当前和下个月

我正在使用下面的Ubuntu 11.04下的前一个,目前和下个月: LAST_MONTH=`date +'%m' -d 'last month'` NEXT_MONTH=`date +'%m' -d 'next month'` THIS_MONTH=`date +'%m' -d 'now'` 直到今天,2012年10月的最后一天(2012-10-31) 截至目前我得到的结果如下: $ date Wed Oct 31 15:35:26 PDT 2012 $ date +'%m' -d 'last month' 10 $ date +'%m' -d 'now' 10 $ $ date +'%m' -d 'next month' 12 我想输出结果应该分别是11 。 不明白为什么date输出的行为是这样的。 应该是一个很好的方式来得到一致的previous , current和下个月呢?

分叉与线程

我之前在我的应用程序中使用了线程,并且很好地了解了它的概念,但是最近在我的操作系统讲座中遇到了fork()。 这与线程相似。 我谷歌search他们之间的差异,我来知道: 叉只不过是一个新的过程,看起来完全像旧的或父过程,但它仍然是一个不同的过程,具有不同的过程ID和拥有自己的记忆。 线程是轻量级的过程,具有较less的开销 但是,我脑海里还有一些问题。 你应该什么时候更喜欢叉(),而不是线程和副诗? 如果我想调用一个外部应用程序作为一个孩子,那么我应该使用fork()或线程来做到这一点? 在search谷歌时,我发现有人说在一个线程中调用一个fork()是件坏事。 为什么当人们做类似的事情时,人们想在线程中调用一个fork()? 是否真的fork()不能利用多处理器系统,因为父进程和subprocess不能同时运行?

并行运行shell脚本

我有一个shell脚本 洗牌一个大文本文件(600万行6列) 根据第一列对文件进行sorting 输出1000个文件 所以伪代码看起来像这样 file1.sh #!/bin/bash for i in $(seq 1 1000) do Generating random numbers here , sorting and outputting to file$i.txt done 有没有办法来parallel运行这个shell脚本来充分利用多核CPU? 在这一刻, 。 /file1.sh以1到1000的顺序执行,速度非常慢。 谢谢你的帮助。

安装Jenkins之后,不能su用户jenkins

我已经安装了jenkins,我试图进入一个壳jenkins添加一个SSH密钥。 我似乎无法su进入jenkins用户: [root@pacmandev /]# sudo su jenkins [root@pacmandev /]# whoami root [root@pacmandev /]# echo $USER root [root@pacmandev /]# jenkins用户存在于我的/ etc / passwd文件中。 Runnin su jenkins要求密码,但拒绝我的正常密码。 sudo su jenkins似乎没有做任何事情; sudo su – jenkins 。 我在CentOS上。

使用grep和sed查找并replacestring

我正在使用以下search目录recursionsearch特定的string,并将其replace为另一个: grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' 这工作正常。 唯一的问题是,如果string不存在,那么sed失败,因为它没有得到任何参数。 这对我来说是一个问题,因为我使用ANT自动运行它,并且由于sed失败,构build失败。 如果找不到string,是否有办法使其失效? 我感兴趣的是我可以使用的一行简单的解决scheme(不一定与grep或sed但与这些常见的Unix命令)。

如何在Linux中以C编程调用另一个terminal输出

我对Unix环境很陌生。 我想有一个小聊天程序,初始terminal用于input,并调用另一个terminal输出。 我一直在search网页,但没有任何运气。 好的,更具体地说,我正在用C语言在Mac上的TCP / IP上编写聊天程序。我想在两个不同的terminal中分离input和聊天消息输出。 我可以find有关如何在进程之间进行通信的资源,但我不知道如何调用另一个terminal进行输出。

如何从已存在的文件复制权限?

我必须在C编写一个程序(在类Unix系统上),这是我的问题: 我有一个文件(FILE1),我想要创build另一个文件(FILE2)具有FILE1相同的权限。 然后,我必须创build另一个文件(FILE3)具有FILE1相同的权限,但只为所有者。 我将使用chmod()更改权限,但我不知道如何获得FILE1的权限。 你能帮我么?

我们可以将Perl脚本中使用的variables设置为环境variables吗?

我有一个Perl脚本有一个像my $name的variables。 我们可以设置$ name的内容作为一个环境variables,我们可以导入和使用在其他文件? 我尝试像$ENV{NAME}=name ,但这是行不通的。