GVKun编程网logo

SylixOS 常用shell指令(shell指令的用法)

12

本篇文章给大家谈谈SylixOS常用shell指令,以及shell指令的用法的知识点,同时本文还将给你拓展java–使用SSH的ApacheFelixshell、Linux-常用shell简介及she

本篇文章给大家谈谈SylixOS 常用shell指令,以及shell指令的用法的知识点,同时本文还将给你拓展java – 使用SSH的Apache Felix shell、Linux-常用shell简介及shell基本操作、LINUX教程:SylixOS 的system使用、nixos – 如何为lua设置nix-shell脚本?等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

SylixOS 常用shell指令(shell指令的用法)

SylixOS 常用shell指令(shell指令的用法)

1. Shell指令介绍

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的指令并把它送入内核去执行。在SylixOS中提供了一份shell用户手册,但系统经过不断的发展和更新,产生了一些新的shell指令。下面将会给大家介绍两个新增的与网卡相关的shell指令。

2. 新增shell指令

2.1 printEn

格式1:printEn x(使能的网卡编号)c。

返回值:执行返回0。

说明:获取网卡基本信息,如图 2.1所示。在实际使用过程中可能会遇到比如校验和出错、没有打开零拷贝等状况导致程序运行较慢等问题,可以通过该指令查看当前使用网卡的基本信息来查找问题的本质原因。


图 2.1 获取网卡基本信息

如图 2.1所示,各参数所表示的情况如下所示:

adapter common info:适配器基本信息;

check_sum common info:校验和基本信息;

zero copy common info:零拷贝基本信息;

rx tx intr common info:输入输出中断基本信息;

rx common info:输入基本信息;

tx common info:输出基本信息;

在SylixOS中可通过ifconfig查看网卡的使能情况,如图 2.2所示。


图 2.2 查看网卡使能情况

格式2:printEn x(使能的网卡编号)r。

说明:获取网卡寄存器值,如图 2.3所示。在实际应用过程中可以通过相应寄存器的值来判断相应网卡的状态。


图 2.3 获取网卡寄存器值

3. 总结

在平时的设计开发过程中会遇到各种没有事先预料到的问题,巧妙地通过shell指令去发现并解决这些问题,可以大大提高项目开发的效率。

4. 参考资料

《SylixOS应用程序开发手册》

《RealEvo-IDE使用手册》

java – 使用SSH的Apache Felix shell

java – 使用SSH的Apache Felix shell

我对如何使用Apache Felix和SSH感兴趣?我想使用SSH从远程计算机访问Felix shell.我知道有一个telnet支持,但它太不安全了.有什么解决方案吗?

解决方法

是的,有一个,如 here所述(该指南相对于eclipse的昼夜平分点但无关紧要)使用 gogo shell,apache mina sshd服务器和三个 equinox console bundles(用于ssh身份验证的核心ssh插件jaas插件)的组合,您将能够连接到mina的ssh服务器,你的与Osgi相关的命令将由gogo shell执行.

你需要这些包:

> GoGo Shell:org.apache.Felix.gogo.command.jar,org.apache.Felix.gogo.runtime.jar,org.apache.Felix.gogo.shell.jar
> Equinox控制台捆绑包:org.eclipse.equinox.console.jar,org.eclipse.equinox.console.supportability.jar,org.eclipse.equinox.console.jaas.fragment.jar
> Apache Mina:org.apache.mina.core.jar,org.apache.sshd.core.jar
>并记录slf4j-api.jar和slf4j-api_impl.jar

如here所述,您还需要Felix配置文件中的这些属性:

osgi.console.enable.builtin=false 
osgi.console.ssh=<port> 
osgi.console.ssh.useDefaultSecureStorage=true

equinox JAAS包将搜索org.eclipse.equinox.console.authentication.config文件,该文件将启用登录模块:

equinox_console { 
    org.eclipse.equinox.console.jaas.SecureStorageLoginModule required; 
};

我不太确定在哪里使用Felix进行搜索(我不确定这是以标准的Osgi方式完成的),但conf目录是一个很好的猜测.

用户equinox / equinox已经存在,可以使用提供的控制台命令创建其他用户.

编辑:
对于equinox控制台/可支持性软件包,您可以获得Mars版本from here扩展附加软件包部分:

org.eclipse.equinox.console_1.1.100.v20141023-1406.jar

您还需要supportability bundle from here(最后一个版本是2011年).

Linux-常用shell简介及shell基本操作

Linux-常用shell简介及shell基本操作

1.查询shell环境变量,切换shell种类

分享图片

分享图片

?

表明目前使用的shell种类是bash。

要想改变shell种类,在终端输入想要运行的shell名称即可。在切换shell种类的过程中,可能会操作失败,这是因为ubuntu没有自带安装想要切换的shell种类。

分享图片

分享图片

?

2.shell命令的基本格式

shell的命令格式如下:

command -options [argument]

command:shell命令的名称。

-options:选项,同一个命令可能有很多不同的选项,用来完成不同的具体功能。

[argument]:参数,作为shell命令的输入,有的shell命令可以没有参数,或者不带参数运行。

例如:

分享图片

分享图片

?

ls  //查看当前目录下的文件及文件夹 ls -l  //查看当前目录下的文件及文件夹的详细信息 ls -l /home  //查看/home目录下的文件及文件夹的详细信息

分享图片

3.shell的常用特殊符号

(1)“*”

    是一个通用符号,可以表示任意一个字符(包括空字符)或多个字符组成的字符串。例如

ls -l /bin/e*  //查看/bin/目录下的所有以e开头的文件及文件夹的详细信息

分享图片

分享图片

分享图片

?

(2)“?”

    功能类似于“*”符号,但是只能表示单个字符,不能表示由多个字符组成的字符串。例如

ls -l /bin/e?  //查看/bin/目录下的所有以e开头的长度为2的文件及文件夹的详细信息

分享图片

分享图片

分享图片

?

(3)“[ ]”

指定范围,用来指定被显示的内容的范围。例如,在/home/leon目录下新建一个文件夹,名为test,在test文件夹下新建5个文件夹,名为a、b、c、d、e。

cd /home/leon/test  //进入到该目录下cd /home/leon/test  ls [a-c]  //仅查看名为a~c的文件及文件夹

分享图片

分享图片

分享图片

?

分享图片

分享图片

?

(4)“!”

      排除符号,用来指定被屏蔽显示内容的部分。需要与“ [ ]”符号联合使用。例如

ls [a-c] //仅查看名为a~c的文件及文件夹

分享图片

分享图片

?

LINUX教程:SylixOS 的system使用

LINUX教程:SylixOS 的system使用

《LINUX教程:SylixOS 的system使用》要点:
本文介绍了LINUX教程:SylixOS 的system使用,希望对您有用。如果有疑问,可以联系我们。

1. 适用范围

SylixOS是一款为大型嵌入式系统设计的硬实时系统,支持使用system调用执行命令.SylixOS为了保证实时性在system的实现上和Linux有所差别,本文着重介绍SylixOS如何实现system和在使用system时必要注意的事项.

2. 原理介绍

SylixOS为保证系统的实时性所以没有实现fork功效,Linuxsystem是使用fork实现的.而SylixOS则通过使用内核的shell线程实现system功效.

2.1      Linuxsystem功能浅析

Linuxsystem会调用fork发生子进程,由子进程execve调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程.

因为Linux下是通过fork实现system,所以被执行的命令继承父系的一些资源(比如文件描述符,父系的工作路径等).同时能够实现异步执行和同步执行,同步执行即父系等待system调用运行结束(包含system调用的命令执行结束);异步即不等待,父系继续运行.

2.2  SylixOSsystem原理先容

#include<stdlib.h>

intsystem(constchar  *command);

函数成功返回 0,失败返回-1,并设置差错码.

SylixOSsystem是先创建一个内核的shell线程,然后通过内核的shell线程执行system必要执行的命令.

如果使用system调用执行一个进程,则同时启动一个内核线程来join等待清除该进程.如果使用system调用执行一个shell命令,则直接由内核线程t_tshell负责清除.如图 21所示,由open(pid=5)调用system执行hellow(pid=6),而内核创立一个hellow(pid=0)的内核线程join等待.

LINUX教程:SylixOS 的system使用

                        图 21  system挪用现象

2.3      SylixOSsystem功能

SylixOS system实现原理和Linux不同,功能上和Linux的基原形同.

1. SylixOS实现system基础功能,挪用执行命令;

2. SylixOS system执行敕令可设置为同步执行和异步执行.

3. SylixOSsystem承继父系进程的工作空间;

4. SylixOS中由system启动的进程承继内核线程的栈空间大小;

5.Linuxsystem调用的三者有血缘关系,所以被system调用的进程继承父系的资源(包含文件描述符),而SylixOSsystem调用的三者之间没有血缘关系,所以不能够继承父系的资源.所以SylixOS在使用system时需要注意,在技术实现章节会介绍如何实现system的这个功能.

3. 技术实现

移植Linux应用程序时,在某些特定的场景上Linux用户会在A进程通过system调用B进程,同时通过传参把一些文件描述符传递到B进程.因为LinuxB进程承继A进程的文件描述符,所以B进程便能使用A进程的文件描述符进行操作.

使用场景如法式清单 31和法式清单 32所示.

法式清单 31  A进程代码

#include<stdio.h>

#include<stdlib.h>

 

#define PATH_LEN  20                                  /* 路径长度             */

#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) /* 创立文件的权限      */

 

intmain(intargc,char **argv)

{

    int  iFd1;

    int  iFd2;

    char  cBuf[PATH_LEN] = {0};

 

iFd1 = open("test1",O_CREAT | O_WRONLY,

                              FILE_MODE);      /* 打开文件                */

    iFd2 = open("test2",FILE_MODE);

 

    printf("open  readfd %d  writefd %d\n",iFd1,iFd2);

/*

* 构建system敕令字符串   

*/

sprintf(cBuf,"%s %d:%d","/apps/hellow/hellow",iFd2);

 

    system(cBuf);                                   /* 挪用system执行        */

 

    close(iFd1);

    close(iFd2);

    printf("after system!\n");

    return 0;

}

法式清单 32  B进程代码

#include<stdio.h>

intmain (intargc,char **argv)

{

    intreadfd;

    intwritefd;

 

    sscanf (argv[1],"%d:%d",&readfd,&writefd);    /* 解析参数,得到文件描述符      */

    printf("hellow readfd %d  writefd %d\n",readfd,writefd);

 

    if (!write(writefd,"SylixOS",sizeof("SylixOS"))) {

        perror("write");

        return -1;

    }

    return  (0);

}

SylixOS运行成果如所示,B进程没有继承A进程的文件描述符导致报错.

31  SylixOS运行成果

LINUX教程:SylixOS 的system使用

      遇到这种情况,可以通过使用posix_spawn来替换system.posix_spawn函数创建子进程并继承父系的文件描述符,所以可以通过posix_spawn替换system实现.如程序清单 33所示,只需修改A进程,B进程不消修改.

法式清单 33  A进程修改后源码

#include<stdio.h>

#include<stdlib.h>

#include<spawn.h>

 

#define PATH_LEN  20                                 /* 路径长度              */

#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) 

                                                      /* 创立文件的权限        */

 

intmain(intargc,char **argv)

{

    int  iFd1;

    int  iFd2;

    char  cBuf[PATH_LEN] = {0};

 

    iFd1 = open("test1",

                             FILE_MODE);           /* 打开文件            */

    iFd2 = open("test2",iFd2);

#ifndef SYLIXOS

/*

* 构建system敕令字符串   

*/

    sprintf(cBuf,"%s %d:%d","/apps/hellow/hellow",iFd1,iFd2);     

    system(cBuf);                            /* 挪用system执行              */

#else

    char  *pcArgv[5] = { "/apps/hellow/hellow",(char *)0 };

    int  iRet;

    pid_tiPid;

 

    sprintf(pcArgv[1],iFd2);  /* 构建system敕令字符串        */

    iRet = posix_spawn(&iPid,                 /*  启动过程                    */

                      "/apps/hellow/hellow",

                      NULL,

                      pcArgv,

                      NULL);

    if (iRet != 0) {

      close(iFd1);

      close(iFd2);

      return (-3);

    }

#endif

    waitpid(iPid,NULL,0);

    close(iFd1);

    close(iFd2);

    printf("after system!\n");

    return 0;

}

运行成果如图 32所示,运行正确.

32  修改后运行成果

LINUX教程:SylixOS 的system使用

本文永远更新链接地址

学习更多LINUX教程,请查看站内专栏,如果有LINUX疑问,可以加QQ交流《LINUX教程:SylixOS 的system使用》。

nixos – 如何为lua设置nix-shell脚本?

nixos – 如何为lua设置nix-shell脚本?

我正在尝试设置一个包含lua 5.2,lua套接字库和一些其他库的nix- shell脚本.但是,当我加载 shell时,只有Lua最终存在.
with import <nixpkgs> {};
stdenv.mkDerivation rec {
  name = "lua-env";
  buildInputs = [ lua52Packages.lua lua52Packages.luasocket lua52Packages.luasec lua52Packages.cjson ];
}

当我运行shell时,这就是我得到的:

savanni@lapis:~  $nix-shell lua.nix 

[nix-shell:~]$lua
Lua 5.2.3  copyright (C) 1994-2013 Lua.org,PUC-Rio
> require 'socket'
stdin:1: module 'socket' not found:
    no field package.preload['socket']
    no file '/usr/share/lua/5.2/socket.lua'
    no file '/usr/share/lua/5.2/socket/init.lua'
    no file '/usr/lib/lua/5.2/socket.lua'
    no file '/usr/lib/lua/5.2/socket/init.lua'
    no file './socket.lua'
    no file '/usr/lib/lua/5.2/socket.so'
    no file '/usr/lib/lua/5.2/loadall.so'
    no file './socket.so'
stack traceback:
    [C]: in function 'require'
    stdin:1: in main chunk
    [C]: in ?
> 

[nix-shell:~]$exit
savanni@lapis:~  $

解决方法

您必须设置LUA_PATH和LUA_CPATH

这个shell.nix应该可以工作,

with import <nixpkgs> {};
with luaPackages;

let
  libs = [lua cjson luasocket luasec];
in
stdenv.mkDerivation rec {
  name = "lua-env";
  buildInputs = libs;

  shellHook = ''
    export LUA_CPATH="${lib.concatStringsSep ";" (map getLuaCPath libs)}"
    export LUA_PATH="${lib.concatStringsSep ";" (map getLuaPath libs)}"
  '';
}

要检查这些路径是否已导出,

$nix-shell --run 'echo $LUA_CPATH; echo $LUA_PATH'
/nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/lib/lua/5.2/?.so;/nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/share/lua/5.2/?.so;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/lib/lua/5.2/?.so;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/share/lua/5.2/?.so;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/lib/lua/5.2/?.so;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/share/lua/5.2/?.so;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/lib/lua/5.2/?.so;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/share/lua/5.2/?.so
/nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/lib/lua/5.2/?.lua;/nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/share/lua/5.2/?.lua;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/lib/lua/5.2/?.lua;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/share/lua/5.2/?.lua;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/lib/lua/5.2/?.lua;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/share/lua/5.2/?.lua;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/lib/lua/5.2/?.lua;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/share/lua/5.2/?.lua

关于SylixOS 常用shell指令shell指令的用法的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于java – 使用SSH的Apache Felix shell、Linux-常用shell简介及shell基本操作、LINUX教程:SylixOS 的system使用、nixos – 如何为lua设置nix-shell脚本?的相关信息,请在本站寻找。

本文标签:

上一篇Ubuntu-docker 环境 + docker compose 安装(国内镜像)(docker安装ubuntu镜像 图形界面)

下一篇init.rc启动 shell脚本(init.rc执行shell)