第1章 Linux基礎
在大數據從理論到實(shí)際的落地過(guò)程中,Linux早已經(jīng)超出了操作系統的范疇,它在今天甚至被稱(chēng)為大數據運行的平臺。對于學(xué)過(guò)Linux課程的院校,強烈建議把本章復習一下,因為在后續學(xué)習過(guò)程中大數據的軟件、框架全都基于Linux平臺,本章的知識點(diǎn)要求為:
?掌握Linux文件管理常用的命令
?掌握Linux的權限管理常用的命令
?掌握Linux的軟件包管理常用的命令
?掌握Linux的網(wǎng)絡(luò )管理常用的命令
?掌握Linux的進(jìn)程管理常用的命令
?掌握Linux的進(jìn)程管理常用的命令
?熟悉Linux的shell腳本編程
?熟悉Linux環(huán)境下JDK、Tomcat、MySQL軟件的安裝
一、Linux概述
Linux是一套免費使用和自由傳播的,類(lèi)似Unix的操作系統,是一個(gè)基于POSIX和Unix的多用戶(hù)、多任務(wù)、支持多線(xiàn)程和多CPU的操作系統。它能運行主要的Unix工具軟件、應用程序和網(wǎng)絡(luò )協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò )為核心的設計思想,是一個(gè)性能穩定的多用戶(hù)網(wǎng)絡(luò )操作系統。
現在很多企業(yè)都將大數據、云計算平臺部署在Linux操作系統上,所以學(xué)習和使用Linux現在變得意義非常的重大。
目前市面上較知名的發(fā)行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
下面主要介紹下CentOS系列的Linux和Ubuntu系列的Linux,這兩款Linux在學(xué)習和項目實(shí)戰中也是用的比較多的:
1、CentOS操作系統
CentOS 是一個(gè)基于Red Hat Linux 提供的可自由使用源代碼的企業(yè)級Linux發(fā)行版本。每個(gè)版本的 CentOS都會(huì )通過(guò)安全更新方式獲得十年的支持。新版本的 CentOS 大約每?jì)赡臧l(fā)行一次,而每個(gè)版本的 CentOS 會(huì )定期更新一次,以便支持新的硬件,這樣可以建立一個(gè)安全、低維護、穩定、高預測性、高重復性的 Linux 環(huán)境。CentOS是Community Enterprise Operating System的縮寫(xiě)。
CentOS 是RHEL(Red Hat Enterprise Linux)源代碼再編譯的產(chǎn)物,相對于其他 Linux 發(fā)行版,其穩定性值得信賴(lài)。
CentOS 加入紅帽后不變的是:
(1) CentOS 繼續免費
(2)保持贊助內容驅動(dòng)的網(wǎng)絡(luò )中心不變
(3)Bug、Issue 和緊急事件處理策略不變
(4) Red Hat Enterprise Linux 和 CentOS 防火墻也依然存在
變化的是:
(1)我們是為紅帽工作,不是為 RHEL
(2)紅帽提供構建系統和初始內容分發(fā)資源的贊助
(3) 一些開(kāi)發(fā)的資源包括源碼的獲取將更加容易
(4)避免了原來(lái)和紅帽上一些法律的問(wèn)題
現在最新版本為 CentOS 7.6,上個(gè)版本是7.5。上游RHEL 7主要將內核更新至3.10.0;支持Linux容器(Docker),Open VMware Tools及3D圖像能即裝即用,Open JDK7作為缺省JDK,ext4及XFS的LVM快照,轉用systemd、firewalld及GRUB2,XFS作為缺省文件系統,內核空間內的iSCSI及FCoE,支持PTPv2,支持40G網(wǎng)卡等 。
2、Ubuntu操作系統
Ubuntu(又稱(chēng)烏班圖)是一個(gè)以桌面應用為主的開(kāi)源GNU/Linux操作系統,Ubuntu 是基于Debian GNU/Linux,支持x86、amd64(即x64)、ARM和ppc架構,由全球化的專(zhuān)業(yè)開(kāi)發(fā)團隊(Canonical Ltd)打造的。
Ubuntu基于Debian發(fā)行版和GNOME桌面環(huán)境,而從11.04版起,Ubuntu發(fā)行版放棄了Gnome桌面環(huán)境,改為Unity,與Debian的不同在于它每6個(gè)月會(huì )發(fā)布一個(gè)新版本。Ubuntu的目標在于為一般用戶(hù)提供一個(gè)最新的、同時(shí)又相當穩定的主要由自由軟件構建而成的操作系統。Ubuntu具有龐大的社區力量,用戶(hù)可以方便地從社區獲得幫助。Ubuntu對GNU/Linux的普及特別是桌面普及作出了巨大貢獻,由此使更多人共享開(kāi)源的成果與精彩。
ubuntu基于linux的免費開(kāi)源桌面PC操作系統,十分契合英特爾的超極本定位,支持x86、64位和ppc架構。
二、Linux文件系統
操作系統是管理計算機硬件和軟件資源的系統軟件,是硬件與用戶(hù)之間溝通的橋梁。為了使計算機系統能協(xié)調、高效和可靠地進(jìn)行工作,同時(shí)也為了給用戶(hù)一種方便友好地使用計算機的環(huán)境,和Windows操作系統一樣典型的操作系統應該具有:文件管理的功能、網(wǎng)絡(luò )管理的功能、 進(jìn)程管理、內存管理的功能等等。
為了使用這些管理功能,操作系統通常提供給我們兩種人機交互方式:
(1)圖形界面
例如Windows操作系統,優(yōu)點(diǎn)是人性化程度高,缺點(diǎn)也非常明顯:需要開(kāi)發(fā)重量級別、大量級別的人際交互的軟件系統,耗費大量的系統資源,特別可靠性、穩定性、安全性堪憂(yōu),對于專(zhuān)業(yè)技術(shù)人員非常的不適合,對于普通用戶(hù)非常的適合。
(2)命令行終端
我們Linux大多數采取這種方式,和Windows剛好相反。缺點(diǎn)是人性化程度低,但是優(yōu)點(diǎn)點(diǎn)也非常明顯:需要開(kāi)發(fā)輕量級別、少量級別的人際交互的軟件系統,對系統資源消耗極小,特別可靠性、穩定性、安全性非常高,甚至常年不宕機,對于專(zhuān)業(yè)技術(shù)人員非常的適合,對于普通用戶(hù)不適合。
綜上所述,我們主要講解基于命令行終端的Linux操作系統管理的常用命令,至于想深入了解Linux操作系統其它命令請大家查閱更多資料,這里所列舉的在實(shí)際學(xué)習和項目實(shí)戰中基本夠用。
(一)Linux的文件管理
文件管理系統是操作系統及其它大數據系統(例如:hadoop分布式文件系統HDFS)的重要功能,Linux文件系統的目錄結構如下:
文件系統中的根目錄符號為:'/',位于Linux文件系統目錄結構的頂層,一般根目錄下只存放目錄不存放文件。下面對根目錄下的子目錄逐一介紹:
(1)'/bin'和'/usr/bin目錄
該目錄為命令文件目錄,也稱(chēng)為二進(jìn)制目錄。包含了供系統管理員及普通用戶(hù)使用的重要的linux命令和二進(jìn)制(可執行)文件,包含shell解釋器等。
(2)'/boot'目錄
該目錄中存放系統的內核文件和引導裝載程序文件。
(3)'/dev'目錄
設備(device)文件目錄,存放linux系統下的設備文件,訪(fǎng)問(wèn)該目錄下某個(gè)文件,相當于訪(fǎng)問(wèn)某個(gè)設備,存放連接到計算機上的設備(終端、磁盤(pán)驅動(dòng)器、光驅及網(wǎng)卡等)的對應文件,包括字符設備和塊設備等,常用的是掛載光驅mount /dev/cdrom/mnt。
(4)'/etc'目錄
系統配置文件存放的目錄,該目錄存放系統的大部分配置文件和子目錄,不建議在此目錄下存放可執行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系統有關(guān))、/etc/sysconfig(與網(wǎng)絡(luò )有關(guān))、/etc/xinetd.d修改配置文件之前記得備份。該目錄下的文件由系統管理員來(lái)使用,普通用戶(hù)對大部分文件有只讀權限。
(5)'/home'目錄
系統默認的用戶(hù)宿主目錄,新增用戶(hù)賬號時(shí),用戶(hù)的宿主目錄都存放在此目錄下,'~'表示當前用戶(hù)的宿主目錄,'~lily'表示用戶(hù)lily的宿主目錄。
(6)'/root'目錄
系統管理員root的宿主目錄,系統第一個(gè)啟動(dòng)的分區為/,所以最好將/root和/放置在一個(gè)分區下。
(7)'/sbin、/usr/sbin、/usr/local/sbin'目錄
放置系統管理員使用的可執行命令,如fdisk、shutdown、mount等。與/bin不同的是,這幾個(gè)目錄是給系統管理員root使用的命令,一般用戶(hù)只能查看而不能設置和使用。
(8)'/tmp'目錄
一般用戶(hù)或正在執行的程序臨時(shí)存放文件的目錄,任何人都可以訪(fǎng)問(wèn),重要數據不可放置在此目錄下。一些命令和應用程序會(huì )用的到這個(gè)目錄,該目錄下的所有文件會(huì )被定時(shí)刪除,以避免臨時(shí)文件占滿(mǎn)整個(gè)磁盤(pán)。
(9)'/usr'目錄
應用程序存放目錄,/usr/bin 存放應用程序, /usr/share 存放共享數據,/usr/lib 存放不能直接運行的,卻是許多程序運行所必需的一些函數庫文件,/usr/local 存放軟件升級包,/usr/share/doc 系統說(shuō)明文件存放目錄。
(9)'/var'目錄
放置系統執行過(guò)程中經(jīng)常變化的文件,如隨時(shí)更改的日志文件 /var/log。/var/log/message: 所有的登錄文件存放目錄。/var/spool/mail: 郵件存放的目錄。 /var/run: 程序或服務(wù)啟動(dòng)后。建議單獨分區,設置較大的磁盤(pán)空間。
(10)'/lib、/usr/lib、/usr/local/lib'目錄
系統使用的函數庫的目錄,程序在執行過(guò)程中,需要調用一些額外的參數時(shí)需要函數庫的協(xié)助,該目錄下存放了各種編程語(yǔ)言庫。典型的linux系統包含了C、C++和FORTRAN語(yǔ)言的庫文件。/lib目錄下的庫映像文件可以用來(lái)啟動(dòng)系統并執行一些命令,目錄/lib/modules包含了可加載的內核模塊,/lib目錄存放了所有重要的庫文件,其他的庫文件則大部分存放在/usr/lib目錄下。
其它的目錄簡(jiǎn)介:
(1)'/lost+fount'目錄
在EXT2或EXT3文件系統中,當系統意外崩潰或機器意外關(guān)機,產(chǎn)生的一些文件碎片放在這里。在系統啟動(dòng)的過(guò)程中fsck工具會(huì )檢查這里,并修復已經(jīng)損壞的文件系統。有時(shí)系統發(fā)生問(wèn)題,有很多的文件被移到這個(gè)目錄中,可能會(huì )用手工的方法來(lái)修復,或者移動(dòng)文件到運來(lái)的位置上。
(2)'/mnt,/media'目錄
mnt目錄主要用來(lái)臨時(shí)掛載文件系統,為某些設備提供默認掛載點(diǎn),如floppy,cdrom。這樣當掛載了一個(gè)設備如光驅時(shí),就可以通過(guò)訪(fǎng)問(wèn)目錄/mnt/cdrom下的文件來(lái)訪(fǎng)問(wèn)相應的光驅上的文件了。
(3)'/opt'目錄
給主機額外安裝軟件所擺放的目錄。如:FC4使用的Fedora 社群開(kāi)發(fā)軟件,如果想要自行安裝新的KDE 桌面軟件,可以將該軟件安裝在該目錄下。以前的 Linux 系統中,習慣放置在 /usr/local 目錄下。
三、Linux操作系統管理的常用命令
Linux的常用命令有文件管理、權限管理、軟件包管理、網(wǎng)絡(luò )管理、進(jìn)程管理、進(jìn)程管理等命令。這里只是列舉項目實(shí)戰使用頻度最高的,其它的命令及其參數請大家查閱幫助或者有關(guān)參考書(shū)。
(一)文件管理命令
1、文件管理
(1)ls命令
ls命令的功能是顯示指定目錄下的文件目錄清單。該命令常用格式及其參數說(shuō)明如下:
ls -a 參數-a的功能:顯示隱含文件
ls -l 以長(cháng)格式列表輸出指定目錄中的文件清單
ls -R 遞歸顯示
例如:
[root@localhost dev]# ls -l
crw-rw----. 1 root video 10, 175 Oct 10 22:18 agpgart
drwxr-xr-x. 2 root root 620 Oct 10 22:18 block
lrwxrwxrwx. 1 root root 3 Oct 10 22:18 cdrw -> sr0
lrwxrwxrwx. 1 root root 13 Oct 10 22:18 fd -> /proc/self/fd
srw-rw-rw-. 1 root root 0 Oct 10 22:18 log
brw-rw----. 1 root disk 7, 0 Oct 10 22:18 loop0
下面對顯示的文件進(jìn)行說(shuō)明:
文件基本信息:
文件類(lèi)型 文件權限 文件個(gè)數 屬主 屬組 大小 日期 時(shí)間 文件名
d rwxrwxr-x 2 lily group1 2048 Aug 17 09:10 file
Linux文件有三種權限,即r讀權限、w寫(xiě)權限和x執行權限
屬主 屬組 其他用戶(hù)
rwx rwx r-x
文件的類(lèi)型:
d :表示目錄文件,在Linux中目錄也是文件,不僅如此,實(shí)際上在Linux中任何設備也可以被當作文件處理。
l :表示符號連接文件
b :表示塊設備文件。例如硬盤(pán)的設備文件/dev/hda,其中字母a表示 第一塊,h表示IDE類(lèi)型的硬盤(pán),SCSI類(lèi)型的硬盤(pán)用s表示; 分區也有相對應的設備文件,如/dev/sdb3,表示第2塊SCSI硬盤(pán)上的第3個(gè)分區。
c :表示字符設備文件,如/dev/tty1。
p :表示管道文件。
s :表示套接字文件
(2)cd命令
Cd命令的功能為改變文件的目錄,例如:
(3)pwd命令
pwd的功能為顯示當前目錄,例如:
(4)mkdir命令
mkdir的功能為在當前目錄下創(chuàng )建目錄,其中參數p為遞歸創(chuàng )建目錄。
示例-1:創(chuàng )建d1文件夾

示例-2:遞歸創(chuàng )建文件夾
在'mkdir -p a/b/c'命令 參數-p功能是如果要創(chuàng )建的目錄的父目錄不存在,則先創(chuàng )建其父目錄,再創(chuàng )建該目錄,操作演示如下:

(5)cp命令
語(yǔ)法:
cp 源文件 目標文件
-f:強制執行
-i:若目標文件已經(jīng)存在,在覆蓋時(shí)先詢(xún)問(wèn)操作是否進(jìn)行
-r:遞歸復制,用于目錄的復制行為
示例-1 :將/usr/local/dir1下所有java為擴展名的文件復制到/usr/local/dir2
cp /usr/local/dir1/*.java /usr/local/dir2
示例-2:將/usr/local/dir1下所有內容復制到/usr/local/dir2
cp /usr/local/dir1/* /usr/local/dir2
(6)mv命令
功能:如果mydir1存在且是個(gè)目錄,則將文件myfile移動(dòng)到目錄mydir1中
示例1:將文件移動(dòng)到目錄中
mv myfile mydir1
功能:將文件(或目錄)myfile改名為myfile2
示例2:文件改名
mv myfile myfile2
(7)rm命令
-r:是遞歸的意思,即可以刪除非空目錄
-f:是強制的意思
示例1:
rm demo.java
示例2:
rm -rf /usr/local/dir1/*
(8)cat命令
功能:顯示文件內容
示例-1:顯示指定文件myfile的內容
cat myfile
(9)more命令
功能: 分屏顯示指定文件httpd.conf的內容
示例-1:
more /etc/httpd/conf/httpd.conf
(10)head命令
功能:默認顯示指定文件的頭10行的內容。使用參數-n設置顯示指定行數
示例-1:
head /etc/httpd/conf/httpd.conf
示例-2:
本例會(huì )顯示文件的頭12行的內容
head -n 12 /etc/httpd/conf/httpd.conf
(二)Linux的vim編輯器
基本上vi可以分為三種狀態(tài),分別是命令模式、插入模式和底行模式。
1、命令模式
用戶(hù)剛剛啟動(dòng) vi/vim,便進(jìn)入了命令模式。此狀態(tài)下敲擊鍵盤(pán)動(dòng)作會(huì )被Vim識別為命令,而非輸入字符。比如我們此時(shí)按下i,并不會(huì )輸入一個(gè)字符,i被當作了一個(gè)命令。以下是常用的幾個(gè)命令:
(1)i 切換到輸入模式,以輸入字符。
(2)x 刪除當前光標所在處的字符。
(3): 切換到底線(xiàn)命令模式,以在最底一行輸入命令
2、插入模式
在命令模式下按下i就進(jìn)入了輸入模式
3、底行模式
在命令模式下按下:(英文冒號)就進(jìn)入了底線(xiàn)命令模式,除冒號外還有:
(1)q 退出程序
(2)w 保存文件
如下圖所示:

示例-1
編輯個(gè)hello文件,操作如下所示:
步驟1:輸入vim hello命令,這時(shí)候默認為命令模式

步驟2:按'i'鍵,轉換為插入模式

步驟3:輸入內容

步驟4:編輯完成后,按'Esc'鍵進(jìn)入命令模式
步驟5:按':wq'保存并退出

步驟6:查看hello的內容

4、vim的刪除功能
(1)dd
刪除光標所在行
5、復制和粘貼
yy 復制光標所在行
p 粘貼輸出
刪除、復制和粘貼總結如下表所示:

5、光標、快捷鍵等操作

6、保存文件的操作

7、查找功能

8、撤銷(xiāo)功能

(三)Linux的權限管理
Linux權限管理常用的命令為chmod權限操作命令,其常用方式如下
(1)chmod字母方式
u--針對屬主
g--針對屬組
o--針對其他用戶(hù)
a--針對所有用戶(hù)
= 表示賦予(設置)指定權限,要注意它會(huì )覆蓋原權限
+ 表示在原有權限的基礎上增加指定權限
- 表示在原有權限的基礎上去掉指定權限
r、w、x三種權限,既可以單獨使用也可以組合使用
示例1: chmod u+x host.conf
功能:為文件host.conf的屬主增加執行權限
示例2: chmod g-w,o=x host.conf
功能:將文件host.conf的屬組去掉寫(xiě)權限,同時(shí)將其他用戶(hù)設置為只有執行權限,而文件屬主的權限不變
(2)chmod:數字方式
r-----4 讀權限
w-----2 寫(xiě)權限
x-----1 執行權限
無(wú)-----0 無(wú)權限
例如:
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r-x屬性則4+1=5。
示例-1:


示例-2:
chmod 777 myFile
上述命令等同于chmod a=rwx myFile。
(四)Linux的軟件包管理
在實(shí)際的軟件項目及其大數據項目開(kāi)發(fā)中,tar命令是我們經(jīng)常使用的命令。tar命令是經(jīng)典的備份/還原命令,幾乎所有最新的軟件包都是通過(guò)tar包發(fā)布的。
(1)打包(備份)
參數-c的功能是打包(創(chuàng )建),
參數-v是顯示處理過(guò)程,
參數-f是用來(lái)指定文檔名;
示例:
$ tar -cvf myetc.tar /etc
本例的功能是:將目錄/etc打包為一個(gè)名為myetc.tar的文檔
(2)解壓縮還原
功能:將參數-c換成-x即可實(shí)現還原釋放的功能。
$ tar -zxvf myetc.tar.gz
本例沒(méi)有指明還原的位置,則將會(huì )還原在當前目錄下;如果想指明還原位置可用參數-C,請嘗試如下示例:
$ tar -zxvf myetc.tar.gz -C /tmp
(五)Linux的網(wǎng)絡(luò )管理
Linux操作系統具有強大的網(wǎng)絡(luò )管理功能,除了自身具有很強的網(wǎng)絡(luò )安全性以外,幾乎支持所有主流防火墻等網(wǎng)絡(luò )安全軟件,所有Linux的強大網(wǎng)絡(luò )功能給我們的大數據安全帶來(lái)了極大的方便,在以后的大數據學(xué)習中,我們經(jīng)常使用的網(wǎng)絡(luò )命令如下:
1、 ping命令
ping 將數據包發(fā)向用戶(hù)指定地址。當包被接收,目標機器發(fā)送返回數據包。ping 主要有兩個(gè)作用:
(1) 用來(lái)確認網(wǎng)絡(luò )連接是暢通的。
(2) 用來(lái)查看連接的速度信息。
如果你 ping www.baidu.com 它將返回它的 ip 地址 。你可以通過(guò) ctrl+C 來(lái)停止命令。
2、ifconfig
查看用戶(hù)網(wǎng)絡(luò )配置。它顯示當前網(wǎng)絡(luò )設備配置。對于需要接收或者發(fā)送數據錯誤查找,這個(gè)工具極為好用。
3、netstat命令
netstat命令用于顯示本機上與IP、TCP、UDP和ICMP協(xié)議相關(guān)的統計數據,該命令經(jīng)常被用于檢驗本機各端口的網(wǎng)絡(luò )連接情況。
Netstat常用的命令使用舉例如下:
(1)netstat –a
顯示所有的有效連接信息,包括已建立的連接和監聽(tīng)的連接請求。
(2)netstat -i
顯示系統中所有網(wǎng)絡(luò )接口信息,包括物理網(wǎng)卡、網(wǎng)卡別名和本地回環(huán)網(wǎng)卡。
(3)netstat –n
顯示系統中所有已建立的連接。
(4)netstat –ta
顯示有效的TCP連接。
(5)netstat –ua
顯示有效的UDP連接。
(6)netstat -an | grep 3306
顯示端口號為3306的網(wǎng)絡(luò )連接信息。
(六)Linux的進(jìn)程管理
操作系統的進(jìn)程管理是Linux的重要功能,在我們的大數據項目實(shí)戰中經(jīng)常用到ps、jps、kill命令。
1、ps具體命令解釋如下:
ps a 顯示現行終端機下的所有程序,包括其他用戶(hù)的程序。
ps -A 顯示所有程序。
ps c 列出程序時(shí),顯示每個(gè)程序真正的指令名稱(chēng),而不包含路徑
ps -e 此參數的效果和指定'A'參數相同。
ps e 列出程序時(shí),顯示每個(gè)程序所使用的環(huán)境變量。
ps f 用ASCII字符顯示樹(shù)狀結構,表達程序間的相互關(guān)系。
ps -H 顯示樹(shù)狀結構,表示程序間的相互關(guān)系。
ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。
ps s 采用程序信號的格式顯示程序狀況。
ps S 列出程序時(shí),包括已中斷的子程序資料。
ps -t<終端機編號>
指定終端機編號,并列出屬于該終端機的程序的狀況。
ps u 以用戶(hù)為主的格式來(lái)顯示程序狀況。
ps x 顯示所有程序,不以終端機來(lái)區分。
2、強制殺死進(jìn)程
kill -9 進(jìn)程ID
3、顯示java進(jìn)程jps
Jps是我們以后經(jīng)常用到的命令,前提是你必須安裝jdk,其使用操作如下:

四、Linux的shell腳本編程
Shell 是一個(gè)用 C 語(yǔ)言編寫(xiě)的程序,它是用戶(hù)使用 Linux 的橋梁。Shell 既是一種命令語(yǔ)言,又是一種程序設計語(yǔ)言。
Shell的作用是解釋執行用戶(hù)的命令,用戶(hù)輸入一條命令,Shell就解釋執行一條,這種方式稱(chēng)為交互式(Interactive),Shell還有一種執行命令的方式稱(chēng)為批處理(Batch),用戶(hù)事先寫(xiě)一個(gè)Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條一條地敲命令。Shell腳本和編程語(yǔ)言很相似,也有變量和流程控制語(yǔ)句,但Shell腳本是解釋執行的,不需要編譯,Shell程序從腳本中一行一行讀取并執行這些命令,相當于一個(gè)用戶(hù)把腳本中的命令一行一行敲到Shell提示符下執行
由于歷史原因,UNIX系統上有很多種Shell:
(1) sh(Bourne Shell)
由Steve Bourne開(kāi)發(fā),各種UNIX系統都配有sh。
(2) csh(C Shell)
由Bill Joy開(kāi)發(fā),隨BSD UNIX發(fā)布,它的流程控制語(yǔ)句很像C語(yǔ)言,支持很多Bourne Shell所不支持的功能:作業(yè)控制,命令歷史,命令行編輯。
(3)ksh(Korn Shell)
由David Korn開(kāi)發(fā),向后兼容sh的功能,并且添加了csh引入的新功能,是目前很多UNIX系統標準配置的Shell,在這些系統上/bin/sh往往是指向/bin/ksh的符號鏈接。
(4)tcsh(TENEX C Shell)
是csh的增強版本,引入了命令補全等功能,在FreeBSD、MacOS X等系統上替代了csh。
(5)bash(Bourne Again Shell)
由GNU開(kāi)發(fā)的Shell,主要目標是與POSIX標準保持一致,同時(shí)兼顧對sh的兼容,bash從csh和ksh借鑒了很多功能,是各種Linux發(fā)行版標準配置的Shell,在Linux系統上/bin/sh往往是指向/bin/bash的符號鏈接。雖然如此,bash和sh還是有很多不同的,一方面,bash擴展了一些命令和參數,另一方面,bash并不完全和sh兼容,有些行為并不一致,所以bash需要模擬sh的行為:當我們通過(guò)sh這個(gè)程序名啟動(dòng)bash時(shí),bash可以假裝自己是sh,不認擴展的命令,并且行為與sh保持一致。
(一)最簡(jiǎn)單的shell
1、Shell的結構:
(1)、#!指定執行腳本的shell
(2)、#注釋行
(3)、控制結構
2、創(chuàng )建shell的步驟:
(1)、使用vi編輯器創(chuàng )建以.sh結尾的文件 :vi demo.sh
(2)、編輯相關(guān)shell程序,編寫(xiě)完畢后加執行權限:
chmod u+x demo.sh
(3)、執行程序 ./demo.sh
也可以使用sh demo.sh來(lái)執行
使用 sh -x demo.sh中的x表示腳本的執行過(guò)程
使用 sh -n demo.sh不執行腳本,只是檢查語(yǔ)法的錯誤,返回所有錯誤信息
(二)shell的變量
Shell變量包括:臨時(shí)變量和環(huán)境變量,臨時(shí)變量時(shí)shell程序內部定義的,對其他程序不可見(jiàn),包括用戶(hù)自定義變量和位置變量;環(huán)境變量就是全局變量,不隨著(zhù)shell腳本的結束而消失。
在使用變量值的時(shí)候,要在變量名前加前綴'$'
變量賦值用'=',注意兩邊不能有空格
變量賦值舉例:
1、 NUM=1
2、將一個(gè)命令的執行結果賦給變量,例如
time=`date`
time=(date +%F) echo $time
3、將一個(gè)變量賦給另一個(gè)變量:A=$B
查看變量的值:echo $A
字符串用單引號或者雙引號
雙引號有自動(dòng)解析變量的功能
例如:
sum=100
echo 'The total is $sum'
set為顯示所有的環(huán)境變量
刪除變量unset
(三)位置變量和特殊變量
1、位置變量
Shell解釋執行用戶(hù)命令的時(shí)候,將命令行的第一部分作為命令名,其他部分作為參數。有出現在命令行上的位置確定的參數成為位置參數
例如:ls -l file1 file2 file3
$0位置被個(gè)程序的文件名占用,其它剩余位置$1 $2 $3…$9
例如:在test.sh中有如下內容
mkdir files$1_s00$2_class$3
執行時(shí)候./test.sh 001 1 001,表示$0被test.sh占用、$1被001占用、1被$2占用,001被$3占用
2、特殊變量
$*這個(gè)程序的所有參數
$#這個(gè)程序的參數個(gè)數
$$這個(gè)程序的 PID
$!執行上一個(gè)后臺的PID
$?執行上一個(gè)命令的返回值
例如有test.sh程序,內容如下:
echo '$# is:' $#
echo '$* is:' $*
echo '$? is:' $?
echo '$$ is:' $$
echo '$0 is:' $0
運行 ./test.sh p1 p2 p3 后查看結果
(四)shell的一些常用命令
1、Read命令:從鍵盤(pán)讀入數據,賦給變量
例如 read x 100 ; echo $x
如程序test.sh:
read a1 a2 a3
echo 'the a1 value is $a1'
echo 'the a2 value is $a2'
echo 'the a3 value is $a3'
則執行的時(shí)候
./test.sh 100 200 300
2、expr指令:對整型變量進(jìn)行算術(shù)運算
例如expr 100 + 200注意加號左右有空格
del@box:/temp$ expr 100 + 200
300
另外注意乘法為' \*',要有轉義符
例如3 \* 5
復雜的運算:expr `expr 6 + 9` / 3
將運算的結果賦予變量 x=`expr 1 + 2`
3、變量測試語(yǔ)句:
測試變量是否相等、為空等情況。語(yǔ)法:test 測試條件;測試范圍:整數、字符串、文件
(1)字符串測試:
test str1=str2 測試字符串是否相等
test str1!=str2 測試字符串是否不相等
test str1 測試字符串是否不為空
test -n str1 測試字符串是否不為空
test -z str1 測試字符串是否為空
(3)測試整數
test int1 -eq int2 測試int1和int2是否相等
test int1 -ge int2 測試int1是否>=int2
test int1 -gt int2 測試int1是否>int2
test int1 -le int2 測試int1是否<=int2
test int1 -lt int2 測試int1是否<int2
test int1 -ne int2 測試int1和int2是否不相等
(4)文件測試
test -d file 指定文件是否目錄
test -f file 指定文件是否常規文件
test -x file 指定文件是否可執行
test -r file 指定文件是否可讀
test -w file 指定文件是否可寫(xiě)
test -a file 指定文件是否存在
test -s file 文件大小是否非0
測試語(yǔ)句一般不單獨使用,一般配合if語(yǔ)句來(lái)判斷,如:
if test -d $1 then
…….
fi
變量測試語(yǔ)句也可以用[]簡(jiǎn)化,例如:
test -d $1等價(jià)于 [ -d $1 ] 注意:中括號左右的表達式要有空格
(五)流程控制
1、選擇結構if語(yǔ)句
(1) If [ ]; then
fi
(2) If [ ]; then
else
fi
例如:
If [ $# -ne 2 ]; then
echo 'not enough parameters'
exit 0 //0表示正常退出
fi
If[ $1 -eq $2 ];then
echo '$1 equals $2'
fi
(3) If [ ] then
elif [ ]
elif [ ]
else
例如:test.sh內容如下
read file_name
if [ -d $file_name ]
then
echo 'This is directory!!!'
elif [ -f $file_name ]
then
echo 'This is file!!!'
else
echo 'This is nothing!!!'
fi
條件組合查詢(xún):
-a :邏輯與,條件都成立的時(shí)候結果為真
-o :邏輯或,只要有一個(gè)條件成立,結果為真
例如:test.sh內容如下
read file_name
if [ -d $file_name ]
then
echo 'This is directory!!!'
elif [ -f $file_name ]
then
echo 'This is file!!!'
elif [ -c $file_name -o -b $file_name ]
echo 'This is device file!!!'
else
echo 'This is nothing!!!'
fi
2、循環(huán)結構
(1)形式-1:for-in
語(yǔ)法:
for 變量 in 名字表
do
…..
done
例如:
for x in 11 22 33 44 55 66
do
echo 'x value is : $x'
done
(2)形式-2:for
語(yǔ)法:
for ((初始值; 循環(huán)條件; 增量 ))
do
指令…
done
示例-1:輸出1 2 3 4 5
for((i = 1;i <= 5;i++))
do
echo $i
done
示例-2:求1—100的和
for (( i=1; i<=100; i++ ))
do
sum=$(( $sum + $i ))
done
echo '1+2+3+...+100=$sum'
3、case語(yǔ)句
語(yǔ)法:
case '$variable' in
'$condition1' )
command...
;;
'$condition2' )
command...
;;
esac
對變量使用''并不是強制的, 因為不會(huì )發(fā)生單詞分割
每句測試行, 都以右小括號)來(lái)結尾
每個(gè)條件判斷語(yǔ)句塊都以一對分號結尾 ;;
case塊以esac (case的反向拼寫(xiě))結尾
例如,有下列程序test.sh內容如下:
read c
case $c in
a)
echo 'this is a'
;;
b)
echo 'this is b'
;;
c)
echo 'this is c'
;;
*)
echo 'none'
esac
4、while循環(huán)
基本語(yǔ)法:
while [ condition ]
do
command1
command2
command3
done
例如,test.sh中的寫(xiě)法如下:
num=1
while [ $num -le 10 ]
do
sum=`expr $num \* $num`
echo $sum
num=`expr $num+1`
done
5、break和continue語(yǔ)句
break:結束循環(huán)
continue:結束本次循環(huán),開(kāi)始新的一輪循環(huán)
例如:
while true
do
echo '============================'
echo ' 1 add '
echo '2 delete '
echo '3 update'
echo '4 Quit'
read num_op
case $num_op in
1)
echo 'this is add operation'
;;
2)
echo 'this is delete operation'
;;
3)
echo 'this is update operation'
;;
4)
echo 'exit …..'
break
;;
esac
done
6、shift指令
參數左移:每執行一次,參數序列順次左移一個(gè)位置,即$#的值減去1。其用于處理每個(gè)參數,移動(dòng)出去的參數不能再用
例如,test.sh文件內容如下:
If [ $# -le 0 ]
then
echo 'not enough parameters'
exit 0
Fi
Sum=0
While [ $# -gt 0 ]
sum=`expr $sum + $1`
shift
Done
Echo $sum
五、Linux系統下的軟件安裝部署
在Linux環(huán)境下,由于很多傳統的開(kāi)發(fā)工具及大數據軟件、框架離不開(kāi)java虛擬機的環(huán)境,所以在安裝軟件之前必須安裝JDK。為了使軟件能夠在任一路徑運行,還必須要配置環(huán)境變量PATH,筆者在這里很好的總結了環(huán)境變量PATH的應用,如下所示:
1、將可執行文件加入PATH
在/usr/local/img/有個(gè)圖片demo.jpg,請設置個(gè)環(huán)境變量,以便在任何路徑都可以運行demo.jpg的圖片,圖片自己選擇,例如在隨便的路徑運行demo.jpg回車(chē),即可顯示圖片
步驟1:
vim /etc/profile
步驟2:
export PATH=/usr/local/img/demo.jpg:$PATH
步驟3:
:wq保存并退出
最后使文件生效:
source /etc/profile
2、使用export 命令查看PATH值
在命令行輸入:export
3、使用'echo $PATH'顯示環(huán)境變量的值
在命令行輸入:echo $PATH
4、使用'export PATH'添加臨時(shí)的環(huán)境變量,命令行窗口關(guān)閉,臨時(shí)環(huán)境變量失效,例如想要jdk的臨時(shí)環(huán)境變量,操作如下:
export PATH=/usr/local/jdk1.8/bin:$PATH
5、永久添加環(huán)境變量
永久添加環(huán)境變量要求能夠影響當前用戶(hù)和所有用戶(hù)。
(1)影響當前用戶(hù)
vim /root/.bashrc
export PATH='/usr/local/img/demo.jpg:$PATH
source /root/.bashrc
(2)影響所有用戶(hù)
vim /etc/profile
export PATH='/usr/local/img/demo.jpg:$PATH
source /etc/profile
6、使用env指定顯示所有的環(huán)境變量和值
在命令行輸入:env
7、使用set命令指定本地變量
在命令行輸入:set
(一)安裝JDK
步驟1:先查看linux版本是多少位的,在命令行輸入uname –a
步驟2:進(jìn)入官網(wǎng)下載相對應的linux版本,這里我們選擇jdk-8u91-linux-x64.tar.gz
步驟3:將jdk-8u91-linux-x64.tar.gz上傳到/usr/local/
步驟4:將jdk-8u91-linux-x64.tar.gz解壓,命令如下所示:
tar -zxvf jdk-8u91-linux-x64.tar.gz
步驟5:將解壓后的文件jdk1.8.0_91文件改名為jdk1.8
mv jdk1.8.0_91 jdk1.8
步驟6:配置Linux環(huán)境的PATH
vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
配置完成后保存并退出,使文件生效:
source /etc/profile
步驟7:在終端輸入'java –version'可以看到你安裝的版本,或者輸入
javac
java
(二)安裝Tomcat
步驟1:下載tomcat
從官網(wǎng)下載tomcat,這里下載apache-tomcat-8.0.20.tar.gz

步驟2:將tomcat上傳到虛擬機

我這里上傳到/usr/local/demo
步驟3:將tar包解壓
tar -zxvf tar -zxvf apache-tomcat-8.0.20.tar.gz
步驟4:改文件夾名稱(chēng)
由于解壓后的文件夾不方便記憶,將解壓縮后的文件夾apache-tomcat-8.0.20改名
mv apache-tomcat-8.0.20 tomcat8

步驟5:配置環(huán)境變量
(1)編輯配置文件/etc/profile
vi /etc/profile
TOMCAT_HOME=/usr/local/demo/tomcat8
PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH
操作截圖如下:

保存并退出:wq,然后使文件生效
source /etc/profile
步驟6:運行tomcat服務(wù)器
catalina.sh run
步驟7:查看8080端口
netstat -anp |grep 8080
(三)安裝MySQL數據庫
如果在 centOS下面可以使用yum指令安裝,這里采用的是ubuntu操作系統,安裝方法和yum類(lèi)似,操作如下:
1、安裝MySQL的服務(wù)端
安裝mysql服務(wù)端的命令: apt-get install mysql-server

2、安裝MySQL的客戶(hù)端
安裝mysql客戶(hù)端的命令: apt-get install mysql-client

3、啟動(dòng)服務(wù)

4、重置root密碼,使用mysql –uroot這種方式可以不用密碼登錄mysql

也可以輸入以下命令重置root密碼為123456

退出mysql

重啟mysql服務(wù)

進(jìn)入mysql密碼為123456 即可進(jìn)入msyql

5、測試MySQL的服務(wù)
步驟1:建立mysql數據庫
create database rg;

步驟2:通過(guò)語(yǔ)句查詢(xún)是否創(chuàng )建成功
show databases;

步驟3:使用數據庫才可以創(chuàng )建表

步驟4:創(chuàng )建表 表名為student 其中有3個(gè)字段id 以及name和age

步驟5:查詢(xún)是否創(chuàng )建成功
show tables

步驟6:下面使用3中格式插入信息 insert into
insert into student(id,Name,Age) values(1,'lily',21)
步驟7:使用select查詢(xún)student表
select * from student
聯(lián)系客服