大資料入門之Linux基礎(一)
Vmware、Linux 基礎
1.VMware 虛擬網路
1.1.虛擬網絡卡、虛擬交換機
當使用VMware Workstation安裝一個虛擬機器時就會自動安裝一塊虛擬網絡卡,此外還可手動給虛擬機器新增多塊虛擬網絡卡。
交換機用於電(光)訊號的轉發。可以為接入交換機的任意兩個網路節點提
供獨享的電訊號通路。簡單的理解可以把一些電腦連線在一起組成一個區域網。安裝VMware Workstation 12時就自動安裝了20臺虛擬交換機。
常用的交換機是VMnet0、VMnet1、VMnet8,分別對應VMware的三種網路模
式。
1.2.虛擬網橋
網橋(Bridge)是一個區域網與另一個區域網之間建立連線的橋樑。它
在VMware中,只有建立的虛擬機器所使用的虛擬網絡卡連線到VMnet0虛擬交換機上才會應用虛擬網橋。
1.3.虛擬 DHCP 伺服器
在虛擬網絡卡連線到VMnet1或VMnet8虛擬交換機時,自動安裝執行虛擬DHCP 伺服器並連線至這臺虛擬交換機。
DHCP伺服器: (Dynamic Host Configuration Protocol, 動態主機配置協議),主要有兩個用途:
1. 給內部網路自動分配IP地址;
2. 作為對所有計算機作中央管理的手段。
1.4.虛擬 NAT 伺服器
只在虛擬網絡卡連線到 VMnet8 (NAT)虛擬交換機時才自動安裝執行虛擬 NAT 伺服器
NAT伺服器: (Network Address Translation, 網路地址轉換)提供NAT 功能的伺服器:就是把在內部網路中使用的IP地址轉換成外部網路中使用的IP 地址,把不可路由的IP地址轉化成可路由的IP地址,對外部網路隱蔽內部網。
1.5.主機虛擬網絡卡
當我們安裝VMware Workstation 12時,就會在我們的實體PC機器上安裝主機虛擬網絡卡。
2. VMware 網路模式
2.1.Bridged(橋接)
橋接模式下,宿主機物理網絡卡(主機網絡卡)和虛擬網絡卡通過VMnet0虛擬交換機進行橋接,物理網絡卡和虛擬網絡卡在拓撲圖上處於同等地位,物理網絡卡和虛擬網絡卡處於同一個網段,虛擬交換機就相當於一臺現實網路中的交換機
2.2.Host-only (主機)
Host-Only模式下,虛擬系統網路是一個全封閉的網路,它唯一能夠訪問的就是宿主機,但各個虛擬機器內部可以互相通訊。Host-Only網路和NAT網路很相似,不同的地方就是 Host-Only 網路沒有 NAT 服務,所以虛擬網路不能連線到 Internet。宿主機和虛擬機器之間的通訊是通過VMware Network Adepter VMnet1 虛擬網絡卡來實現的。
2.3.NAT(網路地址轉換)
NAT模式下,虛擬機器藉助NAT(網路地址轉換)功能,通過宿主機器所在的網路來訪問公網。
在NAT網路中,會使用到VMnet8虛擬交換機,宿主機上的VMware Network
Adapter VMnet8虛擬網絡卡被連線到VMnet8交換機上,來與虛擬機器進行通訊,但是VMware Network Adapter VMnet8虛擬網絡卡僅僅是用於和VMnet8虛擬交換機網段通訊用的,它並不為VMnet8網段提供路由功能,處於虛擬NAT網路下的虛擬機器是使用虛擬的NAT伺服器連線的Internet的。
這時候,虛擬機器和宿主機就可以實現互訪了,若此時宿主機已經連線到了
Internet,那麼虛擬機器也就可以連上 Internet 了。VMware Network Adapter
VMnet8虛擬網絡卡在這裡僅僅是為Host和NAT虛擬網路下的虛擬機器通訊提供一個介面。所以,即便解除安裝掉這塊虛擬網絡卡,虛擬機器仍然是可以上網的,只是宿主機無法再訪問VMnet8網段而已。
NAT模式下,宿主機需要開啟VMware NAT Service和VMware DHCP Service。
採用NAT模式最大的優勢是虛擬系統接入網際網路非常簡單,你不需要進行任何其他的配置,只需要宿主機器能訪問網際網路即可。 如果你想利用VMware安裝一個新的虛擬系統,在虛擬系統中不用進行任何手工配置就能直接訪問網際網路,
建議採用NAT模式。
3. VMware 虛擬機器克隆
VMware支援兩種型別的克隆:完整克隆連結克隆
完整克隆是和原始虛擬機器完全獨立的一個拷貝,它不和原始虛擬機器共享任何資源。可以脫離原始虛擬機器獨立使用。
連結克隆需要和原始虛擬機器共享同一虛擬磁碟檔案,不能脫離原始虛擬機器獨立執行。但採用共享磁碟檔案卻大大縮短了建立克隆虛擬機器的時間,同時還節省了寶貴的物理磁碟空間。通過連結克隆,可以輕鬆的為不同的任務建立一個獨立的虛擬機器。一般使用虛擬機器克隆大量複製虛擬機器,用來進行叢集伺服器的搭建。
克隆後需要修改的地方:
1、 主機hostname
vi /etc/sysconfig/network 修改原hostname為 newname hostname newname 讓hostname立刻生效
2、 虛擬網絡卡裝置MAC地址
MAC地址處於下面兩個檔案中。
/etc/udev/rules.d/70-persistent-net.rules
/etc/sysconfig/network-scripts/ifcfg-eth0
虛擬機器虛擬網絡卡MAC地址可由下面進行設定:
3、 IP地址
可以編譯下面的檔案進行修改:
/etc/sysconfig/network-scripts/ifcfg-eth0
修改完之後,重啟網路或者重啟機器。新的虛擬機器就可以使用了。
service network restart
reboot
4. SSH(安全外殼協議)
SSH為Secure Shell的縮寫,是一種網路安全協議,專為遠端登入會話和其他網路服務提供安全性的協議。通過使用 SSH,可以把傳輸的資料進行加密,有效防止遠端管理過程中的資訊洩露問題。
從客戶端來看,有兩種驗證方式:基於密碼、基於金鑰
4.1.使用者名稱密碼驗證方式
說明:
(1) 當客戶端發起ssh請求,伺服器會把自己的公鑰傳送給使用者;
(2) 使用者會根據伺服器發來的公鑰對密碼進行加密;
(3) 加密後的資訊回傳給伺服器,伺服器用自己的私鑰解密,如果密碼正確,則使用者登入成功。
4.2.基於金鑰的登入方式
說明:
(1) 首先在客戶端生成一對金鑰(公鑰、私鑰);
(2) 客戶端將生成的公鑰拷貝到需要訪問的服務端機器上;
(3) 當客戶端再次傳送一個連線請求,包括ip、使用者名稱;
(4) 服務端得到客戶端的請求後,會到authorized_keys中查詢,如果有相應的IP和使用者,就會隨機生成一個字串,例如:qwer;
(5) 服務端將使用客戶端拷貝過來的公鑰對隨機字串qwer進行加密,然後傳送給客戶端;
(6) 得到服務端發來的訊息後,客戶端會使用私鑰進行解密,然後將解密後的字串傳送給服務端;
(7) 服務端接受到客戶端發來的字串後,跟之前的字串進行對比,如果一致,就允許免密碼登入。
4.3.OpenSSH 使用
OpenSSH是SSH協議的免費開源實現。
OpenSSH 由客戶端和服務端的軟體組成。服務端是一個守護程序(daemon),
他在後臺執行並響應來自客戶端的連線請求。服務端一般是sshd程序,提供了對遠端連線的處理。
客戶端包含ssh程式以及像scp(遠端拷貝)、slogin(遠端登陸)、sftp(安全檔案傳輸)等其他的應用程式。
預設情況下,CentOS系統會自帶安裝OpenSSH服務。
使用示例: 配置node-1至node-2機器的免密登入。
a)在node-1機器上
ssh-keygen -t rsa [dsa] 按四下回車
生成金鑰檔案和私鑰檔案 id_rsa,id_rsa.pub b)將公鑰拷貝給node-2機器 ssh-copy-id node-2
首次連結需要輸入使用者密碼、驗證成功後後續免密登陸。
5.檔案上傳、下載
在涉及Linux相關的開發中,經常需要進行linux和Windows之間的檔案、安裝包等上傳和下載操作。sftp和lrzsz是使用比較廣泛的兩種方式。
5.1.SFTP
sftp是Secure File Transfer Protocol的縮寫,安全檔案傳送協議。可以為傳輸檔案提供一種安全的網路的加密方法。sftp為 SSH的其中一部分,本身沒有單獨的守護程序,使用sshd守護程序(埠號預設是22)來完成相應的連線和答覆操作。
SecureCRT遠端連線至CentOS後,按alt+p即可開啟sftp會話視窗。
常用的sftp命令有: pwd和lpwd
pwd是看sftp服務所在機器(即CentOS)預設的當前目錄 lpwd是看Windows本地預設目錄。
ls和lls
ls檢視sftp伺服器預設當前目錄下內容 lls是看Windows預設當前目錄下內容
put d:/sparksql_textdata.csv
把Windows上檔案上傳到sftp伺服器的預設當前目錄下
get install.log.syslog
把sftp伺服器當前目錄下的檔案下載到windows當前目錄下
Help
幫助命令。列出sftp的使用方法。
5.2.lrzsz
lrzsz是一款在linux裡可代替sftp上傳和下載的程式。
Centos系統中,可直接yum -y install lrzsz 程式會自動安裝好,也可以下載安裝包離線進行安裝,詳細參考附件資料。
上傳檔案:命令列輸入rz,開啟上傳檔案會話視窗。
下載檔案:sz 下載檔案路徑
三、Linux 增強
1.查詢命令
1.1.grep
grep 命令是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。
格式:grep [option] pattern [file]
可使用 —help 檢視更多引數。
使用例項:
ps -ef | grep sshd 查詢指定ssh服務程序 ps -ef | grep sshd | grep -v grep 查詢指定服務程序,排除gerp本身 ps -ef | grep sshd –c 查詢指定程序個數 cat a.txt | grep -f b.txt 從檔案中讀取關鍵詞進行搜尋輸出a.txt檔案中含有從b.txt檔案中讀取出的關鍵詞的內容行
cat a.txt | grep –nf b.txt 從檔案中讀取關鍵詞進行搜尋,顯示行號 grep -n 'linux' test.txt 從檔案中查詢關鍵詞,並顯示行號 cat test.txt |grep ^u 找出以u開頭的行內容 cat test.txt |grep ^[^u] 輸出非u開頭的行內容 cat test.txt |grep hat$ 輸出以hat結尾的行內容 cat test.txt |grep -E "ed|at" 顯示包含ed或者at字元的內容行
1.2.find
find命令在目錄結構中搜索檔案,並對搜尋結果執行指定的操作。
find 預設搜尋當前目錄及其子目錄,並且不過濾任何結果(也就是返回所有檔案),將它們全都顯示在螢幕上。
實際引數很多,可使用 —help 檢視。
使用例項:
find . -name "*.log" -ls 在當前目錄查詢以.log結尾的檔案,並顯示詳細資訊。
find /root/ -perm 777 查詢/root/目錄下許可權為777的檔案 find . -type f -name "*.log" 查詢當目錄,以.log結尾的普通檔案 find . -type d | sort 查詢當前所有目錄並排序 find . -size +100M 查詢當前目錄大於100M的檔案
1.3.locate
locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立一個包括系統內所有檔案名稱及路徑的資料庫。之後當尋找時就只需查
詢這個資料庫(/var/lib/locatedb)。
Linux系統自動建立這個資料庫,預設每天自動更新一次,所以使用locate 命令查不到最新變動過的檔案。為了避免這種情況,可以在使用locate之前,
先使用updatedb命令,手動更新資料庫。
如果是精簡版CentOS系統需要安裝locate命令
yum -y install mlocate
updatedb 命令來建立locate命令依賴的資料庫
updatedb
使用例項:
locate /etc/sh
搜尋etc目錄下所有以sh開頭的檔案
locate pwd
查詢和pwd相關的所有檔案
1.4.whereis
whereis命令是定位可執行檔案、原始碼檔案、幫助檔案在檔案系統中的位置。這些檔案的屬性應屬於原始程式碼,二進位制檔案,或是幫助檔案。
whereis和下locate一樣,會從資料庫中查詢資料,而不是像find命令那
樣,通過遍歷硬碟來查詢。
使用例項:
whereis ls 將和ls檔案相關的檔案都查找出來 ls: /bin/ls /usr/share/man/man1/ls.1.gz whereis -m ls 查詢ls命令說明文件路徑 whereis -s ls 查詢ls原始檔
1.5.which
which命令的作用是在PATH變數指定的路徑中,搜尋某個系統命令的位置,並且返回第一個搜尋結果。
使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪
一個位置的命令。
使用例項:
which pwd 查詢pwd命令所在路徑
/bin/pwd
which java 查詢path中java的路徑
/root/apps/jdk1.8.0_65/bin/java
which 是根據使用者所配置的 PATH 變數內的目錄去搜尋可執行檔,所以,
不同的PATH配置內容所找到的命令會不一樣。
2.su、sudo
2.1.su
su用於使用者之間的切換。但是切換前的使用者依然保持登入狀態。如果是root 向普通或虛擬使用者切換不需要密碼,反之普通使用者切換到其它任何使用者都需要密碼驗證。
su在不加任何引數,預設為切換到root使用者,但沒有轉到root使用者根目錄下;su 加引數 - ,表示預設切換到root使用者,並轉到root使用者根目錄下。
su不足:如果某個使用者需要使用root許可權、則必須要把root密碼告訴此使用者。
退出返回之前的使用者:exit
2.2.sudo
sudo是為所有想使用root許可權的普通使用者設計的。可以讓普通使用者具有臨時使用root許可權的權利。只需輸入自己賬戶的密碼即可。當然這個普通使用者必須在/etc/sudoers檔案中有配置項、才具有使用sudo的權利。
沒有配置許可權之前,普通使用者無法進行root許可權操作:
使用root使用者編輯/etc/sudoers檔案,給普通使用者授權命令列輸入visudo,開啟/etc/sudoers檔案,加入如下的內容,儲存。
這樣普通使用者就可以使用sudo執行root許可權的命令了。
sudo的工作過程如下:
1.當用戶執行sudo時,系統會主動尋找/etc/sudoers檔案,判斷該使用者是否有執行sudo的許可權
2.確認使用者具有可執行sudo的許可權後,讓使用者輸入使用者自己的密碼確認
3.若密碼輸入成功,則開始執行sudo後續的命令如果想要更加精準的控制,就需要理解配置中的含義。
hadoop ALL=(ALL) ALL
第一個ALL是指網路中的主機,我們可以指定主機名,這樣hadoop只可以在此主機上執行後面的命令。第二個括號裡的ALL是指目標使用者,也就是以誰的身份去執行命令。最後一個ALL是指命令名了。
例如,我們想讓hadoop使用者在node-23主機上以allen的身份執行kill命令,就這樣編寫配置檔案:
hadoop node-23=(allen) /bin/kill
案例:只允許hadoop使用者以root身份在node-23上執行ls 、cat命令,並且執行時候免輸入密碼。
配置檔案中:
hadoop node-23=NOPASSWD: /bin/ls, /bin/cat
執行非ls 、cat命令也會禁止。
而cat命令就可以執行。
3.掛載(mount)命令
在linux作業系統中,掛載是指將一個裝置(通常是儲存裝置)掛接到一個已存在的目錄上。要訪問儲存裝置中的檔案,通過訪問這個掛載目錄來訪問。
命令格式:mount [-t vfstype] [-o options] device dir
-t vfstype 指定檔案系統的型別。mount 會自動選擇正確的型別。常用型別有:光碟映象iso9660、linux檔案網路共享nfs等等。 -o options 主要用來描述裝置或檔案的掛接方式。常用的引數有: loop:用來把一個檔案當成硬碟分割槽掛接上系統 ro:採用只讀方式掛接裝置 rw:採用讀寫方式掛接裝置
device 要掛接(mount)的裝置dir裝置在系統上的掛接點(mount point)
案例:掛載光碟機
mkdir /mnt/cdrom mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/ 將裝置/dev/cdrom掛載到 掛載點/mnt/cdrom中案例:掛載光碟映象檔案(.iso)
mkdir /mnt/centosmount -o loop /root/Centos-6.7.DVD1.iso /mnt/centos
案例:解除安裝umount
umount /mnt/cdrom
4.本地 yum 源
yum(Yellow dog Updater, Modified)是一個在Fedora和RedHat以及
CentOS中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
yum機制的強大之處在於yum源。yum源相當是一個目錄項,當我們使用yum 機制安裝軟體時,若需要安裝依賴軟體,則yum機制就會根據在yum源中定義好的路徑查詢依賴軟體,並將依賴軟體安裝好。 yum源分為網路yum源和本地yum源。
yum源配置檔案有兩個。一是直接配置在/etc/yum.conf中,其中包含一些
主要的配置資訊。另外就是/etc/yum.repos.d/下的 xx.repo字尾檔案,預設都
會被載入進來。
案例:使用CentOS映象建立本地yum源
1、 掛載iso映象,拷貝所有檔案至本地yum目錄
mkdir /dev/centios /mnt/local_yummount -o loop /root/CentOS-6.7-x86_64-bin-DVD1.iso /dev/centioscp -r /dev/centios/* /mnt/local_yum/
2、 修改yum源配置
cd /etc/yum.repos.d/ rename .repo .repo.bak *.repocp CentOS-Base.repo.bak CentOS-Local.repovi CentOS-Local.repo[local_yum]name=This is a local repobaseurl=file:///mnt/local_yumenabled=1
gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
3、 更新yum配置
yum clean all
yum repolist all
通過上面的步驟操作,已經可以使用本地yum源了。有需要進行安裝的軟體
包就可以直接執行”yum install xxx“進行安裝了。
5.系統服務管理
service --status-all # 檢視系統所有的後臺服務程序 service sshd status # 檢視指定的後臺服務程序的狀態
service sshd stop service sshd start service sshd restart
配置後臺服務程序的開機自啟
chkconfig httpd on ## 讓httpd服務開機自啟 chkconfig httpd off ## 讓httpd服務開機不要自啟
6.網路管理
6.1.主機名配置
檢視主機名
hostname
修改主機名(重啟後無效)
hostname hadoop
修改主機名(重啟後永久生效)
vi /ect/sysconfig/network
6.2.IP 地址配置
方式一:setup
用root輸入setup命令,進入互動式修改介面
Minimal安裝的系統沒有安裝 setuptool 軟體,可yum安裝後使用。
yum install setuptool ntsysv system-config-securitylevel-tui
yum install system-config-network-tui system-config-keyboard
方式二:修改配置檔案(重啟後永久生效)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
使修改檔案的網路配置生效:
service network restart重啟網路服務
reboot 重啟計算機
方式三:ifconfig命令(重啟後無效)
ifconfig eth0 192.168.12.22
6.3.域名對映
/etc/hosts檔案用於在通過主機名進行訪問時做ip地址解析之用。所以,你想訪問一個什麼樣的主機名,就需要把這個主機名和它對應的ip地址
配置在/etc/hosts檔案中。
6.4.網路埠監聽
netstat是一款命令列工具,用於列出系統上所有的網路socket連線情況,包括 tcp, udp 以及 unix socket,另外它還能列出處於監聽狀態(即等待接入請求)的socket。如想確認Web 服務有沒有起來,可檢視80埠有沒有開啟。
示例:
常見引數:
-a (all)顯示所有選項,預設不顯示LISTEN相關
-t (tcp)僅顯示tcp相關選項 -u (udp)僅顯示udp相關選項
-n 禁用域名反向解析功能,只顯示ip
-l 僅列出有在 Listen (監聽) 的服務狀態
-p 顯示建立相關連結的程序資訊
-ep 可以同時檢視程序名和使用者名稱
netstat –nlpt 獲取程序名、程序號以及使用者 ID
只列出監聽中的連線
netstat –tnl 可以看到處於監聽狀態的 TCP 埠和連線
7. crontab 配置
crontab是Unix和Linux用於設定週期性被執行的指令。通過crontab命
令,可以在固定間隔時間執行指定的系統指令或shell指令碼。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。
crontab安裝:
yum install crontabs
服務操作說明:
service crond start ## 啟動服務 service crond stop ## 關閉服務 service crond restart ## 重啟服務 service crond reload ## 重新載入配置 service crond status ## 檢視crontab服務狀態: chkconfig crond --list ## 檢視crontab服務是否已設定為開機啟動
chkconfig crond on ## 加入開機自動啟動
7.1.命令格式
crontab [-u user] file crontab [-u user] [ -e | -l | -r ]
引數說明:
-u user:用來設定某個使用者的crontab服務file:file是命令檔案的名字,表示將file做為crontab的任務列表檔案
並載入crontab。
-e:編輯某個使用者的crontab檔案內容。如果不指定使用者,則表示編輯當前
使用者的crontab檔案。
-l:顯示某個使用者的crontab檔案內容。如果不指定使用者,則表示顯示當前
使用者的crontab檔案內容。
-r:刪除定時任務配置,從/var/spool/cron目錄中刪除某個使用者的crontab
檔案,如果不指定使用者,則預設刪除當前使用者的crontab檔案。 -i:在刪除使用者的crontab檔案時給確認提示。
命令示例:
crontab file [-u user] ## 用指定的檔案替代目前的crontab。 crontab -l [-u user] ## 列出使用者目前的crontab. crontab -e [-u user] ## 編輯使用者目前的crontab.
7.2.配置說明、例項
* * * * * command
分 時 日 月 周 命令 第1列表示分鐘1~59 每分鐘用*或者 */1表示 第2列表示小時0~23(0表示0點)第3列表示日期1~31 第4列表示月份1~12 第5列標識號星期0~6(0表示星期天) 第6列要執行的命令配置例項:
*/1 * * * * date >> /root/date.txt
每分鐘執行一次date命令
30 21 * * * /usr/local/etc/rc.d/httpd restart
每晚的21:30重啟apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/httpd restart
每月1、10、22日的4 : 45重啟apache。
10 1 * * 6,0 /usr/local/etc/rc.d/httpd restart
每週六、週日的1 : 10重啟apache。
0,30 18-23 * * * /usr/local/etc/rc.d/httpd restart
每天18 : 00至23 : 00之間每隔30分鐘重啟apache。
* 23-7/1 * * * /usr/local/etc/rc.d/httpd restart
晚上11點到早上7點之間,每隔一小時重啟apache
四、Shell 程式設計
Shell是一個用C語言編寫的程式,通過Shell使用者可以訪問作業系統核心服務。它類似於DOS下的command和後來的cmd.exe。Shell既是一種命令語言,又是一種程式設計語言。
Shell script是一種為shell編寫的指令碼程式。Shell 程式設計一般指 shell 指令碼程式設計,不是指開發shell自身。
Shell 程式設計跟 java、php 程式設計一樣,只要有一個能編寫程式碼的文字編輯器和一個能解釋執行的指令碼直譯器就可以了。
Linux 的 Shell 種類眾多,一個系統可以存在多個 shell,可以通過 cat
/etc/shells命令檢視系統中安裝的shell。
Bash由於易用和免費,在日常工作中被廣泛使用。同時,Bash也是大多數
Linux系統預設的Shell。
1.基本格式
使用vi編輯器新建一個檔案 hello.sh。副檔名並不影響指令碼執行,見名知意。比如用 php寫shell指令碼,副檔名就用 .php。
#!/bin/bash
echo "Hello World !"
#!是一個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 Shell。
echo 命令用於向視窗