window/Linux/MacOS 命令行

Shell:

什麼是shell:
  Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋樑。
  Shell 既是一種命令語言,又是一種程序設計語言。
  Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶經過這個界面訪問操做系統內核的服務。html

Shell 腳本:
  Shell 腳本(shell script),是一種爲 shell 編寫的腳本程序。
  業界所說的 shell 一般都是指 shell 腳本,但shell 和 shell script 是兩個不一樣的概念linux

Ps:正則表達式

1.不一樣 shell 的命令有所區別,使用時候須要注意。
    2.網上的教程一般都是以 bash 做爲學習的標準。
    3.因爲 第1點,使用命令時候若是不清楚,先查詢內置的命令幫助文檔。(如: COMMAND -h 或者 man COMMAND 等 )
    4.善用 tab 鍵的自動補充功能, COOMAND -(tab鍵,列出全部參數)
例如:
   bash 中有 help 命令, history 命令有 -c 參數
   zsh 5.8 中是沒有 help 命令, 而且 history 命令也沒有 -c 參數

查看shell版本的幾種方式:shell

1. shell --version, 例如: zsh --verison 或者 bash --verison
2. $SHELL_VERSION, 例如: $ZSH_VERSION, 這裏好像只有 zsh 有個這個

Linux/MacOS 命令:

  注意,由於有些命令在 Linux 中有 MacOS 沒有,網上找到的有時候比較模糊,因此不必定徹底正確,我儘可能區分不一樣的。數組

符號的含義:

符號 含義
| 管道符
&& 表明 and 同時運行多個命令, 使用它。
\ 容許您在新行中繼續編寫命令 Bash語法。
* 匹配路徑下,全部文件或者文件夾名稱
<< EOF [重定向文件] ...內容 EOF 分界符, EOF 不必定是 它,只是一般用它做爲分界符標識 ; 結合cat進行內容的追加
> 獲取命令的標準輸出並將其重定向到一個文件中(將覆蓋整個文件)
2> 獲取命令的錯誤輸出並將其重定向到一個文件中(將覆蓋整個文件)
&> 獲取命令的標準和錯誤輸出並將其重定向到一個文件中(將覆蓋整個文件)
< 將文件的內容讀入命令的輸入
>> 將文本或命令標準輸出追加到文件的最後一行
2>> 將文本或命令錯誤輸出追加到文件的最後一行
&>> 將文本或命令標準和錯誤輸出追加到文件的最後一行

花括號擴展:

在傳統的 shell 中是沒有 花括號擴展這個功能的.bash

$ echo a{p,c,d,b}e
# 輸出結果: ape ace ade abe
$ echo {a,b,c}{d,e,f}
# 輸出結果: ad ae af bd be bf cd ce cf

$ ls *.{jpg,jpeg,png}    
# 首先擴展爲*.jpg *.jpeg *.png,而後解析通配符

  當花括號擴展和變量擴展一塊兒使用時,變量擴展解析於花括號擴展以後。有時有必要使用內置的 eval 函數:app

$ start=1; end=10
$ echo {$start..$end}  # 因爲解析順序,沒法獲得想要的結果
# 輸出結果: {1..10}
$ eval echo {$start..$end} # 首先進行變量擴展的解析
# 輸出結果: 1 2 3 4 5 6 7 8 9 10

bash 中 ``, '', "" 區別:

  首先它們均可以用來解決bash 中字符串中的空格問題。less

字符串引號 描述
'' 原樣輸出字符串,當咱們須要原樣輸出字符串的時候使用, 例如: a=1; echo '$a' // $a
"" 參數替換, 例如: a=1; echo "$a" // 1
`` 命令替換和參數替換, 例如: echo seq 1 10; 主要是爲了命令替換, 若是隻替換了參數,echo 輸出的時候會提示找不到命令.
echo `seq 1 10`
# 輸出結果: 1 2 3 4 5 6 7 8 9 10

echo seq 1 10
# 輸出結果: seq 1 10

bash 中的循環:

格式:編輯器

# f 變量名
    # * 當前文件夾下的全部文件, 這個是 glob 模式
    # 循環輸出文件
    for f in *; do
        ....
        # file f
    done
# i 變量名
    # `seq 1 10` 1 到 10, seq 1 10 是生成1 到 10,可是這裏要加上 ``,不然輸出的是 seq 1 10
    # 循環輸出 i
    for i in `seq 1 10`; do
        ....
        echo $i
    done
    # 1
    # 2
    .
    .
    .
    # 10

bash 中的變量:

下面的例子如下面這個變量爲例子:ide

str="這是一個字符串變量"

變量賦值格式:
    name=value
  Ps:
    1. = 與 name 和 value 之間不能有空格;
    2.變量的值若是有空格,必須用引號包含

使用變量格式: $str /// 這是一個字符串變量

在 "" 字符串中使用變量, 獲取到變量值: "$str" /// 結果是 這是一個字符串變量
在 '' 字符串中使用變量, 獲取到: '$str' /// 結果是 $str

aa=123
#定義變量aa的值是123
aa="$aa"456
#重複定義變量aa的值是源aa的值加上456
echo $aa
# 輸出結果: 123456
#aa的值已經變成了123456
aa=${aa}789
echo $aa
# 輸出結果: 123456789
# 在進行變量疊加時也可使用${變量名}格式
# 在進行變量疊加時,變量名須要用雙引號或 ${} 包含

變量查看:

  set 命令能夠用來查看系統中的全部變量(用戶自定義變量和環境變量)和設定 Shell 的執行環境
  1.直接set命令列出來全部變量
  2.爲了查找變量是否存在使用 grep 命令:
    set | grep -e 正則表達式

變量刪除:

unset 命令刪除變量:  unset str
由於是刪除變量,因此不須要帶 $

bash 中的字符串操做:

下面的例子如下面這個變量爲例子:

str=123asd456

字符串按位置截取:

格式:
  ${var:offset:length}

  • var: 變量,不須要帶 $
  • offset: 從字符串第幾個開始截取
  • length: 長度
  • 若是隻有1個參數,正數的時候,爲offset, 負數的時候爲 length(這裏 : 和 - 要有空格)
~ % str=123asd456
~ % echo ${str:2:4}
3asd
~ % echo ${str:4}  
sd456
~ % echo ${str:-4}
123asd456
~ % echo ${str: -4}
d456

字符串刪除:

pattern是glob風格的正則(名稱: glob 模式 \ glob 模式匹配)

  • ${var/pattern} -- 刪除首次。刪除var表示的字符串中第一次被pattern匹配到的字符串.
  • ${var//pattern} -- 刪除所有。刪除var表示的字符串中全部被pattern匹配到的字符串.
  • ${var/#pattern} -- 刪除行首。刪除var表示的字符串中全部以pattern爲行首匹配到的字符串.
  • ${var/%pattern} -- 刪除行尾。刪除var所表示的字符串中全部以pattern爲行尾所匹配到的字符串.

字符串切片:

有點像字符串刪除(刪除行首或行尾)

格式:

  • ${var#pattern} -- 功能:自左而右,查找var變量所存儲的字符串中,第一次出現的pattern,刪除pattern所匹配到的全部字符。 注意:匹配到的必須是從行首開始的,不能匹配中間某段.
  • ${var##pattern} -- 貪婪模式,匹配到不能再匹配到位置.
  • ${var%pattern} -- 功能:自右而左,查找var變量所存儲的字符串中,第一次出現的pattern,刪除pattern所匹配到的全部字符。 注意:匹配到的必須是從行尾開始的,不能匹配中間某段.
  • ${var%%pattern} -- 貪婪模式,匹配到不能再匹配到位置.

字符串替換:

pattern是glob風格的正則(名稱: glob 模式 \ glob 模式匹配)

格式:

  • ${var/pattern/substr} -- 首次。查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替換之.
  • ${var//pattern/substr} -- 所有。查找var所表示的字符串中,全部能被pattern所匹配到的字符串,以substr替換之.
  • ${var/#pattern/substr} -- 行首。查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替換之.
  • ${var/%pattern/substr} -- 行尾。查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替換之.

輸出PATH換行:

echo ${PATH//:/\\n}

字符大小寫轉換:

  • ${var^^} :把var中的全部小寫字母轉換爲大寫.
  • ${var,,} :把var中的全部大寫字母轉換爲小寫.

變量賦值:

格式:

  • ${var:-VALUE}:若是變量var爲空或者未設置,則返回VALUE;不然返回變量var的值。注意,變量name自己的值不會被修改.
  • ${var:=VALUE}:若是變量var爲空或者未設置,則返回VALUE,並將VALUE賦值給變量var;不然返回變量var的值.
  • ${var:+VALUE}:若是變量爲空或者未設置,那麼不會返回任何值。不然返回VALUE的值。注意,變量name自己的值不會被修改.
  • ${var:?ERROR_INFO}:若是變量var爲空或者未設置,則返回錯誤信息ERROR_INFO;不然返回變量var的值.

命令:

source:

  在當前 shell 環境下讀取並執行FileName中的命令。
  *注:source命令也稱爲「點命令」,也就是一個點符號(.)。source命令一般用於從新執行剛修改的初始化文件,使之當即生效,而沒必要註銷並從新登陸。該命令一般用命令「.」來替代

格式:

source filename
. filename(中間有空格)

compgen:

  列出全部命令

參數 描述
-c 列出全部可用的命令
-a 列出可用的全部alias
-b 顯示全部 shell 內置命令
-k 顯示全部 shell 關鍵字
-A 顯示全部 shell 函數

alias:

   alias命令用來設置指令的別名。咱們可使用該命令能夠將一些較長的命令進行簡化。使用alias時,用戶必須使用單引號''將原來的命令引發來,防止特殊字符致使錯誤。
  alias命令的做用只侷限於該次登入的操做。若要每次登入都可以使用這些命令別名,則可將相應的alias命令存放到bash的初始化文件/etc/bashrc
  執行 alias 或者 alias -p, 能夠顯示本身設定的 alias 命令列表(有些shell 沒有 -p 參數,直接執行 alias)

seq:

  快速生成數字列表,seq 僅適用數字.

# 除非另有指定,不然 `seq` 始終以 1 開頭
    echo `seq 3`
    # 1 2 3
    
    echo `seq 3 6`
    # 3 4 5 6
  1. 指定增量

    # 3 開始的數
       # 4 指定增量
       # 20 最大的數,由於19 增量 4 後是大於 20,因此最後輸出20
       echo `seq 3 4 20`
       # 3 7 11 15 19
  2. 指定減量
# 20 開始的數
   # -4 指定減量
   # 3 最小的數,由於4 減量 4 後是小於 3,因此最後輸出3
   echo `seq 20 -4 3`
   # 20 16 12 8 4
  1. 使用分隔符 -s參數 加上分隔符

{a..b}:

  a是開始,b是結束; 快速生成序列,適用於任何字符(中文也適合).

運算:

bc:

  bc 命令是任意精度計算器語言,一般在linux下當計算器用。
  它相似基本的計算器, 使用這個計算器能夠作基本的數學運算

    • 加法
    • 減法
    • 乘法
  • / 除法
  • ^ 指數
  • % 餘數
# scale 設置小數位,經過 / 1 進行
echo 'scale=2; (2.777 - 1.4704)/1' | bc
# 結果: 1.30, floor
let:

  用於執行一個或多個表達式,變量計算中不須要加上 $ 來表示變量。若是表達式中包含了空格或其餘特殊字符,則必須引發來
格式:

let arg [arg ...]

例如:

$ a=1 b=2
$ let a=a+4 b++
$ echo $a $b 
# 結果: 5 3

命令幫助:

  內部命令自己一開機就會隨bash加載到內存中
  而外部命令只會運行後纔會加載到內存中能夠用hash命令看到

內部命令:

  1.經過 help COMMAND 或者 man COMMAND查看命令幫助
  2.若是 man COMMAND 看到的是 shell 的命令幫助,就使用help.

外部命令:

  1.一般是 COMMAND -h 或者 -—help
  2.man COMMAND 或者 info COMMAND


用戶與權限:

用戶
chown:

chown(英文全拼:change owner)命令用於設置文件全部者和文件關聯組的命令

格式:

chown [-cfhvR] [--help] [--version] [user][:group] file...

例子:

# 處理當前目錄下的全部文件夾和文件
# ':' 前面的 $(whoami) 是 要設置的擁有者用戶是誰,$(whoami)輸出當前登陸用戶
# ':' 後面的是 要設置的 羣體的使用者
# * 匹配當前目錄的全部
$ chown -R $(whoami):amdin *

# 只改變 關聯組,不改變全部者
$ chown :512 ./Readme.md

參數:

參數 描述
-R 處理指定目錄以及其子目錄下的全部文件
user 新的文件擁有者的用戶 ID 或者用戶名
group 新的文件擁有者的使用者組(group) 使用者組id 或者 使用者組名稱
-c 顯示更改的部分的信息
-f 忽略錯誤信息
-h 修復符號連接
-v 顯示詳細的處理信息
--help 顯示輔助說明
--version 顯示版本

Note:

  • 利用 chown 將指定文件的擁有者改成指定的用戶或組,用戶能夠是用戶名或者用戶 ID,組能夠是組名或者組 ID,文件是以空格分開的要改變權限的文件列表,支持通配符。 。
  • chown 須要超級用戶 root 的權限才能執行此命令。
  • 只有超級用戶和屬於組的文件全部者才能變動文件關聯組。非超級用戶如須要設置關聯組可能須要使用 chgrp 命令。
chmod:

chmod命令 用來變動文件或目錄的權限

  • 在UNIX系統家族裏,文件或目錄權限的控制分別以讀取、寫入、執行3種通常權限來區分,另有3種特殊權限可供運用。
  • 用戶可使用 chmod 指令去變動文件與目錄的權限,設置方式採用文字或數字代號皆可。
  • 符號鏈接的權限沒法變動,若是用戶對符號鏈接修改權限,其改變會做用在被鏈接的原始文件。

權限範圍的表示:

表示 描述
u User, 即文件或目錄的擁有者
g Group,即文件或目錄的所屬羣組
o Other,除了文件或目錄擁有者或所屬羣組以外,其餘用戶皆屬於這個範圍
a All,即所有的用戶,所屬羣組以及其餘用戶
r 讀取權限,數字代號爲 4
w 寫入權限,數字代號爲 2
x 執行或切換權限,數字代號爲 1
- 不具有任何權限,數字代號爲 0
s 特殊功能說明: 變動文件或目錄的權限

選項:

選項 縮寫 描述
--changes -c 效果相似 -v 選項,但僅回報更改的部分.
--quiet 或者 --silent -f 不顯示錯誤信息.
--recursive -R 遞歸處理,將指令目錄下的全部文件及子目錄一併處理.
--verbose -v 顯示指令的執行過程
--reference=<參考文件或目錄> 把指定文件或目錄的全部羣組所有設成和參考文件或目錄的所屬羣組相同
<權限範圍>+<權限設置> 開啓權限範圍的文件或目錄的該選項權限設置
<權限範圍>-<權限設置> 關閉權限範圍的文件或目錄的該選項權限設置
<權限範圍>=<權限設置> 指定權限範圍的文件或目錄的該選項權限設置

擴展:

  • Linux 用戶分爲 擁有者、組羣(Group)、其餘(Other)
  • 系統中全部的帳號與通常身份使用者, 以及 root 相關信息 都記錄在 /etc/passwd 文件中.
  • 每一個人的密碼則記錄在 /etc/shadow 文件下.
  • 全部的組羣名稱記錄在 /etc/group 內.

權限圖片分析:

image
image

Refs:


備份:

rsync 文件同步:

參考: rsync 用法教程 阮一峯

*1.rsync 是一個經常使用的 Linux 應用程序,用於文件同步.
   *2.它能夠在本地計算機與遠程計算機之間,或者兩個本地目錄之間同步文件(但不支持兩臺遠程計算機之間的同步).
   *3.它也能夠看成文件複製工具,替代`cp`和`mv`命令.
   *4.它名稱裏面的`r`指的是 remote,rsync 其實就是"遠程同步"(remote sync)的意思.
   *5.與其餘文件傳輸工具(如 FTP 或 scp)不一樣,rsync 的最大特色是會檢查發送方和接收方已有的文件,僅傳輸有變更的部分(默認規則是文件大小或修改時間有變更).
   *6.若是是本地和遠程同步,傳輸雙方都必須安裝 rsync.
   *7.默認狀況下,rsync 只確保源目錄的全部內容(明確排除的文件除外)都複製到目標目錄。它不會使兩個目錄保持相同,而且不會刪除文件。

基本命令格式:

# -r: 表示遞歸,即包含子目錄, -r 是必須的,不然 rsync 運行不成功.(可使用 -a 代替 -r).
# source 爲多個時候,多個 source 都會同步到 destination.
# 目標目錄 destination 若是不存在,rsync 會自動建立.
$  rsync -r source1 [..source2] destination

路徑注意事項 Ps:

# source 後面帶 / 和不帶 / 是兩回事 
$ rsync -r source1 destination
# destination/source1 , destination 下面的子目錄 source1 跟 源目錄 source1 內容一致。
$ rsync -r source1/ destination
# destination 的內容跟 源目錄 source1 的內容一致

目標目錄成爲源目錄的鏡像副本:

# 第7點描述的意思,就是在沒有特定參數的狀況下,rsync 只是將 源目錄的內容 複製到 目標目錄,確保源目錄有的內容,目標目錄都會有。
# 爲了確保 源目錄 沒有的內容,目標目錄都不要存在使用下面參數
# --delete 這將刪除只存在於目標目錄、不存在於源目錄的內容。
$ rsync -r --delete source/ destination

模擬同步結果,而且輸出到終端:

# -n: 參數模擬命令執行結果, 若是隻是 -n 不帶 v,咱們在終端上,什麼都看不到.
# -v: 將結果輸出到終端.

參數列表:

參數 參數簡寫 描述 例子
--archive -a 1.除了能夠遞歸同步之外,還能夠同步元信息(好比修改時間、權限等);
2.像 -rlptgoD (no -H) 參數.
3.因爲 rsync 默認使用文件大小和修改時間決定文件是否須要更新,因此-a比-r更有用
--recursive -r 遞歸目錄
-D 保持設備文件信息
-P 顯示同步過程,好比速率,比-v更加詳細
--copy-links -L 同步軟連接時會把源文件給同步
--links -l 保留軟鏈接
--perms -p 保持文件的權限屬性
--times -t 保持文件的時間屬性
--owner -o 保持文件的屬主
--group -g 保持文件的屬組
--delete 刪除只存在於目標目錄、不存在於源目標的文件,即保證目標目錄是源目標的鏡像
--human-readable -h 表示以人類可讀的格式輸出.
--verbose -v 1. -v參數表示輸出細節。
2. -vv表示輸出更詳細的信息.
3. -vvv表示輸出最詳細的信息。
--dry-run -n 模擬執行結果,不真正執行
--exclude 按照模式,排除同步的文件/文件夾 1. 單個排除模式: --exclude 'example/' 或者 --exclude='example/'
2. 多個排除模式: --exclude 'example/' --exclude 'example.txt'
3. 多個排除模式: --exclude={'example.txt','example/'}
--exclude-from 從指定的文件中讀取排除模式, 每一個排除模式爲一行 --exclude-from='exclude-file.txt'
--include 1.按照模式,不排除文匹配的文件/文件夾.
2.一般跟 --exclude 一塊兒使用, 爲了保留被 --exclude 模式匹配, 但不但願被排除掉的文件/文件夾.
3.使用這個參數的好處是不須要高度匹配 --exclude 的排除模式,而且在不清楚文件類型時候,確認同步的文件類型保留就好了.
1. 單個模式: --include 'example/' 或者 --include='example/'
2. 多個模式: --include 'example/' --include 'example.txt'
3. 多個模式: --include={'example.txt','example/'}
--include-from 從指定的文件中讀取不排除模式, 每一個不排除模式爲一行 --include-from='include-file.txt'
--max-size 設置傳輸的最大文件的大小限制 好比不超過200KB(--max-size='200k')
--min-size 設置傳輸的最小文件的大小限制 好比不小於10KB(--min-size=10k)
--itemize-changes -i 表示輸出源目錄與目標目錄之間文件差別的詳細狀況
--prune-empty-dirs -m 指定不一樣步空目錄
--update -u 表示同步時跳過目標目錄中修改時間更新的文件,即不一樣步這些有更新的時間戳的文件.
--ignore-non-existing --existing 表示不一樣步目標目錄中不存在的文件和目錄。
--progress 表示顯示進展
--size-only 表示只同步大小有變化的文件,不考慮文件修改時間的差別
--suffix 指定文件名備份時,對文件名添加的後綴,默認是~
--remove-source-files 表示傳輸成功後,刪除發送方的文件
--daemon 運行一個 rsync 的守護進程

日期時間:

date:

描述:

1.date命令能夠用來顯示或設定系統的日期與時間,在顯示方面,使用者能夠設定欲顯示的格式,格式設定爲一個加號後接數個標記 。
    2.如果不以加號做爲開頭,則表示要設定時間,而時間格式MMDDhhmm[[CC]YY][.ss],其中 MM 爲月份,DD 爲日,hh 爲小時,mm 爲分鐘,CC 爲年份前兩位數字,YY 爲年份後兩位數字,ss 爲秒數。
    3.這種方式只是臨時修改系統時間,當系統從新啓動的時候就會還原.
    4.普通用戶是不被授予修改時間的權限的, 只有超級用戶才能用 date 修改系統時間。

語法格式:date [選項] [+輸出形式]
輸出形式字符串(必須有加號): +"%Y-%m-%d" 或 "+%Y-%m-%d"

參數 簡寫參數 描述
--date -d 格式: --date=datestr; 顯示 datestr 中所設定的時間 (非系統時間)
--set -s 將系統時間設爲 datestr 中所設定的時間
--universal 或者 --utc -u 顯示目前的格林威治時間
--help 顯示 date 命令幫助信息
--rfc-3339 --rfc-3339=date, 顯示日期; --rfc-3339=ns, 顯示日期時間(毫微秒); --rfc-3339=ns, 顯示日期時間(秒)

用於 建立日期目錄和日期文件時候:

$ mkdir `date +"%Y-%m-%d"`
# 2020-11-25/
$ touch `date +"%Y-%m-%d".txt`
# 2020-11-25.txt

目錄:

cat:

  cat命令鏈接文件並打印到標準輸出設備上,cat常常用來顯示文件的內容
格式:

cat 文件1 [...文件n]
參數 功能
-n或-number 有1開始對全部輸出的行數編號
-b或--number-nonblank 和-n類似,只不過對於空白行不編號
-s或--squeeze-blank 當遇到有連續兩行以上的空白行,就代換爲一行的空白行
-A 顯示不可打印字符,行尾顯示「$」
tac:

  cat命令的反向,只反向從下到上,不反向左右.

more:

  用來查看一個文件的內容。當文件內容太多,一屏幕不能佔下,而你用cat確定是看不前面的內容的,那麼使用more就能夠解決這個問題了。當看完一屏後按空格鍵繼續看下一屏。但看完全部內容後就會退出。若是你想提早退出,只需按q鍵便可

less:
  •   做用跟more同樣,但比more好在能夠上翻,下翻。空格鍵一樣能夠翻頁,而按」j」鍵能夠向下移動(按一下就向下移動一行),按」k」鍵向上移動。
  •   在使用more和less查看某個文件時,你能夠按一下」/」 鍵,而後輸入一個word回車,這樣就能夠查找這個word了。若是是多個該word能夠按」n」鍵顯示下一個。
  •   另外你也能夠不按」/」而是按」?」後邊一樣跟word來搜索這個word,惟一不一樣的是,」/」是在當前行向下搜索,而」?」是在當前行向上搜索
head:

  head後直接跟文件名,則顯示文件的前十行。若是加 –n 選項則顯示文件前n行

tail:

  後面直接跟文件名,則顯示文件最後十行。若是加-n 選項則顯示文件最後n行。

cd:

  切換目錄
格式:
  cd 目錄路徑

  • 返回上一次所在的目錄:  cd - 或者 cd $OLDPWD
  • 切換到主目錄:   cd ~
touch:

  建立文件
格式:
  touch 文件名

mv:

  移動或者重命名

cp:

  複製

mkdir:

  新建文件夾
建立多級目錄:

# -p 目錄存在就忽略,不存在就建立
$ mkdir -p aaa/bbb/ccc

# 按日期時間建立多級目錄
$ mkdir `date +"%Y-%m-%d"`/`date "+%H-%M"`
rmdir:

  刪除文件夾

rm:

  刪除文件夾或者文件
Ps:這個命令使用的時候,要特別當心(打醒12分精神來使用它); 不然,很容易就從刪庫到跑路.

參數 簡寫參數 描述
--dir -d
--force -f 強制刪除, 無需確認
--recursive -R 或者 -r 遞歸刪除子目錄
-i 在刪除前須要確認
-I 在刪除超過三個文件或者遞歸刪除前要求確認。此選項比-i 提
示內容更少,但一樣能夠阻止大多數錯誤發生
--no-preserve-root 不特殊對待 "/"
--preserve-root 不容許刪除"/"(默認)

清空文件夾(不刪除):  rm -rf 文件夾路徑/ 文件夾路徑/.

file:

  查看文件類型

ls:

  列出路徑下面的文件夾和文件

參數 簡寫 功能
--all -a 全部文件夾和文件(包括隱藏的文件夾和文件,默認不顯示隱藏的文件夾和文件)
-1 豎立輸出文件夾和文件名稱
-l 文件夾或者文件的長清單

顯示隱藏文件/文件夾
  1.隱藏文件/文件夾以點開始.
  2.因此咱們能夠用ls .* 來顯示。可是默認狀況下,若是是目錄,會顯示目錄包含的文件,此時能夠用-d來避免 表示只顯示第一層。
命令:
    ls -d .*

du 查看文件/文件夾空間:

  du命令的英文全稱是「Disk Usage」,即用於查看磁盤佔用空間的意思。可是與df命令不一樣的是du命令是對文件和目錄磁盤使用的空間的查看,而不是某個分區.

語法格式:du [參數] [文件]

經常使用參數:

參數 簡寫參數 描述
-all -a 顯示目錄中全部文件大小
-k 以KB爲單位顯示文件大小
-m 以MB爲單位顯示文件大小
-g 以GB爲單位顯示文件大小
--human-readable -h 以易讀方式顯示文件大小
--summarize -s 僅顯示總計
--max-depth -d 最大目錄深度
--time show time of last modification of any file in the directory
--total -c produce a grand total
--version display version information
--help 輸出 du 命令的幫助文檔
df 顯示磁盤空間使用狀況:

  df命令的英文全稱即「Disk Free」,顧名思義功能是用於顯示系統上可以使用的磁盤空間。默認顯示單位爲KB,建議使用「df -h」的參數組合,根據磁盤容量自動變換合適的單位,更利於閱讀.
  df 能夠查看一級文件夾大小、使用比例、檔案系統及其掛入點,但對文件卻無能爲力.
  平常廣泛用該命令能夠查看磁盤被佔用了多少空間、還剩多少空間等信息.

語法格式: df [參數] [指定文件]

查找

find:

find指令怎麼過濾掉沒有查看權限的文件: find 路徑 -name 文件名 2>/dev/null

open:

  open 命令用於打開文件(files)或者目錄

參數:

參數 描述
-a a 就是 application, 指定用於打開文件/目錄的應用程序
-b 指定應用程序在打開文件時要使用的包標識符
-e 用/Applications/TextEdit打開文件
-t 使文件用默認的文本編輯器打開,經過LaunchServices肯定
-f 從標準輸入讀取輸入,並在默認文本編輯器中打開結果。經過發送EOF字符結束輸入(類型Control-D)。
對於管道輸出打開和在默認文本編輯器中打開它也頗有用
-F 打開應用程序 「fresh」,也就是說,不恢復窗口。保存的持久狀態會丟失,未命名的文檔除外
-W 致使open等待,直到它打開的(或已經打開的)應用程序退出。帶-n標誌使用時,容許打開到函數做爲$EDITOR環境變量的適當應用程序
-R 顯示查找程序中的文件,而不是打開它們。
-n 打開應用程序的一個新實例,即便一個實例已經在運行
-g 不把應用程序帶到前臺
-j 啓動隱藏的應用程序
-h 搜索標題位置,尋找名稱與給定字符串匹配的標題,而後打開它。傳遞一個完整的頭名稱(好比NSView.h)以提升性能
-s -h,部分或所有SDK名稱使用;若是提供了參數值,則只搜索名稱中包含參數值的sdk。不然,使用每一個平臺中版本最高的SDK
--args 全部剩下的參數都經過argv參數傳遞給main()打開的應用程序。open工具沒有打開或解釋這些參數。
--stdin 啓動應用程序,並將stdin鏈接到PATH
--stdout 啓動應用程序,並將stdout鏈接到PATH
--stderr 啓動應用程序,並將stderr鏈接到PATH

技巧:

$ # 命令行打開目錄 或者 命令行使用應用打開目錄或者文件,都是使用這個命令

$ # 打開當前目錄
$ open ./

$ # 使用 IDEA 打開目錄
$ # 第一種:(這一個種就是第二種的縮寫,對了雙引號,但少了空格的反斜槓,而且少了找到具體的執行的位置,推薦使用這種)
$ open -a "IntelliJ IDEA" ./
$ # 第二種: 
$ # (這種是經過 Applications 下面的安裝了的應用程序的打開路徑,進行執行的, 不推薦使用這種,由於要找到具體執行的命令文件,這裏 Contents 後面的執行文件位置是我本身找出來的, 其餘應用程序的位置不必定在MacOS下面,也不必定名字很好認。例如: Sublime Text 是在 SharedSupport\bin 下面叫 subl的執行文件)
$ open -a /Applications/IntelliJ\ IDEA.app/Contents/MacOS/idea

使用技巧:

獲取當前目錄名稱:

# 第一種方法: 使用 basename 命令, 嵌套 pwd
$ echo $(basename `pwd`)

# 第二種方法: 使用字符串刪除, 貪婪匹配
$ echo ${PWD##*/}

顯示當前目錄完整路徑:  pwd
查看安裝目錄路徑:  which 軟件名等
查看當前系統中全部可登陸shell的類型:  cat /etc/shells
查看正在運行shell的類型:  echo $SHELL 或者 echo $0
切換shell使用:

chsh -s shell位置路徑
    # 這樣切換後,echo $SHELL 輸出的依舊是以前的 shell, 這裏要用 su 從新登陸一下用戶

查看某個用戶的Shell類型:

以root爲例,執行 cat /etc/passwd | grep ^root 最後一個:號字段顯示的即爲root用戶的登陸shell類型,爲bash

查看shells 執行過的文件記錄:  history
查看文件內容時候過濾空行和 # 註釋:

# '^$' 空行
# "|#" 將帶有 # 的行號去掉
# -E 將範本樣式爲延伸的普通表示法來使用,意味着使用能使用擴展正則表達式
# -v 反轉查找
$ cat 文件名 | grep -Ev "^$|#"

上面仍是匹配不夠好,下面是第二個版本的匹配

# "\ " 是匹配空格,
# * 匹配前面0個或者多個
$ cat 文件名 | grep -Ev "^$|^#|^\ *#|^\ *//"

MacOS:

快捷鍵:

清屏:  command(⌘) + k
刪除整行:  control(⌃) + c

相關文章
相關標籤/搜索