Linux 常用命令总结

查询命令

find

* find [指定查找目录] [查找规则] [查找完后执行的action]

* find ~/.m2 -name “*.lastUpdated” -exec grep -q “Could not transfer” {} \; -print -exec rm {} \;(查找以lastUpdated 为后缀的文件中包含 “Could not…”的文件,打印并删除他)(`*`表示 通配任意的字符;?表示 通配任意的单个字符)

* -iregex/regex (后面跟正则表达式,i忽略大小写)

* -user     //根据属主来查找文件

* -group     //根据属组来查找文件

* -a and -o and –not     //连接多个条件,-a是与关系,-o是或关系,-not是取反

* -atime;-mtime;-ctime;-amin;-mmin;-cmin     //这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟(find /tmp –atime +5 //表示查找在五天内没有访问过的文件;find /tmp -atime -5 //表示查找在五天内访问过的文件)

-type    //根据文件类型来查找文件(f 普通文件;d目录文件; l 链接文件; b块设备文件;c 字符设备文件; p 管道文件;s socket文件)

* -size    //根据文件大小来查找文件(“find /tmp -size 2M”查找在/tmp 目录下等于2M的文件;+2M,大于;-2M,小于)

-perm    //根据文件权限来查找文件(“find /tmp -perm 755 ” 查找在/tmp目录下权限是755的文件)

[查找完执行的action]

[“-print”默认情况下的动作;”-ls”查找到后用ls 显示出来;”-ok [commend] “查找后执行命令的时候询问用户是否要执行;” -exec [commend]”查找后执行命令的时候不询问用户,直接执行]

“find /tmp -atime +30 –exec rm –rf {} \;”//删除查找到的超过30天没有访问过文件

 “find /tmp -iregex “.*.[sh,bat]” -exec cp {} {}.old \;”// 替代查找到的文件,保留源文件(mv不保留)

locate

locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。

locate [option] [pattern]

less

less 工具是对文件或其它输出进行分页显示的工具(建议结合管道针对其他输出使用,文件vim处理),提供前后翻页功能,以及搜索功能。

-b [缓冲区大小] 设置缓冲区的大小

-e 当文件显示结束后,自动离开

-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件

-g 只标志最后搜索的关键词

-i 忽略搜索时的大小写

-m 显示类似more命令的百分比

-N 显示每行的行号

-o [文件名] 将less 输出的内容在指定文件中保存起来

-Q 不使用警告音

-s 显示连续空行为一行

-S 行过长时间将超出部分舍弃

-x [数字] 将“tab”键显示为规定的数字空格

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重复前一个搜索(与 / 或 ? 有关)

N:反向重复前一个搜索(与 / 或 ? 有关)

b 向后翻一页

d 向后翻半页

h 显示帮助界面

Q 退出less 命令

u 向前滚动半页

y 向前滚动一行

空格键 滚动一页

回车键 滚动一行

[pagedown]: 向下翻动一页

[pageup]: 向上翻动一页

which

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。(eg:whereis -b tomcat)

和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。

但是该数据库文件并不是实时更新,默认情况下是一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

tail

tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.

tail[必要参数][选择参数][文件]

-f 循环读取

-q 不显示处理信息

-v 显示详细的处理信息

-c[数目] 显示的字节数

-n[行数] 显示行数

–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.

-q, –quiet, –silent 从不输出给出文件名的首部

-s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

grep [选项]… PATTERN [FILE]…

-n 在显示符合范本样式的那一列之前,标示出该列的编号。

-q 不显示任何信息。

-R/-r 此参数的效果和指定“-d recurse”参数相同。

-e [范本样式] 指定字符串作为查找文件内容的范本样式。

-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。

-f [范本文件] 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。

grep 支持的正则语法

^ 锚定行的开始 如:’^grep’匹配所有以grep开头的行。

$锚定行的结束 如:’grep$’匹配所有以grep结尾的行。

. 匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。

* 匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[] 匹配一个指定范围内的字符,如’[Gg]rep’匹配Grep和grep。

[^] 匹配一个不在指定范围内的字符,如:’[^A-FH-Z]rep’匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

\(..\) 标记匹配字符,如’\(love\)’,love被标记为1。

\ 锚定单词的开始,如:’\匹配包含以grep开头的单词的行。

\> 锚定单词的结束,如’grep\>’匹配包含以grep结尾的单词的行。

x\{m\} 重复字符x,m次,如:’0\{5\}’匹配包含5个o的行。

x\{m,\} 重复字符x,至少m次,如:’o\{5,\}’匹配至少有5个o的行。

x\{m,n\}重复字符x,至少m次,不多于n次,如:’o\{5,10\}’匹配5–10个o的行。

\w 匹配文字和数字字符,也就是[A-Za-z0-9],如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p。

\b 单词锁定符,如: ‘\bgrep\b’只匹配grep。

eg:

ls -R 查找目录 | grep “文件名所带字符”(递归查找当前文件夹下,指定文件名)

grep -R “word” “dir”(递归查文件夹下所有文件中的”word“)

grep -E “[1-9]+” 等于 egrep “[1-9]+”

Other Command

chmod

chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法:一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

chmod [-cfvR] [–help] [–version] mode file

权限范围:

u :目录或者文件的当前的用户

g :目录或者文件的当前的群组

o :除了目录或者文件的当前用户或群组之外的用户或者群组

a :所有的用户及群组

权限代号:

r :读权限,用数字4表示

w :写权限,用数字2表示

x :执行权限,用数字1表示

- :删除权限,用数字0表示

s :特殊权限 ([特殊权限](http://alan-hjkl.iteye.com/blog/1526858))

tar

Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

常见解压/压缩命令

tar

解包:tar xvf FileName.tar

打包:tar cvf FileName.tar DirName

(注:tar是打包,不是压缩!)

.gz

解压1:gunzip FileName.gz

解压2:gzip -d FileName.gz

压缩:gzip FileName

.tar.gz 和 .tgz

解压:tar zxvf FileName.tar.gz

压缩:tar zcvf FileName.tar.gz DirName

.bz2

解压1:bzip2 -d FileName.bz2

解压2:bunzip2 FileName.bz2

压缩: bzip2 -z FileName

.tar.bz2

解压:tar jxvf FileName.tar.bz2

压缩:tar jcvf FileName.tar.bz2 DirName

.bz

解压1:bzip2 -d FileName.bz

解压2:bunzip2 FileName.bz

压缩:未知

.tar.bz

解压:tar jxvf FileName.tar.bz

压缩:未知

.Z

解压:uncompress FileName.Z

压缩:compress FileName

.tar.Z

解压:tar Zxvf FileName.tar.Z

压缩:tar Zcvf FileName.tar.Z DirName

.zip

解压:unzip FileName.zip

压缩:zip FileName.zip DirName

.rar

解压:rar x FileName.rar

压缩:rar a FileName.rar DirName

netstat

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

netstat [-acCeFghilMnNoprstuvVwx][-A [网络类型]][–ip]

命令参数:

-a或–all 显示所有连线中的Socket。

-A[网络类型]或–[网络类型] 列出该网络类型连线中的相关地址。

-c或–continuous 持续列出网络状态。

-C或–cache 显示路由器配置的快取信息。

-e或–extend 显示网络其他相关信息。

-F或–fib 显示FIB。

-g或–groups 显示多重广播功能群组组员名单。

-h或–help 在线帮助。

-i或–interfaces 显示网络界面信息表单。

-l或–listening 显示监控中的服务器的Socket。

-M或–masquerade 显示伪装的网络连线。

-n或–numeric 直接使用IP地址,而不通过域名服务器。

-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。

-o或–timers 显示计时器。

-p或–programs 显示正在使用Socket的程序识别码和程序名称。

-r或–route 显示Routing Table。

-s或–statistice 显示网络工作信息统计表。

-t或–tcp 显示TCP传输协议的连线状况。

-u或–udp 显示UDP传输协议的连线状况。

-v或–verbose 显示指令执行过程。

-V或–version 显示版本信息。

-w或–raw 显示RAW传输协议的连线状况。

-x或–unix 此参数的效果和指定”-A unix”参数相同。

–ip或–inet 此参数的效果和指定”-A inet”参数相同。

状态说明:

LISTEN:侦听来自远方的TCP端口的连接请求

SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)

SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)

ESTABLISHED:代表一个打开的连接

FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:从远程TCP等待连接中断请求

CLOSE-WAIT:等待从本地用户发来的连接中断请求

CLOSING:等待远程TCP对连接中断的确认

LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)

TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:没有任何连接状态

eg:

netstat -apu显示UDP端口号的使用情况

netstat -a | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’显统计机器中网络连接各个状态个数

netstat -nat | grep “192.168.120.20:16067” |awk ‘{print$5}’|awk -F: ‘{print$4}’|sort|uniq -c|sort -nr|head -20查看连接某服务端口最多的的IP地址

netstat -anpt | grep ‘:16064’找出运行在指定端口的进程

ps

ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

命令参数:

-a 显示同一终端下的所有程序

-A 显示所有进程

c 显示进程的真实名称

-N 反向选择

-e 等于“-A”

e 显示环境变量

f 显示程序间的关系

-H 显示树状结构

r 显示当前终端的进程

T 显示当前终端的所有程序

u 指定用户的所有进程

-au 显示较详细的资讯

-aux 显示所有包含其他使用者的行程

-C【命令】 列出指定命令的状况

–lines[行数]每页显示的行数

–width[字符数] 每页显示的字符数

–help 显示帮助信息

–version 显示版本显示

linux上进程有5种状态:

1. 运行(正在运行或在运行队列中等待)

2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)

3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)

4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)

R 运行 runnable (on run queue)

S 中断 sleeping

T 停止 traced or stopped

Z 僵死 a defunct (”zombie”) process

输出含义:

F 代表这个程序的旗标 (flag), 4 代表使用者为 super user

S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍

UID 程序被该 UID 所拥有

PID 就是这个程序的 ID !

PPID 则是其上级父程序的ID

C CPU 使用的资源百分比

PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍

NI 这个是 Nice 值,在下一小节我们会持续介绍

ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-“

SZ 使用掉的内存大小

WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作

TTY 登入者的终端机位置

TIME 使用掉的 CPU 时间。

CMD 所下达的指令为何

eg:

ps -u root显示指定用户信息

ps -ef显示所有进程信息,连同命令行

ps aux列出目前所有的正在内存当中的程序

watch

可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令

命令参数:

-n或–interval watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。

-d或–differences 用-d或–differences 选项watch 会高亮显示变化的区域。 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来。

-t 或-no-title 会关闭watch命令在顶部的时间间隔,命令,当前时间的输出。

-h, –help 查看帮助文档

eg:

watch -n 1 -d ‘pstree|grep http’每隔一秒高亮显示http链接数的变化情况

watch -d ‘ls -l|grep scf’监测当前目录中 scf’ 的文件的变化

watch -n 10 ‘cat /proc/loadavg’10秒一次输出系统的平均负载

Other Command Reference

vim

模式切换

其它模式==>普通模式

Esc

普通模式==>插入模式

i 在光标前插入 I 在行首插入

a 在光标后插入 A 在行末插入

o 在当前行之下新建行 O 在当前行之上新建行

r 替换当前字符 R 从当前字符开始替换

普通模式==>命令模式

:

普通模式==>可视模式

v ,V ,

插入

i在光标之前插入

I在一行的开头处插入

a在光标之后追加

A在一行的结尾处追加

o在光标所在位置的下一行打开新行插入

O在光标所在位置的上一行打开新行插入

查找

查询环境设置

:set hlsearch打开高亮显示查找的文本

:set nohlsearch关闭高亮显示查找的文本

:nohlsearch关闭当前高亮显示的结果

:set incsearch打开显示查找匹配过程

:set noincsearch关闭显示查找匹配过程

:set ignorecase忽略大小写

:set noignorecase精确匹配大小写

:set nowrapscan禁止循环查找方式

:set wrapscan启用循环查找方式

Command

/csdn向下查找一个名称为csdn的字符串

?csdn向上查找一个名称为csdn的字符串

* 和 #匹配光标当前所在的单词,移动光标到下一个匹配单词(*是下一个,#是上一个)

n表示向下继续查找前一个查找的操作(和上面的操作配合使用)

N表示向上继续查找前一个查找的操作(和上面的操作配合使用)

/csdn\c忽略大小写的查找时候,在索要查找的字符串后面加\c

:%s///gn统计当前模式匹配的次数(实际上调用了substitute命令,标志位n会抑制正常的替换操作,替换域无论为什么都是不生效的。)

替换

:[range]s/from/to/[flags]

[range]

不写默认为光标所在的行。

.光标所在的行。

1第一行。

$最后一行。

33第33行。

‘a标记a所在的行(之前要使用ma做过标记)。

.+1当前光标所在行的下面一行。

$-1倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)。

22,33第22~33行。

1,$第1行 到 最后一行。

1,.第1行 到 当前行。

.,$当前行 到 最后一行。

‘a,’b标记a所在的行 到 标记b所在的行。

%所有行(与 1,$ 等价)。

?chapter?从当前位置向上搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式。

/chapter/从当前位置向下搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式。

[flags]

无只对指定范围内的第一个匹配项进行替换。

g对指定范围内的所有匹配项进行替换。(g 放在命令末尾,表示对搜索字符串的每次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作)

c在替换前请求用户确认。

e忽略执行过程中的错误。

eg:

:s/from/to/将当前行中的第一个from,替换成to。如果当前行含有多个from,则只会替换其中的第一个。

:s/from/to/g将当前行中的所有from都替换成to。

:s/from/to/gc将当前行中的所有from都替换成to,但是每一次替换之前都会询问请求用户确认此操作。

:33s/from/to/g在第33行进行替换操作。

:$s/from/to/g在最后一行进行替换操作。

:%s/from/to/g对所有行的内容进行替换。

:g/str1/s//str2/g (等于”:1,$ s/str1/str2/g“)用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s/str2/str3/g用字符串 str3 替换正文中所有出现str1所在行的所有字符串 str2

复制粘贴

vim有12个粘贴板(某些版本大于12个),0-9,a,”,+等,其中”为默认粘贴板,+为系统剪贴板(:reg查看有没有+剪贴板,没有的话需要安装gnome)

y复制选定的内容(结合v,V命令)

yy/Y复制当前行

yw复制当前词

2yy/y2y两行

y$复制至行尾

y^复制至行首

“+yy复制当前行到系统剪贴板

p小写p代表贴至游标后(下)。

P大写P代表贴至游标前(上)。

“+p粘贴系统剪贴板内容

跳转

NG/:N到第 N 行

gg到第一行。(相当于1G,或 :1)

G到最后一行。

w到下一个单词的开头。

e到下一个单词的结尾。(若单词是由blank字符分隔,需要使用大写的E和W)

%匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)

0到行头

$到本行最后一个字符

^到本行的第一个非blank字符

g_到本行最后一个不是blank字符的位置。

fa到本行下一个为a的字符处,你也可以fs到下一个为s的字符。

t,到本行逗号前的第一个字符。逗号可以变成其它字符。

3fa在当前行查找第三个出现的a。

F 和 T和 f 和 t 一样,只不过是相反方向。

hjkl(←↓↑→)左下上右

<ctrl+f>下翻一页

<ctrl+d>下翻半页

<ctrl+b>上翻一页

<ctrl+u>上翻半页

选择

v选中字符

V选中行

Ctrl+v选中块

区域选择

vi”选中当前光标所在”“里的内容

va”选中当前光标所在”“里的内容,同时包含”“

v2a”选中当前光标(#)所在”*”ro#d“***“里的内容,同时包含”“

分屏

split创建分屏 (:vsplit创建垂直分屏,:new 空白文档)

dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。

+ (或 -)增加尺寸

标签页

:tabe /path/to/file.txt在一个新的 tab 页中打开文件

:tabnew新建一个 tab 页

:tabs查看 tab 页列表,通过“>”显示当前窗口、“+”显示可修改的缓冲区

:tabc关闭当前的 tab 页

:tab split在当前缓冲区使用新的 tab 页打开文件

:tabn切换到下一个 tab 页

:tabp切换到上一个 tab 页

:tabr[ewind]转到第一个 tab 页

:tabf[irst]与上一命令作用相同

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容