Articles of shell

Shell脚本(使用顶级命令)不能在cronjob中工作

Cronexpression: # mh dom mon dow command */1 * * * * /home/sysadmin/sample.sh Shell脚本内容: #!/bin/bash clear Vardate=`date` topresult=`top -n 1| grep Cpu` # CPUStatus=$Vardate"\t"$topresult # echo $CPUStatus >> /tmp/data.log echo $Vardate" "$topresult >> /tmp/data.log 当我手动执行脚本,我得到所需的输出。 这是: Wed Sep 23 02:42:47 MDT 2015 Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 但是当cronjob执行它时,输出如下: Wed Sep 23 […]

bash – 杀死命令脚本

我正在研究编写shell脚本作为一个类的先决条件,并希望有一些帮助开始。 我目前正在做一个热身练习,要求我编写一个shell脚本,当执行这个脚本的时候,会杀死我给出的命令的任何当前正在运行的进程。 对于这个练习,我使用'less'命令(所以为了testing我会input'man ps | less')。 然而,由于这是我正在写的第一个真正的脚本(除了传统的“Hello World!”之外,我已经完成了),我有点被困在如何开始。 我GOOGLE了很多,并返回了一些相当混乱的结果。 我知道我需要从一个shebang开始,但是我不知道为什么。 我正在考虑使用“if”语句; 一些东西沿线 if 'less' is running kill 'less' process fi 但我不确定如何去做。 由于我在这方面令人难以置信,所以我也想确保我正确地编写脚本。 我使用记事本作为文本编辑器,一旦我在那里写了我的脚本,我将它保存到一个目录,我在terminal访问,然后从那里运行,正确吗? 非常感谢您给我的任何build议或资源。 一旦我掌握了编写脚本的基础知识,我肯定可以想出更难的练习。

如何在执行一个文件的同时执行每个GREP结果的命令

TL; DR:如何在将tail -f变为grep时产生的每个grep匹配上执行命令。 我目前正在使用tail -f file | grep exception tail -f file | grep exception来跟踪服务抛出的所有exception。 其中一个问题是,有例外的行没有我需要的所有信息,但是它包含一个ID该请求生成的所有日志行的ID 。 我想要做的就是打印所有具有特定ID的行,一旦grep匹配有exception的行。 使用这个问题的帮助如何grep和执行一个命令(每一个匹配) 我设法使它为CAT命令工作,如下所示: cat myFile | egrep -i "exception" | #find lines with exception egrep -o "ID=[AZ]{10}" | #for those lines, select out only the id while read line; do #for each id cat myFile | grep $line; […]

从UTC转换到时代shell脚本或awk

好的,我有几个testing项目已经运行了一段时间了,我可以从日志中获得启动时间 Tue Sep 29 09:21:39 UTC 2015: INFO: Tue Sep 29 09:58:12 UTC 2015: INFO: Tue Sep 29 09:58:58 UTC 2015: INFO: Tue Sep 29 10:36:46 UTC 2015: INFO: Tue Sep 29 11:10:26 UTC 2015: INFO: Tue Sep 29 11:52:35 UTC 2015: INFO: Tue Sep 29 12:19:37 UTC 2015: INFO: Tue Sep 29 13:02:04 UTC […]

使用“find … -delete”仅从特殊子目录中删除图像文件

我需要从不需要的图像中清理音乐collections中的一些子目录。 我正在使用find命令使用Ubuntu 14.04和/或Linux Mint 17.2以及bash shell脚本。 目录结构(最小示例)如下所示: Tagged Artist #1 Artist #1 – An Album Artist #1 – A Track.flac cover.jpg something.png Artist #1 – [compilations] Artist #1 – A Track.flac cover.jpg something.png Artist #2 Artist #2 – Another Album Artist #2 – A Track.mp3 cover.jpg 只有在以“[compilations]”结尾的子文件夹中,我想删除所有types的jpeg和/或png图像(因为标记软件错误地将它们放在那里)。 任何发生在正常的“相册”文件夹中的图像,我也希望保持。 通过我的目录结构,名称中只有“[compilations]”的文件夹只能在“Artist”文件夹下方发生, 所以最多两层深。 我想出了以下查找命令: $ cd Tagged $ […]

Unix中的内build命令

在Unix或Unix系统中,该命令是“shell内置”的types。 像cd,echo这样的命令是shell内build的。 有没有办法列出所有的shell内build命令或是否有任何命令列出shell的所有内build命令?

意外的input62; 9; c62; 9; c62; 9; c62; 9; c在将缓冲区写入标准输出

我们的目标是读取文件并将缓冲区直接写入标准输出,以便进一步处理。 这如预期的文本文件,图像和PDF。 但是在阅读PDF文件时,在shellinput中会显示一个奇怪的input:62; 9; c62; 9; c62; 9; c62; 9; c。 我在Ubuntu 14.04.3 LTS(14.04)上编译test.c。 贝壳 user@user-virtualmachine:~$./test <prints binary data here … … end of binary data> user@user-virtualmachine:~$62;9;c62;9;c62;9;c62;9;c 当我检查md5sum这是一个比赛,所以没有什么奇怪的: md5sum paper.pdf 5152a6c5b7deb364385fb3dd27c586db paper.pdf ./test | md5sum 5152a6c5b7deb364385fb3dd27c586db – 我试图在网上查找它,它说,一些二进制数据可能会导致shell写入到标准输出时以意想不到的方式行事。 这个问题能解决吗? 代码如下所示。 TEST.C #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main() […]

在linux shell脚本上运行行select

我有一个例程shell脚本如下 #!/bin/bash or whatever ## block1 comments program1 filepath1 & program2 filepath2 & ## block1 comments program3 filepath1 & program4 filepath2 & 虽然通常不会发生,但块有时可能更复杂,涉及到已定义的variables和unix命令。 每天早上我打开这个文件,整天我最终做的是select一段文本,粘贴到“运行”脚本中,并从terminal($ ./run.sh)调用它 我想要的是简化“select/复制/粘贴/切换到terminal/运行”到“select/运行”。 这在许多简单的编辑器中很方便地完成。 我碰巧使用Geany,我不知道该怎么做,而且我听说Vim可以做到这一点,但是我不知道怎么做。 如果你知道其他编辑可以做到这一点,请放下一行。 例如,许多脚本编辑器允许您在相关的语言解释器中运行选定的文本。 我想要的是从一个简单的编辑器(最好是Geany或Vim)在terminal中运行这些shell脚本行。

防止意外的stdin读取并在subprocess中locking

一个简单的例子,我试图解决所有情况。 我正在运行一个subprocess来执行某个任务,我不希望它要求stdin,但是在极less数情况下,我可能没有想到,它可能会尝试读取。 我想阻止它挂在那种情况下。 这里是一个典型的例子: import subprocess p = subprocess.Popen(["unzip", "-tqq", "encrypted.zip"]) p.wait() 这将永远挂起。 我已经尝试添加 stdin=open(os.devnull) 这样.. 如果我find一个有价值的解决scheme将发布 对于我来说在父进程中接受一个例外就足够了 – 而不是无休止地等待沟通/等待。 更新:似乎问题可能比我最初期望的更复杂,subprocess(在密码和其他情况下)从其他文件描述符中读取 – 例如与/ dev / tty进行交互的shell。 可能不像我想的那样容易解决..

更改文件中的date格式

我正在RedHat Linux上工作。 我有一个文件,如下所示: $ vi文件名 Jan,1,00:00:01,有人检查了你的文件 一月,3,09:38:02,阿普尔比 Jan,16,10:20:03,**************** Jan,18:03:04:03,*************** 我想要输出如下所示: 2015/01 / 01,00:00:01有人检查了你的文件 2015/01 / 03,3,09:38:02,阿普尔比 2015/01 / 16,16,10:20:03,**************** 2015/01 / 18,03:04:03,*************** 请帮我做这个。 谢谢