【问题标题】:how to automate some linux commands如何自动化一些 linux 命令
【发布时间】:2013-02-14 19:13:26
【问题描述】:

我已经编写了很多 Windows 命令 shell 脚本,但我是 linux 新手。有什么方法可以编写/自动化以下命令,以便我所要做的就是(在 Windows 术语中)“运行批处理文件”来完成这一切?这是我的步骤,按顺序:

  • 启动 putty,选择主机名和端口,单击打开(也希望脚本/自动化这第一部分)
  • linux shell/终端打开
  • 我输入我的登录名和密码
  • 我输入这个命令:sudo su - psoftXXX
  • 我再次输入密码并回车
  • 我看到了一个小 cmd-shell 菜单和一个提示。我必须输入“1”并回车
  • cd /
  • cd 日志
  • cd 小时
  • CD DV
  • cd appserv
  • rm 简*
  • ls

有什么方法可以自动完成全部或部分操作吗?谢谢。

【问题讨论】:

  • 可以在 Windows+Linux 端结合各种技术实现自动化,但也许仅在 Linux 端运行定期的解决方案,无需用户干预,就足够了?这只是 psoftXXX 用户的 crontab 中的一行。
  • 什么是问题? “自动化”是什么意思?

标签: linux ksh


【解决方案1】:

是的。一旦您了解它,您就会发现与 Windows 相比,Linux 中的脚本编写是一种乐趣。想象一下(可怕的)命令提示符和(不那么可怕的)PowerShell 之间的差异,然后将该差异乘以 10,这就是在 Linux 中编写脚本要好得多。

术语是“shell 脚本”,因为命令处理器(相当于 Windows 命令提示符)称为“shell”。只是为了让生活更充实一点,Linux 有各种可用的 shell。最常见的是sh 的变体,例如bashash。不过,有些疯狂的人使用cshtcsh 或其他人,它们的语法截然不同。

创建脚本

要创建一个“shell 脚本”,即一个批处理文件,只需在顶部创建一个文本文件:

#!/bin/bash

(或任何你的 shell 的名称)。通常,文件名可能以.sh 结尾,或者根本没有特殊的文件结尾。

在文件的其余行中,只列出您想要运行的命令,就像您在普通 Linux 终端上输入它们一样。

然后为该文件分配“执行”权限。在命令行中,您将使用chmod u+x filename.sh。这意味着为当前用户添加执行权限。

当您开始学习可以在 shell 中做的所有不同事情时,真正的乐趣就来了。例如有这样的巧妙技巧:

my-first-command && my-second-command   # only runs my-second-command if my-first-command succeeded

或者这个:

my-background-command &   # runs my-background-command in the background, so that you can get on with other things

还有很多很棒的 Linux/UNIX 小程序可以很容易地将其他程序连接在一起 - 例如grepuniqxargs

你的具体例子

虽然已经解释了这一切有多棒,但我认为这实际上并不是您需要做的。

您示例的 shell 脚本部分归结为:

rm /logs/hr/DV/appserv/JEN*; ls /logs/hr/DV/appserv

我觉得您想从 Windows 自动登录以运行这些命令。

我相信在 PuTTY 中,如果它通过 SSH 连接,你可以给它一个运行命令。所以这就是我要做的。

  1. 使用 PuTTY 在您的 Windows 机器上生成 ssh 密钥。 (我不记得怎么做 - 我认为有 PuTTYGen 或类似的)。
  2. 将生成的 public 密钥复制到 .ssh 用户的 .ssh 目录中名为 authorized_keys 的文件中。您可以从字面上复制和粘贴它;这可能比做任何花哨的事情要容易。请注意,此目录和/或文件可能不存在,在这种情况下,您需要创建它们;如果文件存在已经,那么请确保将新密钥附加到文件末尾而不是覆盖它。
  3. 现在尝试使用 PuTTY 和 ssh 再次连接。它应该会自动以psoftXXX 用户身份登录。
  4. 最后,在 PuTTY 设置中,您可能可以指定上面给出的命令行。您可能需要像这样指定它:

    /bin/bash -c "rm /logs/hr/DV/appserv/JEN*; ls /logs/hr/DV/appserv"

请注意,我没有自动化一个阶段,即在菜单上按 1。那是因为我怀疑这个菜单是通过给你一个特殊的默认登录 shell 来实现的,它不是/bin/bash,而是/something/somewhere/which/shows/a/menu。我希望如果您在 PuTTY 中指定替代命令,该设置将被完全忽略,而是让您的脚本运行。

您可能需要玩一会儿。祝你好运!

【讨论】:

  • 很棒的答案。我希望我能弄清楚这一切。
【解决方案2】:

是的,您可以在 linux 中编写 shell 脚本。每个 shell 脚本都以

开头
#!/bin/bash
<commands>
. 
.
.

如果你想运行上面的命令,它看起来像这样

#!/bin/bash
cd /logs/hr/DV/appserv
rm JEN*
ls

至于自动化可能有点棘手的第一部分,我认为如果您刚以 psoftxxx 身份登录,我认为您可以删除整个 sudo su psoftXXX...

希望对您有所帮助,这里有一个很好的资源可以帮助您开始编写 shell 脚本 http://linuxcommand.org/writing_shell_scripts.php

【讨论】:

  • 感谢您的回答。阿德里安的更详细,所以我选择了他的,但你的也很棒。
【解决方案3】:

有一次我在工作中遇到了类似的问题。我厌倦了不得不登录到 shell。我们的主系统受到保护的方式意味着它处于离线状态。为了登录,我们必须首先 ssh 到网络中的在线系统,然后从该机器 ssh 到主系统。下面是这个过程的样子。

1.) Launch putty using the profile set up for the first machine. I had already made the effort to set the login command to ssh into the next server. 2.) Enter my user password 3.) use su to log into root 4.) enter the root password 5.) use gradm on my user 6.) source my .bashrc

不用说,这一切对我来说似乎毫无意义。在 Windows 上,我发现自动化 putty 的选项不是很好。 Cygwin 来救援。设置它需要一些工作,但一旦设置好,您将节省时间是完全值得的。

以下是我建议的用于终端/ssh 的应用程序:

Cygwin - https://www.cygwin.com/ 或 MobaXterm - http://mobaxterm.mobatek.net/

我已经将此方法与 vanilla Cygwin(如果您想要一个选项卡式终端界面,可以与 Console2 一起使用)和 MobaXterm 一起使用,这确实使 Putty 看起来完全过时了。如果您要使用 Cygwin,请使用 apt-cyg 或 Cygwin 安装程序安装期望包。如果您打算尝试使用 MobaXterm,则需要从 MobaXterm 插件页面下载 tcl/expect 插件。

您可以使用 expect 库来自动化任何事情。如果您对 TCL 语言不满意,还有一个基于 Python 的版本。

这里有一个指南 - http://www.cotse.com/dlf/man/expect/bulletproof1.htm - 它应该可以帮助您开始学习期望。使用 expect 我可以编写整个工作区的脚本。在我的 Cygwin .bashrc 文件中,连接到远程机器并登录已减少为一个别名。

这里是期望的主页 - http://expect.sourceforge.net/

关于此主题的其他详细信息、说明和提示将在以后的编辑中提供。

【讨论】:

    【解决方案4】:

    让我们把它分成几个任务:

    通过 SSH 连接到 .

    首先避免在脚本中使用密码。而是使用公钥/私钥。生成一对:

    $ ssh-keygen
    

    按照步骤,应该会生成两个文件(id_rsa,id_rsa.pub),id_rsa.pub是公钥。

    转到您要连接的服务器,以 psoftXXX 身份登录并在 $HOME/.ssh/authorized_keys 中添加存储在 id_rsa.pub 中的公钥

    现在您应该能够以 psoftXXX 用户身份连接到服务器,而无需输入密码:

    $ ssh psoftXXX@<server>
    

    现在是另一个任务。通过 SSH 删除这些文件。

    $ ssh psoftXXX@<server> rm -f /logs/hr/DV/appserv/JEN*
    

    这将以 psoftXXX 身份连接到服务器(服务器不会询问密码)并将执行“rm -f”。

    如果我必须定期运行它,我会使用 cron。你应该检查一下。

    顺便说一句...试试这个命令:

    $ man <command>
    $ man -k <keyword>
    $ man man
    

    【讨论】:

    • 我发现我可以通过创建快捷方式并将 usn/pwd 传递给 exe 来使用 putty 自动登录。这是成功的一半。
    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2013-04-14
    • 2011-07-22
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多