Shell使用指南
来自SylixOS-wiki
目录 |
什么是Shell
- Shell是操作系统“外壳”程序,它向使用者提供一个基于命令行类型的使用界面,也可称作命令解析器,系统开发人员常使用此接口来操作计算机。几乎所有的操作系统都包含shell程序,例如Linux系统中较为常见的shell是bash程序,Windows系统中的shell程序是cmd.exe。SylixOS也不例外,SylixOS也包含自己的shell程序:ttinyShell,ttinyShell程序是系统开发人员操作SylixOS操作系统最为简单与便捷的接口,它与Linux系统shell规则非常相似,而最大的区别是ttinyShell运行在内核空间,它不是一个应用程序,所以ttinyShell不仅可以运行应用程序,而且内部内建了很多已经固化在SylixOS内核里的常用命令,ttinyShell程序运行界面如下图所示。
常用shell命令说明
- 本节将简要介绍部分常用的ttinyShell内建的命令,他们分为系统命令、文件命令、网络命令、时间命令、动态装载命令、其他命令这几部分,详细说明请使用help [keyword]在系统上查看。由于内核版本与裁剪配置不同,所以ttinyShell内建的命令在不同版本不同配置的SylixOS系统上可能会有些许区别。
系统命令
命令名 简要说明 help 显示ttinyShell所有内建命令列表,如果带有参数,则可显示以参数为名的命令介绍,例如help ls将介绍ls命令的介绍 echo 回显命令,此命令将回显用户输入的参数 ts 查看系统中线程信息 tp 查看系统中被阻塞的线程信息 ss 查看系统中所有线程与中断系统堆栈使用情况 ps 查看系统所有进程的信息 ints 查看系统中断向量表信息 mems 查看操作系统内核内存堆与系统内存堆内存使用情况 zones 查看操作系统物理页面分区使用情况 env 查看操作系统全局环境变量表 varsave 保存当前的操作系统环境变量表。默认保存路径为/etc/profile varload 从指定参数的文件中提取装载环境变量表,默认则从/etc/profile中提取 cpuus 测算当前cpu利用率 kill 向指定的线程或进程发送信号,默认发送SIGKILL信号 drvlics 显示系统中所有安装的驱动程序表 devs 显示系统中挂载的所有设备 buss 显示系统中挂载的所有总线信息 tty 显示当前shell终端对应的tty文件 clear 清除当前屏幕 aborts 显示当前操作系统异常处理统计信息 sprio 设置指定线程的优先级 renice 设置指定进程的优先级 hostname 显示或设置当前SylixOS镜像主机名 login 切换用户,重新登录 who 查看当前登录用户身份 shutdown 关闭或重启系统 monitor 启动、关闭或设置内核跟踪器 lspci 打印系统PCI总线与PCI设备相关信息 lsusb 打印系统USB总线与USB设备相关信息 which 检查参数指定的文件位置 exit 退出当前shell终端
文件命令
命令名 简要说明 ls 列出指定目录下的文件,默认为当前目录 ll 列出指定目录下的文件详细信息,默认为当前目录 files 列出系统内核中打开的文件信息(不包含进程打开的文件) fdentrys 列出操作系统所有正在操作的文件信息(包含进程打开的文件) sync 将所有系统缓存的文件、设备、磁盘信息全部写入到相应的物理设备中 logfileadd 向内核日志打印函数加入指定的内核文件描述符 logfileclear 从内核日志打印文件表中清除指定的内核文件描述符 logfiles 显示内核日志打印文件列表 loglevel 显示或设置当前内核日志打印等级 cd 切换当前目录 pwd 查看当前工作目 df 查看指定目录的文件系统信息,默认为当前目录 tmpname 获得一个可以创建的临时文件名 mkdir 创建一个目录 mkfifo 创建一个命名管道,注意:只能在根文件系统设备下创建 rmdir 删除一个目录 rm 删除一个文件 mv 移动或重命名一个文件 cat 查看一个文件的内容 cp 拷贝一个文件 cmp 比较一个文件 dsize 计算一个指定的目录包含的所有文件信息 chmod 设置文件或目录的权限位 mkfs 格式化指定的磁盘 shfile 执行指定的shell脚本 mount 挂载一个卷 umount 卸载一个卷 showmount 查看系统中所有已经挂载的卷 ln 创建符号链接文件 dosfslabel 查看fat文件系统卷标 fatugid 设置fat文件系统用户与组id mmaps 显示系统mmap信息
网络命令
命令名 简要说明 route 添加、删除、修改或查看系统路由表 netstat 查看网络状态 ifconfig 配置网络接口信息 ifup 使能一个网络接口 ifdown 禁能一个网络接口 ifrouter 设置默认路由接口 arp 添加、删除或查看ARP表 ping Ping命令 ping6 IPv6 Ping命令 tftpdpath 查看或设置tftp服务器本地路径 tftp 使用tftp命令接收或者发送一个文件 ftpds 显示ftp服务器信息 ftpdpath 查看或设置ftp服务器初始化路径 nat 启动、关闭或设置NAT虚拟网络地址服务 nats 查看当前NAT虚拟地址服务状态 npfs 查看网络数据包过滤器状态 npfruleadd 添加一条网络数据包滤波器规则 npfruledel 删除一条网络数据包过滤器规则 npfattach 在指定网络接口上使能网络数据包过滤器 npfdetach 在指定网络接口上禁能网络数据包过滤器
时间命令
命令名 简要说明 date 显示或设置系统时间 hwclock 显示或同步操作系统与硬件RTC时钟
动态装载命令
命令名 简要说明 debug 调试一个进程 dlconfig 配置动态链接器工作参数 modulereg 注册一个内核模块 moduleunreg 卸载一个内核模块 modulestat 查看一个内核模块或动态链接库文件信息 lsmod 查看系统装载的所有内核模块信息 modules 查看系统装载的所有内核模块与进程动态链接库信息
其他命令
命令名 简要说明 shstack 显示或者设置shell任务堆栈大小,设置仅对之后启动的shell有效 leakchkstart 启动系统内存泄露跟踪器 leakchkstop 关闭系统内存泄露跟踪器 leakchk 内存泄露检查 xmodems 使用xmodem协议发送一个文件 xmodemr 使用xmodem协议接收一个文件 untar 解包或解压缩一个tar或tar.gz文件包 gzip 压缩或解压缩一个文件 vi 启动vi编辑器
环境变量
- 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序将使用到的信息,一般用来指定操作系统或者应用程序运行环境的一些参数,比如临时文件夹位置和应用程序搜索位置等。通常环境变量的配置保存在/etc/profile文件中。
- shell环境中保存了一份完整的环境变量定义表,系统启动时BSP会自动将此文件对环境变量的定义导入到shell环境中,用户可以使用env命令查看系统所有环境变量设置。当启动一个应用程序时,此份环境变量会导入到应用程序进程中(同时创建几个标示应用程序参数的环境变量,如HOME等)。
- 环境变量相当于给系统或用户应用程序设置的一些参数, 具体起什么作用这当然和具体的环境变量相关。SylixOS常用的环境变量如下表所示。
环境变量名 简要说明 XINPUT_PRIO xinput子系统优先级 LANG 语言选择 LD_LIBRARY_PATH 动态装载器搜索路径 PATH 应用程序搜索路径 NFS_CLIENT_PROTO NFS客户端协议 NFS_CLIENT_AUTH NFS登录验证模式 SYSLOGD_HOST syslogd远程地址 SO_MEM_PAGES 应用程序内存堆初始占用页面个数 TSLIB_TSDEVICE 触摸屏设备 MOUSE xinput子系统侦测鼠标设备集 KEYBOARD xinput子系统侦测键盘设备集 TZ 系统所在时区 TMPDIR 临时文件夹
- 用户同样可以在命令行中引用环境变量的值,引用格式为${VAR_NAME}。遇到此参数时ttinyShell会自动使用环境变量的内容来替代此${VAR_NAME}。例如:ttinyShell执行echo ${PATH}命令,系统将会回显PATH环境变量的内容。
根文件系统
- SylixOS启动后自动挂载的第一个文件系统称为根文件系统,这里不同于Linux系统,SylixOS根文件系统是一个虚拟文件系统,掉电后不会保存对此文件系统的修改,所以SylixOS可以工作在没有非易失性存储器(通常为硬盘或其他磁盘存储器)的机器上。在此文件系统上,SylixOS会自动建立dev与mnt目录,其他标准目录则需要BSP在初始化阶段做挂载或者符号链接。
- SylixOS使用的标准目录结构如下表所示。
目录名 简要说明 qt Qt动态链接库与其他资源目录 tmp 临时目录 var 储存各种变化的文件目录,例如日志、缓冲文件等 root root用户主目录 home 其他应用主目录 apps 应用程序目录 sbin 系统程序目录 bin 普通shell程序目录 usr 用户程序库与环境目录 lib 系统程序库与环境目录 etc 系统或其他应用程序配置文件目录 boot 操作系统启动镜像目录 usb USB大容量设备独立挂载目录 proc 系统内核信息文件目录 mnt 动态文件系统挂载目录 dev 系统设备文件目录
运行应用程序
- ttinyShell不仅可以运行内建的命令,而且还能运行用户应用程序。运行应用程序的方法与运行内建命令相同,当用户在shell界面下键入命令名称与参数点击回车后,ttinyShell将首先检测此命令是否为用户应用程序,如果是则优先运行用户应用程序,如果不是则再检测命令是否为内建命令,如果均不是则ttinyShell打印错误信息。
- ttinyShell命令检测顺序如下所示:
1.检测命令是否为一个文件路径,如果文件存在,则运行指定的应用程序。 2.检测PATH环境变量指定的路径,如果文件存在,则运行指定的应用程序。 3.检测命令是否为一个内建命令,如果是内建命令,则运行内建命令。
- ttinyShell运行内建命令或应用程序时有两种方式:同步方式和异步方式。
- 同步方式:inyShell运行内建命令时命令代码默认在ttinyShell线程上下文中执行,运行应用程序时ttinyShell会创建一个进程并在此进程中装入应用程序代码执行,同时ttinyShell自行阻塞并等待进程结束后恢复执行。
- 异步方式:当用户在键入的命令之后加入&符号,ttinyShell将以异步方式运行命令,当ttinyShell运行内建命令时,会创建一个内核线程运行命令代码,运行应用程序时ttinyShell会创建一个进程并在此进程中装入应用程序代码执行,与同步方式不同ttinyShell并不等待命令执行完毕就立即准备接收用户的下一条命令。
I/O重定向
- 每一个应用程序都有三个标准文件描述符(具体说明请查阅I/O系统一章):0、1、2。其中0代表标准输入,即scanf、getc等函数读取的文件;1代表标准输出,即printf、putc等函数写入的文件;2代表标准错误,即strerror等函数写入文件。
- 默认状态下ttinyShell将使用当前终端设备作为标准文件,ttinyShell创建出的进程将继承ttinyShell标准文件设置。当然用户也可以自行设置命令的标准文件,当命令字串后存在I/O重定向参数,则ttinyShell会分析重定向表达式然后设置应用新的标准文件描述符。设置方法如下:
1.需要将标准输出定义到file_path文件,则命令最后可添加参数:1>file_path。如需追加写入某个文件,则可使用:1>>file_path。定义标准错误文件的方法与标准输出文件类似,例如:2>file_path。注意:重定位符号>或<左右没有空格。 2.需要将标准输入定义到某文件,则命令最后可添加参数:0<file_path。