應(yīng)用程序(sh、vi、OpenOffice.org等)
復(fù)雜庫(KDE、glib等) 簡(jiǎn)單庫(opendbm、sin等)
C庫(open、fopen、socket、exec、calloc等)
我們可以發(fā)現(xiàn),由linux內(nèi)核+shell可以構(gòu)成一個(gè)操作系統(tǒng),而linux本身只是個(gè)內(nèi)核,也就是圖中的內(nèi)核模式,負(fù)責(zé)控制系統(tǒng)的這些部分。也就是我們可以發(fā)現(xiàn),Linux內(nèi)核構(gòu)成了一個(gè)操作系統(tǒng)除用戶界面以外的部分,而shell就是這最后的用戶界面。
而linux內(nèi)核以外的部分就是由GNU計(jì)劃構(gòu)成的。
Shell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行。
實(shí)際上Shell是一個(gè)命令解釋器,它解釋由用戶輸入的命令并且把它們送到內(nèi)核。不僅如此,Shell有自己的編程語言用于對(duì)命令的編輯,它允許用戶編寫由shell命令組成的程序。Shell編程語言具有普通編程語言的很多特點(diǎn),比如它也有循環(huán)結(jié)構(gòu)和分支控制結(jié)構(gòu)等,用這種編程語言編寫的Shell程序與其他應(yīng)用程序具有同樣的效果
bash 是一個(gè)為GNU計(jì)劃編寫的Unix shell。它的名字是一系列縮寫:Bourne-Again SHell — 這是關(guān)于Bourne shell(sh)的一個(gè)雙關(guān)語(Bourne again / born again)。Bourne shell是一個(gè)早期的重要shell,由史蒂夫·伯恩在1978年前后編寫,并同Version 7 Unix一起發(fā)布。bash則在1987年由布萊恩·??怂箘?chuàng)造。在1990年,Chet Ramey成為了主要的維護(hù)者。
shell將會(huì)是我們?cè)贕NU/linux中經(jīng)常用到的經(jīng)常有到的工具之一,用來操作計(jì)算機(jī)用的。在遷移到linux之前我們可以試用cygwin來進(jìn)行模擬:
Cygwin是許多自由軟件的集合,最初由Cygnus Solutions開發(fā),用于各種版本的Microsoft Windows上,運(yùn)行UNIX類
系統(tǒng)。
GCC(GNU Compiler Collection,GNU編譯器套裝),是一套由GNU開發(fā)的編程語言編譯器。它是一套以GPL及LGPL許可證所發(fā)行的自由軟件,也是GNU計(jì)劃的關(guān)鍵部分,亦是自由的類Unix及蘋果電腦Mac OS X 操作系統(tǒng)的標(biāo)準(zhǔn)編譯器。GCC(特別是其中的C語言編譯器)也常被認(rèn)為是跨平臺(tái)編譯器的事實(shí)標(biāo)準(zhǔn)。
GCC原名為GNU C語言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚鞢語言。GCC很快地?cái)U(kuò)展,變得可處理C++。之后也變得可處理Fortran、Pascal、Objective-C、Java、Ada,以及Go與其他語言。
#include <stdio.h>
main()
{
printf("Hello world\n");
}
~/temp/free> gcc hello.c -o hello
hello.c:2:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^~~~
1 warning generated.
~/temp/free> ./hello
Hello world
同shell一樣,對(duì)于GNU/linux系統(tǒng)而言,GCC的作用也是無可取代的。當(dāng)然如果只是一般用途的話,GCC對(duì)于一般用戶可能沒用,但是在些GNU/Linux系統(tǒng)上,我們可能就需要自己編譯源碼成二進(jìn)制文件,而沒有軟件包,因而其重要性是不言而喻的。自然的如果我們自己動(dòng)手編譯GNU/Linux操作系統(tǒng)的話,我們會(huì)理解其的重要意義。有興趣的同學(xué)可以試一下:Linux From Scratch (LFS)。
最后,當(dāng)我們構(gòu)成以上的那些之后,我們就需要一個(gè)引導(dǎo)程序,以便使系統(tǒng)啟動(dòng),引導(dǎo)進(jìn)內(nèi)核。
啟動(dòng)程序(bootloader)于電腦或其他計(jì)算機(jī)應(yīng)用上,是指引導(dǎo)操作系統(tǒng)啟動(dòng)的程序。啟動(dòng)程序啟動(dòng)方式與程序視應(yīng)用機(jī)型種類。例如在普通PC上,引導(dǎo)程序通常分為兩部分:第一階段引導(dǎo)程序位于主引導(dǎo)記錄,用于引導(dǎo)位于某個(gè)分區(qū)上的第二階段引導(dǎo)程序,如NTLDR、GNU GRUB等。
BIOS 開機(jī)完成后,bootloader就接手初始化硬件設(shè)備、創(chuàng)建存儲(chǔ)器空間的映射,以便為操作系統(tǒng)內(nèi)核準(zhǔn)備好
正確的軟硬件環(huán)境。
簡(jiǎn)單的bootloader的虛擬匯編碼,如其后的八個(gè)指令:
但是隨著計(jì)算機(jī)操作系統(tǒng)越來越復(fù)雜,位于MBR的空間已經(jīng)放不下引導(dǎo)操作系統(tǒng)的代碼,于是就有了第二階段的引導(dǎo)程序,而MBR中代碼的功能也從直接引導(dǎo)操作系統(tǒng)變成了引導(dǎo)第二階段的引導(dǎo)程序。
通常在一個(gè)GNU/Linux系統(tǒng)中選用GNUGRUB做為引導(dǎo)程序,例如Ubuntu就是用GRUB2。
GNU GRUB(簡(jiǎn)稱“GRUB”)是一個(gè)來自GNU項(xiàng)目的啟動(dòng)引導(dǎo)程序。GRUB是多啟動(dòng)規(guī)范的實(shí)現(xiàn),它允許用戶可以在計(jì)算機(jī)內(nèi)同時(shí)擁有多個(gè)操作系統(tǒng),并在計(jì)算機(jī)啟動(dòng)時(shí)選擇希望運(yùn)行的操作系統(tǒng)。GRUB可用于選擇操作系統(tǒng)分區(qū)上的不同內(nèi)核,也可用于向這些內(nèi)核傳遞啟動(dòng)參數(shù)。
GNU GRUB的前身為Grand Unified Bootloader。它主要用于類Unix系統(tǒng);同大多Linux發(fā)行版一樣,GNU系統(tǒng)也采用GNU GRUB作為它的啟動(dòng)器。Solaris從10 1/06版開始在x86系統(tǒng)上也采用GNU GRUB作為啟動(dòng)器。
以上也就構(gòu)成了一個(gè)簡(jiǎn)單的操作系統(tǒng)。
我們以一次編譯開始我們的Linux學(xué)習(xí)之旅。
或者你也可以在Windows上安裝Cygwin。
1.下載這個(gè)軟件的源碼包
wget http://nginx.org/download/nginx-1.7.4.tar.gz
wget是一個(gè)用于下載的軟件,當(dāng)然你也可以用軟件,只是用wget似乎會(huì)比圖形界面快哦。
2.解壓軟件包
tar -vf nginx-1.7.4.tar.gz
-vf的意思是Extract,也就是解壓,而tar則是這個(gè)解壓軟件的名字??瓷先ニ坪醣萕inRAR來得復(fù)制得多,但是你可以計(jì)時(shí)一下,從下載到解壓完,和你用鼠標(biāo)比哪個(gè)比較快。
3.到nginx目錄下
這里需要分兩部進(jìn)行
(1)列出所有文件
ls -al
drwxr-xr-x 15 fdhuang staff 510B Sep 2 13:44 nginx-1.7.4
-rw-r--r-- 1 fdhuang staff 798K Aug 5 21:55 nginx-1.7.4.tar.gz
(2)到nginx-1.7.4目錄
cd nginx-1.7.4
4.配置nginx
一次簡(jiǎn)單的配置如下
./configure
當(dāng)你熟練以后,你可能和我一樣用下面的配置(注意
:用下面的代碼會(huì)出錯(cuò)。)
./configure --user=www --group=www --add-module=../ngx_pagespeed-1.8.3.4-beta --add-module=../ngx_cache_purge --prefix=/usr/local/nginx --with-pcre --with-http_spdy_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-ipv6
過程中可能會(huì)提示你其中出了多少錯(cuò)誤,而這時(shí)你便可以很愉快地去用搜索引擎搜索他們。
5.make
這里就會(huì)用到GCC等等。
make
6.運(yùn)行
如果運(yùn)行順利的話,應(yīng)該可以直接
./objs/nginx
1.如果沒有wget,make,gcc等命令的時(shí)候可以用類似于下面的方法安裝,
sudo apt-get install gcc,make,wget
2.正常情況下一個(gè)開源項(xiàng)目都會(huì)有一個(gè)README,會(huì)告訴你應(yīng)該如何去做。
GNU/Linux最方便的東西莫過于包管理了。
引自O(shè)penSUSE官網(wǎng)的說明及圖片^pm
Linux 發(fā)行版無非就是一堆軟件包 (package) 形式的應(yīng)用程序加上整體地管理這些應(yīng)用程序的工具。通常這些 Linux 發(fā)行版,包括 openSUSE,都是由成千上萬不同的軟件包構(gòu)成的。
軟件包: 軟件包不止是一個(gè)文件,內(nèi)含構(gòu)成軟件的所有文件,包括程序本身、共享庫、開發(fā)包以及使用說明等。
元數(shù)據(jù) (metadata) 包含于軟件包之中,包含軟件正常運(yùn)行所需要的一些信息。軟件包安裝之后,其元數(shù)據(jù)就存儲(chǔ)于本地的軟件包數(shù)據(jù)庫之中,以用于軟件包檢索。
Linux 下的軟件包通常是以下三種格式:
所以這就需要能自動(dòng)解決依賴關(guān)系的軟件包管理器。軟件包管理系統(tǒng)就是一個(gè)工具集,為系統(tǒng)提供一個(gè)統(tǒng)一的安裝、升級(jí)、刪除軟件的方式。
在余下的章節(jié)中,我們需要去部署,需要去使用Ubuntu。如果在Windows下可以使用LAMP,但是在這里我們只說Ubuntu。開始之前你需要安裝好Ubuntu,無論是在虛擬機(jī),還是在真機(jī)安裝,或者是Docker。
apt-get
是debian,ubuntu發(fā)行版的包管理工具。apt-get update
可以確保我們的軟件包列表是最新的,下面是一個(gè)簡(jiǎn)單的更新過程。
打開Terminal或者Konsole等等之類的終端控制臺(tái)。
root@70cdc7a176a5:/# sudo apt-get update
Ign http://archive.ubuntu.com trusty InRelease
Ign http://archive.ubuntu.com trusty-updates InRelease
Ign http://archive.ubuntu.com trusty-security InRelease
Ign http://archive.ubuntu.com trusty-proposed InRelease
Get:1 http://archive.ubuntu.com trusty Release.gpg [933 B]
Get:2 http://archive.ubuntu.com trusty-updates Release.gpg [933 B]
Get:3 http://archive.ubuntu.com trusty-security Release.gpg [933 B]
Get:4 http://archive.ubuntu.com trusty-proposed Release.gpg [933 B]
Get:5 http://archive.ubuntu.com trusty Release [58.5 kB]
Get:6 http://archive.ubuntu.com trusty-updates Release [62.0 kB]
Get:7 http://archive.ubuntu.com trusty-security Release [62.0 kB]
Get:8 http://archive.ubuntu.com trusty-proposed Release [209 kB]
Get:9 http://archive.ubuntu.com trusty/main Sources [1335 kB]
Get:10 http://archive.ubuntu.com trusty/restricted Sources [5335 B]
Get:11 http://archive.ubuntu.com trusty/universe Sources [7926 kB]
Get:12 http://archive.ubuntu.com trusty/main amd64 Packages [1743 kB]
Get:13 http://archive.ubuntu.com trusty/restricted amd64 Packages [16.0 kB]
Get:14 http://archive.ubuntu.com trusty/universe amd64 Packages [7589 kB]
64% [14 Packages 664 kB/7589 kB 9%] 58.3 kB/s 1min 58s
更新完應(yīng)該會(huì)顯示:
Fetched 20.5 MB in 5min 22s (63.6 kB/s)
Reading package lists... Done
安裝命令
sudo apt-get install mysql-server php5-mysql
過程:
root@70cdc7a176a5:/# sudo apt-get install mysql-server php5-mysql
Reading package lists... 0%
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18
libterm-readkey-perl libwrap0 lsof mysql-client-5.5 mysql-client-core-5.5
mysql-common mysql-server-5.5 mysql-server-core-5.5 php5-common php5-json
psmisc tcpd
Suggested packages:
libclone-perl libmldbm-perl libnet-daemon-perl libplrpc-perl
libsql-statement-perl libipc-sharedcache-perl tinyca mailx php5-user-cache
The following NEW packages will be installed:
libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18
libterm-readkey-perl libwrap0 lsof mysql-client-5.5 mysql-client-core-5.5
mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 php5-common
php5-json php5-mysql psmisc tcpd
0 upgraded, 19 newly installed, 0 to remove and 12 not upgraded.
Need to get 9982 kB of archives.
After this operation, 99.1 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main libaio1 amd64 0.3.109-4 [6364 B]
Get:2 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-common all 5.5.40-0ubuntu0.14.04.1 [14.1 kB]
Get:3 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libmysqlclient18 amd64 5.5.40-0ubuntu0.14.04.1 [598 kB]
Get:4 http://archive.ubuntu.com/ubuntu/ trusty/main libwrap0 amd64 7.6.q-25 [46.2 kB]
Get:5 http://archive.ubuntu.com/ubuntu/ trusty/main libdbi-perl amd64 1.630-1 [879 kB]
Get:6 http://archive.ubuntu.com/ubuntu/ trusty/main libdbd-mysql-perl amd64 4.025-1 [99.3 kB]
Get:7 http://archive.ubuntu.com/ubuntu/ trusty/main libterm-readkey-perl amd64 2.31-1 [27.4 kB]
Get:8 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-client-core-5.5 amd64 5.5.40-0ubuntu0.14.04.1 [703 kB]
Get:9 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-client-5.5 amd64 5.5.40-0ubuntu0.14.04.1 [1466 kB]
Get:10 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-server-core-5.5 amd64 5.5.40-0ubuntu0.14.04.1 [3215 kB]
47% [10 mysql-server-core-5.5 850 kB/3215 kB 26%] 79.9 kB/s 1min 6s
在安裝的過程中會(huì)要求你輸入數(shù)據(jù)庫密碼。(默認(rèn)為空)
echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/nginx-stable.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
sudo apt-get update
sudo apt-get install nginx
啟動(dòng)Nginx Server
sudo service nginx start
sudo apt-get install php5-fpm
安裝過程
root@70cdc7a176a5:/# sudo apt-get install php5-fpm
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libsystemd-daemon0
Suggested packages:
php-pear
The following NEW packages will be installed:
libsystemd-daemon0 php5-fpm
0 upgraded, 2 newly installed, 0 to remove and 12 not upgraded.
Need to get 2201 kB of archives.
After this operation, 9326 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu/ trusty-proposed/main libsystemd-daemon0 amd64 204-5ubuntu20.8 [9608 B]
Get:2 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe php5-fpm amd64 5.5.9+dfsg-1ubuntu4.5 [2191 kB]
Fetched 2201 kB in 1min 5s (33.6 kB/s)
Selecting previously unselected package libsystemd-daemon0:amd64.
(Reading database ... 13105 files and directories currently installed.)
Preparing to unpack .../libsystemd-daemon0_204-5ubuntu20.8_amd64.deb ...
Unpacking libsystemd-daemon0:amd64 (204-5ubuntu20.8) ...
Selecting previously unselected package php5-fpm.
Preparing to unpack .../php5-fpm_5.5.9+dfsg-1ubuntu4.5_amd64.deb ...
Unpacking php5-fpm (5.5.9+dfsg-1ubuntu4.5) ...
Processing triggers for ureadahead (0.100.0-16) ...
Setting up libsystemd-daemon0:amd64 (204-5ubuntu20.8) ...
Setting up php5-fpm (5.5.9+dfsg-1ubuntu4.5) ...
Creating config file /etc/php5/fpm/php.ini with new version
php5_invoke: Enable module pdo for fpm SAPI
php5_invoke: Enable module pdo_mysql for fpm SAPI
php5_invoke: Enable module opcache for fpm SAPI
php5_invoke: Enable module json for fpm SAPI
php5_invoke: Enable module mysql for fpm SAPI
php5_invoke: Enable module mysqli for fpm SAPI
invoke-rc.d: policy-rc.d denied execution of start.
Processing triggers for libc-bin (2.19-0ubuntu6.3) ...
Processing triggers for ureadahead (0.100.0-16) ...
更多建議: