SylixOS 常用shell指令(shell指令的用法)
25-02-26
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指令的用法) 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 我对如何使用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基本操作
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使用,希望对您有用。如果有疑问,可以联系我们。
1. 适用范围
SylixOS 是一款为大型嵌入式系统设计的硬实时系统,支持使用 system 调用执行命令. SylixOS 为了保证实时性在 system 的实现上和 Linux 有所差别,本文着重介绍 SylixOS 如何实现 system 和在使用 system 时必要注意的事项.
2. 原理介绍
SylixOS 为保证系统的实时性所以没有实现 fork 功效, Linux 下 system 是使用 fork 实现的.而 SylixOS 则通过使用内核的 shell 线程实现 system 功效.
2.1 Linux的 system功能浅析
Linux 下 system 会调用 fork 发生子进程,由子进程 execve 调用 /bin/sh-c string 来执行参数 string 字符串所代表的命令,此命令执行完后随即返回原调用的进程.
因为 Linux 下是通过 fork 实现 system ,所以被执行的命令继承父系的一些资源(比如文件描述符, 父系的工作路径等).同时能够实现异步执行和同步执行, 同步执行即父系等待 system 调用运行结束(包含 system 调用的命令执行结束);异步即不等待,父系继续运行.
2.2
SylixOS的 system原理先容
#include <stdlib.h>
int system ( constchar * command );
函数成功返回 0 ,失败返回 -1 ,并设置差错码.
SylixOS 的 system 是先创建一个内核的 shell 线程,然后通过内核的 shell 线程执行 system 必要执行的命令.
如果使用 system 调用执行一个进程,则同时启动一个内核线程来 join 等待清除该进程.如果使用 system 调用执行一个 shell 命令,则直接由内核线程 t_tshell 负责清除.如图 21 所示,由 open(pid=5) 调用 system 执行 hellow(pid=6) ,而内核创立一个 hellow(pid=0) 的内核线程 join 等待.
图 21 system挪用现象
2.3 SylixOS的 system功能
SylixOS 的 system 实现原理和 Linux 不同,功能上和 Linux 的基原形同.
1. SylixOS 实现 system 基础功能,挪用执行命令;
2. SylixOS 的 system 执行敕令可设置为同步执行和异步执行.
3. SylixOS 的 system 承继父系进程的工作空间;
4. SylixOS 中由 system 启动的进程承继内核线程的栈空间大小;
5.Linux 的 system 调用的三者有血缘关系,所以被 system 调用的进程继承父系的资源(包含文件描述符),而 SylixOS 的 system 调用的三者之间没有血缘关系,所以不能够继承父系的资源.所以 SylixOS 在使用 system 时需要注意,在技术实现章节会介绍如何实现 system 的这个功能.
3. 技术实现
在 移植 Linux 应用程序时,在某些特定的场景上 Linux 用户会在 A 进程通过 system 调用 B 进程,同时通过传参把一些文件描述符传递到 B 进程.因为 Linux 下 B 进程承继 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) /* 创立文件的权限 */
int main ( int argc , 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>
int main ( int argc , char ** argv )
{
int readfd ;
int writefd ;
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运行成果
遇到这种情况,可以通过使用 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)
/* 创立文件的权限 */
int main ( int argc , 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_t iPid ;
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教程,请查看站内专栏,如果有LINUX疑问,可以加QQ交流《LINUX教程:SylixOS 的system使用》。
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脚本? 的相关信息,请在本站寻找。