Articles of unix

如何在两个时间范围内grep日志

我有一个日志文件abc.log ,其中的内容是这样的,当我做一个vi 。 2015-05-28 18:12:00,815 INFO 0x7f6ed23e3700 send_to – recent: 1432861920 from dc:2 client_id: 102 2015-05-28 18:13:01,024 INFO 0x7f6ed23e3700 send_to – recent: 1432861980 from dc:2 client_id: 101 2015-05-28 18:13:42,244 WARN 0x7f6ed26e6700 mgr – Failed to upsert data for userid 3589109212161 with value cat and status -2 2015-05-28 18:14:00,135 INFO 0x7f6ed23e3700 send_to – recent: 1432862040 from […]

gzip和pipe道输出(性能考虑)

q1)我可以检查我是否做了一个gzip -c文件| encryption(一些参数) a)gzip是否一行一行地打印输出,并将其传送给encryptionfunction或 b)gzip将会执行第一个,那么输出将一次全部input到encryption函数中? ================================================== == q2)将执行gzip | encryption有更好的性能考虑,然后gzip,然后encryption 问候,Noob

如何保留新的行和格式,而使用sedreplace文本?

我有这样的模板文件 $ cat template.txt QWERTY ~SQL~ ASDFG 我需要用下面的文本replace模板文件中的"~SQL~" 〜SQL〜 "~SQL~"string。 这个文本存储在一个variables中 SELECT COL1, COL2, COL3 FROM TABLE; 我尝试了下面的代码,但得到一个错误: sed:-eexpression式#1,字符20:未终止的's'命令 $ query='SELECT COL1, > COL2, > COL3 > FROM TABLE;' $ $ sed "s/~SQL~/$query/" template.txt sed: -e expression #1, char 20: unterminated `s' command 如果我从"query"删除新的行,那么sed命令可以正常工作 $ query='SELECT COL1, COL2, COL3 FROM TABLE;' $ sed "s/~SQL~/$query/" template.txt […]

当父进程调用exec命令时,subprocess会发生什么

假设我们有一个父进程,并且在调用一个fork来创buildsubprocess之后调用一个exec函数。 现在,subprocess会发生什么情况:它会像原来的父进程那样工作,这样用户就不会发现父进程被其他二进制代替的区别了吗? 我觉得这个问题不同于以下问题,subprocess会发生什么? 。 if ( (pid == fork ()) != 0 ) { if (strcmp(cmd,"mypwd")==0) { execlp (“mypwd”,0); } … … else if (strcmp(cmd,"myexit")==0) exit(1); }

EACCES在Linux上创build硬链接时不符合链接(2)手册页中的任何原因

我有一个服务,它将硬链接组装到一个已读取的文件组中,但不能将所有父目录树的写权限(以及遍历权限)组装到一个临时登台目录中。 这工作完美,直到我的AWS托pipe节点重新启动。 现在看起来他们在更新的内核上了,现在链接(2)调用返回EACCES。 检查这个系统调用的(Linux)手册页: EACCES – 对包含newpath的目录的写入访问被拒绝,或者oldpath或new-path的path前缀中的某个目录的search权限被拒绝。 (另请参阅path_resolution(7)。) 为了比较,BSD版本似乎描述了类似的语义,可能稍微更详细些: [EACCES]任一path前缀的组件都拒绝search权限。 [EACCES]所请求的链接要求以拒绝写入权限的模式写入目录。 [EACCES]当前进程无法访问现有的文件。 这些情况都不适用:作为运行服务的用户,我可以读取源文件(包括遍历到它的目录),并写入临时登台目录(实际上是我创build的)。 此外,暂存目录是在同一个文件系统上(尽pipe这会导致不同的错误)。 是什么赋予了?

在Windows和其他Unix版本中实现mmap的`MAP_POPULATE`标志,在Windows中使用MADV_WILLNEED

Linux mmap(2)有一个有用的标志: MAP_POPULATE ,当指定时,将默认所有我们分配的页面。 其他的Unices系统没有这个标志,除了有一个名为MAP_PREFAULT_READ的等价标志的FreeBSD。 如果我想在Windows和其他Unices系统中实现这种行为,我怎样才能以最好的方式做到这一点? 我想了2种可能的方法: 1)最便携的:只要做一个循环,在每个分配的页面的基地址写一个'\ 0'字符(也是最慢的实现,如果页面很多)。 这也会有一些不好的影响,我现在没有看到? 2)在madvise()+MADV_WILLNEED上调用madvise()+MADV_WILLNEED 。 不幸的是,这个组合的等价Windows版本没有:在Windows上,你只有VirtualAlloc()+MEM_RESET ,这相当于madvise()+MADV_DONTNEED但是你没有madvise()+MADV_WILLNEED来调用,因为even必须调用VirtualAlloc()+MEM_RESET ,在同一范围的内存上调用VirtualAlloc()+MEM_RESET之后,否则行为是不确定的。 所以,还有另外一个问题的空间:有一个相当于madvise()+MADV_WILLNEED Windows不仅用于这种情况,而且一般来说,作为告诉Windows“看,我需要这些页面”的一种方式? 有什么想法吗?

什么是零信号?

我正在查看一个nagios插件,我发现这个代码: killall -0 $1 我尝试了这一点,它为一个正在运行的进程返回0 ,但它并没有终止进程。 请解释这个0值的含义,以及它为什么不杀死这个过程。

如何让zsh`run-help`忽略`sudo`并获得关于下列命令的帮助

是否可以自定义zsh,以便当我input时,比如说, sudo ls ,然后按Alt-h查看命令ls手册页。 run-help的默认行为是向我显示命令sudo的手册页,而不是ls 。

什么是telldir()函数的返回值?

程序: #include<stdio.h> #include<dirent.h> void main() { int i=0; DIR *dir=opendir("dir"); struct dirent *dent; while((dent=readdir(dir))!=NULL){ printf("Filename: %s\t\t Location in Directory Stream: %ld\n", dent->d_name,telldir(dir)); } } 输出: $ ./a.out Filename: b.txt Location in Directory Stream: 32 Filename: a.txt Location in Directory Stream: 64 Filename: dc Location in Directory Stream: 96 Filename: . Location in Directory Stream: 128 […]

在unix中处理来自文件名的无效字符

我需要对具有“!”的文件执行一些linux命令操作 像文件名中的字符。 但是每当我尝试执行这些命令时,我都会遇到错误。 [root@ATD-6000 ~]# cat a!aapoorv.txt -bash: !aapoorv.txt: event not found 我使用paramiko模块在python中执行这些命令。 我不能使用原始stringr'filestringname,因为我正在从数据库本身读取string名称。 如何逃脱/处理这些使用python / bash的人物之王。