SSH

參考:https://askie.today/lets-set-ssh-config/

SSH登入主機時,不用再輸入密碼,然後也不用輸入ip的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 本地產生金鑰
ssh-keygen

# 把金鑰送入想要免輸入密碼的host
# 把公開金鑰送入遠端主機
ssh-copy-id 帳號@主機IP

# 先進入ssh目錄準備設定host別名
cd ~/.ssh
vi config

# 設定如下
# vmware
Host test # 以下機器的簡稱
HostName 192.168.4.18 # ip
User prlab # 帳號
identityfile ~/.ssh/id_rsa # 金鑰位置

# 之後就可以直接輸入
ssh test

zip

我最常用的就是壓所檔案,並且需要加密或分割檔案用。

  1. 一般加密檔案用的指令。
1
2
3
# ”加密“要使用-e,"資料夾“要使用-r,如果只是一般檔案-e即可,不需要r
# 把本地 ./test 資料夾 加密成 ./test.zip,並且輸入密碼
zip -er ./test.zip ./test
  1. 把zip檔案進行分割和合併的做法。
1
2
3
4
5
6
7
8
9
10

# 以下指令 - 表示標準輸入。這個命令的意思是將 zip 命令的輸出作為 split 命令的輸入。
# 如果不添加 -,則 split 命令將不會接收到 zip 命令的輸出,而是會試圖從文件中讀取數據。
# 下面的指令就是透過 zip 把 zip 檔案輸出給 split 這個指令以10MB為單位進行切割
# 以下指令就是回到上一層,找到zip檔案開始分割
zip - ../test.zip | split -b 10MB

# $ > 會產出 xaa, xab, xac, ... # 這樣的檔案,所以我們可以透過 cat 來進行合併
# 把當前目錄底下x開頭的檔案都合併成 test.zip
cat x* > ../test.zip

Mac

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 轉換成中文
option + shift + B : 可以打入顏文字
# emoji
ctrl + command + space : 可以打入表情符號

# mac
ctrl + command + F : 全螢幕
ctrl + 左右鍵 : 往右邊的 desktop 切換
command + M : 收起來最小化

# 瀏覽器
command + T : 新增分頁
command + W : 關閉分頁
command + shift + T : 還原關閉分頁
command + L : 跳到網址列
command + R : 重新整理
command + [ : 上一頁
command + ] : 下一頁

# Aflred
command + , : 開啟 Preference 設定

SHELL 配置文件

.bashrc vs .zshrc vs .profile vs .bash_profile 差異在哪裡?

比較 bashrc bash_profile zshrc
啟動時間 系統啟動後自動運行,只在bash shell下執行 用戶登入後才會運行 系統啟動後自動運行,只在 zsh shell下執行
實行時機 每次打開終端都會運行 每次登入都會運行一次 每次打開終端都會運行
更新方法 source bashrc source profile source zshrc
局面變量 局部,只能繼承 /etc/profile 中的變量 /etc/profile 中設定的變量是全局 全局,可以用於任何用戶

總結:

  • 如果使用 bash 請更改 ~/.bashrc 或是 ~/.bash_profile
    • bashrc 是每次打開終端都會運行
    • bash_profile 是每次登入都會運行一次
  • 如果使用 zsh 請更改 ~/.zshrc 或是 ~/.zshenv
  • 如果使用 bash 並且想要讓所有用戶都生效,請更改 /etc/profile

關於 /usr/

1
2
/usr/local # 通常是用戶自己手動下載的非系統預設軟體,這個folder由用戶自己管理
/usr/bin # 是用來存放系統預設的可執行檔,這是MacOS預設就幫你裝好的,不要亂動

關於 python & conda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
which python # 查看 python 的路徑
which -a python # 查看所有 python 的路徑
which -a python3 # 查看所有 python3 的路徑

# conda
conda env list # 查看所有環境
conda search python # 查看所有 python 版本
conda list -n your_environment_name python
conda list # 查看當前環境的所有套件

# 建立環境
conda create -n <env_name> python=3.7 # 建立環境 python=3.7 的名稱是 <env_name>
conda activate <env_name> # 進入環境 到時候輸入 python --version 就是新的環境版本

# 刪除環境
conda remove -n <env_name> --all # 刪除環境

# 環境改名 需要先 copy 到其他新環境 再刪除舊環境
conda create --name new_name --clone old_name
conda remove --name old_name --all

python 項目自動產生requirements.txt

ref: https://blog.csdn.net/pearl8899/article/details/113877334
ref: pip freeze creates some weird path instead of the package version

有時候我們在和別人合作的時候會希望保持環境的一致。

方法1: 整個環境下的安裝包都保存到 requirements.txt
使用這個方法的建議是你使用 virtualenv 環境下安裝的包都保存到 requirements.txt 中。
如果開啟一個新專案,建議建立一個新的virtualenv環境,並使用以下指令來建立所有的package清單。

1
2
3
4
5
# 不建議使用這個:這是open issue in version 20.1 這有時候會輸出奇怪的路徑而不是版本號 
pip freeze > requirements.txt

# 建議使用這個
pip list --format=freeze > requirements.txt

方法2: 只生成單個項目中有使用到的安裝包
以下的作用範圍只會將當前項目使用的內容導出成為requirements.txt
先定點到項目目錄下,然後執行 pipreqs ./ --encoding=utf-8,可以避免編碼錯誤,並自動在根目錄生成requirements.txt文件。
速度會比方法1還要慢。

1
2
pip install pipreqs
pipreqs .

如何安裝 requirements.txt 的套件

1
pip install -r requirements.txt

一鍵安裝各種包
最好先使用conda建立新環境,以做好環境隔離,然後再使用以下指令安裝所有的包。

1
2
pip install -r requirements.txt 
conda install --yes --file requirements.txt

conda install vs pip install

  • ref: pip install 和conda install有什么区别吗?

  • conda install xxx 這種安裝方式都會放在 anaconda3/pkgs,通常在這個目錄下的套件,在不同環境下需要使用到這個套件時,就會直接從這個目錄下將該套件複製到新環境不用重新下載。

  • pip install xxx 分兩種情況:

    • 第一種:當前conda的環境python是conda安裝的,那麼xxx就會被安裝到anaconda3/envs/your_env/lib/python3.x/site-packages下。
    • 第二種:當前conda的環境python是系統自帶的,那麼xxx就會被安裝到/usr/local/lib/python3.x/site-packages下。

如果使用conda安裝的python會建議使用conda install,因為他是嚴格檢查依賴,表示如果下載某個套件,該套件相關的依賴也會一併下載,conda比較能保證工作,如果conda沒有的再使用pip install即可。

Kaggle Input Data 下載

1
2
# 先透過anoconda prompt下載kaggle套件
pip install kaggle

接下來我們要去自己的網站下載api json檔案,然後放到 ~/.kaggle/kaggle.json 這個目錄下面

1
2
# 然後透過以下指令下載
kaggle datasets download -d <owner-name>/<dataset-name> -p <path-to-download>

也可以透過opendatasets套件來下載

1
pip install opendatasets
1
2
import opendatasets as od
od.download('https://www.kaggle.com/c/3136/download-all')

關於 Java

1
2
3
4
5
6
7
8
# 搜尋一下有哪些版本
brew search openjdk

# 然後挑選自己喜歡的版本 以8為例
brew install openjdk@8

# 安裝好後就可以查看版本
java -version

快速切換版本的做法,以我的微粒我目前本機上有17跟8
你會發現版本都裝在 /Library/Java/JavaVirtualMachines/ 這個目錄下面

1
2
3
4
5
6
7
8
9
10
11
# 确认一下有没有存在下面的目录
cd /Library/Java/JavaVirtualMachines/ #进入这个目录

#查看目录下的文件
ls

# 下面是我的openjdk8的目录,也就是java8的安装目录
/Library/Java/JavaVirtualMachines/openjdk-8.jdk/Contents/Home

# openjdk11的目录,也就是java11的安装目录
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

但是如果你是使用arm架構,例如Macos m1, m2晶片,那可能不適用
會看到以下錯誤

1
2
3
4
5
6
7
❯ brew install openjdk@8
==> Downloading https://formulae.brew.sh/api/formula.jws.json
############################################################################################################################ 100.0%
==> Downloading https://formulae.brew.sh/api/cask.jws.json
############################################################################################################################ 100.0%
openjdk@8: The x86_64 architecture is required for this software.
Error: openjdk@8: An unsatisfied requirement failed this build.
  1. 要去oracle下載是用自己架構的版本:https://www.oracle.com/java/technologies/javase/jdk8-arm-downloads.html
  2. 進行解壓縮後,我自己放到 /Library/Java/ 這個目錄下面
  3. vi ~/.bash_profile 進去添加以下內容
1
2
3
4
5
6
7
# java version
java8=/Library/Java/jdk1.8.0_401.jdk/Contents/Home
java17=/usr/bin/java

export JAVA_HOME=$java17
alias java8="export JAVA_HOME=$java8"
alias java17="export JAVA_HOME=$java17"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
source ~/.bash_profile # 讓他生效

# 可以透過輸入 java8 或是 java17 來切換版本
java8
java -version
> output
java version "1.8.0_401"
Java(TM) SE Runtime Environment (build 1.8.0_401-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.401-b10, mixed mode)


java17
java -version
> output
openjdk version "17.0.6" 2023-01-17
OpenJDK Runtime Environment Temurin-17.0.6+10 (build 17.0.6+10)
OpenJDK 64-Bit Server VM Temurin-17.0.6+10 (build 17.0.6+10, mixed mode)