第 02 章 - 樹莓派系統操作與設定
上次更新日期 2022/09/16
樹莓派其實就是個小型主機,裡面有個 Linux 作業系統,相關的動作都是 Linux 指令啊! 因為樹莓派的硬體資源不是太好,所以,老是啟用圖形界面是不太妥當的!因此,需要有些額外的設定, 讓系統進入變成文字界面,之後再來慢慢調整。沒有要大家學太多 Linux 指令,但是基礎的,還是得要知道才行!
學習目標:
- 設定 ~/.bashrc 的內容
- 了解 sudo 的操作
- 建立一般帳號
- 使用文字界面 raspi-config 進行樹莓派設定
- 查看與修改系統時間及網路自動校時
- 軟體的查詢、安裝
- 使用 vim 取代 nano 編輯器 (update-alternatives...)
- 2.1: 建立基本操作環境 ~/.bashrc
- 2.2: 了解 sudo 的指令用法與建立用戶
- 2.3: 使用 raspi-config 設定系統 - SSH
- 2.4: 進行時間校正
- 2.5: 軟體安裝與查詢
- 2.6: 簡易的 vim 編輯器
- 2.7: 當週實做
2.1: 建立基本操作環境 ~/.bashrc
既然是指令列模式,所以,需要了解一下指令下達的方式:
rasppi@raspberrypi:~ $ 指令 [-選項] [參數] rasppi@raspberrypi:~ $ ls -l /home 總用量 4 drwxr-xr-x 18 rasppi rasppi 4096 9月 15 14:05 rasppi
一串指令裡面,通常用空白鍵隔開,最前面一定是指令,後面如果開頭是減號或兩個減號,就是選項部份,如果沒有帶減號, 通常就是指令的參數,或者是選項的參數。上面的 ls 指令功能是『看檔名』,而 -l 是長串列出, /home 則是查看家目錄位置。
- 通用指令查詢方式 --help
一般來說,如果你想要知道某個指令的用法,只要輸入『 指令 --help 』就可以看到指令用法!相當簡單,例如上面談到的 ls 這個指令:
rasppi@raspberrypi:~ $ ls --help 用法:ls [選項]... [檔案]... 列出指定檔案(預設為目前目錄)的訊息。 如果不指定 -cftuvSUX 中任意一個或--sort 選項,則根據字母大小排序。 必要參數對長短選項皆適用。 -a, --all 不隱藏任何以 . 開始的項目 -A, --almost-all 列出除 . 及 .. 以外的任何項目 --author 與 -l 同時使用時,列出每個檔案的作者 -b, --escape 以 C 風格的跳脫序列表示不可列印的字元 .... -l 使用較長格式列出訊息 ....
- 列出 free 的相關用法,找到上週的 -m 是什麼意思?另外 -h 又是什麼意思?
- 列出 date 的相關用法,並嘗試找出 date +%Y-%m-%d 的意義為何?
- 承上,嘗試找出 date +%x' '%X 的意義為何?
- 使用命令別名建立 ll 等別名指令
如果慣用 RHEL 相關產品的用戶來說,樹莓派沒有 ll 真的很討厭!那可以加入 ll 嘛?可以的,那就是 alias 的功能! 直接透過編輯 ~/.bashrc 即可!
rasppi@raspberrypi:~ $ alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias ls='ls --color=auto' rasppi@raspberrypi:~ $ nano ~/.bashrc # 大概在 90 行附近 alias ll='ls -l' alias rm='rm -i' alias mv='mv =i' # 按下 [ctrl]-x 就可以儲存退出 rasppi@raspberrypi:~ $ source ~/.bashrc rasppi@raspberrypi:~ $ ll 總用量 80 drwxr-xr-x 2 rasppi rasppi 4096 9月 7 05:43 Bookshelf drwxr-xr-x 2 rasppi rasppi 4096 9月 15 10:49 Desktop -rw-r--r-- 1 rasppi rasppi 39056 9月 15 14:50 raspinfo.txt -rw-r--r-- 1 rasppi rasppi 372 9月 15 11:03 rpdiags.txt drwxr-xr-x 2 rasppi rasppi 4096 9月 15 10:49 下載 ....
若還有其他需求,就自行加入相關的 bash 功能吧!
2.2: 了解 sudo 的指令用法與建立用戶
登入樹莓派的時候,預設的帳號就是第一次使用樹莓派時,所建立的用戶就是了。問題是,那個帳號並不是系統管理員, 系統管理員的帳號名稱只能是『 root 』我們沒有這個帳號的密碼。
不過不要緊,當初建立一般帳號時,由於有給 sudo 這個群組,因此我們可以透過『 sudo 指令』來操作指令, sudo 後面接的指令,就可以使用 root 的身份來處理。讓我們來查詢看看:
rasppi@raspberrypi:~ $ whoami rasppi rasppi@raspberrypi:~ $ sudo whoami root
whoami 就如同字面的意思,系統會告訴你目前身份是誰。當我們使用 sudo 在前面時,就可以發現身份變成 root 了! 讓我們測試一下,一般用戶建立其他帳號是怎麼回事?
rasppi@raspberrypi:~ $ useradd -G sudo user1
useradd: Permission denied.
useradd:無法鎖定 /etc/passwd;請稍候再試。
系統會告知你,其實是無法執行的 (Permission denied)。那如果在前面加上 sudo 呢?
rasppi@raspberrypi:~ $ sudo useradd -G sudo user1 rasppi@raspberrypi:~ $ id user1 使用者id=1001(user1) id群組=1001(user1) 組=1001(user1),27(sudo)
這個帳號就建立了。但是,預設的情況下,這個帳號不會有家目錄!所以,建立帳號時,還是得要額外增加一些參數才行! 可以這樣做看看:
rasppi@raspberrypi:~ $ sudo useradd -G sudo -m user2 rasppi@raspberrypi:~ $ id user2 使用者id=1002(user2) id群組=1002(user2) 組=1002(user2),27(sudo) rasppi@raspberrypi:~ $ ll /home drwxr-xr-x 18 rasppi rasppi 4096 9月 15 15:04 rasppi drwxr-xr-x 2 user2 user2 4096 9月 15 15:26 user2
你會發現到家了 -m 的參數後,使用者的家目錄才會建立起來!否則就會失敗啦!那登入時,還需要密碼,設定密碼的方式為:
rasppi@raspberrypi:~ $ sudo passwd user1
新 密碼:
再次輸入新的 密碼:
passwd:密碼成功變更
密碼得要重複輸入兩次才會成功!最終看到變更成功,才是真的有該密碼的存在喔!那剛剛兩個帳號建立後,想說只是測試用, 所以要刪除了,該如何處理?可以用 userdel -r 來處理!
rasppi@raspberrypi:~ $ sudo userdel -r user1 userdel:找不到 user1 mail spool (/var/mail/user1) userdel:找不到 user1 的家目錄 (/home/user1) rasppi@raspberrypi:~ $ sudo userdel -r user2 userdel:找不到 user2 mail spool (/var/mail/user2) rasppi@raspberrypi:~ $ id user1 id: 「user1」:無此使用者 rasppi@raspberrypi:~ $ id user2 id: 「user2」:無此使用者
- 建立組員的帳號,要注意,組員必須要有家目錄才行
- 設計組員的密碼,讓組員自己輸入密碼 (記得密碼長度要夠!至少 8 個字元!可以用身份證)
2.3: 使用 raspi-config 設定系統 - SSH
除了直接使用 systemctl 來控制系統服務之外,樹莓派本身作業系統提供了 raspi-config 進行一些額外的設定! 挺有趣的!在指令列模式直接輸入『 sudo raspi-config 』即可進入『類圖形界面』的畫面, 如果從外部連進來,會有點像這樣:
rasppi@raspberrypi:~ $ sudo raspi-config
- 1. 進階設定項目: Advancede Options
在系統效能的改善方面,你用方向鍵到『 Advanced Options 』的地方,然後按下 Enter 之後,會有幾個簡單項目可以選擇:
- A1 Expaned Filesystem: 可以將你的 SD 卡容量完整放大!
- A2 GL Driver: 可以選擇 G2 GL (Full KMS) 的項目來完整支援 OpenGL,圖形界面會有比較好的展示
- AA Network Config: 建議選擇 2 NetworkManager,之後我們可以來自己設定網路喔!
- 2. 界面設定: Interface Options
一開始還真的看不懂這啥東西!後來點進去才知道,原來是各個界面的連線方式,其實,可以說是遠端連線協定設計啦! 因為我們已經提供了用戶帳密,接下來就得要讓使用者可以登入系統才行!目前建議使用有加密的 SSH 來連線! 因此,點選 Interface Options 之後,進入 I2 SSH 的項目,並按下『是』,系統會給你『不好的密碼規則會讓你的樹莓派很危險』的展示... 記得要注意使用者的密碼長度才行!
大致上的設定就是這樣!有興趣的同學再自己慢慢摸索~其實設定挺有趣的!最後用 [tab] 按鈕到『 finish 』的按鈕上, 就可以離開了。如果你剛剛的設定有比較重要的,那系統會提示你得要重新開機!那你就重新開機吧!如果是遠端登入的同學要重新開機, 可能得要從指令列下達『 sudo reboot 』才行喔!
- 使用 sudo netstat -tlnp 指令,看看有沒有 0.0.0.0:22 字樣的輸出,若有,代表 ssh 啟動了
- 使用 ifconfig eth0 會得到你的樹莓派 IP 位址
- 在 windows 的執行,輸入 cmd 指令,會跳出 DOS 視窗
- 在 cmd 環境下,使用 ssh user@your.pi.ip 來登入到樹莓派
- 若 cmd 的游標不見了,可以透過拉動視窗大小,就可以重新繪出游標。
- 使用 w 就可以看到登入系統的用戶們
2.4: 進行時間校正
因為樹莓派不像一般主機,主機板上面通常有個小電池,可以提供一點點電力,以維護系統時間的紀錄與正確性。 樹莓派沒有這顆電池,所以,重新開機之後,在沒有網路的情況下,樹莓派的時間都會是錯誤的!那如何觀察時間呢? 如果在沒有圖形界面的情況下,我們可以使用 date 指令來查看時間:
rasppi@raspberrypi:~ $ date
西元2022年09月16日 (週五) 11時12分02秒 CST
你會發現,咦!時間沒有問題啊!這是因為我們上課所使用的樹莓派環境有網路啦!而樹莓派會主動的通過 NTP (Network Time Protocal) 協定, 自動的跑去網路上找到正確的時間伺服器,進行時間的校正。讓我們來查看下目前的時區與時間校正主機吧!
rasppi@raspberrypi:~ $ timedatectl Local time: 五 2022-09-16 11:14:00 CST <==目前本地時間 Universal time: 五 2022-09-16 03:14:00 UTC <==格林威治標準時間 RTC time: n/a Time zone: Asia/Taipei (CST, +0800) <==目前系統的所在時區 System clock synchronized: yes <==網路校時是成功的! (yes) NTP service: active <==目前有網路校時功能 (active) RTC in local TZ: no
- 查看目前的時間伺服器設定狀態
既然目前的時間是正常的,表示我們有規劃好時間伺服器才對,那麼這個時間伺服器的設定為何?我們依舊可以透過 timedatectl 來查看:
rasppi@raspberrypi:~ $ timedatectl show-timesync FallbackNTPServers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org ... ServerName=0.debian.pool.ntp.org ServerAddress=118.163.81.62 RootDistanceMaxUSec=5s PollIntervalMinUSec=32s PollIntervalMaxUSec=34min 8s PollIntervalUSec=34min 8s NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-25, RootDelay=442us, ... Frequency=78074 rasppi@raspberrypi:~ $ timedatectl timesync-status Server: 118.163.81.62 (0.debian.pool.ntp.org) Poll interval: 34min 8s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 2 Reference: C0A80002 Precision: 1us (-25) Root distance: 32.813ms (max: 5s) Offset: -1.180ms Delay: 7.434ms Jitter: 1.188ms Packet count: 44 Frequency: +1.191ppm
很簡單的發現了使用的 Server 來自於『0.debian.pool.ntp.org』這個時間伺服器主機名稱。但是某些情況下, 你的主機指定的時間伺服器,需要是工作單位內的 IP 才可以!舉例來說,崑山科大建議校內的所有伺服器, 其時間伺服器需要指定到 ntp.ksu.edu.tw 這台才可以!所以,我們得要修改一下這個設定值。
- 使用 root 權限進行時間伺服器修改
修改時間伺服器位址,需要有 root 權限才行!需要修改設定檔喔!假設大家尚未學過 vim 這個工具 那麼至少得要會 nano 這個編輯軟體才行。修改的設定檔在 /etc 底下,處理方法有點像這樣:
# 1. 先修改設定檔: rasppi@raspberrypi:~ $ sudo nano /etc/systemd/timesyncd.conf [Time] #NTP= FallbackNTP=ntp.ksu.edu.tw #FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org... #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048 # 2. 重新啟動時間同步的服務 rasppi@raspberrypi:~ $ sudo systemctl restart systemd-timesyncd.service # 3. 觀察時間伺服器有沒有更新? rasppi@raspberrypi:~ $ timedatectl timesync-status Server: 120.114.100.1 (ntp.ksu.edu.tw) Poll interval: 1min 4s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 3 Reference: 76A3513E Precision: 4us (-18) Root distance: 87.951ms (max: 5s) Offset: +5.696ms Delay: 752us Jitter: 0 Packet count: 1 Frequency: +15.092ppm
這樣就確定時間更新來源是在你的樹莓派附近!
2.5: 軟體安裝與查詢
在有網路存在的情況下,我們可以簡單的透過樹莓派官網提供的軟體倉儲系統,很快速的找到、安裝我們所需要的軟體喔! 所需要的指令也只有 apt-cache 以及 apt-get 兩個而已!
- 使用 apt-cache 搜尋軟體
基本上,在樹莓派上面的所有軟體都會有軟體名稱、軟體簡介、軟體說明等資料,我們可以透過關鍵字來找到軟體名稱~ 例如,我們想要知道有沒有軟體跟 GPIO 這個關鍵字有關時,可以這樣做:
rasppi@raspberrypi:~ $ apt-cache search gpio
airspyhf - HF+VHF software defined radio receiver - user runtime
ledmon - Enclosure LED Utilities
....
python3-pigpio - Python module which talks to the pigpio daemon (Python 3)
raspi-gpio - Dump the state of the BCM270x GPIOs
raspi-gpio-dbgsym - debug symbols for raspi-gpio
上面出現的訊息,主要是『軟體名稱 - 軟體簡介』而已,詳細的軟體說明並沒有輸出!所以,你才會看到前面兩行, 例如 airspyhf 軟體顯示上,並沒有出現任何 GPIO 的關鍵字啊!如果,你確定只要輸出軟體名稱含有 GPIO 的關鍵字, 而不要找尋軟體說明的內容,那可以加上 --names-only 來搜尋即可:
rasppi@raspberrypi:~ $ apt-cache --names-only search gpio
gpiod - Tools for interacting with Linux GPIO character device - binary
libgpiod-dev - C library for interacting with Linux GPIO device - static libraries and headers
....
python3-pigpio - Python module which talks to the pigpio daemon (Python 3)
raspi-gpio - Dump the state of the BCM270x GPIOs
raspi-gpio-dbgsym - debug symbols for raspi-gpio
你就會發現到,軟體名稱一定會有 GPIO 的關鍵字存在囉!
- 使用 apt-get 進行安裝/升級等行為
要安裝軟體,直接用 apt-get 來處理即可!apt-get 常用的功能主要有:
- apt-get upgrade : 全系統自動升級
- apt-get install [軟體名稱] : 安裝某個軟體
- apt-get remove [軟體名稱] : 移除某個軟體
- 進行一次全系統升級
- 嘗試找出軟體名稱含有 vim 的軟體
- 安裝 vim 這個軟體
2.6: 簡易的 vim 編輯器
與 nano 不同的是,使用 vim 可以進行『程式編輯器』的功能!尤其 vim 可以進行一些設定檔的處置時, 會有顏色的變化,在編輯上面,會比較輕鬆愉快!基本上,操作 vim 你一定要知道的是,vim 一定要接檔名! 否則,會出現黑壓壓的一片~另外,按下 i 可以進入編輯,按下 [esc] 可以離開編輯,按下 : 可以進入指令列模式, 指令列模式 :w, :q 可以儲存、可以離開,使用 :q! 可以不儲存離開等等!
首先,我們使用 vim 來編輯之前曾經用 nano 打開的檔案,看看內容長怎樣呢?
rasppi@raspberrypi:~ $ vim /etc/systemd/timesyncd.conf
先看左下角,因為我們使用的是一般帳號,因此這裡會出現『唯讀』的字樣。另外,因為 # 符號後面的資料是註解, 因此,就會出現成為藍色特殊字體~沒有問題的地方就會是正常文字。離開 vim 時,輸入 :q 即可!相當簡單!常見的 vim 按鈕如下:
- i:進入編輯模式
- [esc]:離開編輯模式
- :q:離開 vim
- :w:寫入檔案
- :q!:不儲存強迫離開
- u:復原前一個動作
- 使用 vim 打開你的 ~/.bashrc 檔案
- 前往 92 行左右,看一下我們之前編輯過的內容,使用 alias 的功能
- 進入編輯模式,並讓 vi 使用 vim
- 離開編輯模式
- 儲存檔案
- 離開 vim
- 修改預設編輯器
當我們需要用到編輯器的時候,系統會用『預設的編輯器』提供給妳使用!而 Linux 有很多的編輯器, 預設就有 nano, vi, vim 等等。樹莓派預設的編輯器 (editor) 應該是 nano 喔!查詢的方法有許多種, 我們先來測試看看:
# 1. 直接查詢連結檔 rasppi@raspberrypi:~ $ ll /etc/alternatives/editor lrwxrwxrwx 1 root root 9 9月 7 05:33 /etc/alternatives/editor -> /bin/nano # 2. 使用 update-alternatives 查詢: rasppi@raspberrypi:~ $ update-alternatives --display editor editor - 自動模式 連結的最佳版本為「/bin/nano」 目前連結指向 /bin/nano editor 連結現為 /usr/bin/editor editor.1.gz 從屬連結為 /usr/share/man/man1/editor.1.gz ....
都可以看到 editor 編輯器為 nano 的!那如果我想要改成 vim (/usr/bin/vim.basic) 呢?可以這樣做看看:
rasppi@raspberrypi:~ $ sudo update-alternatives --set editor /usr/bin/vim.basic update-alternatives: 在手動模式下以 /usr/bin/vim.basic 來提供 /usr/bin/editor (editor) rasppi@raspberrypi:~ $ ll /etc/alternatives/editor lrwxrwxrwx 1 root root 18 9月 16 14:13 /etc/alternatives/editor -> /usr/bin/vim.basic
這樣未來系統就會以 vim 作為基本的編輯器了!
2.7: 當週實做
- 讓 clear 指令執行時,其實是執行 clear -x
- 讓 cls 指令執行時,也會執行 clear -x
- 建立名為 myunit2 的帳號,不用給密碼,但是要建立家目錄
- 查詢目前使用的 NTP 伺服器的 IP (timedatectl 輸出)
- 嘗試找出軟體名稱具有 x11 關鍵字的軟體
- 嘗試安裝 x11-apps 這個軟體
- 嘗試在樹莓派本身上面啟動 xeyes 這個軟體,以及 xclock 這個軟體
...