linux bash sheet

##############################################################################

#BASH CHEATSHEET (中文速查表)? -? by skywind (created on 2018/02/14)

#Version: 46, Last Modified: 2019/02/25 16:53

#https://github.com/skywind3000/awesome-cheatsheets

##############################################################################

##############################################################################

#常用快捷鍵(默認(rèn)使用 Emacs 鍵位)

##############################################################################

CTRL+A#移動(dòng)到行首衩匣,同

CTRL+B#向后移動(dòng)田炭,同

CTRL+C#結(jié)束當(dāng)前命令

CTRL+D#刪除光標(biāo)前的字符,同 茂翔,或者沒有內(nèi)容時(shí)驰吓,退出會(huì)話

CTRL+E#移動(dòng)到行末涧尿,同

CTRL+F#向前移動(dòng),同

CTRL+G#退出當(dāng)前編輯(比如正在 CTRL+R 搜索歷史時(shí))

CTRL+H#刪除光標(biāo)左邊的字符檬贰,同

CTRL+K#刪除光標(biāo)位置到行末的內(nèi)容

CTRL+L#清屏并重新顯示

CTRL+N#移動(dòng)到命令歷史的下一行现斋,同

CTRL+O#類似回車偎蘸,但是會(huì)顯示下一行歷史

CTRL+P#移動(dòng)到命令歷史的上一行庄蹋,同

CTRL+R#歷史命令反向搜索,使用 CTRL+G 退出搜索

CTRL+S#歷史命令正向搜索迷雪,使用 CTRL+G 退出搜索

CTRL+T#交換前后兩個(gè)字符

CTRL+U#刪除字符到行首

CTRL+V#輸入字符字面量限书,先按 CTRL+V 再按任意鍵

CTRL+W#刪除光標(biāo)左邊的一個(gè)單詞

CTRL+X#列出可能的補(bǔ)全

CTRL+Y#粘貼前面 CTRL+u/k/w 刪除過的內(nèi)容

CTRL+Z#暫停前臺(tái)進(jìn)程返回 bash,需要時(shí)可用 fg 將其切換回前臺(tái)

CTRL+_#撤銷(undo)章咧,有的終端將 CTRL+_ 映射為 CTRL+/ 或 CTRL+7

ALT+b#向后(左邊)移動(dòng)一個(gè)單詞

ALT+d#刪除光標(biāo)后(右邊)一個(gè)單詞

ALT+f#向前(右邊)移動(dòng)一個(gè)單詞

ALT+t#交換字符

ALT+BACKSPACE#刪除光標(biāo)前面一個(gè)單詞倦西,類似 CTRL+W,但不影響剪貼板

CTRL+X CTRL+X#連續(xù)按兩次 CTRL+X赁严,光標(biāo)在當(dāng)前位置和行首來回跳轉(zhuǎn)

CTRL+X CTRL+E#用你指定的編輯器扰柠,編輯當(dāng)前命令

##############################################################################

#BASH 基本操作

##############################################################################

exit#退出當(dāng)前登陸

env#顯示環(huán)境變量

echo$SHELL#顯示你在使用什么 SHELL

bash#使用 bash,用 exit 返回

which bash#搜索 $PATH疼约,查找哪個(gè)程序?qū)?yīng)命令 bash

whereis bash#搜索可執(zhí)行卤档,頭文件和幫助信息的位置,使用系統(tǒng)內(nèi)建數(shù)據(jù)庫(kù)

whatis bash#查看某個(gè)命令的解釋程剥,一句話告訴你這是干什么的

clear#清初屏幕內(nèi)容

reset#重置終端(當(dāng)你不小心 cat 了一個(gè)二進(jìn)制劝枣,終端狀態(tài)亂掉時(shí)使用)

##############################################################################

#目錄操作

##############################################################################

cd#返回自己 $HOME 目錄

cd{dirname}#進(jìn)入目錄

pwd#顯示當(dāng)前所在目錄

mkdir {dirname}#創(chuàng)建目錄

mkdir -p {dirname}#遞歸創(chuàng)建目錄

pushd{dirname}#目錄壓棧并進(jìn)入新目錄

popd#彈出并進(jìn)入棧頂?shù)哪夸?/p>

dirs-v#列出當(dāng)前目錄棧

cd-#回到之前的目錄

cd-{N}#切換到目錄棧中的第 N個(gè)目錄,比如 cd -2 將切換到第二個(gè)

##############################################################################

#文件操作

##############################################################################

ls#顯示當(dāng)前目錄內(nèi)容,后面可接目錄名:ls {dir} 顯示指定目錄

ls -l#列表方式顯示目錄內(nèi)容舔腾,包括文件日期溪胶,大小,權(quán)限等信息

ls -1#列表方式顯示目錄內(nèi)容稳诚,只顯示文件名稱哗脖,減號(hào)后面是數(shù)字 1

ls -a#顯示所有文件和目錄,包括隱藏文件(.開頭的文件/目錄名)

ln -s {fn} {link}#給指定文件創(chuàng)建一個(gè)軟鏈接

cp {src} {dest}#拷貝文件扳还,cp -r dir1 dir2 可以遞歸拷貝(目錄)

rm {fn}#刪除文件懒熙,rm -r 遞歸刪除目錄,rm -f 強(qiáng)制刪除

mv {src} {dest}#移動(dòng)文件普办,如果 dest 是目錄工扎,則移動(dòng),是文件名則覆蓋

touch {fn}#創(chuàng)建或者更新一下制定文件

cat {fn}#輸出文件原始內(nèi)容

any_cmd>{fn}#執(zhí)行任意命令并將標(biāo)準(zhǔn)輸出重定向到指定文件

more {fn}#逐屏顯示某文件內(nèi)容衔蹲,空格翻頁(yè)肢娘,q 退出

less {fn}#更高級(jí)點(diǎn)的 more,更多操作舆驶,q 退出

head {fn}#顯示文件頭部數(shù)行橱健,可用 head -3 abc.txt 顯示頭三行

tail {fn}#顯示文件尾部數(shù)行,可用 tail -3 abc.txt 顯示尾部三行

tail -f {fn}#持續(xù)顯示文件尾部數(shù)據(jù)沙廉,可用于監(jiān)控日志

nano {fn}#使用 nano 編輯器編輯文件

vim {fn}#使用 vim 編輯文件

diff {f1} {f2}#比較兩個(gè)文件的內(nèi)容

wc {fn}#統(tǒng)計(jì)文件有多少行拘荡,多少個(gè)單詞

chmod 644 {fn}#修改文件權(quán)限為 644,可以接 -R 對(duì)目錄循環(huán)改權(quán)限

chgrp group {fn}#修改文件所屬的用戶組

chown user1 {fn}#修改文件所有人為 user1, chown user1:group1 fn 可以修改組

file {fn}#檢測(cè)文件的類型和編碼

basename {fn}#查看文件的名字(不包括路徑)

dirname {fn}#查看文件的路徑(不包括名字)

grep {pat} {fn}#在文件中查找出現(xiàn)過 pat 的內(nèi)容

grep -r {pat}.#在當(dāng)前目錄下遞歸查找所有出現(xiàn)過 pat 的文件內(nèi)容

stat {fn}#顯示文件的詳細(xì)信息

##############################################################################

#用戶管理

##############################################################################

whoami#顯示我的用戶名

who#顯示已登陸用戶信息撬陵,w / who / users 內(nèi)容略有不同

w#顯示已登陸用戶信息珊皿,w / who / users 內(nèi)容略有不同

users#顯示已登陸用戶信息,w / who / users 內(nèi)容略有不同

passwd#修改密碼巨税,passwd {user} 可以用于 root 修改別人密碼

finger {user}#顯示某用戶信息蟋定,包括 id, 名字, 登陸狀態(tài)等

adduser {user}#添加用戶

deluser {user}#刪除用戶

w#查看誰在線

su#切換到 root 用戶

su -#切換到 root 用戶并登陸(執(zhí)行登陸腳本)

su {user}#切換到某用戶

su -{user}#切換到某用戶并登陸(執(zhí)行登陸腳本)

id {user}#查看用戶的 uid,gid 以及所屬其他用戶組

id -u {user}#打印用戶 uid

id -g {user}#打印用戶 gid

write {user}#向某用戶發(fā)送一句消息

last#顯示最近用戶登陸列表

last {user}#顯示登陸記錄

lastb#顯示失敗登陸記錄

lastlog#顯示所有用戶的最近登陸記錄

sudo {command}#以 root 權(quán)限執(zhí)行某命令

##############################################################################

#進(jìn)程管理

##############################################################################

ps#查看當(dāng)前會(huì)話進(jìn)程

ps ax#查看所有進(jìn)程草添,類似 ps -e

ps aux#查看所有進(jìn)程詳細(xì)信息驶兜,類似 ps -ef

ps auxww#查看所有進(jìn)程,并且顯示進(jìn)程的完整啟動(dòng)命令

ps -u {user}#查看某用戶進(jìn)程

ps axjf#列出進(jìn)程樹

ps xjf -u {user}#列出某用戶的進(jìn)程樹

ps -eo pid,user,command#按用戶指定的格式查看進(jìn)程

ps aux|grep httpd#查看名為 httpd 的所有進(jìn)程

ps --ppid {pid}#查看父進(jìn)程為 pid 的所有進(jìn)程

pstree#樹形列出所有進(jìn)程远寸,pstree 默認(rèn)一般不帶抄淑,需安裝

pstree {user}#進(jìn)程樹列出某用戶的進(jìn)程

pstree -u#樹形列出所有進(jìn)程以及所屬用戶

pgrep {procname}#搜索名字匹配的進(jìn)程的 pid,比如 pgrep apache2

kill{pid}#結(jié)束進(jìn)程

kill-9 {pid}#強(qiáng)制結(jié)束進(jìn)程驰后,9/SIGKILL 是強(qiáng)制不可捕獲結(jié)束信號(hào)

kill-KILL {pid}#強(qiáng)制執(zhí)行進(jìn)程肆资,kill -9 的另外一種寫法

kill-l#查看所有信號(hào)

kill-l TERM#查看 TERM 信號(hào)的編號(hào)

killall {procname}#按名稱結(jié)束所有進(jìn)程

pkill {procname}#按名稱結(jié)束進(jìn)程,除名稱外還可以有其他參數(shù)

top#查看最活躍的進(jìn)程

top -u {user}#查看某用戶最活躍的進(jìn)程

any_command&#在后臺(tái)運(yùn)行某命令倡怎,也可用 CTRL+Z 將當(dāng)前進(jìn)程掛到后臺(tái)

jobs#查看所有后臺(tái)進(jìn)程(jobs)

bg#查看后臺(tái)進(jìn)程迅耘,并切換過去

fg#切換后臺(tái)進(jìn)程到前臺(tái)

fg{job}#切換特定后臺(tái)進(jìn)程到前臺(tái)

trapcmd sig1 sig2#在腳本中設(shè)置信號(hào)處理命令

trap""sig1 sig2#在腳本中屏蔽某信號(hào)

trap- sig1 sig2#恢復(fù)默認(rèn)信號(hào)處理行為

nohup {command}#長(zhǎng)期運(yùn)行某程序,在你退出登陸都保持它運(yùn)行

nohup {command}&#在后臺(tái)長(zhǎng)期運(yùn)行某程序

disown{PID|JID}#將進(jìn)程從后臺(tái)任務(wù)列表(jobs)移除

wait#等待所有后臺(tái)進(jìn)程任務(wù)結(jié)束

##############################################################################

#常用命令:SSH / 系統(tǒng)信息 / 網(wǎng)絡(luò)

##############################################################################

ssh user@host#以用戶 user 登陸到遠(yuǎn)程主機(jī) host

ssh -p {port} user@host#指定端口登陸主機(jī)

ssh-copy-id user@host#拷貝你的 ssh key 到遠(yuǎn)程主機(jī)监署,避免重復(fù)輸入密碼

scp {fn} user@host:path#拷貝文件到遠(yuǎn)程主機(jī)

scp user@host:path dest#從遠(yuǎn)程主機(jī)拷貝文件回來

scp -P {port} ...#指定端口遠(yuǎn)程拷貝文件

uname -a#查看內(nèi)核版本等信息

man {help}#查看幫助

man -k {keyword}#查看哪些幫助文檔里包含了該關(guān)鍵字

info {help}#查看 info pages颤专,比 man 更強(qiáng)的幫助系統(tǒng)

uptime#查看系統(tǒng)啟動(dòng)時(shí)間

date#顯示日期

cal#顯示日歷

vmstat#顯示內(nèi)存和 CPU 使用情況

vmstat 10#每 10 秒打印一行內(nèi)存和 CPU情況,CTRL+C 退出

free#顯示內(nèi)存和交換區(qū)使用情況

df#顯示磁盤使用情況

du#顯示當(dāng)前目錄占用钠乏,du . --max-depth=2 可以指定深度

uname#顯示系統(tǒng)版本號(hào)

hostname#顯示主機(jī)名稱

showkey -a#查看終端發(fā)送的按鍵編碼

ping {host}#ping 遠(yuǎn)程主機(jī)并顯示結(jié)果栖秕,CTRL+C 退出

ping -c N {host}#ping 遠(yuǎn)程主機(jī) N 次

traceroute {host}#偵測(cè)路由連通情況

mtr {host}#高級(jí)版本 traceroute

host {domain}#DNS 查詢,{domain} 前面可加 -a 查看詳細(xì)信息

whois {domain}#取得域名 whois 信息

dig {domain}#取得域名 dns 信息

route -n#查看路由表

netstat -a#列出所有端口

netstat -an#查看所有連接信息晓避,不解析域名

netstat -anp#查看所有連接信息辈末,包含進(jìn)程信息(需要 sudo)

netstat -l#查看所有監(jiān)聽的端口

netstat -t#查看所有 TCP 鏈接

netstat -lntu#顯示所有正在監(jiān)聽的 TCP 和 UDP 信息

netstat -lntup#顯示所有正在監(jiān)聽的 socket 及進(jìn)程信息

netstat -i#顯示網(wǎng)卡信息

netstat -rn#顯示當(dāng)前系統(tǒng)路由表菲驴,同 route -n

ss -an#比 netstat -an 更快速更詳細(xì)

ss -s#統(tǒng)計(jì) TCP 的 established, wait 等

wget {url}#下載文件,可加 --no-check-certificate 忽略 ssl 驗(yàn)證

wget -qO- {url}#下載文件并輸出到標(biāo)準(zhǔn)輸出(不保存)

curl -sL {url}#同 wget -qO- {url} 沒有 wget 的時(shí)候使用

sz {file}#發(fā)送文件到終端,zmodem 協(xié)議

rz#接收終端發(fā)送過來的文件

##############################################################################

#變量操作

##############################################################################

varname=value#定義變量

varname=valuecommand#定義子進(jìn)程變量并執(zhí)行子進(jìn)程

echo$varname#查看變量?jī)?nèi)容

echo$$#查看當(dāng)前 shell 的進(jìn)程號(hào)

echo$!#查看最近調(diào)用的后臺(tái)任務(wù)進(jìn)程號(hào)

echo$?#查看最近一條命令的返回碼

exportVARNAME=value#設(shè)置環(huán)境變量(將會(huì)影響到子進(jìn)程)

array[0]=valA#定義數(shù)組

array[1]=valB

array[2]=valC

array=([0]=valA [1]=valB [2]=valC)#另一種方式

array=(valA valB valC)#另一種方式

${array[i]}#取得數(shù)組中的元素

${#array[@]}#取得數(shù)組的長(zhǎng)度

${#array[i]}#取得數(shù)組中某個(gè)變量的長(zhǎng)度

declare-a#查看所有數(shù)組

declare-f#查看所有函數(shù)

declare-F#查看所有函數(shù)诚撵,僅顯示函數(shù)名

declare-i#查看所有整數(shù)

declare-r#查看所有只讀變量

declare-x#查看所有被導(dǎo)出成環(huán)境變量的東西

declare-p varname#輸出變量是怎么定義的(類型+值)

${varname:-word}#如果變量不為空則返回變量,否則返回 word

${varname:=word}#如果變量不為空則返回變量架专,否則賦值成 word 并返回

${varname:?message}#如果變量不為空則返回變量氢卡,否則打印錯(cuò)誤信息并退出

${varname:+word}#如果變量不為空則返回 word,否則返回 null

${varname:offset:len}#取得字符串的子字符串

${variable#pattern}#如果變量頭部匹配 pattern搞隐,則刪除最小匹配部分返回剩下的

${variable##pattern}#如果變量頭部匹配 pattern驹愚,則刪除最大匹配部分返回剩下的

${variable%pattern}#如果變量尾部匹配 pattern,則刪除最小匹配部分返回剩下的

${variable%%pattern}#如果變量尾部匹配 pattern劣纲,則刪除最大匹配部分返回剩下的

${variable/pattern/str}#將變量中第一個(gè)匹配 pattern 的替換成 str逢捺,并返回

${variable//pattern/str}#將變量中所有匹配 pattern 的地方替換成 str 并返回

${#varname}#返回字符串長(zhǎng)度

*(patternlist)#零次或者多次匹配

+(patternlist)#一次或者多次匹配

?(patternlist)#零次或者一次匹配

@(patternlist)#單詞匹配

!(patternlist)#不匹配

array=($text)#按空格分隔 text 成數(shù)組,并賦值給變量

IFS="/"array=($text)#按斜桿分隔字符串 text 成數(shù)組癞季,并賦值給變量

text="${array[*]}"#用空格鏈接數(shù)組并賦值給變量

text=$(IFS=/;echo"${array[*]}")#用斜杠鏈接數(shù)組并賦值給變量

A=( foo bar"a? b c"42 )#數(shù)組定義

B=("${A[@]:1:2}")#數(shù)組切片:B=( bar "a? b c" )

C=("${A[@]:1}")#數(shù)組切片:C=( bar "a? b c" 42 )

echo"${B[@]}"#bar a? b c

echo"${B[1]}"#a? b c

echo"${C[@]}"#bar a? b c 42

echo"${C[@]:-2:2}"#a? b c 42? 減號(hào)前的空格是必須的

$(UNIX command)#運(yùn)行命令劫瞳,并將標(biāo)準(zhǔn)輸出內(nèi)容捕獲并返回

varname=$(id -u user)#將用戶名為 user 的 uid 賦值給 varname 變量

num=$(expr 1 + 2)#兼容 posix sh 的計(jì)算,使用 expr 命令計(jì)算結(jié)果

num=$(expr$num+ 1)#數(shù)字自增

expr 2\*\(2 + 3\)#兼容 posix sh 的復(fù)雜計(jì)算绷柒,輸出 10

num=$((1+2))#計(jì)算 1+2 賦值給 num柠新,使用 bash 獨(dú)有的 $((..)) 計(jì)算

num=$(($num+1))#變量遞增

num=$((num+1))#變量遞增,雙括號(hào)內(nèi)的 $ 可以省略

num=$((1+(2+3)*2))#復(fù)雜計(jì)算

##############################################################################

#事件指示符

##############################################################################

!!#上一條命令

!^#上一條命令的第一個(gè)單詞

!$#上一條命令的最后一個(gè)單詞

!string#最近一條包含string的命令

!^string1^string2#最近一條包含string1的命令, 快速替換為string2, 相當(dāng)于!!:s/string1/string2/

!## 本條命令之前所有的輸入內(nèi)容

##############################################################################

#函數(shù)

##############################################################################

#定義一個(gè)新函數(shù)

functionmyfunc(){

#$1 代表第一個(gè)參數(shù)辉巡,$N 代表第 N 個(gè)參數(shù)

#$# 代表參數(shù)個(gè)數(shù)

#$0 代表被調(diào)用者自身的名字

#$@ 代表所有參數(shù)恨憎,類型是個(gè)數(shù)組,想傳遞所有參數(shù)給其他命令用 cmd "$@"

#$* 空格鏈接起來的所有參數(shù)郊楣,類型是字符串

? ? {shell commands ...}

}

myfunc#調(diào)用函數(shù) myfunc

myfunc arg1 arg2 arg3#帶參數(shù)的函數(shù)調(diào)用

myfunc"$@"#將所有參數(shù)傳遞給函數(shù)

myfunc"${array[@]}"#將一個(gè)數(shù)組當(dāng)作多個(gè)參數(shù)傳遞給函數(shù)

shift#參數(shù)左移

unset-f myfunc#刪除函數(shù)

declare-f#列出函數(shù)定義

##############################################################################

#條件判斷(兼容 posix sh 的條件判斷):man test

##############################################################################

statement1&&statement2#and 操作符

statement1||statement2#or 操作符

exp1 -a exp2#exp1 和 exp2 同時(shí)為真時(shí)返回真(POSIX XSI擴(kuò)展)

exp1 -o exp2#exp1 和 exp2 有一個(gè)為真就返回真(POSIX XSI擴(kuò)展)

( expression )#如果 expression 為真時(shí)返回真憔恳,輸入注意括號(hào)前反斜桿

!expression#如果 expression 為假那返回真

str1 = str2#判斷字符串相等,如 [ "$x" = "$y" ] && echo yes

str1!= str2#判斷字符串不等净蚤,如 [ "$x" != "$y" ] && echo yes

str1<str2#字符串小于钥组,如 [ "$x" \< "$y" ] && echo yes

str2>str2#字符串大于,注意 < 或 > 是字面量今瀑,輸入時(shí)要加反斜桿

-n str1#判斷字符串不為空(長(zhǎng)度大于零)

-z str1#判斷字符串為空(長(zhǎng)度等于零)

-a file#判斷文件存在程梦,如 [ -a /tmp/abc ] && echo "exists"

-d file#判斷文件存在点把,且該文件是一個(gè)目錄

-e file#判斷文件存在,和 -a 等價(jià)

-f file#判斷文件存在屿附,且該文件是一個(gè)普通文件(非目錄等)

-r file#判斷文件存在郎逃,且可讀

-s file#判斷文件存在,且尺寸大于0

-w file#判斷文件存在挺份,且可寫

-x file#判斷文件存在褒翰,且執(zhí)行

-N file#文件上次修改過后還沒有讀取過

-O file#文件存在且屬于當(dāng)前用戶

-G file#文件存在且匹配你的用戶組

file1 -nt file2#文件1 比 文件2 新

file1 -ot file2#文件1 比 文件2 舊

num1 -eq num2#數(shù)字判斷:num1 == num2

num1 -ne num2#數(shù)字判斷:num1 != num2

num1 -lt num2#數(shù)字判斷:num1 < num2

num1 -le num2#數(shù)字判斷:num1 <= num2

num1 -gt num2#數(shù)字判斷:num1 > num2

num1 -ge num2#數(shù)字判斷:num1 >= num2

##############################################################################

#分支控制:if 和經(jīng)典 test,兼容 posix sh 的條件判斷語(yǔ)句

##############################################################################

test{expression}#判斷條件為真的話 test 程序返回0 否則非零

[ expression ]#判斷條件為真的話返回0 否則非零

test"abc"="def"#查看返回值 echo $? 顯示 1匀泊,因?yàn)闂l件為假

test"abc"!="def"#查看返回值 echo $? 顯示 0优训,因?yàn)闂l件為真

test-a /tmp;echo$?#調(diào)用 test 判斷 /tmp 是否存在,并打印 test 的返回值

[-a/tmp ];echo$?#和上面完全等價(jià)各聘,/tmp 肯定是存在的揣非,所以輸出是 0

testcond&&cmd1#判斷條件為真時(shí)執(zhí)行 cmd1

[ cond ]&&cmd1#和上面完全等價(jià)

[ cond ]&&cmd1||cmd2#條件為真執(zhí)行 cmd1 否則執(zhí)行 cmd2

#判斷 /etc/passwd 文件是否存在

#經(jīng)典的 if 語(yǔ)句就是判斷后面的命令返回值為0的話,認(rèn)為條件為真躲因,否則為假

iftest-e /etc/passwd;then

echo"alright it exists ..."

else

echo"it doesn't exist ..."

fi

#和上面完全等價(jià)妆兑,[ 是個(gè)和 test 一樣的可執(zhí)行程序,但最后一個(gè)參數(shù)必須為 ]

#這個(gè)名字為 "[" 的可執(zhí)行程序一般就在 /bin 或 /usr/bin 下面毛仪,比 test 優(yōu)雅些

if[-e/etc/passwd ];then

echo"alright it exists ..."

else

echo"it doesn't exist ..."

fi

#和上面兩個(gè)完全等價(jià)搁嗓,其實(shí)到 bash 時(shí)代 [ 已經(jīng)是內(nèi)部命令了,用 enable 可以看到

[-e/etc/passwd ]&&echo"alright it exists"||echo"it doesn't exist"

#判斷變量的值

if["$varname"="foo"];then

echo"this is foo"

elif["$varname"="bar"];then

echo"this is bar"

else

echo"neither"

fi

#復(fù)雜條件判斷箱靴,注意 || 和 && 是完全兼容 POSIX 的推薦寫法

if[$x-gt10 ]&&[$x-lt20 ];then

echo"yes, between 10 and 20"

fi

#可以用 && 命令連接符來做和上面完全等價(jià)的事情

[$x-gt10 ]&&[$x-lt20 ]&&echo"yes, between 10 and 20"

#小括號(hào)和 -a -o 是 POSIX XSI 擴(kuò)展寫法腺逛,小括號(hào)是字面量,輸入時(shí)前面要加反斜桿

if[\($x-gt10\)-a\($x-lt20\)];then

echo"yes, between 10 and 20"

fi

#同樣可以用 && 命令連接符來做和上面完全等價(jià)的事情

[\($x-gt10\)-a\($x-lt20\)]&&echo"yes, between 10 and 20"

#判斷程序存在的話就執(zhí)行

[-x/bin/ls ]&&/bin/ls -l

#如果不考慮兼容 posix sh 和 dash 這些的話衡怀,可用 bash 獨(dú)有的 ((..)) 和 [[..]]:

https://www.ibm.com/developerworks/library/l-bash-test/index.html

##############################################################################

#流程控制:while / for / case / until

##############################################################################

#while 循環(huán)

whilecondition;do

? ? statements

done

i=1

while[$i-le10 ];do

echo$i;

i=$(expr$i+ 1)

done

#for 循環(huán):上面的 while 語(yǔ)句等價(jià)

foriin{1..10};do

echo$i

done

forname [in list];do

? ? statements

done

#for 列舉某目錄下面的所有文件

forfin/home/*;do

echo$f

done

#bash 獨(dú)有的 (( .. )) 語(yǔ)句棍矛,更接近 C 語(yǔ)言,但是不兼容 posix sh

for((initialisation ; ending condition ; update));do

? ? statements

done

#和上面的寫法等價(jià)

for((i=0; i<10; i++));doecho$i;done

#case 判斷

caseexpressionin

? ? pattern1 )

? ? ? ? statements ;;

? ? pattern2 )

? ? ? ? statements ;;

*)

? ? ? ? otherwise ;;

esac

#until 語(yǔ)句

untilcondition;do

? ? statements

done

#select 語(yǔ)句

selectname[in list];do

statements that can use$name

done

##############################################################################

#命令處理

##############################################################################

commandls#忽略 alias 直接執(zhí)行程序或者內(nèi)建命令 ls

builtincd#忽略 alias 直接運(yùn)行內(nèi)建的 cd 命令

enable#列出所有 bash 內(nèi)置命令抛杨,或禁止某命令

help{builtin_command}#查看內(nèi)置命令的幫助(僅限 bash 內(nèi)置命令)

eval$script#對(duì) script 變量中的字符串求值(執(zhí)行)

##############################################################################

#輸出/輸入 重定向

##############################################################################

cmd1|cmd2#管道够委,cmd1 的標(biāo)準(zhǔn)輸出接到 cmd2 的標(biāo)準(zhǔn)輸入

<file#將文件內(nèi)容重定向?yàn)槊畹臉?biāo)準(zhǔn)輸入

>file#將命令的標(biāo)準(zhǔn)輸出重定向到文件,會(huì)覆蓋文件

>>file#將命令的標(biāo)準(zhǔn)輸出重定向到文件怖现,追加不覆蓋

>|file#強(qiáng)制輸出到文件茁帽,即便設(shè)置過:set -o noclobber

n>|file#強(qiáng)制將文件描述符 n的輸出重定向到文件

<>file#同時(shí)使用該文件作為標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出

n<>file#同時(shí)使用文件作為文件描述符 n 的輸出和輸入

n>file#重定向文件描述符 n 的輸出到文件

n<file#重定向文件描述符 n 的輸入為文件內(nèi)容

n>&#將標(biāo)準(zhǔn)輸出 dup/合并 到文件描述符 n

n<&#將標(biāo)準(zhǔn)輸入 dump/合并 定向?yàn)槊枋龇?n

n>&m#文件描述符 n 被作為描述符 m 的副本屈嗤,輸出用

n<&m#文件描述符 n 被作為描述符 m 的副本,輸入用

&>file#將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向到文件

<&-#關(guān)閉標(biāo)準(zhǔn)輸入

>&-#關(guān)閉標(biāo)準(zhǔn)輸出

n>&-#關(guān)閉作為輸出的文件描述符 n

n<&-#關(guān)閉作為輸入的文件描述符 n

diff<(cmd1)<(cmd2)#比較兩個(gè)命令的輸出

##############################################################################

#文本處理 - cut

##############################################################################

cut -c 1-16#截取每行頭16個(gè)字符

cut -c 1-16 file#截取指定文件中每行頭 16個(gè)字符

cut -c3-#截取每行從第三個(gè)字符開始到行末的內(nèi)容

cut -d':'-f5#截取用冒號(hào)分隔的第五列內(nèi)容

cut -d';'-f2,10#截取用分號(hào)分隔的第二和第十列內(nèi)容

cut -d''-f3-7#截取空格分隔的三到七列

echo"hello"|cut -c1-3#顯示 hel

echo"hello sir"|cut -d''-f2#顯示 sir

ps|tr -s""|cut -d""-f 2,3,4#cut 搭配 tr 壓縮字符

##############################################################################

#文本處理 - awk / sed

##############################################################################

awk'{print $5}'file#打印文件中以空格分隔的第五列

awk -F',''{print $5}'file#打印文件中以逗號(hào)分隔的第五列

awk'/str/ {print $2}'file#打印文件中包含 str 的所有行的第二列

awk -F',''{print $NF}'file#打印逗號(hào)分隔的文件中的每行最后一列

awk'{s+=$1} END {print s}'file#計(jì)算所有第一列的合

awk'NR%3==1'file#從第一行開始扭屁,每隔三行打印一行

sed's/find/replace/'file#替換文件中首次出現(xiàn)的字符串并輸出結(jié)果

sed'10s/find/replace/'file#替換文件第 10 行內(nèi)容

sed'10,20s/find/replace/'file#替換文件中 10-20 行內(nèi)容

sed -r's/regex/replace/g'file#替換文件中所有出現(xiàn)的字符串

sed -i's/find/replace/g'file#替換文件中所有出現(xiàn)的字符并且覆蓋文件

sed -i'/find/i\newline'file#在文件的匹配文本前插入行

sed -i'/find/a\newline'file#在文件的匹配文本后插入行

sed'/line/s/find/replace/'file#先搜索行特征再執(zhí)行替換

sed -e's/f/r/'-e's/f/r'file#執(zhí)行多次替換

sed's#find#replace#'file#使用 # 替換 / 來避免 pattern 中有斜桿

sed -i -r's/^\s+//g'file#刪除文件每行頭部空格

sed'/^$/d'file#刪除文件空行并打印

sed -i's/\s\+$//'file#刪除文件每行末尾多余空格

sed -n'2p'file#打印文件第二行

sed -n'2,5p'file#打印文件第二到第五行

##############################################################################

#排序 - sort

##############################################################################

sort file#排序文件

sort -r file#反向排序(降序)

sort -n file#使用數(shù)字而不是字符串進(jìn)行比較

sort -t: -k 3n /etc/passwd#按 passwd 文件的第三列進(jìn)行排序

sort -u file#去重排序

##############################################################################

#快速跳轉(zhuǎn) - https://github.com/rupa/z

##############################################################################

source/path/to/z.sh#.bashrc 中初始化 z.sh

z#列出所有歷史路徑以及他們的權(quán)重

z foo#跳到歷史路徑中匹配 foo 的權(quán)重最大的目錄

z foo bar#跳到歷史路徑中匹配 foo 和 bar 權(quán)重最大的目錄

z -l foo#列出所有歷史路徑中匹配 foo 的目錄及權(quán)重

z -r foo#按照最高訪問次數(shù)優(yōu)先進(jìn)行匹配跳轉(zhuǎn)

z -t foo#按照最近訪問優(yōu)先進(jìn)行匹配跳轉(zhuǎn)

##############################################################################

#鍵盤綁定

##############################################################################

bind'"\eh":"\C-b"'#綁定 ALT+h 為光標(biāo)左移,同 CTRL+b /

bind'"\el":"\C-f"'#綁定 ALT+l 為光標(biāo)右移涩禀,同 CTRL+f /

bind'"\ej":"\C-n"'#綁定 ALT+j 為下條歷史料滥,同 CTRL+n /

bind'"\ek":"\C-p"'#綁定 ALT+k 為上條歷史,同 CTRL+p /

bind'"\eH":"\eb"'#綁定 ALT+H 為光標(biāo)左移一個(gè)單詞埋泵,同 ALT-b

bind'"\eL":"\ef"'#綁定 ALT+L 為光標(biāo)右移一個(gè)單詞幔欧,同 ALT-f

bind'"\eJ":"\C-a"'#綁定 ALT+J 為移動(dòng)到行首罪治,同 CTRL+a /

bind'"\eK":"\C-e"'#綁定 ALT+K 為移動(dòng)到行末丽声,同 CTRL+e /

bind'"\e;":"ls -l\n"'#綁定 ALT+; 為執(zhí)行 ls -l 命令

##############################################################################

#網(wǎng)絡(luò)管理:ip / ifconfig / nmap ...

##############################################################################

ip a#顯示所有網(wǎng)絡(luò)地址,同 ip address

ip a show eth1#顯示網(wǎng)卡 IP 地址

ip a add 172.16.1.23/24 dev eth1#添加網(wǎng)卡 IP 地址

ip a del 172.16.1.23/24 dev eth1#刪除網(wǎng)卡 IP 地址

ip link show dev eth0#顯示網(wǎng)卡設(shè)備屬性

ip linkseteth1 up#激活網(wǎng)卡

ip linkseteth1 down#關(guān)閉網(wǎng)卡

ip linkseteth1 address {mac}#修改 MAC 地址

ip neighbour#查看 ARP 緩存

ip route#查看路由表

ip route add 10.1.0.0/24 via 10.0.0.253 dev eth0#添加靜態(tài)路由

ip route del 10.1.0.0/24#刪除靜態(tài)路由

ifconfig#顯示所有網(wǎng)卡和接口信息

ifconfig -a#顯示所有網(wǎng)卡(包括開機(jī)沒啟動(dòng)的)信息

ifconfig eth0#指定設(shè)備顯示信息

ifconfig eth0 up#激活網(wǎng)卡

ifconfig eth0 down#關(guān)閉網(wǎng)卡

ifconfig eth0 192.168.120.56#給網(wǎng)卡配置 IP 地址

ifconfig eth0 10.0.0.8 netmask 255.255.255.0 up#配置 IP 并啟動(dòng)

ifconfig eth0 hw ether 00:aa:bb:cc:dd:ee#修改 MAC 地址

nmap 10.0.0.12#掃描主機(jī) 1-1000 端口

nmap -p 1024-65535 10.0.0.12#掃描給定端口

nmap 10.0.0.0/24#給定網(wǎng)段掃描局域網(wǎng)內(nèi)所有主機(jī)

nmap -O -sV 10.0.0.12#探測(cè)主機(jī)服務(wù)和操作系統(tǒng)版本

##############################################################################

#有趣的命令

##############################################################################

man hier#查看文件系統(tǒng)的結(jié)構(gòu)和含義

mantest#查看 posix sh 的條件判斷幫助

man ascii#顯示 ascii 表

getconf LONG_BIT#查看系統(tǒng)是 32 位還是 64 位

bind-P#列出所有 bash 的快捷鍵

mount|column -t#漂亮的列出當(dāng)前加載的文件系統(tǒng)

curl ip.cn#取得外網(wǎng) ip 地址和服務(wù)商信息

disown-a&&exit#關(guān)閉所有后臺(tái)任務(wù)并退出

cat /etc/issue#查看 Linux 發(fā)行版信息

lsof -i port:80#哪個(gè)程序在使用 80 端口觉义?

showkey -a#取得按鍵的 ASCII 碼

svn diff|view -#使用 Vim 來顯示帶色彩的 diff 輸出

mv filename.{old,new}#快速文件改名

timeread#使用 CTRL-D 停止雁社,最簡(jiǎn)單的計(jì)時(shí)功能

cp file.txt{,.bak}#快速備份文件

sudo touch /forcefsck#強(qiáng)制在下次重啟時(shí)掃描磁盤

find~-mmin 60 -type f#查找 $HOME 目錄中,60 分鐘內(nèi)修改過的文件

curl wttr.in/~beijing#查看北京的天氣預(yù)報(bào)

echo${SSH_CLIENT%%*}#取得你是從什么 IP 鏈接到當(dāng)前主機(jī)上的

echo$[RANDOM%X+1]#取得 1 到 X 之間的隨機(jī)數(shù)

bind-x'"\C-l":ls -l'#設(shè)置 CTRL+l 為執(zhí)行 ls -l 命令

find / -type f -size +5M#查找大于 5M 的文件

chmod --reference f1 f2#將 f2 的權(quán)限設(shè)置成 f1 一模一樣的

curl -L cheat.sh#速查表大全

##############################################################################

#常用技巧

##############################################################################

#列出最常使用的命令

history|awk'{a[$2]++}END{for(i in a){print a[i] " " i}}'|sort -rn|head

#列出所有網(wǎng)絡(luò)狀態(tài):ESTABLISHED / TIME_WAIT / FIN_WAIT1 / FIN_WAIT2

netstat -n|awk'/^tcp/ {++tt[$NF]} END {for (a in tt) print a, tt[a]}'

#通過 SSH 來 mount 文件系統(tǒng)

sshfs name@server:/path/to/folder /path/to/mount/point

#顯示前十個(gè)運(yùn)行的進(jìn)程并按內(nèi)存使用量排序

ps aux|sort -nk +4|tail

#在右上角顯示時(shí)鐘

whilesleep 1;dotput sc;tput cup 0$(($(tput cols)-29));date;tput rc;done&

#從網(wǎng)絡(luò)上的壓縮文件中解出一個(gè)文件來晒骇,并避免保存中間文件

wget -qO -"http://www.tarball.com/tarball.gz"|tar zxvf -

#性能測(cè)試:測(cè)試處理器性能

python -c"import test.pystone;print(test.pystone.pystones())"

#性能測(cè)試:測(cè)試內(nèi)存帶寬

dd if=/dev/zero of=/dev/null bs=1M count=32768

#Linux 下掛載一個(gè) iso 文件

mount /path/to/file.iso /mnt/cdrom -oloop

#通過主機(jī) A 直接 ssh 到主機(jī) B

ssh -t hostA ssh hostB

#下載一個(gè)網(wǎng)站的所有圖片

wget -r -l1 --no-parent -nH -nd -P/tmp -A".gif,.jpg"http://example.com/images

#快速創(chuàng)建項(xiàng)目目錄

mkdir -p work/{project1,project2}/{src,bin,bak}

#按日期范圍查找文件

find.-type f -newermt"2010-01-01"!-newermt"2010-06-01"

#顯示當(dāng)前正在使用網(wǎng)絡(luò)的進(jìn)程

lsof -P -i -n|cut -f 1 -d""|uniq|tail -n +2

#Vim 中保存一個(gè)沒有權(quán)限的文件

:w!sudo tee>/dev/null %

#在 .bashrc / .bash_profile 中加載另外一個(gè)文件(比如你保存在 github 上的配置)

source~/github/profiles/my_bash_init.sh

#反向代理:將外網(wǎng)主機(jī)(202.115.8.1)端口(8443)轉(zhuǎn)發(fā)到內(nèi)網(wǎng)主機(jī) 192.168.1.2:443

ssh -CqTnN -R 0.0.0.0:8443:192.168.1.2:443? user@202.115.8.1

#正向代理:將本地主機(jī)的 8443 端口霉撵,通過 192.168.1.3 轉(zhuǎn)發(fā)到 192.168.1.2:443

ssh -CqTnN -L 0.0.0.0:8443:192.168.1.2:443? user@192.168.1.3

#socks5 代理:把本地 1080 端口的 socks5 的代理請(qǐng)求通過遠(yuǎn)程主機(jī)轉(zhuǎn)發(fā)出去

ssh -CqTnN -D localhost:1080? user@202.115.8.1

#終端下正確設(shè)置 ALT 鍵和 BackSpace 鍵

http://www.skywind.me/blog/archives/2021

##############################################################################

#有用的函數(shù)

##############################################################################

#自動(dòng)解壓:判斷文件后綴名并調(diào)用相應(yīng)解壓命令

functionq-extract(){

if[-f$1];then

case$1in

*.tar.bz2)? tar -xvjf$1;;

*.tar.gz)? ? tar -xvzf$1;;

*.tar.xz)? ? tar -xvJf$1;;

*.bz2)? ? ? bunzip2$1;;

*.rar)? ? ? rar x$1;;

*.gz)? ? ? ? gunzip$1;;

*.tar)? ? ? tar -xvf$1;;

*.tbz2)? ? ? tar -xvjf$1;;

*.tgz)? ? ? tar -xvzf$1;;

*.zip)? ? ? unzip$1;;

*.Z)? ? ? ? uncompress$1;;

*.7z)? ? ? ? 7z x$1;;

*)echo"don't know how to extract '$1'...";;

esac

else

echo"'$1' is not a valid file!"

fi

}

#自動(dòng)壓縮:判斷后綴名并調(diào)用相應(yīng)壓縮程序

functionq-compress(){

if[-n"$1"];then

FILE=$1

case$FILEin

*.tar)shift&&tar -cf$FILE$*;;

*.tar.bz2)shift&&tar -cjf$FILE$*;;

*.tar.xz)shift&&tar -cJf$FILE$*;;

*.tar.gz)shift&&tar -czf$FILE$*;;

*.tgz)shift&&tar -czf$FILE$*;;

*.zip)shift&&zip$FILE$*;;

*.rar)shift&&rar$FILE$*;;

esac

else

echo"usage: q-compress ./foo ./bar"

fi

}

#漂亮的帶語(yǔ)法高亮的 color cat ,需要先 pip install pygments

functionccat(){

localstyle="monokai"

if[$#-eq0 ];then

pygmentize -P style=$style-P tabsize=4 -f terminal256 -g

else

forNAMEin$@;do

pygmentize -P style=$style-P tabsize=4 -f terminal256 -g"$NAME"

done

fi

}

##############################################################################

#好玩的配置

##############################################################################

#放到你的 ~/.bashrc 配置文件中洪囤,給 man 增加漂亮的色彩高亮

exportLESS_TERMCAP_mb=$'\E[1m\E[32m'

exportLESS_TERMCAP_mh=$'\E[2m'

exportLESS_TERMCAP_mr=$'\E[7m'

exportLESS_TERMCAP_md=$'\E[1m\E[36m'

exportLESS_TERMCAP_ZW=""

exportLESS_TERMCAP_us=$'\E[4m\E[1m\E[37m'

exportLESS_TERMCAP_me=$'\E(B\E[m'

exportLESS_TERMCAP_ue=$'\E[24m\E(B\E[m'

exportLESS_TERMCAP_ZO=""

exportLESS_TERMCAP_ZN=""

exportLESS_TERMCAP_se=$'\E[27m\E(B\E[m'

exportLESS_TERMCAP_ZV=""

exportLESS_TERMCAP_so=$'\E[1m\E[33m\E[44m'

#ALT+hjkl/HJKL 快速移動(dòng)光標(biāo)徒坡,將下面內(nèi)容添加到 ~/.inputrc 中可作用所有工具,

#包括 bash/zsh/python/lua 等使用 readline 的工具瘤缩,幫助見:info rluserman

"\eh": backward-char

"\el": forward-char

"\ej": next-history

"\ek": previous-history

"\eH": backward-word

"\eL": forward-word

"\eJ": beginning-of-line

"\eK": end-of-line

##############################################################################

#References

##############################################################################

https://github.com/Idnan/bash-guide

http://www.linuxstall.com/linux-command-line-tips-that-every-linux-user-should-know/

https://ss64.com/bash/syntax-keyboard.html

http://wiki.bash-hackers.org/commands/classictest

https://www.ibm.com/developerworks/library/l-bash-test/index.html

https://www.cyberciti.biz/faq/bash-loop-over-file/

https://linuxconfig.org/bash-scripting-tutorial

https://github.com/LeCoupa/awesome-cheatsheets/blob/master/languages/bash.sh

https://devhints.io/bash

https://github.com/jlevy/the-art-of-command-line

https://yq.aliyun.com/articles/68541

#vim: set ts=4 sw=4 tw=0 et :

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喇完,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剥啤,更是在濱河造成了極大的恐慌锦溪,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件府怯,死亡現(xiàn)場(chǎng)離奇詭異刻诊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牺丙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門则涯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冲簿,你說我怎么就攤上這事是整。” “怎么了民假?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵浮入,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我羊异,道長(zhǎng)事秀,這世上最難降的妖魔是什么彤断? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮易迹,結(jié)果婚禮上宰衙,老公的妹妹穿的比我還像新娘。我一直安慰自己睹欲,他們只是感情好供炼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窘疮,像睡著了一般袋哼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闸衫,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天涛贯,我揣著相機(jī)與錄音,去河邊找鬼蔚出。 笑死弟翘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的骄酗。 我是一名探鬼主播稀余,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼趋翻!你這毒婦竟也來了睛琳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤嘿歌,失蹤者是張志新(化名)和其女友劉穎掸掏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宙帝,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丧凤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了步脓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愿待。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖靴患,靈堂內(nèi)的尸體忽然破棺而出仍侥,到底是詐尸還是另有隱情,我是刑警寧澤鸳君,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布农渊,位于F島的核電站,受9級(jí)特大地震影響或颊,放射性物質(zhì)發(fā)生泄漏砸紊。R本人自食惡果不足惜传于,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望醉顽。 院中可真熱鬧沼溜,春花似錦、人聲如沸游添。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唆涝。三九已至找都,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間石抡,已是汗流浹背檐嚣。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工助泽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啰扛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓嗡贺,卻偏偏與公主長(zhǎng)得像隐解,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诫睬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ctrl+m 最大化編輯區(qū)域 cmd+l 跳轉(zhuǎn)至行
    GS的BLOG閱讀 167評(píng)論 0 0
  • 《牧羊少年的奇幻之旅》圣地亞哥是幸運(yùn)的煞茫,甚至你可以說他是人生贏家,他獲得了財(cái)寶摄凡,擁有了美麗的愛情续徽。但他同時(shí)也是...
    顧盼天明閱讀 519評(píng)論 0 0