Ubuntu - 修改 hostname
20 Feb 2023-
查看目前的 hostname
hostname
-
修改 etc/hostname
sudo vim etc/hostname
-
修改 etc/hosts
sudo vim etc/hosts
-
運行以下指令
sudo hostname -F /etc/hostname
重新開啟 terminal ,應該就可以看到新的 hostname 了!
查看目前的 hostname
hostname
修改 etc/hostname
sudo vim etc/hostname
修改 etc/hosts
sudo vim etc/hosts
運行以下指令
sudo hostname -F /etc/hostname
重新開啟 terminal ,應該就可以看到新的 hostname 了!
照著 Deep into Container — Build your own container with Golang 這篇教學操作的時候,發現每次結束都需要執行:
sudo mount -t proc proc /proc
上網查之後,發現將 must(syscall.Mount("proc", "proc", "proc", 0, ""))
改為以下程式碼,聲明這個新的 mount namespace 獨立:
must(syscall.Mount("", "/", "", syscall.MS_PRIVATE|syscall.MS_REC, ""))
defualtMountFlags := syscall.MS_NOEXEC | syscall.MS_NOSUID | syscall.MS_NODEV
must(syscall.Mount("proc", "/proc", "proc", uintptr(defualtMountFlags), ""))
wg.Wait()
後可以被重複使用package main
import (
"fmt"
"sync"
"time"
)
func main() {
wg := &sync.WaitGroup{} // 宣告一個 Waitgroup
for i := 0; i < 10; i++ {
wg.Add(1) // 需要等待的 Goroutine 數量加一
id := i
go func() { // 啟動 Goroutine
defer func() { // 每次結束 Goroutine,使用 wg.Done() 通知 waitgroup 需要等待的 goroutine 減少一個
fmt.Printf("Task %d done\n", id)
wg.Done()
}()
worker(id)
}()
}
wg.Wait() // 將 main() block 住,直到所有 Goroutine 被執行完(counter == 0),避免 main() 在 goroutine 們還沒執行完就結束了
}
func worker(id int) {
fmt.Printf("Worker %d starting\n", id)
time.Sleep(time.Second)
}
以 libp2p 的 chatroom 範本為例,編譯不同平台的執行檔。
git clone https://github.com/libp2p/go-libp2p
cd go-libp2p/examples/pubsub/chat
go build . # Builds executables
./chat # 執行
go build -o build/hello .
上面的程式碼會 build 出叫 hello 的執行檔,並將他放在叫 build 的資料夾中。
$GOPATH/bin
,則要使用 go install
go install .
可以用下面指令查看目前 $GOPATH/bin
在哪:
echo $GOPATH/bin
go tool dist list
chat.exe
:
GOOS=windows GOARCH=amd64 go build .
go env
查看目前的環境變數,裡面就包括預設的你的系統的 GOOS 與 GOARCH。程式碼如下:
func BitCount(x int) int {
cnt := 0
for x > 0 { // 當 x <= 0 就是完全沒 1 了
x = x & (x - 1) // 每次會不見一個 1
cnt++
}
return cnt
}