一般來說,在安裝完 Linux 都會有 ifconfig 或是 ip 指令可以查詢主機的 IP。在容器環境裡,會因為要節省容器映像的空間,就不裝這些指令了。那要怎麼查 IP 呢? 可以從 /proc 來查詢。
cat /proc/net/fib_trie
cat /proc/net/fib_trie | grep "|--" | egrep -v "0.0.0.0| 127."
就這樣,蠻簡單的。
Just thinking more…
一般來說,在安裝完 Linux 都會有 ifconfig 或是 ip 指令可以查詢主機的 IP。在容器環境裡,會因為要節省容器映像的空間,就不裝這些指令了。那要怎麼查 IP 呢? 可以從 /proc 來查詢。
cat /proc/net/fib_trie
cat /proc/net/fib_trie | grep "|--" | egrep -v "0.0.0.0| 127."
就這樣,蠻簡單的。
最近因為在 Ubuntu 更新的時候,老是出現 gpg pub key 錯誤,有問題的套件庫是 hashicorp 跟 yarn 的套件庫,今天終於下定決心處理。
第一個找到的是這篇:How to configure HashiCorp repository
處理方法是這樣的,先下載 gpg key,然後用 sudo gpg 匯入
wget --quiet --output-document - https://apt.releases.hashicorp.com/gpg | \
sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/hashicorp-archive-keyring.gpg --import
然後檢查 /usr/share/keyrings/hashicorp-archive-keyring.gpg
ls -l /usr/share/keyrings/hashicorp-archive-keyring.gpg
permission 結果應該要是 644 。
接著檢查 source list 檔案,裏面會有 signed-by 的字串
deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com jammy main
基本上這樣就解決了,yarn 的處理方式也一樣。
wget --quiet --output-document - https://dl.yarnpkg.com/debian/pubkey.gpg | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/yarnkey.gpg --import
只是這邊做完,還是有問題,後來才靈機一動想到要檢查 /usr/share/keyrings/yarnkey.gpg 的 permission,發現是 600,用 chmod 改為 644 以後,apt update 就沒問題了。
要把使用者加入群組裡,可以用 usermod -aG group1 user1
那要一次把多個使用者加入群組的話,有什麼指令可以使用呢?這時候可以使用 gpasswd
gpasswd -M user1,user2,user3 group1
這樣子就可以了。
參考資料來自這裡:https://unix.stackexchange.com/questions/248426/
這串討論裡還有提到使用 for loop + usermod 的解決方法,但都不如上面那行來的簡潔、有力。
以後就知道可以用 gpasswd 了。
RHEL8 管理系統 SSL 憑證,首先要安裝 ca-certificates 套件
yum install ca-certificates
這個套件主要是外部的憑證,會定期更新,若是在連線到外部有遇到憑證問題,通常更新這個套件就可以解決。
如果有需要安裝自簽憑證,可以複製到以下這兩個憑證路徑:
/etc/pki/ca-trust 的權限比較高。
複製完成,執行
update-ca-trust
要察看目前有放了哪些憑證,可以用 trust 指令
trust list
前面提到的複製、執行 update-ca-trust ,也可以用以下指令替代
trust anchor <path.to/certificate.crt>
定時自動重啟服務,第一個最先想到就是用 crontab ,執行 crontab -e 加入
30 3 * * sun /bin/systemctl restart myService
就可以在每周日的 3:30 去重新啟動 myService 這個服務。
那可不可以用 systemd 來解決呢?
How can I configure a systemd service to restart periodically? 這篇有提到 systemd 在 229 這個版本以後有一個設定:RuntimeMaxSec ,這個可以表明服務存活的時間,所以如果是寫 1d ,表示存活一天,然後依照 Restart 設定來決定服務是否重新啟動
[Service]
Restart=always
RuntimeMaxSec=1d
以上設定就表示,服務存活一天,一天後重新啟動。
但這樣的設定,無法指定時間。
若需要指定時間,就需要使用 systemd timer 來進行
首先建立一個 oneshot 的 service ,新增 /etc/systemd/system/my_program.service
[Unit]
Description=Restart service
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart myService.service
這個 service 就只重新啟動 myService.service。接著加入 timer 設定,新增 /etc/systemd/system/my_program.timer
[Unit]
Description=Do something daily
[Timer]
# OnCalendar=daily
OnCalendar=*-*-* 3:30:00
Persistent=true
[Install]
WantedBy=timers.target
新增好以後,設定啟用這個 timer
systemctl daemon-reload
systemctl enable --now my_program.timer
這樣就可以在每天的 3:30 重新啟動 myService 這個服務了。
這方法跟 crontab 相比,需要管理兩個檔案,好處是可以統一使用 systemctl 來管理,各有好處。
以上介紹了三種方法,多知道一些,未來就可以因應各種情況來做搭配使用。
cockpit 是 RHEL 現在主打的 web console,透過網站介面,就可以管理主機。Debian/Ubuntu/RHEL 都有把這個套件包進去。
預設在安裝以後,是不啟用的,需要使用以下指令來啟用
sudo systemctl enable cockpit.socket
port 的預設值是 9090,若需要改 Port 的話,可以透過以下指令來覆寫之前的設定
sudo systemctl edit cockpit.socket
編輯以後,輸入以下內容
[Socket]
ListenStream=
ListenStream=PORT_NUMBER
把 PORT_NUMBER 改為想要的 port 就可以。
修改完畢以後,用以下指令重新載入跟啟動
sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket
Red Hat Enterprise Linux (RHEL) 7, 8, 9 的方法都一樣。
有終端機就好辦事了。
Software RAID 就用 mdadm --assemble --scan ,這主要是用 RAID 工具去掃描磁碟並重組 RAID 。執行完,要用 cat /proc/mdstat 檢查看看。
LVM 就用 lvm vgchange -ay 去尋找並啟用 LVM。啟用成功以後,可以再檢查 LVM 相關設定看看 (/etc/lvm) 以及 Kernel 的開機參數 cat /proc/cmdline
先用 lsblk 或是 df -h 看看目前的磁碟跟掛載的分割區,通常無法掛載或是掛載成唯讀時,都表示可能有問題,這時候要用適當的修復指令去修復。
各種檔案系統的修復指令
e2fsck -fvy /dev/sdXxfs_repair /dev/sdXreiserfsck /dev/sdXbtrfsck /dev/sdXfsck.vfat /dev/sdX修復好,可以掛載以後,要再把分割區掛載起來,檢查一下裡面的設定,例如 /etc/fstab ,/etc/lvm 等等的。
大致上是這樣,關於修復這部份,我覺得蠻吃經驗的,也需要對 Linux 開機過程有足夠的認識,這樣會比較好解決。
最後附帶一提,Ubuntu 也是用類似的方法來處理,Ubuntu 比較好的地方是用 LiveCD 開機完以後,有桌面環境可以用,這時就可以開終端機或是磁碟分割工具來使用,甚至也可以配置網路,用瀏覽器去查找資料來處理。
之前在準備考試時,看到的一篇文,裏面有解說跟實驗,寫的很好。
A brief guide to priority and nice values in the linux ecosystem
以下做筆記
nice -n 10 your_progrenice -n 10 -p pid一般來說很少會去調整這個優先權,都是讓 Kernel 自行去調控。
這個其實我不太會去關掉,但蠻多公司都會把這個關閉,避免不小心按到,導致伺服器重新開機。另外跟安全漏洞也有關係,有人會利用這個熱鍵來做壞事。
用 systemd 的話,蠻簡單的,ctrl+alt+del 被設定為一個 target,所以可以用 systemctl disable 跟 systemctl mask 來關閉。
systemctl disable ctrl-alt-del.target
systemctl mask ctrl-alt-del.target
但是,systemd 有埋一個機關,就是兩秒內連續按下七次,他仍然會重新開機 ( man systemd-system.conf 可找到),所以最好也在 /etc/systemd/system.conf 裡加入以下設定
CtrlAltDelBurstAction=none
然後重新載入設定
systemctl daemon-reexec
若是在 RHEL 8 使用 GUI,還需要加一個地方,新增 /etc/dconf/db/local.d/00-disable-CAD ,內容如下
# /etc/dconf/db/local.d/00-disable-CAD
[org/gnome/settings-daemon/plugins/media-keys]
logout=''
新增以後,執行 dconf update 來讓設定生效。