老王教学视频第二周

1、描述linux目录结构以及目录结构命名规定

文件名规则:(目录也属于文件的一种)

   文件名最长255个字节

   包括路径在内文件名称最长4095个字节

   蓝色-目录,绿色-可执行文件,红色-压缩文件,浅蓝色-链接文件,灰色-其他文件

          由变量LS_COLORS决定,配置文件/etc/DIR_COLORS(强烈不建议修改)

   除了斜杠/和NULL值,所有字符都有效。但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引起它们

   标准Linux文件系统(如ext4),文件名称大小写敏感

  文件系统结构:新旧版本各有些许不同

          /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录

          /bin:所有用户使用的基本命令,不能关联至独立分区,OS启动即会用到的程序(较新版本为软链接至/usr/bin)

          /sbin:管理类的基本命令,不能关联至独立分区,OS启动即会用到的程序(较新版本为软链接至/usr/sbin)

           /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)

           /lib64:专用于x86_64系统上的辅助共享库文件存放位置

           /etc:配置文件目录

           /home/USERNAME:普通用户家目录

           /root:管理员的家目录

           /media:便携式移动设备挂载点(光盘等)

           /mnt:临时文件系统挂载点

           /dev:设备文件及特殊文件存储位置

                        b:block device,随机访问,块设备

                        c:character device,线性访问,字符设备

          /opt:第三方应用程序的安装位置

          /srv:系统上运行的服务用到的数据

          /tmp:临时文件存储位置

           /usr:universal shared,read-only data 通用共享,只读数据

                  bin:保证系统拥有完整功能而提供的应用程序

                  sbin:

                  lib:32位使用

                  lib64:只存在64位系统

                  include:C程序的头文件(header files)

                 share:结构化独立的数据,例如doc, man等

                 local:第三方应用程序的安装位置

                 bin, sbin, lib, lib64, etc, share

         /var:variable data files  变量数据文件

                  cache:应用程序缓存数据目录

                 lib:应用程序状态信息数据

                 local:专用于为/usr/local下的应用程序存储可变数据

                 lock:锁文件

                  log:日志目录及文件

                  opt:专用于为/opt下的应用程序存储可变数据

                  run:运行中的进程相关数据,通常用于存储进程pid文件

                  spool:应用程序数据池

                  tmp:保存系统两次重启之间产生的临时数据

        /proc:用于输出内核与进程信息相关的虚拟文件系统

        /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

        /selinux:security enhanced Linux,selinux相关的安全策略等信息的存储位置


2、显示/etc目录下,所有以.d结尾的文件或目录

     ls -d /etc/*.d


3、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

     ls -d /etc/[mnrp]*.conf


4、创建/app/rootdir目录,并复制/root下所有文件到该目录内, 要求保留原有权限

     mkdir -p /app/rootdir

     cp -r -p /root/. /app/rootdir     或      cp -a /root/. /app/rootdir


5、使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z

     mkdir -p /tmp/a{1/{a,b},2}

     mkdir /tmp/x_{y,z} /tmp/q_{y,z}


6、总结用户、用户组管理命令并演示命令以及常见用法

用户主要管理命令: (adduser与useradd相同,软链接)

    useradd [OPTION...] USERNAME :新建用户,不加OPTIONS将以默认策略创建用户

            -u UID :指定uid,可超过默认最大值。不加此选项将按照当前已存在的最大uid值往上递增,

              如已存在默认最大值的uid,将按最小的空闲uid值住上递增

            -o    :配合-u选项,不检查UID的唯一性,可创建与现在用户uid相同的新用户

          (权限也将相同,o选项必须在u选项之前,否则会把o选项当成UID)

            -g GID :指明用户的主组,不创建私有组。组必须事先存在,可为组名,也可以是gid

            -r    :创建系统用户,默认不生成家目录。一般要同时指定shell为nologin (-s nologin)

            -m    :创建家目录,用于系统用户,配合-r(因为系统用户默认不生成家目录)

            -N    :不创建私用组作为主组,使用users组作为主组

            -M    :不创建家目录,用于非系统用户(因为普通用户默认会生成家目录)

            -s SHELL    :指明用户默认使用的shell程序(可用列表:/etc/shells)

            -d HOME_DIR :指定路径为用户家目录。HOME_DIR不能事先存在,命令会自动创建

            -c "COMMENT":添加用户的注释信息

            -G GROUP1[,GROUP2,...] :为用户指明附加组,组必须事先存在

    usermod [OPTION...] USERNAME:用户属性修改

            -u UID : 更改用户UID

            -g GID : 更改用户主组

            -d DIRECTORY : 修改用户家目录,新家目录不会自动创建

            -m :移动家目录数据,只能配合-d选项使用(m必须在d之前)

            -l NEW_NAME: 更改用户名(家目录名等不会更改)

            -e YYYY-MM-DD: 指明用户账户过期日期

            -G GROUP1[,GROUP2,...] :新附加组,原来的附加组将会被覆盖;

                        若保留原有,要配合-a选项(a选项必须在G选项之前,否则会把a选项当成组名)

        清空附加组:usermod -G '' USERNAME 或 usermod -G '主组名' USERNAME

    userdel [-r] USERNAME :删除用户。加-r选项:删除用户并删除家目录、邮件等

    passwd [OPTION...] [USERNAME] :设置指定用户的口令

              :修改指定用户的密码(交互式,修改密码后被锁定的口令会被自动解锁)

            -d :删除指定用户密码(清空口令,已锁定的口令也将被解锁)

            -l :锁定指定用户(shadow文件口令字段前面会被加上两个叹号,双保险)

            -u :解锁指定用户(如果解锁后会造成空口令,系统默认不允许)

            -f :强制操作    (配合-u,允许解锁后可造成空口令)

            -e :强制用户下次登录修改密码

            -n DAYS :指定最短使用期限

            -x DAYS :最大使用期限

            -w DAYS :提前多少天开始警告

            -i DAYS :帐户锁定宽限期,DAYS=-1永不锁定,DAYS=0过期立即锁定

            --stdin:从标准输入接收用户新密码进行修改

        选项--stdint示例: (不支持passwd --stdin user1 < password.txt可能因为文件默认会包含一些特殊字符)

          1.  passwd --stdin user1

               PASSWORD

          2.  echo 'PASSWORD' | passwd --stdin user1

          3.  cat password.txt | passwd --stdin user1

          4.  passwd --stdin user1 << EOF

              password

               EOF

群组主要管理命令:

    groupadd [OPTION...] GROUPNAME :创建组

              -g GID: 指明GID号

              -r    : 创建系统组

    groupmod [OPTION...] GROUPNAME :组属性修改

              -n NEWNAME :重命名组名

              -g GID    : 指定新的GID

    groupdel GROUPNAME:删除组(如果存在用户把该组当成主组,不允许删除,附加组可以)

    gpasswd [OPTION] GROUPNAME :设置指定组的口令与更改指定群组组成员

                :交互式方式修改组口令,修改后已锁定的组口令将会被解锁

             -R :锁定组密码(原口令清空,用单个叹号代替)

             -r :清除组密码(清空口令,已锁定的口令也将被解锁)

            -d USERNAME :从指定组中移除指定用户(附加组)

            -M USER1,USER2,... :指定多个用户加入指定组(附加组,覆盖方式)

            -A USER1,USER2,... :设置有指定组管理权限的用户列表(覆盖方式)

            -a USERNAME :将指定用户追加至指定组中(附加组)(与usermod -aG相同、)

           注:在较新版本中,空组口令与被锁定的组口令基本没区别,但在老版本中空口令可能造成无需口令的情况

    newgrp GROUPNAME:把当前用户的主组临时切换为指定组。

         如果指定的群组已为当前用户的附加组或当前用户为root,则无需组口令(组口令被锁定也仍可切换)

         否则需要输入指定群组的组口令。使用完毕,用exit命令切换回原主组。

  用户相关的其他命令:

    id [OPTION...] [USERNAME] :查看用户相关的ID信息

          :查看用户的uid,gid(主组),groups(主组+附加组的gid) 与用户名、组名

        -u: 显示UID

        -g: 显示GID,仅主组

        -G: 显示用户所属的组的ID,包括主组与附加组

        -n: 显示名称,需配合ugG使用

    chsh -s SHELL USERNAME :修改用户默认shell

    chsh  -l :显示可用的shell列表(与cat /etc/shells相同)

    chfn [OPTION] [USERNAME]:修改全名和注释(GECOS字段)

               -f 'STRING' :全名

               -o 'STRING' :办公室地点

               -p 'STRING' :办公电话

              -h 'STRING' :家庭电话

           注:不加选项则是按提示逐步填写以上信息,若要清空信息必须要使用选项。

    finger [USERNAME] :查看全名和注释详情(带标题,更直观))

    groupmems OPTION USERNAME -g GROUPNAME :更改指定群组组成员(只供root用户使用)

                          -l :显示组成员列表

                        -a :将指定用户加入指定组(附加组)(与usermod -aG相同、)

                       -d :从指定组中删除指定用户(对主组无效)(与gpasswd -d相同)

                       -p :从指定组中清除所有成员(附加组)(与gpasswd -M '' GROUPNAME相同)

    groups [USERNAME...] :查看指定用户所属的组列表(与id -Gn相同)

    chage [OPTION...] USERNAME :修改用户口令策略

                      -d LAST_DAY :最近口令更改日。LAST_DAY格式:YYYY-MM-DD或0

                                             (0表示强制用户下次更改密码,与passwd -e相同)

                    -m MIN_DAYS :最短口令使用期。MIN_DAYS格式为数字(天)(与passwd -n相同)

                    -M MAX_DAYS :最长口令有效期。MAX_DAYS格式为数字(天)(与passwd -x相同)

                    -W WARN_DAYS :密码过期警告。WARN_DAYS格式为数字(天)(与passwd -w相同)

                    -I INACTIVE :帐户锁定宽限期。INACTIVE格式为数字(天)(与passwd -i相同)

                    -E EXPIRE_DATE :账户到期日。EXPIRE_DATE格式:YYYY-MM-DD(与usermod -e相同)

                    –l :显示密码策略

               注:不加选项则是按提示逐步填写以上信息


7、文件权限,属主属组管理命令有哪些,并演示命令以及用法

文件权限修改命令:

  chmod [-R] OCTAL-MODE FILE... :八进制数字模式修改文件权限(三位8进制数分别对应:属主,属组,其他)

  chmod [OPTION]... MODE[,MODE]... FILE... :一般赋值模式修改文件

      MODE:

    修改(覆盖)一类用户的所有权限:

            u=  g=  o=  a=

    加减一类用户某位或某些位权限

            u+  u-  g+  g-  o+  o-  a+  a-

  chmod [-R] --reference=RFILE FILE... :将FILE...文件的权限修改成与RFILE相同

  chown [-R] [OWNER][:[GROUP]] FILE... :修改文件的所有者与所属组

        -R : 递归(目录中的子目录与文件都修改)

                      OWNER        :修改文件所有者

                      OWNER:GROUP  :修改文件所有者与所属组(如果两者名称相同,可写成OWNER:)

                          :GROUP  :修改文件所属组

                    (命令中的冒号可用.替换)

      chown [-R] --reference=RFILE FILE... :将FILE...文件的所有者和所属组修改成与RFILE相同

      chgrp [-R] --reference=RFILE FILE... :将FILE...文件的所属组修改成与RFILE相同

      chgrp [-R] GROUP FILE... :修改文件的所属组(与chown :GROUP FILE...相同)

注:即使是文件的所有者也不能把文件的属主属组随便修改成其他用户和组

            -R选项要慎用,"chown -R OWNER /"此命令可能造成的严重后果与"rm -rf /"无异

  权限设置示例:

    chown .sales testfile      :把文件testfile的属组改成sales

    chown root:admins testfile  :把文件testfile的属主改成root,属组改成admins

    chmod u+wx,g-r,o=rx file    :把文件file属主加上写和执行权限,属组去掉读权限,其他人修改成读和写权限

    chmod 600 file              :把文件file的权限修改为属主有读和写权限,属组与其他人无权限

   chown mage testfile         :把文件testfile的属主更改为用户mage

   chmod -R g+rwX /testdir    :把目录/testdir下的所有文件属组加上读和写权限,有执行权限的文件属组加上执行权限

                                  目录/testdir及其所有子目录属组加上读、写和执行权限

新建文件和目录的默认权限

  umask值:系统判断创建文件或目录时默认应该给的权限,是权限默认值的补码umask=666-default,umask=777-default

          如:umask为111,则原码666补码111,110 110 110与001 001 001得110110110=666(不等于555)

      由此可得若default某位存在奇数(执行权限),则将其权限+1

      新建文件权限:666-umask=default

      新建目录权限:777-umask=default

    系统初始umask值:非特权用户是 002  ————  文件664  目录775 

                root是 022  ————  文件644  目录755

    umask [OPTION] :查看或修改当前登陆进程的umask值

              :查看当前umask

          ### :设定umask,登出后失效

            –S :以一般模式方式显示目录当前的default 777-umask:(u=rwx,g=rx,o=rx)

            –p :以可被调用的格式显示umask (umask 0022) 用法示例:umask -p >> ~xu/.bashrc

  #  u=rw g=r 0= :使用赋值模式指定default设置umask

    配置文件:全局设置:/etc/bashrc     

          用户设置:~/.bashrc  新起一行,写入:umask ### (如有多行,以最后一行为准,修改后使用source ~/.bashrc)

Linux文件系统上的特殊权限

  可执行文件上的SUID权限:

任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属主为原程序文件的属主(以文件属主的身份发起进程)

    (SUID只对二进制可执行程序有效,设置在脚本、目录上无意义。  与执行权限没有任何关系,suid的作用是进程访问文件时权限能跟进程的属主一样。)

    权限设定:

      chmod u+s FILE...    或    chmod 4### FILE...

      chmod u-s FILE...    或    chmod ### FILE...

  可执行文件上的SGID权限:(对脚本无意义)

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属组为原程序文件的属组(以文件属组组成员的身份发起进程)

    权限设定:

      chmod g+s FILE...    或    chmod 2### FILE...

      chmod g-s FILE...    或    chmod ### FILE...

  目录上的SGID权限:

    默认情况下,用户创建文件时,其属组为此用户所属的主组

    一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

通常用于创建一个协作目录,设置和更改SGID权限之前目录中已经存在的文件 原属组不受影响。

    权限设定:

      chmod g+s DIR...    或    chmod 2### DIR...

      chmod g-s DIR...    或    chmod ### DIR...

  Sticky位(粘滞位):  /tmp目录默认即使用该特殊权限

    具有写权限的目录通常用户可以删除该目录中的任何文件,无论对该文件有何权限

    在目录设置Sticky 位,只有文件的所有者或root可以删除该文件

    (sticky 设置在文件上无意义)

    权限设定:

      chmod o+t DIR...    或    chmod 1### DIR...

      chmod o-t DIR...    或    chmod ### DIR...

  特殊权限数字法:

    数字1代表Sticky位,数字2代表SGID,数字4代表SUID,7表示三者皆俱,3、6、5同理。在普通权限之前,如:2755

  权限位映射

    SUID: user,占据属主的执行权限位

      s:属主拥有x权限

      S:属主没有x权限(取决发起者有没有,跟属主有没有无关)

    SGID: group,占据属组的执行权限位

      s: group拥有x权限

      S:group没有x权限

    Sticky: other,占据other的执行权限位

      t:other拥有x权限

      T:other没有x权限

  设定文件特定属性:限制root账号,防止误操作

    chattr [OPTION] FILE...

            +i    :不能删除,改名,更改

            +a    :只能追加内容,不能删除,改名,更改

      -i 、 -a :去除相关属性

  注:若直接将已+i的文件的上级目录删除,系统将清空该目录下所有没+i的文件,并保留目录

      +i与+a同时存在时,+a无效。+i级别高于+a

    lsattr FILE...  :显示文件特定属性  (----ia---------- FILE...)

ACL:Access Control List,访问控制列表:除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

    (未设置ACL的文件权限位与引用计数之间显示为“.”,设置了ACL的文件显示为“+”)

  ACL生效顺序:(就是getfacl命令结果的顺序)

    所有者,自定义用户(ACL),组(包括ACL自定义组,也包括所属组),其他人(若用户属于多个组,则继承多个组的权限集合)

mask值的概念:

    mask值即ACL(自定义用户,自定义组)和所属组的权限最高值,只影响除所有者和other之外的人和组的最大权限

设置了ACL权限的文件,其元数据的group权限显示为mask值,而非普通的组权限

但原有的普通所属组权限不受影响,系统将其视为ACL自定义组的一部分 (group::rw-)

    mask需要与ACL的权限进行逻辑与(and)运算后,才能变成有限的权限:getfacl FILE

  user:xu:rwx #effective:rw-            (仅rw生效,111 and 110 equal 110)

      mask::rw-                              (ACL可享有的最高权限为rw-,110)

    要设置的ACL或所属组权限大于当前的mask值时,mask值将变化为所设置的权限值

要设置的mask值小于当前的ACL或所属组权限时,ACL或所属组大于mask的权限将不生效

  getfacl [OPTION] FILE|DIRECTORY  :查看指定文件或目录的所有权限(含ACL和普通权限) GET File Access Control List

  setfacl OPTION... [MODE] FILE...|DIRECTORY...  :设置文件或目录的ACL权限

      [OPTION]:-m设置,-x删除,-b清空,-R递归,-M参照文件批量设置,-X参照文件批量删除

    示例:

        设置:

  setfacl -m u:wang:rwx FILE|DIRECTORY    :给wang用户对于指定文件或目录的ACL权限设置为rwx

      setfacl -m g:sales:rw FILE|DIRECTORY    :给sales组对于指定文件或目录的ACL权限设置为rw-

      setfacl -m d:u:wang:rx DIRECTORY        :设置指定目录中之后新建的文件ACL权限默认为r-x(MODE开头为d:)

  setfacl -M file.acl FILE|DIRECTORY      :将文本文件file.acl中的内容作为MODE批量设置指定文件和目录的ACL权限(一行一个MODE)

  setfacl -m mask::rx FILE|DIRECTORY      :设置指定文件或目录的mask值,也可使用chmod g=rx FILE|DIRECTORY

      setfacl -Rm g:sales:rwX DIRECTORY      :给sales组对于指定目录的ACL权限递归设置为rwX

            注:getfacl结果表现为default,通过ACL赋予目录默认x权限,目录内新建的文件不会继承x权限

    删除与清空:

      setfacl -x u:wang FILE|DIRECTORY        :删除wang用户对于指定文件或目录的ACL权限

      setfacl -k DIRECTORY                    :删除默认ACL权限(相对于setfacl -m d:u:wang:rx DIRECTORY)

  setfacl -X file.acl FILE|DIRECTORY      :将文本文件file.acl中的内容作为MODE批量删除指定文件和目录的ACL权限

      setfacl –b FILE|DIRECTORY              :清除指定文件和目录的所有ACL权限

      setfacl -R -b DIRECTORY                :递归清除指定目录的所有ACL权限

    覆盖用法:

  setfacl --set MODE FILE|DIRECTORY      :把原有的ACL和普通权限都删除,用新的替代

            注:MODE必须要包含ugo普通权限u::rw,g::rw,o::r,u:wang:rw,不能像-m一样只添加ACL就可以

  setfacl --set-file=file.acl FILE|DIR    :参照file.acl中的内容覆盖设置指定文件和目录的权限,file.acl格式为getfacl命令的结果

            注:包括属主,属组,other的权限,即getfacl除#开关外的所有信息,不变更属主属组

                一般用法:getfacl FILE1 | setfacl --set-file=- FILE2  :复制FILE1的所有所有权限给FILE2

       备份与恢复:

  getfacl -R DIRECTORY > acl.txt          :递归查看指定目录及其下文件的所有权限,输出重写向至文件acl.txt(备份)

  setfacl --restore acl.txt              :还原acl.txt文件内容中指明的所有的文件的所有权限

                注:备份与还原权限时须注意路径问题,操作都应该在目标所在的目录上进行

    主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p或-a选项

    但是tar(打包)等常见的备份工具不会保留目录和文件的ACL信息

  ACL依赖于文件系统:CentOS7 创建的xfs和ext4文件系统默认具有ACL功能

  CentOS7 之前版本,安装操作系统时创建的分区具有ACL功能,但默认手工创建的ext4文件系统无ACL功能,需手动增加

  tune2fs -l /dev/sda1 :查看指定分区是否有ACL功能 “user_xattr acl”(该命令只针对ext系列,xfs无效)

  给分区添加ACL功能:

      tune2fs –o acl /dev/sdb1          :仅适用于ext系列,xfs不支持

      mount –o acl /dev/sdb1 /mnt/test  :重新挂载分区并增加ACL功能(可用设备名或挂载点)


8、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为 "Gentoo Distribution"

     useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo

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

推荐阅读更多精彩内容