Articles of bash

closures/使用SSH退出所有屏幕

我的服务器上有很多屏幕。 用screen -ls我得到: There are screens on: 12858.test1 (Detached) 28210.test2 (Detached) 12494.moretesting3 (Detached) 31787.testingfour4 (Detached) 13192.testscreen5 (Detached) 5 Sockets in /var/run/screen/S-root. 我知道我可以退出一个单独的屏幕, screen -S 12858 -X quit或screen -S test1 -X quit但我需要一种方法来同时closures所有的屏幕。 有一个SSH命令或bash脚本,能够closures每个打开/分离的屏幕?

在bash脚本中捕获Python脚本的输出

我有一个监视游戏服务器的脚本。 它是用bash写的。 不过,我试图把高级监视器放在一起,如果服务器已经locking了。 这需要一个小的python脚本来查询服务器,并返回OK,ERROR 1或ERROR 2.捕获输出的最好方法是什么? 目前与脚本variables是空的。 我可以确认脚本运行正常并返回消息。 if [ -f serverquery.py ];then echo -e "[\e[0;36m INFO\e[0;39m ] Running advanced monitoring serverquery.py" echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: Running advanced monitoring serverquery.py" >> ${logfile} serverquery=`./serverquery.py 127.0.0.1 27015` if [ "${serverquery}" = "ERROR 1" ];then echo -e "[\e[0;31m FAIL\e[0;39m ] ${servicename}: serverquery.py Monitor detected […]

当用cron运行时脚本不会做它应该做的

我有一些问题。 我有脚本执行计划,但时间到了什么都没有发生。 #!/bin/sh TIME=`date +"%d-%m-%Y"` cd /var/www/flyer/data/www/ mysqldump -u root -ppasswd –databases db_name –create-options –default- character-set=utf8 –result-file=dump.sql FILENAME="backup_$TIME.tar.gz" tar -cpzf ../backups/$FILENAME somefolder dump.sql rm dump.sql chown flyer:flyer ../backups/$FILENAME chmod 666 ../backups/$FILENAME 当我直接从ssh运行脚本为/root/backup.sh时,一切正常。 但是当它由cron运行时,什么都不会发生。 grep CRON /var/log/syslog显示它被执行(Dec 19 01:21:01 vps-8463 / USR / SBIN / CRON [1299] 🙁 root)CMD(sh /root/backup.sh> / dev / null 2>&1))但是没有存档被创build。 Cron任务: […]

通过IP地址dynamic删除iptables策略

我想根据源或目标IP地址自动删除一些NAT POSTROUTING规则。 我知道源和目标IP,但我不一定知道哪些策略已经存在。 例如,我可能会有这样的: -A POSTROUTING -s 10.10.10.10/32 -p tcp -m tcp –dport 80 -j SNAT –to-source 1.2.3.4 -A POSTROUTING -s 10.10.10.10/32 -p tcp -m tcp –dport 443 -j SNAT –to-source 1.2.3.4 -A POSTROUTING -s 10.10.10.10/32 -j ACCEPT 或者我可能只是有这个: -A POSTROUTING -s 10.10.10.10/32 -j SNAT –to-source 1.2.3.4 我想取消旧计算机的NAT地址,并将其分配给新的计算机。 这全是自动的,所以我不能手动查找它。 删除旧IP策略的最佳方法是什么? 我可以使用list + grep命令吗? 我通常在Windows世界中闲逛,所以我不确定在这里处理这个问题的最好方法。

任何Linux工具来创build一个回购文件?

SuSE的软件包pipe理器zypper能够在/etc/zypp/repos.d/创build存储库文件。 zypper -n rr myrepo zypper -n ar -f http://path/to/myrepo myrepo 我正在寻找一个等效的工具为centos做同样的事情。 我检查了yum的手册页,但似乎yum没有能力做到这一点。 目前我必须编写以下硬代码来为centos创build一个存储库文件。 echo "[myrepo] name = My Repository baseurl = http://path/to/myrepo proxy = _none_ gpgcheck = 0 metadata_expire = 300 fastestmirror_enabled = 1 failovermethod = roundrobin priority = 1 enabled = 1 retries = 5 timeout = 10" >/etc/yum.repos.d/myrepo.repo 如果我可以写两行代码作为zypper来完成我的工作,那将会很棒。

使用inotifywait和lftp来同步服务器

我有两台服务器: 服务器A(CentOS),人们可以上传文件(上传根文件) 服务器B(Win 2008),FileZilla FTP服务器(FTP根目录为C:\ content) 我希望每当一个file upload到服务器A,到/文件下的任何子文件夹时,文件都会自动复制到服务器B上完全相同的子文件夹。因此,如果用户上传“flowers.jpg”到/ files / photos / 12345 /那么该文件必须通过FTP复制到C:\ content \ photos \ 12345 到目前为止,我有这个bash脚本,它将文件复制到服务器B,但所有文件放置在C:\ content,而不是在相应的子文件夹中。 谁能帮我find正确的语法? #!/bin/bash cd /files inotifywait -q -r -m -e close_write,moved_to . –format %w%f | while read FILE; do lftp -e "put $FILE; exit" -u user,password -p 2121 ftp.server-a.com done

Linux / Bash:testing我的服务器是否以编程方式/通过CLI打开到Internet

RHEL 6和Bash。 如果我有一个远程服务器来运行nmap ,甚至curl / wget ,但是我只能访问防火墙一侧的服务器,那很容易。 我知道我可以手动检查使用基于互联网的端口扫描工具,并且我认为答案将是提供脚本的站点之一,可以通过命令行访问。 如何在使用服务器的Bash shell时检查服务器上的互联网端口? TL; DR我希望能够使用该服务器上的Bash来检查服务器上的外部可用端口。

IP路由添加手动工作,但通过bash脚本运行时抛出“错误:预期的inet前缀,而不是…”

我试图运行一个脚本,应该添加此路由到表11: ip route add local 10.1.3.212 dev eth1 proto kernel scope host src 10.1.3.212 table 11 如果我手动运行这个命令,它是成功的,我可以看到表11中的条目,但是如果我运行脚本,执行以下操作: if [[ ${IP_ROUTE} == local* ]]; then ip route add ${IP_ROUTE} table ${NEW_INTERFACE_TABLE} 2>>/home/ec2-user/script_output fi $ {NEW_INTERFACE_TABLE}是11,脚本会抛出这个错误: Error: an inet prefix is expected rather than "local 10.1.3.212 dev eth1 proto kernel scope host src 10.1.3.212 ". 请帮忙,我疯了。

在variables赋值中丢失回车

如果我像这样在Bash中分配一个variables: PRIVATE_KEY="$(< ~/.ssh/id_rsa)" 然后立即将其转储到一个文件中: echo $PRIVATE_KEY > tmp.txt 然后比较这个原来的: diff ~/.ssh/id_rsa tmp.txt 我没有得到一个匹配的所有回车(或者也许是换行)已被剥离在原来的variables分配。 我如何避免这种情况?

rsync在bash脚本中使用keygenlogin

所以我为服务器设置了无密码的sshlogin名。 我可以从命令行运行rsync,它运行的很好,并不要求我input密码: rsync -avz -e ssh myDir user@XXXX:/place/myDir 但是,当我把它放在一个bash脚本中并执行脚本时,它会停下来询问我一个密码。 #!/bin/bash rsync -avz -e ssh myDir user@XXXX:/place/myDir 为什么发生这种情况? 我应该寻找什么来阻止呢?