PJCHENder 未整理筆記

[指令] Command Line 操作, cmd, cli, bash

2017-09-26

[指令] Command Line 操作, cmd, cli, bash

keywords: zsh, iterm2, terminal, linux
1
2
open -a [appToOpen] [fileName]       # 指定特定應用程式開啟檔案
tail -f [filename] # 從結尾開始讀檔,並且持續監控變化

Linux Terminal Command Reference @ linux community

變數

$PATH

所有能夠在 Terminal 中直接被執行的程式,都需要放在 $PATH 內,否則需要先指定到該程式所在的資料夾後才能執行。

1
$ echo $PATH

如果想要將其他路徑添加到 $PATH 中,可以在 .bash_profile.zshrc 中使用:

  • PATH="" 後面使用 $PATH 是為了把原本已有的 PATH 保留下來,否則會覆蓋掉。
  • : 當作不同路徑的區隔
1
2
# .zshrc
export PATH="$PATH:~/my-scrips"

操作資料夾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cd <directory>                         # 切換目錄

pwd # 取得目前所在的位置

ls -alpt # 列出目前的檔案列表,搭配 -a(顯示隱藏檔), -l(顯示完整資訊),
# -p(顯示較清楚),-t(根據最後修改時間排序檔案)
ls | wc -l # 顯示檔案數量

mkdir <directory> # 建立新的目錄
mkdir -p ~/Library/a_folder # 即使 Library 資料夾不存在也直接建立到 a_folder

touch # 建立檔案

cp <file> <directory> # 複製檔案
cp index.html about.html # 把檔案 index.html 複製一份成 about.html
cp -r a_folder b_bolder # 把 a_folder 資料夾複製進去 b_folder 資料夾中

mv <file-old> <file-new|directory> # 移動檔案
mv index.html info.html # 把檔案 index.html 更名成 info.html(重新命名、改名)
mv index.html a_folder/ # 把 index.html 移動到 a_folder 資料夾中

rm <file|directory> # 刪除檔案
rm *.html # 刪除目錄中的所有 html
rm -r <folder> # 刪除整個 a_folder
rm -f <file> # 刪除檔案
rm -rf [folder_name] # 刪除資料夾(不論裡面有沒有內容或其他資料夾)

sudo # 暫時取得權限

改變資料與檔案權限 chmod

1
2
3
4
5
6
7
8
9
10
$ chmod 644 *     # 檔案用 644
$ chmod 755 * # 目錄用 755

# 一次修改因為檔案權限修改後,使得 git 認為檔案不同的情況
$ git ls-files -m | xargs chmod 644

# 一次修改所有資料夾底下的檔案或檔案
$ find YOUR_PATH -type d | xargs chmod 755
$ find YOUR_PATH -type f | xargs chmod 644
$ sudo find /path/to/dir -type f -exec chmod 0664 {} \; # 如果上一行出現錯誤,可試試這行

補充:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 文件的權限類型

rwx = 111 = 7
rw- = 110 = 6
r-x = 101 = 5
r-- = 100 = 4
-wx = 011 = 3
-w- = 010 = 2
--x = 001 = 1
--- = 000 = 0

# 文件所屬群組

<擁有者> - <群組> - <其它>

Linux 權限詳解

讀取檔案

1
2
3
4
5
6
7
8
9
10
cat <file>                       # 將檔案內容輸出在終端機上

less <file> # 使用分頁的方式顯示內容

head <file> # 只顯示檔案的前 10 行

man open # 查看 open 指令說明

open # 開啟檔案
open -a [appToOpen] [fileName] # 指定特定應用程式開啟檔案

寫入檔案

1
2
3
4
5
6

# <cmd> > <file> # 將 <cmd> 的內容寫入 <file>
echo "my content" > my_file.rb # 取代原本的檔案內容

# <cmd> >> <file> # 將 <cmd> 的內容添加到 <file>
echo "my content" >> my_file.rb # 添加到原本的檔案內容

找檔案

1
2
3
4
5
6
7
8
# 尋找空檔案
$ find . -empty

# 尋找名稱後綴為 .del 的資料夾
$ find . -iname '*.del' -type d

# 尋找名稱後綴為 .del 的檔案
$ find . -iname '*.del' -type f

找檔案中的內容

1
2
3
4
5
6
$ grep -ir '<content-to-find>' '<folder-path>'
# i: case-insensitive
# r: recursive
# l: 只顯示資料夾

$ grep -irl 'foobar' . # 從當前目錄開始找

其他指令

1
2
3
clear                     # 清除畫面
history # 檢視 terminal 紀錄
history | grep migration # 搜尋含有 "migration" 的紀錄

輸入多行的 command 時,在每一行的最後使用 \ 或 `,最後一行則不要輸。

1
2
=> bin/rails generate scaffold Product \
title: string description:text image_url:string price:decimal

使用 && 可以一次執行兩個指令:

1
cd ~/Projects/Backup && node index.js

讓程序在背景執行

keywords: background, bg, fg`
1
2
3
4
5
$ scrpcy    # 執行某個程序
CTRL + Z # 按下
$ bg # 進入背景
$ jobs # 列出所有在背景的程序
$ fg n # 將第 n 個程序移回前景執行(n 可以用 jobs 看)

run process in background

重新載入設定檔

keywords: source
1
$ source ~/.zshrc

看目前的 port 被誰佔住

1
2
3
4
5
6
# 查看 port 被誰佔住
lsof -wni tcp:3000
lsof -i tcp:3000

# 把那個 port 刪掉
kill -9 <pid>

列出系統執行的程序

1
2
3
4
ps aux      # show me all running process
ps aux | grep ssh # 列出正在執行 ssh 的程序

killall node # 刪除所有正在執行的 node 程序

複製內容到剪貼簿

keywords: pasteboard, pbcopy
1
2
3
4
# paste board
git diff | pbcopy. # 將 git diff 的結果複製到剪貼簿

# pbpaste 可以貼上

壓縮與解壓縮檔案(zip and unzip)

壓縮

1
2
3
4
# zip -r <output-file> <input-file>
$ zip -r function.zip . # 將該資料夾內的所有檔案壓縮為 function.zip
$ zip -9 -r --exclude="*.git*" function.zip . # 忽略掉 .git 資料夾內的檔案
$ zip -9 -r function.zip . -x '*.git*' '*.vscode*' # 忽略掉兩個以上的檔案

解壓縮

1
$ unzip -a file.zip -d /home/phpini

印出資料夾結構(print file tree)

Linux see directory tree structure using tree command

1
2
3
4
5
6
7
# -a                           印出所有檔案(包含隱藏檔)
# -d 只印出資料夾
# -L 2 只深入到第二層
# -C 顯示顏色
# -P node_modules 只列出符合 node_modules pattern 的檔案
# -I node_modules 忽略掉符合 node_modules pattern 的檔案
$ tree -d -L 2 -I node_modules

切換 M acOS 中預設的 Shell

修改 Terminal 預設的 Shell

在 MacOS 中預設的 Shell 是 bash,打開 MacOS 的 Terminal,進入「偏好設定」–> 「一般」–> 「打開 shell 的設定」:

  • zsh: /usr/local/bin/zsh
  • bash: /bin/bash

imgur

修改使用者預設的 Shell

如果要使用指令更改預設的 shell 可以使用 chsh 指令,這種方式會同時改變使用 iTerm 等登入時預設的 Shell:

1
$ chsh -s /bin/zsh

Change Shell MacOS X

參考資料

掃描二維條碼,分享此文章