热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

01Linux入门各发行版命令时间日期关机帮助

LINUX各发行版本【点击看大图】650)this.srchttp:a.disquscdn.comuploadsmediaembedimages1

LINUX各发行版本


【点击看大图】



http://a.disquscdn.com/uploads/mediaembed/images/1078/9644/original.jpg

http://futurist.se/gldt/wp-content/uploads/12.10/gldt1210.png【原图下载】



Linux 入门命令

tty ,who,who am i, w, date hwclock,cal,cd, mkdir,type,hash,man whatis, 

info,shutdown.reboot,poweroff.FHS



ROM:只读存储器,寻址地址空间的组成部分

RAM:随机存储器

南桥:低速

北桥:高速

将底层的细节隐藏起来,并提供一个统一的规范的,简介的接口提供出来,这就是操作系统的用途

posix 可移植操作系统(规范)

启动内核,启动外壳

init用来作为所有进程的父进程,由它来启动别的进程

linux被称为类unix,Unix―like

linux内核的官方站点

www.kernel.org

版本说明:

主版本号:此版本号、修正号

init:6以后使用Ubuntu研发的upstart,7以后可能使用systemd

shell:bash 

源码:

linux发行版:

RadHat

SuSE

Debian

LFS:

bt:BackTrace

管理包工具:

RadHat,SuSE:RPM

Debian:deb

 硬盘:分区、格式化(创建文件系统)、选择语言、键盘布局、时区、设置用户、选择安装需求、

 安装程序:

 RadHat:anaconda支持自动安装,有kickstart、cobbler

 Linux终端:

 物理终端、

 /dev/console

 串行终端、

 /dev/ttys#

 虚拟终端(Ctrl+Alt+F(1-6))

 /dev/tty#(数字)

 图形终端Ctrl+Alt+F7,

 伪终端(远程终端、图形界面下的终端)

 /dev/pts/#(数字)

 startx 启动图形界面

 Ctrl+c:取消正在执行的命令

 &立即释放命令提示符(后台执行)

 shfit+PageUp/PageDown:翻屏

 

tty命令:显示当前终端对应终端设备文件

[root@localhost ~]# tty

/dev/pts/0


who 查看当前系统上登陆的所有账号的命令

[root@localhost ~]# who

root     tty1         2015-10-13 04:17

root     pts/0        2015-11-15 19:41 (192.168.81.1)


who am i 查看当前终端登陆的账号

[root@localhost ~]# who am i

root     pts/0        2015-11-15 19:41 (192.168.81.1)


查看进程树

[root@localhost ~]# pstreeinit─┬─anacron
     ├─auditd───{auditd}
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─dbus-daemon───{dbus-daemon}
     ├─dhclient
     ├─login───bash
     ├─master─┬─pickup
     │        └─qmgr
     ├─5*[mingetty]
     ├─mysqld_safe───mysqld───17*[{mysqld}]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash───pstree
     └─udevd───2*[udevd]

 

 


linux哲学思想

1.一切皆文件,显示器tty当作文件,硬盘sda也是文件,socket网络也是文件

2.由众多目的的单一应用程序组成:一个程序只做一件事,且做好

3.组合目的的单一的小程序完成复杂的任务

4.尽量避免跟用户交互,一次性写入,一次性返回

5.使用文本文件保存配置信息

6.提供机制,而非策略


自由软件的含义

    自由使用

    自由学习和修改

    自由分发

    自由创建衍生版


shell:

   GUI:

      Windows

      Gnome

      KDE

      Xfce

   CLI:

      bsh

      csh

      tcsh

      ksh

      bash

      zsh

bash 

   管理员:提示符 #

   普通用户 提示符 $

   环境变量:

      PS1:一级提示符

变量:是一段内存空间,

       echo 回显

       引用一个变量${变量名},大多数花括号可以省略

 宏:

 echo $PS1

 [\u@\h \W]\$

  \u:当前用户

  \h:主机名

  \W:工作目录的路径基名

  基名:当前目录的最后一段

  basename 显示当前目录的基名

  dirname  显示当前目录的目录名

对于linux来讲,路径分隔符:/

绝对路径:从顶层开始的路径

相对路径:从当前位置开始的路径

目录是路径映射符

 


linux文件系统结构:

层次化

在启动的时候需要使用文件,需要载入内存,有一个分区作为起始分区,这个分区被称为根分区

根是由内核直接访问的

挂载

卸载

每个用户都有自己所有操作权限的目录,这个目录称之为家目录(主目录)

每次登陆目录,一定处在某个目录中

工作目录:当前所处的目录,叫做工作目录

cd:change directory

 cd 目标目录


Linux文件系统的特性:

1、文件名可以使用除/意外的任意字符,但总长度不能超过255个

2、严格区分大小写



如何获取命令帮助:

bash中,命令分为:

内部命令:在bash中内部实现的命令叫做内置命令

外部命令:在文件系统上的某个位置有一个与命令名称对应的可执行文件

如何判断:?

使用type命令

[root@localhost ~]# type cd

cd is a shell builtin

[root@localhost ~]# type fdisk

fdisk is /sbin/fdisk

[root@localhost ~]# type cp

cp is aliased to `cp -i


shell 事先通过一个变量设定好了多个路径,当用户输入命令时,shell会自动到这些路径(由左向右)以此查找与命令名称相同的可执行文件

hash 用来保存以前曾经执行过的命令,以哈希表的方式保存,可以通过hash来查看


[root@localhost ~]# hash

hitscommand

   1/usr/bin/tty

   1/usr/bin/pstree

   1/bin/cat

   4/usr/bin/who

   1/usr/bin/man

   3/usr/sbin/ntpdate

   2/bin/ls

   

   

查看一个可执行程序的具体路径:使用 which+程序名来查看

[root@localhost ~]# which fdisk

/sbin/fdisk


显示父目录

[root@localhost ~]# dirname /home/lost+found/

/home



获取帮助

    内置命令:

    # help 命令名

    外部命令:

     # 命令 --help

     有使用手册

     # man 命令(先解压后显示)

      里面有很多段落:

        NAME

SYNOPSIS 格式

OPTIONS 

EXAMPLES

DESCRIPTION

      使用帮助中命令格式中的字符意义:

      []:可选的部分

      {a|b}:分组,a和b作为一个使用单元来使用

      |:或者,只能选其一

      <>:必不可少的部分

      ...:同类内容可以出现多个,以空格分割

      简要使用机制

      翻屏:

       空格键:向文件尾部翻一屏

       b:向文件首部翻一屏

       回车键:向文件尾部翻一行

       k:向文件首部翻一行

       ctrl+d:向文件尾部翻半屏

       ctrl+u:向文件首部翻半屏

       1G:第一行

       G:最后一行

       文本搜索:

        /keyword : 顺向,向文件尾部搜索

查看下一个被匹配到的

 n 跟命令方向一致

 N 跟命令方向相反

?keyword : 逆向,向文件首部搜索

       q:退出

  补充:man其实能为命令(普通命令、管理命令)、程序的配置文件格式、系统调用、库调用、游戏及其他不便归类的文件提供帮助手册

        man命令的分段机制:

1:用户命令:

2:系统调用

3:库调用

4:设备文件

5:文件格式

6:游戏

7:杂项

8:管理命令

 命令的使用格式:

  command options arguments

  命令   选项    参数

  查看passwd的文件格式

  [root@localhost ~]# man 5 passwd

  

  

  选项:调整命令的执行特性的

     选项可以有多个,多个选项之间必须以空格分隔

     短选项:-char(字符)

     长选项:--word(单词)

     两个短选项可以合并,长选项一般不可以合并

     有些选项需要有参数

  命令参数:命令的作用对象:

          有些命令可以带多个参数,各参数之间需要使用空格隔开

  查看某关键字在那些段落有使用帮助

   whatis Keyword 精确查找

   提示:如果whatis的数据库尚未生成,可以使用makewhatis手动进行

   man -k Keyword 模糊查找

 

 [root@localhost ~]# whatis killkill                 (1p)  - terminate or signal processeskill                 (1)  - terminate a processkill                 (2)  - send signal to a processkill                 (3p)  - send a signal to a process or a group of processeskill [builtins]      (1)  - bash built-in commands, see bash(1)[root@localhost ~]# [root@localhost ~]# [root@localhost ~]# man -k killkill                 (1p)  - terminate or signal processeskillall              (1)  - kill processes by nametkill                (2)  - send a signal to a thread


info 命令:获取在线文档

很多应用程序自带的有文档:/usr/share/doc

   ChangeLog INSTALL README

 google:

   linux filetype:ppt 特定格式

   keyword site:magedu.com

Redhat官方文档

 www.redhat.com/docs


 [说明文档的帮助]

[root@localhost ~]# cat /usr/share/doc/yum-3.2.29/README 



【推荐阅读】

Google.Hacks.探索和利用全球信息资源的技巧和工具.(第三版)



 shuitdown,如何关机和重启;

 reboot halt date hwcolck


【导出环境变量】

  export LANG=en

  将语言设置为en

  

  

系统管理类的命令

   

 shutdown [option]...TIME      -r :重启      -h :关机      -c:取消重启或关机命令        时间格式:      now      +#:#分钟以后      hh:mm 几点几分关机      reboot 一般情况下是调用shutdown进行关机处理      halt      poweroff


日期时间管理类命令

date,hwclockdate 显示当前系统时间date MMDDhhmm[cc]YY.ssdate[+FORMAT]%Y:四位年份%y:两位年份%m:月%M:分钟%d:日%h:英文简写的月%H:时%S:秒%s:现在距离1970年1月1号0点0分(unix元年)的秒数,timestamp(时间戳)%D:月/日/年%F:年-月-日%T:时:分:秒[root@localhost ~]# date 0122145516Fri Jan 22 14:55:00 CST 2016[root@localhost ~]# date 012214552016.45Fri Jan 22 14:55:45 CST 2016[root@localhost ~]# date +%h-%YJan-2016[root@localhost ~]# date +%h:%YJan:2016





hwclock

  -s:以硬件时钟为准 --hctosys

  -w:以软件时钟为准 --systohc

Linux有两个时钟

硬件时钟:

软件时钟:开机时读取硬件时钟


[root@localhost ~]# hwclock

Tue 17 Nov 2015 04:50:16 AM CST  -0.143619 seconds




cal 日历

  bash的特性至二:


命令行展开:能够把一个特殊字符换成别的字符

{,}展开为多个条目

文件和目录管理类的命令

  目录:

      cd ~[username]

      ~:指定用户的家目录

      cd -:回到上一次所在的目录

   路径:

     相对路径中:

     .:当前目录

     ..:父目录

pwd: print working directory 显示当前目录

mkdir:创建目录

-p:先创建父目录

-v:显示详细信息


rmdir:删除空目录

     -p:只能删除一线单的目录 批量创建 [root@localhost ~]# mkdir -pv a/b/c/d/e/fmkdir: created directory `a'mkdir: created directory `a/b'mkdir: created directory `a/b/c'mkdir: created directory `a/b/c/d'mkdir: created directory `a/b/c/d/e'mkdir: created directory `a/b/c/d/e/f'批量展开创建[root@localhost ~]# mkdir -pv a/b{1,2,3}/{c1,c1,c4}/d/e/fmkdir: created directory `a/b1'mkdir: created directory `a/b1/c1'mkdir: created directory `a/b1/c1/d'mkdir: created directory `a/b1/c1/d/e'mkdir: created directory `a/b1/c1/d/e/f'mkdir: created directory `a/b1/c4'mkdir: created directory `a/b1/c4/d'mkdir: created directory `a/b1/c4/d/e'mkdir: created directory `a/b1/c4/d/e/f'mkdir: created directory `a/b2'mkdir: created directory `a/b2/c1'mkdir: created directory `a/b2/c1/d'mkdir: created directory `a/b2/c1/d/e'mkdir: created directory `a/b2/c1/d/e/f'mkdir: created directory `a/b2/c4'mkdir: created directory `a/b2/c4/d'mkdir: created directory `a/b2/c4/d/e'mkdir: created directory `a/b2/c4/d/e/f'mkdir: created directory `a/b3'mkdir: created directory `a/b3/c1'mkdir: created directory `a/b3/c1/d'mkdir: created directory `a/b3/c1/d/e'mkdir: created directory `a/b3/c1/d/e/f'mkdir: created directory `a/b3/c4'mkdir: created directory `a/b3/c4/d'mkdir: created directory `a/b3/c4/d/e'mkdir: created directory `a/b3/c4/d/e/f'嵌入创建[root@localhost ~]# mkdir -pv a/b{1,2,3}/{c1,c1,c4}/d/{e1,e2{q1,w2}}/fmkdir: created directory `a/b1/c1/d/e1'mkdir: created directory `a/b1/c1/d/e1/f'mkdir: created directory `a/b1/c1/d/e2q1'mkdir: created directory `a/b1/c1/d/e2q1/f'mkdir: created directory `a/b1/c1/d/e2w2'mkdir: created directory `a/b1/c1/d/e2w2/f'mkdir: created directory `a/b1/c4/d/e1'mkdir: created directory `a/b1/c4/d/e1/f'mkdir: created directory `a/b1/c4/d/e2q1'mkdir: created directory `a/b1/c4/d/e2q1/f'mkdir: created directory `a/b1/c4/d/e2w2'mkdir: created directory `a/b1/c4/d/e2w2/f'mkdir: created directory `a/b2/c1/d/e1'mkdir: created directory `a/b2/c1/d/e1/f'mkdir: created directory `a/b2/c1/d/e2q1'mkdir: created directory `a/b2/c1/d/e2q1/f'mkdir: created directory `a/b2/c1/d/e2w2'mkdir: created directory `a/b2/c1/d/e2w2/f'mkdir: created directory `a/b2/c4/d/e1'mkdir: created directory `a/b2/c4/d/e1/f'mkdir: created directory `a/b2/c4/d/e2q1'mkdir: created directory `a/b2/c4/d/e2q1/f'mkdir: created directory `a/b2/c4/d/e2w2'mkdir: created directory `a/b2/c4/d/e2w2/f'mkdir: created directory `a/b3/c1/d/e1'mkdir: created directory `a/b3/c1/d/e1/f'mkdir: created directory `a/b3/c1/d/e2q1'mkdir: created directory `a/b3/c1/d/e2q1/f'mkdir: created directory `a/b3/c1/d/e2w2'mkdir: created directory `a/b3/c1/d/e2w2/f'mkdir: created directory `a/b3/c4/d/e1'mkdir: created directory `a/b3/c4/d/e1/f'mkdir: created directory `a/b3/c4/d/e2q1'mkdir: created directory `a/b3/c4/d/e2q1/f'mkdir: created directory `a/b3/c4/d/e2w2'mkdir: created directory `a/b3/c4/d/e2w2/f'多项式创建方式[root@localhost ~]# mkdir -pv {1,2}_{1,4}mkdir: created directory `1_1'mkdir: created directory `1_4'mkdir: created directory `2_1'mkdir: created directory `2_4'[root@localhost ~]# mkdir -pv {1,2}*{3,4}*{5,6}mkdir: created directory `1*3*5'mkdir: created directory `1*3*6'mkdir: created directory `1*4*5'mkdir: created directory `1*4*6'mkdir: created directory `2*3*5'mkdir: created directory `2*3*6'mkdir: created directory `2*4*5'mkdir: created directory `2*4*6'[root@localhost ~]# mkdir -pv /tmp/mylinux/{usr/local}/{bin,sbin},etc/{sysconfig,init.d},bin.sbin}mkdir: created directory `/tmp/mylinux'mkdir: created directory `/tmp/mylinux/usr'mkdir: created directory `/tmp/mylinux/usr/local}'mkdir: created directory `/tmp/mylinux/usr/local}/bin'mkdir: created directory `/tmp/mylinux/usr/local}/sbin'mkdir: created directory `/tmp/mylinux/etc'mkdir: created directory `/tmp/mylinux/etc/sysconfig'mkdir: created directory `/tmp/mylinux/etc/init.d'mkdir: created directory `/tmp/mylinux/bin.sbin'创建带空格目录[root@localhost ~]# mkdir "a c" -pvmkdir: created directory `a c'


shell的引用:

‘’:强引用,变量替换不会进行

"":弱引用,能够执行变量替换

``:命令替换,引用命令的执行结果,另外一种方式$()

变量替换:${变量名}

echo 显示


创建时间文件夹,两种方式

[root@localhost ~]# mkdir `date +%F-%H-%M-%S`

[root@localhost ~]# mkdir $(date +%F-%H-%M-%S)



shell的特性之三:命令历史

bash默认会保持此前执行过的命令列表

  当前shell进程的保存在缓冲区中:

  缓冲区中的命令会在shell退出的保存在文件中 .bash_history

使用上下箭头键可以翻看此前执行过的命令:

history:

   !数字:执行history中第数字条的命令

   !!:上一条命令

   !-数字:表示执行命令列表中的倒数第数字条命令[没有空格]

   !$:执行上个命令中的最后一个参数:ESC,.【按ESC+按点】

   !string:执行命令列表中的最近一次以string开头的命令

   -d 数字 删除第数字条记录

   -c 清空history列表

   -a:追加当前回话的命令到历史列表中去

   -n:读取所有在回话列表中的 但是不在当前回话列表中的

   -r

   -w  把命令写到文件中

   

 命令历史相关的环境变量

HISTSIZE:历史命令中可以保存的个数

[root@localhost ~]# echo $HISTSIZE

1000


HISTFILE: 历史命令保存的文件

HISTFILESIZE:历史文件中可以保存的命令个数

[root@localhost ~]# echo $HISTCONTROL

ignoredups


HISTCONTROL:控制命令历史的生成机制

ignoredups:忽略记录重复的命令,连续的相同命令

ignorespace:以空格开头的命令不会被记录

ignoreboth:同时具有上面两种特性

root@admin-ceph:~# HISTCOnTROL=ignoreboth

root@admin-ceph:~# echo $HISTCONTROL

ignoreboth



补充:Linux文件系统的另一个特性:以点开头的文件为隐藏文件 通过ls -a 查看


shell中的变量赋值

     变量名=值

     注意:变量在赋值是不能再前面带$

           变量名只能包含字母、数字和下划线,并且不能以数字开头

  变量名区分大小写

  尽量能见名知义




FHS:文件层次标准

 

  操作系统自身运行使用的    /bin: 存放可执行的二进制程序,管理员和普通用户都可以使用    /sbin:管理员才能执行的命令    运行正常功能的程序存放位置    /usr/bin    /usr/sbin    用来存放第三方软件的程序    /usr/local/bin    /usr/local/sbin/boot:存放系统引导文件:内核、ramfs文件、bootloader(grub)/dev:设备文件存放目录/etc:配置文件的集中存放目录    /etc/sysconfig:系统级别的应用    /etc/init.d:系统服务脚本 /home :普通用户,默认在/home下有一个与其名称同名目录,作为用户的家目录 /root:管理员的家目录 /lib,/lib64:库文件/media:专用挂载位置,通常用来挂载便携式设备/mnt:专用挂载位置,挂载额外的存储设备/misc:杂项,备用目录/opt:可选目录,但通常用来安装第三方软件/proc:所显示的文件都不是文件,伪文件系统,运行中的内核参数的映射/sys:伪文件系统,系统级别的用于配置硬件设备相关的参数/srv:为服务提供数据存放位置的/tmp:临时文件系统:默认存放30天/usr:shared 所有遵循协议的系统都可以使用,readonly 只读   /usr/include:头文件存放位置/var:经常发生变化的文件    /var/log    /var/lock    /var/run    /var/cache

文件管理类的命令:

文件类型

bash的其他特性:

shell管道和重定向:

文本编辑器:正则表达式

文件查找:



推荐阅读
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • 在Linux系统中,find和grep是两个常用的命令,用于文件和文本的查找。本文将详细介绍这两个命令的区别及其常见用法。 ... [详细]
  • 在使用USB接口的二维条码扫描器时,发现其无法正确识别条码中的中文字符。然而,采用串口连接的方式则能够成功识别。目前面临的问题是如何将通过串口获取的数据在网页中进行实时展示,希望各位专家能提供解决方案,不胜感激。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 如何在Django和Vue中配置共享全局变量以实现跨组件数据传递
    在Django和Vue项目中,为了实现跨组件的数据传递,可以通过配置共享全局变量来达到目的。具体做法是在Django项目的主目录下创建一个专门用于存储全局变量的Python文件。例如,可以在该文件中定义一个函数 `templates_global`,该函数返回需要在多个组件间共享的数据。此外,还可以利用Vue的Vuex状态管理库来进一步增强数据的管理和传递效率,确保数据的一致性和可维护性。 ... [详细]
  • 解决SWFUpload在本地测试成功但服务器上出现404或500错误的方法
    在使用SWFUpload进行图片批量上传时,尽管本地测试一切正常,但在部署到服务器后却遇到了404和500错误。经过详细排查,发现404错误的原因在于`flash_url`和`upload_url`需要配置为绝对路径。此外,500错误可能是由于服务器端的权限设置或脚本错误导致,建议检查服务器日志以获取更多调试信息。通过这些调整,最终成功解决了问题。 ... [详细]
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
author-avatar
可卡因
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有