今天有点无聊,打通ssh的时候遇到了问题,搞了半天才搞定。
在搞的过程中发现,在两台经过ssh打通的机器很容易将消息发送到彼此。
进而想想,如果收到消息的机器能够即时将内容显示出来,那不就是一个山寨版的即时聊天工具嘛,哈哈。
于是我的恶搞开始了。。。
基本思路如下:
1. 最核心的其实就是使用ssh执行远程命令,将内容写到远程计算机的文件中。
2. 消息接受机器监控某个消息文件,一旦发现有消息到大,就取出来,并将其写到标准输出,让用户知道。
3. 同时接受消息的机器可以接受用户的输入,并将其发送到另一台机器。
---消息接收器的守护进程需要在后台run,接受用户输入,并发送的进程在前台run。
思路确定后就是实施了,我们需要:
1. 一个总的程序入口,我们叫它“process.sh”。负责启动消息接收进程和接收用户输入并调用发送逻辑,将数据发送。
2. 一个消息接收器,我们叫它“receive.sh”。负责接收消息,并将告诉用户这条消息是别人发送过来的。
3. 一个消息发送器,我们叫它“send.sh”。负责将用户输入的消息,发送到指定的机器上去。
4. 一个消息接收文件,这个文件存放每次会话中所有接收到的消息。
结构如下:
-rw-rw-r-- 1 admin admin 12 Nov 22 16:19 msg
-rwxrwxr-x 1 admin admin 442 Nov 22 16:09 process.sh
-rwxrwxr-x 1 admin admin 56 Nov 11 23:02 receive.sh
-rwxrwxr-x 1 admin admin 75 Nov 22 12:57 send.sh
代码如下:
process.sh:
#!/bin/bash clean(){ for pid in `ps aux | grep 'tail -f msg' | grep -v 'grep' | awk '{print $2}'` do kill -9 $pid >/dev/null 2>&1 done for pid in `ps aux | grep 'bin/bash ./receive.sh' | grep -v 'grep' | awk '{print $2}'` do kill -9 $pid >/dev/null 2>&1 done } stop(){ clean exit 0; } clean >msg tail -f msg | ./receive.sh & while read line do if [ "$line" = "exit" ]; then stop fi ./send.sh "$line" 10.20.151.97 done
receive.sh
#!/bin/bash while read msg do echo "receive: "$msg done
send.sh
#!/bin/bash msg=$1 ssh admin@$2 "echo $msg >> /home/admin/msgserver/msg"
代码行数一共只有38行。
我们将这四个文件都放到/home/admin/msgserver里面,并且保证两台机器上的路径设置都一样。
然后两台机器分别运行process.sh文件:./process.sh
效果如下:
我们首先发送一条消息:"hello i am xiaoqiang"。如图1
另一台机器马上收到一条消息:“receive: hello i am xiaoqiang”。 如图2
收到消息后马上回一个消息:“hello, i am guagua,haha”。如图2
第一台机器又马上收到一条消息:“receive: hello, i am guagua,haha”。如图1
然后如果要退出,输入"exit"即可。
当然这个东西是不能用的,也没有人2B到用这个哈。做这个就权当练习shell和ssh用法了。
附:
图1:
图2:
相关推荐
该工具是一个使用 Bash Shell 实现的局域网即时通信工具,使用 ssh 进行远程连接,并通过消息接收器和消息发送器来实现即时通信。 二、基本思路 该工具的基本思路是: 1. 使用 ssh 执行远程命令,将内容写到远程...
一个简单的Bash脚本通常以`#!/bin/bash`开头,声明解释器。脚本中可以包含变量定义、条件语句(if-else)、循环结构(for、while)、函数等编程元素。通过脚本,用户可以执行一系列命令,比如备份文件、监控系统状态...
1. **命令行界面**:Bash Shell提供了一个命令行界面,用户可以通过输入命令来执行操作。它支持命令历史,可以通过上下箭头键快速访问之前输入过的命令。 2. **变量**:Bash支持环境变量和用户自定义变量。例如,`$...
)用于匹配文件名,管道(|)将一个命令的输出作为另一个命令的输入,以及重定向(<和>)改变命令的输入源或输出目标。这些特性极大地提高了命令行的灵活性和效率。 此外,本书还会涉及Bash的环境配置,如`.bashrc`...
通过编写 Bash Shell 脚本,用户可以实现批量文件处理、系统管理任务自动化等操作。 #### 部分内容解读 本书不仅包含了对 Bash Shell 的全面介绍,还推荐了其他相关的资源和书籍,为读者提供了更广阔的学习空间。...
**高级Bash Shell指南** ...在Unix和Linux环境中,Bash Shell技能是一项基础且不可或缺的工具,对于任何IT从业者而言都具有极高的价值。通过深入实践和不断探索,您将发现Bash Shell的强大潜力和无尽的可能性。
- **第6章:高级Shell编程**:涵盖了Bash的一些高级特性,如进程间通信、信号处理等,帮助读者进一步提升技能水平。 - **特点与亮点**: - **实用性**:本书提供了大量的实例代码,让读者能够在实践中学习。 - *...
12.7 **Word Splitting**:在命令执行前,Shell会将一个单词(如变量值)分割成多个单独的参数,这是基于内部字段分隔符IFS进行的。 13. **重定向 (REDIRECTION)**:描述如何改变输入和输出流的方向,如将输出...
bash shell,全称为Bourne-Again SHell,是GNU项目的一部分,由自由软件基金会的创始人理查德·马修·斯托曼(Richard Stallman)发起,是Unix/Linux操作系统中最常用的命令行解释器。这个源代码包包含了bash 4.2...
它不仅是一个命令解释器,还支持各种脚本语言特性,如变量赋值、条件语句、循环结构等,使用户能够编写复杂的shell脚本。 #### 2. **基本Shell特性** Bash shell提供了丰富的语法和操作,包括: - **Shell语法**...
这份"bash_shell_cheat_sheetV2.pdf"速查表旨在帮助初学者快速掌握Bash Shell的基础知识和常用命令。 1. **基本命令** - `cd`: 更改当前工作目录。 - `ls`: 列出目录内容。 - `pwd`: 打印当前工作目录。 - `...
《Bash参考手册2014版:深入理解Bash Shell源码》 Bash(Bourne-Again SHell)是Unix/Linux操作系统中最常用的命令行解释器,它继承了Steve Bourne的原始Shell(sh)的特点,并在功能上进行了扩展。这份2014年的...
标题"shell_config.rar_Linux shell_parsing shell_shell config_get_sh"暗示了我们要讨论的是如何使用Shell脚本来解析配置文件并获取其中的变量参数。这个过程在系统管理、应用程序自动化或者脚本编程中非常常见。 ...
本文将深入探讨标题"shell_ip_orangewgz_linux_shell_shell编程_shell脚本_"所提及的利用Shell编写判断IP地址合法性的脚本这一主题。我们将围绕Linux Shell、Shell脚本、shell编程以及如何在orangewgz Linux发行版上...
在Linux和Unix-like操作系统中,Bash Shell是默认的命令行解释器,它为用户提供了一个交互式的环境来执行命令、脚本和管理系统。Bash Shell高级编程涉及到一系列技巧和功能,可以帮助用户提高效率,实现自动化任务。...