Articles of bash

在bash脚本中使用'source'命令

我正在写一个bash脚本来尝试在Ubuntu上自动初始化设置,而且我遇到了一个我不明白的问题。 如果我运行下面的代码: sudo apt-get -y update && sudo apt-get -y upgrade sudo apt-get -y install curl git-core build-essential openssl sqlite3 apache2-prefork-dev mysql-client git clone git://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc source ~/.bashrc git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build rbenv install -v 1.9.3-p392 …. 那么脚本结束,但大多数命令失败,因为rbenv是未定义的(脚本用rbenv -v完成后testing)。 如果我然后运行source ~/.bashrc , rbenv变得定义。 […]

tail-pipe-awk脚本,在Centos上很好,但在Ubuntu上很奇怪

我在CentOS上编写了一个脚本,现在我正试图在Ubuntu上运行它,它的行为出乎意料。 这里有一些像我在bash下运行的脚本: sudo tail -F /var/opt/my-application/log/my-application.log | awk ' BEGIN { ORS=" " } { if ($8 ~ /MATCH-TEXT/) { # do a whole bunch of stuff here # like look in /proc and calculate CPU and interface stats }; }; } ' 以前,当我在日志的$ 8字段中出现一行MATCH-TEXT时,所有的“做了一大堆东西”(脚本的肉)会发生,我会看到输出。 我的应用程序每秒产生一次MATCH-TEXT行(有时更多,有时更less),这个脚本的输出也是如此。 但是现在,当我启动这个脚本的时候,我很久没有输出了,然后我得到了30行输出。 看起来脚本正在对接收到的日志行进行排队,然后快速执行几次,因为CPU和界面上的计算对于“自一秒钟之前的一小部分时间”而不是“自一秒钟以前”起就是正确的。 更奇怪的是,将awk命令的所有内容注释掉,将其replace为“print $ 0”(将整个脚本转换为令人尴尬的grep命令)会产生相同的结果。 所以我相信这是系统执行脚本的方式,而不是脚本本身。 与此同时,在另一个窗口中,一个普通的“sudo tail -F […]

需要救助RH虚拟服务器的帮助 – shell命令修复错误?

我有一个虚拟机运行我们的主要应用程序之一。 在做一个相当重的改变之前,我做了两行备份。 首先,我拍了一个虚拟机快照。 其次,我通过整个系统运行recursionsed命令来replace文件中的文本,并创build备份。 直到我跑完这个之后,我才意识到这个变化是多么的广泛。 这就是我跑的: find / -type f -print0|xargs -0 sed -i.matthew05012013 's/oldtext/newtext/g' 我试图恢复快照,但最终删除它,而是承诺了所有的更改(因为ESX命名法是快乐混淆快照)。 所以,我的最后一道防线是recursion地通过系统,并且用.matthew05012013扩展名重命名任何添加到相同的文件名,没有扩展名,覆盖任何有。 有没有人有任何想法如何最好地执行此? 手工不起作用,有几千个文件已经被系统修改了。

不错的命令 – 其他命令执行与脚本也NICE?

一个关于多么好的作品的快速问题。 说如果我有像这样在crontab中运行的脚本 0 4 * * * nice -n 19 /usr/local/admin/script.pl 它被设置为最低优先级。 该脚本将启动其中的其他命令。 这些命令是否也会因为启动它们的nice scrip而被删除,或者所有这些命令是否都在脚本中添加了很好的命令?

使用修改date和权限列出文件夹内的所有php文件

我写了一个脚本,它检查给定文件夹内的所有php文件,以便每小时更改一次,以便我可以检测到可能的代码注入和它们的完整性。 到目前为止,我的方法似乎有点慢,并且分解了太多的进程。 代码如下: /usr/bin/find /home/www -name "*.php" -exec ls -l \{} \; 有没有更好的办法? 请注意我至less需要每个文件的完整path,权限,所有者,组和修改时间。 谢谢!

获取许多SVN回购的最后修改date

我为我的开发人员托pipesvn服务器。 从服务器,我看到所有与svn回购configurationdirs。 我想要得到最后的修改date(大约30个不同的项目)。 我不想连接到他们所有的结账,然后在每次检查最后修改与svn命令。 我只想用bash来提取这些信息,但是不知道怎么样,甚至可以这样做。 编辑1:它看起来像这样,例如有10个项目在不同的仓库在同一台服务器上(没有分行)…所有的项目都坐在一个目录configuration为不同的svn回购: / svn_repos / PROJECT1 / svn_repos /项目2 / svn_repos /项目3 … / svn_repos / project10

如何让ssh等到命令退出?

我有一个如下所示的脚本: SERVER="RHT372 RHTl373 RHT374 RHTl375" case $1 in "stop") for SERVER in $SERVER do echo "================================================" echo Stopping $SERVER ssh root@$SERVER /var/tmp/stopServer.sh server1 done ;; 我怎样才能使SSH等待命令完成,然后去下一个服务器,并发出相同的命令?

Wrangling sedfind并重新格式化logindate(或者,如何杀死闲置的mosh-server进程)

我有一个旧的方法来杀死闲置的mosh-server进程,这在我的新VPS上不起作用。 这是旧的方法,我在root的crontab中运行,以清理已经闲置10天以上的mosh进程: for tty in `w -sf | grep -P '\d\ddays mosh-server' | cut -c 10-15`; do kill -9 `ps -o pid= -t $tty`; done 问题是,在新的VPS上,这些进程没有TTY,所以我不能通过TTY匹配并以这种方式杀死mosh。 这是我到目前为止(顺便说一下,新的VPS在Debian上运行内核3.2,旧版本是以前的Debian版本)。 for loginday in `w | grep -P '\d\ddays.* mosh-server' | cut -c 34-40 | sed 's/^\([0-9]*\)\([a-zA-Z]*\).*$/\2 \1/'`; do echo $loginday; done 我正在尝试从'w'获取logindate,并将其与'ps'中的信息相关联: ps -C mosh-server -o bsdstart 因此,我可以关联login当天启动的任何闲置mosh-server会话(可能是野性中的99.9%),并使用'ps'来获取pid。 […]

Insserv拒绝了脚本标题

我正在尝试为主pipe安装debian安装的init脚本。 insserv: Service \$remote_fs has to be enabled to start service supervisor insserv: Service \$syslog has to be enabled to start service supervisor insserv: exiting now! update-rc.d: error: insserv rejected the script header init脚本的完整内容在这里: #! /bin/sh ### BEGIN INIT INFO # Provides: supervisor # Required-Start: \$remote_fs \$syslog # Required-Stop: \$remote_fs \$syslog # Default-Start: 2 3 […]

如何迭代bash数组并高效地创buildSCP命令?

我需要scp从machineB和machineC到machineA的文件。 我从machineA运行我的下面的shell脚本。 我已经正确设置了ssh密钥。 如果这些文件不在machineB ,那么它应该在machineC 。 #!/bin/bash readonly PRIMARY=/data01/primary/. readonly FILERS_LOCATION=(machineB machineC) readonly MAPPED_LOCATION=/bat/data/snapshot PARTITION=(0 3 5 7 9) dir1=/bat/data/snapshot/20131222 dir2=/bat/data/snapshot/20131222 scp david@${FILERS_LOCATION[0]}:$dir1/weekly_1980_[$el]_200003_5.data $PRIMARY || scp david@${FILERS_LOCATION[1]}:$dir2/weekly_1980_[$el]_200003_5.data $PRIMARY 现在我的问题是,如果你看看我的上面的scp命令,我现在有[$el] (这是错误的),我需要用PARTITIONreplace这个,这意味着我需要迭代PARTITION并将[$el]每个数字在PARTITION中。 所以我的scp命令应该看起来像这样,如果我迭代PARTITION一个 – scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_0_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_0_200003_5.data /data01/primary/. scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_3_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_3_200003_5.data /data01/primary/. scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_5_200003_5.data /data01/primary/. || scp david@machineC:/bat/data/snapshot/20131222/weekly_1980_5_200003_5.data /data01/primary/. scp david@machineB:/bat/data/snapshot/20131222/weekly_1980_7_200003_5.data […]