Linux命令整理,用戶管理,用戶組管理,系統管理,目錄管理常用命令
學習目標
-
能夠知道什麼是Linux系統以及它的應用場景
-
-
能夠獨立完成安裝CentOS以及遠程終端SecureCRT
-
能夠熟練編寫賬戶管理、用戶組的增刪改查和添加命令
-
能夠熟練編寫系統管理的常用命令
-
能夠熟練編寫目錄常用命令
-
能夠熟練編寫權限常用命令
-
能夠知道用戶組實際應用場景
1 初識Linux
在前面的課程中,我們無論是開發、測試。部署、存儲都在Windwos操作系統的環境中,從今天開始我們一起學習下Linux,Linux系統和Windows系統最大的區別就是圖形化界面操作和用途上有所差異,除了這兩點,兩者有異曲同工之妙,在國內, Linux 系統更多的是應用於服務器上,而桌面操作系統更多使用的是 Windows,也就是說Linux與Windows一樣,同樣也是操作系統只是在使用以及應用上有所差異,其他都是一樣的;
因為Linux也是操作系統
所以在正式進入Linux學習之前,我們先簡單的學習操作系統的知識,然後在講解Linux
1.1 操作系統
操作系統(Operation System, OS),是管理
操作系統作為接口的示意圖:
如上圖所示,在操作系統的最上層是用戶,中間層是操作系統(裏面可能裝了很多的應用程序),最下層是硬件的支撐,包含CPU/內存/硬盤等
這就是一個完成的操作系統結構圖
主流操作系統按照應用領域的劃分
1、桌面操作系統
-
Window 系列
-
用戶群體大
-
-
macOS
-
細節處理的更好, 沒有windows軟件豐富, 價格高
-
-
Linux
-
應用軟件少
-
2、服務器操作系統
-
Linux
-
安全、穩定、免費
-
佔有率高
-
-
Windows Server
-
付費
-
佔有率低
-
3、嵌入式操作系統
Linux
4、移動設備操作系統
-
IOS
-
Android (基於Linux)
-
華為鴻蒙(基於linux)
1.2 Linux發展歷程
引子
在上面,我們學習了操作系統的知識,也知道了主流操作系統按照應用領域劃分了四個類型的操作系統,其中Linux操作系統在四個領域都有提名,因為它是至今開源序列最好的操作系統,下面,我們就一起看下Linux的發展歷程,看看它是怎麼誕生的...
1984年,Andrew S.Tanenbaum 開發了用於教學的Unix系統,命名為Minix,但是僅僅用於教學 1989年,Andrew S.Tanenbaum將Minix系統運行於x86的pc平台 1990年,芬蘭赫爾辛基大學學生Linus Torvalds首次接觸Minix系統 1991年,Linus Torvalds開始在Minix上編寫各種驅動程序等操作系統內核組件 1991年年底,Linus Torvalds公開了Linux內核源碼0.02版,僅僅是內核 1994年,Linux 1.0版本發行,Linux轉向GPL版權協議 至此,Linux開始盛行開來…
Linux 內核最初是由李納斯•托瓦茲(Linus Torvalds)在赫爾辛基大學讀書時出於個人愛好而編寫的,當時他覺得教學用的迷你版 Unix操作系統 Minix 太難用了,於是決定自己開發一個操作系統。
第 1 版本於 1991 發佈,當時僅有 10 000 行代碼。
李納斯•托瓦茲沒有保留 Linux 源代碼的版權,公開了代碼,並邀請他人一起完善 Linux。與 Windows 及其他有專利權的操作系統不同,Linux 開放源代碼,任何人都可以免費使用它。
據估計,現在只有 2% 的 Linux 核心代碼是由李納斯•托瓦茲自己編寫的,雖然他仍然擁有 Linux 內核(操作系統的核心部分),並且保留了選擇新代碼和需要合併的新方法的最終裁定權。現在大家所使用的 Linux,我更傾向於說是由李納斯•托瓦茲和後來陸續加入的眾多 Linux 好者共同開發完成的。
Unix
Unix 操作系統由肯•湯普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)發明。它的部分技術來源可追溯到從 1965 年開始的 Multics 工程計劃,該計劃由貝爾實驗室、美國麻省理工學院和通用電氣公司聯合發起,目標是開發一種交互式的、具有多道程序處理能力的分時操作系統,以取代當時廣泛使用的批處理操作系統。
Unix是一個強大的多用戶、多任務操作系統。於1969年在AT&T的貝爾實驗室開發。Unix 的商標權由國際開放標準組織(The Open Group)所擁有。Unix操作系統是商業版,需要收費,價格比Microsoft Windows正版要貴一些。
1.3 Linux簡介
引子
Linux和我們常見的Windows一樣,都是操作系統,
例如:新浪、百度、淘寶等互聯網公司,他們使用的服務器全都是Linux系統;全球500強企業95%的服務器使用的都是Linux系統。
1.3.1 什麼是 Linux
Linux是一套免費使用和自由傳播的
Linux 的標誌和吉祥物是一隻名字叫做Tux(它克斯)的企鵝,Linux是基於Unix的。
Linux是一種自由和開放源碼的操作系統,存在着許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬件設備中,比如手機、平板電腦、路由器、台式計算機
Linux不僅系統性能穩定,而且是開源軟件。其核心防火牆組件性能高效、配置簡單,保證了系統的安全。在很多企業網絡中,為了追求速度和安全,Linux操作系統不僅僅是被網絡運維人員當作服務器使用,Linux既可以當作
Linux與其他操作系統相比 ,具有
1.3.2 Linux的特點
基本思想
Linux的基本思想有兩點:
第一:一切都是文件
第二:每個軟件都有確定的用途
其中第一條詳細來講就是系統中的所有都歸結為一個文件,包括
完全免費
Linux是一款免費的操作系統,用戶可以通過網絡或其他途徑免費獲得,並可以任意修改其
完全兼容POSIX1.0標準
這使得可以在Linux下通過相應的
多用戶、多任務
Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。
良好的界面
Linux同時具有字符界面和
支持多種平台
Linux可以運行在多種硬件平台上,如具有
優點
1)Linux由眾多微內核組成,其源代碼完全開源;
2)Linux繼承了Unix的特性,具有非常強大的網絡功能,其支持所有的互聯網協議,包括TCP/
3)Linux系統工具鏈完整,簡單操作就可以配置出合適的開發環境,可以簡化開發過程,減少開發中仿真工具的障礙,使系統具有較強的移植性;
1.4 Linux和Unix區別
1、開源情況
Unix 是商業化的,而 Linux 是開源的,是免費、公開源代碼的。
2、硬件適用
Unix 系統大多是與硬件配套的,也就是說,大多數Unix系統如AIX、HP-UX等是無法安裝在 x86 服務器和個人計算機上的,而 Linux則可以運行在多種硬件平台上。
可以先學習Linux後再學習Unix,因為Linux可以方便的在虛擬機上運行,防止新手的誤操作。
3、本質不同
Linux是開放源代碼的自由軟件,用戶對前者有很高的自主權,在實際的的開發是處在一個完全開放的環境之中;
而Unix是對源代碼實行知識產權保護的傳統商業軟件,用戶的開發完全是處在一個黑箱之中,只有相關的開發人員才能夠接觸的產品的原型;
Unix 誕生於 20 世紀 60 年代末,Windows 誕生於 20 世紀 80 年代中期,Linux 誕生於 20 世紀 90 年代初,可以說 Unix是操作系統中的”老大哥”,後來的 Windows 和 Linux 都參考了 Unix
1.5 Linux和Windows區別
目前國內 Linux 更多的是應用於服務器上,而桌面操作系統更多使用的是 Windows。主要區別如下
比較 | WINDOWS | LINUX |
---|---|---|
界面 | 界面統一,外殼程序固定所有 Windows 程序菜單幾乎一致,快捷鍵也幾乎相同 | 圖形界面風格依發佈版不同而不同,可能互不兼容。GNU/Linux 的終端機是從 Unix傳承下來,基本命令和操作方法也幾乎一致。 |
驅動程序 | 驅動程序豐富,版本更新頻繁。默認安裝程序裏面一般包含有該版本發佈時流行的硬件驅動程序,之後所出的新硬件驅動依賴於硬件廠商提供。對於一些老硬件,如果沒有了原配的驅動有時很難支持。另外,有時硬件廠商未提供所需版本的 Windows 下的驅動,也會比較頭痛。 | 由志願者開發,由 Linux 核心開發小組發佈,很多硬件廠商基於版權考慮並未提供驅動程序,儘管多數無需手動安裝,但是涉及安裝則相對複雜,使得新用戶面對驅動程序問題(是否存在和安裝方法)會一籌莫展。但是在開源開發模式下,許多老硬件儘管在Windows下很難支持的也容易找到驅動。HP、Intel、AMD 等硬件廠商逐步不同程度支持開源驅動,問題正在得到緩解。 |
使用 | 使用比較簡單,容易入門。圖形化界面對沒有計算機背景知識的用戶使用十分有利。 | 圖形界面使用簡單,容易入門。文字界面,需要學習才能掌握。 |
學習 | 系統構造複雜、變化頻繁,且知識、技能淘汰快,深入學習困難。 | 系統構造簡單、穩定,且知識、技能傳承性好,深入學習相對容易。 |
軟件 | 每一種特定功能可能都需要商業軟件的支持,需要購買相應的授權。 | 大部分軟件都可以自由獲取,同樣功能的軟件選擇較少。 |
Windows與Linux在其他方面的不同
開放性
所謂的開放性就是Linux 操作系統是開放源碼系統,可以對其程序進行編輯修改。而微軟的Windows 系統是受微軟版權保護,就是只能微軟內部進行開發及修改。
文件格式不同
Windows 操作系統內核是NT,而Linux 是 shell;
另外,windows 硬盤文件格式是fat32或NTFS,而Linux 需要的文件格式是ext2或ext3,該操作系統還多一個SWAP格式的交換分區
免費與收費
在中國,對個人用戶Windows 和Linux 都是免費的,對公用戶Windows 需要收費,Linux 是免費的。
技術支持
Windows 較普及。Linux 需要深度的Linux 版塊支持。
安全性
Linux 相對Windows 來說安全性更高。
開源
開源就是指對外部開放軟件源代碼。Linux 開源,而Windows並不開源。
使用習慣
Windows 放棄了dos的字符模式,主攻圖形界面,讓桌面系統更易用。Linux 字符模式運行的更好,圖形界面還只是附帶品,可有可無。
軟件與支持
Windows 下可以運行絕大部分軟件、玩99.999%的遊戲、硬件廠商近乎100%的支持。Linux 下可直接運行的軟件數量和win下比起來就是1和99的區別,而且目前選擇Linux 的人基本不會考慮玩遊戲,同時Linux 正期待更多硬件廠商的支持
1.6 Linux發行商和常見發行版
Linux發行版是由個人,自由組織,以及商業機構和志願者組織編寫。它們通常包括了其他的系統軟件和應用軟件,以及一個用來簡化系統初始安裝的安裝工具,和讓軟件安裝升級的集成管理器。大多數系統還包括了像提供GUI界面的XFree86之類的曾經運行於BSD的程序。 一個典型的Linux發行版包括:Linux內核,一些GNU程序庫和工具,命令行shell,圖形界面的桌面環境,如KDE或GNOME,並包含數千種從辦公套件,編譯器,文本編輯器到科學工具的應用軟件
Linux發行版的某些版本是不需要安裝,只需通過CD或者可啟動的USB存儲設備就能使用的版本,他們稱為LiveCD。
Linux的版本號分為兩部分:內核版本和發行版本。
1.Linux的內核版本 內核版本指的是在Linus Torvalds領導下的開發小組開發出的系統內核的版本號,通常,內核版本號的第二位是偶數表示是穩定的版本,如2.6.25;是奇數表示有一些新的東西加入,是不穩定的測試版本,如2.5.6。Linux操作系統的核心就是它的內核,Linus Torvalds和他的小組在不斷地開發和推出新內核。
任務:進程調度、內存管理、配置管理虛擬文件系統、提供網絡接口以及支持進程間通信。像所有軟件一樣,Linux的內核也在不斷升級。
2.Linux的發行版本 一個完整的操作系統不僅僅只有內核,還包括一系列為用戶提供各種服務的外圍程序。外圍程序包括GNU程序庫和工具,命令行shell,圖形界面的X Window系統和相應的桌面環境,如KDE或GNOME,並包含數千種從辦公套件,編譯器,文本編輯器到科學工具的應用軟件。所以,許多個人、組織和企業,開發了基於GNU/Linux的Linux發行版,他們將Linux系統的內核與外圍應用軟件和文檔包裝起來,並提供一些系統安裝界面和系統設置與管理工具, 這樣就構成了一個發行版本。 實際上,Linux的發行版本就是Linux內核再加上外圍的實用程序組成的一個大軟件包而已。相對於操作系統內核版本,發行版本的版本號是隨發佈者的不同而不同,與Linux系統內核的版本號是相對獨立的,例如:RedHat EnterpriseLinux 5.2的操作系統內核是Linux-2.6.18。 Linux的發行版本大體可以分為兩類:
一類是商業公司維護的發行版本
一類是社區組織維護的發行版本,前者以著名的RedHatLinux為代表,後者以Debian為代表
以下為Linux的主流版本:
目前市面上較知名的發行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等
以下是主要的發行版本
需要注意的:
下面的內容主要是介紹了下Linux發行家族以及發行版本的一些詳細信息,雖然我們當前的課程講解的是CentOS,但是其他的一些發行商、主流的發行版本比如Ubuntu、Redhat也需要讓學生多多了解下,畢竟這是Linux體系內產品線
注意
下面的文字雖然很多,但是只要讓學生知道有這麼回事即可
在下面會簡單的總結..
1、Debian 介紹
Debian名字的由來—-DebianGNU/Linux是由一個叫做伊恩·默多克(IanMurdock)在1993年發起的,他的名字以Ian開頭,他太太的名字Debra開頭三個字母是Deb。
Debian是社區類Linux的典範,是迄今為止最遵循GNU規範的Linux系統。Debian最早由 Ian Murdock於1993年創建,分為三個版本分支: stable(服務器版), testing(穩定版) 和unstable(測試版)。
2、Ubuntu介紹
Ubuntu嚴格來說不能算一個獨立的發行版本,Ubuntu是基於Debian的unstable版本加強而來,可以這麼說,Ubuntu就是一個擁有Debian所有的優點,以及自己所加強的優點的近乎完美的 Linux桌面系統。
共分三個版本:
-
基於Gnome的Ubuntu,
-
基於KDE的Kubuntu以。
-
基於Xfc的 Xubuntu。
特點是界面非常友好,容易上手,對硬件的支持非常全面,是最適合做桌面系統的Linux發行版本。穩定性,其實都差不多,難易度嘛,
Ubuntu 默認桌面環境採用 GNOME,一個 Unix和 Linux 主流桌面套件和開發平台。
Ubuntu的版本和發佈號 Ubuntu的版本號是由該次發佈的年份和月份組成,並未反映其實際版本。我們的首次發佈是在2004年10月,因此該版本為4.10。當前版本(DapperDrake)於2006年6月發佈,因此版本號為6.06 LTS。
3、Redhat
可能這是最著名的Linux版本了,Red Hat Linux已經創造了自己的品牌,越來越多的人聽說過它。Red Hat在1994年創業,當時聘用了全世界500多名員工,他們都致力於開放的源代碼體系。 Red Hat Linux是公共環境中表現上佳的服務器。它擁有自己的公司,能向用戶提供一套完整的服務,這使得它特別適合在公共網絡中使用。這個版本的Linux也使用最新的內核,還擁有大多數人都需要使用的主體軟件包。 Red Hat Linux的安裝過程也十分簡單明了。它的圖形安裝過程提供簡易設置服務器的全部信息。磁盤分區過程可以自動完成,還可以選擇GUI工具完成,即使對於 Linux新手來說這些都非常簡單。選擇軟件包的過程也與其他版本類似;用戶可以選擇軟件包種類或特殊的軟件包。系統運行起來後,用戶可以從Web站點和 Red Hat那裡得到充分的技術支持。我發現Red Hat是一個符合大眾需求的最優版本。在服務器和桌面系統中它都工作得很好。Red Hat的唯一缺陷是帶有一些不標準的內核補丁,這使得它難於按用戶的需求進行定製。 Red Hat通過論壇和郵件列表提供廣泛的技術支持,它還有自己公司的電話技術支持,後者對要求更高技術支持水平的集團客戶更有吸引力
4、Fedora
Fedora和Redhat這兩個Linux的發行版放聯繫很密切。Redhat 自9.0以後,不再發佈桌面版的,而是把這個項目與開源社區合作,於是就有了Fedora 這個 Linux 發行版。Fedora項目是由 Red Hat 贊助,由開源社區與 Red Hat 工程師合作開發的項目統稱。Fedora 的目標,是推動自由和開源軟件更快地進步。
特點: 1、 Fedora 是一個開放的、創新的、前瞻性的操作系統和平台,基於 Linux。它允許任何人自由地使用、修改和重發佈,無論現在還是將來。可運行的體系結構包括x86(即i386),x86_64 和PowerPC! 2、Fedora 可以說是Redhat 桌面版本的延續,只不過是與開源社區合作。
3、Fedora 是一個獨立的inux發行版本的操作系統。
5、centos
CentOS(Community ENTerprise Operating System)是來自於Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。由於出自同樣的源代碼,因此有些要求高度穩定性的服務器以CentOS替代商業版的Red Hat Enterprise Linux使用(我會告訴你,以為企業想省錢,運維要靠這個東西來賺錢嘛,國內運維主流是CentOS剩下版本很少)。兩者的不同,在於CentOS並不包含封閉源代碼軟件,CentOS 是一個基於Red Hat Linux 提供的可自由使用源代碼的企業級Linux發行版本。每個版本的CentOS都會獲得十年的支持(通過安全更新方式)。新版本的 CentOS 大約每兩年發行一次,而每個版本的 CentOS 會定期(大概每六個月)更新一次,以便支持新的硬件。這樣,建立一個安全、低維護、穩定、高預測性、高重複性的 Linux 環境
6、Slackware介紹
Slackware 由PatrickVolkerding(帕特里克.沃克登)創建於1992年。算起來應當是歷史最悠久的Linux發行版。儘管如此,Slackware仍然深入人心(大部分都是比較有經驗的 Linux老手)。Slackware穩定、安全,所以仍然有大批的忠實用戶。由於Slackware盡量採用原版的軟件包而不進行任何修改,所以製造新 bug的幾率便低了很多。Slackware的版本更新周期較長(大約1年),但是新版本的軟件仍然不間斷的提供給用戶下載。
7、openSUSE介紹
SUSE是德國最著名的Linux發行版,在全世界範圍中也享有較高的聲譽。SUSE自主開發的軟件包管理系統也大受好評。SUSE於2003年年末被Novell收購。SUSE在收購之後的發佈顯得比較混亂,比如9.0版本是收費的,而10.0版本(也許由於各種壓力)又免費發佈。這使得一部分用戶感到困惑,也轉而使用其它發行版本。最近還跟微軟扯到了一起。但是瑕不掩瑜,SUSE仍然是一個非常專業、優秀的發行版。
openSUSE 項目是由Novell公司資助的全球性社區計劃,旨在推進 Linux 的廣泛使用。這個計劃提供免費的openSUSE 操作系統。這裡是一個由普通用戶和開發者共同構成的社區,我們擁有一個共同的目標—創造世界上最好用的 Linux 發行版。openSUSE 是 Novell 公司發行的企業級 Linux 產品的系統基礎。
openSUSE 項目是由Novell 發起的開源社區計劃。 旨在推進 Linux 的廣泛使用。提供了自由簡單的方法來獲得世界上最好用的 Linux 發行版,SUSE Linux。openSUSE 項目為 Linux 開發者和愛好者提供了開始使用 Linux 所需要的一切。
8、中國大陸的Linux發行版
紅旗Linux(RedflagLinux) ,衝浪Linux(Xteam Linux) ,藍點Linux , GNU/Linux,OpenDesktop等等 。
9、 台灣地區的Linux發行版
鴻奇Linux
目前最著名的發行版本:Debian,ubuntu、OpenSuse(原Suse)、CentOS、fedora等。國內比較著名的紅旗Linux版本
對於上面的知識我們做下重點總結
redhat:目前,全球最大的linux發行廠商,功能全面、穩定。
Redhat 被 IBM 收購!
ubuntu:目前,是linux桌面操作系統做的最好的。
centos:免費版的redhat,centos 基於 redhat 發行版基礎之上,再重新編譯發佈的版本。
目前 centos 已經被 Redhat 公司收購,但是依然免費
1.7 Linux 應用領域
今天各種場合都有使用各種 Linux 發行版,從嵌入式設備到超級計算機,並且在服務器領域確定了地位。在企業級開發中,我們通常使用Linux作為我們的服務器。
比如:服務器系統Web應用服務器、數據庫服務器、接口服務器、DNS、FTP等等;
嵌入式系統路由器、防火牆、手機、PDA、IP 分享器、交換器、家電用品的微電腦控制器等等,高性能運算、計算密集型應用Linux有強大的運算能力。
目前 Linux 不僅在家庭與企業中使用,並且在政府中也很受歡迎。
-
巴西聯邦政府由於支持 Linux 而世界聞名。
-
有新聞報道俄羅斯軍隊自己製造的 Linux 發佈版的,做為 G.H.ost 項目已經取得成果。
-
印度的 Kerala 聯邦計劃在向全聯邦的高中推廣使用 Linux。
-
中華人民共和國為取得技術獨立,在龍芯處理器中排他性地使用 Linux。
-
在西班牙的一些地區開發了自己的 Linux 發佈版,並且在政府與教育領域廣泛使用,如 Extremadura 地區的 gnuLinEx 和 Andalusia 地區的 Guadalinex。
-
葡萄牙同樣使用自己的 Linux 發佈版 Caixa Mágica,用於 Magalh?es 筆記本電腦和 e-escola 政府軟件。
-
法國和德國同樣開始逐步採用 Linux。
1.8 Linux之CentOS
前面章節介紹了一些Linux的基本知識,前已經對Linux有了一個初步的認識,也知道了在Linux發行版中有各個家族的發行版本;比如比較知名的ubuntu、CentOS,在今天的Linux課程中我們將採用發行版CentOS作為我們Linux課程的講解內容。
CentOS,是基於 Red Hat Linux 提供的可自由使用源代碼的企業級 Linux 發行版本;是一個穩定,可預測,可管理和可複製的免費企業級計算平台
主要特點:
1.主流: 目前的Linux操作系統主要應用於生產環境,主流企業級Linux系統仍舊是RedHat或者CentOS 2.免費: RedHat 和CentOS差別不大,CentOS是一個基於Red Hat Linux 提供的可自由使用源代碼的企業級Linux發行版本 3.更新方便:CentOS獨有的yum命令支持在線升級,可以即時更新系統,不像RED HAT那樣需要花錢購買支持服務!
我們在當前課程中的環境:
Windows7 , VMware Workstation15.02, CentOS Linux release 7.6.1810
1.9 總結
當前章節主要介紹了Linux發行的主要版本(我們使用的是CentOS Linux release 7.6.1810 )、以及與Unix、Windows系統的區別;主要讓學生了解Linux是基於Unix的以及與Windows一樣,Linux也是操作系統即可。
2 系統與設置命令
在前面的兩個章節中,我們主要介紹了Linux基本知識和虛擬機的安裝,從當前章節開始,我們一起學習下Linux的基本命令,在當前章節,我們先簡單的學習下一些系統的基本命令,慢慢的由淺入深,在後面的章節中我們將學習其他的命令比如文件操作、備份壓縮等
2.1 學習命令的原因
命令我們可以理解成在Windows中我們常常為了查看ip輸入的ipconfig,在Linux中也有很多的命令,比如操作目錄、文件、網絡、磁盤等等命令
-
Linux剛面世時並沒有圖形界面, 所有的操作全靠命令完成, 如 磁盤操作、文件存取、目錄操作、進程管理、文件權限 設定等
-
在職場中,大量的 服務器維護工作 都是在 遠程 通過SSH客戶端 來完成的, 並沒有圖形界面, 所有的維護工作都需要通過命令來完成
在職場中, 作為後端程序員或者運維, 必須要或多或少的掌握一些Linux常用的終端命令
-
Linux發行版本的命令大概有200多個, 但是常用的命令只有幾十個而已
總結
學習終端命令的技巧:
- 不需要死記硬背, 對於常用命令, 記住語法是關鍵,在用的時候去查下參數選項,有的很常用的命令,用的多自然就記住了
- 不要嘗試一次學會所有的命令, 有些命令是非常不常用的,臨時遇到,就去根據語法找參數選項
2.2 Linux 用戶和用戶組管理
2.2.1 Linux賬號管理
從當前章節開始,我們正式進入CentOS的學習,我們先從簡單的命令開始,比如操作賬號、用戶組、系統管理等。
在實際使用場景中,用戶賬號的管理主要涉及到用戶賬號的添加、修改和刪除操作。
現在,我們就通過命令的方式添加用戶賬號(賬號名字可以自定義,但是是要符合書寫規範)
在操作前,確保我們的SecureCRT成功連接到了虛擬機.
下面的章節不在贅述SecureCRT,默認已經成功連接。
1) 添加用戶
我們在Windows創建賬號主要是是控制面板--用戶賬戶--創建一個新賬戶,這是在Windows創建賬戶的流程,而在Linux中,我們可以通過命令的方式進行創建賬戶
使用者權限:管理員用戶
useradd 選項 用戶名
參數說明:
-
選項:
-
-c comment 指定一段注釋性描述。
-
-d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄。
-
-g 用戶組 指定用戶所屬的用戶組。
-
-G 用戶組,用戶組 指定用戶所屬的附加組。
-
-s Shell文件 指定用戶的登錄Shell。
-
-u 用戶號 指定用戶的用戶號,如果同時有-o選項,則可以重複使用其他用戶的標識號。
-
-
用戶名:
指定新賬號的用戶名(後續我們可以使用這個用戶名進行系統登錄)。
添加用戶czbk(傳智播客的首拼)執行
useradd czbk
我們使用useradd命令創建了一個用戶czbk
useradd 可用來建立用戶帳號。帳號建好之後,再用 passwd 設定帳號的密碼。
執行如下
由上圖我們發現,我們在使用useradd新增用戶的時候,出現了權限不足,也就是說我們使用用戶itcast沒有創建用戶的權限。
我們通過管理員賬號root進行創建,首先我們從控制台中切換到root
su root
在 密碼的地方輸入我們的root密碼【root】即可進入到root用戶下。
我們在root下繼續創建czbk用戶
以下是useradd常用選項
2) 用戶口令
引子:
相當於我們在Windows系統中給個用戶更改密碼,只是我們在CentOS中是更改密碼是通過命令完成的。
用戶管理的一項重要內容是用戶口令的管理。用戶賬號剛創建時沒有口令,但是被系統鎖定,無法使用,必須為其指定口令後才可以使用
使用者權限:管理員用戶
指定和修改用戶口令的Shell命令是passwd
。超級用戶可以為自己和其他用戶指定口令,普通用戶只能用它修改自己的口令。命令的格式為:
passwd 選項 用戶名
可使用的選項:
-
-l 鎖定口令,即禁用賬號。
-
-u 口令解鎖。
-
-d 使賬號無口令。
-
-f 強迫用戶下次登錄時修改口令。
設置當前用戶的口令
passwd czbk
此處我們設置密碼和itcast賬號密碼一致,為【Itheima888】
3) 修改用戶
相當於我們在Windows系統中修改一個用戶,只是我們在CentOS中是修改用戶是通過命令完成的。
usermod 命令通過修改系統帳戶文件來修改用戶賬戶信息
修改用戶賬號就是根據實際情況更改用戶的有關屬性,如用戶號、主目錄、用戶組、登錄Shell等。
使用者權限:管理員用戶
修改已有用戶的信息使用usermod
命令,其格式如下:
usermod 選項 用戶名
下面命令將用戶czbk用戶名修改成czbk2019
usermod -l czbk2019 czbk
以下是usermod常用選項
4) 刪除用戶
相當於我們在Windows系統中刪除一個用戶,只是我們在CentOS中是刪除用戶是通過命令完成的。
假如我們其中一個用戶的賬號不再使用,可以從系統中刪除。刪除用戶賬號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。
使用者權限:管理員用戶
刪除一個已有的用戶賬號使用userdel
命令,其格式如下:
userdel 選項 用戶名
-f:強制刪除用戶,即使用戶當前已登錄;
-r:刪除用戶的同時,刪除與用戶相關的所有文件
此命令刪除用戶czbk2019
userdel czbk2019
成功刪除用戶czbk2019
以下是userdel常用選項
2.2.2 Linux用戶組
引子:
為了方便用戶管理, 提出了 組 的概念, 如下圖所示
新增一個賬戶,它默認屬於自己(賬戶)的組
比如新建賬戶【張三】,那麼它默認對應的組就是張三
一個用戶可以有一個或者多個組
假如說(如上圖),我們在企業級開發過程中,我們有多個組,其中一個開發組對應三個賬戶,張三、李四、王五、如果就像上面提到的,一個用戶默認對應一個組,那麼三個賬戶張三、李四、王五就有了三個不同的組,如果大家都操做一個文件,在進行權限分配的時候,就要對不同的三個組進行授權,顯然這樣是不合理的,因為太過繁瑣。
所以,才有了組(新建組)的概念,我們把張三、李四、王五統一放到【開發組】,在對文件授權的時候,我們只對【開發組】進行授權由此,這樣的話【張三、李四、王五】都有相等的權利操作了。
1) 增加用戶組
新增一個用戶組(組名可見名知意,符合規範即可),然後將用戶添加到組中
使用者權限:管理員用戶
groupadd 選項 用戶組
使用的選項有:
-
-g GID 指定新用戶組的組標識號(GID)。
-
-o 一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同
新增用戶組czbk-it
groupadd czbk-it
上面的命令向系統中增加了一個新組czbk-it,新組的組標識號是在當前已有的最大組標識號的基礎上加1
以下是groupadd常用選項
2) 修改用戶組
使用者權限:管理員用戶
groupmod 選項 用戶組
常用的選項有:
-
-g GID 為用戶組指定新的組標識號。
-
-o 與-g選項同時使用,用戶組的新GID可以與系統已有用戶組的GID相同。
-
-n新用戶組 將用戶組的名字改為新名字
groupmod -n czbk-it-2019 czbk-it
上面的命令將組czbk-it的組名修改為czbk-it-2019。
以下是groupmod常用選項
3) 查詢用戶所屬組
在查詢用戶所屬的用戶組前,我們先增加一個用戶ituser-groups
useradd ituser-groups
要查詢一個用戶屬於哪個用戶組,使用groups命令,其格式如下
groups 用戶名
查詢用戶ituser-groups屬於某個用戶組,執行groups命令
groups ituser-groups
由此可見,ituser-groups用戶屬於用戶組ituser-groups(用戶組默認與用戶名一樣)
4) 刪除用戶組
使用者權限:管理員用戶
要刪除一個已有的用戶組,使用groupdel命令,其格式如下
groupdel 用戶組
刪除czbk-it-2019用戶組
groupdel czbk-it-2019
刪除成功
以下是groupdel常用選項
2.2.3 將用戶添加到組
引子: 在上面我們學習如何新增用戶,也學習了如何新增用戶組,在當前的小節中,我們新建一個用戶、新建一個用戶組、然後把新建的用戶添加到新的組中 在實際開發過程中,我們通常把多個用戶按照業務需求歸併到統一的一個組中,進行有序管理
1、創建一個新的組,並添加組ID(需要切換到root用戶)
groupadd -g 8888 itbj2020group
執行效果如下
2、創建3個用戶(需要切換到root用戶)
useradd itbeijinguser1 useradd itbeijinguser2 useradd itbeijinguser3
3、將上面三個用戶添加到組itbj2020group
我們通過passwd命令將三個用戶添加到組
什麼是gpasswd:
gpasswd 是 Linux 下工作組文件 /etc/group 和 /etc/gshadow 管理工具,用於將一個用戶添加到組或者從組中刪除。
語法
gpasswd [可選項] 組名
將上面的三個用戶使用gpasswd添加到組(需要切換到root用戶)
gpasswd -a itbeijinguser1 itbj2020group gpasswd -a itbeijinguser2 itbj2020group gpasswd -a itbeijinguser3 itbj2020group
執行如下
查看用戶組下所有用戶(所有用戶)
注意
此處的grep命令我們將在文件管理章節詳細講解,這裡先使用它查看下效果
grep 'itbj2020group' /etc/group
執行效果如下(或者直接打開/etc/group文件都可以)
由上圖可知:三個用戶全部都加入到了itbj2020group組。
2.3 系統管理
系統管理,說的就是我們的CentOS系統,它不同於Windwos,CentOS是字符界面,我們需要通過命令進行操作,在當前章節,我們先從基本命令學起,比如創建用戶、設置密碼、修改用戶以及用戶組的相關操作。也為我們後面的章節打下基礎
2.3.1 日期管理
當前日期如果通過date進行設置,在系統重啟後不會保存date的設置,常用的只是通過date命令查看日期
date 可以用來顯示或設定系統的日期與時間
使用者權限:所有用戶
語法如下:
date [參數選項]
參數
-d<字符串>:顯示字符串所指的日期與時間。字符串前後必須加上雙引號; -s<字符串>:根據字符串來設置日期與時間。字符串前後必須加上雙引號; -u:顯示GMT; –help:在線幫助; –version:顯示版本信息
1、設置時間
用 -s選項可以設置系統時間,如下:
date -s "2019-12-11 16:15:00"
2、顯示時間
date
(1)UTC
協調世界時,又稱世界統一時間、世界標準時間、國際協調時間。由於英文(CUT)和法文(TUC)的縮寫不同,作為妥協,簡稱UTC。。
(2)GMT
即
外文名:Universal Time
其他外文名G.M.T.(Greenwich Mean Time)
(3)CST
北京時間 (中國國家標準時間) 北京時間是中國採用國際時區東八時區的區時作為標準時間。 北京時間並不是北京(東經116.4°)的地方時間,而是東經120°的地方時間,故東經120度地方時比北京的地方時早約14分半鐘。因為北京處於國際時區劃分中的東八區,同格林尼治時間(世界時)整整相差8小時(即北京時間=世界時+8小時),故命名為「北京時間」。東八區包括的範圍從東經112.5°到東經127.5°,以東經120°為中心線,東西各延伸7.5°,總寬度為15°的區域。 而中國幅員遼闊,東西相跨5個時區(即東五區、東六區、東七區、東八區、東九區5個時區)授時台必須建在地理中心地帶,從而也就產生了長短波授。「北京時間」與「北京當地時間」是兩個概念, 「北京時間」的發播不在北京,而在陝西蒲城(處於東七區)
(4)東八區
東八區(
總結: 上面提到了很多知識:即UTC/GMT/CST/東八區 總結一下就是,北京時間(中國國家標準時間CST)採用東八區區時,即: 協調世界時(UTC)+8 / 格林尼治時間(GMT)+8 也就是說+8後的時間才是北京時間
2.3.2 顯示用戶
logname命令用於顯示用戶名稱。
執行logname指令,它會顯示目前用戶的名稱
語法為如下:
logname [--help][--version]
參數:
-
–help 在線幫助。
-
–vesion 顯示版本信息。
顯示登錄賬號的信息
logname
2.3.3 su切換賬戶
引子: 比如我們在新增用戶、修改用戶或者操作用戶組的時候常常需要切換到管理員賬戶,這個時候,我們就可以使用su進行快速切換
su命令用於變更為其他使用者的身份,除 root 外,需要鍵入該使用者的密碼。
使用權限:所有使用者。
語法如下:
su
變更帳號為 root 並在執行 ls 指令後退出返回原使用者
su -c ls root
切換到root
su root
這樣的話,我們就進入到了root用戶下。
2.3.4 id命令
我們如果需要查看當前賬號詳細信息的時候,比如查看它的用戶id、群組id以及所屬組的時候,我們就可以使用id命令進行查看
id命令用於顯示用戶的ID,以及所屬群組的ID。
id會顯示用戶以及所屬群組的實際與有效ID。若兩個ID相同,則僅顯示實際ID。若僅指定用戶名稱,則顯示目前用戶的ID。
使用者權限:所有用戶
語法
id [-gGnru][--help][--version][用戶名稱]
參數說明:
-
-g或–group 顯示用戶所屬群組的ID。
-
-G或–groups 顯示用戶所屬附加群組的ID。
-
-n或–name 顯示用戶,所屬群組或附加群組的名稱。
-
-r或–real 顯示實際ID。
-
-u或–user 顯示用戶ID。
-
-help 顯示幫助。
-
-version 顯示版本信息。
顯示當前用戶信息
id
執行效果如下
總結
id命令參數雖然很多
但是常用的也就是id命令,不帶參數的
主要看他的uid和組信息
2.3.5 sudo執行
比如我們使用普通用戶操作用戶或者操作用戶組、以及修改網卡配置文件的時候,需要切換到root用戶才操作,此時我們可以使用sudo命令提高普通用戶的操作權限,以達到操作目的
sudo:控制用戶對系統命令的使用權限,root允許的操作。
通過sudo可以提高普通用戶的操作權限
使用者權限:普通用戶
語法如下:
sudo -V sudo -h sudo -l sudo -v sudo -k sudo -s sudo -H sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s sudo command
參數說明:
-
-V 顯示版本編號
-
-h 會顯示版本編號及指令的使用方式說明
-
-l 顯示出自己(執行 sudo 的使用者)的權限
-
-v 因為 sudo 在第一次執行時或是在 N 分鐘內沒有執行(N 預設為五)會問密碼,這個參數是重新做一次確認,如果超過 N 分鐘,也會問密碼
-
-k 將會強迫使用者在下一次執行 sudo 時問密碼(不論有沒有超過 N 分鐘)
-
-b 將要執行的指令放在背景執行
-
-p prompt 可以更改問密碼的提示語,其中 %u 會代換為使用者的帳號名稱, %h 會顯示主機名稱
-
-u username/#uid 不加此參數,代表要以 root 的身份執行指令,而加了此參數,可以以 username 的身份執行指令(#uid 為該 username 的使用者號碼)
-
-s 執行環境變數中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-
-H 將環境變數中的 HOME 指定為要變更身份的使用者HOME目錄(如不加 -u 參數就是系統管理者 root )
-
command 要以系統管理者身份(或以 -u 更改為其他人)執行的指令
sudo命令使用
sudo ls
指定root用戶執行指令
sudo -u root ls -l
修改網卡配置文件
比如,在下面的例子中,我們使用普通用戶修改網卡的配置文件,在進行保存的時候,提示我們【無法打開並寫入文件】,那麼此時,我們可以通過sudo命令來提升自己的寫入權限
執行:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
執行效果如下(保存)
然後點擊回車
那麼我們在修改上面的 命令,使用sudo進行修改
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
執行效果如下(鍵入itcast密碼)
執行保存
我們發現此時就不在報錯了
2.3.6 top命令
在企業級開發中,開發人員(運維人員也會經常使用)常常為了查看服務器上運行的程序佔用的CPU情況以及佔用內存情況,目的就是檢測我們的程序是否在正常範圍內運行
top命令用於實時顯示 process 的動態。
使用權限:所有使用者。
顯示進程信息
top
執行效果如下
各進程(任務)的狀態監控屬性解釋說明: PID — 進程id USER — 進程所有者 PR — 進程優先級 NI — nice值。負值表示高優先級,正值表示低優先級 VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA SHR — 共享內存大小,單位kb S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=殭屍進程 %CPU — 上次更新到現在的CPU時間佔用百分比 %MEM — 進程使用的物理內存百分比 TIME+ — 進程使用的CPU時間總計,單位1/100秒 COMMAND — 進程名稱(命令名/命令行)
顯示完整命令,與top命令不同的就是command屬性像是進行了命令補全
top -c
執行效果如下
顯示指定的進程信息,以下顯示進程號為6972的進程信息,CPU、內存佔用率等
top -p 6972
執行效果如下
top命令的用法很多
但是常用的就是top(不帶參數),有的時候,在進程比較多的時候,我們常常記住進程的pid,然後通過top -p pid進行查看
也就是說,top+ top -p是經常被用到的
2.3.7 ps命令
ps命令類似於我們在Windows中通過任務管理器查看進程信息
Linux ps命令用於顯示當前進程 (process) 的狀態信息
使用者權限:所有用戶
語法如下:
ps
顯示進程信息
ps -A
顯示指定用戶信息
ps -u itcast
顯示所有進程信息
ps -ef
2.3.8 kill命令
引子: 前面,我們剛剛學習完了Windows上開發,比如,我們經常遇到的要給問題就是,我們需要經常的啟動或者重啟tomcat,有的時候會報端口衝突,這個時候,我們可能就去Windows的任務管理器中去結束這個進程 那麼在Linux中我們可以通過kill命令來實現Windwos上手工結束進程的操作
Linux kill命令用於刪除執行中的程序或工作(可強制中斷)
使用者權限:所有用戶
語法如下:
kill [-s <信息名稱或編號>][程序] 或 kill [-l <信息編號>]
參數說明:
-
-l <信息編號> 若不加<信息編號>選項,則-l參數會列出全部的信息名稱。
-
-s <信息名稱或編號> 指定要送出的信息。
-
[程序] [程序]可以是程序的PID或是PGID,也可以是工作編號。
殺死一個進程
kill 15642
強制殺死進程
kill -KILL 15642
徹底殺死進程
kill -9 15642
殺死指定用戶所有進程
1.方法一 過濾出itcast用戶進程
kill -9 $(ps -ef | grep itcast)
2.方法二,直接殺死
kill -u itcast
注意
上面列舉了很多kill進程的命令
但是我們我們常用的就是kill -9命令,我們常常找到進程的pid
然後通過kill -9進行殺死進程
2.3.9 關機命令
shutdown命令可以用來進行關閉系統,並且在關機以前傳送訊息給所有使用者正在執行的程序,shutdown 也可以用來重開機
使用者權限:管理員用戶
語法如下:
shutdown [-t seconds] [-rkhncfF] time [message]
參數說明:
-
-t seconds : 設定在幾秒鐘之後進行關機程序。
-
-k : 並不會真的關機,只是將警告訊息傳送給所有使用者。
-
-r : 關機後重新開機。
-
-h : 關機後停機。
-
-n : 不採用正常程序來關機,用強迫的方式殺掉所有執行中的程序後自行關機。
-
-c : 取消目前已經進行中的關機動作。
-
-f : 關機時,不做 fcsk 動作(檢查 Linux 檔系統)。
-
-F : 關機時,強迫進行 fsck 動作。
-
time : 設定關機的時間。
-
message : 傳送給所有使用者的警告訊息。
立即關機
shutdown -h now 或者 shudown
指定1分鐘後關機,1分鐘關機並顯示警告信息
shutdown +1 「System will shutdown after 1 minutes」
指定1分鐘後重啟,並發出警告信息
shutdown –r +1 「1分鐘後關機重啟」
2.3.10 重啟命令
reboot命令用於用來重新啟動計算機
使用者權限:管理員、普通(需要驗證)用戶
語法如下:
reboot [-n] [-w] [-d] [-f] [-i]
參數:
-
-n : 在重開機前不做將記憶體資料寫回硬盤的動作
-
-w : 並不會真的重開機,只是把記錄寫到 /var/log/wtmp 檔案里
-
-d : 不把記錄寫到 /var/log/wtmp 檔案里(-n 這個參數包含了 -d)
-
-f : 強迫重開機,不呼叫 shutdown 這個指令
-
-i : 在重開機之前先把所有網絡相關的裝置先停止
開始重新啟動
reboot
重啟效果如下
此時我們的虛擬機正在重啟(別忘記使用root用戶執行)
2.3.11 who命令
在企業級開發過程中,我們使用who命令的時候常常需要快速重啟服務器,在重啟之前需要檢測下有沒有終端在連接(處理程序),如果有,可能就不會重啟(會私下詢問何時弄完,弄完後在重啟),如果沒有其他人連接,將執行快速重啟
who命令用於顯示系統中有哪些使用者正在上面,顯示的資料包含了使用者 ID、使用的終端機、從哪邊連上來的、上線時間、獃滯時間、CPU 使用量、動作等等
使用者權限:所有使用者都可使用。
語法如下:
who - [husfV] [user]
參數說明:
-
-H 或 –heading:顯示各欄位的標題信息列;
-
-i 或 -u 或 –idle:顯示閑置時間,若該用戶在前一分鐘之內有進行任何動作,將標示成”.”號,如果該用戶已超過24小時沒有任何動作,則標示出”old”字符串;
-
-m:此參數的效果和指定”am i”字符串相同;
-
-q 或–count:只顯示登入系統的帳號名稱和總人數;
-
-s:此參數將忽略不予處理,僅負責解決who指令其他版本的兼容性問題;
-
-w 或-T或–mesg或–message或–writable:顯示用戶的信息狀態欄;
-
–help:在線幫助;
-
–version:顯示版本信息
顯示當前登錄系統的用戶
who
顯示明細(標題)信息
who -H
由上圖可知,截止到現在只有itcast在線。
2.3.12 timedatectl命令
引子: timedatectl是用於控制系統時間和日期。可以用來查詢和更改系統時鐘於設定,同時可以設定和修改時區信息。 在實際開發過程中,系統時間的顯示會和實際出現不同步;我們一般為了校正服務器時間、時區的時候會使用timedatectl命令
使用者權限:所有使用者都可使用,設置時間需要管理員,下面會標註。
幾個常見的概念,進行總結如下:
顯示系統的當前時間和日期,使用命令行中的timedatectl命令
timedatectl status
執行效果如下
在上面的示例中,分別顯示時區、CST時間和UTC時間,其中,RTC time就是硬件時鐘的時間,硬件時間默認為UTC。
查看當前時區
timedatectl | grep Time 或者 timedatectl
執行效果如下
上圖顯示中國時區
查看所有可用的時區
timedatectl list-timezones
執行效果如下(下面數據沒有截全)
設置本地時區
timedatectl set-timezone "Asia/Shanghai"
執行效果如下
禁用時間同步(使用管理員賬戶)
timedatectl set-ntp false 在執行 timedatectl set-time "2019-03-11 20:45:00"
執行效果如下
注意: 如果ntp時間同步為true時無法修改時間設定,下面馬上介紹
打開ntp
timedatectl set-ntp true 在執行 timedatectl set-time "2019-03-11 20:45:00"
執行效果如下(ntp時間同步為true時無法修改時間設定)
報錯信息 如下
啟用時間同步
NTP即Network Time Protocol(網絡時間協議),是一個互聯網協議,用於同步計算機之間的系統時鐘。timedatectl實用程序可以自動同步你的Linux系統時鐘到使用NTP的遠程服務器。
要開始自動時間同步到遠程NTP服務器,在終端鍵入以下命令。
timedatectl set-ntp true
比如,在上面我們使用timedatectl set-time “2019-03-11 20:45:00″,如下圖
此時我們執行timedatectl set-ntp true,發現時間正常同步過來了如下圖
要禁用NTP時間同步,在終端鍵入以下命令
timedatectl set-ntp false
執行上面的 命令即可關閉ntp
總結
在實際使用過程中
我們經常使用timedatectl進行時區、CST、UTC的設置
2.3.13 clear命令
clear命令用於清除屏幕
使用者權限:所有使用者都可使用。
語法
clear
執行clear前
執行clear後
通過執行clear命令,就可以把緩衝區的命令全部清理乾淨了
2.3.14 exit命令
exit命令用於退出目前的shell。
執行exit可使shell以指定的狀態值退出。若不設置狀態值參數,則shell以預設值退出。狀態值0代表執行成功,其他值代表執行失敗。exit也可用在script,離開正在執行的script,回到shell。
退出碼(exit status,或exit code)的約定: 0表示成功(Zero - Success) 非0表示失敗(Non-Zero - Failure) 2表示用法不當(Incorrect Usage) 127表示命令沒有找到(Command Not Found) 126表示不是可執行的(Not an executable) >=128 信號產生
語法如下
exit [狀態值]
退出終端
# exit
exit會被經常在shell中使用
我們在明天的課程【綜合案例】中會使用到exit
2.4 總結
用戶賬號管理和用戶組是我們在實際使用過程中常用的命令,學習完創建賬號、創建組後,需要通過gpasswd命令將用戶添加到組,這也是我們學習的最終目的
系統管理的常用命令都是在開發過程中經常使用到的
3 Linux目錄管理
注意: 在下面的講解中,每個命令都有很多的參數說明(選項),我們只講其中的幾個,關鍵是讓學生掌握命令的語法;學生學習完語法後,就可以自己按照參數書寫各種命令,這也是我們最終的目的。常用命令,我們在企業級開發過程中,經常書寫的命令。會非常被容易記住,不常用的命令,只要我們學習完了語法之後,在去查找參數手冊,會非常容易的解決我們的問題,所以,每個命令不是建立在死記硬背的基礎上的,要理解語法+查找參數=解決問題
3.1 Linux 文件與目錄管理
在Linux系統中,所有的的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。 在實際開發過程中,文件的操作是非常頻繁也是非常重要的 下面的章節我們將學習下Linux系統所有的系統目錄和文件通過命令是如何進行管理的
3.1.1 目錄常用命令
-
ls: 列出目錄
-
cd: 切換目錄
-
pwd: 顯示目前的目錄
-
mkdir:創建一個新的目錄
-
rmdir:刪除一個空的目錄
-
cp: 複製文件或目錄
-
rm: 移除文件或目錄
-
mv: 移動文件與目錄或修改文件與目錄的名稱
自動補全
-
在敲出 文件/ 目錄 / 命令 的前幾個字母之後, 按下
tab
鍵 -
如果還存在其他 文件 / 目錄 / 命令, 再按一下tab鍵, 系統會提示可能存在的命令
1) ls (列出目錄)
ls命令相當於我們在Windows系統中打開磁盤、或者打開文件夾看到的目錄以及文件的明細,如下圖
【查看磁盤下的目錄與文件】
【查看文件夾下的目錄與文件】
注意:在Linux系統當中, ls 命令算是比較常用的命令
使用者權限:所有使用者都可使用。
語法如下:
ls [選項] 目錄名稱
選項與參數:
-
-a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)
-
-d :僅列出目錄本身,而不是列出目錄內的文件數據(常用)
-
-l :長數據串列出,包含文件的屬性與權限等等數據;(常用)
將根目錄下的所有文件列出來(含屬性與隱藏檔)
ls -al ~
執行效果如下
ls -l
ls -l
可以查看文件夾下文件的詳細信息, 從左到右 依次是:
-
權限(A區域), 第一個字符如果是
d
表示目錄 -
硬鏈接數(B區域), 通俗的講就是有多少種方式, 可以訪問當前目錄和文件
-
屬主(C區域), 文件是所有者、或是叫做屬主
-
屬組(D區域), 文件屬於哪個組
-
大小(E區域):文件大小
-
時間(F區域):最後一次訪問時間
-
名稱(G區域):文件的名稱
ls
總結 以上三種是經常被使用到的命令 它們之間的區別是 ls 顯示不隱藏的文件與文件夾 ls -l 顯示不隱藏的文件與文件夾的詳細信息 ls -al 顯示所有文件與文件夾的詳細信息
2) pwd顯示當前目錄
執行pwd命令相當於我們在Windows系統路徑導航欄中查看到的當前瀏覽位置信息
如下圖
pwd 是 Print Working Directory 的縮寫,也就是顯示目前所在當前目錄的命令。
使用者權限:所有使用者都可使用。
查看當前所在目錄
pwd -P
執行效果如下
3) cd (切換目錄)
Linux的cd切換目錄,相當於我們在Windows中通過鼠標或者快捷鍵點開不同的目錄
注意:在Linux系統當中, cd 命令算是比較常用的命令
cd是Change Directory的縮寫,這是用來變換工作目錄的命令
使用者權限:所有使用者都可使用。
語法如下:
cd [相對路徑或絕對路徑]
在正式學習cd命令前面,我們通過下面一個座位圖的形式講解下相對路徑和絕對路徑是怎麼表現的。
-
絕對路徑: 路徑的寫法,由根目錄 / 寫起,例如: /usr/share/doc 這個目錄。
-
相對路徑: 路徑的寫法,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: cd ../man 這就是相對路徑的寫法啦!
1、使用相對路徑定位目標
-
特徵: 相對路徑 輸入路徑時, 最前面不是以 “/” 開始的, 表示相對 當前目錄 所在的位置
-
缺點: 參照工作目錄 發生變化 相對路徑也要發生變化
需求1: 當前工作目錄是 /usr, 使用相對路徑 切換到 /usr/tmp 目錄下 需求2: 當前工作目錄是 /root, 使用相對路徑 切換到 /usr/tmp 目錄下
執行效果如下
注意: cd ~ 表示回到根目錄
2、使用絕對路徑定位目標
-
特徵: 絕對路徑 在輸入路徑時, 最前面是以
/
開始的, 表示 從 根目錄 開始的具體目錄位置 -
優點: 定位準確, 不會因為 工作目錄變化 而變化
需求1: 當前工作目錄是 /usr, 使用絕對路徑 切換到 /usr/tmp 目錄下 需求2: 當前工作目錄是 /root, 使用絕對路徑 切換到 /usr/tmp 目錄下
執行效果如下
總結
相對路徑 在輸入路徑時, 最前面不是以
/
開始的 , 表示相對 當前目錄 所在的目錄位置絕對路徑 在輸入路徑時, 最前面是以
/
開始的, 表示 從 根目錄 開始的具體目錄位置
4) mkdir(創建目錄)
引子: Linux的mkdir命令相當於我們在Windows中通過鼠標或者快捷鍵新建文件夾
mkdir命令用於建立名稱為 dirName 之子目錄
使用權限:於目前目錄有適當權限的所有使用者
語法
mkdir [-p] dirName
參數說明:
-
-p 確保目錄名稱存在,不存在的就建一個
建立一個名為jinyanlong 的子目錄
mkdir jinyanlong
執行效果如下
查看新建的 文件
在工作目錄下的 aaa目錄中,建立一個名為 bbb的子目錄。 若 aaa目錄原本不存在,則建立一個。(註:本例若不加 -p,且原本 aaa目錄不存在,則產生錯誤。)
mkdir -p aaa/bbb
執行效果如下
這裡為了顯示更直觀,我們使用了tree命令
後面在講解到yum的時候,會詳細講解
此處先使用
由上圖我們發現,aaa目錄被強制創建,裏面包含了bbb文件。
5) rmdir(刪空目錄)
Linux的rmdir命令相當於我們在Windows中通過鼠標或者快捷鍵刪除文件夾。 稍微有點不同的就是在Linux中刪除子目錄的時候,如果主目錄下沒有了目錄以及文件,會連同主目錄同時刪除了(需要寫Linux帶有P的參數)
rmdir命令刪除空的目錄
使用權限:於目前目錄有適當權限的所有使用者。
語法
rmdir [-p] dirName
參數:
-
-p 是當子目錄被刪除後使它也成為空目錄的話,則順便一併刪除。
將工作目錄下,名為 jinyanlong 的子目錄刪除 :
rmdir jinyanlong
在工作目錄下的 aaa目錄中,刪除名為 bbb的子目錄。若 bbb刪除後,aaa目錄成為空目錄,則 aaa同時也會被刪除
rmdir -p aaa/bbb
總結:
rmdir -p aaa/bbb也就是說
在刪除bbb目錄完成後,發現aaa目錄也是空目錄了,在刪除完bbb後aaa也同時被刪除了。
6) cp(文件複製)
Linux的cp命令相當於我們在Windows中通過鼠標或者快捷鍵複製文件或者目錄
cp命令主要用於複製文件或目錄。
使用權限:於目前目錄有適當權限的所有使用者
語法
cp [options] source dest
或
cp [options] source... directory
參數說明:
-
-a:此選項通常在複製目錄時使用,它保留鏈接、文件屬性,並複製目錄下的所有內容。其作用等於dpR參數組合。
-
-d:複製時保留鏈接。這裡所說的鏈接相當於Windows系統中的快捷方式。
-
-f:覆蓋已經存在的目標文件而不給出提示。
-
-i:與-f選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答”y”時目標文件將被覆蓋。
-
-p:除複製文件的內容外,還把修改時間和訪問權限也複製到新文件中。
-
-r/R:若給出的源文件是一個目錄文件,此時將複製該目錄下所有的子目錄和文件。
-
-l:不複製文件,只是生成鏈接文件。
我們將當前目錄”aaa/”下的所有目錄以及文件複製到新目錄”ccc”下,輸入如下命令:
1、數據準備
創建aaa目錄並且aaa下包含bbb目錄
mkdir -p aaa/bbb mkdir -p ccc
執行效果如下
aaa目錄下有bbb
ccc下面沒有目錄和文件
2、執行複製
cp –r aaa/* ccc
執行效果如下
我們將aaa下面的所有文件、目錄複製到了目錄c下面
總結:
用戶使用該指令複製目錄時,必須使用參數”-r”或者”-R”。
如果不加參數”-r”或者”-R”,只複製文件,而略過目錄
7) rm(刪除目錄)
Linux的rm命令相當於我們在Windows中通過鼠標或者快捷鍵刪除文件或者目錄
rm命令用於刪除一個文件或者目錄。
使用權限:於目前目錄有適當權限的所有使用者
語法
rm [options] name...
參數:
-
-i 刪除前逐一詢問確認。
-
-f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。
-
-r 將目錄及以下之檔案亦逐一刪除。
如果我們要刪除文件可以直接使用rm命令,若刪除目錄則必須配合選項”-r”,例如:
rm -r ccc
執行刪除,如下圖
注意
文件一旦通過rm命令刪除,則無法恢復,所以必須格外小心地使用該命令
如果刪除文件(比如.sh 、.txt)
直接使用rm name.txt
8) mv(移動文件)
Linux的mv命令相當於我們在Windows中通過鼠標或者快捷鍵剪切(+重命名)+粘貼文件或者目錄
mv 命令用來為文件或目錄改名、或將文件或目錄移入其它位置
語法
mv [options] source dest mv [options] source... directory
參數說明:
-
-i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;
-
-f: 在 mv 操作要覆蓋某已有的目標文件時不給任何指示;
將文件 aaa 更名為 bbb :
1、創建aaa目錄、 mkdir aaa 2、開始重命名 mv aaa bbb
執行後
將ccc目錄放入ddd目錄中。
注意,如果ddd目錄不存在,則該命令將ccc改名為ddd。
創建ccc mkdir ccc
開始移動 mv ccc/ ddd
由上圖我們發現,由於ddd目錄不存在,所以在mv的時候將ccc目錄改名為了ddd。
3.2 Linux 文件基本屬性
在Wndows系統中,我們可以選中一個文件,右鍵屬性,可以查看到這個文件的文件類型(基本信息),以及文件的權限信息,在Linux中,它是通過不同字符的排序順序來表示文件的類型以及權限所屬信息的。
Linux系統是一種典型的多用戶系統,不同的用戶處於不同的地位,擁有不同的權限。為了保護系統的安全性,Linux系統對不同的用戶訪問同一文件(包括目錄文件)的權限做了不同的規定。
下面我們就一起學習下Linux系統不同權限的文件和目錄在怎麼表示的
在Linux中我們可以使用ll或者ls –l命令來顯示一個文件的屬性以及文件所屬的用戶和組,如:
ls -l
實例中,bin文件的第一個屬性用”d”表示。”d”在Linux中代表該文件是一個目錄文件。
在Linux中第一個字符代表這個文件是目錄、文件或鏈接文件等等。
-
當為[ d ]則是目錄
-
當為[ – ]則是文件;
-
若是[ l ]則表示為鏈接文檔(link file);
-
若是[ b ]則表示為裝置文件裏面的可供儲存的接口設備(可隨機存取裝置);
-
若是[ c ]則表示為裝置文件裏面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。
接下來的字符中,以三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ – ]而已。
每個文件的屬性由左邊第一部分的10個字符來確定(如下圖)。
從左至右用0-9這些數字來表示。
第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的權限。
第4-6位確定屬組(所有者的同組用戶)擁有該文件的權限,第7-9位確定其他用戶擁有該文件的權限。
其中,第1、4、7位表示讀權限,如果用”r”字符表示,則有讀權限,如果用”-“字符表示,則沒有讀權限;
第2、5、8位表示寫權限,如果用”w”字符表示,則有寫權限,如果用”-“字符表示沒有寫權限;第3、6、9位表示可執行權限,如果用”x”字符表示,則有執行權限,如果用”-“字符表示,則沒有執行權限。
3.3 Linux文件屬主和屬組
引子: 對於一個文件來說,它都有一個特定的所有者,也就是對該文件具有所有權的用戶。 也就是所謂的屬主,它屬於哪個用戶的意思。 除了屬主,還有屬組,也就是說,這個文件是屬於哪個組的(用戶所屬的組)。 文件的【屬主】有一套【讀寫執行權限rwx】 文件的【屬組】有一套【讀寫執行權限rwx】 還有它權限,下面我們在介紹
在以上實例中,aaa文件是一個目錄文件,屬主和屬組都為 itcast,屬主有可讀、可寫、可執行的權限(rwx);與屬主同組的其他用戶有可讀可寫和可執行的權限(rwx);其他用戶也有可讀和可執行的權限(r-x)。
3.3.1 chgrp更改屬組
實際開發中我們經常會創建新建目錄和文件,一般情況下,通過命令進行新建, 在創建完成後,使用不同的用戶訪問,可能就會出現報錯,無法訪問等等問題。 然後經過一番這查找,發現該有的文件都在,大小寫也沒問題,路徑也沒問題 其實並不是這些問題。而是權限問題導致我們無法訪問!是因為一個文件默認隸屬於一個屬組,而使用其他用戶訪問這個文件肯定無法訪問(因為訪問用戶所屬的組和文件所在的不是同一個組) 那麼怎麼可以正常訪問呢?其實就是通過更改用戶組(用戶組、文件組)來解決這些問題
chgrp命令用於變更文件或目錄的所屬群組。
文件或目錄權限的的擁有者由所屬群組來管理。您可以使用chgrp指令去變更文件與目錄的所屬群組,設置方式採用群組名稱或群組識別碼皆可
為了方便初學者記憶,可以將 chgrp 理解為是 “change group” 的縮寫
語法如下
chgrp [-cfhRv][--help][--version][所屬群組][文件或目錄...] 或 chgrp [-cfhRv][--help][--reference=<參考文件或目錄>][--version][文件或目錄...]
改變文件的群組屬性
我們通過root用戶進入(如下圖),上接上面的例子
我們的aaa文件的屬主和屬組都屬於itcast(如下圖)
我們現在通過chgrp命令將文件aaa的屬組更改成root(其他也可以)
chgrp -v root aaa
執行效果如下
我們通過下面的命令查詢文件aaa的屬組是否發生了變化,執行
ls -l
由上圖我們發現,文件aaa的屬組由itcast變成了root
這樣的話,文件的屬組就發生了變化。
3.3.2 chown更改屬主和屬組**
我們為了讓一些用戶有權限查看某一文檔,比如是一個時間表,而編寫時間表的人要具有讀寫執行的權限(屬主) 我們想讓一些用戶知道這個時間表的內容,而不讓他們修改,所以我們可以把這些用戶都划到一個組(屬組),然後來修改這個文件的權限,讓用戶組可讀,這樣用戶組下面的每個用戶都是可讀的
Linux是多任務操作系統,所有的檔案皆有擁有者。利用 chown 可以將檔案的擁有者加以改變。一般來說,這個指令只有是由系統管理者(root)所使用,一般使用者沒有權限可以改變別人的檔案擁有者,也沒有權限可以自己的檔案擁有者改設為別人。只有系統管理者(root)才有這樣的權限
使用權限 : 管理員賬戶
語法如下
chown [–R] 屬主名 文件名 chown [-R] 屬主名:屬組名 文件名
我們通過root用戶進入(如下圖),上接上面的例子
我們的aaa文件的屬主屬於itcast、屬組屬於root
我們現在通過chgrp命令將文件aaa的屬主更改成root,執行
chown root aaa
效果如下
我們通過下面的命令查詢文件aaa的屬主是否發生了變化,執行
ls -l
由上圖我們發現,文件aaa的屬主和屬組都變成了root。
我們將aaa文件的擁有者與群組改回為itcast:
注意:chown命令可以更改屬主和屬組
chown itcast:itcast aaa
我們通過下面的命令查詢文件aaa的屬主是否發生了變化,執行
ls -l
由上圖可知,aaa文件的屬主和屬組都被更改回來了。
3.3.3 chmod權限命令
Linux文件屬性有兩種設置方法,一種是數字,一種是符號
Linux的文件調用權限分為三級 : 文件屬主、屬組、其他。利用 chmod 可以控制文件如何被他人所調用。
使用權限 : 所有使用者
語法
chmod [-cfvR] [--help] [--version] mode file...
參數說明
mode : 權限設定字串,格式如下
[ugoa...][[+-=][rwxX]...][,...]
解釋:
u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
+表示增加權限、- 表示取消權限、= 表示唯一設定權限。 r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
1) 數字權限
Linux文件的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限。
先複習一下剛剛上面提到的數據:文件的權限字符為:『-rwxrwxrwx』, 這九個權限是三個三個一組(owner/group/others就是所說的三個一組 )的,我們也可以使用數字來代表各個權限,各權限的分數對照表如下
各權限的數字對照表:[r]:4;[w]:2;[x]:1;[-]:0
每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx—] 分數則是:
-
owner = rwx = 4+2+1 = 7
-
group = rwx = 4+2+1 = 7
-
others= — = 0+0+0 = 0
所以等一下我們設定權限的變更時,該文件的權限數字就是770啦,變更權限的指令chmod的語法是這樣的
chmod [-R] xyz 文件或目錄
選項與參數:
-
xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-
-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更
上面的 可以表示如下
chmod -R 770 檔案或目錄
上面說了這麼多,我們舉例說明一下:
我們進入itcast用戶創建文件czbk.txt
touch as.txt
然後切換到root
比如,我們如果要將as.txt這個文件所有的權限都設定啟用
那麼命令如下:
chmod -R 777 as.txt
由此可見,as.txt的屬主權限、屬組權限、其他權限都發生了改變
由之前的【-rw-rw-r–】變成【-rwxrwxrwx】
根據前面的換算我們已經知道如何將一個文件的屬主、屬組、其他權限換算成數字了,換算成數字後,我們只需要通過chmod命令即可更改文件的權限
2) 符號權限
還有一個改變權限的方法,就是 符號權限,我們先回顧下之前提到的9個權限
-
(1)user 屬主權限
-
(2)group 屬組權限
-
(3)others 其他權限
那麼我們就可以使用 u, g, o 來代表三種身份的權限!
此外, a 則代表 all,即全部的身份。讀寫的權限可以寫成 r, w, x,也就是可以使用下表的方式來看
如果我們需要將文件權限設置為 -rwxr-xr– ,可以使用 chmod u=rwx,g=rx,o=r 文件名 來設定:
上接上面的例子,如下圖
我們將as.txt的權限設置為-rwxr-xr–
執行
chmod u=rwx,g=rx,o=r as.txt
由上圖我們發現,as.txt的權限變成了-rwxr-xr–
假如我們要將權限去掉而不改變其他已存在的權限呢?舉個例子,比如我要拿掉全部人的可讀權限,則
chmod a-r as.txt
執行如下
由此可見,as.txt的其他權限都沒有了,變成了【—】
3.4 綜合案例
在前面的章節中我們講解了用戶、用戶組、文件屬主、屬組以及權限,知識點比較零散,下面,我們就通過一個簡單小案例把這些知識點串聯起來
需求:
比如一個公司的開發團隊有三個用戶:java、erlang、golang有一個文件目錄tmp/work供他們開發,如何實現讓這三個用戶都對其具有寫權限
1、首先,我們創建三個賬戶(切換到root)
adduser java adduser erlang adduser golang
執行效果如下
2、增加用戶組
groupadd -g 8888 dev-group
執行效果如下
3、創建公共文件並設置權限
給文件/tmp/project2019/設置屬組為dev-group
mkdir /tmp/project2019 chown -R :dev-group /tmp/project2019/ 或者 chgrp -R dev-group /tmp/project2019/
執行效果如下
4、將用戶添加到組
gpasswd -a java dev-group gpasswd -a erlang dev-group gpasswd -a golang dev-group
執行效果如下
查詢dev-group組下所有用戶
grep 'dev-group' /etc/group
執行效果如下
5、切換到java用戶
切換到java用戶看看是否有寫入權限
su java
新建文件
在我們上面創建的目錄tmp/project2019/下面創建文件
mkdir java-files-new
由此發現,我們在tmp/project2019/下面創建文件發生了權限不足,我們去查看下tmp/project2019/的文件屬性,如下圖
我們在/tmp目錄下執行
ls -l
執行效果如下
我們發現目錄project2019的文件屬性為【drwxr-xr-x】
根據前面學的知識,我們拆分如下
【d】:文件類型
【rwx】:屬主
【r-x】:屬組
【r-x】:其他
現在答案就出來了,也就是說我們的屬組權限是【r-x】,只有讀和執行權限,沒有寫入權限,那麼下面我們就給project2019目錄增加寫入權限。
6、增加寫入權限
給project2019目錄增加寫入權限,執行下面的命令(前面已經學習過了)
記得切換到root下執行
chmod -R 770 project2019
執行效果如下
此時我們發現project2019目錄的屬組權限變成了【rwx】即可讀、可寫、可執行
7、切換用戶,繼續寫入
su java mkdir java-files-new ls -l
執行效果如下
由此發現,這個時候我們有了寫入權限,java-files-new文件被成功寫入
那麼,其他兩個用戶golang、erlang也是和java一個組的,他們能不能正常寫入呢,我們試試(從root切換過去)
su su erlang mkdir erlang-files-new ============================== su su golang mkdir golang-files-new ls -l
執行效果(erlang新建文件)
執行效果(golanglang新建文件)
查看所有文件
由此可見,我們組的三個用戶都成功創建了文件(擁有了寫入權限)
8、驗證結論
為了驗證上面的結論,我們新增一個用戶itbeijing
看看能否正常新建文件
useradd itbeijing su itbeijing mkdir itbeijing-files-new
執行效果如下
由上圖我們發現,我們剛剛新創建的用戶在創建文件的時候發現了權限不足。
由此說明用戶itbeijing用戶的屬組和文件的屬組不一樣,所以沒有權限。
3.5 總結
在企業級開發過程中,實際操作目錄是最經常出現的,對於目錄常用命令我們要熟練掌握並能熟練編寫 因為Linux是多用戶系統,所以權限也是非常核心和重要的,我們要熟練編寫權限(屬主、屬組、其他權限)的常用命令。
防火牆:
systemctl status firewalld查看當前防火牆狀態
systemctl stop firewalld關閉當前防火牆。