天天看點

SylixOS Shell使用

什麼是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指令的介紹
free		檢視系統目前記憶體資訊
echo		回顯指令,此指令将回顯使用者輸入的參數
ts		檢視系統中線程資訊
tp		檢視系統中被阻塞的線程資訊
ss		檢視系統中所有線程與中斷系統堆棧使用情況
ps		檢視系統所有程序的資訊
ints		檢視系統中斷向量表資訊
mems		檢視作業系統核心記憶體堆與系統記憶體堆記憶體使用情況
zones		檢視作業系統實體頁面分區使用情況
env		檢視作業系統全局環境變量表
varsave		儲存目前的作業系統環境變量表。預設儲存路徑為/etc/profile
varload		從指定參數的檔案中提取裝載環境變量表,預設則從/etc/profile中提取
vardel		删除一個指定的系統環境變量
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。