# Linux ###### tags: `程式` `programming` `coprocessor` `視覺` `vision` [toc] --- # 為什麼要用Linux? FRC控制機器的主控電腦是roboRIO,用它來執行Java/C++/LabVIEW程式,可以收到透過wifi傳來的Driver Station的搖桿訊號,並透過CAN bus送出訊號給馬達控制器完成機器人操控,也提供其他如DIO、PWM、I2C等等接口可以連接其他感測器和USB攝影機。但是如果想要加裝更多攝影機或者處理視覺辨識之類計算量比較大的用途時,roboRIO的運算能力實在太弱,這時候就需要在車上加裝另一塊co-processor(輔助處理器)處理視覺辨識,再將計算結果傳回roboRIO控制機器或者傳到Driver Station給Driver人工判讀。 FRC隊伍常用的co-processor有兩種:raspberry pi系列或nvidia Jetson系列,這些硬體都是使用ARM架構的CPU,無法在上面運行Windows作業系統,能搭配這些硬體的作業系統就是用Linux,而且有很多較專業的程式都是在Linux環境中開發的。所以要在FRC比賽中使用到co-processor,就必須要先會使用Linux系統! --- # Linux - 一種作業系統核心 請參閱這篇文章: [Linux是什麼?從網站開發到物聯網無所不在的OS作業系統介紹。](https://progressbar.tw/posts/113) TL;DR: 一套完整的作業系統會包含很多附屬應用程式,例如一個完整的windows裡面會內建記事本、小畫家、檔案總管、~~IE瀏覽器~~、Windows Update等等,但這些都不是作業系統最主要的功能。作業系統本人要處理的事情例如多人多工的CPU排程、記憶體分配、檔案系統等等,Linux做為一個作業系統核心,就只負責這些事,其他的附屬功能就隨意你要搭配什麼都可以裝。 --- # ubuntu - 一套完整的作業系統 ubuntu是Linux的一個Distribution(發行版本),白話講就是使用Linux核心的一套完整作業系統,而它的最大特色就是它的套件管理程式[APT](#apt)以及Ubuntu的套件庫。 ## ubuntu的版本號 就像Windows有Windows 7, Windows 8, Windows 10以及10裡面陸陸續續的小改版,MacOS也有10.x的更新版一直進步,Ubuntu也是一直不斷有更新版本出現。 Ubuntu的版本固定每半年推出一版,每個版本號是由推出的年份及月份構成,並且還會搭配一組依照字母順序挑選的單字作為codename,例如20.10版的codename是`Groovy Gorilla`,而它的下一版21.04版就取H開頭的字`Hirsute Hippo`當名字。 詳盡版本列表請參閱 [官方網頁](https://wiki.ubuntu.com/Releases) 或 [維基百科](https://zh.wikipedia.org/wiki/Ubuntu%E5%8F%91%E8%A1%8C%E7%89%88%E5%88%97%E8%A1%A8)。 Ubuntu的大部分版本推出之後,生命週期是九個月,在這個期間內Ubuntu套件庫會不斷更新各個程式的最新版本供大家下載,當這個版本End Of Life之後就不會再為它準備更新檔,甚至不保證套件庫的檔案可以被下載,有些太久的是會砍檔的。 九個月的支援週期其實太短很不方便,所以Ubuntu每隔兩年會推出一個LTS(Long Term Support)長期支援版,它的生命週期就會到5年,例如現在還沒退休的有`16.04 LTS`、`18.04 LTS`、`20.04 LTS`,所以如果沒有特殊的考量,就推薦從LTS版本裡面去挑,而不是去追最新版`21.04`,這樣就不用每隔九個月就發現很多東西載不到必須要大更新甚至重灌系統了。 ## ubuntu的flavor(衍生版本) 前面說過Linux可以搭配不同的附屬應用程式形成一個完整個作業系統,其中有一大類的附屬程式就是圖形化桌面環境以及它的小工具,在Ubuntu官方的套件庫裡面就提供了不只一種桌面環境可以任君選擇。而且因為這些不同的桌面環境都同時存在同一個官方套件庫裡面,所以你在選了其中一種flavor安裝完系統之後,如果後悔了也可以改安裝另一套桌面環境,甚至兩個以上的桌面環境也可以並存,在開機登入的時候選擇你今天想要用哪一種桌面環境! 我個人比較推薦的flavor有這些: * Ubuntu - 官方預設值,使用Gnome 3桌面系統 * Ubuntu MATE - 使用MATE桌面系統,它是由已經被淘汰的Gnome2系統的非官方延續,適合硬體效能較差的電腦 * Lubuntu - 使用LXQt桌面系統,設計理念就是做出light-weight輕量級的系統 * Ubuntu server版 - 不含桌面系統,直接使用命令列及遠端登入操作,也可以事後安裝`ubuntu-desktop`或`ubuntu-mate-desktop`變身為Ubuntu desktop或Ubuntu MATE等等 詳細列表可參考[官方](https://wiki.ubuntu.com/UbuntuFlavors) # 取得及安裝ubuntu的方式 這個部分操作的細節太瑣碎了,請選好要哪個方法之後自己去查具體作法~ * 虛擬機器 - vmware player / virtualbox / hyper-V 相對方便,但效能較差 * 半虛擬 - WSL1 / WSL2 Windows提供的Linux核心配上Ubuntu檔案系統,效能較佳但是沒有圖形化介面 * 原生OS - live USB 使用`rufus`或`UNetbootin`等等工具將官方載到的光碟映像檔轉存到USB隨身碟,然後設定電腦的BIOS/UEFI從USB裝置開機。用USB開機對系統的修改不會存回USB內,下次開機時又是全新的系統,所以編輯過的檔案需要掛載硬碟分割區另外存放或者存到網路上,如果是需要費時安裝環境的操作就不建議使用live USB。 * 原生OS - 安裝到硬碟 使用liveUSB開機之後,執行Ubuntu安裝程式,可重新分割硬碟讓兩個系統並存。 或者直接使用樹莓派練習。 :::danger :exclamation: 安裝過程有可能造成硬碟原有檔案損壞,請先備份重要資料 ::: # 目錄結構 在Linux的世界裡面並沒有C槽、D槽的概念,所有檔案都是從同一個樹根(root)`/`開始的。`/`本身也是一個磁碟分割區,由開機程式指定要用哪個分割區當作`/`,而其他的分割區要用的時候是掛載(mount)在這個目錄樹底下的其中一個空目錄的位置。 :::info 在Linux的目錄連接符號是使用斜線`/`,例如`/home/ubuntu` 而Windows中使用的是反斜線`\`,例如`C:\Users\user` 兩者是不同的 ::: :::warning Windows的檔案系統繼承DOS時的習慣,將大小寫的變化視為同一個檔名,例如同一個目錄下不能同時存在`abc.jpg`和`Abc.jpg` 但是在Linux系統裡,大寫和小寫是完全不同的東西,所`abc.jpg`和`Abc.jpg`是可以同時存在的 ::: :::info Linux中如果檔名是以`.`點開頭,它就是個隱藏檔,預設是不會顯示出來的 ::: 比較重要或常用到的目錄介紹: * /home - 每個使用者的家目錄放在這個底下 例如有個使用者叫`ubuntu`,那就會開個`/home/ubuntu`作為他的家目錄;而另一個使用者`Alice`的家目錄就會是`/home/Alice` * /etc - 系統的設定檔會放在這裡 * /bin - 二進位檔,也就是執行檔,系統提供的指令及程式大部分會放這裡 * /media - 外接磁碟通常會在這裡創建目錄然後掛載在這底下 * /dev - 硬體裝置,在Linux裡面把所有對硬體的操作都用一個/dev下的檔案去對應,例如視訊鏡頭可能是`/dev/video0`、序列埠可能是`/dev/ttyUSB0`、甚至你要對硬碟分割區做操作的話它可能會叫`/dev/sda*` * /tmp - 暫存目錄,放在這裡的檔案實際上並沒有被存進硬碟,它們只活在RAM裡面而已。為了讓每個使用者執行的程式都可以讀寫暫存檔,這裡是少數開放給所有人都有權限讀寫的目錄。 ## 相對路徑 每個程式執行時都會有一個參數叫工作目錄(Current Working Directory)。當程式要存取檔案時,如果檔案路徑的開頭是`/`,也就是由整個檔案系統的樹根開始指定路徑,這種稱為`絕對路徑`。否則的話系統就會由這次執行的工作目錄開始找檔案,這就叫做`相對路徑`。 每個使用者剛登入的時候,工作目錄預設會是他的家目錄,例如使用者Alice執行一個程式要存取檔案`test/result.txt`,因為檔案路徑不是`/`開頭,它就會由Alice的家目錄出發,去找`/home/Alice/test/result.txt`。而如果登入之後有變更目錄`cd`過,例如cd到`new`,這時候工作目錄就到了`/home/Alice/new`,如果再執行同樣的程式同樣去存取`test/result.txt`,它就會改成去找`/home/Alice/new/test/result.txt`了。 使用相對路徑的時候,如果想要進到下一層目錄就直接寫出子目錄的名稱(廢話),但是如果要退到上一層的目錄,可以使用兩個點`..`,例如在`/home/Alice/test`的時候`cd ..`就會回到`/home/Alice`,而如果工作目錄是`/home/Alice/new`時去存取`../test/result.txt`,就相當於去存取`/home/Alice/new/../test/result.txt`,也就等於`/home/Alice/test/result.txt`。 # terminal ## 常用基本指令 # apt # 執行python script ## python ## shebang ### permission ## ctrl-C
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up