码迷,mamicode.com
首页 > 系统相关 > 详细

Linux知识补课

时间:2019-10-07 21:40:34      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:file   多个   back   免费   工资   说明   href   格式   open   

Linux补课

已经将开发环境转Linux了(当然用的是ubuntu,图像界面还是舒服一点,支持也多),不上QQ和微信的话用的还是挺舒服的,但是无奈基础欠账太多,这里赶快补一下

Linux和Unix的关系

emmm算是老生常谈了,但是还是记录一下吧,建立一些感性认识。

Unix是先开发的,最一开始的版本是使用汇编语言,后来用C语言重写了。之后Bell实验室允许大学使用该操作系统教学。Linus对Unix的底层代码进行了修改,原先命名为Linus‘s Unix并上传,后来被网站管理员改名为Linux,之后就火了

Unix于1969年由贝尔实验室开发出来,使用至今已变更了很多个版本。目前主流的Unix系统有三种,分别是AIX、HP-UX、Solaris,这些Unix系统互不兼容。

Linux于1991年由芬兰大学生Linus开发出来,是一个类Unix系统,但是其代码不源自任何Unix版本,完全不是Unix的一个分支,而是一个开源版的模仿。

现在Linux主要使用在PC机和嵌入式,或者一些小型企业的服务器;而Unix垄断着大型企业的关键性应用领域。

来源:https://www.zhihu.com/question/24217234

Unix现在还活得好好的,只不过在互联网上的名气不如Linux大,毕竟Linux的面向人群还是大一些的

GNU

理查德·马修·斯托曼

他发起自由软件运动,倡导软件用户能够对软件自由进行使用、学习、共享和修改,确保了这些软件被称作自由软件。斯托曼发起了GNU项目,并成立了自由软件基金会。他开发了GCC(gnu compiler collection)、GDB、GNU Emacs,同时编写了GNU通用公共许可协议

他迄今为止一直是GNU项目的组织者,作为主要开发者的他开发了一些被广泛使用的GNU软件,其中包括GCCGDBGNU Emacs。在1985年10月他创立了自由软件基金会。

斯托曼开创了Copyleft的概念,它使用著作权法的原则来保护使用、修改和分发自由软件的权利,并且是描述这些术语的自由软件许可证的主要作者。最为人所称道的是GPL(最广泛使用的自由软件协议)。

1989年,他和别人一起创立了自由程序设计联盟。自20世纪90年代中期以来,斯托曼花他大部分时间组织参与宣传自由软件,反对软件专利数字版权管理的以及他认为剥夺用户自由的其他法律和技术系统运动。这包括最终用户许可协议保密协议产品激活、加密狗、软件复制保护、专有格式、二进制软件包(没有源代码的可执行文件)。

1991年,他与Liuns商谈,让Linux加入了GNU计划,后来更名为GNU/Linux,当然人们还是叫Linux

Linux的系统特点

  • 开源

  • 多用户、多任务:支持多用户同时登录,支持同时进行多个任务

    Windows属于单用户、多任务(也可以通过一些方法实现多用户,具体搜索即可)

Linux分支

ubuntu\debian\centos\rethat\suse\deepin\arch等

分支图:技术图片

redhat的服务是收费的

Ubuntu常用快捷键

  1. Super 键:打开活动搜索界面,会显示一个搜索框以及所有打开的应用程序界面

  2. Ctrl+Alt+T:打开 Ubuntu 终端窗口

  3. Super+A:显示应用程序菜单

  4. Super+Tab 或 Alt+Tab:在运行中的应用程序间切换

  5. Super+箭头:移动窗口位置

    Super+左箭头:贴合左面

    Super+右箭头:贴合右面

    Super+上箭头:最大化

    Super+下箭头:恢复正常大小

  6. Super+M:切换到通知栏

  7. Alt+F2:运行控制台。是的,Linux除了终端还有控制台

  8. Alt+F4/Ctrl+Q:关闭应用程序窗口

  9. Ctrl+Alt+箭头:切换工作区

路径符号

Linux中的分隔符是/,不是Windows的\

~:家(home)目录

. :一个点表示当前目录

.. :两个点表示上一级目录

/ :根目录

指令

  1. ls 路径:显示该目录下所有的文件

    参数:

    1. ls -l:以详细列表的形式展示

    2. ls -lh:以详细列表的形式展示的同时以更具有可读性的方式显示

    3. ls -a:显示所有的文件及文件夹(主要是显示隐藏文件、文件夹)

      LInux的隐藏文件一般都是.开头

    ls列出的结果中,蓝色表示文件夹,黑色表示文件,绿色表示其权限为拥有所有权限

  2. pwd:打印当前工作目录

  3. mkdir 文件夹名称:创建文件夹

    -p : mkdir -p 路径: 一次性创建多层不存在的目录,就是路径中所有不存在的文件夹都会被创建

    mkdir 路径1 路径2:一次性创建多个目录

  4. touch 路径:创建文件

  5. cp 要复制的文件的路径 目的路径(可以同时改名):复制

    -r: 递归复制,也就是将文件夹里面的内容也进行复制

  6. mv 需要移动的文件目录 要保存的文件目录:移动,也就是剪切的意思

    mv同时也能执行重命名

  7. rm 文件目录:删除

    -f:force,不进行再次确认

    -r:递归删除,用于删除文件夹

    -rf:两个一起用

    删除指令可以使用正则表达式:例如 rm -r linux*

  8. 输出重定向

    将命令结果保存到文件中而不是显示在终端中

    > 覆盖输出,覆盖掉原有文件

    >> 追加输出,在文件末尾添加

  9. cat:

    1. cat 文件路径:直接打开一个文件而不进入编辑,和vim等编辑器效果不一样(打开后依然在终端中,能看到之前的命令)

    2. cat 待合并文件路径1 待合并文件路径2等等 >新地址:合并文件

      不同类型的文件也可以合并

  10. df:查看磁盘空间

    df -h:以较高可读性的形式显示

  11. free:查看内存使用情况

    free -h同理

    swap用于临时内存,用磁盘空间充当内存

  12. head:查看一个文件的前n行(默认显示前10行)

    head -n 文件路径

  13. tail:查看一个文件的后n行(默认10行)

    也可以通过tail查看一个文件的动态变化,语法为tail -f 文件地址,但是这个命令主要用来查看系统日志,变化内容不能是用户手动添加的(用户使用vim修改文件的实质是删除文件并创建同名新文件,这使得tail无法跟踪),要测试可以利用输出重定向.退出的话按下q键即可

  14. less:查看文件,以较少的内容进行输出,只显示一屏,按下辅助功能键查看更多

    less 文件地址

    :n 从第n行进行显示

    空格键:一页一页翻

    上下:一行一行翻

    :q 退出

  15. wc:统计文件内容信息

    wc 文件路径

    -l:行数

    -w:单词数,注意,这里的单词是依照空格来区分的

    -c:字节数

    不加选项的话,返回:行数、单词数、字节数、名称

    加选项就只返回对应的内容和文件名称

  16. date指令:操作时间和日期(读取、设置),shell脚本中用的比较多

    但是设置比较少用现在,都是自动获取

    CST:当地时间

    不加参数的话输出是这个样子:2019年 10月 06日 星期日 12:07:26 HKT

    带参数的输出:

    1. date +%F,也可以用 date "+%Y-%m-%d":输出年月日:2019-10-06

      注意这里Y是大写,m和d是小写,大小写表示的含义是不一样的

      Y:整位的四位数年

    2. date +%F,输出也是2019-10-06,等价于date "+%Y-%m-%d"

    3. date "+%F %T",输出是2019-10-06 15:04:35,这里的引号表示让其中的内容成为一个整体,和date "+%Y-%m-%d %H:%M:%S"等价

    4. date -d "-1 day" "+%F %T":表示输出一天前的时间(可以用于编写shell脚本自动实现备份数据库以及删除一个时间节点之前的,例如一个月或者一个礼拜之前的数据库备份)

      date -d "+1 day" "+%F %T":一天后

      date -d "-1 month" "+%F %T":一周前

      date -d "-1 year" "+%F %T":一年前

      加s和不加都可以

    完整参考内容见下:

    来源:https://man.linuxde.net/date

    -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
    -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
    -u:显示GMT;
    --help:在线帮助;
    --version:显示版本信息。
    %H 小时,24小时制(00~23)
    %I 小时,12小时制(01~12)
    %k 小时,24小时制(0~23)
    %l 小时,12小时制(1~12)
    %M 分钟(00~59)
    %p 显示出AM或PM
    %r 显示时间,12小时制(hh:mm:ss %p)
    %s 从1970年1月1日00:00:00到目前经历的秒数
    %S 显示秒(00~59)
    %T 显示时间,24小时制(hh:mm:ss)
    %X 显示时间的格式(%H:%M:%S)
    %Z 显示时区,日期域(CST)
    %a 星期的简称(Sun~Sat)
    %A 星期的全称(Sunday~Saturday)
    %h,%b 月的简称(Jan~Dec)
    %B 月的全称(January~December)
    %c 日期和时间(Tue Nov 20 14:12:58 2012)
    %d 一个月的第几天(01~31)
    %x,%D 日期(mm/dd/yy)
    %j 一年的第几天(001~366)
    %m 月份(01~12)
    %w 一个星期的第几天(0代表星期天)
    %W 一年的第几个星期(00~53,星期一为第一天)
    %y 年的最后两个数字(1999则是99)
    date +%Y%m%d                   //显示前天年月日
    date -d "+1 day" +%Y%m%d       //显示前一天的日期
    date -d "-1 day" +%Y%m%d       //显示后一天的日期
    date -d "-1 month" +%Y%m%d     //显示上一月的日期
    date -d "+1 month" +%Y%m%d     //显示下一月的日期
    date -d "-1 year" +%Y%m%d      //显示前一年的日期
    date -d "+1 year" +%Y%m%d      //显示下一年的日期
    date -s                        //设置当前时间,只有root权限才能设置,其他只能查看
    date -s 20120523               //设置成20120523,这样会把具体时间设置成空00:00:00
    date -s 01:01:01               //设置具体时间,不会对日期做更改
    date -s "01:01:01 2012-05-23"  //这样可以设置全部时间
    date -s "01:01:01 20120523"    //这样可以设置全部时间
    date -s "2012-05-23 01:01:01"  //这样可以设置全部时间
    date -s "20120523 01:01:01"    //这样可以设置全部时间
  17. cal:操作日历

    直接输入cal:显示当月日历,等价于cal -1

    cal -3:显示上一个月+本月+下一个月的日历

    cal -y 2019:显示2019年日历

  18. clear:清空终端中的命令和结果,也可以用快捷键 ctrl+L

    不是严格意义上的清空,只是下拉一页,用来的都在上面

  19. 管道:|

    管道不能单独使用,必须配合前面讲的一些指令配合使用,主要起辅助作用

    管道一般可以用于:

    1. 过滤

      例如:

      用管道查询出当前目录下包含y字母的文档名称:

      ls|grep y

      grep:global regular expression print,全局正则表达式打印,用于检索目标行命令

      以管道作为分界线,前面命令的输出就是后面命令的输入

    2. 特殊

      例如:

      通过管道实现less的等价效果(只是举例了,还是用less)

      cat 路径|less

    3. 拓展处理

      统计某目录下文档的总个数ls 目录地址 |wc -w

  20. hostname:操作主机名:读取和设置(设置用的比较少,因为这里改的是临时的,一重启就没有了)

    语法:

    hostname:输出完整的主机名

    hostname -f:输出当前主机名中的FQDN(全限定域名)

  21. id:查看一个用户的基本信息(用户id、用户组id、附加组id)

    如果不指定用户,则默认当前用户

    id 用户名:显示指定用户的基本信息,例如id root

    验证用户信息:通过文件/etc/passwd

    验证用户组信息:/etc/group

  22. whoami:返回当前用户名

    一般用于shell脚本,获取用于当前操作的用户名,方便日志的记录

  23. ps -ef指令

    用于查看当前机器的进程信息

    -e:列出全部进程

    -f:显示全部的列,即显示那些默认不显示的内容

    显示的内容:

    1. UID:用户名

    2. PID:process ID,进程名

    3. PPID:父级进程名

      如果一个程序的父级进程找不到,该程序的进程称为僵尸进程,就是表示没有什么用了

    4. C:表示CPU占有率(百分比)

    5. STIME:start time:启动时间

    6. TTY:终端设备

      如果一个进程有终端设备,就表示这个进程是由这个终端发起的,?表示不是由终端发起的

    7. TIME:进程的执行时间

    8. CMD:进程对应的路径

    案例:搜索特定进程

    ps -ef|grep gnome-shell

    ps-ef搜索出来的结果,无论原来有没有,一定会至少有一个,也就是我们搜索这个行为的进程,即使我们乱搜也会有的

  24. top:查看机器进程占用的资源(实时更新的哦)

    q键或者Ctrl+c退出

    解释一下top的一些参数意思:

    • top:当前时间
    • up:开机时间
    • load average:在某个时间点范围内的负载情况,第一个是5分钟,第二个是10分钟,第三个是15分钟
    • zombie:僵尸进程数量

    表头的含义:

    • PR(priority):权重(网站用的那个PR是page rank),例如在搜索引擎对网页也有这个,范围是1-10,级别越高说明优先级越高,越受欢迎

    • NI:nice CPU time,即用户进程空间改变过优先级的进程占用CPU百分比

    • VIRT:虚拟内存,虚拟内存就是进程申请的内存

    • RES:常驻内存,常驻内存是进程实际使用的内存

    • SHR:共享内存,有的进程不能独立运行,而是依赖于其他进程,共享内存值的就是常驻内存中对其他进程的调用开销

      计算一个进程实际使用的`1内存=常驻内存-共享内存

    • S:进程的状态(sleeping,S是睡眠,R是运行)

    • MEM:内存的占用百分百

    • COMMAND:进程的名称或者路径

    排序:

    M:按内存占用排序

    P:按CPU使用排序

    1:将CPU的不同内核的状态展开,分别显示

  25. du -sh 目录地址:查看目录的真实大小

    -s:只显示汇总的大小(summary)

    -h:使用便于阅读的形式显示

  26. find 路径范围 选项 选项的值:用于查找文件

    -name:按名字来搜,支持模糊搜索和正则表达式(例如:*.txt,表示所有txt文件)

    -type:按文档的类型搜,注意,这里指的不是文件名后缀,而是“f":文件,"d":文件夹

  27. service:控制软件服务的启动/停止/重启

    service 服务名 start/restart/stop

    例如,启动apache:service apache2 start

    可以使用ps查询apache服务是否启动:

    ps -ef|grep apache2

    同时访问的一个用户就需要一个进程来管理,所以启动apache的时候会同时启动一些子进程来应对并发

  28. kill:杀死进程

    语法:kill 进程的PID

  29. killall:直接通过进程名称杀死进程,不需要先查询出PID了

    语法: killall 进程名称

  30. ifconfig:操作网卡,全称是interface configuring

    显示处理的结果举个例子:

    enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
    ether 54:ee:75:cf:f1:f8 txqueuelen 1000 (以太网)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 0 bytes 0 (0.0 B)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    inet 127.0.0.1 netmask 255.0.0.0
    inet6 ::1 prefixlen 128 scopeid 0x10
    loop txqueuelen 1000 (本地环回)
    RX packets 302613 bytes 122591057 (122.5 MB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 302613 bytes 122591057 (122.5 MB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 172.16.187.23 netmask 255.255.240.0 broadcast 172.16.191.255
    inet6 fe80::b8b9:217c:9d49:ef9e prefixlen 64 scopeid 0x20
    ether 7c:67:a2:4e??f7 txqueuelen 1000 (以太网)
    RX packets 5841315 bytes 6190204664 (6.1 GB)
    RX errors 0 dropped 4 overruns 0 frame 0
    TX packets 2869513 bytes 503592009 (503.5 MB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    从inet addr中可以找到ipv4的地址

    wlp2s0是无线网卡,lo的全称是loop,本地回环网卡,其ip地址一般都是127.0.0.1

    127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。

  31. reboot:重启

reboot -w:模拟重启,但是不重启。它的效果是往日志中写入reboot日志,但是不重启,主要用于做测试

  1. shutdown:关机。要谨慎使用这个命令!如果是远程连接,reboot的话还可以断开连接之后重新建立,但是shutdown了之后就开不了了23333

    当然云服务器不需要担心这个,他们的服务器有插件,可以通过网页的控制台开启,但是如果不是的话就gg了

    要是不小心用了怎么办?打电话到机房或者自己去机房打开2333

    shutdown -h now :立即关机

    shutdown -h 15:25 “关机提示”:定时关机并给出关机提示

    取消关机:shutdown -c,如果是较为旧的内核,输入shutdown之后终端一直被占用的话,应该使用Ctrl+C来终止

  2. uptime:输出计算机的持续在线时间

    输出大概是这种:20:46:48 up 3 days, 22:05, 1 user, load average: 0.17, 0.31, 0.60

  3. uname:获取操作系统的相关信息,输出了一个Linux

    uname -a:获取全部系统信息,输出大概是这种:

    Linux 主机名 5.0.0-29-generic #31~18.04.1-Ubuntu SMP Thu Sep 12 18:29:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

    5.0.0-29-generic是内核版本,后面跟的那个时间是系统的发布时间

  4. netstat -tnlp:查看网络连接状态

    -t:只列出tcp协议的连接

    -n:以ip地址名:端口名,而不是地址和协议的形式显示

    -l:过滤出“state"列中其值为LISTEN(监听)的连接

    -p:显示PID和进程名称

  5. man:全称是manual,是手册的意思,包含了Linux的全部命令

    格式,man 命令名称

    这个牛逼啊,它不仅可以查到Linux自带的服务的指令,还能查到软件库中其他软件的指令

  6. 使用sudo su进入root用户后如何退出:输入exit\logout\Ctrl+D均可

  7. screenfetch:一个比较常用的软件,

    这个方便的 Bash 脚本可以用来生成那些漂亮的终端主题信息和用 ASCII 构成的发行版标志,就像如今你在别人的截屏里看到的那样。它会自动检测你的发行版并显示 ASCII 版的发行版标志,并且在右边显示一些有价值的信息。

  8. iconv:对文本文件进行转码

    常用方法:

    来源:https://blog.csdn.net/sunnypotter/article/details/18218699

    iconv命令能够很好解决编码转换问题

    用法: iconv [选项...] [FILE...]

    例如:iconv -f gb2312 -c -o new.txt old.txt

    转换给出文件的编码从一种到另外一种.

    输入/输出格式规范

    -f, --from-code=NAME 原始文本编码

    -t, --to-code=NAME 输出编码

    信息

    -l, --list 列出所有已知编码字符集

    输出控制:

    -c 忽略输出中的无效字符

    -o, --output=FILE 输出文件

    -s, --silent suppress warnings

    --verbose 打印进程信息

    -?, --help 显示此帮助列表

    --usage 提供简短的使用信息

    -V, --version 显示程序版本号

    对长选项必须或可选的参数同样适用于相应的短选项。

    -----------------------------------------------------------------------------

    从GBK转到UTF-8

    iconv -f GBK -t UTF-8 workspace.js -o w.js

    对于这个命令,我们可以使用iconv -t UTF-8 workspace.js > w.js更加方便地进行转码,但是绝对不能将文件直接写回源文件,否则文件会被清空的!我们可以将转换后的文件统一放在另一个文件夹中,这样也就可以实现批量操作了,并且也可以使用和源文件一样的文件名。

Linux自有服务

系统内置的服务,不需要用户安装其他软件

Vim编辑器

vi是所有Unix和Linux系统下标准的编辑器

vim相比vi比较高级,更适合写代码

  • i键进入编辑模式

  • :w保存,:q退出 :q!在不保存的情况下退出

  • :syntax on:开启语法高亮

  • :set number:开启行号

  • vim ~/.vimrc:编辑配置文件,将要默认加载的功能写进去,例如上面的指令要是不写在这个配置文件中的话就只会在当前一次下生效,关闭vim再打开就没有了

  • 上下左右:移动光标

  • H\L,分别代表左和右;J\K,分别代表下和上

  • W:按单词向后跳转;B:按单词向前跳转

  • pageup\pagedown:上下翻页,这个任何工具都是一样的

  • Ctrl+F\B,vim独有的上下翻页

  • 按行跳转:行数 gg

  • 往上\下\左\右跳多少行:10j 向下跳10行,10k向上跳10行,H左跳L右跳,都是同理的

  • 查询:在命令模式下,输入 /要查找的字符串,会查找光标之后的第一个匹配的项,如果想要继续查找的话就按N(next),按Shift和N会回到上一个匹配项

  • 删除整行:CC,如果删错了先退出编辑模式再按u(undo)恢复

    也可以用dd,但是dd不会进入编辑模式

  • 删除几行:CnC,表示同时删除n行,要是用dd的话就是nDD

    这两个命令实际上是一个”剪切“

  • 粘贴:p

  • 复制:y

  • 复制单行:yy

  • 复制多行:yny,n是行数

  • 按一下v键,会进入VISUAL模式,这时光标会选中所有移动过的范围

  • 内置的自动补全:编辑模式下,Ctrl+N,但是它的缺点是只能补全已经出现过的单词。可以安装插件使其更加智能。

  • vim plug:插件管理系统

  • vim awesome:一个汇集了vim插件的网站

  • vim内集成的简易计算器:先进入编辑模式,按下”ctrl+r"并输入“=”,此时光标会变到最后一行,此时再输入需要计算的内容就好了,结果会自动显示在原来的位置上

关于Linux的一些知识

纯粹是好奇或者是为将来可能的吹b用的,只是为了建立一些感性认识:

  1. 为什么linux的gnome,kde啥的不好用,很简单,没经济利益,市场小。开源软件不是慈善事业,软件免费不代表开发软件的人不要工资。图形界面这玩意上要考虑用户心里下要折腾硬件驱动的其实做好了不容易,尤其是在pc这种开放平台上。埋怨linux桌面不好的可以看看linux桌面占了多少市场份额,有多少开发者投入了多少钱,和份额和投入比linux桌面做成现在这样已经算是超水平发挥了。相反linux做的好的地方,比如服务器领域,恰恰是有大量厂商为了经济利益在那投入的。
    作者:Tech Priest链接:https://www.zhihu.com/question/47838864/answer/108426934来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

  2. Linux上Nvidia的开源驱动noveau居然是通过逆向工程得到的```

  3. UnityCanonical公司GNOME桌面环境所开发的图形用户界面,和那个游戏引擎不是一回事。用于Ubuntu操作系统。不过现在已经被Canonical放弃了,原来它开发这个系统是为了各个平台(手机、电脑以及其他硬件)统一,后来发现其他平台搞不成,Unity也就顺理成章地被放弃了,公司也裁员了。不过Canonical这个公司自建立就一直入不敷出不赚钱,一直是靠有钱的创始人养活的。

  4. Mac系统是闭源的,借鉴了openBSD,经过了Unix认证

  5. 开源不代表免费,可能会收取服务费用,同时系统的认证(例如RedHat认证)也是收费的

  6. 为什么服务器使用Linux?

    • 性能,不使用图形桌面
    • Linux更加稳定
    • 开源,有bug会得到更快的修补
    • Linux相比Windows更加安全:例如,PE工具可以替换原有系统的密码或者直接读原有硬盘的文件,而Linux不可以
    • 远程管理更加高效

Linux知识补课

标签:file   多个   back   免费   工资   说明   href   格式   open   

原文地址:https://www.cnblogs.com/jiading/p/11632024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!