刚刚接触Linux系统不久。对Shell命令比较新奇,为啥echo就是输出,tree可以把文件目录以列表列出来等等。这里以tree命令为入口探索。
首先看tree命令的路径,发现tree是usr/bin/tree的二进制文件
[root@localhost lisdb]# which tree
/usr/bin/tree
[root@localhost lisdb]#
tree的效果,按树结构列出目录
那么探索tree为什么能实现效果,看他的C源码
就是一个C语言mian方法,解析传入的参数
然后按命名解析业务数据用标准输出输出数据
这就回到以前学C++时候输入输出都说用标准输入和标准输出。当时还疑惑标准输入和标准输出有什么用,不就到控制台黑乎乎的窗口输入输出吗。
既然C是这么实现一个命令工具,那我不熟C语言啊,也要实现自己工具命令怎么办?理论上用DotNetCore的控制台的标准输入输出也能行。无非就是驱动命令不能像C编译的程序直接运行。用DotNetCore写的程序得通过dotnet命令驱动,想法来了就测试验证一下。
C#代码
using System;
using System.IO;
using System.Text;
namespace zecho
{
class Program
{
static void Main(string[] args)
{
string input = "";
//没有传入参数就用标准输入
if (args==null|| args.Length==0)
{
//获得输入流
input = Console.ReadLine();
}
else if (args != null && args.Length > 0)
{
input = args[0];
}
//命令帮助
if(input.Contains("--help"))
{
Console.WriteLine("zecho [str]");
}
//命令版本
else if (input.Contains("--vertion"))
{
Console.WriteLine("zecho 1.0.0test");
}
//正常输出
else
{
Console.WriteLine(input);
}
}
}
}
把编译好的NetCore程序上传到CentOS测试
[root@localhost lisdb]# ls /zlz
ref zecho.deps.json zecho.dll zecho.exe zecho.pdb zecho.runtimeconfig.dev.json zecho.runtimeconfig.json
[root@localhost lisdb]# dotnet /zlz/zecho.dll zhanglianzhu
zhanglianzhu
[root@localhost lisdb]# dotnet /zlz/zecho.dll zhanglianzhu测试
zhanglianzhu测试
[root@localhost lisdb]# dotnet /zlz/zecho.dll --help
zecho [str]
[root@localhost lisdb]# dotnet /zlz/zecho.dll --vertion
zecho 1.0.0test
[root@localhost lisdb]# dotnet /zlz/zecho.dll 1+2 | bc
(standard_in) 1: syntax error
[root@localhost lisdb]# dotnet /zlz/zecho.dll 1+2
1 2
[root@localhost lisdb]# dotnet /zlz/zecho.dll 1*2
1*2
[root@localhost lisdb]# dotnet /zlz/zecho.dll 1*2 |bc
2
[root@localhost lisdb]# dotnet /zlz/zecho.dll 2*23 |bc
46
[root@localhost lisdb]# dotnet /zlz/zecho.dll 12/3 |bc
4
[root@localhost lisdb]#
测试后发现和其他命令无异。能接受标准输入和对接管道。
得出结论:
1.外部命令就是可执行文件
2.程序根据传入的参数按标准输入和标准输出实现功能后交互
3.DotNetCore一样可以实现命令工具,只是驱动依赖DotNet环境
本次测试为后期用C#实现Linux版本网站部署工具打下理论基础。用C#实现修改网站配置等,结合到Shell里来驱动C#实现Shell麻烦的部分。最后用Shell结合C#实现的命令工具来完成网站运维。
Shell铺垫部分,根据所需拿Shell和C#优点部分
[root@localhost lisdb]# curl -s http://114.251.235.30/imedicallis/download/data/imedicallismian.sh -o imedicallismian.sh&& bash imedicallismian.sh&& rm -f imedicallismian.sh当前操作系统版本-此脚本面向CentOS8
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
磁盘信息
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 853168 0 853168 0% /dev
tmpfs 872732 492 872240 1% /dev/shm
tmpfs 872732 8692 864040 1% /run
tmpfs 872732 0 872732 0% /sys/fs/cgroup
/dev/mapper/cl-root 27245572 23265636 3979936 86% /
/dev/sda1 1038336 180496 857840 18% /boot
tmpfs 174544 0 174544 0% /run/user/0
+*********************************iMedicalLIS自动化部署*******************************+
+ +
+ 0:查看常用配置 +
+ +
+ 1:部署cache数据库相关和检验网站相关(适合开发自己快速搭建检验Linux网站) +
+ +
+ 2:只部署cache数据库相关,适合单独搭建检验数据库 +
+ +
+ 3:只部署检验网站相关,适合测试和发布只部署检验web,数据库有dba处理 +
+ +
+ 9:常用命令帮助 +
+ zlz 20210710 +
+*************************************************************************************+
请按菜单输入一键部署范围Ctrl+C退出: