Windows 10 内置 Linux 子系统初体验

WSL

前言


前段时间,机子上的 win10 又偷偷摸摸升级到了一周年正式版,比较无奈。不过之前听闻这个版本已经支持内置的 Linux 子系统,于是就怀着好奇心试玩了一把。虽然期间遇到了很多问题,但总体来说这个子系统体验还不错,在这里就分享一些关键步骤和遇到的问题,剩下的大家自己折腾吧。。

启用 Linux 子系统


设置(16215版之后不再需要开发人员模式)
Windows功能
安装ing...
  1. 系统升级到一周年正式版及以上(1607)

  2. 依次在 设置 - 更新与安全 - 针对开发人员 选项中,启用"开发人员模式"

  3. 在资源管理器中打开 控制面板\所有控制面板项\程序和功能 , 打开 启用或关闭 Windows功能 , 勾选 适用于Linux的Windows子系统(Beta)

  4. 重启电脑

  5. 命令行运行 lxrun /install /y 开始安装
    安装速度取决于网络情况,下载的文件在 %localappdata%\lxss 目录下 lxss.tar.gz (181M),解压后大概500M, rootfs 目录即为子系统根目录。

  6. 命令行运行 bash 进入Ubuntu
    默认使用的 root 帐号登录,通过指令 passwd 设置密码。

  • 注:本文脚本均在root帐号下操作,因此建议使用root帐号
  1. 毕竟爱折腾,难免会把子系统环境(lxss目录)玩坏掉,因此干正事前最好先备份下以便快速还原。注意,不要直接右键复制或者打包,可能会导致文件权限丢失的。
    xcopy %localappdata%\lxss %localappdata%\lxss.bak /E
  2. 当然,如果你比较任性也可以不执行上一步的备份操作,通过命令行运行 lxrun /uninstall /full 轻松卸载子系统,重复上面的步骤即可重装,不过要注意下载速度时好时坏哦。

通过上面的步骤,已经启用了 win10 自带的 Linux 子系统 ( WSL ),感觉逼格提升了不少。当然,怎么能满足于此呢,接下来就要做一些环境的配置和进一步的挖掘。

更换数据源 ( 参考 )


Ubuntu 下我们可以通过 apt-get 命令 很方便的安装/卸载软件,由于默认的软件包仓库是位于国外的,安装软件的时候就可能遇到各种网络问题或者下载到的一些资源不完整,因此就需要切换数据源为国内的镜像站点来改善。

# 1.备份原来的数据源配置文件
cp /etc/apt/sources.list /etc/apt/sources.list_backup
# 2.编辑数据源配置文件
vi /etc/apt/sources.list

在这里我使用的是阿里云的数据源:

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
# 3.更新配置
apt-get update

注:14986版之后更新了内核,第三方的镜像站可能找不到软件包资源,需要切换回官方的源。经测试 中科大的源 可用

dist=`lsb_release -cs`
cat > /etc/apt/sources.list <<EOF
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist} main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist}-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist}-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist}-security main restricted universe multiverse
EOF

与 Windows 通讯


目前 子系统Windows 之间通过以下两种方式进行通讯

  1. 通过 tcp 协议进行通讯(简单点说就是用网络,端口都是通的)
  1. 通过 /mnt/【盘符】/目录 的方式访问Windows目录
    试过在Windows的资源管理器中直接对子系统环境目录下的文件所做的修改不能被子系统所识别,因此需要在bash下进行操作。

在任何情况下,请勿使用Windows应用程序,工具,脚本,控制台等创建或修改Linux文件

安装 zsh


目前常用的 Linux 系统和 OS X 系统的默认 Shell 都是 bash,但是真正强大的 Shell 是深藏不露的 zsh, 这货绝对是马车中的跑车,跑车中的飞行车,史称『终极 Shell』,但是由于配置过于复杂,所以初期无人问津,很多人跑过来看看 zsh 的配置指南,什么都不说转身就走了。直到有一天,国外有个穷极无聊的程序员开发出了一个能够让你快速上手的zsh项目,叫做「oh my zsh」,Github 网址是:https://github.com/robbyrussell/oh-my-zsh。这玩意就像「X天叫你学会 C++」系列,可以让你神功速成,而且是真的。

zsh 就是一款强大的虚拟终端,网上也都推荐使用 oh my zsh 来管理配置 , 不过对我来说还是不够傻瓜。于是,参考一篇 文章 使用 zsh包管理器 antigen 来管理所有功能,文章中还给了现成的配置。

  • 安装 zsh
sudo apt-get -y install zsh
  • 设置终端的 shell 环境默认为 zsh,输入以下命令( 需要 重启
# 加 sudo 是修改 root 帐号的默认 shell
chsh -s `which zsh`
  • 如果上面命令无效,修改 ~/.bashrc 文件, 在开头添加:
if [ -t 1 ]; then
    exec zsh
fi
  • 安装 antigen
# 修改配置 ~/.zshrc(如果切换帐号后无法使用 zsh 则把该用户的配置文件再配一遍)
curl -L https://raw.githubusercontent.com/skywind3000/vim/30b702725847bac4708de34664bb68454b54e0c0/etc/zshrc.zsh > ~/.zshrc

# 修改主题, 参考:https://github.com/robbyrussell/oh-my-zsh/wiki/themes
# 如果需要主题一直生效需要添加到 ~/.zshrc 中
antigen theme ys

# 配置修改完重新执行 zsh
  • 如果出现警告:zsh compinit: insecure directories, run compaudit for list.
chmod -R 755 ~/.antigen
# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
bindkey "\e[5~" beginning-of-history
bindkey "\e[6~" end-of-history

# for rxvt
bindkey "\e[8~" end-of-line
bindkey "\e[7~" beginning-of-line
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
bindkey "\eOH" beginning-of-line
bindkey "\eOF" end-of-line
# for freebsd console
bindkey "\e[H" beginning-of-line
bindkey "\e[F" end-of-line
# completion in the middle of a line
bindkey '^i' expand-or-complete-prefix

# Fix numeric keypad  
# 0 . Enter  
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3  
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6  
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9  
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + - * /  
bindkey -s "^[Ol" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"

安装 autojump ( 用法参考 )


autojump 是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不受当前所在目录的限制。意思就是可以让你更快地切换目录,而不用频繁地使用 cd/tab 等命令。

  • 安装
sudo apt-get install autojump
  • zsh 下运行报错:
$ autojump
Please source the correct autojump file in your shell's
startup file. For more information, please reinstall autojump
and read the post installation instructions.

参照文章 Mac终端增强技能终极 Shell 找到解决办法:

~/.zshrc 中安装插件 brew install autojump 再重新进入 zsh

由于本文使用 antigen 作为 zsh 的包管理器,所以实际操作是在 ~/.zshrc 中添加 antigen bundle autojump

使用 bash 客户端软件 cmder ( 参考 )


Windows 自带的 命令提示符 cmd 并不是很好用( 文本选中、复制粘贴等等操作 ),在这里使用 cmder 作为替代品,体验效果很好。去 cmder 官网 下载 mini版( 完整版附带了模拟的 bash 环境,由于已经安装 Linux 子系统,就不再需要了)解压即可使用。

  • 设置启动 cmder 时直接运行 bash:
1. 进入 "Settings > Startup",
2. 选择 "Startup options > Command line",输入 "bash -cur_console:p"
启动直接运行bash
  • 通过软件底部的加号按钮新开标签页并进入 bash
1. 进入 "Settings > Startup > Tasks",
2. 选择 "bash::bash",将指令修改为 'cmd /c "bash" -cur_console:p -new_console:d:%USERPROFILE%'

文中给的 cmder 是 1.3.2 版本的,最新的 1.3.6 版本已经默认集成了 WSL 的 Task,就不用这一步的配置了

新标签页
  • 设置配色主题
1. 进入 "Settings > Features > Colors",
2. "Schemes" 项下拉选择 "<ubuntu>"

小贴士:将 cmder 目录添加到环境变量 path 中或者复制快捷方式到 "C:\Windows\System32" 目录下,就可通过 win + R 快捷键快速打开了

运行图形界面程序 ( 参考 )


什么!Linux 不是就这么个黑白界面的窗口吗?是的,你没看错,就是图形界面,这里用到的是 Xserver 这个东东,至于原理什么的各位自行度娘吧。

Xming
  1. 安装Xming 下载地址

  2. 安装完直接打开 Xming 即可

  3. 安装一个 firefox 测试
    apt-get install firefox

  4. 运行(在程序指令前加上"DISPLAY=:0 ")
    DISPLAY=:0 firefox

  5. 简化配置
    每次运行程序都要输入 DISPLAY=:0 挺累的,执行下列指令后重启bash即可省去这个步骤
    echo "export DISPLAY=:0.0" >> ~/.bashrc

PS:很多小伙伴反映说打开Xming没反应,这是正常现象 ( 详见评论区33楼 )。Xming是一个在后台运行的服务,在任务栏显示一个 X 的小图标即表示启动成功,无需其他操作了。要想看到画面,需要在wsl或其他远程Linux机器上使用 DISPLAY=:0 命令启动带图形界面的程序。在这里简单分析下我理解的原理:1. Xming 启动 Xserver服务用于监听;2. wsl启动程序后把界面数据发送给 Xserver;3. Xserver 接收到数据进行绘制,于是在win下就看到了图形界面。还有困惑的话请移步至下方的 vnc 版块,比Xming效果要好,类似与 win 下 远程桌面连接 的效果。

Sublime Text 3 安装


既然都可以运行图形界面了,编辑器也要换成可视化的,毕竟 vim 还是不太适合我。

cd /
# 下载
wget https://download.sublimetext.com/sublime-text_build-3126_amd64.deb
# 安装
dpkg -i sublime-text_build-3126_amd64.deb
# 运行
subl
什么鬼,报错了!

应该是少了什么依赖包,嗯,安装下搞定。

apt-get -y install libgtk2.0-0

启动 xfce 桌面环境 ( 参考 )


图形界面程序都能运行了,不试试 ubuntu 的桌面环境怎么能甘心,于是又是噼里啪啦一顿搜索。一开始参照这篇 国外的教程 折腾了许久,每次运行总是报一个 composite 的插件没加载进来,各种软件包安装一通还是不行,后来实在失去耐心就放弃了这条路。后来看到好像有人成功运行了 xfce , 但没有具体步骤,只能自己一顿摸索,结果还真误打误撞成功了。

# 1.安装xfce4
apt-get install -y xfce4
# 2.安装xubuntu桌面及附带应用
apt-get install -y xubuntu-desktop
# 3.启动
xfce4-session
启动报错了

解决办法: ( 参考 )

sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf

再次尝试打开,现在可以看到 Xming 打开了三个窗口,分别是桌面、任务栏、菜单栏。逼格是提升了不少,不过确实很卡。

xfce4

使用 VNC 进行远程桌面控制 ( 安装方法 )


感谢 @lizr_4bf0 的提示,使用 VNC 来代替 Xming 以解决 Xming 下很卡的问题。

apt-get install -y vnc4server
  • wsl 下启动 vncserver ( 安装后首次启动需要设置访问密码 )
vncserver
  • win10VNC Viewer 中访问 127.0.0.1:1
    注意:如果连接 VNC Viewer 时报错请 参考

  • VNC Viewer 中只显示一个终端窗口的问题

# 修改xstartup, 将 x-window-manager 替换为刚才安装的 xfce4-session
sed -i 's$x-window-manager$xfce4-session$' ~/.vnc/xstartup
# 重启 vncserver
vncserver -kill :1
vncserver :1

注意: 如果没安装 xfce4,那么至少安装一个终端 ( 比如: apt install -y gnome-terminal ) 用于启动, 不然 vnc 就是空白的, 什么都干不了

# 先关闭
vncserver -kill :1
# 再启动并设置分辨率(注意是小写的x)
vncserver -geometry 1366x768 :1

在子系统上运行nginx


因工作项目中用到了 ssi 技术,而已经 Windows 上已经编译好的 nginx 是不支持相对路径引用的( 需要修改源码重新编译 ),只能委屈求全用着 Apache 。不过既然现在都能跑 Linux 了,那就试试在 Linux 上运行 nginx,然后在 Windows 上进行调用。

1. 通过 apt-get 方式安装
sudo apt-get install nginx
# 启动报错了:
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
# 80端口实际没被占用,那应该就是ipv6的问题,将其禁用: 
vim /etc/nginx/sites-available/default
# 找到default_server ipv6only=on;注释掉
# 再次启动没报错,不过浏览器无法访问,80端口也没被使用,查看error.log
cat /var/log/nginx/error.log
# 看到错误信息:
ioctl(FIOASYNC) failed while spawning "worker process" (22: Invalid argument)
# 解决方法:禁用master进程模式
sed -i '1 a\master_process off;' /etc/nginx/nginx.conf

再次启动,终于没报错了,在 Windows 中打开浏览器访问 127.0.0.1,还真的试验成功了,不过 nginx 版本 ( 1.4.6 ) 有点老。

2. 通过编译源码的方式安装
# 1.安装依赖包
apt-get -y install build-essential autoconf libtool libxml2-dev openssl libcurl4-openssl-dev libbz2-dev libjpeg-dev libpng12-dev libfreetype6-dev libldap2-dev libmcrypt-dev libmysqlclient-dev libxslt1-dev libxt-dev libpcre3-dev libreadline-dev
# 2.下载源码
wget http://tengine.taobao.org/download/tengine-2.1.1.tar.gz
# 3.解压
tar -zxvf tengine-2.1.1.tar.gz
# 4.进入目录
cd tengine-2.1.1
# 修改源码...
# 5.配置
./configure --prefix=/usr/anyesu/nginx
# 6.编译&安装
make && make install
# 7.修改配置文件
sed -i '1 a\master_process off;' /usr/anyesu/nginx/conf/nginx.conf
# 8.启动
/usr/anyesu/sbin/nginx

上面的步骤,我试了两台电脑,其中一台报错:

nginx: [emerg] invalid port in resolver "fec0:0:0:ffff::1" in /usr/anyesu/nginx/conf/nginx.conf:123

/etc/resolv.conf

出现的 fec0:0:0:ffff::1 是个什么鬼,度娘了一番,貌似是 dns,打开 dns 配置文件 /etc/resolv.conf 果然发现了这东西,应该是 Windows 下只分配了 1dns,所以 Linux 就给了这么两个默认值的吧。将它们注释掉,重新启动 nginx,成功运行 Tengine/2.1.1

注意,每次重启 bash 都会重置 dns 配置的

启用 ssh ( 参考 )


本地可以通过命令行打开 bash,如果要远程访问( 如同访问线上服务器一样 ),那么就需要启用 ssh

# 1.安装ssh(一般不需要这步)
apt-get install openssh-server
# 2.修改配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vim /etc/ssh/sshd_config
#=======(修改以下选项内容)=========#
# Port 23(22端口已被占用)        #
# (取消注释)ListenAddress 0.0.0.0 #
# UsePrivilegeSeparation no      #
# PermitRootLogin yes            #
# (注释)StrictModes yes         #
# PasswordAuthentication yes     #
#================================#
# 3.启动ssh
service ssh start
# 4.如果提示“sshd error: could not load host key”,则用下面的命令重新生成
rm /etc/ssh/ssh*key
dpkg-reconfigure openssh-server

使用终端工具访问,这里我用的是 WinSCP + PuTTY

WinSCP
PuTTY

WSL 开机启动


任务管理器

打开任务管理器我们可以发现,在运行子系统的时候,后台其实有一个名为 bash 的进程在运行,我们每开一个命令行窗口就会多一个 bash.exe,如果我们把所有的 bash.exe 都关闭, 则这个 bash 进程就跟着关闭了(相当于是子系统关机了),跟着之前在子系统中打开的程序如 nginxsshd 等也随之关闭了。为了让 Linux 程序能够在后台继续运行,这里通过 vbs 脚本在后台打开一个 bash.exe 来保证 bash 进程一直开着。当然,还可以通过 Windows 的计划任务实现开机启动 WSL 并打开其中的程序。
注:目前1803版本中关闭 bash.exe 不会再关闭打开的 Linux 进程了,也就是说不需要再在后台维持一个 bash.exe

# 1.新建开机启动脚本
vim /usr/anyesu/boot.sh
# 2.编辑
#================================================================
# #!/bin/sh
# /usr/anyesu/nginx/sbin/nginx
# service ssh start
# $SHELL  #这句很重要,挂起当前脚本进程,进而维持base.exe一直打开
#================================================================
# 3.设置权限
chmod 777 /usr/anyesu/boot.sh
# 4.创建vbs脚本(D:\linux\wsl.vbs)
#==========================================
# Set ws = CreateObject("Wscript.Shell") 
# ws.run "bash /usr/anyesu/boot.sh",vbhide
#==========================================
# 5.创建计划任务
计划任务
创建基本任务
设置任务名称
设置任务触发条件——用户登录
设置任务操作——启动
设置任务操作——运行vbs脚本
运行计划任务

使 WSL 支持 32位程序


  • 参考 issue#2468 ( 中文 )
    注: 依赖包可能无法自动安装, 自己手动安装下

使用 Docker


由于篇幅较多,单独写了一篇文章 —— WSL 中 Docker 使用总结

关于 Linux 发行版本


# 打开cmd,进入bash
bash
cd /
# 下载openSUSE
wget -O openSUSE-42.2.tar.xz https://github.com/openSUSE/docker-containers-build/blob/openSUSE-42.2/docker/openSUSE-42.2.tar.xz?raw=true
# 解压
xz -d /openSUSE-42.2.tar.xz
mkdir rootfs
tar -C rootfs -xvf openSUSE-42.2.tar
# 退出bash,返回cmd
exit
# 进入子系统所在路径
cd %localappdata%\lxss
# 备份ubuntu用户空间(看下任务管理器中bash是不是彻底关闭了)
rename rootfs rootfs.ubuntu
# 使用openSUSE用户空间替换默认用户空间
move rootfs.ubuntu\rootfs rootfs
# 设置默认登录用户
lxrun /setdefaultuser root
# 重新进入bash
bash
#查看发行版本
cat /etc/issue

官方资料


2017-11-21追加


最近系统又被强更到了 1709 版本 ( 16299.64 ),发现几点变化做个记录:

  1. ping 命令已经可以正常使用了

  2. nginxmaster 模式也能正常使用不会报错了

  3. 发现 nginxssh 之类的,能正常启动不报错但怎么也无法绑定端口。后来查了 github上的 issues 发现是wegame ( 原 tgp ) 的锅,原因是使用了一个 win10 上已失效的特性,wegame 的开发表示会尽快修复。临时解决办法:删除文件 %systemroot%\system32\drivers\QMTgpNetflow764.sys 后重启 bash,如无法删除先关闭应用或卸载再重装 wegame ( 最好重启电脑 ),重装 后先 删除 QMTgpNetflow764.sys 再运行 wegame

  4. 内核升级为 4.4.0-43-Microsoft 了, 带上了微软的标记,推测是这个原因导致很多软件包无法正常安装了。后来发现应该是阿里云的数据源未同步的原因,加上 Ubuntu 自带的源 ( 即文中最初备份的内容 ) 即可解决。

  5. Windows 10 Fall Creators Update (1709) 中 WSL 的新功能 ( 官方博客 )

2017-11-30追加


应用商店

目前 1709 版本 ( 16299.64 ) 已经可以在商店中搜索安装多个不同版本的子系统了,根路径为 %localappdata%\Packages\【根据子系统名找到对应的应用文件夹】\LocalState\rootfs 。同时还新增了两个命令行工具: wsl.exewslconfig.exe

其中 wsl.exe 应该等价于 bash.exe , 两者之间的细微差别暂时还没发现。至于 wslconfig.exe 的作用主要为 ( 参考 ):

1. 查看安装所有已安装的子系统: wslconfig /l

适用于 Linux 的 Windows 子系统:
Ubuntu (默认)
Legacy

其中 Ubuntu 是商店中下载的版本,Legacy 是按老方法安装的默认wsl。

2. 切换bash.exe默认使用的子系统: wslconfig /s <DistributionName>
其中 <DistributionName> 替换为 UbuntuLegacy , 或者其他已安装的子系统。

3. 卸载已安装的子系统: wslconfig /u <DistributionName>
同上替换 <DistributionName> 。经测试发现,此 "卸载" 并不会卸载商店中安装的 Ubuntu 应用, 即再次执行该应用又会重新安装了。

2018-10-11追加


官方博客中给出了命令行方式来安装指定版本的 WSL ( 参考 )
管理员权限 启动 PowerShell ( 快捷键 WIN + X 调出 ) 执行下面命令

  • 启用 WSL 特性
# 会提示重启电脑
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  • 安装 Ubuntu
# 下载安装包
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile ~/Ubuntu.appx -UseBasicParsing
# 安装
Add-AppxPackage -Path ~/Ubuntu.appx
# 启动
Ubuntu.exe
  • 安装 SLES
# 下载安装包
Invoke-WebRequest -Uri https://aka.ms/wsl-sles-12 -OutFile ~/SLES.appx -UseBasicParsing
# 安装
Add-AppxPackage -Path ~/SLES.appx
# 启动
sles-12.exe
  • 安装 openSUSE
# 下载安装包
Invoke-WebRequest -Uri https://aka.ms/wsl-opensuse-42 -OutFile ~/openSUSE.appx -UseBasicParsing
# 安装
Add-AppxPackage -Path ~/openSUSE.appx
# 启动
opensuse-42.exe

写在最后


WSL 折腾完有一段时间了,只是一直没时间记录下来(也许是懒吧)。在此之前,由于工作需要,偶尔兼职运维的角色,折腾下服务器什么的,就很业余的学习了一些 Linux 指令。以前装过 vmware ,体验不是很好就不想装了,所以写 shell 脚本、编译源码什么的都是在公司测试服务器上练习的,现在有了 WSL 之后就可以在自己本地练习了 ( 肆意折腾,哈哈哈 )。使用方面,体验和使用终端工具连接远程服务器是差不多的;性能方面,子系统( bash 进程 ) 本身是不占多少内存的,启动程序几乎相当于启动 Windows 程序了,不显示图形界面内存都占用比较小,肯定优于"印象中的虚拟机"。总的来说,WSL 还是比较值得推荐去折腾的,也比较适合新手学习 Linux,虽然我也只是个小白⊙﹏⊙


转载请注明出处:http://www.jianshu.com/p/bc38ed12da1d

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

推荐阅读更多精彩内容