我编写了 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) 以下简单期望脚本的目标是获取远程机器上的主机名
有时期望脚本无法对 $IP_ADDRESS 执行 ssh(因为远程机器不活动等)
所以在这种情况下,expect 脚本将在 10 秒后中断(超时 10),这没问题,但是......
有两种选择
在这两种情况下,expect 都会退出
但我不知道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 机器 red-hat 5.1
如何仅替换正确的单个字符(字符串的最一侧)
来自我的 sed 语法的示例(不好,因为它替换了两个“a”字符) l
echo machine1a | sed s'/a/b/g'
mbchine1b
Run Code Online (Sandbox Code Playgroud)
但请求的答案应该是 - machine1b 而不是 mbchine1b
Linux系统运行Redhat 5.1。
当我使用 SSH 连接到计算机时,在登录完成并获得 shell 之前会出现很长的延迟。
我做了一些研究,找到了这个问题的解决方案,建议我删除/etc/resolv.conf, 然后登录就会很快。我尝试这样做并且确实有效;删除/etc/resolv.conf加速的东西。
所以现在我想了解为什么这会导致问题,以及如何在不破坏名称解析的情况下快速登录 SSH。
更新:UseDNS no已在sshd_config(但尚未解决问题)
我在 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) 根据 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) 可能的重复:
我怎么知道我运行的是 32 位还是 64 位 Linux?
确定 Linux 服务器的架构(32 位或 64 位)
我安装了以下
我可以使用什么命令或文件来检查安装的 Linux 版本是 32 位还是 64 位。
注意 redhat-release 并没有定义版本是否是 32/64。
我有两个集群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) 请建议如何停止目录下的文件创建 -
/var/spool/clientmqueue
Run Code Online (Sandbox Code Playgroud)
原因是因为 clientmqeueue 文件夹有巨大的容量和每天创建的文件
我通过 du -sh 验证文件夹容量,文件夹接近 500M
请为所有可能性提供建议