Linux速成
文章目錄
- Linux速成
- 1 前言
- 1.1 課程介紹
- 1.2 學習方向
- 1.3 應用領域
- 個人桌面領域
- 伺服器領域
- 嵌入式領域
- 1.4 學習階段
- 1.5 學習建議
- 2 linux入門
- 2.1 linux簡介
- 2.2 linux發行版
- 2.3 和unix的關系
- 2.4 linux怎麼來的
- 2.5 與windows比較
- 3 安裝虛拟機和CentOS
- 3.1 vmware 和 centos介紹
- 3.2 安裝vmware
- 3.3 安裝centos
- 3.4 聯網和使用終端
- 3.5 設定共享目錄
- 4 linux目錄結構
- 4.1 樹狀目錄
- 4.2 詳細介紹
- 5 遠端登入linux
- 5.1 為什麼要遠端登入
- 5.2 安裝和使用xshell
- 5.3 安裝和使用xftp
- 5.4 開通sshd服務
- 5.5 亂碼問題
- 6 關機、重新開機、登入與登出
- 6.1 關機與重新開機
- 6.2 登入與登出
- 7 常用指令
- 7.1 檔案目錄類
- 7.2 時間日期類
- 7.3 搜尋查找類
- 7.4 locate
- 7.6 grep和管道符号|
- 7.7 壓縮和解壓類
- 7.8 幫助資訊類
- 8 使用者管理
- 8.1 介紹
- 8.2 使用者操作
- 8.3 添加使用者
- 8.4 修改密碼
- 8.5 删除使用者
- 8.6 查詢使用者資訊
- 8.7 切換使用者
- 8.8 檢視目前登入使用者
- 8.9 使用者組操作
- 8.10 新增組
- 8.11 删除組
- 8.12 修改使用者的組、初始目錄
- 8.13 使用者群組的相關檔案
- 8.14 /etc/shadow
- 8.15 /etc/group檔案
- 9 權限管理
- 9.1 介紹
- 9.2 檢視檔案類型和所有者
- 9.3 權限說明
- 9.4 修改檔案權限-chmod
- 9.4.1 第一種方式:+ 、-、= 變更權限
- 9.4.2 第二種方式:通過數字變更權限
- 9.5 修改檔案所有者-chown
- 9.6 修改檔案所在組-chgrp
- 實戰練習:
- 10 vi和vim
- 10.1 vi和vim介紹
- 10.2 三種模式
- 10.3 各種操作說明
- 10.3.1 光标移動
- 10.3.2 複制、粘貼、删除
- 10.3.3 儲存檔案及退出vi編輯器
- 10.3.4 文本内容替換
- 10.3.5 檔案内容查找和撤銷編輯及儲存退出![img](https://s2.51cto.com/images/blog/202210/20095757_6350ab2509bb031012.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
- 10.4 練習遊戲:
- 10.5 實戰練習1:
- 10.6 實戰練習2:
- 11 磁盤分區挂載
- 11.1 硬碟類型
- 11.2 分區基本知識
- 11.2.1 mbr 分區:
- 11.2.1 gtp 分區:
- 11.3 windows和linux檢視分區格式
- 11.4 linux分區
- 11.4.1 原理介紹
- 11.4.2 檢視分區情況
- 11.5 增加硬碟并挂載
- 11.5.1 示意圖
- 11.6 具體步驟
- 11.6.1 虛拟機添加硬碟
- 11.6.2 分區
- 11.6.3 格式化
- 11.6.4 挂載
- 11.6.5 設定永久挂載
- 11.7 檢視磁盤使用情況
- 11.8 檢視目錄占用磁盤空間情況
- 11.9 統計某個目錄下檔案個數
- 11.10 統計某個目錄下子目錄個數
- 12 網絡配置
- 13 程序與服務管理
- 13.1 程序管理
- 13.2 基本介紹
- 13.3 檢視系統程序
- 13.4 程序資訊說明
- 13.4.1 ps -aux
- 13.4.2 ps -ef
- 13.5 終止程序
- 13.6 檢視程序樹
- 13.7 服務管理
- 13.8 基本介紹
- 13.9 service指令
- 13.10 檢視有哪些服務
- 13.10.1 chkconfig
- 13.11 動态監控程序
- 14 shell程式設計
- 14.1 shell概述
- 14.2 什麼是shell
- 14.3 什麼是shell腳本
- 14.4 誰要學習shell
- 14.5 有哪些shell
- 14.6 第1個shell腳本
- 14.7 變量
- 14.8 環境變量
- 14.9 位置參數變量
- 14.10 預定義變量
- 14.11 運算符
- 14.12 條件判斷
- 14.13 流程控制
- 14.13.1 if判斷
- 14.13.2 case分支
- 14.13.3 for 循環
- 14.13.4 while 循環
- 14.14 讀取控制台輸入
- 14.15 函數
- 14.15.1 系統函數
- 14.15.2 自定義函數
- 14.16 實戰練習
- 14.17 綜合案例
- 14.17.1 歸檔檔案
- 15 任務排程
- 16 rpm和yum
- 17 搭建javaee運作環境
- 14.13.4 while 循環
- 14.14 讀取控制台輸入
- 14.15 函數
- 14.15.1 系統函數
- 14.15.2 自定義函數
- 14.16 實戰練習
- 14.17 綜合案例
- 14.17.1 歸檔檔案
- 15 任務排程
- 16 rpm和yum
- 17 搭建javaee運作環境
1 前言
1.1 課程介紹
1.2 學習方向
1.3 應用領域
個人桌面領域
此領域是傳統 linux 應用最薄弱的環節,傳統 linux 由于界面簡單、操作複雜、應用軟體少的缺點,一直被 windows 所壓制,但近些年來随着 ubuntu、fedora、Debian、Manjaro等優秀桌面環境的興起,同時各大硬體廠商對其支援的加大,linux 在個人桌面領域的占有率在逐漸的提高。
伺服器領域
linux 在伺服器領域的應用是最強的。
linux 免費、穩定、高效等特點在這裡得到了很好的展現,近些年來 linux 伺服器市場得到了飛速的提升,尤其在一些高端領域尤為廣泛。
嵌入式領域
近些年來 linux 在嵌入式領域的應用得到了飛速的提高
linux 運作穩定、對網絡的良好支援性、低成本,且可以根據需要進行軟體裁剪,核心最小可以達到幾百 KB 等特點,使其近些年來在嵌入式領域的應用得到非常大的提高
主要應用:機頂盒、數字電視、網絡電話、程控交換機、手機、PDA、智能家居、智能硬體等都是其應用領域。以後再物聯網中應用會更加廣泛
1.4 學習階段
- linux 環境下的基本操作指令,包括 檔案操作指令(rm mkdir chmod, chown) 編輯工具使用(vi vim)linux 使用者管理(useradd userdel usermod)等
- linux 的各種配置(環境變量配置,網絡配置,服務配置)
- linux 下如何搭建對應語言的運作環境(大資料,JavaEE, Python 等)
- 能編寫 shell 腳本,對 Linux 伺服器進行維護。
- 能進行安全設定,防止攻擊,保障伺服器正常運作,能對系統調優。
- 深入了解 Linux 系統(對核心有研究),熟練掌握大型網站應用架構組成、并熟悉各個環節的部署和維護方法。
1.5 學習建議
- 高效而愉快的學習
- 先建立一個整體架構,然後細節
- 不需要掌握所有的 Linux 指令,要學會查詢手冊和百度
- 先 know how ,再 know why
- 計算機是一門”做中學”的學科,不是會了再做,而是做了才會.
- 适當的囫囵吞棗
- Linux 不是程式設計,重點是實際操作,各種常用指令要玩的溜
2 linux入門
2.1 linux簡介
- Linux 核心最初隻是由芬蘭人林納斯·托瓦茲(Linus Torvalds)在赫爾辛基大學上學時出于個人愛好而編寫的。
- Linux 是一套免費使用和自由傳播的類 Unix 作業系統,是一個基于 POSIX 和 UNIX 的多使用者、多任務、支援多線程和多 CPU 的作業系統。
- Linux 能運作主要的 UNIX 工具軟體、應用程式和網絡協定。它支援 32 位和 64 位硬體。Linux 繼承了 Unix 以網絡為核心的設計思想,是一個性能穩定的多使用者網絡作業系統。
- Linux 是一款作業系統,免費,開源, 安全,高效,穩定, 處理高并發非常強悍,現在很多的企業級的項目都部署到 Linux/unix 伺服器運作。
其核心于1991年10月5日首次釋出
2.2 linux發行版
目前市面上較知名的發行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
這些發行版的關系如下圖
2.3 和unix的關系
unix怎麼來的
2.4 linux怎麼來的
20世紀80年代,計算機硬體的性能不斷提高,PC的市場不斷擴大,當時可供計算機選用的作業系統主要有Unix、DOS和iOS這幾種。
- Unix價格昂貴,不能運作于PC;
- DOS顯得簡陋,且源代碼被軟體廠商嚴格保密;
- MacOS是一種專門用于蘋果計算機的作業系統。
此時,計算機科學領域迫切需要一個更加完善、強大、廉價和完全開放的作業系統。由于供教學使用的典型作業系統很少,是以當時在荷蘭當教授的美國人AndrewS.Tanenbaum編寫了一個作業系統,名為MINIX,為了向學生講述作業系統内部工作原理。
MINIX雖然很好,但隻是一個用于教學目的的簡單作業系統,而不是一個強有力的實用作業系統,然而最大的好處就是公開源代碼。
全世界學計算機的學生都通過鑽研MINIX源代碼來了解電腦裡運作的MINIX作業系統,芬蘭赫爾辛基大學大學二年級的學生Linus Torvalds就是其中一個,在吸收了MINIX精華的基礎上,Linus于1991年寫出了屬于自己的Linux作業系統,版本為Linux0.01,是Linux時代開始的标志。他利用Unix的核心,去除繁雜的核心程式,改寫成适用于一般計算機的x86系統,并放在網絡上供大家下載下傳,1994年推出完整的核心Version1.0,至此,Linux逐漸成為功能完善、穩定的作業系統,并被廣泛使用。
2.5 與windows比較
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-LGCtodW4-1653304158045)(file:///D:/%E5%A4%A7%E5%AD%A6/%E4%B8%9C%E8%BD%AF%E5%9F%B9%E8%AE%AD/linux%E6%95%99%E7%A8%8B_files/30a61r1n1csnkjn9d9sfgb39vj.png)]
3 安裝虛拟機和CentOS
3.1 vmware 和 centos介紹
VMWare虛拟機軟體是一個“虛拟PC”軟體,它使你可以在一台機器上同時運作二個或更多Windows、DOS、LINUX系統。與“多啟動”系統相比,VMware采用了完全不同的概念。多啟動系統在一個時刻隻能運作一個系統,在系統切換時需要重新啟動機器
下載下傳:
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.0.0-16894299.exe
CentOS是免費的、開源的、可以重新分發的開源作業系統 ,CentOS(Community Enterprise Operating System,中文意思是社群企業作業系統)是Linux發行版之一。
CentOS Linux發行版是一個穩定的,可預測的,可管理的和可複現的平台,源于Red Hat Enterprise Linux(RHEL)依照開放源代碼(大部分是GPL開源協定 )規定釋出的源碼所編譯而成。
自2004年3月以來,CentOS Linux一直是社群驅動的開源項目,旨在與RHEL在功能上相容。
下載下傳:
http://mirrors.163.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
3.2 安裝vmware
3.3 安裝centos
3.4 聯網和使用終端
3.5 設定共享目錄
4 linux目錄結構
4.1 樹狀目錄
linux 的檔案系統是采用級層式的樹狀目錄結構,在此結構中的最上層是根目錄"/",然後在此目錄下再建立其他的目錄。
深刻了解 linux樹狀檔案目錄是非常重要的,這裡我給大家說明一下。
記住一句經典的話:在 Linux 世界裡,一切皆檔案。
4.2 詳細介紹
/bin:
bin 是 Binaries (二進制檔案) 的縮寫, 這個目錄存放着最經常使用的指令。
/boot:
這裡存放的是啟動 Linux 時使用的一些核心檔案,包括一些連接配接檔案以及鏡像檔案。
/dev:
dev 是 Device(裝置) 的縮寫, 該目錄下存放的是 Linux 的外部裝置,在 Linux 中通路裝置的方式和通路檔案的方式是相同的。
/etc:
etc 是 Etcetera(等等) 的縮寫,這個目錄用來存放所有的系統管理所需要的配置檔案和子目錄。
/home:
使用者的主目錄,在 Linux 中,每個使用者都有一個自己的目錄,一般該目錄名是以使用者的賬号命名的,如上圖中的 alice、bob 和 eve。
/lib:
lib 是 Library(庫) 的縮寫這個目錄裡存放着系統最基本的動态連接配接共享庫,其作用類似于 Windows 裡的 DLL 檔案。幾乎所有的應用程式都需要用到這些共享庫。
/lost+found:
這個目錄一般情況下是空的,當系統非法關機後,這裡就存放了一些檔案。
/media:
linux 系統會自動識别一些裝置,例如U盤、光驅等等,當識别後,Linux 會把識别的裝置挂載到這個目錄下。
/mnt:
系統提供該目錄是為了讓使用者臨時挂載别的檔案系統的,我們可以将光驅挂載在 /mnt/ 上,然後進入該目錄就可以檢視光驅裡的内容了。
/opt:
opt 是 optional(可選) 的縮寫,這是給主機額外安裝軟體所擺放的目錄。比如你安裝一個ORACLE資料庫則就可以放到這個目錄下。預設是空的。
/proc:
proc 是 Processes(程序) 的縮寫,/proc 是一種僞檔案系統(也即虛拟檔案系統),存儲的是目前核心運作狀态的一系列特殊檔案,這個目錄是一個虛拟的目錄,它是系統記憶體的映射,我們可以通過直接通路這個目錄來擷取系統資訊。
這個目錄的内容不在硬碟上而是在記憶體裡,我們也可以直接修改裡面的某些檔案,比如可以通過下面的指令來屏蔽主機的ping指令,使别人無法ping你的機器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:
該目錄為系統管理者,也稱作超級權限者的使用者主目錄。
/sbin:
s 就是 Super User 的意思,是 Superuser Binaries (超級使用者的二進制檔案) 的縮寫,這裡存放的是系統管理者使用的系統管理程式。
/selinux:
這個目錄是 Redhat/CentOS 所特有的目錄,selinux 是一個安全機制,類似于 windows 的防火牆,但是這套機制比較複雜,這個目錄就是存放selinux相關的檔案的。
/srv:
該目錄存放一些服務啟動之後需要提取的資料。
/sys:
這是 Linux2.6 核心的一個很大的變化。該目錄下安裝了 2.6 核心中新出現的一個檔案系統 sysfs 。
sysfs 檔案系統內建了下面3種檔案系統的資訊:針對程序資訊的 proc 檔案系統、針對裝置的 devfs 檔案系統以及針對僞終端的 devpts 檔案系統。
該檔案系統是核心裝置樹的一個直覺反映。
當一個核心對象被建立的時候,對應的檔案和目錄也在核心對象子系統中被建立。
/tmp:
tmp 是 temporary(臨時) 的縮寫這個目錄是用來存放一些臨時檔案的。
/usr:
usr 是 unix shared resources(共享資源) 的縮寫,這是一個非常重要的目錄,使用者的很多應用程式和檔案都放在這個目錄下,類似于 windows 下的 program files 目錄。
/usr/bin:
系統使用者使用的應用程式。
/usr/sbin:
超級使用者使用的比較進階的管理程式和系統守護程式。
/usr/src:
核心源代碼預設的放置目錄。
/var:
var 是 variable(變量) 的縮寫,這個目錄中存放着在不斷擴充着的東西,我們習慣将那些經常被修改的目錄放在這個目錄下。包括各種日志檔案。
/run:
是一個臨時檔案系統,存儲系統啟動以來的資訊。當系統重新開機時,這個目錄下的檔案應該被删掉或清除。如果你的系統上有 /var/run 目錄,應該讓它指向 run。
在 Linux 系統中,有幾個目錄是比較重要的,平時需要注意不要誤删除或者随意更改内部檔案。
/etc:
上邊也提到了,這個是系統中的配置檔案,如果你更改了該目錄下的某個檔案可能會導緻系統不能啟動。
/bin, /sbin, /usr/bin, /usr/sbin: 這是系統預設的執行檔案的放置目錄,比如 ls 就是在 /bin/ls 目錄下的。
值得提出的是 /bin、/usr/bin 是給系統使用者使用的指令(除 root 外的通用使用者),而/sbin, /usr/sbin 則是給 root 使用的指令。
/var:
這是一個非常重要的目錄,系統上跑了很多程式,那麼每個程式都會有相應的日志産生,而這些日志就被記錄到這個目錄下,具體在 /var/log 目錄下,另外 mail 的預設放置也是在這裡。
5 遠端登入linux
5.1 為什麼要遠端登入
說明: 公司開發時候, 具體的情況是這樣的
- linux 伺服器是開發小組共享的.
- 正式上線的項目是運作在公網的.
- 是以程式員需要遠端登入到 centos 進行項目管理或者開發.
- 畫出簡單的網絡拓撲示意圖(幫助了解)
- 遠端登入用戶端有 Xshell, Xftp , 我們學習使用 Xshell 和 Xftp , 其它的遠端工具大同小異
5.2 安裝和使用xshell
Xshell 是目前最好的遠端登入到 Linux 操作的軟體,流暢的速度并且完美解決了中文亂碼的問題, 是目前程式員首選的軟體。
Xshell [1] 是一個強大的安全終端模拟軟體,它支援 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 協定。
Xshell 可以在 Windows 界面下用來通路遠端不同系統下的伺服器,進而比較好的達到遠端控制終端的目的。
特别說明:如果希望安裝好 XShell 就可以遠端通路 Linux 系統的話,需要有一個前提,就是Linux 啟用了 SSHD 服務,該服務會監聽 22 号端
5.3 安裝和使用xftp
Xftp是一個功能強大的SFTP、FTP 檔案傳輸軟體。使用了 Xftp 以後,MS Windows 使用者能安全地在 UNIX/Linux 和 Windows PC 之間傳輸檔案。Xftp 能同時适應初級使用者和進階使用者的需要。它采用了标準的 Windows 風格的向導,它簡單的界面能與其他 Windows 應用程式緊密地協同工作,此外它還為進階使用者提供了衆多強勁的功能特性。
5.4 開通sshd服務
監聽22端口
5.5 亂碼問題
6 關機、重新開機、登入與登出
6.1 關機與重新開機
shutdown:
shutdown -h now : 表示立即關機
shutdown -h 1 : 表示 1 分鐘後關機
shutdown
6.2 登入與登出
登入:
ssh [email protected]
切換使用者:
su - 使用者名
登出:
logout
exit
7 常用指令
7.1 檔案目錄類
pwd
cd
基本文法
cd [參數]
•功能描述:
切換到指定目錄
change directory
•常用參數
絕對路徑/xx/xx 和相對路徑 ./ ../
cd ~ 或者 cd :回到自己的家目錄
cd .. 回到目前目錄的上一級目錄
•如何了解絕對路徑和相對路徑
•應用執行個體
假設你現在/usr/lib目錄
案例 1:使用絕對路徑切換到 root 目錄
案例 2: 使用相對路徑到/root 目錄
案例 3:表示回到目前目錄的上一級目錄
案例 4:回到家目錄
ls
•基本文法
ls [選項] [目錄或是檔案]
l
•常用選項
-a :顯示目前目錄所有的檔案和目錄,包括隐藏的。
-l :以清單的方式顯示資訊
-h : 資訊的人性化顯示(human)
mkdir
•基本文法
mkdir [選項] 要建立的目錄
•功能描述:
指令用于建立目錄(make directory)
•常用選項
-p :建立多級目錄
•應用執行個體
案例 1:建立一個目錄 /home/car
案例 2:建立多級目錄 /home/animal/dog
rmdir
基本文法:
rmdir [選項] 要删除的空目錄
功能描述:
用于删除空目錄
應用執行個體:
案例 1:删除一個目錄 /home/dog
使用細節:
rmdir 删除的是空目錄,如果目錄下有内容時無法删除的。
提示:
如果需要删除非空目錄,需要使用 rm
touch
建立空檔案
•基本文法
touch 檔案名稱
•應用執行個體
案例 1: 建立一個空檔案 hello.txt
cp
拷貝檔案到指定目錄
•基本文法
cp [選項] source dest
cp 源檔案檔案夾/檔案 目标檔案夾
•常用選項
-r :遞歸複制整個檔案夾
使用細節
強制覆寫不提示的方法:\cp
rm
移除【删除】檔案或目錄
•基本文法
rm [選項]
mv
移動檔案與目錄或重命名
•基本文法
mv oldNameFile newNameFile (功能描述:重命名)
mv /temp/movefile /targetFolder (功能描述:移動檔案)
cat
檢視檔案内容,是以隻讀的方式打開。
•基本文法
cat [選項] 要檢視的檔案
•常用選項
-n :顯示行
•使用細節
cat 隻能浏覽檔案,而不能修改檔案,為了浏覽友善,一般會帶上 管道指令 | more
cat 檔案名 | more
more
more 指令是一個基于 VI 編輯器的文本過濾器,它以全螢幕的方式按頁顯示文本檔案的内容。more
指令中内置了若幹快捷鍵,詳見操作說明
•基本文法
more
less
less 指令用來分屏檢視檔案内容,它的功能與 more 指令類似,但是比 more 指令更加強大,支援各種顯示終端。less 指令在顯示檔案内容時,并不是一次将整個檔案加載之後才顯示,而是根據顯示需要加載内容,對于顯示大型檔案具有較高的效率。
•基本文法
less
echo
輸出内容到控制台。
•基本文法
echo [選項] [輸出内容]
>和>>
\> 指令 和 >> 指令
\> 輸出重定向 : 會将原來的檔案的内容覆寫
\>> 追加: 不會覆寫原來檔案的内容,而是追加到檔案的尾部。
•基本文法
ls -l > 檔案名稱 (功能描述:清單的内容寫入檔案 a.txt 中(覆寫寫)
ls -l >>
head
用于顯示檔案的開頭部分内容,預設情況下 head 指令顯示檔案的前 10 行内容
•基本文法
head 檔案名稱 (功能描述:檢視檔案頭 10 行内容)
head -n 5 檔案名稱 (功能描述:檢視檔案頭 5
tail
tail 用于輸出檔案中尾部的内容,預設情況下 tail 指令顯示檔案的後 10 行内容。
•基本文法
1) tail 檔案名稱 (功能描述:檢視檔案後 10 行内容)
2) tail -n 5 檔案名稱 (功能描述:檢視檔案後 5 行内容,5 可以是任意行數)
3) tail
ln
軟連結也叫符号連結,類似于 windows 裡的快捷方式,主要存放了連結其他檔案的路徑
•基本文法
ln -s [原檔案或目錄] [軟連結名] (功能描述:給原檔案建立一個軟連結
删除軟連結
rm -f 軟連結名
•細節說明
當我們使用 pwd
history
檢視已經執行過曆史指令,也可以執行曆史指令
•基本文法
history (功能描述:檢視已經執行過曆史指令)
•應用執行個體
history
history 10
!15
7.2 時間日期類
date
顯示目前日期
•基本文法
1) date (功能描述:顯示目前時間)
2) date +%Y (功能描述:顯示目前年份)
3) date +%m (功能描述:顯示目前月份)
4) date +%d (功能描述:顯示目前是哪一天)
5) date "+%Y-%m-%d %H:%M:%S"(功能描述:顯示年月日時分秒)
設定系統時間:
date -s "2022-5-18 13:15:16"
cal
檢視月曆指令
•基本文法
cal
cal 2022
7.3 搜尋查找類
find
find 指令将從指定目錄向下遞歸地周遊其各個子目錄,将滿足條件的檔案或者目錄顯示在終端。
•基本文法
find [搜尋範圍] [選項]
案例:
1 使用find按檔案名來查找文法:find / -name 檔案名 ,這裡可用通配符*
2 如果想按檔案的修改時間來查找可以使用-mtime參數,後面接時間參數 -代表時間内 +代表時間以前
3 如果想按檔案有大小來進行查找可以直接使用-size 參數後面加上檔案大小即可 (+n 大于 -n 小于 n 等于)
4 如果相針對檔案類型進行查找可以直接使用-type參數 ,檔案的類型有 檔案f 目錄d 裝置b,c 連結l 等
5 在查找的時候還可以把兩個查找類型進行結合起來使用,使用-a代表并且 -o代表或者
6 查找目前目錄下所有.txt檔案并列印出詳細的檔案資訊
find . -type f -name "*.txt" -exec ls -l {} \;
7 查找目前目錄下内容修改時間是30天以前的.log檔案并删除 (使用-ok會有提示)
find . -type f -name "*.log" -mtime +30 -exec rm {} \;
find . -type f -name "*.log" -mtime +30 -ok rm {} \;
7.4 locate
locaate 指令可以快速定位檔案路徑。locate 指令利用事先建立的系統中所有檔案名稱及路徑的locate 資料庫實作快速定位給定的檔案。locate 指令無需周遊整個檔案系統,查詢速度較快。為了保證查詢結果的準确度,管理者必須定期更新 locate 時刻。
locaate
•基本文法
locate 搜尋檔案
•特别說明
由于 locate 指令基于資料庫進行查詢,是以第一次運作前,必須使用 updatedb 指令建立 locate
7.6 grep和管道符号|
grep 過濾查找 , 管道符,"|",表示将前一個指令的處理結果輸出傳遞給後面的指令處理。
•基本文法
grep [選項] 查找内容 源檔案
cat a.txt | grep -n yes
7.7 壓縮和解壓類
gzip 與 gunzip
gzip 用于壓縮檔案, gunzip 用于解壓的
gzip
細節說明:
當我們使用 gzip 對檔案進行壓縮後,不會保留原來的檔案
zip 與 upzip
zip 用于壓縮檔案, unzip 用于解壓的,這個在項目打包釋出中很有用的
•基本文法
zip [選項] XXX.zip 将要壓縮的内容(功能描述:壓縮檔案和目錄的指令)
unzip [選項] XXX.zip (功能描述:解壓縮檔案)
•zip 常用選項
-r:遞歸壓縮,即壓縮目錄
•unzip 的常用選項
-d<目錄>
tar
tar 指令是打包指令,最後打包後的檔案是 .tar.gz 的檔案。
•基本文法
tar [選項] XXX.tar.gz 打包的内容 (功能描述:打包目錄,壓縮後的檔案格式.tar.gz)
7.8 幫助資訊類
man
help
help指令用于顯示shell内部的幫助資訊。help指令隻能顯示shell内部的指令幫助資訊。而對于外部指令的幫助資訊隻能使用man或者info指令檢視。
内部指令:就是shell程式的一部分,在系統啟動時就加載進入記憶體,時常駐記憶體的,是以我們執行内部指令的時候執行速度比較快
外部指令:也就是檔案系統指令,它不是shell程式組成部分,是shell程式之外的程式,使用時需要從硬碟讀取入記憶體,是以相對來說速度就慢一點。
區分内部指令和外部指令:使用type指令可以區分,如 type cd
8 使用者管理
8.1 介紹
Linux系統是一個多使用者多任務的分時作業系統,任何一個要使用系統資源的使用者,都必須首先向系統管理者申請一個賬号,然後以這個賬号的身份進入系統。
在實際的項目中,由于要涉及到多個部門共同參與(如前端、後端、資料組。。。),這時就需要為每位開發人員建立一個使用者,為了友善給不同的人配置設定不同的權限,可以将使用者分為不同的組,之後對各個組配置設定權限就很友善了。
對于建立的每一個使用者,都會在/home檔案夾下預設建立一個以使用者名命名的檔案夾,用于該使用者檔案的存放。
8.2 使用者操作
以下均是
8.3 添加使用者
useradd 使用者名 【當建立使用者成功後,會自動的建立和使用者同名的家目錄,還會建立同名的組】
useradd -d 指定目錄 新的使用者名 【為新增使用者指定家目錄】
useradd
8.4 修改密碼
passwd
注:如果沒有帶使用者名,則是給目前登入的使用者修改密碼
8.5 删除使用者
userdel 使用者名
userdel
8.6 查詢使用者資訊
id
8.7 切換使用者
文法:
su 要切換的使用者名
su
注意:
從權限高的使用者切換到權限低的使用者,不需要輸入密碼,反之需要。
當需要傳回到原來使用者時,使用 exit 指令
8.8 檢視目前登入使用者
whoami
8.9 使用者組操作
1 建立令孤沖、張無忌、任盈盈 賬号
useradd lhc
useradd zwj
useradd ryy
2 分别給設定密碼
passwd lhc
passwd zwj
passwd ryy
3 建立華山派 、武當、魔教 三個組
groupadd hs_g
groupadd wd_g
groupadd mj_g
4 令孤沖歸到華山派,張無忌-》武當, 任盈盈-》魔教
usermod -g hs_g lhc
usermod -g wd_g zwj
usermod -g mj_g ryy
5 令孤沖搬家,搬到衡山
mkdir /home/hengshan
usermod -d /home/hengshan lhc
6 令孤沖叛變,投入魔教
usermod -g mj_g lhc
7 把張無忌所在的武當組删除
userdel zwj
groupdel wd_g
8 最後看一下/etc/passwd 和 、/etc/shadow的變化
tail -n 15
8.10 新增組
groupadd
8.11 删除組
groupdel
8.12 修改使用者的組、初始目錄
usermod – g 新的組名 使用者名
usermod
8.13 使用者群組的相關檔案
/etc/passwd檔案
使用者(user)的配置檔案,記錄使用者的各種資訊
每行的含義:使用者名:密碼:使用者辨別号:組辨別号:注釋性描述:主目錄:登入 Shell
特殊賬号:
8.14 /etc/shadow
密碼配置檔案
密碼生成的算法:
8.15 /etc/group檔案
組(group)的配置檔案,記錄 Linux 包含的組的資訊
每行含義:組名:密碼:組辨別号:組内使用者清單
9 權限管理
9.1 介紹
Linux中所有内容都是以檔案的形式儲存和管理,即:一切皆檔案。
- 普通檔案是檔案。
- 目錄(在win下稱為檔案夾)是檔案。
- 硬體裝置(鍵盤、硬碟、列印機)是檔案。
Linux下有兩種使用者:超級使用者(root)、普通使用者。
- 超級使用者:可以再linux系統下做任何事情,不受限制,指令提示符是"#"
- 普通使用者:在linux下做有限的事情, 指令提示符是"$"
linux檔案對不同使用者可以分别設定權限,管理者(root)有所有權限。
檔案通路者的分類
- 檔案和檔案目錄的所有者:u—User
- 檔案和檔案目錄的所有者所在的組的使用者:g—Group
- 其它使用者:o—Others
9.2 檢視檔案類型和所有者
一般為檔案的建立者,誰建立了該檔案,就自然的成為該檔案的所有者,當然後期可以改
使用指令檢視: ls -l
9.3 權限說明
9.4 修改檔案權限-chmod
9.4.1 第一種方式:+ 、-、= 變更權限
使用chmod指令來改變檔案的權限,
注:隻有檔案的擁有者和root使用者才能調用chmod指令改變權限
u:所有者 g:所有組 o:其他人 a:所有人(u、g、o 的總和)
- chmod u=rwx,g=rx,o=x 檔案目錄名
- chmod o+w 檔案目錄名
- chmod a-x 檔案目錄名
練習:
建立haha.txt
touch haha.txt
給它設定權限:所有者有讀寫權限,同一組成員隻讀,其他人無權限
chmod o-r haha.txt
給同一組成員加上 執行權限
chmod
9.4.2 第二種方式:通過數字變更權限
規則:r=4 w=2 x=1 ,rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 檔案目錄名
相當于 chmod 751 檔案目錄名
練習1:
建立hehe.txt
設定所有者rwx , 同一組rw, 其它 r
chmo 764
練習2:
假設有一個檔案a.txt , 它的權限 731
rwx-wx--x
問題解決:
兩個使用者
chenqf
chenqf2
同屬于一個組
java_g
有這麼一個檔案( ls -lh)
-rw-r---w-. 1 chenqf java_g 11 5月 17 17:15 a.txt
此時, 使用者chenqf2擁有可讀權限,但是cat /home/chenqf/a.txt 檢視時權限,什麼原因?怎麼辦?
原因是因為:
chenqf2使用者 沒進入 chenqf家目錄的權限
怎麼辦?
讓chenqf2擁有進入chenqf家目錄的權限, 就是讓家目錄所有者的同一組成員擁有可執行權限
chmod
9.5 修改檔案所有者-chown
chown newowner file [改變檔案的所有者]
chown newowner:newgroup file [改變使用者的所有者和所有組]
9.6 修改檔案所在組-chgrp
chgrp newgroup file
實戰練習:
練習1:
- 練習檔案權限管理[課堂練習]
- 建立兩個組(神仙,妖怪)
- 建立四個使用者(唐僧, 悟空,八戒,沙僧)
- 給四個使用者設定密碼
- 把悟空,八戒放入妖怪組, 唐僧、沙僧 在神仙
- 用悟空( 切換使用者 )建立一個檔案 (monkey.java 該檔案要輸出 i am monkey) echo ‘i am monky’ > monkey.java
- 給八戒一個可以rw 的權限
- 八戒修改 monkey.java 加入一句話( i am pig)
- 設定唐僧、沙僧對該檔案沒有權限
- 把 沙僧 放入妖怪組
- 讓沙僧 修改 該檔案 monkey, 加入一句話 (“我是沙僧,我也是妖怪!”);
練習2:
- 用 root 登入,建立使用者 lucy,自己設定密碼
- 用 lucy 登入,在主目錄下建立目錄 ff/gg/hh
- 在 hh 中建立一個文本檔案 hello.txt, 向 hello.txt 輸出 hello,kitty
- 改變 hello.txt 的權限為目前使用者可讀可寫可執行,組使用者可讀可執行,其他使用者隻讀
- 删除建立立的目錄 ff/gg/hh
- 删除使用者 lucy 及其主目錄中的内容
- 重新啟動 linux 或關機
10 vi和vim
10.1 vi和vim介紹
所有的 Linux 系統都會内建 vi 文本編輯器。
Vim 具有程式編輯的能力,可以看做是 Vi 的增強版本,可以主動的以字型顔色辨識文法的正确
性,友善程式設計。代碼補完、編譯及錯誤跳轉等友善程式設計的功能特别豐富,在程式員中被廣泛使用。
10.2 三種模式
指令模式: 啟動 vim編輯器 後預設進入指令模式,該模式中主要完成如光标移動、字元串查找,以及删除、複制、粘貼檔案内容等相關操作;
編輯模式: 該模式中主要的操作就是錄入檔案内容,可以 對文本檔案正文進行修改、或者添加新的内容。處于輸入模式時,vi編輯器的最後一行會出現"–INSERT–"的狀态提示資訊;
末行模式: 該模式中可以設定vi編輯環境、儲存檔案、退出編輯器,以及對檔案内容進行查找、替換等操作。處于末行模式時,vim編輯器的最後一行會出現冒号:提示符。
10.3 各種操作說明
10.3.1 光标移動
10.3.2 複制、粘貼、删除
10.3.3 儲存檔案及退出vi編輯器
10.3.4 文本内容替換
10.3.5 檔案内容查找和撤銷編輯及儲存退出
10.4 練習遊戲:
https://vim-adventures.com/
10.5 實戰練習1:
1、 請在 /tmp 這個目錄下建立一個名為 vitest 的目錄;
2、 進入 vitest 這個目錄當中;
3、 将 /etc/man_db.conf 複制到本目錄底下(或由上述的連結下載下傳 man.config 檔案);
4、 使用 vim 開啟本目錄下的 man_db.conf 這個檔案;
5、 在 vim中設定一下行号;
6、 移動到第 58 行,向右移動10個字元
7、 移動到第一行,并且向下搜尋一下『 man 』這個字元串,請問他在第幾行?
8、 接着下來,我要将 50 到 100 行之間的『小寫 man 字元串』改為『大寫 MAN 字元串』,并且一個一個挑選是否需要修改,如何下達指令?如果在挑選過程中一直按『y』, 結果會在最後一行出現改變了幾個 man 呢?
10、 我要複制 65 到 73 這九行的内容(含有MANPATH_MAP),并且貼到最後一行之後;
11、21 到 42 行之間的開頭為 # 符号的批注資料我不要了,要如何删除?
12、将這個檔案另存成一個 man.test.config 的檔名;
13、去到第 27 行,并且删除 15 個字元,結果出現的第一個單字是什麼?
14、在第一行新增一行,該行内容輸入『I am a student…』;
15、儲存後離開吧!
1、 請在 /tmp 這個目錄下建立一個名為 vitest 的目錄;
mkdir /tmp/vitest
2、 進入 vitest 這個目錄當中;
[root@Gming ~]# cd /tmp/vitest/
[root@Gming vitest]# pwd
/tmp/vitest
3、 将 /etc/man_db.conf 複制到本目錄底下(或由上述的連結下載下傳 man.config 檔案);
[root@Gming vitest]# cp /etc/man_db.conf .
[root@Gming vitest]# ls .
man_db.conf
4、 使用 vim 開啟本目錄下的 man_db.conf 這個檔案;
[root@Gming vitest]# vim man_db.conf
5、 在 vim中設定一下行号;
進入末行模式,輸入指令 :set number 回車
6、 移動到第 58 行,向右移動 10 個字元
移動到第 58 行:指令模式輸入 58,然後敲G
行内向右移動10個字元:指令模式輸入 10,然後敲向右鍵
7、 移動到第一行,并且向下搜尋一下『 man 』這個字元串,請問他在第幾行?
gg
指令模式直接輸入:/man ,敲回車
8、 接着下來,我要将 50 到 100 行之間的『小寫 man 字元串』改為『大寫 MAN 字元串』,并且一個一個挑選是否需要修改,如何下達指令?如果在挑選過程中一直按『y』, 結果會在最後一行出現改變了幾個 man 呢?
末行模式輸入 :50,100 s/man/MAN/c
9、 修改完之後,突然反悔了,要全部複原,有哪些方法?
u是傳回上一步操作,U則是清除所有操作
10、 我要複制 65 到 73 這九行的内容(含有MANPATH_MAP),并且貼到最後一行之後;
末行模式 :65,73 co $
11、21 到 42 行之間的開頭為 # 符号的批注資料我不要了,要如何删除?
末行模式 :21,42 s/^#//
12、将這個檔案另存成一個 man.test.config 的檔名;
末行模式 :w man.test.config
13、去到第 27 行,并且删除 15 個字元,結果出現的第一個單字是什麼?
指令模式輸入27敲G到第27行,輸入15按x後檢視即可
14、在第一行新增一行,該行内容輸入『I am a student…』;
指令模式 輸入1按G到第1行,然後按O從目前光标的上一行進入插入模式,插入内容『I am a student…』
15、儲存後離開吧!
進入末行模式 :wq 儲存退出
10.6 實戰練習2:
1 複制系統/etc/services檔案到/root目錄,然後使用vim指令打開此檔案。
2 顯示該檔案的行号
3 顯示該檔案的每一行結尾的辨別符
4 替換檔案中所有的"ssh"字元串替換成"oldboy"
5 跳轉到30行,并删除此行。
6 撤銷一次你的操作。
7 當你執行了撤銷的時候,發現撤銷錯了,復原,怎麼操作。
8 給第25行到30行的行首添加一個注釋"#".寫出操作步驟。
9 删除第10行到20行的行首的注釋"#".寫出操作步驟。
1 複制系統/etc/services檔案到/root目錄,然後使用vim指令打開此檔案。
[root@Gming vitest]# cp /etc/services /root
2 顯示該檔案的行号
:set number
3 顯示該檔案的每一行結尾的辨別符
:set list
4 替換檔案中所有的"ssh"字元串替換成"oldboy"
:% s/ssh/oldboy/g
5 跳轉到30行,并删除此行。
:30 或30G
dd
6 撤銷一次你的操作。
指令模式輸入 u
7 當你執行了撤銷的時候,發現撤銷錯了,復原,怎麼操作。
Ctrl +r
8 給第25行到30行的行首添加一個注釋"#".寫出操作步驟。
:25,30 s/^/#
9 删除第10行到20行的行首的注釋"#".寫出操作步驟。
:10,20 s/^#//
10 vim編輯檔案時,非正常退出,再從新編輯檔案時,出現報錯,怎麼解決,寫出解決步驟。
在輸入vim -r services
rm
11 磁盤分區挂載
11.1 硬碟類型
對于Linux而言硬體是作為裝置來進行管理的,每個硬體裝置有對應的檔案,檔案都存儲在/dev目錄中
分區裝置的檔案名:
對于一個硬碟如果進行了分區,則在每個硬碟的檔案名後面加上數字用來指代分區,例如/dev/sda1,表示sda硬碟的第一個分區
[a-d]解釋:(a 為基本盤,b 為基本從屬盤,c 為輔助主盤,d 為輔助從屬盤)
主分區用數字1-4來指代
邏輯分區從數字5開始按順序進行指代
11.2 分區基本知識
11.2.1 mbr 分區:
1.最多支援四個主分區
2.系統隻能安裝在主分區
3.擴充分區要占一個主分區
4.MBR 最大隻支援 2TB,但擁有最好的相容性
11.2.1 gtp 分區:
1.支援無限多個主分區(但作業系統可能限制,比如 windows 下最多 128 個分區)
2.最大支援 18EB 的大容量(1EB=1024 PB,1PB=1024 TB )
3.windows7 64 位以後支援 gtp
11.3 windows和linux檢視分區格式
windows:
右擊我的電腦 -> 管理 -> 磁盤管理 -> 右擊磁盤0 -> 屬性 -> 卷
linux :
fdisk -l
parted -l
11.4 linux分區
11.4.1 原理介紹
Linux 來說無論有幾個分區,分給哪一目錄使用,它歸根結底就隻有一個根目錄,一個獨立且唯一的檔案結構 , Linux 中每個分區都是用來組成整個檔案系統的一部分。
Linux 采用了一種叫"載入"的處理方法,它的整個檔案系統中包含了一整套的檔案和目錄,且将一個分區和一個目錄聯系起來。這時要載入的一個分區将使它的存儲空間在一個目錄下獲得
11.4.2 檢視分區情況
lsblk 或者 lsblk -f
11.5 增加硬碟并挂載
11.5.1 示意圖
整體步驟:
- 虛拟機添加硬碟
- 分區 fdisk /dev/sdb
- 格式化 mkfs -t ext4 /dev/sdb1
- 挂載 先建立一個 /home/newdisk , 挂載 mount /dev/sdb1 /home/newdisk
- 設定可以自動挂載(永久挂載,當你重新開機系統,仍然可以挂載到 /home/newdisk)
11.6 具體步驟
11.6.1 虛拟機添加硬碟
- 選中 目标虛拟機 右鍵 設定
- 點選左下角添加,
- 選中硬碟,點選 下一步
- 選擇SCSI類型,點選 下一步
- 選擇 建立新虛拟磁盤,點選 下一步
- 指定 磁盤大小為10G,點選 下一步
- 點選完成
- 注意: 重新開機 才可以生效
- 重新開機後檢視是否多了一個硬碟sdb
11.6.2 分區
- fdisk /dev/sdb 開始分區
- 輸入 n , 新增分區
- 輸入 p , 開始分區, 後面按回車
- 最後 輸入 w , 儲存 且 退出
- lsblk -f 檢視是否成功
11.6.3 格式化
mkfs -t ext4 /dev/sdb1
-t :表示指定檔案系統格式為ext4
11.6.4 挂載
将 /dev/sdb1 挂載到 /home/newdisk 目錄
1 建立目錄 mkdir -p /home/newdisk
2 執行 mount /dev/sdb1 /home/newdisk 建立裝置分區和系統目錄的映射關系
3 lsblk -f 檢視是否挂載成功
如果是解除安裝:
•umount 裝置名稱 或者 挂載目錄
•例如: umount /dev/sdb1 或者 umount /newdisk
11.6.5 設定永久挂載
經過上面步驟已經挂載後了,但重新開機後發現又失效了,怎麼辦?
1: 将映射關系寫到配置檔案中 /etc/fstab
vim /etc/fstab
2: mount -a 重新加載 /etc/fstab 檔案 ;
3: 重新開機作業系統後, 測試 lsblk -f
11.7 檢視磁盤使用情況
11.8 檢視目錄占用磁盤空間情況
查詢指定目錄的磁盤占用情況,預設為目前目錄
-s 指定目錄占用大小彙總
-h 帶計量機關
-a 含檔案
--max-depth=1
11.9 統計某個目錄下檔案個數
統計/home 目錄下檔案的個數
ls -l | grep '^-' | wc
如果要統計包含的子目錄,以及子目錄的子目錄下的檔案個數怎麼辦?
11.10 統計某個目錄下子目錄個數
統計/home 目錄下子目錄的個數
ls -l | grep '^d' | wc
12 網絡配置
Bridge
Nat
only host
13 程序與服務管理
13.1 程序管理
13.2 基本介紹
- 在 LINUX 中,每個執行的程式(代碼)都稱為一個程序。每一個程序都配置設定一個 ID 号。
- 每一個程序,都會對應一個父程序,而這個父程序可以複制多個子程序。例如 www 伺服器。
- 每個程序都可能以兩種方式存在的。前台與背景,所謂前台程序就是使用者目前的螢幕上可以進行操作的。背景程序則是實際在操作,但由于螢幕上無法看到的程序,通常使用背景方式執行。
- 一般系統的服務都是以背景程序的方式存在,而且都會常駐在系統中。直到關機才才結束。
13.3 檢視系統程序
檢視進行使用的指令是 ,一般來說使用的參數是 ps -aux
-e 顯示所有程序。
-h 不顯示标題。
-l 長格式。
-w 寬輸出。
-a 顯示終端上的所有程序,包括其他使用者的程序。
-r 隻顯示正在運作的程序。
-x 顯示沒有控制終端的程序。
-f 全部列出,通常和其他選項聯用。
-u 以使用者為主的格式來顯示程式狀況
13.4 程序資訊說明
13.4.1 ps -aux
ps -aux
• USER:程序使用者
• PID :程式的id
• %CPU:占用cpu的比例
• %MEM:占用記憶體的比例
• VSZ:該程序使用的虛拟內存量(KB)
• RSS:該程序占用的固定內存量(KB)
• TTY :登入者的終端機位置若與終端無關,則顯示? 若為pts/0等,則表示由網絡連接配接主機程序。
• STAT :程序狀态
- D 不可中斷 Uninterruptible(usually IO)
- R 正在運作或在隊列中的程序
- S 處于休眠狀态
- T 停止或被追蹤
- Z 僵屍程序
- W 進入記憶體交換(從核心2.6開始無效)
- X 死掉的程序
- < 高優先級
- n 低優先級
- s 包含子程序
- + 位于背景的程序組
• START:程序開始時間
• TIME:實際使用cpu的時間
• COMMAND:所下達的是什麼指令
13.4.2 ps -ef
ps -ef | more
•UID:使用者 ID
•PID:程序 ID
•PPID:父程序 ID
•C:CPU 用于計算執行優先級的因子。數值越大,表明程序是 CPU 密集型運算,執行優先級會
降低;數值越小,表明程序是 I/O 密集型運算,執行優先級會提高
•STIME:程序啟動的時間
•TTY:完整的終端名稱
•TIME:CPU 時間
•CMD:啟動程序所用的指令和參數
13.5 終止程序
若是某個程序執行一半需要停止時,或是已消了很大的系統資源時,此時可以考慮停止該程序。
使用 kill 指令來完成此項任務。
基本文法:
- kill [選項] 程序号(功能描述:通過程序号殺死程序)
- killall 程序名稱 (功能描述:通過程序名稱殺死程序,也支援通配符,這在系統因負載過大而變得很慢時很有用)
-9 :表示強迫程序立即停止
13.6 檢視程序樹
pstree [選項] ,可以更加直覺的來看程序資訊
-p :顯示程序的 PID
-u :顯示程序的所屬使用者
13.7 服務管理
13.8 基本介紹
服務(service) 本質就是程序,但是是運作在背景的,通常都會監聽某個端口,等待其它程式的請求,比如(mysql , sshd 防火牆等),是以我們又稱為守護程序,是 Linux 中非常重要的知識點。【原理圖】
13.9 service指令
service 服務名 [start | stop | restart | reload | status]
13.10 檢視有哪些服務
- setup
- ls -l /etc/init.d
13.10.1 chkconfig
chkconfig --list 列出所有的系統服務
chkconfig --add httpd 将httpd添加為受chkconfig管理的服務:
chkconfig --del httpd 删除httpd服務
chkconfig --level 35 httpd on 在級别3和5上設定服務為“on”,開機自動啟動也是配置這個
chkconfig --level 01246 httpd off 在其他級别上設為off
為了确認你的配置被正确的修改了,我們可以列出服務将會運作的運作級别,如下所示:
#chkconfig --list httpd
httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
----------------
chkconfig 重新設定服務後自啟動或關閉,需要重新開機機器 reboot
13.11 動态監控程序
#top
- top:輸入此指令,按Enter鍵,檢視執行的程序。
- u:然後輸入“u”回車,再輸入使用者名,即可
- k:然後輸入“k”回車,再輸入要結束的程序 ID
14 shell程式設計
14.1 shell概述
14.2 什麼是shell
Shell就是使用者與Linux核心之間的解釋器,負責将使用者的指令翻譯為核心可以識别的指令。
14.3 什麼是shell腳本
Shell 腳本(shell script),是一種為 shell 編寫的腳本程式。
業界所說的 shell 通常都是指 shell 腳本,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。
14.4 誰要學習shell
Linux運維工程師:編寫Shell程式進行服務叢集管理。
Python和JavaEE程式員:編寫Shell腳本程式或者是伺服器的維護,比如編寫一個定時備份資料庫的腳本。
大資料程式員:編寫Shell程式來管理叢集。
…
14.5 有哪些shell
Shell 程式設計跟 JavaScript、php 程式設計一樣,隻要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。
Linux 的 Shell 種類衆多,常見的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
…
bash 和 sh 的關系
# cd /bin
# ll | grep bash
-rwxr-xr-x. 1 root root 941880 5 月 11 2016 bash
lrwxrwxrwx. 1 root root 4 5 月 27 2017 sh -> bash Centos
預設的解析器是 bash
# echo $SHELL /bin/bash
14.6 第1個shell腳本
vim hello.sh
說明:
#! 告訴系統這個腳本需要什麼解釋器來執行。
檔案擴充名 .sh 不是強制要求的。
- 方法1 直接運作解釋器,hello.sh 作為 Shell 解釋器的參數。此時 Shell 腳本就不需要指定解釋器資訊,第一行可以去掉。
- 方法2 hello.sh 作為可執行程式運作,Shell 腳本第一行一定要指定解釋器。
14.7 變量
定義
- Shell 變量分為系統變量和自定義變量。系統變量有PWD、$USER等,顯示目前 Shell 中所有變量:set 。
- 變量名可以由字母、數字、下劃線組成,不能以數字開頭。
基本文法
- 定義變量:變量名=變量值,等号兩側不能有空格,變量名一般習慣用大寫。
- 删除變量:unset 變量名 。
- 聲明靜态變量:readonly 變量名,靜态變量不能unset。
- 使用變量:$變量名
将指令傳回值賦給變量(重點)
- A=
反引号(``),執行裡面的指令ls
- A=$(ls) 等價于反引号
14.8 環境變量
定義
基本文法
- export 變量名=變量值,将 Shell 變量輸出為環境變量。
- source 配置檔案路徑,讓修改後的配置資訊立即生效。
- echo $變量名,檢查環境變量是否生效
14.9 位置參數變量
基本文法
- $n :$0 代表指令本身、$1-$9 代表第1到9個參數,10以上參數用花括号,如 ${10}。
- $* :指令行中所有參數,且把所有參數看成一個整體。
- $@ :指令行中所有參數,且把每個參數區分對待。
- $# :所有參數個數。
執行個體:
編寫 Shell 腳本 positionPara.sh ,輸出指令行輸入的各個參數資訊。
#!/bin/bash
# 輸出各個參數
echo $0 $1 $2
echo $*
echo $@
echo 參數個數=$#
運作:
chmod +x positionPara.sh
./positionPara.sh 10 20
運作結果:
./positionPara.sh 10 20
10 20
10 20
參數個數=2
14.10 預定義變量
定義
在指派定義之前,事先在 Shell 腳本中直接引用的變量。
基本文法
- $$ :目前程序的 PID 程序号。
- $! :背景運作的最後一個程序的 PID 程序号。
- $? :最後一次執行的指令的傳回狀态,0為執行正确,非0執行失敗。
執行個體:
編寫 Shell 腳本 prePara.sh ,輸出指令行輸入的各個參數資訊。
#!/bin/bash
echo 目前的程序号=$$
# &:以背景的方式運作程式
./hello.sh &
echo 最後一個程序的程序号=$!
echo 最後執行的指令結果=$?
運作結果:
目前的程序号=41752
最後一個程序的程序号=41753
最後執行的指令結果=0 # hello world!
14.11 運算符
基本文法
- $((運算式)) 或 $[運算式]
- expr m + n 注意 expr 運算符間要有空格
- expr m - n
- expr *,/,% 分别代表乘,除,取餘
執行個體
# 第1種方式 $(())
echo $(((2+3)*4))
# 第2種方式 $[],推薦
echo $[(2+3)*4]
# 使用 expr
TEMP=`expr 2 + 3`
echo `expr $TEMP \* 4
14.12 條件判斷
基本文法
[ condition ] 注意condition前後要有空格。非空傳回0,0為 true,否則為 false 。
執行個體
#!/bin/bash
if [ 'test01' = 'test' ]
then
echo '等于'
fi
# 20是否大于10
if [ 20 -gt 10]
then
echo '大于'
fi
# 是否存在檔案/root/shell/a.txt
if [ -e /root/shell/a.txt ]
then
echo '存在'
fi
if [ 'test02' = 'test02' ] && echo 'hello' || echo 'world' ]
then
echo '條件滿足,執行後面的語句'
fi
運作結果:
大于
hello
條件滿足,執行後面的語句
14.13 流程控制
14.13.1 if判斷
基本文法
if [ 條件判斷式 ];then
程式
fi
# 或者(推薦)
if [ 條件判斷式 ]
then
程式
elif [ 條件判斷式 ]
then
程式
fi
執行個體e
編寫 Shell 程式:如果輸入的參數大于60,輸出“及格”,否則輸出“不及格”。
#!/bin/bash
if [ $1 -ge 60 ]
then
echo 及格
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
14.13.2 case分支
基本文法
case $變量名 in
"值1")
如果變量值等于值1,則執行此處程式1
;;
"值2")
如果變量值等于值2,則執行此處程式2
;;
...省略其它分支...
*)
如果變量值不等于以上列出的值,則執行此處程式
;;
esac
執行個體
當指令行參數為1時輸出“周一”,2時輸出“周二”,其他情況輸出“其它”。
case $1 in
"1")
echo 周一
;;
"2")
echo 周二
;;
*)
echo 其它
;;
esac
14.13.3 for 循環
基本文法
# 文法1
for 變量名 in 值1 值2 值3...
do
程式
done
# 文法2
for ((初始值;循環控制條件;變量變化))
do
程式
done
執行個體
1.列印指令行輸入的參數。
#!/bin/bash
# 使用$*
for i in "$*"
do
echo "the arg is $i"
done
echo "=================="
# 使用$@
for j in "$@"
do
echo "the arg is $j"
done
運作結果(回顧一下 $* 和 $@ 的差別):
the arg is 1 2 3
==================
the arg is 1
the arg is 2
the arg is 3
- 輸出從1加到100的值。
#!/bin/bash
SUM=0
for ((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo $SUM
14.13.4 while 循環
基本文法
while [ 條件判斷式 ]
do
程式
done
執行個體
輸出從1加到100的值。
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo $SUM
14.14 讀取控制台輸入
基本文法
- read(選項)(參數)
- 選項
- -p:指定讀取值時的提示符
- -t:指定讀取值時等待的時間(秒),如果沒有在指定時間内輸入,就不再等待了。
參數
變量名:讀取值的變量名
執行個體
讀取控制台輸入一個num值。
#!/bin/bash
read -p "請輸入一個數num1=" NUM1
echo "你輸入num1的值是:$NUM1"
read -t 10 -p "請在10秒内輸入一個數num2=" NUM2
echo "你輸入num2的值是:$NUM2"
運作結果:
請輸入一個數num1=10
你輸入num1的值是:10
請在10秒内輸入一個數num2=20
你輸入num2的值是:20
14.15 函數
14.15.1 系統函數
basename,删掉路徑最後一個 / 前的所有部分(包括/),常用于擷取檔案名。
基本文法
- basename [pathname] [suffix]
- basename [string] [suffix]
- 如果指定 suffix,也會删掉pathname或string的字尾部分。
執行個體
# basename /usr/bin/sort
sort
# basename include/stdio.h
# basename include/stdio.h .h
dirname,删掉路徑最後一個 / 後的所有部分(包括/),常用于擷取檔案路徑。
基本文法
- dirname pathname
- 如果路徑中不含 / ,則傳回 ‘.’ (目前路徑)。
執行個體
# dirname /usr/bin/
# dirname dir1/str dir2/str
# dirname stdio.h
.
14.15.2 自定義函數
[ function ] funname[()]
{
Action;
[return int;]
}
# 調用
funname 參數1 參數2...
執行個體
計算輸入兩個參數的和。
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "sum=$SUM"
}
read -p "請輸入第一個參數n1:" n1
read -p "請輸入第二個參數n2:" n2
# 調用 getSum 函數
getSum $n1 $n2
14.16 實戰練習
1 編寫一個 Shell 程式 mkf,此程式的功能是:顯示 root 下的檔案資訊,然後建立一個 kk 的檔案夾,進入該檔案夾下建立一個檔案 aa,修改此檔案的權限為可執行
2 判斷目前系統上是否有使用者的預設shell為bash;
如果有,就顯示有多少個這類使用者;否則,就顯示沒有這類使用者;
3 給定一個檔案,比如/etc/inittab
判斷這個檔案中是否有空白行;
如果有,則顯示其空白行數;否則,顯示沒有空白行。
4 編寫shell腳本,列印乘法口訣表
5 循環接收使用者輸入的一個年份,寫一個函數判斷是否是閏年,當使用者輸入q時退出
14.17 綜合案例
14.17.1 歸檔檔案
實際生産應用中,往往需要對重要資料進行歸檔備份。
需求:
實作一個每天對指定目錄歸檔備份的腳本,輸入一個目錄名稱(末尾不帶/), 将目錄下所有檔案按天歸檔儲存,并将歸檔日期附加在歸檔檔案名上,放在/root/archive 下。
這裡用到了歸檔指令:tar
後面可以加上-c 選項表示歸檔,加上-z 選項表示同時進行壓縮,得到的檔案字尾名 為.tar.gz。
腳本實作如下:
#!/bin/bash
# 首先判斷輸入參數個數是否為1
if [ $# -ne 1 ]
then
echo "參數個數錯誤!應該輸入一個參數,作為歸檔目錄名"
exit
fi
# 從參數中擷取目錄名稱
if [ -d $1 ]
then
echo
else
echo
echo "目錄不存在!"
echo
exit
fi
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)
# 擷取目前日期
DATE=$(date +%y%m%d)
# 定義生成的歸檔檔案名稱
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE
# 開始歸檔目錄檔案
echo "開始歸檔..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then
echo
echo "歸檔成功!"
echo "歸檔檔案為:$DEST"
echo
else
echo "歸檔出現問題!"
echo
fi
exit
15 任務排程
16 rpm和yum
17 搭建javaee運作環境
`
14.13.4 while 循環
基本文法
while [ 條件判斷式 ]
do
程式
done
執行個體
輸出從1加到100的值。
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo $SUM
14.14 讀取控制台輸入
基本文法
- read(選項)(參數)
- 選項
- -p:指定讀取值時的提示符
- -t:指定讀取值時等待的時間(秒),如果沒有在指定時間内輸入,就不再等待了。
參數
變量名:讀取值的變量名
執行個體
讀取控制台輸入一個num值。
#!/bin/bash
read -p "請輸入一個數num1=" NUM1
echo "你輸入num1的值是:$NUM1"
read -t 10 -p "請在10秒内輸入一個數num2=" NUM2
echo "你輸入num2的值是:$NUM2"
運作結果:
請輸入一個數num1=10
你輸入num1的值是:10
請在10秒内輸入一個數num2=20
你輸入num2的值是:20
14.15 函數
14.15.1 系統函數
basename,删掉路徑最後一個 / 前的所有部分(包括/),常用于擷取檔案名。
基本文法
- basename [pathname] [suffix]
- basename [string] [suffix]
- 如果指定 suffix,也會删掉pathname或string的字尾部分。
執行個體
# basename /usr/bin/sort
sort
# basename include/stdio.h
# basename include/stdio.h .h
dirname,删掉路徑最後一個 / 後的所有部分(包括/),常用于擷取檔案路徑。
基本文法
- dirname pathname
- 如果路徑中不含 / ,則傳回 ‘.’ (目前路徑)。
執行個體
# dirname /usr/bin/
# dirname dir1/str dir2/str
# dirname stdio.h
.
14.15.2 自定義函數
[ function ] funname[()]
{
Action;
[return int;]
}
# 調用
funname 參數1 參數2...
執行個體
計算輸入兩個參數的和。
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "sum=$SUM"
}
read -p "請輸入第一個參數n1:" n1
read -p "請輸入第二個參數n2:" n2
# 調用 getSum 函數
getSum $n1 $n2
14.16 實戰練習
1 編寫一個 Shell 程式 mkf,此程式的功能是:顯示 root 下的檔案資訊,然後建立一個 kk 的檔案夾,進入該檔案夾下建立一個檔案 aa,修改此檔案的權限為可執行
2 判斷目前系統上是否有使用者的預設shell為bash;
如果有,就顯示有多少個這類使用者;否則,就顯示沒有這類使用者;
3 給定一個檔案,比如/etc/inittab
判斷這個檔案中是否有空白行;
如果有,則顯示其空白行數;否則,顯示沒有空白行。
4 編寫shell腳本,列印乘法口訣表
5 循環接收使用者輸入的一個年份,寫一個函數判斷是否是閏年,當使用者輸入q時退出
14.17 綜合案例
14.17.1 歸檔檔案
實際生産應用中,往往需要對重要資料進行歸檔備份。
需求:
實作一個每天對指定目錄歸檔備份的腳本,輸入一個目錄名稱(末尾不帶/), 将目錄下所有檔案按天歸檔儲存,并将歸檔日期附加在歸檔檔案名上,放在/root/archive 下。
這裡用到了歸檔指令:tar
#!/bin/bash
# 首先判斷輸入參數個數是否為1
if [ $# -ne 1 ]
then
echo "參數個數錯誤!應該輸入一個參數,作為歸檔目錄名"
exit
fi
# 從參數中擷取目錄名稱
if [ -d $1 ]
then
echo
else
echo
echo "目錄不存在!"
echo
exit
fi
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)
# 擷取目前日期
DATE=$(date +%y%m%d)
# 定義生成的歸檔檔案名稱
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE
# 開始歸檔目錄檔案
echo "開始歸檔..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then
echo
echo "歸檔成功!"
echo "歸檔檔案為:$DEST"
echo
else
echo "歸檔出現問題!"
echo
fi
exit