Articles of unix

如何判断一个文件是否超过30分钟/ bin / sh?

如何编写脚本来确定/ bin / sh文件是否超过30分钟? 不幸的是系统中不存在stat。 这是一个旧的Unix系统, http://en.wikipedia.org/wiki/Interactive_Unix 不幸的是,系统上并没有安装Perl,客户也不想安装它,也没有别的。

为什么是“echo foo | 读一个; echo $ a“不按预期工作?

我可以在FreeBSD,GNU / Linux和Solaris下复制这个问题。 这让我头疼了一个多小时,所以我决定在这里提问。

GNU差异的百分比值

使用diff来显示两个文件之间的百分比差异的好方法是什么? 例如,如果文件有100行,副本有15行,那么差异百分比就是15%。

使用Recv-Q和Send-Q

netstat命令输出中使用Recv-Q和Send-Q列什么时候我们在实时场景中使用它? 在我的系统中,两列总是显示为零。 这是什么意思?

在UNIX上学习C ++编程的好书(pref Linux)?

用户能否帮助我在Unix平台上编写C / C ++代码的书籍? 我的重点是编写低延迟代码,用于电子交易平台。 (我意识到StackOverflow上有几个线程一般询问关于语言的书籍,但是我的Q是专门针对Unix操作系统编码的)

Linux的AIO:可怜的扩展

我正在编写一个使用LinuxasynchronousI / O系统调用的库,并想知道为什么io_submit函数在ext4文件系统上performance出较差的缩放。 如果可能,我可以做些什么来让io_submit不要阻塞大的IO请求大小? 我已经做了以下(如这里所述): 使用O_DIRECT 。 将IO缓冲区alignment到一个512字节的边界。 将缓冲区大小设置为页面大小的倍数。 为了观察内核在io_submit花费了多io_submit ,我运行了一个testing,在该testing中,我使用dd和/dev/urandom创build了1 Gbtesting文件,并重复丢弃了系统caching( sync; echo 1 > /proc/sys/vm/drop_caches )并且读取越来越大的文件部分。 在每次迭代中,我都会打印io_submit所花费的时间以及等待读取请求完成的时间。 我在运行Arch Linux的x86-64系统上运行以下实验,内核版本为3.11。 该机器具有SSD和Core i7 CPU。 第一个graphics绘制了等待io_submit完成所花费的时间。 第二个graphics显示等待读取请求完成的时间。 时间以秒为单位。 为了比较,我创build了一个类似的testing,通过pread使用同步IO。 结果如下: 看起来,asynchronousIO的工作如预期的要求约20,000页的大小。 之后, io_submit块。 这些意见导致了以下问题: 为什么不是io_submit的执行时间是常量? 什么是造成这种不好的缩放行为? 我是否需要将ext4文件系统上的所有读取请求拆分为多个请求,每个请求的大小都小于20,000页? 20,000这个“魔术”价值从哪里来? 如果我在另一个Linux系统上运行我的程序,如何确定使用的最大IO请求大小,而不会遇到缩放行为不佳的情况? 用于testingasynchronousIO的代码如下所示。 如果您认为他们是相关的,我可以添加其他来源列表,但我试图只发布我认为可能相关的细节。 #include <cstddef> #include <cstdint> #include <cstring> #include <chrono> #include <iostream> #include <memory> #include <fcntl.h> #include […]

chmod:如何recursion添加执行权限只有已经有执行权限的文件

我注意到: chmod -R a+x将执行权限添加到所有文件,而不仅仅是当前可执行的文件。 有没有办法将执行权限仅添加到已经为用户权限设置了执行权限的文件?

将parameter passing给awk脚本文件

如果我想将一个parameter passing给一个awk脚本文件,我该怎么做? #!/usr/bin/awk -f {print $1} 这里我想打印从shell中传递给脚本的第一个参数,如: bash-prompt> echo "test" | ./myawkscript.awk hello bash-prompt> hello

你可以欺骗isatty并单独loginstdout和stderr吗?

问题 所以你要logging一个进程或subprocess的stdout和stderr(单独的),如果你没有logging任何东西,输出和你在terminal中看到的不一样。 似乎很简单没有? 不幸的是,似乎不可能为这个问题写出一个通用的解决scheme,这对任何给定的过程都有效。 背景 pipe道redirect是分离标准输出和标准错误的一种方法,允许您单独logging它们。 不幸的是,如果将stdout / err更改为pipe道,则进程可能会检测到pipe道不是tty(因为它没有宽度/高度,波特率等),并可能相应地改变其行为。 为什么改变行为? 那么,有些开发人员利用terminal的function,如果你正在写出一个文件,这是没有意义的。 例如,加载栏通常需要将terminal光标移回到行的开始位置,并使用新长度的栏来覆盖以前的加载栏。 颜色和字体重量也可以显示在terminal中,但是在平面ASCII文件中不能。 如果要将这样一个程序的标准输出直接写入文件,则该输出将包含所有terminal的ANSI转义码,而不是格式正确的输出。 因此,开发人员在向stdout / err写入任何内容之前都会执行某种“isatty”检查,因此如果该检查返回false,则可以为文件提供更简单的输出。 这里通常的解决scheme是欺骗这样的程序,通过使用一个pty(一个双向pipe道,也有宽度,高度等等)来认为pipe道实际上是tty。你将进程的所有input/输出redirect到这个pty,处理成思考它与真实的terminal交谈(你可以直接把它logging到文件中)。 唯一的问题是,通过使用stdout和stderr的单个pty,我们现在不能再区分这两者了。 所以你可能想为每个pipe道尝试一个不同的pty,一个是stdin,一个是stdout,另一个是stderr。 虽然这将在50%的时间内运行,但许多进程不幸的是会执行额外的redirect检查,以确保stdout和stderr(/ dev / tty000x)的输出path是相同的。 如果它们不是,那么必须有redirect,因此它们会给你一样的行为,就好像你已经用stdout和stdout没有pty一样。 你可能会认为这种redirect检查是不常见的,但不幸的是,这实际上是非常普遍的,因为很多程序都重复使用其他代码来检查,就像在OSX中find这样的代码: http://src.gnu-darwin.org/src/bin/stty/util.c 挑战 我认为寻找解决scheme的最佳方式是以挑战的forms。 如果任何人都可以运行下面的脚本(理想情况下通过Python,但在这一点上我会采取任何东西),stdout和stderr分别logging,你设法愚弄它认为它是通过一个tty,你解决了这个问题:) #!/usr/bin/python import os import sys if sys.stdout.isatty() and sys.stderr.isatty() and os.ttyname(sys.stdout.fileno()) == os.ttyname(sys.stderr.fileno()): sys.stdout.write("This is a") sys.stderr.write("real tty :)") else: sys.stdout.write("You cant fool me!") sys.stdout.flush() […]

分析shell脚本参数

$myscript.sh -host blah -user blah -pass blah 我想把论据传递给它。 我习惯做$1 , $2 , $3 ….但我想开始命名它们