Articles of SH

PHP的preg_replace在bash中,具体的情况

我需要清理一个包含PHP序列化值的mysql转储(我使用sed进行search/replaceurl) 在PHP中,我会这样做: <?php $ret_string = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.mb_strlen('$2').':\"$2\";'", $string ); ?> 你将如何在bash中做到这一点? 原始string例如: a:3:{s:7:"string1";s:4:"test";s:3:"url";s:17:"http://myurl.com";s:7:"string2";s:‌​4:"test";} 我已经用mynewurl.com取代了myurl.com,现在看起来像: a:3:{s:7:"string1";s:4:"test";s:3:"url";s:17:"http://mynewurl.com";s:7:"string2";s:‌​4:"test";} 我需要改变的是string的长度,以反映新string的长度(s:17),最后string变成: a:3:{s:7:"string1";s:4:"test";s:3:"url";s:19:"http://mynewurl.com";s:7:"string2"‌​;s:4:"test";} 我有很多在我的SQL转储这是文件系统上的文件。 尽pipe域名已经改变,但url可能有一个额外的path,从而不同的string长度

通过Cygwin发送电子邮件

我写了一个shell脚本,我想通过它发送一封邮件。 我通过cygwin在Windows上执行此脚本。 我在我的机器上安装了电子邮件软件包。 但是,我正在努力工作。 请让我知道什么是通过cygwin命令提示符发送电子邮件最简单的方法。 我的ssmtp.conf文件是: mailhub=smtp.gmail.com:587 FromLineOverride=YES rewriteDomain=gmail.com root=aci.lfindba@gmail.com UseTLS=YES AuthUser=userid AuthPass=password 和email.conf文件有: SMTP_SERVER = 'smtp.gmail.com' SMTP_PORT = '25' MY_NAME = 'ABC' MY_EMAIL = 'emailaddress' REPLY_TO = 'emailaddress' USE_TLS = 'true' ADDRESS_BOOK = '&/email.address.template' SMTP_AUTH = 'LOGIN' SMTP_AUTH_USER = 'userid' SMTP_AUTH_PASS = 'password' 我正在使用下面的命令来发送电子邮件:echo“mail body”| email -s“subject”recipient@gmail.com但是,我收到以下错误: 电子邮件:致命:无法连接到服务器:smtp.gmail.com上端口:25:不允许操作 请帮忙。

将文件夹中的所有文件复制到同一path内的文件夹中

在Linux shell中,如何将/folder所有文件复制到/folder/sub ? recursion复制的正常方式不工作(这是有道理的),因为我复制到自己的文件夹…

variables没有正确设置

每当我尝试使用一个variables来build立另一个我得到意想不到的结果。 我已经缩小了一点,但可以在这里发生的一些帮助。 我的本地脚本这样做: CUR_TIME=$(date "+%Y%m%d_%HH%MM%SS") CUR_TIME="build_"$CUR_TIME 这给了我想要的结果。 然而,每当我尝试使用这个来构build另一个variables或回声包含这个variables的东西: echo "/home/path/blah/$CUR_TIME" 我的结果只$CUR_TIMEvariables。 这里发生了什么? $CUR_TIMEvariables是在我的本地shell会话上设置的,我通过ssh从远程服务器获得了附加variablesadditional_vars=$(ssh user@server "cat variables.properties") 然后我eval $addtional_vars 。 $additional_vars包含了很多variables,并且单独回显它们可以正常工作。 所以我然后使用这种格式构build或回显新的variables: echo "/home/path/blah/$additional_var1/" 这正确的回声,但如果我这样做(反向): echo "/$additional_var1/home/path/blah" 我的结果就是/home/path/blah 。 编辑 在进一步的故障排除之后,看起来像是我将$additional_vars中的任何variables包含到path名中,并将其放在我指定的任何东西之前,则会导致该path的部分为空。 所以它不只是$CUR_TIMEvariables。 奇怪的是,回声$additional_var本身是没有问题的。 我的.properties文件如下所示: var1="something" var2="something2" var3="something3" var3="ftp://something/another/$something_else" var4="something.something" 如果我使用printf ${additional_vars} | hexdump -Ctestingeval $additional_vars printf ${additional_vars} | hexdump -C ,我的输出结果是一个hex值,然后|var1="something".|

通过使用eclipse运行.sh文件来debugging应用程序

我有一个.sh文件在Linux服务器上独立运行,以同步一些数据,但现在有一些同步问题,所以我想在eclipse中以debugging模式运行这个.sh文件,以便我可以检查我的Java代码的问题是什么? 在eclipse中是否有任何插件或选项可以做到这一点。 请让我知道,如果你需要任何进一步的信息。

操作系统如何处理Python脚本的Python和subprocess?

我的问题有点独特。 我目前正在为我的计算机取证类做一个项目。 该项目旨在隐藏调查人员的磁盘数据。 应该达到的方法是将“干净”文件的字节写在“坏”文件上。 一旦覆盖,“坏”文件被删除。 这个概念听起来很简单,但我和我的合作伙伴观察到的是有趣的。 如果我们用python脚本打开一个文件,我们可以轻松地覆盖与该文件相关联的内存(使用ddvalidation)。 我们也可以从脚本中轻松删除一个文件。 然而,写入然后删除结果在实际上没有写入发生,只有文件的删除。 这从操作系统优化的angular度来看是有道理的。 从这一点来看,如果我们把写作和删除分成两个独立的脚本,并且由三分之一控制,我们认为它可能会起作用。 但是,即使我们将脚本作为另一个脚本的subprocess运行,也会发生同样的情况。 我们已经尝试使用bash脚本进行删除处理,而不是使用纯Python,而且还没有任何粘附。 这个项目本来就是这样一个小小的反辩证法工具,但是这个特定的项目由于这个问题已经引起了我们的全部关注。 有没有人有一个想法,为什么发生这种情况,我们可以做什么向前迈进? 我们知道这可以用C等来实现,但是我们想用python解决这个问题,因为它提供了有趣的约束。 —编辑—这是从我们的控制器的一个片段,它与相关的参数调用“ghost.py”。 ghost.py将编辑的文件名/path打印到标准输出。 相关的代码如下: proc = subprocess.Popen(['python', 'ghost.py', '-c', 'good.txt', '-d','/mnt/evil.txt'], stdout=subprocess.PIPE,) files = proc.communicate() for i in files: if i != None and i != "\n": os.system("./del.sh " + i)

如何通过shell脚本知道目标计算机使用的操作系统的IP?

( 不使用NMAP )我使用TTL值来确定用户inputIP时在目标计算机上使用的操作系统。 实际上,我必须在Case语句中硬编码TTL值。 所以我的问题是: TTL是我们了解正在使用的操作系统的唯一途径吗? 如果TTL不是唯一的方法,那么你能build议/解释在input的IP的基础上可以使用哪些其他方法来检查在目标计算机上使用的操作系统吗? 在networking上searchTTL表时,我发现许多操作系统具有相同的TTL值。 那么有什么办法指出确切的操作系统? 有什么办法可以确定有关操作系统的更多信息,例如是32位还是64位? 如果是的话,哪个领域和什么基础? 以下是我使用TTL值确定正在使用的操作系统的示例代码: #!/bin/bash echo "Enter IP to find it's OS" read ip a=`ping -c 1 $ip|grep -w "ttl" | cut -c 41-47 | tr -d ' '` echo $a case "$a" in ttl=64) echo "Linux Based";; *) echo "other";; esac

用一个标准的工具来逃避一系列在sh-shell中使用的参数

我正在寻找一个标准的工具,能够把所有的参数都转化为一个适合在自动生成的bash / sh / zsh脚本中用作多个参数的单个string。 这样的命令在脚本的各个学科中是非常有用的。 其用法的一个例子: % shsafe 'A big \nasty string '\'' $HOME $PATH' 'another string \\' 'A big \nasty string '\'' $HOME $PATH' 'another string \\' 在另一个脚本中使用它: % sshc host rm 'file/with spaces and $special chars' 其中sshc包含 #!/bin/bash # usage: sshc host command [arg …] # Escapes its arguments so that the […]

在linux中使用while循环逐个testing函数参数

我正在编写一个脚本,我应该testing用户通过while循环给出的参数。 最后一个参数应该总是“本地”,没有固定的参数数量(我们可以添加任意数量的参数) 这是我的代码到目前为止: #!/bin/sh echo echo -n 'My OS is : ' unamestr=`uname` echo $unamestr i=1 while [ "${@:i}" != "local" ] do if [ "${@:i}" == "mysql" ] then #add the repository wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm yum update #Install mysql sudo yum install mysql-server sudo systemctl start mysqld elif [ "${@:i}" == […]

从两个不同的文本文件中读取并获取每行的列

我想从两个不同的文本文件中读取(行号相等),并将每一行的第五列相互比较。 但是这对我没有用。 有人帮我吗? 在这里我的代码: df -h –total>current_filesystem_usage.txt if [ -s previous_months_filesystem_usage.txt ] then #reading from two different files and store each line into a variable while read current_file_line <&3 && read previous_file_line <&4 do current_filesystem_name=$(cat $current_file_line | awk {'print $1'}) current_filesystem_usage=$(cat $current_file_line | awk {'print $5'}) previous_filesystem_name=$(cat $previous_file_line | awk {'print $1'}) previous_filesystem_usage=$(cat $previous_file_line | […]