Articles of bash

脚本启动3份rsync

我有一个简单的脚本,它使用rsync将Postgres数据库复制到备份位置,以便与Point In Time Recovery一起使用。 脚本每2小时通过postgres用户的cron作业运行。 出于一些奇怪的原因,我可以看到在进程列表中运行的rsync的三个副本。 任何想法为什么这可能是这种情况? 这是cron条目: # crontab -u postgres -l PATH=/bin:/usr/bin:/usr/local/bin 0 */2 * * * /var/lib/pgsql/9.0/pitr_backup.sh 这里是ps列表,它显示了rsync运行的两个副本和一个睡眠: # ps ax |grep rsync 9102 ? R 2:06 rsync -avW /var/lib/pgsql/9.0/data/ /var/lib/pgsql/9.0/backups/pitr_archives/20110629100001/ –exclude pg_xlog –exclude recovery.conf –exclude recovery.done –exclude pg_log 9103 ? S 0:00 rsync -avW /var/lib/pgsql/9.0/data/ /var/lib/pgsql/9.0/backups/pitr_archives/20110629100001/ –exclude pg_xlog –exclude recovery.conf –exclude […]

如何在bash函数中使用heredoc?

是否有可能在一个bash函数中插入一个heredoc ? 下面的简单示例导致一个错误: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}") #!/bin/sh my_function () { cat <<HEREDOC heredoc contents HEREDOC } my_function 环境: Ubuntu 11.04(GNU / Linux 2.6.38-8-x86_64) GNU bash,版本4.2.8(1)-release(x86_64-pc-linux-gnu)

放置shell脚本在systemd控制下

假设我有这样的shell脚本: #!/bin/sh # cherrypy_server.sh PROCESSES=10 THREADS=1 # threads per process BASE_PORT=3035 # the first port used # you need to make the PIDFILE dir and insure it has the right permissions PIDFILE="/var/run/cherrypy/myproject.pid" WORKDIR=`dirname "$0"` cd "$WORKDIR" cp_start_proc() { N=$1 P=$(( $BASE_PORT + $N – 1 )) ./manage.py runcpserver daemonize=1 port=$P pidfile="$PIDFILE-$N" threads=$THREADS request_queue_size=0 verbose=0 } […]

Tmux和encryption导致重新连接“(不可达)”目录

我正在运行带有encryption主目录(encryptfs)的Ubuntu 13.04服务器。 我打开一个tmux会话,持有我的开发环境(vim等)。 当我断开连接时,我将分离tmux会话,然后断开ssh连接。 后来,当我重新连接,并重新连接tmux会话,我会得到错误,如: fatal: Could not change back to '(unreachable)/*****': No such file or directory 这通常意味着vim(在分离时仍然是打开的)保存到错误的位置,并且不会实际将文件写入到磁盘,而是仅仅到达“不可到达”目录,这似乎是暂时的。 如果我从bash运行“ pwd ”(从重新安装以来没有做其他事情),我得到正确的目录/ home / *** / *** 。 如果我运行'git status',我得到上面的消息(没有这样的文件),如果我从'vim'中input' pwd ',就会得到“ (无法访问)/ *** ”。 暂时的解决办法是运行' cd。 '之前运行任何其他命令,它允许git / vim / etc实际上看到目录。 这是非常不方便的,因为我经常在tmux中打开很多面板/屏幕,我必须运行“ cd”。 每次我重新连接时, 最重要的是,我必须确保vim或其他任何东西,在我断开连接之前closures,否则,如果我不小心,可能会丢失数据。 我看到另一个线程在某个地方,这归因于在注销时encryption卸载$ HOME ,但没有答复。 这似乎是一个可能的原因,但我不知道从哪里开始。 任何帮助?

为什么一些CentOS 5盒子在升级Bash后仍然容易受到ShellShock的攻击?

我有两个CentOS 5.10 boxen,我把bash升级到了最新版本。 但是,在其中一个框中, bash仍然容易受到CVE-2014-7169 (我正在使用此ServerFault答案中的testing)。 任何想法,为什么一台机器是好的,另一个不是? 我可以检查什么? 我已经检查过了: 1-确保两台机器运行相同的操作系统(两者的输出相同): # cat /etc/redhat-release CentOS release 5.10 (Final) 2-确保我有相同版本的bash (两个输出相同): # rpm -qi bash Name : bash Relocations: (not relocatable) Version : 3.2 Vendor: CentOS Release : 33.el5_10.4 Build Date: Thu 25 Sep 2014 08:58:19 PM UTC Install Date: Sat 27 Sep 2014 02:07:07 PM UTC […]

这个Linux命令是做什么的?

我在CentOS服务器上写下这个命令时有一个错误 xargs rpm -e|rpm -qa|grep test11 我的意思 rpm -qa|grep test11|xargs rpm -e 应该卸载所有匹配“test11”的软件包。 有人可以弄清楚第一个命令是做什么的? 我怕它卸载所有包=(

如何防止bash $replace?

我试图保存$如果下面和 想要输出以下内容 如果$ bash正在通过干扰来阻止 $replace $ sed -e 's:\\$:\\$:g' <<ENDOFFILE > $if > ENDOFFILE 要么 $ tr '$' '\$' <<ENDOFFILE > $if > ENDOFFILE 有没有一种方法来保存$关键字 标准输出没有明确的逃避 他们在标准input? 在尝试这个之前我应该​​切换到另一个shell吗?

Linux用户不使用默认主要组的任何影响?

我们正考虑不使用RHEL用户的默认主要组。 我的意思是默认的: User: melbin Primary group: melbin 我们将会做类似的事情: User: melbin Primary group: webmasters 我们的目标是让用户分享更容易的东西,因为人们在共享文件上工作时似乎忘了sg 。 我们认为这比在login时自动loginshell更有意义。

为什么这个发球台输掉stdout?

简单的脚本: #!/bin/bash remote_ssh_account="depesz@localhost" directory_to_tar=pgdata exec nice tar cf – "$directory_to_tar" | \ tee >( md5sum – | \ ssh "$remote_ssh_account" 'cat – > /tmp/h3po4-MD5-2012-03-13.tar' ) | \ ssh "$remote_ssh_account" 'cat – > /tmp/h3po4-data-2012-03-13.tar' 理论上它应该将数据和校验和传送给远程机器。 但不知何故,发球台失败: tee: standard output: Resource temporarily unavailable 没有一丝一毫,但没有出来。 我看到两个ssh都启动了,并且同时写入了这两个文件,但是只有pipe道(md5sum | ssh)获取了数据–ssh“data”的strace没有得到任何数据,5秒后tee显示错误。 除了这一切的作品。 build立2个连接,焦油工程,md5sum及其交付工程。

我可以恢复从以前的terminal纳米进程?

我的系统在未保存更改的nano会话中崩溃。 当我通过SSHlogin时,我看到nano进程仍在运行,当我做一个ps 。 davidparks21@devdb1:/opt/frugg_batch$ ps -ef | grep nano 1001 31714 29481 0 18:32 pts/0 00:00:00 nano frugg_batch_processing 1001 31905 31759 0 19:16 pts/1 00:00:00 grep –color=auto nano davidparks21@devdb1:/opt/frugg_batch$ 有没有办法在新的terminal中将纳米过程重新置于我的控制之下? 或者以任何方式强制它远程保存(从我的新terminal)?