Articles of bash

牛羚并行和pipe道

我想发送一个文件的每一行到另一个程序的标准input,例如 input.txt中 line1 line2 line3 我想像这样使用gnu并行(即将每行作为标准input到more命令) cat input.txt | parallel –pipe more 但它回来了 /bin/bash: -c: option requires an argument /bin/bash: -c: option requires an argument /bin/bash: -c: option requires an argument /bin/bash: -c: option requires an argument /bin/bash: -c: option requires an argument /bin/bash: -c: option requires an argument /bin/bash: -c: option requires an argument […]

Centos syslog不会从bash脚本logging到自定义文件

我试图让一个bash脚本在Centos 6.5版本上使用sysloglogin到一个自定义的日志文件,但是它总是只logging到/var/log/messages如下所示: Jan 12 09:54:47 localhost nbsp: Test message blah! 我究竟做错了什么? 为什么不logging到/var/log/my_prog_test.log ? 这是我的configuration和文件。 /etc/rsyslog.conf (大部分文件被忽略): if $programname == 'my_prog_test' then { action(type="omfile" file="/var/log/my_prog_test.log") } 在对rsyslog.conf进行更改后,我运行… $ sudo /etc/rc.d/init.d/rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] …所以rsyslog在configuration更改后重新启动。 bash脚本/home/nbsp/bin/my_prog_test看起来像这样: #!/bin/bash logger 'Test message blah!' 日志文件列表: $ ls -la /var/log/ […]

使用Jekyll与Github webhooks进行自动部署

我是一名devise师,想用Jekyll来为一些静态网站提供服务。 所以我抓住了一个VPS(Ubuntu的12.04),并安装nginx,ruby和jekyll。 我一整天都在用几台不同的电脑工作,所以我想用GitHub来方便客户。 因此,我安装了git,php5fpm(fastcgi),并设置了两个基本脚本,一个用于处理webhook( webhook.php ),另一个用于编译和部署站点( build.sh ) 有了一些帮助,我能够进展到可以运行构build脚本的程度,但是构build脚本在运行Jekyll命令时会停止,并引发错误: bash: command not found 运行我的普通用户时,情况并非如此,所以我认为这与运行nginx workers(这是www-data )的用户的.bash_profile有关。 因此,总结一下,我的问题是:如何让www-data用户可以使用Jekyll命令?

使用tmuxpipe理多个下载程序作为supervisorctl服务?

我有很多数据服务器,我需要通过http下载数据,一旦可用。 对于每个服务器,我都会启动一个bash “ while true ”循环,并在其中使用wget来轮询服务器以获取新数据。 为了启动所有的bash我创build了一个tmuxconfiguration,为每个循环(例如循环和wget启动一个窗口。 这增加了更容易检查正在发生的事情的好处。 我想从这个configuration创build一个supervisor -service,这将允许我一次启动,停止和重新启动这个tmux并下载它的客户端。 但是,当我退出tmux ,由于tmux的本质, bash和wget继续运行。 有没有办法,所以我可以退出一切,并重新启动一切简单supvervisorctl tmuxservice restart ?

在运行脚本中拒绝权限

我正在运行一个脚本,但有一个不寻常的警告:这是我的控制台中发生的事情 #whoami root #ls -l test.sh -rwxr-xr-x. 1 root root 1894 Feb 2 01:58 test.sh* #./test.sh -bash: ./test.sh: Permission denied 编辑:我的脚本: #!/bin/bash while read pass port user ip file; do echo "startt————————————" $ip ping $ip -c 4 if [ $? -eq 0 ]; then echo $ip ok… else echo $ip failed… fi echo "finish————————————" $ip […]

如何在Linux中为需要CA根密钥的多个域创buildSSL证书

我有邮件服务器。 有可能托pipe的域名。 我正在部署SSL证书。 我希望当用户访问那里使用HTTPS浏览器的邮件帐户应该显示证书是可信的(在Chrome中,它应该在地址栏中显示绿色的HTTPS不是红色)。 我发现的是: 我必须先创buildCA证书。 openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -days 1024 -out rootCA.pem 将其复制到用户的工作站上。 然后使用以下命令创build密钥文件。 openssl genrsa -out device.key 2048 和使用该密钥文件的csr文件使用命令: openssl req -new -key device.key -out device.csr 一旦完成,请签署需要CA根密钥的CSR。 openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 500 使用上述方法,我只能为单个域创build证书。 如何为多个域创build它。

优化后面的grep以避免数字

当我查询docker images ,我得到这个: #> docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE local/debian 7.5 172c7702a46f 2 weeks ago 175.1 MB local/debian wheezy 172c7702a46f 2 weeks ago 175.1 MB 使用grep我提取图像标签: #> docker images | grep -oP '\S+(?=\s+172c7702a46f)' 7.5 wheezy 我怎样才能改进这只是为了获得wheezy ,避免任何匹配\d+\.\d+ ?

如何正确地转义bash脚本中使用的rsync排除模式?

脚本: #!/bin/bash site=$1 remote_host=$2 new_site=${3:-$1} cmd="rsync -rlpuvz -e ssh /www/$site/ $remote_host:/www/$new_site –force –delete –exclude=\"site/web_sitemap_*.xml.gz\"" echo $cmd $cmd 脚本输出: [xxx@xxx ~]$ rsync -rlpuvz -e ssh /www/xxx/ xxx:/www/xxx –force –delete –exclude="site/web_sitemap_*.xml.gz" sending incremental file list deleting site/web_sitemap_ff3abe06_000.xml.gz 它似乎将引号视为“文字"文件名/模式字符。 "–exclude='site/web_sitemap_*.xml.gz'"单引号(未转义) "–exclude='site/web_sitemap_*.xml.gz'" 。 但是,如果我们尝试相同的东西,没有任何types的embedded式报价它的作品! 未加引号的版本: [xxx@xxx ~]$ touch /www/xxx/site/web_sitemap_ff3abe06_000.xml.gz [xxx@xxx ~]$ rsync -rlpuvz -e ssh /www/xxx/ xxx:/www/xxx –force –delete […]

pipe道rrd到一个新的目录

我chrooted和耗尽驱动器空间,所以我回到主机驱动器有足够的空间,但似乎无法将输出的数据redirect到我的空驱动器 [root@localhost rra]# ls /mnt/maindrv/ cacti-0.8.8b cacti-0.8.8b.tar.gz cacti2.tar cactidb [root@localhost rra]# for i in `ls *.rrd`; do rrdtool dump $i > '/mnt/maindrv/'.$i.'xml'; done [root@localhost rra]# ls /mnt/maindrv/ cacti-0.8.8b cacti-0.8.8b.tar.gz cacti2.tar cactidb [root@localhost rra]# df -h /mnt/maindrv/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-home 97G 1.5G 96G 2% /mnt/maindrv 如何正确输出我的转储到/mnt/maindrv/ ?

如何防止使用login用户名的git

我想让任何用户克隆存储库而不必在clone命令中指定用户名 。 例如,说我的git用户名是john.doe (例如客户的要求),但是我在个人电脑上login的本地帐户是j.doe (例如公司要求),git会尝试使用j.doe来克隆版本库。 这是相当微妙但显着的不同,所以我用下面的两个例子来说明: 1.用匿名语法克隆: 如果我做到以下几点: j.doe~ $ git clone https://mygit.repo.url/somerepository.git … git假设没有要求远程用户名是本地帐户(即j.doe )的用户名相同,并尝试克隆如下: Cloning into somerepository [email protected]'s password: 但在这种情况下, j.doe不是远程存储库上的帐户。 2.用明确的用户名克隆: 通常的解决方法是按如下所示指定远程用户名: j.doe~ $ git clone https://[email protected]/somerepository.git 这成功,但要求每个用户使用不同的克隆命令。 为什么我在乎 有几种情况下匿名语法更合适,例如: 它更便于自动化 – 无需编写操作系统或语言特定的input语句来获取用户名。 这对用户来说更加一致。 用户/密码请求将始终看起来相同。 这使得编写清晰一致的安装说明变得更加容易。 用户可以复制和粘贴。 防止为每个尝试自动执行该过程的脚本语言和操作系统编写不同的包装。 当检出一个依赖于git子模块的仓库时,如果login用户与git用户不一样,那么.gitmodules文件必须首先被编辑以包含用户名。 这在多个用户的情况下是非常不方便的。 例如。 我知道这个function是可能的,因为github使用它。 例如,如果您使用匿名语法在github上克隆存储库,您将看到如下内容: j.doe~ $ git clone https://github.com/dbostock/d3.git Cloning into 'd3'… Username […]