Linux命令新理解

刚刚接触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退出:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乌鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值