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/ 目錄中的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM