方便的 Bash 終端技巧大集合

文章轉發自專業的Laravel開發者社區,原始連接:learnku.com/laravel/t/3…php

Bash 集合

我很高興你在這裏!幾年前我從事生物信息學方面的研究工做。對那些簡單的 bash 命令感到驚訝,他們比個人枯燥腳本快不少。經過學習命令行的快捷方式和腳本幫助我節省了不少時間。近年來,我從事雲計算相關的工做,並在這裏繼續記錄那些有用的命令。而且我在努力的使他們簡短並且迅速。我主要使用 Ubuntu,RedHat ,Linux Mint 以及 CentOS 系統,若是命令在您的系統上不生效,那麼我很抱歉。html

該博客將重點介紹我從工做以及 LPIC 的考試中得到的用於解析數據和 Linux 系統維護的簡單命令,可是他們可能來自於親愛的 Google 和 Stackoverflow。node

英語和 bash 並非個人母語,請隨時糾正我,謝謝。若是你知道其餘有趣的命令,請教教我。python

這是更新潮的版本Bash-Oneliner~linux

方便的 bash 一行命令

終端技巧

使用 Ctrl 鍵
Ctrl + n : 相似向下的鍵
Ctrl + p : 相似向上的鍵
Ctrl + r : 反向搜索命令的歷史記錄(按住 Ctrl + r )
Ctrl + s : 終端中止輸出.(譯者注:如 apt / yum,nload,watch 等,按 Enter 繼續輸出)
Ctrl + q : 在 Ctrl + s 以後從新恢復以前的 terminal.
Ctrl + a : 移動光標到行的開始處
Ctrl + e : 移動光標到行的結尾處
Ctrl + d : 若是當前的 terminal 命令行有輸入,Ctrl + d 或刪除光標處的字符,不然會退出當前的 terminal
Ctrl + k : 刪除從當前光標到結尾的全部字符
Ctrl + x + backspace : 刪除當前光標到行開始的全部字符
Ctrl + t : 交換當前光標下的字符和其前面字符的位置。Esc + t 交換光標前面的兩個單詞
Ctrl + w : 剪切光標以前的單詞,而後 Ctrl + y 粘貼它
Ctrl + u : 剪切光標以前的行; 而後 Ctrl + y 粘貼它
Ctrl + _ : 撤銷以前的操做
Ctrl + l : 至關於清除
Ctrl + x + Ctrl + e : 召喚起 $EDITOR 環境變量設置的編輯器程序,對多行命令有效

複製代碼
更改大小寫
Esc + u
# 將文本從光標的開始到結尾的單詞轉換爲大寫
Esc + l
# 將文本從光標的開始到結尾的單詞轉換爲小寫
Esc + c
# 將光標下的字母轉換爲大寫
複製代碼
運行歷史記錄編號 (例如 e.g. 53)
!53
複製代碼
運行最後一條命令
!!
複製代碼
運行最後一個命令而且使用參入號替換以前運行的參數(例如最後一個命令 : echo 'aaa' -> 如今運行: echo 'bbb')
#最後的一條命令: echo 'aaa'
^aaa^bbb

#echo 'bbb'
#bbb

#注意只有惟一的第一個 aaa 將會被替代,若是你想替代全部的 aaa,使用「:&」替代:
^aaa^bbb^:&
#或者
!!:gs/aaa/bbb/

複製代碼
運行以開頭的命令 (e.g. cat 文件名)
!cat
# 或者
!c
#再次運行cat文件名
複製代碼
Bash 通配符
# '*' 用做文件名擴展的 "通配符" 。
/b?n/?at      #/bin/cat

# '?' 用做文件名擴展的單字符 "通配符" 。
/etc/pa*wd    #/etc/passwd

# ‘[]’ 用於匹配範圍內的字符。
ls -l [a-z]*   #列出全部文件名中帶有字母的文件。

# ‘{}’ 可用於匹配多個模式的文件名 
ls {*.sh,*.py}   #列出全部.sh和.py文件
複製代碼
一些方便的環境變量
$0   :shell或shell腳本的名稱。
$1, $2, $3, ... :位置參數。
$#   :位置參數的數量。
$?   :最新的管道退出狀態。
$-   :爲shell設置的當前選項。
$$   :當前shell(不是subshell)的pid。
$!   :最新後臺命令的PID。

$DESKTOP_SESSION     當前顯示管理器
$EDITOR   首選文本編輯器。
$LANG   當前語言。
$PATH   搜索可執行文件的目錄列表(即準備運行的程序)
$PWD    當前目錄
$SHELL  當前 shell
$USER   當前用戶名
$HOSTNAME   當前主機名
複製代碼

篩選

[返回頂部]ios

篩選類型
grep = grep -G # Basic Regular Expression (BRE)
fgrep = grep -F # fixed text, ignoring meta-charachetrs
egrep = grep -E # Extended Regular Expression (ERE)
pgrep = grep -P # Perl Compatible Regular Expressions (PCRE)
rgrep = grep -r # recursive
複製代碼
篩選並計算空行數
grep -c "^$"
複製代碼
篩選且僅返回整數
grep -o '[0-9]*'
#or
grep -oP '\d'
複製代碼
篩選帶必定位數的整數(例如3)
grep ‘[0-9]\{3\}’
# or
grep -E ‘[0-9]{3}’
# or
grep -P ‘\d{3}’
複製代碼
篩選僅IP地址
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
# or
grep -Po '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
複製代碼
篩選整個單詞(例如 「target」 )
grep -w 'target'

#or using RE
grep '\btarget\b'
複製代碼
篩選匹配先後返回的行(例如「bbo」)
# return also 3 lines after match
grep -A 3 'bbo'

# return also 3 lines before match
grep -B 3 'bbo'

# return also 3 lines before and after match
grep -C 3 'bbo'
複製代碼
查找開始字符(例如「S」)
grep -o 'S.*'
複製代碼
單詞中截取文本(例如 w1,w2 )
grep -o -P '(?<=w1).*(?=w2)'
複製代碼
查找不包含單詞的行(例如 bbo )
grep -v bbo filename
複製代碼
查找不以某字符串開頭的行(例如 # )
grep -v '^#' file.txt
複製代碼
查找變量(例如 bbo="some strings" )
grep "$boo" filename
#remember to quote the variable!
複製代碼
查找僅有一個或者第一個匹配(例如 bbo )
grep -m 1 bbo filename
複製代碼
查找並返回匹配的行數(例如 bb )
grep -c bbo filename
複製代碼
出現次數 (例如一行出現3次則記爲3次)
grep -o bbo filename |wc -l
複製代碼
區分大小寫查找(例如 bbo/BBO/Bbo )
grep -i "bbo" filename
複製代碼
匹配顏色標記(例如 bbo )
grep --color bbo filename
複製代碼
查找文件夾內全部文件(例如 bbo )
grep -R bbo /path/to/directory
# or
grep -r bbo /path/to/directory
複製代碼
查找文件夾內全部文件,不輸出文件名(例如 bbo )
grep -rh bbo /path/to/directory
複製代碼
查找文件夾內全部文件,輸出匹配的文件名(例如 bbo )
grep -rl bbo /path/to/directory
複製代碼
或查找(例如 A 或 B 或 C 或 D )
grep 'A\|B\|C\|D'

複製代碼
與查找(例如 A 與 B )
grep 'A.*B'
複製代碼
正則匹配任意字符(例如 ACB 或 AEB )
grep 'A.B'
複製代碼
正則匹配一個肯定或者不肯定的字符(例如 color 或 colour )
grep ‘colou?r’
複製代碼
在文件B中查找文件A的內容
grep -f fileA fileB
複製代碼
查找製表符
grep $'\t'
複製代碼
在一個變量中查找另外一個變量
$echo "$long_str"|grep -q "$short_str"
if [ $? -eq 0 ]; then echo 'found'; fi
#grep -q will output 0 if match found
#remember to add space between []!
複製代碼
查找括號內的內容
grep -oP '\(\K[^\)]+'
複製代碼
數字字符範圍查找(例如 AAEL0000-RA )
grep -o -w "\w\{10\}\-R\w\{1\}"
# \w 文字字符 [0-9a-zA-Z_] \W 非文字字符
複製代碼
跳過文件目錄(例如 bbo )
grep -d skip 'bbo' /path/to/files/*
複製代碼

流編輯器

[返回頂部]laravel

刪除第一行
sed 1d filename
複製代碼
刪除前100行(刪除第1-100行)
sed 1,100d filename
複製代碼
刪除帶字符串的行(例如: bbo)
sed "/bbo/d" filename
- case insensitive:
sed "/bbo/Id" filename
複製代碼
刪除第n個字符不等於值的行(例如第5個字符不等於2)
sed -E '/^.{5}[^2]/d'
#aaaa2aaa (you can stay)
#aaaa1aaa (delete!)
複製代碼
編輯內嵌(編輯並保存)
sed -i "/bbo/d" filename
複製代碼
使用變量(例如$i)時,請使用雙引號" "
# e.g. add >$i to the first line (to make a bioinformatics FASTA file)
sed "1i >$i"
# notice the double quotes! in other examples, you can use a single quote, but here, no way!
# '1i' means insert to first line
複製代碼
同時使用環境變量和尾符號
# 使用反斜槓 $ 符,同時使用雙引號來標記變量
sed -e "\$s/\$/\n+--$3-----+/"
複製代碼
刪除空行
sed '/^\s*$/d'

# 或

sed '/^$/d'
複製代碼
刪除最後一行
sed '$d'
複製代碼
刪除文件的最後一個字符
sed -i '$ s/.$//' filename
複製代碼
文件頭部添加字符(例如『[』)
sed -i '1s/^/[/' file
複製代碼
指定的行增長字符串(例如添加「 something 」到第1行和第3行)
sed -e '1isomething -e '3isomething'
複製代碼
添加字符串到文件的結尾(例如『]』)
sed '$s/$/]/' filename
複製代碼
添加新行到結尾
sed '$a\'
複製代碼
添加字符串到沒一行(例如 bbo)
sed -e 's/^/bbo/' file
複製代碼
添加字符串到沒一行的結尾(例如『}』)
sed -e 's/$/\}\]/' filename
複製代碼
每第n個字符添加 \n (例如每四個字符t添加 \n)
sed 's/.\{4\}/&\n/g'
複製代碼
使用分隔符和下一行 鏈接/結合/合併文件。例如(用「,」去分割)
sed -s '$a,' *.json > all.json
複製代碼
替換(例如用 B 去替換 A)
sed 's/A/B/g' filename
複製代碼
使用通配符進行替換(例如 aaa = 開頭的行替換成 aaa=/my/new/path)
sed "s/aaa=.*/aaa=\/my\/new\/path/g"
複製代碼
選擇以字符串開頭的行(例如 bbo)
sed -n '/^@S/p'
複製代碼
刪除帶有字符串的行
sed '/bbo/d' filename
複製代碼
打印/獲取/截取必定範圍內的行(例如500-5000之間)
sed -n 500,5000p filename
複製代碼
每 n 行打印一次
sed -n '0~3p' filename

# catch 0: start; 3: step
複製代碼
打印全部奇數行
sed -n '1~2p'
複製代碼
每隔三行打印一次,包括第一行
sed -n '1p;0~3p'
複製代碼
刪除前導空格和製表符
sed -e 's/^[ \t]*//'
# Notice a whitespace before '\t'!!
複製代碼
只刪除前導空格
sed 's/ *//'

# 注意'*'前的空格!!
複製代碼
刪除結尾逗號
sed 's/,$//g'
複製代碼
在結尾添加一列
sed "s/$/\t$i/"
# $i 是你要添加的值

# 將文件名添加到文件的最後一列
for i in $(ls);do sed -i "s/$/\t$i/" $i;done
複製代碼
將文件的擴展名添加到最後一列
for i in T000086_1.02.n T000086_1.02.p;do sed "s/$/\t${i/*./}/" $i;done >T000086_1.02.np
複製代碼
刪除換行符
sed ':a;N;$!ba;s/\n//g'
複製代碼
打印某一行(例如: 第 123 行)
sed -n -e '123p'
複製代碼
打印若干行(例如: 第 10 行到第 33 行)
sed -n '10,33p' <filename
複製代碼
改變分隔符
sed 's=/=\\/=g'
複製代碼
使用通配符替換 (例如: A-1-eA-2-e 或者 A-3-e ....)
sed 's/A-.*-e//g' filename
複製代碼
刪除文件的最後一個字符
sed '$ s/.$//'
複製代碼
在文件的指定位置插入字符(例如: AAAAAA—> AAA#AAA)
sed -r -e 's/^.{3}/&#/' file
複製代碼

Awk

[返回頂部]git

設置 tab 爲分隔符
awk -F $'\t'
複製代碼
設置 tab 爲輸出字段分隔符
awk -v OFS='\t'
複製代碼
傳遞變量
a=bbo;b=obb;
awk -v a="$a" -v b="$b" "$1==a && $10=b" filename
複製代碼
輸出行號和每行的字符數
awk '{print NR,length($0);}' filename
複製代碼
輸出列數
awk '{print NF}'
複製代碼
調整列輸出順序
awk '{print $2, $1}'
複製代碼
檢查列中字符是否含有逗號(例如檢查第一列)
awk '$1~/,/ {print}'
複製代碼
切割字符,並循環輸出
awk '{split($2, a,",");for (i in a) print $1"\t"a[i]}' filename
複製代碼
在某個字符出現次數少於N次時,打印數據 (例如在 bbo 出現7次以後,中止輸出數據)
awk -v N=7 '{print}/bbo/&& --N<=0 {exit}'
複製代碼
輸出目錄下全部爲文件名和每一個文件的最後一行
ls|xargs -n1 -I file awk '{s=$0};END{print FILENAME,s}' file
複製代碼
在列的前面加字符 (例如在第三列前面加「chr」)
awk 'BEGIN{OFS="\t"}$3="chr"$3'
複製代碼
刪除含有字符的行 (例如刪除含有 bbo 的行)
awk '!/bbo/' file
複製代碼
刪除最後一列
awk 'NF{NF-=1};1' file
複製代碼
NR 和 FNR 的用法
# 例如如下2個文件:
# fileA:
# a
# b
# c
# fileB:
# d
# e
awk 'print FILENAME, NR,FNR,$0}' fileA fileB
# fileA    1    1    a
# fileA    2    2    b
# fileA    3    3    c
# fileB    4    1    d
# fileB    5    2    e
複製代碼
邏輯與
# 好比下面這兩個文件:
# 文件 A:
# 1    0
# 2    1
# 3    1
# 4    0
# 文件 B:
# 1    0
# 2    1
# 3    0
# 4    1

awk -v OFS='\t' 'NR=FNR{a[$1]=$2;next} NF {print $1,((a[$1]=$2)? $2:"0")}' fileA 文件 B
# 1    0
# 2    1
# 3    0
# 4    0
複製代碼
將文件中全部的數字進行四捨五入操做
awk '{while (match($0, /[0-9]+\[0-9]+/)){
    \printf "%s%.2f", substr($0,0,RSTART-1),substr($0,RSTART,RLENGTH)
    \$0=substr($0, RSTART+RLENGTH)
    \}
    \print
    \}'
複製代碼
給每一行編碼/索引
awk '{printf("%s\t%s\n",NR,$0)}'
複製代碼
將列數據分解爲行
#例如分開一下內容:
# David    cat,dog
# into
# David    cat
# David    dog

awk '{split($2,a,",");for(i in a)print $1"\t"a[i]}' file

# 詳情介紹請點擊這裏:&emsp;http://stackoverflow.com/questions/33408762/bash-turning-single-comma-separated-column-into-multi-line-string
複製代碼
平均一個文件(每一行只能包含一個數字)
awk '{s+=$1}END{print s/NR}'
複製代碼
以字符串開始打印字段(例如 Linux)
awk '$1 ~ /^Linux/'
複製代碼
排序一行數字 (例如 1 40 35 12 23 --> 1 12 23 35 40)
awk ' {split( $0, a, "\t" ); asort( a ); for( i = 1; i <= length(a); i++ ) printf( "%s\t", a[i] ); printf( "\n" ); }'
複製代碼
減去以前的行值(column6,它等於column4減去最後一列5)
awk '{$6 = $4 - prev5; prev5 = $5; print;}'
複製代碼

Xargs

[回到頂部]程序員

將選項卡設置爲分隔符(默認:空格)
xargs -d\t
複製代碼
每行顯示三個項目
echo 1 2 3 4 5 6| xargs -n 3
# 1 2 3
# 4 5 6

複製代碼
提示在執行以前
echo a b c |xargs -p -n 3
複製代碼
打印命令和輸出
xargs -t abcd
# bin/echo abcd
# abcd

複製代碼
查找且刪除
find . -name "*.html"|xargs rm

# when using a backtick
rm `find . -name "*.html"`
複製代碼
刪除文件名中有空格的文件(例如 「hello 2001」)
find . -name "*.c" -print0|xargs -0 rm -rf
複製代碼
顯示限制
xargs --show-limits
複製代碼
從文件夾中移除文件
find . -name "*.bak" -print 0|xargs -0 -I {} mv {} ~/old

# or
find . -name "*.bak" -print 0|xargs -0 -I file mv file ~/old
複製代碼
將第100個文件移到另外一個目錄
ls |head -100|xargs -I {} mv {} d1
複製代碼
平行
time echo {1..5} |xargs -n 1 -P 5 sleep

# a lot faster than:
time echo {1..5} |xargs -n1 sleep
複製代碼
將全部文件從 A 複製到 B
find /dir/to/A -type f -name "*.py" -print 0| xargs -0 -r -I file cp -v -p file --target-directory=/path/to/B

# v: verbose|
# p: keep detail (e.g. owner)
複製代碼
sed 相關
ls |xargs -n1 -I file sed -i '/^Pos/d' filename
複製代碼
在文件的第一行增長文件的名稱
ls |sed 's/.txt//g'|xargs -n1 -I file sed -i -e '1 i\>file\' file.txt
複製代碼
統計全部的文件
ls |xargs -n1 wc -l
複製代碼
將輸出變成一行
ls -l| xargs
複製代碼
對目錄中的文件進行統計
echo mso{1..8}|xargs -n1 bash -c 'echo -n "$1:"; ls -la "$1"| grep -w 74 |wc -l' --
# "--" 信號選項結束,並進一步進行選項的處理
複製代碼
計算全部文件中的行數,也統計總行數。
ls|xargs wc -l
複製代碼
Xargs 以及 grep 命令
cat grep_list |xargs -I{} grep {} filename
複製代碼
Xargs 和 sed 命令 (將全部舊的 ip 地址替換成在 etc 文件下面新的 ip 地址)
grep -rl '192.168.1.111' /etc | xargs sed -i 's/192.168.1.111/192.168.2.111/g'
複製代碼

Find(查詢)

[返回頂部]github

列出當前目錄中的全部子目錄/文件
find .
複製代碼
列出當前目錄下的全部文件
find . -type f
複製代碼
列出當前文件下的全部目錄
find . -type d
複製代碼
編輯當前目錄下的全部文件(例如,將「www」替換爲「ww」)
find . -name '*.php' -exec sed -i 's/www/w/g' {} \;

# 若是沒有子目錄
replace "www" "w" -- *
# a space before *
複製代碼
查詢文件 並 打印文件名(例如 「mso」)
find mso*/ -name M* -printf "%f\n"
複製代碼
查找 並 刪除 文件大小 小於(例如74字節)的文件
find . -name "*.mso" -size -74c -delete

# M 表明 MB, 等等
複製代碼

Condition and loop (條件與循環)

[返回頂部]

If 語句
# 使用 if 和 else 來進行條件判斷 
if [[ "$c" == "read" ]]; then outputdir="seq"; else outputdir="write" ; fi

# 判斷myfile是否包含字符串「test」
if grep -q hello myfile; then …

# 判斷mydir 是不是一個目錄, 修改 mydir 的內容 而且 執行其餘操做:
if cd mydir; then
  echo 'some content' >myfile
else
  echo >&2 "Fatal error. This script requires mydir."
fi

# 判斷 variable(變量)  是否爲空
if [ ! -s "myvariable" ]
#返回指定對象的長度  若是是 "字符串"  返回 0.

# 判斷文件是否存在
if [ -e 'filename' ]
then
  echo -e "file exists!"
fi

# 判斷 myfile 文件是否存在   或者  myfile 鏈接是否存在 
if [ -e myfile ] || [ -L myfile ]
then
  echo -e "file exists!"
fi

# 判斷 變量 x  是否大於 等於 5
if [ "$x" -ge 5 ]; then …

#  在 bash/ksh/zsh 中 判斷 變量 x 是否大於等於 5,:
if ((x >= 5)); then …

# 使用  (( ))(雙括號) 進行數學運算  將u+2的計算結果賦值給  j 
if ((j==u+2))

# 使用 [[ ]](雙中括號)  進行數值比較   在[[]] 中 會將 特殊符號 自動轉換爲 比較符號 (例如  = 轉換爲 == )  
if [[ $age -gt 21 ]]
複製代碼

More if commands

For 語法
for i in $(ls); do echo file $i;done
#或者
for i in *; do echo file $i; done

# 按任意鍵繼續執行遍歷
for i in $(cat tpc_stats_0925.log |grep failed|grep -o '\query\w\{1,2\}');do cat ${i}.log; read -rsp $'Press any key to continue...\n' -n1 key;done

# 當按下一個鍵會逐行打印文件
oifs="$IFS"; IFS=$'\n'; for line in $(cat myfile); do ...; done
while read -r line; do ...; done <myfile

# If only one word a line, simply ( 遍歷文件內容 一行一行的遍歷)
for line in $(cat myfile); do echo $line; read -n1; done

#遍歷一個數組
for i in "${arrayName[@]}"; do echo $i;done

複製代碼
While 語句,
# 文件的列減法 (例如 a 3 columns file)
while read a b c; do echo $(($c-$b));done < <(head filename)
#在兩個 "<" 的中間有個空格 

# 彙總 列 減法
i=0; while read a b c; do ((i+=$c-$b)); echo $i; done < <(head filename)

# 繼續檢查正在運行的進程(例如perl),並在啓動後當即啓動另外一個新進程(例如python)。 (最好使用wait命令!Ctrl + F " wait")
while [[ $(pidof perl) ]];do echo f;sleep 10;done && python timetorunpython.py
複製代碼
switch (case in bash)
read type;
case $type in
  '0')
    echo 'how'
    ;;
  '1')
    echo 'are'
    ;;
  '2')
    echo 'you'
    ;;
esac
複製代碼

變量

[返回頂部]

引號內變量解析
# foo=bar
 echo "'$foo'"
#'bar'
# 單引號/雙引號  quotes around single quotes make the inner single quotes expand variables(在單引號內使用變量 變量會被解析)
複製代碼
獲取變量長度
var="some string"
echo ${#var}
# 11
複製代碼
獲取變量的第一個字節
var=string
echo "${var:0:1}"
#s

# or
echo ${var%%"${var#?}"}
複製代碼
從第一位 或最後一位 開始刪除變量中的 n 個字節
var="some string"
echo ${var:2}
#me string
複製代碼
替換 (例如. 刪除第一個位置的 0 )
var="0050"
echo ${var[@]#0}
#050
複製代碼
替換全部 (例如. 將 字符"a" 替換爲 字符",")
{var/a/,}
複製代碼
# 使用 grep 
 test="god the father"
 grep ${test// /\\\|} file.txt
 # turning the space into 'or' (\|) in grep (在grep 的空間中將 替換   or 和 (\|) )
複製代碼
將變量中的字符串改成小寫(參數擴展)
var=HelloWorld
echo ${var,,}
helloworld
複製代碼
Expand and then execute variable/argument (先執行腳本進行賦值 再輸出變量內容)
cmd="bar=foo"
eval "$cmd"
echo "$bar" # foo
複製代碼

數學

[back to top]

bash中的算術展開 (運算符: +, -, *, /, %, 等等)
#總結: a++ 先運算a,後a的值加1;++a,則相反,先加一,再參與運算。同理a--,與--a
echo $(( 10 + 5 ))  #15
x=1
echo $(( x++ )) #1 , 注意它仍然是1,由於它是後遞增的
echo $(( x++ )) #2
echo $(( ++x )) #4 , 注意,它不是3,由於它是預增量
echo $(( x-- )) #4
echo $(( x-- )) #3
echo $(( --x )) #1
x=2
y=3
echo $(( x ** y )) #8
複製代碼
打印出一個數的質因數 (好比: 50)
factor 50
複製代碼
用於產生從某個數到另一個數之間的全部整數。 (好比: seq 10)
seq 10|paste -sd+|bc
複製代碼
彙總一個文件(文件中每行僅包含一個數字)
awk '{s+=$1} END {print s}' filename
複製代碼
列減法
cat file| awk -F '\t' 'BEGIN {SUM=0}{SUM+=$3-$2}END{print SUM}'
複製代碼
用expr進行簡單數學運算
expr 10+20 #30
expr 10\*20 #600
expr 30 \> 20 #1 (true)
複製代碼
更多關於BC的數學運算
# 小數位數/有效數字
echo "scale=2;2/3" | bc
#.66

# 指數運算符
echo "10^2" | bc
#100

# 使用變量
echo "var=5;--var"| bc
#4
複製代碼

Time

[back to top]

返回執行命令所需的時間
time echo hi
複製代碼
等待一段時間(例如10秒)
sleep 10
複製代碼
在一段時間後註銷你的賬戶(例如10秒)
TMOUT=10
# 一旦你設置了這個變量,註銷計時器開始運行!
複製代碼
設置您要運行命令的時長
# 僅僅運行 `sleep 10` 一秒。
timeout 1 sleep 10
複製代碼
設置什麼時候要運行命令(例如,從如今開始 1分鐘)
at now + 1min  # 時間單位能夠是 minutes, hours, days, 或 weeks
⚠️: 命令將使用 /bin/sh
at> echo hihigithub >~/itworks
at> <EOT>   # 按 Ctrl + D 退出
job 1 at Wed Apr 18 11:16:00 2018
複製代碼

Download

[回到頂部]

下載此README.md的內容 (你正在看的內容)
curl https://raw.githubusercontent.com/onceupon/Bash-Oneliner/master/README.md | pandoc -f markdown -t man | man -l -

# 或者 w3m (一種基於文本的瀏覽器和呼叫器)
curl https://raw.githubusercontent.com/onceupon/Bash-Oneliner/master/README.md | pandoc | w3m -T text/html

# 或者使用emacs (在emac文本編輯器中)
emacs --eval '(org-mode)' --insert <(curl https://raw.githubusercontent.com/onceupon/Bash-Oneliner/master/README.md | pandoc -t org)

# 或者使用 emacs (在終端上先按Ctrl+x,再按Ctrl+c退出)
emacs -nw --eval '(org-mode)' --insert <(curl https://raw.githubusercontent.com/onceupon/Bash-Oneliner/master/README.md | pandoc -t org)
複製代碼
從一個頁面上下載所有內容
wget -r -l1 -H -t1 -nd -N -np -A mp3 -e robots=off http://example.com

# -r: recursive and download all links on page遞歸併下載頁面上全部連接
# -l1: only one level link僅一級連接
# -H: span host, visit other hosts跨越主機,訪問其餘主機
# -t1: numbers of retries重試次數
# -nd: don't make new directories, download to here不要建立新目錄,下載到這裏
# -N: turn on timestamp打開時間戳
# -nd: no parent沒有父級
# -A: type (separate by ,)類型(以,豆號分隔)
# -e robots=off: ignore the robots.txt file which stop wget from crashing the site, sorry example.com忽略robots.txt文件,該文件阻止wget使網站崩潰,抱歉example.com
複製代碼
將文件上傳到web並下載 (transfer.sh/)
#  上傳文件 (例如: filename.txt):
curl --upload-file ./filename.txt https://transfer.sh/filename.txt
# 上面的命令將返回一個url,例如:https://transfer.sh/tG8rM/filename.txt

# 接下來您能夠經過如下方式下載它:
curl https://transfer.sh/tG8rM/filename.txt -o filename.txt
複製代碼
下載文件(若有須要)
data=file.txt
url=http://www.example.com/$data
if [ ! -s $data ];then
    echo "downloading test data..."
    wget $url
fi
複製代碼
Wget 命令獲取文件名 (當文件名很長時)
wget -O filename "http://example.com"
複製代碼
Wget命令 將文件保存到文件夾
wget -P /path/to/directory "http://example.com"
複製代碼
指示curl遵循任何重定向,直到到達最終目的地:
curl -L google.com
複製代碼

隨機

[back to top]

隨機生成密碼(例如,生成5個長度爲13的密碼)
sudo apt install pwgen
pwgen 13 5
#sahcahS9dah4a xieXaiJaey7xa UuMeo0ma7eic9 Ahpah9see3zai acerae7Huigh7
複製代碼
從文件中隨機選擇100行
shuf -n 100 filename
複製代碼
隨機排序
for i in a b c d e; do echo $i; done| shuf
複製代碼
隨機選擇在必定範圍內的數字(例如,從0-100 內隨機選擇15個數字)
shuf -i 0-100 -n 15
複製代碼
產生一個隨機數
echo $RANDOM
複製代碼
產生一個0-9內的隨機數
echo $((RANDOM % 10))
複製代碼
產生一個1-10內的隨機數
echo $(((RANDOM %10)+1))
複製代碼

Xwindow

[回到頂部]

X11 GUI 應用程序! 若是你對純文本的環境感到厭煩,這裏有一些適合你的 GUI 工具。

啓用 X11 轉發,以便在服務器上使用圖形應用程序。
ssh -X user_name@ip_address

# 或者經過 xhost 設置
# --> Install the following for Centos:
# xorg-x11-xauth
# xorg-x11-fonts-*
# xorg-x11-utils
複製代碼
小 xwindow 工具
xclock
xeyes
xcowsay
複製代碼
從 ssh 服務器中打開圖片/圖像
1\. ssh -X user_name@ip_address
2. apt-get install eog
3. eog picture.png
複製代碼
在服務器上觀看視頻
1\. ssh -X user_name@ip_address
2. sudo apt install mpv
3. mpv myvideo.mp4
複製代碼
在服務器上使用 gedit (GUI 編輯)
1\. ssh -X user_name@ip_address
2. apt-get install gedit
3. gedit filename.txt
複製代碼
從 ssh 服務器上打開 PDF
1\. ssh -X user_name@ip_address
2. apt-get install evince
3. evince filename.pdf
複製代碼
從 ssh 服務器上使用谷歌瀏覽器
1\. ssh -X user_name@ip_address
2. apt-get install libxss1 libappindicator1 libindicator7
3. wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
4. sudo apt-get install -f
5. dpkg -i google-chrome*.deb
6. google-chrome
複製代碼

系統

[back to top]

跟蹤服務的最新日誌
journalctl -u <service_name> -f
複製代碼
消除殭屍進程
# 殭屍進程已經死了,因此你不能殺死它。您能夠消除經過殺死其父進程。
# 首先,找到殭屍進程的PID
ps aux| grep 'Z'
# 接下來發現殭屍的父進程的PID
pstree -p -s <zombie_PID>
# 而後你能夠殺死它的父進程,你會發現殭屍進程已經不見了。
sudo kill 9 <parent_PID>
複製代碼
顯示內存使用狀況
free -c 10 -mhs 1
# 每隔1秒打印10次
複製代碼
顯示設備和分區的CPU和IO統計信息。
#每秒刷新一次
iostat -x -t 1
複製代碼
顯示網絡接口上的帶寬使用狀況(例如 enp175s0f0)
iftop -i enp175s0f0
複製代碼
告知系統已運行多長時間以及用戶數量
uptime
複製代碼
檢查是不是root用戶運行
if [ "$EUID" -ne 0 ]; then
        echo "Please run this as root"
        exit 1
fi
複製代碼
更改shell用戶(例如: bonnie)
chsh -s /bin/sh bonnie
# /etc/shells: valid login shells
複製代碼
更改root/虛擬root/監獄 (e.g. 更改 root 爲 newroot)
chroot /home/newroot /bin/bash

# To exit chroot
exit
複製代碼
顯示文件(例如filename.txt)的文件狀態(大小;訪問、修改和更改時間等)
stat filename.txt
複製代碼
當前進程的快照
ps aux
複製代碼
顯示進程樹
pstree
複製代碼
找到的最大進程數
cat /proc/sys/kernel/pid_max
複製代碼
打印或控制內核環緩衝區
dmesg
複製代碼
查看ip地址
$ip add show

# or
ifconfig
複製代碼
打印之前和當前的 SysV 運行級別
runlevel

#或者
who -r
複製代碼
改變 SysV 運行級別 (例如修改成 5)
init 5
#或者
telinit 5
複製代碼
在全部運行級別上顯示全部可用的服務
chkconfig --list
# 至關於 ubntu 中 chkconfig 的 update-rc.d
複製代碼
查看系統的版本
cat /etc/*-release
複製代碼
Linux 程序員的手冊:文件系統的層次結構的說明
man hier
複製代碼
控制系統和服務管理器
#  檢查 cron 的狀態
systemctl status cron.service

#  中止一個 cron 服務
systemctl stop cron.service
複製代碼
任務列表
jobs -l
複製代碼
運行一個修改優先級的程序 (例如 ./test.sh)
# 較好的值在 -20 (最有利)到 19 之間調整
# 應用程序越好,優先級越低
# 默認值:10 ,默認優先級:80

nice -10 ./test.sh
複製代碼
導出路徑
export PATH=$PATH:~/path/you/want
複製代碼
讓文件可執行
chmod +x filename
# 如今你能夠執行 ./filename
複製代碼
打印系統信息
uname -a

# 檢查系統硬件平臺 (x86-64)
uname -i
複製代碼
上網
links www.google.com
複製代碼
增長用戶,設置密碼
useradd username
passwd username
複製代碼
編輯 bash 變量(例如顯示整個路徑)
1\. joe ~/.bash_profile
2. export PS1='\u@\h:\w\$'
# $PS1 是一個定義命令提示符外觀和樣式的變量
3\. source ~/.bash_profile
複製代碼
編輯環境設置 (例如 alias)
1\. joe ~/.bash_profile
2. alias pd="pwd" //no more need to type that 'w'!
3\. source ~/.bash_profile
複製代碼
打印全部的別名
alias -p
複製代碼
無別名 (例如別名 ls='ls --color=auto' 以後)
unalias ls
複製代碼
設置和取消設置 shell 選項
# 打印全部的 shell 選項
shopt

# 取消(或者中止)別名
shopt -u expand_aliases

# 設置(或者開始)別名
shopt -s expand_aliases
複製代碼
列出環境變量 (例如 PATH)
echo $PATH
#用冒號分隔的目錄列表
複製代碼
當前用戶全部環境變量列表
env
複製代碼
Unset 環境變量 (e.g. unset 變量 'MYVAR')
unset MYVAR
複製代碼
顯示區分格式
lsblk
複製代碼
通知系統分區表更改
partprobe
複製代碼
軟連接到 bin
ln -s /path/to/program /home/usr/bin
# 必須是程序的絕對路徑
複製代碼
顯示數據的十六進制視圖
hexdump -C filename.class
複製代碼
跳轉到其餘節點
rsh node_name
複製代碼
檢查端口(佔用的網絡端口)
netstat -tulpn
複製代碼
打印已解析的符號連接或着規範文件名
readlink filename
複製代碼
查找命令的類型及連接到的位置 (e.g. python)
type python
# python 是 /usr/bin/python
# 這裏有5中不一樣的類型,使用 'type -f' 標誌進行檢查
# 1\. alias    (shell alias)
# 2\. function (shell function, 也會打印函數主體)
# 3\. builtin  (shell builtin)
# 4\. file     (disk file)
# 5\. keyword  (shell reserved word)

# 你也可使用 `which`
which python
# /usr/bin/python
複製代碼
列出全部的函數名
declare -F
複製代碼
列出目錄的大小信息
du -hs .

# or
du -sb
複製代碼
複製使用權限目錄
cp -rp /path/to/directory
複製代碼
儲存當前目錄
pushd .

# then pop
popd

#或着使用dirs顯示當前所在目錄的列表。
dirs -l
複製代碼
顯示磁盤使用狀況
df -h

# 或者
du -h

#或者
du -sk /var/log/* |sort -rn |head -10
複製代碼
顯示當前運行狀態
runlevel
複製代碼
切換運行級別
init 3

#或者
telinit 3
複製代碼
永久修改運行級別
1\. edit /etc/init/rc-sysinit.conf
2. env DEFAULT_RUNLEVEL=2
複製代碼
切換 root 用戶
su
複製代碼
切換其餘用戶
su somebody
複製代碼
反饋用戶狀態信息
repquota -auvs
複製代碼
獲取數據庫中重要信息
getent database_name

# (e.g.  'passwd' 數據庫)
getent passwd
# 列出全部用戶賬戶(全部本地賬戶和LDAP)

# (e.g. 獲取用戶組列表)
getent group
# 在 'group' 數據庫保存
複製代碼
改變文件的權限
chown user_name filename
chown -R user_name /path/to/directory/
# 改變用戶組名稱
複製代碼
掛載和取消掛載
# 例如 掛載 /dev/sdb 到 /home/test
mount /dev/sdb /home/test

# 例如 取消掛載 /home/test
umount /home/test
複製代碼
列出當前掛載細節
mount
# 或者
df
複製代碼
列出當前用戶名和用戶編號
cat /etc/passwd
複製代碼
獲取全部的用戶名
getent passwd| awk '{FS="[:]"; print $1}'
複製代碼
展現全部的用戶
compgen -u
複製代碼
展現全部組
compgen -g
複製代碼
展現全部的用戶組
group username
複製代碼
顯示 uid,gid,用戶組
id username
複製代碼
檢測當前是不是 root
if [ $(id -u) -ne 0 ];then
    echo "You are not root!"
    exit;
fi
# 'id -u' output 0 if it's not root
複製代碼
找出 CPU 信息
more /proc/cpuinfo

# 或者
lscpu
複製代碼
爲用戶設置配額 (例如磁盤軟大小限制: 120586240; 硬限制: 125829120)
setquota username 120586240 125829120 0 0 /home
複製代碼
顯示用戶配額
quota -v username
複製代碼
顯示緩存中華當前庫
ldconfig -p
複製代碼
打印共享庫依賴項 (例如 for 'ls')
ldd /bin/ls
複製代碼
檢查用戶登陸
lastlog
複製代碼
編輯全部用戶的路徑
joe /etc/environment
#編輯這個文件
複製代碼
顯示和設置用戶限制
ulimit -u
複製代碼
哪些端口正在監聽來自網絡的 TCP 鏈接
nmap -sT -O localhost
#notice that some companies might not like you using nmap
複製代碼
打印內核/處理器的數量
nproc --all
複製代碼
檢查每個核心狀態
1\. top
2. press '1'

複製代碼
展現任務和 PID
jobs -l
複製代碼
列出全部正在執行服務
service --status-all
複製代碼
計劃關閉服務器
shutdown -r +5 "Server will restart in 5 minutes. Please save your work."
複製代碼
取消與預約關閉
shutdown -c
複製代碼
向全部用戶廣播
wall -n hihi
複製代碼
終止一個用戶的全部進程
pkill -U user_name
複製代碼
終止程序的全部進程
kill -9 $(ps aux | grep 'program_name' | awk '{print $2}')
複製代碼
在服務器上設置 gedit 首選項
# 你可能須要去安裝如下軟件:

apt-get install libglib2.0-bin;
# 或者
yum install dconf dconf-editor;
yum install dbus dbus-x11;

# 檢查列表
gsettings list-recursively

# 修改一些設置
gsettings set org.gnome.gedit.preferences.editor highlight-current-line true
gsettings set org.gnome.gedit.preferences.editor scheme 'cobalt'
gsettings set org.gnome.gedit.preferences.editor use-default-font false
gsettings set org.gnome.gedit.preferences.editor editor-font 'Cantarell Regular 12'

複製代碼
把用戶增長到一個分組 (例如 把用戶名爲「nice」的永不添加到分組「docker」,這樣此用戶就能夠在不用 sudo 的狀況下運行 docker)
sudo gpasswd -a nice docker
複製代碼
安裝沒有根目錄的 python 包
1\. pip 安裝 --用戶 package_name
2. 你可能須要將  ~/.local/bin/ 導出到  PATH: export PATH=$PATH:~/.local/bin/
複製代碼
刪除舊的 Linux內核 (當 /boot 幾乎滿的時候...)
1\. uname -a  #檢查當前內核,哪些是不能移除的
2\. sudo apt-get purge linux-image-X.X.X-X-generic  #替代掉舊的版本
複製代碼
更改主機名
sudo hostname your-new-name

#若是不起做用,也能夠:
hostnamectl set-hostname your-new-hostname
# 而後檢查:
hostnamectl
# 或者檢查 /etc/hostname

# 若是一直不工做....,編輯:
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-ensxxx
#增長 主機名="你的新主機名稱"
複製代碼
安裝包列表
apt list --installed

# 或者在 Red Hat:
yum list installed
複製代碼
檢查哪一個文件使設備繁忙
lsof /mnt/dir
複製代碼
當聲音不工做的時候
killall pulseaudio
# 而後按下 Alt-F2 並輸入 pulseaudio
複製代碼
當聲音不工做的時候
killall pulseaudio
複製代碼
列出關於 SCSI 設備信息列表
lsscsi
複製代碼
設置你本身的 DNS 服務器教程

onceuponmine.blogspot.tw/2017/08/set…

建立一個簡單守護進程的教程

onceuponmine.blogspot.tw/2017/07/cre…

一個使用你的郵箱發送郵件的教程

onceuponmine.blogspot.tw/2017/10/set…

使用 telnet 去測試開放的端口,測試是否能夠鏈接到服務器例如服務器(192.168.2.106) 端口(53)
telnet 192.168.2.106 53
複製代碼
改變網絡最大可傳輸單位 (mtu) (例如修改到9000)
ifconfig eth0 mtu 9000
複製代碼
或者正在執行的進程 pid (例如 python)
pidof python

# 或者
ps aux|grep python
複製代碼
NTP
# Start ntp:
ntpd

# 檢查 ntp:
ntpq -p
複製代碼
清除你服務器中沒必要要的文件
sudo apt-get autoremove
sudo apt-get clean
sudo rm -rf ~/.cache/thumbnails/*

# 刪除舊的內核
sudo dpkg --list 'linux-image*'
sudo apt-get remove linux-image-OLDER_VERSION
複製代碼
增大調整根分區的大小 (根分區是 LVM 邏輯卷)
pvscan
lvextend -L +130G /dev/rhel/root -r
# 添加 -r 將在調整卷大小後增長到文件系統
複製代碼
建立UEFI可引導USB驅動器 (好比; /dev/sdc1)
sudo dd if=~/path/to/isofile.iso of=/dev/sdc1 oflag=direct bs=1048576
複製代碼
找到並刪除包
sudo dpkg -l | grep <package_name>
sudo dpkg --purge <package_name>
複製代碼
建立ssh隧道
ssh -f -L 9000:targetservername:8088 root@192.168.14.72 -N
#-f: 在後臺運行; -L: 監聽; -N: 什麼也不作
# 你計算機的9000端口如今已經鏈接上了目標服務器名字192.168.14.72的8088端口
# 因此你如今能夠去打開瀏覽器輸入localhost:9000去查看你的目標計算機的8088端口了
複製代碼
獲取進程的進程ID (好比: sublime_text)
#pidof 獲取進程id
pidof sublime_text

#pgrep, 你沒必要鍵入整個程序名
pgrep sublim

#pgrep, 若是找到進程,則返回1;若是沒有此類進程,則返回0

pgrep -q sublime_text && echo 1 || echo 0

#top, 須要更長的時間

top|grep sublime_text
複製代碼
服務器的一些基準測試工具

aio-stress - AIO benchmark. bandwidth - memory bandwidth benchmark. bonnie++ - hard drive and file system performance benchmark. dbench - generate I/O workloads to either a filesystem or to a networked CIFS or NFS server. dnsperf - authorative and recursing DNS servers. filebench - model based file system workload generator. fio - I/O benchmark. fs_mark - synchronous/async file creation benchmark. httperf - measure web server performance. interbench - linux interactivity benchmark. ioblazer - multi-platform storage stack micro-benchmark. iozone - filesystem benchmark. iperf3 - measure TCP/UDP/SCTP performance. kcbench - kernel compile benchmark, compiles a kernel and measures the time it takes. lmbench - Suite of simple, portable benchmarks. netperf - measure network performance, test unidirectional throughput, and end-to-end latency. netpipe - network protocol independent performance evaluator. nfsometer - NFS performance framework. nuttcp - measure network performance. phoronix-test-suite - comprehensive automated testing and benchmarking platform. seeker - portable disk seek benchmark. siege - http load tester and benchmark. sockperf - network benchmarking utility over socket API. spew - measures I/O performance and/or generates I/O load. stress - workload generator for POSIX systems. sysbench - scriptable database and system performance benchmark. tiobench - threaded IO benchmark. unixbench - the original BYTE UNIX benchmark suite, provide a basic indicator of the performance of a Unix-like system. wrk - HTTP benchmark.

顯示上次登陸用戶的列表。
lastb
複製代碼
顯示當前登陸用戶的列表,打印他們的信息
who
複製代碼
顯示誰登陸以及他們在作什麼
w
複製代碼
打印當前登陸到當前主機的用戶的用戶名。
users
複製代碼
在終止程序上中止跟蹤一個文件
tail -f --pid=<PID> filename.txt
# 用程序的進程 ID 替換 <PID> 
複製代碼
列出全部已經啓動的服務
systemctl list-unit-files|grep enabled
複製代碼

硬件

[back to top]

收集和總結機器的全部硬件信息
lshw -json >report.json
# 其餘的選項: [ -html ]  [ -short ]  [ -xml ]  [ -json ]  [ -businfo ]  [ -sanitize ] ,etc
複製代碼
找出內存設備的細節
sudo dmidecode -t memory
複製代碼
打印 CPU 硬件細節
dmidecode -t 4
#          類型   信息
#          0   BIOS
#          1   系統
#          2   基板
#          3   機殼
#          4   處理器
#          5   內存控制器
#          6   內存模塊
#          7   緩存
#          8   端口鏈接器
#          9   系統槽
#         11   OEM 字符串
#         13   BIOS 語言
#         15   系統事件日誌
#         16   物理內存數組
#         17   存儲設備
#         18   32位內存錯誤
#         19   存儲映射地址
#         20   存儲設備映射地址
#         21   內置定位設備
#         22   便攜式電池
#         23   系統重置
#         24   硬件安全性
#         25   系統電源控制
#         26   電壓探頭
#         27   冷卻裝置
#         28   溫度探測器
#         29   電流探頭
#         30   待外遠程訪問
#         31   引導完整性服務
#         32   系統啓動
#         34   管理裝置
#         35   管理設備組件
#         36   管理設備閾值數據
#         37   內存通道
#         38   IPMI 設備
#         39   電力供應
複製代碼
計算硬盤數量
lsscsi|grep SEAGATE|wc -l
# 或者
sg_map -i -x|grep SEAGATE|wc -l
複製代碼
或者硬盤的 UUID (例如 sdb)
blkid /dev/sdb
複製代碼
打印全部硬盤的詳細信息
lsblk -io KNAME,TYPE,MODEL,VENDOR,SIZE,ROTA
#其中 ROTA 表示旋轉設備/旋轉硬盤 (1 爲真, 0 爲假)
複製代碼
列出全部的 PCI (外圍設置互連) 設備
lspci
# 列出關於 NIC 信息
lspci | egrep -i --color 'network|ethernet'
複製代碼
列出全部 USB 設備
lsusb
複製代碼
Linux 模塊
# 顯示 Linux 內核中模塊狀態
lsmod

# 從 Linux 內核中增長或者移除模塊
modprobe

# 或者
# Remove a module
rmmod

# 插入模塊
insmod
複製代碼
控制 IPMI-enabled 設備 (e.g. BMC)
# 遠程查看服務器的電源狀態
ipmitool -U <bmc_username> -P <bmc_password> -I lanplus -H <bmc_ip_address> power status

# 遠程開啓服務器
ipmitool -U <bmc_username> -P <bmc_password> -I lanplus -H <bmc_ip_address> power on

# 打開面板識別燈(默認 15秒)
ipmitool chassis identify 255

#或者服務器傳感器溫度
ipmitool sensors |grep -i Temp

# 重置 BMC
ipmitool bmc reset cold

# Prnt BMC 網絡
ipmitool lan print 1

# 設置 BMC 網絡
ipmitool -I bmc lan set 1 ipaddr 192.168.0.55
ipmitool -I bmc lan set 1 netmask 255.255.255.0
ipmitool -I bmc lan set 1 defgw ipaddr 192.168.0.1
複製代碼

網絡

[回到頂部]

顯示 IP 地址
ip a
複製代碼
顯示路由表
ip r
複製代碼
顯示 ARP 緩存 (ARP 緩存顯示你鏈接到的同一網絡設備的 MAC 地址)
ip n
複製代碼
增長臨時 IP 地址 (重啓後重置) (例如 增長 192.168.140.3/24到 設備 eno16777736)
ip address add 192.168.140.3/24 dev eno16777736
複製代碼
持久化網絡配置的更改
sudo vi /etc/sysconfig/network-scripts/ifcfg-enoxxx
# 而後編輯字段: BOOTPROT, DEVICE, IPADDR, NETMASK, GATEWAY, DNS1 etc
複製代碼
刷新 NetworkManager
sudo nmcli c reload
複製代碼
從新啓動全部界面
sudo systemctl restart network.service
複製代碼
同時查看 hostname, OS, kernal, architecture !
hostnamectl
複製代碼
設置主機名 (一次設置全部臨時,靜態,漂亮的主機名)
hostnamectl set-hostname "mynode"
複製代碼

其餘

[回到頂部]

Bash 自動完成 (例如 當你輸入「dothis」,而後按下 「tab」,顯示「now tomorrow never」)

更多的案例

完成 -W  "now tomorrow never" dothis
# ~$ dothis  
# 從不     如今       明天
# 輸入「n」或者「t」以後,再次按「tab」 鍵以自動完成
複製代碼
重複打印字符串 n 次(例如重複打印5次「hello world」)
printf 'hello world\n%.0s' {1..5}
複製代碼
將字符串編碼爲 Base64 的字符串
echo test|base64
#dGVzdAo=
複製代碼
不要顯示末尾的換行符
username=`echo -n "bashoneliner"`
複製代碼
或者當前目錄的父級目錄
dirname `pwd`
複製代碼
將一個文件複製到多個文件 (例如複製文件 A 到文件(B-D))
tee <fileA fileB fileC fileD >/dev/null
複製代碼
刪除換行符或者下一行
tr --delete '\n' <input.txt >output.txt
複製代碼
換行
tr '\n' ' ' <filename
複製代碼
轉換大寫或者小寫
tr /a-z/ /A-Z/
複製代碼
轉換一系列的字符 (例如 把 a-z 都轉換爲 a)
echo 'something' |tr a-z a
# aaaaaaaaa
複製代碼
比較兩個文件 (例如 fileA, fileB)
diff fileA fileB
# a: 被增長; d:刪除; c:被修改

# 或者
sdiff fileA fileB
# 文件差別的並排合併
複製代碼
比較兩個文件, 刪除掉尾部回車(例如 fileA, fileB)
diff fileA fileB --strip-trailing-cr
複製代碼
給文件編號 (例如給 fileA 編號)
nl fileA

#或者
nl -nrz fileA
# add leading zeros

#也能夠
nl -w1 -s ' '
# making it simple, blank separate
複製代碼
使用 tab 鍵按字段鏈接兩個文件 (默認鏈接按照文件的第一列鏈接, 默認分隔符是空格)
# 文件 A 和文件 B 應該有相同的行順序
join -t '\t' fileA fileB

# 使用指定字段加入 (例如 文件 A 的第三列和文件 B 的第五列)
join -1 3 -2 5 fileA fileB
複製代碼
將兩個或多個文件合併/粘貼到列中 (例如 fileA, fileB, fileC)
paste fileA fileB fileC
# 默認選項分開
複製代碼
反向字符串
echo 12345| rev
複製代碼
讀取 .gz 文件但不解壓
zmore filename

# 或者
zless filename
複製代碼
在後臺運行命令,輸出錯誤文件
some_commands  &>log &

# 或者
some_commands 2>log &

# 或者
some_commands 2>&1| tee logfile

# 或者
some_commands |& tee logfile

# 還能夠
some_commands 2>&1 >>outfile
#0: 標準輸入; 1: 標準輸出; 2: 標準錯誤
複製代碼
在後臺運行多個命令
# 按順序運行
(sleep 2; sleep 3) &

#並行運行
sleep 2 & sleep 3 &
複製代碼
即使註銷也能夠運行進程 (immune to hangups, with output to a non-tty)
# 例如即使註銷也會運行 myscript.sh 腳本
nohup bash myscript.sh
複製代碼
發送郵件
下面是郵件的內容 -a /path/to/attach_file.txt -s 'mail.subject' me@gmail.com
# use -a flag to set send from (-a "From: some@mail.tld")
複製代碼
將 .xls 轉換爲 csv
xls2csv filename
複製代碼
附加到文件 (例如附加 hihi 內容到指定文件)
echo 'hihi' >>filename
複製代碼
製造 BEEP 的聲音
speaker-test -t sine -f 1000 -l1
複製代碼
設置 beep 聲音的持續時間
(speaker-test -t sine -f 1000) & pid=$!;sleep 0.1s;kill -9 $pid
複製代碼
歷史記錄 編輯/刪除
~/.bash_history

#或者
history -d [line_number]
複製代碼
與歷史記錄的互動
# list 5 previous command (similar to `history |tail -n 5` but wont print the history command itself)
fc -l -5
複製代碼
或者文件最後的歷史記錄
head !$
複製代碼
清潔屏幕(注:還挺好使)
clear

# 或者
Ctrl+l
複製代碼
將數據發送到上次編輯的文件
cat /directory/to/file
echo 100>!$
複製代碼
提取 .xf
unxz filename.tar.xz
# 而後
tar -xf filename.tar

複製代碼
安裝 python 包
pip install packagename
複製代碼
刪除當前的 bash 命令
Ctrl+U

# 或者
Ctrl+C

# 或者
Alt+Shift+#
# 成爲歷史
複製代碼
向歷史添加一些東西 (例如 「addmetohistory」)
# addmetodistory
# just add a "#" before~~
複製代碼
睡眠一會或者稍等片刻或者安排工做
sleep 5;echo hi
複製代碼
使用 rsync 備份
rsync -av filename filename.bak
rsync -av directory directory.bak
rsync -av --ignore_existing directory/ directory.bak
rsync -av --update directory directory.bak

rsync -av directory user@ip_address:/path/to/directory.bak
#跳過接收器上更新的文件 (我更喜歡這個!)
複製代碼
一次製做全部的目錄!
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat}
# -p: 設置爲父目錄
# 這將製造 project/doc/html/; project/doc/info; project/lib/ext ,etc
複製代碼
僅當另外一個命令運行返回0退出狀態的時候運行此命令(命令完成)
cd tmp/ && tar xvf ~/a.tar
複製代碼
僅當另外一個命令運行返回非0退出狀態的時候運行此命令(命令未完成)
cd tmp/a/b/c ||mkdir -p tmp/a/b/c
複製代碼
提取到路徑
tar xvf -C /path/to/directory filename.gz
複製代碼
使用反斜杆 "" 來中斷長命令
cd tmp/a/b/c \
> || \
>mkdir -p tmp/a/b/c
複製代碼
獲得 pwd
VAR=$PWD; cd ~; tar xvf -C $VAR file.tar
# PWD 必須是大寫字母
複製代碼
列出文件的類型 (e.g. /tmp/)
file /tmp/
# tmp/: directory
複製代碼
Bash 腳本
#!/bin/bash
file=${1#*.}
# remove string before a "."
複製代碼
Python 簡單的 HTTP 服務
python -m SimpleHTTPServer
# 或者你使用 python3 的時候:
python3 -m http.server
複製代碼
讀取用戶輸入
read input
echo $input
複製代碼
生成序列 1-10
seq 10
複製代碼
查找輸入列表/文件的平均值
i=`wc -l filename|cut -d ' ' -f1`; cat filename| echo "scale=2;(`paste -sd+`)/"$i|bc
複製代碼
生成全部組合 (e.g. 1,2)
echo {1,2}{1,2}
# 1 1, 1 2, 2 1, 2 2
複製代碼
生成全部組合 (e.g. A,T,C,G)
set = {A,T,C,G}
group= 5
for ((i=0; i<$group; i++));do
    repetition=$set$repetition;done
    bash -c "echo "$repetition""
複製代碼
將文件內容讀取到變量
foo=$(<test1)
複製代碼
輸出變量
echo ${#foo}
複製代碼
打印標籤
echo -e ' \t '
複製代碼
數組
declare -a array=()

# 或者
declare array=()

# 或者關聯數組
declare -A array=()
複製代碼
發送一個目錄
scp -r directoryname user@ip:/path/to/send
複製代碼
將文件分割成較小的文件
# 按行分割 (e.g. 1000 lines/smallfile)
split -d -l 1000 largefile.txt

# 按字節分割而不會在文件間斷行
split -C 10 largefile.txt
複製代碼
建立大量的測試文件 (e.g 100000 個文件, 10 字節分割):
#1\. 建立文件
dd if=/dev/zero of=bigfile bs=1 count=1000000

#2\. 將大文件拆分爲100000個10字節文件
 split -b 10 -a 10 bigfile
複製代碼
重命名全部文件 (e.g. 將全部文件重命名爲ABC)
rename 's/ABC//' *.gz
複製代碼
刪除文件擴展名(e.g 刪除filename.gz的.gz)
basename filename.gz .gz

zcat filename.gz> $(basename filename.gz .gz).unpacked
複製代碼
叉炸彈(危險命令的意思)
# 不要在家嘗試這個
# 它是一個每次調用都會調用兩次的函數,直到系統資源耗盡爲止
# 爲了安全起見在前面加了一個 #,當你真正測試的時候,請移除它
# :(){:|:&};:
複製代碼
將文件擴展名添加到全部文件(例如添加 .txt)
rename s/$/.txt/ *
# 你可使用重命名 -n s/$/.txt/ * 首先去檢查結果,若是它僅僅打印這些:
# rename(a, a.txt)
# rename(b, b.txt)
# rename(c, c.txt)
複製代碼
使用擠壓重複選項 (例如 /t/t --> /t)
tr -s "/t" < filename
複製代碼
不要用 echo 打印 nextline
echo -e 'text here \c'
複製代碼
使用最後一個參數
!$
複製代碼
檢查最後一個退出代碼
echo $?
複製代碼
查看文件的前50個字符
head -c 50 file
複製代碼
將兩行組合成一行
# 例如
# AAAA
# BBBB
# CCCC
# DDDD
cat filename|paste - -
# AAAABBBB
# CCCCDDDD
cat filename|paste - - - -
# AAAABBBBCCCCDDDD
複製代碼
Fastq 轉 fasta
cat file.fastq | paste - - - - | sed 's/^@/>/g'| cut -f1-2 | tr '\t' '\n' >file.fa
複製代碼
剪切並獲得最後一列
cat file|rev | cut -d/ -f1 | rev
複製代碼
在變量/增量 i++ 中添加一個變數字量(例如 $val)
((var++))
# 或者
var=$((var+1))

複製代碼
清除文件中全部內容 (好比 filename)
>filename
複製代碼
解壓 tar.bz2 文件 (例如解壓文件 file.tar.bz2)
tar xvfj file.tar.bz2
複製代碼
解壓 tar.xz 文件 (例如解壓 file.tar.xz)
unxz file.tar.xz
tar xopf file.tar
複製代碼
重複輸出 y/n 直到終止
# 'y':
yes

# 或者 'n':
yes n

# 或者 'anything':
yes anything

# 例如:
```bash
yes | rm -r large_directory
複製代碼
當即建立必定大小的虛擬文件 (例如 200mb)
dd if=/dev/zero of=//dev/shm/200m bs=1024k count=200
# 或者
dd if=/dev/zero of=//dev/shm/200m bs=1M count=200

# 標準輸出:
# 200+0 條記錄
# 200+0 記錄出來
# 209715200 bytes (210 MB) copied, 0.0955679 s, 2.2 GB/s
複製代碼
把文件歸檔
cat >myfile
讓我在這補充一下
exit by control + c
^C
複製代碼
保持重複執行同一個命令 (例如 每一秒重複一次 'wc -l filename' )
watch -n 1 wc -l filename
複製代碼
執行時打印命令以及其參數(例如 echo expr 10 + 20)
set -x; echo `expr 10 + 20 `
複製代碼
爲你打印一些有意義的句子(首先安裝 fortune )
fortune
複製代碼
豐富多彩的 (有用的) top 版本(首先安裝 htop)
htop
複製代碼
按任意鍵繼續
read -rsp $'Press any key to continue...\n' -n1 key
複製代碼
從終端中運行相似 sql 的命令
# 下載:
# https://github.com/harelba/q
# 例如:
q -d "," "select c3,c4,c5 from /path/to/file.txt where c3='foo' and c5='boo'"
複製代碼
將 Screen 用於多個終端回話
# 建立會話並附加:
screen

# 建立分離的會話 foo:
screen -S foo -d -m

# 獨立會話 foo:
screen: ^a^d

# 會話列表:
screen -ls

# 附加到上一個會話:
screen -r

# 附加到會話 foo:
screen -r foo

# 殺掉會話 foo:
screen -r foo -X quit

# 滾動:
點擊屏幕前綴組合 (C-a / control+A),而後按下 Escape.
上下移動方向鍵(↑ and ↓).

# 重定向屏幕中已經運行進程的輸出:
 (C-a / control+A), then hit 'H'

# 存儲屏幕的屏幕實處:
Ctrl+A, Shift+H
# 而後再當前的目錄下找到 screen.log 文件
複製代碼
使用
將 Tmux用於多個終端回話
# 建立會話並附加:
tmux

# 附加到會話 foo:
tmux attach -t foo

# 分離的會話 foo:
^bd

# 會話列表:
tmux ls

# 附加上一個會話:
tmux attach

# 殺死會話 foo:
tmux kill-session -t foo

# 建立獨立會話 foo:
tmux new -s foo -d

# 將命令發送到 tmux 的全部窗格:
Ctrl-B
:setw synchronize-panes

# 一些 tmux 窗格控制的命令:
Ctrl-B
#   窗格 (分割), 按下 Ctrl+B,而後輸入如下字符:
#   %  horizontal split
#   "  vertical split
#   o  swap panes
#   q  show pane numbers
#   x  kill pane
#   空間 - 在佈局之間進行切換

#   垂直分佈 (行):
select-layout even-vertical
#   或者
Ctrl+b, Alt+2

# 垂直分佈 (列):
select-layout even-horizontal
#   或者
Ctrl+b, Alt+1

# Scroll
Ctrl-b 而後 \[ 而後你可使用你的正常方向鍵來滾動
Press q to quit scroll mode.
複製代碼
剪切最後一行
cat filename|rev|cut -f1|rev
複製代碼
將密碼傳輸給 ssh
sshpass -p mypassword ssh root@10.102.14.88 "df -h"
複製代碼
等待一個 pid (任務)完成
wait %1
# 或者
wait $PID
wait ${!}
#wait ${!} 要等待最後一個後臺進程 ($! 爲最後一個後臺進程的 PIID)
複製代碼
將 pdf 轉換爲 txt
sudo apt-get install poppler-utils
pdftotext example.pdf example.txt
複製代碼
只列出目錄
ls -ld -- */
複製代碼
捕獲/j記錄/保存終端輸出(捕獲你輸入和輸出的全部內容)
script output.txt
# 開始使用終端l
# 退出屏幕會話 (中止保存內容), 退出.
複製代碼
以樹狀格式列出目錄的內容。
tree
# 轉到要列出的目錄,而後鍵入 tree (sudo apt-get install tree)
# output:
# home/
# └── project
#     ├── 1
#     ├── 2
#     ├── 3
#     ├── 4
#     └── 5
#

# 設置目錄深度等級(例如1級)
tree -L 1
# home/
# └── project
複製代碼
爲 Python設置 virtualenv(sandbox)
# 1\. 安裝 virtualenv.
sudo apt-get install virtualenv
# 2\. 爲新的隔離環境創建目錄(將其命名爲 .venv 或您想要的任何名稱)。
virtualenv .venv
# 3\. 導入 virtual 執行目錄
source .venv/bin/activate
# 4\. 您能夠檢查一下是否如今在沙盒中
type pip
# 5\. 如今您能夠安裝您的 pip 包, 這裏的 requirements.txt 只是一個包含您想要的全部軟件包的 txt 文件 (例如 tornado==4.5.3)。
pip install -r requirements.txt
複製代碼
使用 json 數據
# 安裝很是有用的 jq 包
#sudo apt-get install jq
#e.g. to get all the values of the 'url' key, simply pipe the json to the following jq command(you can use .[]. to select inner json, i.e jq '.[].url')
# 例如,要獲取 url 鍵的全部值,只需將 json 經過管道傳遞給如下 jq 命令(您可使用 [] 選擇內部 json,即 jq '[].url')
jq '.url'
複製代碼
編輯 history
history -w
vi ~/.bash_history
history -r
複製代碼
十進制轉換爲二進制(例如,獲取 5 的二進制 )
D2B=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
echo -e ${D2B[5]}
#00000101
echo -e ${D2B[255]}
#11111111
複製代碼
把輸入的行換行以適應指定的寬度(例如每行 4 個整數)
echo "00110010101110001101" | fold -w4
# 0011
# 0010
# 1011
# 1000
# 1101
複製代碼
按列對文件進行排序,並保持原始順序
sort -k3,3 -s
複製代碼
列右對齊(第二列右對齊)
cat file.txt|rev|column -t|rev
複製代碼
查看和存儲輸出
echo 'hihihihi' | tee outputfile.txt
# tee 帶 「-a」 能夠附加到文件中
複製代碼
使用 cat 顯示非打印(Ctrl)字符
cat -v filename
複製代碼
將製表符轉換爲空格
expand filename
複製代碼
將空格轉換爲製表符
unexpand filename
複製代碼
以八進制顯示文件(您也可使用 od 顯示十六進制,十進制等)
od filename
複製代碼
反轉 cat 的結果
tac filename
複製代碼
反轉 uniq -c 的結果
while read a b; do yes $b |head -n $a ;done <test.txt
複製代碼

將來還有更多!

相關文章
相關標籤/搜索