應(yīng)用程序(sh、vi、OpenOffice.org等)
復(fù)雜庫(KDE、glib等) 簡單庫(opendbm、sin等)
C庫(open、fopen、socket、exec、calloc等)
我們可以發(fā)現(xiàn),由linux內(nèi)核+shell可以構(gòu)成一個操作系統(tǒng),而linux本身只是個內(nèi)核,也就是圖中的內(nèi)核模式,負責控制系統(tǒng)的這些部分。也就是我們可以發(fā)現(xiàn),Linux內(nèi)核構(gòu)成了一個操作系統(tǒng)除用戶界面以外的部分,而shell就是這最后的用戶界面。
而linux內(nèi)核以外的部分就是由GNU計劃構(gòu)成的。
Shell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進行交互操作的一種接口。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行。
實際上Shell是一個命令解釋器,它解釋由用戶輸入的命令并且把它們送到內(nèi)核。不僅如此,Shell有自己的編程語言用于對命令的編輯,它允許用戶編寫由shell命令組成的程序。Shell編程語言具有普通編程語言的很多特點,比如它也有循環(huán)結(jié)構(gòu)和分支控制結(jié)構(gòu)等,用這種編程語言編寫的Shell程序與其他應(yīng)用程序具有同樣的效果
bash 是一個為GNU計劃編寫的Unix shell。它的名字是一系列縮寫:Bourne-Again SHell — 這是關(guān)于Bourne shell(sh)的一個雙關(guān)語(Bourne again / born again)。Bourne shell是一個早期的重要shell,由史蒂夫·伯恩在1978年前后編寫,并同Version 7 Unix一起發(fā)布。bash則在1987年由布萊恩·福克斯創(chuàng)造。在1990年,Chet Ramey成為了主要的維護者。
shell將會是我們在GNU/linux中經(jīng)常用到的經(jīng)常有到的工具之一,用來操作計算機用的。在遷移到linux之前我們可以試用cygwin來進行模擬:
Cygwin是許多自由軟件的集合,最初由Cygnus Solutions開發(fā),用于各種版本的Microsoft Windows上,運行UNIX類
系統(tǒng)。
GCC(GNU Compiler Collection,GNU編譯器套裝),是一套由GNU開發(fā)的編程語言編譯器。它是一套以GPL及LGPL許可證所發(fā)行的自由軟件,也是GNU計劃的關(guān)鍵部分,亦是自由的類Unix及蘋果電腦Mac OS X 操作系統(tǒng)的標準編譯器。GCC(特別是其中的C語言編譯器)也常被認為是跨平臺編譯器的事實標準。
GCC原名為GNU C語言編譯器(GNU C Compiler),因為它原本只能處理C語言。GCC很快地擴展,變得可處理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一樣,對于GNU/linux系統(tǒng)而言,GCC的作用也是無可取代的。當然如果只是一般用途的話,GCC對于一般用戶可能沒用,但是在些GNU/Linux系統(tǒng)上,我們可能就需要自己編譯源碼成二進制文件,而沒有軟件包,因而其重要性是不言而喻的。自然的如果我們自己動手編譯GNU/Linux操作系統(tǒng)的話,我們會理解其的重要意義。有興趣的同學可以試一下:Linux From Scratch (LFS)。
最后,當我們構(gòu)成以上的那些之后,我們就需要一個引導程序,以便使系統(tǒng)啟動,引導進內(nèi)核。
啟動程序(bootloader)于電腦或其他計算機應(yīng)用上,是指引導操作系統(tǒng)啟動的程序。啟動程序啟動方式與程序視應(yīng)用機型種類。例如在普通PC上,引導程序通常分為兩部分:第一階段引導程序位于主引導記錄,用于引導位于某個分區(qū)上的第二階段引導程序,如NTLDR、GNU GRUB等。
BIOS 開機完成后,bootloader就接手初始化硬件設(shè)備、創(chuàng)建存儲器空間的映射,以便為操作系統(tǒng)內(nèi)核準備好
正確的軟硬件環(huán)境。
簡單的bootloader的虛擬匯編碼,如其后的八個指令:
但是隨著計算機操作系統(tǒng)越來越復(fù)雜,位于MBR的空間已經(jīng)放不下引導操作系統(tǒng)的代碼,于是就有了第二階段的引導程序,而MBR中代碼的功能也從直接引導操作系統(tǒng)變成了引導第二階段的引導程序。
通常在一個GNU/Linux系統(tǒng)中選用GNUGRUB做為引導程序,例如Ubuntu就是用GRUB2。
GNU GRUB(簡稱“GRUB”)是一個來自GNU項目的啟動引導程序。GRUB是多啟動規(guī)范的實現(xiàn),它允許用戶可以在計算機內(nèi)同時擁有多個操作系統(tǒng),并在計算機啟動時選擇希望運行的操作系統(tǒng)。GRUB可用于選擇操作系統(tǒng)分區(qū)上的不同內(nèi)核,也可用于向這些內(nèi)核傳遞啟動參數(shù)。
GNU GRUB的前身為Grand Unified Bootloader。它主要用于類Unix系統(tǒng);同大多Linux發(fā)行版一樣,GNU系統(tǒng)也采用GNU GRUB作為它的啟動器。Solaris從10 1/06版開始在x86系統(tǒng)上也采用GNU GRUB作為啟動器。
以上也就構(gòu)成了一個簡單的操作系統(tǒng)。
我們以一次編譯開始我們的Linux學習之旅。
或者你也可以在Windows上安裝Cygwin。
1.下載這個軟件的源碼包
wget http://nginx.org/download/nginx-1.7.4.tar.gz
wget是一個用于下載的軟件,當然你也可以用軟件,只是用wget似乎會比圖形界面快哦。
2.解壓軟件包
tar -vf nginx-1.7.4.tar.gz
-vf的意思是Extract,也就是解壓,而tar則是這個解壓軟件的名字??瓷先ニ坪醣萕inRAR來得復(fù)制得多,但是你可以計時一下,從下載到解壓完,和你用鼠標比哪個比較快。
3.到nginx目錄下
這里需要分兩部進行
(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
一次簡單的配置如下
./configure
當你熟練以后,你可能和我一樣用下面的配置(注意
:用下面的代碼會出錯。)
./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
過程中可能會提示你其中出了多少錯誤,而這時你便可以很愉快地去用搜索引擎搜索他們。
5.make
這里就會用到GCC等等。
make
6.運行
如果運行順利的話,應(yīng)該可以直接
./objs/nginx
1.如果沒有wget,make,gcc等命令的時候可以用類似于下面的方法安裝,
sudo apt-get install gcc,make,wget
2.正常情況下一個開源項目都會有一個README,會告訴你應(yīng)該如何去做。
GNU/Linux最方便的東西莫過于包管理了。
引自O(shè)penSUSE官網(wǎng)的說明及圖片^pm
Linux 發(fā)行版無非就是一堆軟件包 (package) 形式的應(yīng)用程序加上整體地管理這些應(yīng)用程序的工具。通常這些 Linux 發(fā)行版,包括 openSUSE,都是由成千上萬不同的軟件包構(gòu)成的。
軟件包: 軟件包不止是一個文件,內(nèi)含構(gòu)成軟件的所有文件,包括程序本身、共享庫、開發(fā)包以及使用說明等。
元數(shù)據(jù) (metadata) 包含于軟件包之中,包含軟件正常運行所需要的一些信息。軟件包安裝之后,其元數(shù)據(jù)就存儲于本地的軟件包數(shù)據(jù)庫之中,以用于軟件包檢索。
Linux 下的軟件包通常是以下三種格式:
所以這就需要能自動解決依賴關(guān)系的軟件包管理器。軟件包管理系統(tǒng)就是一個工具集,為系統(tǒng)提供一個統(tǒng)一的安裝、升級、刪除軟件的方式。
在余下的章節(jié)中,我們需要去部署,需要去使用Ubuntu。如果在Windows下可以使用LAMP,但是在這里我們只說Ubuntu。開始之前你需要安裝好Ubuntu,無論是在虛擬機,還是在真機安裝,或者是Docker。
apt-get
是debian,ubuntu發(fā)行版的包管理工具。apt-get update
可以確保我們的軟件包列表是最新的,下面是一個簡單的更新過程。
打開Terminal或者Konsole等等之類的終端控制臺。
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)該會顯示:
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
在安裝的過程中會要求你輸入數(shù)據(jù)庫密碼。(默認為空)
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
啟動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) ...
更多建議: