对于web开发人员来说,一个非常常见的任务是将单个文件从开发框的子目录上载到远程服务器的同一子目录。不幸的是,这最终总是成为一个恼人的手动过程,涉及到在两台服务器上切换目录,并浪费了大量的时间。
所以,我自己编写了一个shell脚本来为自己实现自动化,使用scp进行安全的文件复制。(重要方面)注意:ftp是非常不安全,请改用WinSCP)
要解决的主要问题是,我在开发机器上安装的WordPress与服务器上安装的基本目录不同。在我的开发机器上是/var/www,在我的服务器上更像是/var/www/howtogeek/docs/。我决定在脚本开始的时候把它们移到变量中,如下所示:
[email protected] RDIR=/var/www/howtogeek/docs LDIR=’\/var\/www’
请注意,脚本中的本地目录(LDIR)在路径中的每个/前面都有一个\号。这是因为我们稍后将把它传递到脚本中的sed命令中,所以我们必须转义这些值。我肯定还有别的办法,但我不知道。
接下来,我设置自动ssh登录。为此,您需要首先运行ssh keygen实用程序,如下所示:
ssh-keygen -t rsa
然后需要复制~/.ssh/id_rsa.pub公司文件到远程服务器上的~/.ssh/authorized\u keys文件。如果已在远程服务器上创建~/.ssh目录(可能需要检查),则可以运行此命令将密钥复制到:
cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >> .ssh/authorized_keys’
现在我们有了自动ssh登录,这将允许在没有密码的情况下使用scp实用程序。现在让我们看一下脚本中使用的scp命令:
scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*\///’`
$1是您将传递给脚本的参数,用于尝试上载的文件名。$SSHSERVER和$RDIR是我们将在脚本开头设置的变量,用于设置用户@主机名以及前面的远程路径。
以pwd | sed开头的第一个块获取当前目录路径,并去掉与远程服务器不匹配的路径的前一部分,但保留路径的其余部分。例如,如果您在/var/www/wp content/中运行命令,sed块将根据LDIR变量剥离/var/www,但保留/wp content/部分内容。
第二个块只是确保从传递给脚本的文件名中去掉前面的整个路径,这样就可以得到文件名。
例如,如果您命名了脚本向上.sh并从文件上的本地/var/www/wp content/plugins/directory运行:
up.sh myplugin.php
这将由shell扩展如下:
scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php
我不再试图根据本文创建自己的脚本文件,而是提供给您下载。这样就不会有任何问题与特殊字符不工作…是的,我用脚本上传自己=)
下载极客-上传器.sh
只要把它放在你的路的某个地方,你想叫什么名字都行。我把我的名字改成了“up”,这样我就可以键入“up”文件名.txt“上传。还要记住打开它并更改脚本开头的变量以匹配您的环境。
这个脚本应该在任何使用*nix shell和scp实用程序的情况下工作。我使用Ubuntu,但是它应该在安装了Cygwin的Solaris、OS X甚至Windows上工作。
...l还可以执行存储在文件中的命令。这种执行模式称为shell脚本,本文将介绍shell脚本的基础知识。 ...
...为symlinks,指向网络驱动器。在本例中,我们使用的是FTP服务器,但您也可以轻松地使用本地NAS或办公室中的SMB共享驱动器。您将需要稍微更改这些替代方法的代码,以匹配您使用的格式。 ...
...,无需手动干预即可根据需要将本地文件自动同步到远程服务器。请注意,本指南确实需要访问远程Linux服务器(如AWS),并且是在Ubuntu20.04下编写的,尽管任何Linux发行版都可以正常工作。 ...
...们在Linux所在的任何地方都可用。 受限shell也可以应用于脚本。这就确保了如果它们被错误地写入,可能造成的任何损坏都被限制在它们的受限世界中,并且它们无法访问您的整个计算机。 不过,请注意,受限炮弹并不是完全可...
...关闭child bash会话,请使用exit: exit 继承的环境也会影响脚本。下面是一个简单的脚本,它将三个环境变量的值写入终端窗口: #!/bin/bash echo "WEBSITE" $WEBSITE echo "LOCAL_VAR" $LOCAL_VAR echo "INHERITED_VAR" $INHERITED_VAR 这被保...
...。然而,这是一个非常困难的问题。 在过去,一些邮件服务器将电子邮件存储为离散文件(这会迅速导致大量小文件的收集)存在此问题。当这些应用程序将其后端更改为数据库时,这就解决了问题。一般的家庭系统不会耗尽in...
...统的其他一些实用程序,或者查找与您键入的内容匹配的脚本或程序。 相关:Bash、Zsh和其他Linux shell之间有什么区别? 命令行是您键入的位置。它是shell在等待您输入某些指令时显示的提示。术语“命令行”也用于指代您键入...
...开发人员计算机上的本地存储库,也许还有位于网络中央服务器上的本地存储库之外,最好有一个非现场或远程存储库。 这就是GitHub的用武之地。 github GitHub是git成功的结果。创始人们看到了对安全托管的远程git存储库的需求。...
...。它以明文形式显示FTP密码。任何人在你的网络或你和FTP服务器之间的互联网上可以很容易地看到密码是“MySecretPassword” 在没有加密的情况下,恶意参与者也可以修改您正在下载或上传的文件。 ftp命令 假设您在FTP站点上有一...