Articles of unix

我怎样才能设置我产生的过程的umask?

我有一个Python REST API的服务。 这个服务在内部执行一些脚本, subprocess.Popen(cmd, shell=False, preexec_fn=os.setpgrp, env=self.env, universal_newlines=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) 现在我想设置这个过程的umask。 我尝试在运行此服务的init脚本中设置umask。 但它看起来不会被服务产生的subprocessinheritance。 试图在RHEL上完成这项工作,如果这样做有所帮助的话。 谢谢 !

合并两个bash历史文件

假设我有两个bash历史文件,如下所示: history1.txt : 1 ls 2 cd foo … 921 history > history1.txt history2.txt : 154 vim /etc/nginx/nginx.conf 155 service nginx restart … 1153 history > history2.txt 我知道我可以很容易地写一个bash脚本来合并这两个文件在一起,以便生成的文件包含行1到1153没有重复的历史条目…像下面的bash脚本: merge.sh HEAD=`head -n 1 history2.txt | sed -e 's/^[[:space:]]*//'` sed -n -e "1,/$HEAD/p" history1.txt > merged.txt sed -e "1,$ s/$HEAD//" -e '/^\s*$/d' history2.txt >> merged.txt 但我花了更多的时间比我想承认试图find一种方法来完成这个只使用未命名的pipe道,sed和/或任何其他常见的Linux utils […]

路由命令输出

路由命令输出: $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.2.10 0.0.0.0 UG 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 $ 从上面的输出来看,以下是我的疑惑: 什么是0.0.0.0意味着在目的地和网关列 如果数据包是从192.168.2.36 ip发送的,那么网关是什么。 它使用192.168.2.10或0.0.0.0 让我们考虑我有一个更多的networking与IP 192.168.1.0。 如果数据包是从这个networking的任何主机发出的,那么这个ip的网关是什么。 什么是默认网关。

find的“false”选项的目的是什么?

据man find – 错误总是假的。 这个选项的目的是什么? 什么时候使用?

“find”命令无法检测执行期间添加的文件

Stackoverflow多年来无数次挽救了我的生命。 现在是时候发布我的第一个问题了,至今我还找不到答案。 我有一个工具(语言/实现是无关紧要的)接受文本文件作为input。 这个文本文件(我们称之为file_list.txt)包含一长串文件path,每行一个。 然后该工具遍历file_list.txt中的行,并对每个文件path执行一些操作。 这需要连续完成,file_list.txt需要始终包含最新的文件path,因为用户不断地上传或删除正在监视的共享文件。 为了达到这个目的,我build立了一个调用脚本的cron作业。 首先,脚本使用所需的search参数调用find实用程序,并将输出传输到临时文件。 当文件被完全填充时,它被移动到file_list.txt。 然后,一旦完成,将使用file_list.txt作为input参数调用该工具。 到现在为止还挺好。 被监视的份额非常大(〜60TB),查找命令大约需要5个小时才能执行。 这不是一个问题,因为我们有多个重叠的find命令并行运行(每小时触发一次)。 整个安装程序运行在计算场中,因此CPU使用率等也不是问题。 问题出现在文件检测的滞后时间。 理想情况下,我想要一个用户添加一个文件,我想要一个已经运行,重叠的查找命令来检测这个文件在几分钟内。 不过,我注意到没有任何已经运行的find命令会检测到这个文件。 在这个文件被添加后,只有一个find命令才会被检测到。 这意味着我通常需要等待大约5个小时才能检测到新添加的文件。 这使我相信查找实用程序在触发时会以某种方式作用于共享状态的“caching”版本。 这是真的? 任何人都可以确认吗? 如果是这样,我能做些什么来改善检测滞后? 请让我知道是否需要进一步澄清。 我很高兴提供任何进一步的细节。

计数器循环pipe道grep似乎意外地随机

尝试在5次迭代中让grep停止一个while循环,这样/ tmp / foo应该只有5行: n=1 while [ $n -le 2000 ] do echo $n n=$(( $n + 1 )) done | tee /tmp/foo | grep -q ^5 支票计数: wc -l < /tmp/foo 输出: 34 上面的重复运行每次最多返回不同的数字,但并不是非常随机的 – 在bash中运行5000次以上,例如1500秒左右运行5000次, 短跑运行157次106秒。 这些结果似乎比最初的实验更有趣。 这段代码发生了什么?

从文件中的条目生成范围

我有一个txt文件包含如下所示的条目 1 2 3 4 7 8 9 12 14 15 我需要生成如下的范围 1-4 7-9 12-12 14-15 我如何实现上述输出? 这是我试过的: awk '{q=$1}{f=$1}{print $q} $1!=p+1{print l"-"f}{l=p+1}{p=$1} END{print}' filename

提取复制后的tar文件没有成功

即时复制tar文件的forms文件夹A到文件夹B,我想当它完成复制它来解压缩,我试着在我的shell脚本不工作,以下任何想法下面的? cp /home/i557956/A/file.tar /home/i557956/B tar -xvf /home/i557956/B/file.tar 副本是成功的但tar不是在B文件夹中提取的…

使Unix shell脚本符合POSIX

我一直在研究一个shell脚本来自动执行一些任务。 确保shell脚本在大多数平台上没有任何问题的最佳方式是什么? 例如,我一直使用echo -n命令将一些消息打印到屏幕上,而不会在后面添加新行,而-n开关在某些ksh shell中不起作用。 我被告知脚本必须符合POSIX标准。 我如何确保脚本符合POSIX标准。 有没有工具? 还是有一个只支持最低POSIX要求的shell?

如何从文件1复制(YANK)并使用缓冲区在vi中粘贴(放入)文件2?

我想知道从文件1复制数据的过程,并使用缓冲区在vi编辑器中将数据粘贴到文件2中。 你能告诉我一步一步的过程。 怎么做?