小编Eyt*_*tan的帖子

期望脚本 + 期望错过发送字符串 + 延迟问题

我编写了 active.ksh 脚本(基于expect),以便自动登录到某些 Solaris 机器并执行主机名命令(登录到虚拟 IP 以验证哪个主机名是活动机器 - 我有两个集群 solaris 机器)

问题在于expect; 期望发送密码字符串 (pass123) 并且它错过了密码问题,它仍然等待密码。

所以实际上密码(pass123)是在密码问题之后输入的。在大多数情况下,expect 脚本工作正常,但有时会错过密码。

问题示例

 ./active.ksh
 spawn ssh 10.10.18.61
 sh: /usr/local/bin/stty: not found
 This computer system, including all related equipment, networks and network devices      (specifically including Internet access),is provided only for authorized uss
 Password:        * my remark - pass123 string was missed the Password Question        pass123
 Password: 
Run Code Online (Sandbox Code Playgroud)

剧本

  #!/bin/ksh

  VIP_ADDRESS=10.10.18.61


  expect_for_verify_which_active_machine=`cat << EOF
  set timeout -1
  spawn  ssh   $VIP_ADDRESS 
  expect {
  ")?"   { send "yes\r" …
Run Code Online (Sandbox Code Playgroud)

linux solaris ssh expect shell-scripting

7
推荐指数
1
解决办法
1万
查看次数

期望+如何确定是否因为超时而期望中断?

以下简单期望脚本的目标是获取远程机器上的主机

有时期望脚本无法对 $IP_ADDRESS 执行 ssh(因为远程机器不活动等)

所以在这种情况下,expect 脚本将在 10 秒后中断(超时 10),这没问题,但是......

有两种选择

  1. Expect脚本成功执行ssh,并在远程机器上执行了命令hostname
  2. 预计脚本中断,因为超时为 10 秒

在这两种情况下,expect 都会退出

  • 如果 ssh 成功,预计会在 0.5-1 秒后中断,但如果 ssh 不好,则会在 10 秒后中断

但我不知道expect脚本是否成功执行ssh?

是否可以识别超时过程?或验证期望因超时而结束?

备注我的 Linux 机器版本 - red-hat 5.1

期待脚本

 [TestLinux]# get_host_name_on_remote_machine=`cat << EOF
  > set timeout 10
  > spawn  ssh   $IP_ADDRESS
  >            expect {
  >                      ")?"   { send "yes\r"  ; exp_continue  }
  > 
  >                      word:  {send $PASS\r}
  >                   }
  > expect >  {send "hostname\r"}
  > expect >    {send exit\r}
  > expect eof …
Run Code Online (Sandbox Code Playgroud)

linux ksh tcl expect shell-scripting

5
推荐指数
1
解决办法
3337
查看次数

linux + sed - 只替换字符串最右边的字符

我有 linux 机器 red-hat 5.1

如何仅替换正确的单个字符(字符串的最一侧)

来自我的 sed 语法的示例(不好,因为它替换了两个“a”字符) l

 echo machine1a | sed s'/a/b/g'

 mbchine1b
Run Code Online (Sandbox Code Playgroud)

但请求的答案应该是 - machine1b 而不是 mbchine1b

linux sed

5
推荐指数
1
解决办法
2万
查看次数

ssh + 长ssh延迟并解析conf文件

Linux系统运行Redhat 5.1。

当我使用 SSH 连接到计算机时,在登录完成并获得 shell 之前会出现很长的延迟。

我做了一些研究,找到了这个问题的解决方案,建议我删除/etc/resolv.conf, 然后登录就会很快。我尝试这样做并且确实有效;删除/etc/resolv.conf加速的东西。

所以现在我想了解为什么这会导致问题,以及如何在不破坏名称解析的情况下快速登录 SSH。

更新UseDNS no已在sshd_config(但尚未解决问题)

linux ssh

4
推荐指数
1
解决办法
7360
查看次数

sed + 不适用于solaris

我在 Solaris 机器和 Linux 机器上运行以下 sed 语法

在 Linux 机器上 sed 执行删除所有字符直到第一个数字的工作。

但是为什么这个 sed 语法在 Solaris 上不起作用?

我需要在 sed 语法中更改什么才能在 Solaris 上运行它?

在solaris上(sed - 在第一个数字之前不删除字符串?)

   solaris:/ ROOT > echo "Release............5.3.7.1-12"  | sed 's/[^0-9]\+//'

   Release............5.3.7.1-12
Run Code Online (Sandbox Code Playgroud)

在 linux 上(我得到了很好的结果)

  linux tmp]# echo "Linux Release............5.3.7.1-12"  | sed 's/[^0-9]\+//'

  5.3.7.1-12
Run Code Online (Sandbox Code Playgroud)

linux solaris sed

2
推荐指数
1
解决办法
1731
查看次数

重新创建新链接并通过一个命令删除旧链接

根据 ln 手册页:

   man ln


   -f, --force
          remove existing destination files
Run Code Online (Sandbox Code Playgroud)

据我了解,如果我想重新创建指向某个目标目录/文件的新链接

我可以简单地做

    ln -s -f some_directory new_link
Run Code Online (Sandbox Code Playgroud)

但这不是我从我的 linux/solaris 机器上得到的

例如

  [u@h w]# mkdir dir1
  [u@h w]# ln -s dir1 link
  [u@h w]# ls -l


  drwxr-xr-x 2 root root 4096 Mar 16 20:26 dir1
  lrwxrwxrwx 1 root root    4 Mar 16 20:27 link -> dir1




   [u@h w]# ln -s -f dir1 new_link
Run Code Online (Sandbox Code Playgroud)

现在我接受看到 new_link 现在指向 dir1 而“链接”不存在但链接仍然指向 dir1 ?

如何在一个命令中重新创建新链接并同时删除旧链接?

我不想使用 rm 命令

  [u@h w]# ls -l …
Run Code Online (Sandbox Code Playgroud)

linux solaris bash ksh shell-scripting

1
推荐指数
1
解决办法
994
查看次数

Linux + 如何验证 linux 版本是 32 位还是 64 位

可能的重复:
我怎么知道我运行的是 32 位还是 64 位 Linux?
确定 Linux 服务器的架构(32 位或 64 位)

我安装了以下

  • 机器 1 上的 RedHat-Linux-OS-5.3.0.0-01_x32
  • 机器 2 上的 RedHat-Linux-OS-5.3.0.0-01_x64

我可以使用什么命令或文件来检查安装的 Linux 版本是 32 位还是 64 位。

注意 redhat-release 并没有定义版本是否是 32/64。

linux

0
推荐指数
1
解决办法
441
查看次数

wall 命令 + 广播消息不会出现在第二台集群机器上

我有两个集群solaris机器(machine1,machine2)我在两台机器之间有连接ping和ssh工作正常(集群很好)

 more /var/tmp/mesg
 TEST
Run Code Online (Sandbox Code Playgroud)

我执行以下命令:

    wall –a /var/tmp/mesg on machine1  ( on machine1 )
Run Code Online (Sandbox Code Playgroud)

在机器 1 上,我看到消息“测试”

但是当我也在 machine2 上检查消息“TEST”时,我看不到消息“TEST”

请告知问题是什么 - 在 machine2 上我没有收到广播消息“TEST”

机器 1 和机器 2 的详细信息

 machine1 - details


 [root@machine1 /var/tmp]#ifconfig -a


    lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000 
e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
    inet 10.20.24.137 netmask ffffff80 broadcast 10.20.24.255
    groupname Data_ipmp
    ether 0:21:28:d2:31:3e 
e1000g0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
    inet 10.20.24.141 netmask ffffff80 broadcast 10.20.24.255
nxge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3 …
Run Code Online (Sandbox Code Playgroud)

networking solaris cluster storage-area-network

0
推荐指数
1
解决办法
649
查看次数

linux + 如何停止/var/spool/clientmqueue 下的文件创建

请建议如何停止目录下的文件创建 -

     /var/spool/clientmqueue
Run Code Online (Sandbox Code Playgroud)

原因是因为 clientmqeueue 文件夹有巨大的容量和每天创建的文件

我通过 du -sh 验证文件夹容量,文件夹接近 500M

请为所有可能性提供建议

linux

-1
推荐指数
1
解决办法
2859
查看次数