Articles of bash

无法找出我的crontab有什么问题

由于我的一个脚本中的一些错误,我被迫每30分钟删除一次临时文件,直到我找出并debugging它。 为了做到这一点,我写了一个小的bash脚本,我每30分钟运行一次(tempCleaner) #!/bin/bash numberOfFiles=$(find -name php* | wc -l) echo "$numberOfFiles" if (("$numberOfFiles" <= "0")) then echo "Nothing to delete" echo "There's nothing to delete, everything is fine $(date)" >> /tmp/scan_log else echo "Something to delete" echo "Oops, there are some files that needs to be deleted $(date)" >> /tmp/scan_log sudo rm -vrf php* >> […]

Bash逻辑在启动免费进程之前检查内存和服务器负载

我正试图执行以下伪algorithm: while true do if there is 1G of free memory && server load below 60% ./some-script & break else sleep 10 fi done 我需要帮助(build议,实施注意事项)与实施: 检查是否有1G的空闲内存 检查服务器负载是否小于60%

通过SSH执行远程MySQL查询

我正在尝试使用以下命令通过ssh执行MySQL查询: ssh -p 2020 [email protected] "mysql –verbose –compress –secure-auth –database ops –execute \ 'INSERT INTO \`ops\`.\`accounts\` (\`alias\`, \`id\`, \`web_server\`, \`mysql_server\`) VALUES ('foobar', 'foobar', 'web2', 'mysql1')'" 问题是,当这个被执行时, foobar , foobar , web2和mysql1的单引号被删除。 这里是MySQL的错误响应: ERROR 1054 (42S22) at line 1: Unknown column 'foobar' in 'field list' ————– INSERT INTO `ops`.`accounts` (`alias`, `id`, `web_server`, `mysql_server`) VALUES (foobar, foobar, […]

我怎样才能让ls和xargs组合省略path

我有一个名为lib的文件夹。 在那个文件夹中有一些文件。 我想获取以.jar结尾的文件的所有名称,并将它们连接成一行,用空格分隔。 我根本不需要path名。 我试过这个: ls lib/*.jar | xargs 和输出是 lib/file1.jar lib/file2.jar 但是我想要得到的是 file1.jar file2.jar 我怎样才能做到这一点? 我也试过找,但我得到同样的问题 find lib -name *.jar | xargs

从bash中find用户的家

我试图从傀儡脚本中获得用户家的价值。 这个特定用户是一个Samba用户,不是本地用户,用户名为DOMAIN\user 。 我试过以下,没有成功: echo "~DOMAIN\\user" (输出确切的input) getent passwd DOMAIN\\user (不输出任何内容,用户甚至没有使用getent passwd列出) 我很惊讶,getent没有工作,因为它被configuration为这样做: $ cat /etc/nsswitch.conf | grep passwd passwd: compat winbind 一个简单的C程序使用getpwnam工程,但这将是包括和使用木偶的问题。 如何从puppet或简单的shell命令中检索用户的家?

tail -f并允许文本input

我想创build一个允许一些交互性的脚本 从myService尾巴-f日志文件 允许input文本并发送到myService 我还不能解决的是这两个function在一个terminal上并行工作。 我也想在TTY中实现一些我甚至不知道这个词的: ,————————-. | output here output here | | output here output here | |————————-| ( fixed input line here ) ————————- 这甚至有可能通过SSH执行的服务器端bash脚本实现? 怎么样?

自动修复shell脚本或与^ M中断的文件的行结尾的方法

问题 我们经常打破我们的文件结尾,事情停止工作,没有我们注意到。 Bash抱怨“无效选项”或“:找不到命令”,如下所述: http : //thinkinginsoftware.blogspot.ca/2012/11/linux-server-cries-for-linux-desktop.html 我担心这可能会破坏其他文本文件(conf,crons …) 我们如何打破它(我想) 我们是一群使用Windows,Mac或Linux在一台服务器上编辑Linux文件的人。 我们手动编辑这些文件(ssh + vi / nano或者localy + ftp)。 有时我们复制/粘贴,我认为这是造成这个问题的原因。 是的,有时我们不会为了不太好的原因而testing我们的更改:相同的脚本在复制服务器上工作,更改只是缩进一些行等。 我同意这应该解决。 没有计划使用Chef / Puppet-like解决scheme。 更新 TLDR复制粘贴不是问题,FTP是。 我在Windows + Notepad ++ + PuTTY + nano和vi上做了一些复制/粘贴Windows行尾的CRLFtesting。 它看起来像CR(^ M)字符被过滤,只有LF被粘贴到文件。 感谢ewwhite让我怀疑复制/粘贴理论! 我使用FileZilla通过FTP传输了一个CRLF结尾的文件,选项“发送模式”为自动。 CRLF被保留。 我不知道FileZilla是否可以将它们转换为LF。 减轻 我们不能禁止非Linux操作系统,也不能禁止复制粘贴。 我想到了这些解决scheme: 构build一个运行dos2unix或sed所有脚本的cron.minutely。 缺点:我们需要维护一个“可修改的文本文件”列表,因为我不希望它在/ 使用文本编辑器,可以在文件更改后支持其他命令。 缺点:可能会破坏合法使用非Linux行结尾的文件,在我们ftp脚本时不起作用。 使用像http://inotify.aiken.cz/?section=incron&page=about&lang=en这样的触发系统。 缺点:? #2和#3的优点:我们也可以使用这些为需要它的程序添加最后的空白行。 使用bash,版本4.2.37(1) – 释放 相关的问题^ M(CRLF) 哇,这是不对的。 […]

后台作业从脚本运行时终止,但从bash提示符运行时工作正常

我在MacOS 10.9.4上。 如下所示,我想把sftp放到后台,以后通过命名pipe道自动将一些文件推送到它。 当我从bash提示符手动input命令(使用cat作为侦听器作业以简化)时,它工作正常: $ mkfifo test $ cat > test & [1] 60765 $ cat test | cat & [2] 60781 60782 [1] + 60765 suspended (tty input) cat > test $ echo works! > test works! $ ps -ax | grep 60765 60765 ttys023 0:00.00 cat 60900 ttys023 0:00.00 grep 60765 但是,当我把它放在bash脚本中停止工作: $ […]

在服务器部署上使用shell生成随机口令

当我运行我的自动部署脚本时,我试图随机生成安全的密码到我的各种configuration文件和设置。 我希望它们被生成,显示给用户,用作部署的一部分,然后被丢弃。 这就是我正在做的事情: # FUNCTION TO GENERATE A RANDOM STRING function randpass() { [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]" cat /dev/urandom | tr -cd "$CHAR" | head -c ${1:-32} echo } $NOW = $(date +"%m-%d-%Y") || echo ="Time = $now" $APPKEY = randpass(20) || echo "Secret key = $APPKEY" read -p "Copied […]

如何运行带有进程的对话框命令

请看我的代码 – (bash脚本) 我想同时在屏幕上显示两个对话框, 一个对话框显示: tail -f from – /var/log/proccess1.log , 第二个对话框显示: tail -f从文件 – /var/log/proccess2.log 但令人遗憾的事实是,我只能显示一个对话框,而不能同时显示两个对话框(因为当我运行第一个对话框时,第二个对话框只有在第一个对话框将被终止时才会激活) 所以我在第二个对话框(… ..)上创build进程,以便显示这两个对话框 但是… 第二个对话框创build进程号但不创build第二个对话框GUI(看起来,当我们创build与进程的对话时,进程不会将对话框发送到标准输出) 那么如何用进程运行第二个对话框,但是将对话框的GUI发送到屏幕呢? 或其他解决scheme,以便在屏幕上显示两个对话框 我的代码 #!/bin/bash # this dialog will locate the tail box on the top of the screen dialog –begin 15 10 –tailbox /var/log/proccess1.log 13 125 # this dialog will locate the tail box […]