大數據學前準備之 Linux 入門筆記(附資料)

對於大數據學習而言,Linux 運維可以說是必備的技能。可以不研究的過於高深,但是基本的操作和使用一定要熟練。Linux 的學習需要大量的實踐,本文從 linux 的基本知識,實戰操作,到常用的指令與軟件安裝等都有總結。

也是爲了在掌握 Linux 的同時,也爲今後的大數據學習做好準備。文章較長,建議收藏

相關學習資料可以通過下面的方式下載,本文只是整理了大數據會用到的 linux 基本知識,有精力的同學可以通過相關書籍進行更深入的學習。

本文共九章,從最基礎到實際操作,希望大家多動手,多練習。

零、計算機與操作系統

確實有很多的朋友是非計算機相關專業的,但是也要接觸 Linux。

如果直接進入系統的學習是有一定難度的,所以就有計算機基礎的章節,大佬們可以忽略本章。。。

1、電腦是什麼?

我小的時候電腦還是個稀有的物件,大概是初中的時候,家裏纔有一個第一個臺式機,而現在幾乎家家都有一臺電腦了。

電腦的定義不用多說,可以協助人們做大量的運算。通過輸入的設備把信息傳遞給他,他經過運算就可以將計算結果反饋出來。

所以,觀察一下電腦,臺式機比較明顯,筆記本都整合在了一起,但其實就分爲三部分:

輸入單元:鍵盤,鼠標等等

主機部分:看不見的那部分,裏邊有 CPU, 內存等等

輸出單元:屏幕,打印機等等

好了,這三部分理解了以後,就差主機裏邊的東西不好理解,這也很多同學買電腦被坑的主要部位。。

這裏有一個形象的比喻,來說明主機部分的幾個硬件的作用:

CPU:腦袋瓜子——判斷和控制身體各部分的活動

內存:腦袋中放置正在被思考的數據的區塊——有點繞,比如環境,語言這些互動的信息,需要進行思考和處理的

硬盤:腦袋中的記憶區塊——和內存不同,回憶就放在了記憶深處

主板:神經系統——把所有重要的元件連接起來

顯卡:腦袋中的影像——將眼睛看見的轉化成影像

電源:心臟——提供動力

可見最重要的就是 CPU 了,而這些設備都有計算單位(容量,速度等等)

容量單位:電腦對數據判斷是通過電路的通電與否,所以只認識 0 和 1。0/1 這個單位稱之爲 bit。bit 太小了,所以每份數據用 8 個 bits 來記錄。

1 Byte = 8 bits 不過隨着數據越來越大 Byte 也不夠用,就有了下面的一切

也就是常說的 KB MB GB。。。

2、電腦架構與各種設備元件

下面簡單說一下電腦的架構,買電腦的時候會用到。

CPU 主要型號有 Intel 和 AMD 兩個品牌。隨着發展呢,性能也在不斷的提高,就是計算的速度了,雖然這個比較複雜,但是 CPU 的性能排名被整理了出來,稱之爲天梯圖,好壞很清晰的就能看出來。

筆記本 CPU 天梯圖_2021 最新筆記本 CPU 性能排行天梯圖 - 太平洋電腦網 diy.pconline.com.cn/tiantitu/nbcpu/

內存也是經過了一定的發展,最近的內存都是 DDR(Double Data Rate)類型了,分爲 DDR2、DDR3、DDR4。聽說 DDR5 也快出來了。數據越大,速度就越快。

內存多通道設計,內存要傳輸數據,寬度當然是越大越好,這就有了雙通道的設計。所以大多主板上會有兩個 8GB 的內存條,而不是一個 16GB 的。

顯卡對圖形的顯示至關重要,如果電腦要用來打遊戲,畫面不斷的變化,還有 3D 效果,那就要主要顯卡的選擇了,同樣顯卡也有天梯圖。

顯卡天梯圖_顯卡性能天梯圖_2021 最新顯卡排行天梯圖 - 太平洋電腦網 diy.pconline.com.cn/tiantitu/gpu/

硬盤與存儲設備。電腦總需要記錄和讀取數據的。比如軟盤(暴露年齡的),硬盤,u 盤,光盤等等。硬盤是圓形的,需要轉動來進行讀寫。爲了提升硬盤傳輸速度,硬盤與主板的連接接口也經過了多次的改版。

SATA 接口的速度對比

SATA 接口由於物理限制,最高也就到 200 的速度,所有就需要固態硬盤了。

SAS 接口

SAS 過於昂貴,目前大部分還是 SATA 接口。

USB 接口

固態硬盤(Solid State Disk,SSD)

傳統硬盤的速度有瓶頸,後來就有產商拿閃存去做大容量的設備。由於不像硬盤那樣轉動來讀寫,速度非常的快。

主板爲各種設備提供了連接接口,這裏有兩個概念要注意一下。CMOS 與 BIOS

CMOS 的功能是記錄主板上的重要參數。BIOS 是可以修改這些參數的程序,一般電腦開機按 DEL 鍵就能進入。

當然還有外接設備等知識,這裏不做贅述。

3、數據的表示方式

電腦只認識 0 和 1,那麼就需要一些表達方式和人類建立聯繫。

數字系統

一個簡單的例子,將十進制表示爲二進制。

文字編碼系統

文字是通過一定的編碼標準,將 01 轉化爲文字。

常見的英文編碼表示 ASCII 系統 每個符號(英文 數字 符號)佔用 1bytes 的記錄,這樣就有了 256 種變化。

中文編碼經過了一段時間發展,目前大多采用 UTF8 編碼。

4、軟件程序運行

有了硬件,就要讓軟件運行了,要不電腦的功能就無從發揮。軟件分爲兩類 **系統軟件 和 應用軟件。**不過了解軟件前,先要了解程序。

機器程序與編譯程序

電腦只認識 0 1 ,CPU 就根據指令對 01 做運算。但這樣有很大的問題,人類無法直接的理解一堆 01 的意義,而且也不瞭解機器的指令,而且這種程序無法攜帶保存,而且這個過程中要和硬盤各種打交道。爲了解決這個問題,就需要讓人類寫簡單的程序,然後通過編譯器將這些程序轉化爲機器程序。

這就是編程語言了,比如 JAVA,Python,C 等等。

操作系統

把人類寫的程序,轉化爲機器程序,把程序放進內存,執行,並且可以操作各種硬件。這個過程固定重複,所有操作系統就出現了,來解決這一系列的問題。

操作系統(Operating System)其實也是一組程序,但他的重點是管理電腦的各種活動讓電腦的一切硬件正常的運轉,這些功能就是操作系統核心(Kernel)。爲了保護核心,讓程序設計師比較容易開發軟件,除了核心程序之外,還會提供一組開發接口,也就是系統調用層,軟件開發工程師只要遵循公認的標準開發軟件,這個軟件就可以在覈心運行了。

這裏有些繞,後面講 linux 的時候會具體描述。

應用程序

應用程序是參考操作系統的開發接口所開發出來的。比如 office 是辦公用的,影像處理軟件是處理影音數據的等等。

需要注意的是,應用程序和操作系統是有關係的。這就有了兼容性的問題,比如有一些軟件就沒有辦法在 mac 系統中跑。

一、Linux 概述

1991 年託瓦斯(Linux Torvalds)開發了 Linux 的原型,隨後 Linux 迅速的發展,本章就來了解下 Linux 的歷史。

Linux 就是一套操作系統。可以與硬件設備交互,也就是說可以部署在手機,電腦,服務器等等設備中。開發者就可以在 Linux 進行各種軟件的研發了。

Linux 是開源的,Linux 的發展史上非常的有趣,下面我們來回顧一下。

UNIX

早在 Linux 出現之前二十年,1969 年,就有一個穩定的操作系統存在,也就是 UNIX。

早期的計算機昂貴,並不是個人能擁有的。都是用於軍事或者科技研究,寫程序也非常的喫力,多人同時使用都是個大問題。1969 年,貝爾實驗室的 Ken Thompson 用組合語言寫出了核心程序,將其稱爲 Unics。這個系統提供了一些小工具和文件系統,這就是 unix 的雛形了。

1973 年,Thompson 與 Ritchie 合作,用 C 語言寫出了第一個正式的 Unix 核心,這個改變也讓 Unix 很容易被移植到不同的機器上。

1977 年,Unix 的重要分支 BSD 誕生,增加了很多的工具和編譯程序。

1979 年,很多公司開始了 UNIX 的發展,AT&T 公司的 System V 就是其中之一,並且將版權收了回去。

BSD 與 System V 是 Unix 最根本的兩個分支。

1984 年,x86 架構的 Minix 開始撰寫並於兩年後誕生。Andrew Tanenbaum 教授在看到了版權問題後,決定基於 X86 架構自己寫一套微小的 Unix 系統,這也就是 Minix。

同年,GNU 計劃與 FSF 基金會成立。開源與自由成爲了軟件開發的大趨勢。

無數的軟件開發開始貢獻自己的一份力量:https://www.fsf.org/resources

1991 年,芬蘭一個普通研究生購買了自己的 PC,顯示認真的鑽研了 Minix 系統的代碼,隨後就以 bash,gcc 等 GNU 工具寫了一個小小的核心程序。可以在 intel 的 386 機器上運行。

沒錯,就是 Linus Torvalds。從此 Linux 橫空出世。

Linux 的發展

Torvalds 將這個核心放在了網上,因爲用了 Linux 這個目錄,這個核心便叫做 Linux 了。隨後 Torvalds 又對 linux 進行了不斷的改造。

由於 Linux 是完全開源的額,很快就吸引了大量的開發者加入進來。

由於代碼越來越多,Torvalds 成立了核心的網站:

https://www.kernel.org/

這羣素未謀面的開發者,在 1994 年完成 Linux 的核心正式版。version 1.0.

1996 年完成了 2.0,2011 推出了 3.0。2015 年推出了 4.0。

2019 年,Linux Kernel 5.0 正式版發佈。

這個 Torvalds 選擇的可愛的小企鵝吉祥物,也越來越強大了。如今的 Linux 已經應用在了各種硬件設備上,電腦,手機,樹莓派等等。

核心版本

後面會講到,在 centos 系統中通過 uname -r 就可以獲取內核版本號。

比如 3.10.0-1127.19.1.el7.x86_64

主版本. 次版本. 釋出版本 - 修改版本

在 2.6.X 版本之前,分爲兩種:

主次版本爲奇數:發展中版本,如 2.5.xx

主次版本爲偶數:穩定版本,如 2.6.XX

不過從 3.0 版本以後,根據主線版本進行開發,比如 3.10 就是 3.9 之後的新的主線版本。

版本號:https://www.kernel.org/releases.html

請注意:後面會提到,核心版本和發佈商版本 並不是一回事。

千萬不要說我的 linux 是 7.5 版本。Linux 的版本是 3.10,而 Centos 的版本纔是 7.5.

Linux 發行版

Centos 又是什麼呢?

Linux 其實是一個操作系統最底層的核心,及一些工具。但並不是一個可以完整安裝的套件。

爲了讓更多的人能用上 Linux,很多商業公司和團體加入了進來。

簡單的說 Linux Kernel + 軟件 + 工具 + 文檔 就構成了完整的 Linux 發行版。

爲了讓這種開發不至於混亂,行業制定了一些標準來約束大家。

如 FHS https://www.pathname.com/fhs/

LSB https://wiki.linuxfoundation.org/lsb/start

這種發行版大體也可以分爲兩類:

一種是使用 RPM 方式安裝軟件的系統:RedHat,Fedora,SuSE,CentOS 等等。

另一種是使用 Debian 的 dpkg 方式安裝軟件的系統:Debian,Ubuntu,B2D 等等。

其中 RedHat ,SuSE,Ubuntu 爲商業公司。

Fedora,CentOS,OpenSuSE,Debian,B2D 爲開源社羣。

他們的官網如下:

RedHat :https://www.redhat.com/

SuSE:https://www.suse.com/

Fedora:https://getfedora.org/

CentOS:http://www.centos.org/

Debian:https://www.debian.org/

Ubuntu:http://www.ubuntu.com/

用於企業環境,大多選擇商業的穩定版。

而服務器環境,可以選擇 Centos。

至於個人電腦,就可以選擇炫酷的 Ubuntu 桌面版啦。

Linux 的應用

Linux 的應用已經非常的廣泛。其實目前我們訪問的手機 APP,網站等等服務。大部分都是部署在 Linux 上的。

企業

網絡服務器

這是 Linux 最廣泛的應用。各大硬件廠商都是支持 Linux 的,而且 Linux 繼承了 Unix 的高穩定性。

企業核心應用

比如數據庫,企業內網環境等等。

高性能運算任務

可以理解爲大數據運算,Linux 的運算性能非常強大。

個人

桌面電腦 目前已經有很多用戶在使用 linux 的桌面版了。

手機 安卓系統就是 Google 基於 Linux 核心做的。

嵌入式 路由,智能家電等等。

如何學習

Linux 這麼牛逼,是不是應該直接看一下內核源碼呢?如果想深入研發可以。平時並不需要。

應該是從如何使用好 Linux 的角度進行學習。

學習基礎

要按照下面的步驟學習,打好基礎:計算機基礎知識,Linux 安裝與指令,Linux 操作系統,vi 文本編輯器,Shell 腳本,軟件安裝,網絡基礎。

選一本好書或者教程

這本鳥哥的 Linux 的私房菜非常的經典,但是內容很多。也可以通過本教程進行學習。

實踐實踐

實踐太重要,Linux 的學習不經過練習是沒有任何作用的。所以一定要經常練習。之後的章節也會講解本地虛擬機環境的搭建,讓大家可以在本機上輕鬆練習 Linux。

查找資料

解決問題的能力非常重要,在遇到問題時不要着急求助,先看看自己能不能解決,尋找解決辦法。

興趣

興趣是最好的老師,Linux 是一個非常有趣的系統,不要因爲難就放棄。努力學習,會有很多的樂趣發現。

二、CentOS 虛擬機環境搭建

在瞭解了 Linux 的歷史以後,我們知道就要進入實戰階段了。

近些年來計算硬件發展迅速,普通的 windows 系統計算完全可以虛擬出一臺 Linux 系統來。

因爲硬件與操作系統本身都支持了虛擬化的技術(虛擬化技術暫不討論,感興趣的同學可以閱讀書籍進行學習),同時一些軟件支持圖形化的方式快速創建虛擬機。

這也極大的方便了我們進行學習,本次我們就是要使用 Vmvare 軟件在 Win10 系統中完成 CentOS 系統的安裝,爲之後的學習提供非常大的便利。

首先請準備好 Vmvare 軟件和 CentOS 鏡像,需要下載的同學可以在大數據流動進行軟件的獲取。

VMware(中文名威睿) 虛擬機軟件,是全球桌面到數據中心虛擬化解決方案的領導廠商。

VMware Workstation 是該公司的一款產品,可以非常方便的進行虛擬機的搭建。

安裝 VMware

我們使用的是 VMwareWorkstation 16.1.2 進行虛擬機的搭建。

打開安裝包以後,按照引導一步步的進行軟件的安裝。

注意虛擬機安裝的位置與激活產品即可。

安裝 Centos 系統

在 Vmvare 中新建虛擬機,選擇自定義安裝。

選擇稍後安裝操作系統

注意選擇 Linux 系統 CentOS7 64 位,如果是其他的系統也要做對應的選擇。

根據實際情況設置磁盤,內存,CPU。網絡選擇 NAT 即可,可以方便聯網。

最後把鏡像掛載到硬盤上,就可以安裝了。

這一系列操作其實就是我們通過光盤的 ISO 鏡像安裝系統的過程,只不過是通過虛擬化的方式完成了。

此時打開虛擬機就進入了 CentOS7 安裝頁面。

設置 root 用戶密碼

重啓,虛擬機安裝完成!

本章我們介紹了虛擬機安裝 Centos 操作系統的實戰,爲了以後可以更好的練習。

三、網絡與遠程連接

CentOS 常見有這幾種版本:

建議選擇 DVD ISO

標準版本安裝(服務器安裝推薦使用,包含一些基本的軟件和圖形化界面)

Mini 版本,只有必要的軟件,自帶的軟件最少 (沒有圖形化界面),Everything 帶的軟件比較多 很大。

安裝好虛擬機進入 centos 系統中,看到的是這樣的界面。

輸入之前設置的用戶名密碼就可以登入。但是這相當於是看見了機器的界面,在實際工作中我們是不可能一直去機器上操作的,而是需要遠程連接機器進行操作。

SSH 爲 Secure Shell 的縮寫,專爲遠程登錄會話和其他網絡服務提供安全性的協議。可以有效防止遠程管理過程中的信息泄露問題。SSH 最初是 UNIX 系統上的一個程序,後來又迅速擴展到其他操作平臺。

也就是說通過 SSH 就可以遠程並且安全的訪問機器了,CentOS 默認的 SSH 服務就是開啓的,所以我們只要進行好相關的網絡配置就可以遠程操作這臺機器了。

網絡配置

網絡配置的目的就是爲了讓我們的本機與虛擬機的網絡互通,可以彼此訪問。虛擬機建立之初是沒有進行這些網絡設置的。

首先設置主機進行網絡共享,在 win10 的網絡設置裏操作。再看一下 vnet8 的網絡 ip,我的是 192.168.137.0

在 vmvare 的虛擬網絡編輯器中,設置 ip

進入虛擬機進行網卡設置 進入網卡設置目錄 cd /etc/sysconfig/network-scripts/ 設置網卡 vi ifcfg-ens33 設置如下(重點是下面幾個設置,固定 IP)

BOOTPROTO=static

IPADDR=192.168.137.101

NETMASK=255.255.255.0

GATEWAY=192.168.137.1

ONBOOT=yes

設置完成後重啓網卡

service network restart

重啓後驗證上網情況

ping http://www.baidu.com

如果有正常的 ms 返回證明成功。

此時證明虛擬機網絡已通,可以遠程連接操作了。

遠程連接

這裏推薦的是一款叫做 MobaXterm 的軟件,使用它不僅可以遠程 SSH 連接虛擬機。還可以把連接保存下來,這樣的話,我們每次開啓虛擬機,然後啓動 MobaXterm,就可以很方便的進行操作練習了。

軟件可以在資料包中獲取。

安裝好以後打開 MobaXterm 軟件,選擇 Session 按鈕,就可以新建一個遠程會話。

選擇 SSH,並設置好 IP,用戶名,密碼

登陸成功。左側是文件目錄,可以進行文件的上傳下載操作。右側就是 CentOS 系統的界面了。

現在可以進行相關的操作與練習了。

四、Linux 操作命令

Linux 有着非常強大的操作指令。這也是必備的技能之一。

可以理解爲 linux 通過我們傳遞給它的每一條指令去完成相應的操作,本章先了解 Linux 命令的語法結構,再來熟悉常用的命令。

Linux 命令語法結構

command [-options] parameters1 parameters2

命令 1 選項 2 參數 3 參數 4

這就是 linux 命令的語法,之前我們也進行網絡設置的操作。

command 就是命令,後面是參數與設置。舉個例子

ls 是查詢當前目錄文件或者目錄列表。不包含隱藏文件。

ls 就是命令。

ls –l // 顯示當前目錄文件詳細信息,不包含隱藏文件。

-l 就是設置。

cp file1 dir1 複製文件,cp 是命令,後面的文件和文件夾路徑就是參數。

Linux 命令知識

linux 的命令爲什麼可以在任意目錄下執行,主要是由於環境變量,輸入 echo $PATH,可以看到,環境變量情況。

linux 命令有直接向內核直接訪問的內部命令。外部命令就是通過命令解析器解析爲內核命令再做執行。

linux 爲命令設置了幫助文檔。內部命令查詢幫助文檔:help + 命令名稱。

外部命令查詢幫助文檔:man + 命令名稱。

輸入命令錯誤會有提示。

也可以通過 cp --help 這種方式來查看幫助。

快捷按鍵

Tab 鍵,Tab 鍵是 linux 命令最棒的功能,可以進行命令補全。

Ctrl+C,可以將程序停止。

Shift+page up/down, 可以翻頁。

Linux 常用命令

下面總結 linux 的常用命令。

cd

功能:切換目錄

語法:

cd ../ // 切換上一級目錄

cd ~ // 切換根目錄

cd dir // 切換到當前目錄的 dir 目錄

cd /root // 如果是跨目錄切換,必須加 /

mkdir

功能:創建目錄

語法:

mkdir dir // 創建單個目錄

mkdir dir1 dir2 // 創建多個目錄

mkdir dir{1..10} // 創建 10 個目錄。

pwd

功能:查詢當前所在目錄位置

cp:copy

功能:複製文件,或者目錄

複製文件:

cp file1 file2

如果 file2 文件不存在,創建 file2,內容也同時複製。

如果 file2 存在,內容覆蓋。

cp file1 dir1

把單個文件 file1 複製目錄 dir1 中。

cp file2 file3 dir1

把多個文件複製 dir1 目錄

cp * dir2

把當前目錄所有文件複製 dir2 目錄

cp file* dir3

把所有以 file 開頭文件複製 dir3 目錄

cp ../* .

複製上一級目錄文件到當前目錄。

複製目錄:

直接使用 cp 命令不能直接複製目錄,不能複製複製非空目錄:

cp –R dir9 dir12

如果 dir12 不存在,創建一個目錄,複製內容。

如果 dir12 存在,把 dir9 目錄複製 dir12 目錄下面。

cp –r dir1 dir2 dir3

把 dir1,dir2 複製到 dir3 目錄中。

cp –r * dir4

把當前目錄所有文件,目錄複製 dir4 中。

cp –r ../* . // 把上一級目錄所有文件,或者目錄複製當前目錄。

cp –r dir* dir12

把所有以 dir 開頭目錄複製到 dir12

mv:move

功能:剪切

mv file1 file2

如果 file2 不存在,他會 file1 重命名 file2. 內容不變。

如果 file2 存在,file1 會覆蓋 file2。

mv file1 dir1

剪切 file1 文件到 dir1 目錄。

mv file2 file3 dir1

把多個文件剪切到 dir1 目錄中。

mv * dir3 // 把所有文件,或者目錄剪切到 dir3 目錄

mv ../* . // 剪切上一級目錄所有文件或者目錄到當前目錄。

mv file* dir5

剪切所有以 file 開頭的文件,或者目錄到 dir5

mv dir1 dir14

如果 dir14 目錄不存在,重命名

存在,把 dir1 剪切到 dir14 目錄。

rm:remove

功能:刪除

刪除文件:

rm file1

刪除 file1

rm –f file2

強制刪除 file2 ,不提示。

rm –f file3 file4

強制刪除多個文件

rm –f *

刪除當前目錄所有文件

rm –f file*

刪除當前目錄所有以 file 開頭的文件

rm –f ../*

刪除上一級目錄所有文件

刪除目錄:

rm –rf dir1

-r: 遞歸刪除

-f:強制不提示

遞歸強制刪除 dir1 目錄。

rm –rf dir2 dir3

刪除多個目錄

rm –rf *

刪除當前目錄下所有文件或者目錄。

rm –rf ../*

刪除上一級目錄所有文件,或者目錄。

rm –rf file*

刪除所有以 file 開頭文件或者目錄。

touch

功能:創建文件

語法:

touch file1

創建單個文件

touch file2 file3

創建多個文件

touch file{1..10}

創建以 file 開頭的 10 個文件。

cat

功能:查看文件,合併文件。

查看文件:

語法:cat filename

特點:cat 查詢文件全部內容。適合查詢小文件。

添加文件:

語法:cat > filename

功能:創建文件 fileName,並且光標阻塞,輸入內容到文件。

合併文件:

語法:cat file1 file2 > file3

功能:把 file1 flie2 文件內容合併到文件 file3,文件 file3 原有內容被覆蓋。

more

功能:查看文件

特點:分頁查詢文件

語法:

more myfile

分頁查看文件

more +6 myfle

從第 6 行開始分頁顯示文件

more -6 myfile

分頁查看,每頁顯示 6 條

less:

功能:查詢文件

特點:自由上下翻頁

語法:less myfile

which

功能:查詢命令

特定:查詢命令別名,命令所在目錄。

語法:which 命令

whereis

功能:查詢命令

特點:命令名稱,命令所在目錄,命令幫助文件,命令源代碼。

語法:whereis + 命令

locate

功能:查詢文件

特點:不能查詢新文件,Linux 創建新文化在 Linux 文件數據庫中,需要更新 updatedb。

語法:locate + 文件名稱。

功能:查看文件

特點:從文件頭部開始查看文件

語法:

head –n 10 myfile

查詢文件 myfile,每頁顯示 10 條

head –c 20 myfile

查詢前 20 個字節。

tail

功能:實時監控文件變化

語法:tail –f filename

find

功能:查找文件

語法:

find path -option [-print] [ -exec -ok command ] {} ;

命令:

find –name “myfile”

這個命令和下面命令基本相同,但是使用正則表達式查詢,需要加引號。

find –name myfile

find /etc –name “yum”

查詢指定目錄 etc 目錄下面 yum 文件。

find /root /etc –name “yum”

查詢多個目錄裏面 yum 文件。

find /root /etc –name “[A-Z]*”

查詢指定目錄下所有以大寫字母 A-Z 開頭所有文件。

-exec:執行

把前面命令執行結果交給後面命令執行。

find /root/ /etc/ -name "[A-Z]*" -exec ls -al {} ;

n 查詢所有 A-Z 大寫字母開頭所有文件,交給 ls 命令執行。

n {} : 表示查詢結果在一行進行顯示

n ; 命令需要分號結束,使用斜槓轉義。

|

命令名稱:管道命令

功能:把前面命令執行結果交給後面命令執行。

例子:ls –al | more -6

grep

功能:過濾查詢

語法:

find /root/ /etc/ -name "[A-Z]*" -exec ls -al {} ; | grep S95atd

查詢所有大寫字母 A-Z 開頭的文件詳細信息,並過濾出 S95atd 文件。

ps –ef | grep svn

ps –ef | grep mysql

ln

功能:創建快捷方式

語法:ln –s myfile link

含義: 給 myfile 創建一個快捷方式,快捷方式的名稱 link。

top

top 顯示當前系統中耗費資源的進程情況

top // 每隔 5 秒顯式所有進程的資源佔用情況 top -d 2 // 每隔 2 秒顯式所有進程的資源佔用情況 top -c // 每隔 5 秒顯式進程的資源佔用情況,並顯示進程的命令行參數 (默認只有進程名) top -p 12345 -p 6789// 每隔 5 秒顯示 pid 是 12345 和 pid 是 6789 的兩個進程的資源佔用情況

ps

功能:查詢進程

語法:ps –ef | grep 進程名稱

-e: 顯示所有進程

-f:全格式顯示進程。

kill

功能:殺死進程

語法:kill -9 PID

df

功能:顯示當前資源佔用情況

語法:df

df –h // 可以顯示單位。

gzip

功能:解壓縮文件

語法:

壓縮語法:

gzip myfile

壓縮單個 myfile 文件,myfile.gz

gzip file1 file2

壓縮多個文件。File1.gz file2.gz

gzip *

壓縮當前目錄所有文件

gzip file*

壓縮以 file 開頭所有文件

gzip ../*

壓縮上一級目錄所有文件

gzip ../../*

壓縮上上一級目錄所有文件。

解壓語法:

第一種方式:

gunzip *

解壓當前目錄所有以 gzip 壓縮的文件。

gunzip myfile.gz

gunzip file1.gz file2.gz

gunzip ../*

gunzip file*

第二種方式:

gzip –dv myfile.gz

解壓單個文件 myfile.gz

-d: 解壓

-v:顯示解壓過程

gzip –dv file1.gz file2.gz

gzip –dv *

gzip –dv ../*

gzip –dv file*

bzip2

語法:

壓縮語法:

bzip2 myfile

壓縮單個 myfile 文件,myfile.bz2

bzip2 file1 file2

壓縮多個文件。File1.bz2le2.bz2

bzip2 *

壓縮當前目錄所有文件

bzip2 file*

壓縮以 file 開頭所有文件

bzip2 ../*

壓縮上一級目錄所有文件

bzip2 ../../*

壓縮上上一級目錄所有文件。

解壓語法:

第一種方式:

bunzip2*

解壓當前目錄所有以 gzip 壓縮的文件。

bunzip2 myfile.gz

bunzip2 file1.gz file2.gz

bunzip2 ../*

bunzip2 file*

第二種方式:

bzip2 –dv myfile.bz2

解壓單個文件 myfile.bz2

-d: 解壓

-v:顯示解壓過程

bzip2 –dv file1.bz2 file2.bz2

bzip2 –dv *

bzip2 –dv ../*

zip

壓縮語法:

zip myzip.zip myfile

把 myfile 壓縮成 myzip.zip

zip myzip.zip

解壓使用 zip 命令壓縮文件。

tar

功能:打包命令,可以把目標打包。

可以壓縮包文件。

  1. 命令格式:

tar[必要參數][選擇參數][文件]

2.命令功能:

用來壓縮和解壓文件。tar 本身不具有壓縮功能。他是調用壓縮功能實現的

3.命令參數:

必要參數有如下:

-A 新增壓縮文件到已存在的壓縮

-B 設置區塊大小

-c 建立新的打包文件

-d 記錄文件的差別

-r 添加文件到已經壓縮的文件

-u 添加改變了和現有的文件到已經存在的壓縮文件

-x 從壓縮的文件中提取文件

-t 顯示壓縮文件的內容

-z 支持 gzip 解壓文件

-j 支持 bzip2 解壓文件

-Z 支持 compress 解壓文件

-v 顯示操作過程

-l 文件系統邊界設置

-k 保留原有文件不覆蓋

-m 保留文件不被覆蓋

-W 確認壓縮文件的正確性

可選參數如下:

-b 設置區塊數目

-C 切換到指定目錄

-f 指定打包文件

--help 顯示幫助信息

--version 顯示版本信息

常見解壓 / 壓縮命令

tar

解包:tar -xvf FileName.tar 打包:tar -cvf FileName.tar DirName (注:tar 是打包,不是壓縮!)

解壓 gzip 壓縮 tar 包

語法:tar –zxvf mytar.tar.gz

-z : 解壓 gz

-x:解包 tar

-v:顯示解壓過程

-f:指定解壓文件。

vim 編輯器

vi 有 3 個模式:插入模式、命令模式、低行模式。

插入模式:在此模式下可以輸入字符,按 ESC 將回到命令模式。命令模式:可以移動光標、刪除字符等。低行模式:可以保存文件、退出 vi、設置 vi、查找等功能 (低行模式也可以看作是命令模式裏的)。

打開文件、保存、關閉文件 (vi 命令模式下使用)

vi filename // 打開 filename 文件 :w // 保存文件 :w vpser.net // 保存至 vpser.net 文件 :q // 退出編輯器,如果文件已修改請使用下面的命令 :q! // 退出編輯器,且不保存 :wq // 退出編輯器,且保存文件

shift + z z // 快捷方式必須在命令模式執行。

插入文本或行 (vi 命令模式下使用,執行下面命令後將進入插入模式,按 ESC 鍵可退出插入模式)

a // 在當前光標位置的右邊添加文本 i // 在當前光標位置的左邊添加文本 A // 在當前行的末尾位置添加文本 I // 在當前行的開始處添加文本 (非空字符的行首) O // 在當前行的上面新建一行 o // 在當前行的下面新建一行 R // 替換(覆蓋) 當前光標位置及後面的若干文本 J // 合併光標所在行及下一行爲一行(依然在命令模式)

移動光標 (vi 命令模式下使用)

1、使用上下左右方向鍵

2、命令模式下:h 向左、j 向下 、k 向上、l 向右。空格鍵 向右、Backspace 向左、Enter 移動到下一行首、- 移動到上一行首。

刪除、恢復字符或行 (vi 命令模式下使用)

x // 刪除當前字符 nx // 刪除從光標開始的 n 個字符,n 代表數字 dd // 刪除當前行 ndd // 向下刪除當前行在內的 n 行 u // 撤銷上一步操作 U // 撤銷對當前行的所有操作

搜索 (vi 命令模式下使用)

/vpser // 向光標下搜索 vpser 字符串 ?vpser // 向光標上搜索 vpser 字符串 n // 向下搜索前一個搜素動作 N // 向上搜索前一個搜索動作

跳至指定行 (vi 命令模式下使用)

n+ // 向下跳 n 行 n- // 向上跳 n 行 nG // 跳到行號爲 n 的行 G // 跳至文件的底部

設置行號 (vi 命令模式下使用)

:set nu // 顯示行號 :set nonu // 取消顯示行號

複製、粘貼 (vi 命令模式下使用)

yy // 將當前行復制到緩存區,也可以用 "ayy 複製,"a 爲緩衝區,a 也可以替換爲 a 到 z 的任意字母,可以完成多個複製任務。nyy // 將當前行向下 n 行復制到緩衝區,也可以用 "anyy 複製,"a 爲緩衝區,a 也可以替換爲 a 到 z 的任意字母,可以完成多個複製任務。yw // 複製從光標開始到詞尾的字符。nyw // 複製從光標開始的 n 個單詞。y^ // 複製從光標到行首的內容。VPS 偵探 y$ // 複製從光標到行尾的內容。p // 粘貼剪切板裏的內容在光標後,如果使用了前面的自定義緩衝區,建議使用 "ap 進行粘貼。P // 粘貼剪切板裏的內容在光標前,如果使用了前面的自定義緩衝區,建議使用"aP 進行粘貼。

替換 (vi 命令模式下使用)

:s/old/new // 用 new 替換行中首次出現的 old,只針對光標所在行 :s/old/new/g // 用 new 替換行中所有的 old,行 :n,m s/old/new/g // 用 new 替換從 n 到 m 行裏所有的 old,範圍替換 :%s/old/new/g // 用 new 替換當前文件裏所有的 old,全局替換

用戶和組賬戶管理

linux 操作系統是一個多用戶操作系統,它允許多用戶同時登錄到系統上並使用資源。系統會根據賬戶來區分每個用戶的文件,進程,任務和工作環境,使得每個用戶工作都不受干擾

保存用戶信息的文件:/etc/passwd

保存用戶組的文件:/etc/group

保存用戶組密碼的文件:/etc/gshadow

Linux 用戶分類

超級用戶:(root,UID=0)

普通用戶:(UID 在 500 到 60000)

僞用戶:(UID 在 1 到 499)

僞用戶不能登陸系統,而且沒有宿主目錄

操作用戶命令

添加用戶 (useradd)

添加用戶命令:useradd [- 選項] 用戶名

-u 指定用戶 ID(uid)

-g 指定所屬的組名(gid)

-G 指定多個組,用逗號 “,” 分開(Groups)

-c 用戶描述(comment)

-e 失效時間(expire date)

更新用戶 (usermod)

修改用戶命令:usermod(user modify)

-l 修改用戶名 (login)usermod -l a b(b 改爲 a)

-g 添加組 usermod -g sys

-G 添加多個組 usermod -G sys,root tom

–L 鎖定用戶賬號密碼(Lock)

–U 解鎖用戶賬號(Unlock)

刪除用戶 (userdel)

刪除用戶命令:userdel(user delete)

-r 刪除賬號時同時刪除目錄(remove)

操作用戶組命令

添加組 (goupadd)

添加組:groupadd

-g 指定 gid

修改組 (groupmod)

修改組:groupmod

-n 更改組名(new group)

刪除組 (groupdel)

刪除組:groupdel

groups 顯示用戶所屬組

五、Linux 目錄結構

登錄系統後,在當前命令窗口下輸入命令:

ls /

你會看到如下圖所示:

樹狀目錄結構:

以下是對這些目錄的解釋:

/bin:bin 是 Binary 的縮寫, 這個目錄存放着最經常使用的命令。

/boot:這裏存放的是啓動 Linux 時使用的一些核心文件,包括一些連接文件以及鏡像文件。

/dev :dev 是 Device(設備) 的縮寫, 該目錄下存放的是 Linux 的外部設備,在 Linux 中訪問設備的方式和訪問文件的方式是相同的。

/etc:這個目錄用來存放所有的系統管理所需要的配置文件和子目錄。

/home:用戶的主目錄,在 Linux 中,每個用戶都有一個自己的目錄,一般該目錄名是以用戶的賬號命名的。

/lib:這個目錄裏存放着系統最基本的動態連接共享庫,其作用類似於 Windows 裏的 DLL 文件。幾乎所有的應用程序都需要用到這些共享庫。

/lost+found:這個目錄一般情況下是空的,當系統非法關機後,這裏就存放了一些文件。

/media:linux 系統會自動識別一些設備,例如 U 盤、光驅等等,當識別後,linux 會把識別的設備掛載到這個目錄下。

/mnt:系統提供該目錄是爲了讓用戶臨時掛載別的文件系統的,我們可以將光驅掛載在 / mnt / 上,然後進入該目錄就可以查看光驅裏的內容了。

/opt:這是給主機額外安裝軟件所擺放的目錄。比如你安裝一個 ORACLE 數據庫則就可以放到這個目錄下。默認是空的。

/proc:這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。這個目錄的內容不在硬盤上而是在內存裏,我們也可以直接修改裏面的某些文件,比如可以通過下面的命令來屏蔽主機的 ping 命令,使別人無法 ping 你的機器:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/root:該目錄爲系統管理員,也稱作超級權限者的用戶主目錄。

/sbin:s 就是 Super User 的意思,這裏存放的是系統管理員使用的系統管理程序。

/selinux:這個目錄是 Redhat/CentOS 所特有的目錄,Selinux 是一個安全機制,類似於 windows 的防火牆,但是這套機制比較複雜,這個目錄就是存放 selinux 相關的文件的。

/srv:該目錄存放一些服務啓動之後需要提取的數據。

/sys:這是 linux2.6 內核的一個很大的變化。該目錄下安裝了 2.6 內核中新出現的一個文件系統 sysfs 。

· sysfs 文件系統集成了下面 3 種文件系統的信息:針對進程信息的 proc 文件系統、針對設備的 devfs 文件系統以及針對僞終端的 devpts 文件系統。

該文件系統是內核設備樹的一個直觀反映。

當一個內核對象被創建的時候,對應的文件和目錄也在內核對象子系統中被創建。

/tmp:這個目錄是用來存放一些臨時文件的。

/usr:這是一個非常重要的目錄,用戶的很多應用程序和文件都放在這個目錄下,類似於 windows 下的 program files 目錄。

/usr/bin:系統用戶使用的應用程序。

/usr/sbin:超級用戶使用的比較高級的管理程序和系統守護程序。

/usr/src:內核源代碼默認的放置目錄。

/var:這個目錄中存放着在不斷擴充着的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌文件。

在 linux 系統中,有幾個目錄是比較重要的,平時需要注意不要誤刪除或者隨意更改內部文件。

/etc:上邊也提到了,這個是系統中的配置文件,如果你更改了該目錄下的某個文件可能會導致系統不能啓動。

/bin, /sbin, /usr/bin, /usr/sbin: 這是系統預設的執行文件的放置目錄,比如 ls 就是在 / bin/ls 目錄下的。

值得提出的是,/bin, /usr/bin 是給系統用戶使用的指令(除 root 外的通用戶),而 / sbin, /usr/sbin 則是給 root 使用的指令。

/var:這是一個非常重要的目錄,系統上跑了很多程序,那麼每個程序都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在 / var/log 目錄下,另外 mail 的預設放置也是在這裏。

六、Linux 軟件安裝

Linux 系統軟件安裝方式

Linux 上的軟件安裝有以下幾種常見方式:

1、二進制發佈包

軟件已經針對具體平臺編譯打包發佈,只要解壓,修改配置即可

2、RPM 發佈包

軟件已經按照 redhat 的包管理工具規範 RPM 進行打包發佈,需要獲取到相應的軟件 RPM 發佈包,然後用 RPM 命令進行安裝

3、Yum 在線安裝

軟件已經以 RPM 規範打包,但發佈在了網絡上的一些服務器上,可用 yum 在線安裝服務器上存在的 rpm 軟件,並且會自動解決軟件安裝過程中的庫依賴問題

(注:類似於 maven)

4、源碼編譯安裝

軟件以源碼工程的形式發佈,需要獲取到源碼工程後用相應開發工具進行編譯打包部署

軟件安裝有一個技巧,大家搜索的時候一定要指定好版本和系統,不然會有很多坑,舉個例子。

JDK 安裝

1、上傳 jdk 壓縮包

2、解壓 jdk 壓縮包

tar -zxvf jdk-7u67-linux-x64.gz -C /usr/local/

3、修改環境變量 PATH

vi /etc/profile

在文件最後加兩行:

export JAVA_HOME=/usr/local/jdk1.7.0_67

export PATH=$PATH:$JAVA_HOME/bin

4、讓環境變量生效

source /etc/profile

即可

Mysql 安裝

由於 CentOS7 的 yum 源中沒有 mysql,需要到 mysql 的官網下載 yum repo 配置文件。

下載命令:wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

然後進行 yum 源的安裝:

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

安裝完成後,就可以使用 yum 命令安裝 mysql 了:

yum -y install mysql-server

啓動 mysql:

systemctl start mysqld

查看 mysql 狀態:

systemctl status mysqld

獲取 mysql 的臨時密碼:

grep 'temporary password' /var/log/mysqld.log

登錄 mysql:(密碼爲上一步驟獲取的臨時密碼)

mysql -u root -p(此處不用輸入密碼,按下回車後會專門要你再輸入密碼的)

登錄成功後,做任何操作都會被要求先修改密碼

show databases;

請注意:如果修改的密碼太過簡單,依然會提示 error,修改失敗

因爲 5.7 及以上版本的數據庫對密碼做了強度要求,默認密碼的要求必須是大小寫字母數字特殊字母的組合且至少要 8 位長度

ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密碼';

按照系統的默認要求,修改密碼:

ALTER USER 'root'@'localhost' IDENTIFIED BY '-520Lemon-';

修改完成後,即可愉快的操作數據庫:

show databases;

七、Yum 命令

yum 命令非常的重要,在大數據集羣安裝過程中也會頻繁使用。所以單獨來說明一下如何使用。

yum( Yellow dog Updater, Modified)是一個在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端軟件包管理器。

能夠從指定的服務器自動下載 RPM 包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

yum 提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。

yum 語法

yum [options] [command] [package ...]

· __options:** 可選,選項包括 - h(幫助),-y(當安裝過程提示選擇全部爲 "yes"),-q(不顯示安裝的過程)等等。

· __command:** 要進行的操作。

· __package** 操作的對象。

yum 常用命令

· 1. 列出所有可更新的軟件清單命令:yum check-update

· 2. 更新所有軟件命令:yum update

· 3. 僅安裝指定的軟件命令:yum install

· 4. 僅更新指定的軟件命令:yum update

· 5. 列出所有可安裝的軟件清單命令:yum list

· 6. 刪除軟件包命令:yum remove

· 7. 查找軟件包 命令:yum search

· 8. 清除緩存命令:

· yum clean packages: 清除緩存目錄下的軟件包

· yum clean headers: 清除緩存目錄下的 headers

· yum clean oldheaders: 清除緩存目錄下舊的 headers

· yum clean, yum clean all (= yum clean packages; yum clean oldheaders) : 清除緩存目錄下的軟件包及舊的 headers

實例

安裝 pam-devel

[root@www ~]# yum install pam-develSetting up Install ProcessParsing package install argumentsResolving Dependencies <==先檢查軟件的屬性相依問題--> Running transaction check---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel--> Running transaction check---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated

filelists.xml.gz      100% |=========================| 1.6 MB   00:05

filelists.xml.gz      100% |=========================| 138 kB   00:00-> Finished Dependency Resolution……(省略)

國內 yum 源

網易(163)yum 源是國內最好的 yum 源之一 ,無論是速度還是軟件版本,都非常的不錯。

將 yum 源設置爲 163 yum,可以提升軟件包安裝和更新的速度,同時避免一些常見軟件版本無法找到。

安裝步驟

首先備份 / etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下載對應版本 repo 文件, 放入 / etc/yum.repos.d/(操作前請做好相應備份)

· CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo

· CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo

運行以下命令生成緩存

yum clean all

yum makecache

成功!

八、Shell 編程

Shell 是用戶與內核進行交互操作的一種接口,目前最流行的 Shell 稱爲 bash Shell

Shell 也是一門編程語言 **__<解釋型的編程語言>****,即 shell 腳本 <就是在用 linux 的 shell 命令編程>

一個系統可以存在多個 shell,可以通過 cat /etc/shells 命令查看系統中安裝的 shell,不同的 shell 可能支持的命令語法是不相同的

代碼寫在普通文本文件中,通常以 .sh 爲後綴名

vi hello.sh


!/bin/bash   ## 表示用哪一種shell解析器來解析執行我們的這個腳本程序

echo "hello world"

執行腳本

sh hello.sh

或給腳本添加 x 權限,直接執行

chmod 755 hello.sh

./hello.sh

Linux Shell 中的變量分爲 “系統變量” 和“用戶自定義變量”

可以通過 set 命令查看系統變量

系統變量:$HOME、$PWD、$SHELL、$USER 等等

Linux Shell 中的變量分爲 “系統變量” 和“用戶自定義變量”

可以通過 set 命令查看系統變量

變量

shell 可以自定義變量

變量=值 (例如 STR=abc)

A=ls -la ## 反引號,運行裏面的命令,並把結果返回給變量 A

A=$(ls -la) ## 等價於反引號

$? 表示上一個命令退出的狀態碼

$$ 表示當前進程編號

$0 表示當前腳本名稱

$n 表示 n 位置的輸入參數(n 代表數字,n>=1)

$# 表示參數的個數,常用於循環

$* 和 $@ 都表示參數列表

運算符

expr m + n 或 $((m+n)) 注意 expr 運算符間要有空格

用 (()) ((1+2))

用 $[] a=$[1+2]

流程控制

if

if condition
then
    statements
[elif condition
    then statements...]
[else
 statements ]
fi

while

while expression
do
commanddone

for

for N in 1 2 3
do
    echo $N
donefor N in 1 2 3; do echo $N; donefor N in {1..3}; do echo $N; done

函數

#!/bin/sh
# func1.sh
hello()    ## 函數定義
{
        echo "Hello there today's date is `date +%Y-%m-%d`"
        # return  2      ###返回值其實是狀態碼,只能在[0-255]範圍內
}   
hello
# echo $?  獲取函數的return值  
echo "now going to the function hello"
echo "back from the function"

函數調用:
function hello()function hello
或 hello

也是應很多初學者的建議,整理了這篇文章。從操作系統到 Linux 的實踐,進行了筆記記錄。主要是爲以後的大數據學習做好準備。掌握了 Linux 的基礎,並具有一定的編程基礎,就可以進行大數據的學習和大數據集羣環境的安裝了。

請關注大數據流動後續的文章。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ADrjNPIndton-962MNqdGw