zoukankan      html  css  js  c++  java
  • php的内核组成模块和运行原理

    php总共包括3个模块:
    php内核,zend引擎,php扩展层。

    • 内核: 用于处理请求,文件流,错误处理等相关处理
    • zend引擎: 将源文件转换成机器语言(实际上是字节码opCode),然后再zend虚拟机上运行(这个跟java虚拟机是类似的)
    • 扩展层是一组函数、类库和流, php使用它们来执行一些特定的操作, 比如需要使用mysql扩展(扩展文件实体是 : PhpRoot/ext/php_mysql.dll


    zend模块包括:
    zend引擎, 这个是最底层的。
    zend api
    zend extensions , zend引擎的扩展。 比如最有名的是: php_xdebug_version..._vc6.dll

    ================
    1.安装和卸载run文件
    run文件跟其他普通文件一样,只是要先将文件设置为 executalbe 就可以 ./virtual..run执行了.
    卸载run安装的程序, 需要使用 uninstall, 执行locate virtualbox | grep uninstall 找到uninstall文件,然后执行uninstall??

    1. 关于sapi层?
      sapi: s-api: server api, 表示 php提供给 (apache/iis/ngix/cli)等 服务器使用的api接口.是php和其他服务器程序 交互的接口(层)
      sapi是由php实现的, 是php的一个组成模块. 其他服务器是不会管的.php针对不同的 服务器程序, 自己实现了不同的sapi, 比如常见的 apache2handler 就是 php提供给/针对 apache所写的 sapi层.
      数据结果流的传送过程是: php申请系统调用处理的结果 -> zend 引擎 -> php -> sapi层 -> apache ... -> apache cache缓存 -> 浏览器cache -> 浏览器 -> 渲染..

    2. php不必纠结它是一种编译还是解释语言, 其实所有的语言程序, 都是 "伪指令, 助记符 mnomenic symbol", 然后不管是在真实的机器硬件上执行, 还是在虚拟机上执行, 其实都是翻译成的 "字节码", 并没有

    3. exe文件中的内容真的就是 二进制代码 00011100这些吗?
      不是!
      你在屏幕上所看到的和实际的cpu运作是没有任何关系的,即使是exe文件, 他的内容本身还是代码,是elf(executable and linkable format) 格式的代码, 只不过这些代码,不是 文本的, 而是 字节的, 是 十六进制的, 完全是: 类似: 00 23 45 2a f3 d1 8e 等等之类的东西, 这些东西 可以用ultraedit 来查看的, 还可以反编译成 汇编或其他语言. 所以绝对不可能是 001101...000101之类的东西.
      exe代码先要被操作系统识别,再转换为二进制数据, 经cpu进行指令处理: 包括指令IP指针和 指令解析器, 进行指令的执行: 一是可以直接在cpu的运算器中执行的指令,如浮点运算, 逻辑运算; 另外就是 需要 驱动硬件进行io操作的指令: 这种指令, 通过驱动程序 去驱动 硬件执行具体的动作.

    ===============


    在fedora23中,使用dnf安装 httpd(系统自带的), php和mysql

    1. php安装的版本是: 5.6.29, 构建时间是: 2016/10月, Copyright: the PHP Group.
      其中的zend engine的版本是: 2.6.0 , copyright: Zend Technologies.
    #### 注意理解配置 和 实体文件的区别? - 所有的配置文件, 不管是windows, 还是linux, unix系统, 都只是对 软件/程序/系统的 功能的一种说明, 一种调度, 一种 调节 ( 说明性/ 描述性 / 命令性/)的一种 **文档** ! 相当于做饭/做菜的一份 清单(比如 A 菜放多少克, B 菜放多少克, , 油放多少, 盐放多少), 然后你做饭/做菜的时候, 就按照这个清单( "炒菜 配置") 来做. 程序在启动时, 就按照 你的 "配置文件"中的说明, 来 启动 你指定的 某些功能/特征features, specications. - 所以配置文件, 其实是一种文档, 可能是ini, conf, cnf, xml 等等(httpd.conf, php.ini, my.cnf) - 而实际 软件/程序/系统的 功能 还是 得要 由 具体的实体 文件/ 实体物件/ 组件 等, 去实现. 比如: 你炒菜, 得要有那些具体的 菜, 油, 盐等等, 对于程序而言, 你得要有相应的 dll文件, 或 so文件等. 否则, 你光有 配置文件, 那就相当于 纸上谈兵, 是空谈吗 - 既然要配置, 就得要 那个 软件/程序等 就有 可配置 性: 是 configurable 可以设置的 才行!

    整个php可以分为: nts, 和zts线程安全版和 非线程安全版

    1. 任何一个软件, 都可以通过 rpm -qal | grep 'soft_name' 来 查看具体的安装 位置和细节, 以及这个包的文件 都安装到哪里去了. 主要是其中的 -l参数. 可以看到软件的 lib库, command命令, modules模块, share等资源都安装到什么位置了.
    2. php 的结构还是很明显很简单的: 如lib在/usr/lib/php/modules/..., 资源/图标icons/文档docs/man等都在 /usr/share/doc | man | icons 等等中. 其他 可执行文件在/usr/bin/...中, 配置文件在/etc/下.
    3. php的主配置 文件是 : /etc/php.ini
    4. 附加的模块 扩展配置在: php.d(是nts), 或 php-zts.d(ts的)中. 两个目录对应的文件都是一样的. 里面的 *.ini 文件名都是一样的
    5. 同样的, 他们对应的模块是在: /usr/lib/php/modules中, 对应 ts版本, 在 /usr/lib/php-zts/modules/...
    6. 安装了php后, 会自动地在 /usr/lib/httpd/modules/目录中 添加 libphp5.so so的mime类型是: shared Library(application/x-sharedlib)

    改变nautilus地址栏location的显示方式, 是用 dconf-editor 在 gnome -> nautilus -> preferences中设置: "always-use-location-entry" 为false或者 true就可以了"

    php本身是一个 命令文件: 比较重要的几个选项是:

    -v: 显示php的版本;
    -i: 这个最详细, 显示php的配置信息, 就是 phpinfo()的输出
    --ini , 这个可以查看当前 loaded 的 配置文件是哪些: 主配置文件是 : /etc/php.ini, 然后包括extension.ini的配置文件: /etc/php.d/...
    php -r, 或者 -R 可以 交互式地执行 php命令
    -f 可以指定要执行的 php源文件

    其实php.ini的配置文件格式 是很好理解的: 在每一个配置项 的开始, 是说明/注释; 然后在这一段的最后就是 具体的配置directive. 如果没有, 或全部为注释, 就表示该项为空配置或采用default.


    让dnf安装的 httpd, php和mariadb 共同协同工作? (因为, ### 必须放在行首, 所以应该将font color放在 ###的后面)

    1. **默认运行httpd的用户/组, 是 apache, id是48

    2. /etc/conf.d中的配置文件叫做: supplemental configuration: 附加的配置

    3. 根据dso: dynamic shared object, (表示"能够": 情态动词的话, 用can, 如果要表示的是 "实意"动词, 则用 be able to, 比如: To be able to use the functionality of a module which was built as a DSO ... ) , 必须使用:
      LoadModule foo_module modules/module_name(通用的名称是: modules/mod_foo.so)
      apache的模块分为静态编译的模块和 动态载入的模块:
      静态模块是很少的: 使用 httpd -l 就可以看出, 只有几个: 3个compiled in modules: core.c(是httpd本身的核心模块), http_core.c(关于http网络请求/连接的核心模块) mod_so.c (实现动态载入功能的 接口模块)
      绝大部分是动态载入的, 动态载入的就要用 LoadModule 语句. 因为动态载入的模块很多, 如果直接在 httpd.conf中写, 会让主配置文件很长很繁琐, 而且不便于分类. 所以 就将 这些loadmodule语句放在conf文件中, 然后将文件放在 conf.modules.d下, 只要在 主配置文件中, 包含一句就好了 : Include conf.modules.d/*.conf

    4. 使用httpd -v查看版本是2.4.19, -V 是httpd编译时的配置

    5. apache 动态载入的模块: Loaded Modules,其中包含php5:

    6. 因为 安装httpd的时候, 是用 root的身份进行安装的, 所以 很多关于httpd的东西, 比如 配置文件conf, 模块文件, 甚至/var/www/html等这些都是root的, 要用root权限才能修改!

    7. 用dnf安装php的好处是, 他把很多手动安装php的工作都帮你作了, 所以 只要你 dnf 安装php完成后, 不用作任何额外的配置, 就可以直接在httpd中使用php了:
      一是: dnf将 生成的 libphp5.so/libphp5-zts.so 文件帮你拷贝到了httpd的模块目录 /var/lib/httpd/modules/中了, 不用你手动拷贝了;

    二是: 为了使用dso技术, dnf自动在 httpd的 conf.modules.d/ 目录中, 帮你生成了 10-php.conf 这个动态模块配置了,
    还使用了 IfModule 模块判断功能

    <IfModule prefork.c>
    LoadModule php5_module modules/libphp5.so
    </IfModule>
    

    而apache本身的 基本功能 动态载入模块是在: conf.modules.d/00-base.conf中 的

    三是: dnf帮你在 /etc目录下生成了php.ini的主配置文件了, 所以你不必在源码包中拷贝php-medium/large/..ini等配置文件了


    php的扩展层? 是通过 php.d来动态载入的: php.d/中的 *.ini文件和 /usr/lib/php/modules/中的模块其实是对应的...后者就是通过前者来 dynamically loaded的

    其实php也可以支持asp标签样式, 关键是你自己在php.ini中去配置, 开启这个开关: asp_tags=on.

    1. php配置文件因为是ini文件, 所以总的来说, 是分节 的: 第一个节是 当然是 [PHP], 后面还有各种各样的分门别类的节, 如: [MySQL], [MySQLi] [Session]等节
    2. 在php.ini中, 每个段落就是一个指令, 前面是注释和说明, 段落的最后一行就是指令. 段落和段落之间总是隔一行. 凡是两行 分号包围的部分就是一个大的分段, 表示另一大类, 比如:
      ;;;;;;;;;;;;;;;;
      ; File Uploads ;
      ;;;;;;;;;;;;;;;;

    当修改了php.ini的时候, 需要 重启 httpd吗? 因为php是动态载入apache的, 当载入后, apache就只认原来的php配置了, 即使你修改了php.ini , apache也不认, 所以, 要让php.ini修改后能生效, 必须要重启apache, 从而让httpd重新去读取 php.ini . 这样修改才能生效! 如果关闭了 asp_tags=Off, 这时,就不认为 <% %>是php标签, 只是普通文本, 所以就照原样输出了.

    当安装了 新的 php 的扩展模块时 , 比如 php-mysqlnd扩展时, 要重启httpd, 这样 php扩展 才能生效!

    对于 php来说, 如果没有安装 "mysql访问" 驱动, 则php不能访问mysql的, 则 所有的php访问mysql 的函数都 将无效, 这样, 这些语句就好像不存在, 没有写一样, 不会有任何反应 和结果 的!!! 但是 , html目录中的php源文件 修改后, 保存后, 是不必重启 httpd的. 是可以直接 就能看到 修改后的效果的!!

    当安装了 php-mysqlnd后, 重启httpd, 然后下面这一段最普通的代码就能正常运行了

    <?php
    $conn = mysql_connect('localhost', 'root', '') or die('failed to connect!');
    mysql_select_db('test', $conn);  // 注意,这里的参数, 一定是'db'在前面, $conn在后>面,不能写反了! 
    
    $sql = "select * from user";
    $result = mysql_query($sql);
     
    while($row = mysql_fetch_row($result)){
        foreach($row as $val){
             echo $val.' : ';
            }
        echo '<br>';
        }
    
    ?>
    

    mysqlnd : php用来访问mysql的模块工具: 表示 mysql Native Driver : 本地驱动. 关于 mysqlnd: 详细信息, 参考: http://blog.sina.com.cn/s/blog_4fb208cc0100vxut.html

    不再是: php-mysql, 现在是用的 php-mysqlnd. (nd: 是一个 C-level library)
    libmysql is a generic C-library: libmysql是一个通用库. 而mysqlnd则是专门为php写的 函数库, 使用的是php的内部函数.
    (Mysqlnd is neither a new PHP extension nor a new API! mysqlnd is new C-level library code. The mysqlnd library provides almost the same functionality as libmysql does. (as 后面跟从句, 动词及后面的部分, 可以用 do, does等来代替: as sb/sth do/does)

    1. 版权问题: libmysql 使用的是mysql license, 属于oracle, mysqlnd 使用的是 php license.
    2. mysqlnd 使用了 php的memory management system, 内存管理性能更高
    3. 新特性支持 mysqli的更多特性...
      mysqlnd成为php 5.3.x 中的默认mysql驱动
    mysqlnd成为php 5.3中的默认mysql驱动,它有如下优点:
      mysqlnd更容易编译: 因为它是php源码树的一个组成部分
        <font color="red"> mysqlnd和php内部机制结合更紧密,是优化过的mysql驱动
        mysqlnd更节省内存,从测试结果来看,比传统的mysql扩展节省40%的内存 </font>
        mysqlnd更快
        mysqlnd提供了丰富的性能统计功能
        mysqlnd使用了PHP license以避免不必要的版权纠纷
    
    这个改动应同时对mysql和pdo_mysql扩展生效。
    
    

    mysqlnd是mysql原装的php驱动 , 是一个 函数库!


    *安装mysqlnd包的时候, 会 同时 安装 php-pdo 依赖包...., 同时 还会自动安装 相应的so 和 ini: 包括: 20-mysql/mysqli/mysqlnd/sqlite.so , 以及pdo, pdo_mysql, pdo_sqlite.so 等 *

    是否需要在 httpd.conf中 添加 php类型声明? AddType ??

    1. 如果 apache显示 php文件, 为原码, 直接是php代码, 没有解析过来, 则是 需要 添加类型的: 类型声明中, 都是x-httpd-...
     AddType application/x-httpd-php .php
    AddType  application/x-httpd-php-source .php5  (这个是声明php的源代码, 可以是php5, 也可以是 phps?)
    
    1. 但是 如果libphp5.so已经能够正常loaded, 并且能狗正确解析 php文件时, 加不加 这个声明都是没有关系的, 甚至, 类型乱写都是没有影响的!

    为什么修改 httpd 的DocmentRoot路径后, 就不能访问了?

    1. 所有以4开头的 返回码, 状态码都是 表示" 访问出错!"的, 包括:
      403: forbidden : have not permission to access / on this server : permission: 许可 | 也可以作 "权限" 讲!
      404: not found on this server
    2. 凡是apache 访问出错故障, 查询网站是: http://bugs.apache.org这个是以前的, it has be retired now. 现在是https://wiki.apache.org/httpd了, 可以在里面输入关键字进行查找,比如: change DocumentRoot, 一般是title和text中的text.:
    3. 现在foreign的网站, 基本上都是用 https了(https用ssl加密的, 第三方是无法勘测的), 对于foreign的先用https协议访问, 如果不行,就用http. 而:home/internal/ Domestic 的站点则相反.
    4. to allow apache to serve directories outside of DocumentRoot: serve: server, service, 动词, 表示提供服务: serve!
    5. 要修改httpd的DocumentRoot, 要作两件事: 一是 用DocumentRoot directive修改文档根, 第二是要 指明 这个文档路径的 访问权限! 即添加相应的 <Directory New_DocRoot>...
    6. apache2.4的配置中权限是用的 : require all granted/denied 的, 而不再是 2.2版本中的 Order allow, deny Allow from all 什么的...

    终于发现, alias别名的用处了: 就是用简短的写法来代替 那些_经常使用的_较长的_命令序列: 比如关于firewalld, enforce, httpd这三个 常用命令的 开关/查看状态等: 下面的这些aliases就比较全了.

    # httpd的alias中, h放在最后面, 表示httpd . st表示stop, sta表示 status
    alias edh='su -c "vim /etc/httpd/conf/httpd.conf"'
    alias rsh='su -c "systemctl restart httpd.service"'
    alias sth='su -c "systemctl stop httpd.service"'
    alias stah='systemctl status httpd'
    
     # 自定义mariadb的aliases:  两个服务器web和 mariadb, qizhong的 h表示httpd,m表示 : mariadb.
     15 alias rsm='su -c "systemctl restart mariadb.service"'
     16 alias stam='systemctl status mariadb'
     17 alias stm='su -c "systemctl stop mariadb.service"'
    
    alias senf0='su -c "setenforce 0"'
    alias senf1='su -c "setenforce 1"'
    
    # 在firewalld中, fw放在最前面的
    alias fwon='su -c "systemctl start firewalld"'
    alias fwoff='su -c "systemctl stop firewalld"'
    alias fwsta='systemctl status firewalld'
    
    

    注意, 并不是所有的命令, 都提供了帮助 选项, 而且并不是所有的帮助 选项都有 -h 和 --help两种. 比如 httpd 这个命令就只有-h选项, 而没有--help选项.所以在查找帮助的时候, 可以先后输入这两个额选项.

    而httpd 查看 语法是否正确的选项是: -t

    关于ps的理解

    ps是linux下强大的 "进程管理器' , 是"进程 状态" Proesses State 的简写.
    但是如果在终端中运行ps命令, 输出是很少的:

    1. 这个是因为, 这里输出的 "只是 表示 在 当前这个终端 tty下 所运行的 /分配给的 进程" , 并不表示 所有运行在 系统上的(当前这个机器上的) 所有 进程!
    2. 这个也可以帮助理解 tty的概念: 是以前遗留下来的一个概念, 因为那时候机器很贵, 所以,大家公用一个 "中心"机器 , 然后各自 用 键盘和显示器跟 中心机器交互操作. 这样的环境下, 每个用户就叫做一个 "终端", 一个tty. (现在机器很便宜了...) gnome-terminal 就是 在 "模拟" 机器的 远程 终端. 相当于 用xterm, ssh等登陆的终端, 或者也可以用 S/B, C/S 的模型来理解, 安装fedora系统的机器就是中心机器, 而其他来访问登陆的tty 都不过是它的一个终端. 外接设备,显示/ 输入|输出设备而已. 这时候, 这样的tty 的类型就是 : pts: 虚拟的终端设备.从0开始计数: tty: pts/0
    3. 要显示所有进程, 用 ps -aux 等命令.

    安装flashaplayer
    名字叫 flashplayer, xiazai地址是: https://get.adobe.com/flashplayer/, 将下载的flashplayer.tar.gz解压, 其中 的 flashplayer.so 就是 firefox的 flash插件
    === 在家目录下的 点目录, 通常是 一个软件的 用户自定义配置目录. 比如:
    firefox的plugins, 除了在 /usr/lib/mozilla/plugins/ 目录下的插件(正好跟firefox默认的插件相一一对应)外, 还会 在启动时读取 ~/.mozilla/plugins目录中的插件, 所以也可以将 flashplayer.so 放在 ~/.mozilla/plugins目录中.

    更改文件的owner和group
    直接在命令 chown后面 写 要改变成的 "用户名: 组名"就行了, 不必再写 什么 u+g , u:g什么的了, 直接就是 比如root:root就好了

    plugins的加载过程?
    ff会在 每次 启动的过程中 ,自动 查找 plugins/目录下的lib...so, 然后自动加载, 在浏览器ff 的 plugins列表中 就可以看到

    ff的 npapi 和 ppapi是什么东西?

    1. 是 libflashplayer 的两种 框架??的 版本
      np-api是: Netscape Plugin-api: 网景公司的 api
      pp-api是: Pepper Plugin -api, 是 google的flashplayer api
      ppapi 是放在 沙盒中 作为: 外挂来运行的. 安全性高了, 但是 内存占用更大了. npapi的功能强大, 可以调用系统功能, 但是问题是 安全性低...
      但是, 现在 普通应用, 还是 应用得最多的是 : Npapi 的 flashplayer.
    2. 下载时, 不必纠结 libflashplayer的版本吧: 和 下载的文件名称: 以前是 : install-flash_player_..., 而现在是: flash_player_npapi_linux.i386.tar.gz
      如: 27.0.r0, 主版本已经时27, 调整修正bug的版本时0, 这个版本的时间是: 2017.10.12

    安装libflashplayer.so 最重要的操作是什么?

    1. 不是libflashplayer.so的位置, 如上所说, 将该文件放在 当前 "登陆用户"的 家目录下的 ~/.mozilla/plugins/ 下也是可以的
    2. 当然要将该文件 更改为 root:root 777.
    3. 但是, 有时候~~ 即使已经将libflashplayer.so设为root :root 777 但是 仍然 不能 生效? 为什么?
    4. 就是 一个 最重要的 操作点就是 : : **从 解压下载下来的 .tar.gz 文件 开始, 直到 你将文件 移动到 plugins 目录下 为止, 整个过程最好都是 用 root用户 去操作, 而不是用 普通用户解压, 移动 然后更改 chown. ** 保证 解压->移动 libflashplayer.so 用root用户操作, 是这个插件生效的关键??
    5. 在用 root用户, 解压 插件包的时候, 居然 看到 该文件的所有者是: systemd-network, system-timesync! 也许这就是问题所在!! 也许就是要保证最开始的所有者和组是这个systemd-network :: 就是要保证libflashplayer的所有者和 组都要是 systemd-network: systemd-timesync 才行!!!
      原因: 也许是: firefox 这个进程 要访问 libflashplayer.so这个文件的时候, 有 selinux的要求, 当用不同的用户, (比如用foo 和 root来创建 libflashplayer.so的时候, 他们的selinux context是不同的) 所以 要用 root来操作, 而且最好是放在 : /var/lib/mozilla/plugins/下!!! < /strong>


    diff的 常用的有用的参数:

    1. -q: 只报告有无区别: 相当于 quiet的意思
    2. -y: --side-by-side: 分左右两列并排显示两个文件的内容
    3. -y --left-column: 分两列并排显示, 只是如果相同内容, 只在左边一列显示内容, 右边那列 显示 "( " 符合, 不同内容的时候, 显示 "|"
    4. --suppress-common-lines: 不显示相同的行
    5. 2c2 中的c表示compare比较, 即指示在这一行有不同.

    安装virtrualbox的各种问题 参考: https://www.zhangguangtong.cn/?p=118

    1. kernel driver is not installed (rc=-1908):

    2. fedora 手动 单独的 下载 一些rpm包的 地方是在: https://pkgs.org/ ...

    3. 关键是 kernel, kernel-header, kernel-devel的版本要一致, 比如都是 fc 4.2.3-300, 因为上一次, 安装的 这三者的版本刚好一致, 所以就成功了!
      而这次安装失败的 原因是: 三种包 的版本不一致, kernel / kernel-modules/ kernel-core都是 4.2.3版本的, 而kernel-headers和 kernel-devel 却是 4.8.0...的, 所以:

    4. linux的内核是指linux os本身,不包括那些外围的软件.

    • 版本号: A.B.C: A: 主版本号, B : 次版本号, C: 末版本号, B如果是偶数表示稳定版; C表示一些bug, 安全更新, 和小的 新特性features.
    1. 要安装linux的 内核驱动模块, 是通过 命令 vboxconfig来执行的, 这个命令会去调用 执行 vboxdrv.sh脚本. vbox的内核驱动, 就是 通过vboxdrv.sh 来启动 --- 编译安装的 过程的, 而这个编译安装,因为 要使用到 linux (系统) 内核 中的一些: 结构/常量/数据等, 所以 需要 安装 kernel, kernel-headers, kernel-devel这些包. 现在的问题是: 这些包的 版本不一致!!!

    2. 有两种方案, 要么将kernel的版本从4.2.3 -> 升级到 跟 kernel-headers & kernel-devel相同的版本4.8.0, 但是 升级内核有风险, 可能导致系统无法启动, 无法开机, 而且要update/upgrade 很多组件,包括gcc,包括修改 grub等.. . 所以 不能轻易为之 风险太大, 成本太高. 不能/不敢尝试. !! 要么就是 "降级" headers和devel包.

    3. 因为在 dnf的安装过程中 , 你指定 的 仓库中 的软件 是 "随时" 都在变化的, 有的二进制包rpm在增加, 比如新版本的/更高版本的kernel-delv-4.8.13, kernel-headers-4.8.13-等, 有的老的/旧的版本, 如: kernel-headers/devel-4.2.3这种版本包可能就被从仓库中删除了. 这个不是我们所能控制的, 是由仓库的管理者所决定的. 所以 ,因该将这种 旧的/老的 版本包 保存下来 , 以便今后 仓库中 得不到时, 能够从 本地 所保存的rpm包中来 安装.

    4. 幸好, fedoraproject仓库还保存了 旧版本的 kernel-headers/devel- 4.2.3版本, 所以你可以通过dnf安装.
      dnf安装的时候, 如果带版本号, 那么, dnf搜索可能会失败, 而dnf install可以带版本号, 会成功!: 即: dnf 搜索的时候, 不要带版本号, install安装的时候, 可以带版本号, 可以指定 版本号!

    这个 fc 4.2.3的内核 , 支持的 virtualbox .run的版本是: VirtualBox-5.1.18-114002-Linux_x86.run


    linux系统中的 .h头文件?

    virtualbox本身是一个命令, 可以 查看他的帮助 命令, --help. 在其中 可以看到 --seamless, --fullscreen, --startvm等选项. 可以在 快捷命令中设置 vbox启动时, 自动 switch to seamless 模式: /usr/bin/virtualbox --startvm 'win7' --seamless --fullscreen 等设置.

    在 vbox虚拟机中 安装系统时:

    1. 通常还是要先进入到pe系统, 可以在 pe中利用 diskgen 来 格式化硬盘 , 创建 分区表.
    2. 通常是 先创建 主分区 然后是创建 扩展 分区(extension partitions), 最后才是 在 扩展分区中创建 "逻辑分区" 只有 在创建好了 主分区后, active 后, 才能 成功的安装系统.
    3. 在进入虚拟机后, 在 view菜单上设置 " main menu/ status bar" 的显示与否, 在 device 菜单上 , 选择加载: VBox Guset Additions, 然后 要将 该光盘 激活: 即勾选 "live" 就可以看到加载的 光盘内容, 然后 像 win下的其他普通软件一样, 安装 Guest Addition x86应用程序 即可使 虚拟机自动 全屏 显示..

    /var目录跟/usr 目录一样重要, 是系统的主要文件存放位置, 它里面比较重要的目录 包括cache,log, run , www, lib等, 主要是存放一些系统中 经常发生变化的内容。 比如一般系统中 , 两个常用的服务器, web服务器和mysql服务器的 实体内容 都是放在 /var 中 的, 比如: web服务器是放在 /var/www中的, 而数据库服务器是放在 /var/lib/mysql/ 目录中的!

  • 相关阅读:
    两种接口传送数据协议(xml和json)
    两种访问接口的方式(get和post)
    myeclipse 编写java代码提示 dead code 原因
    svn文件冲突,树冲突详解
    linux操作提示:“Can't open file for writing”或“operation not permitted”的解决办法
    embed标签属性
    程序员必读的书刊收藏
    python实现冒泡排序和快速排序
    python简单词频统计
    Qt出现堆溢出(Error Code -1073741823)
  • 原文地址:https://www.cnblogs.com/bkylee/p/7688140.html
Copyright © 2011-2022 走看看