wk_01作業

計算機

介紹

電子計算機(英語:computer),亦稱電腦,是一種利用電子學原理,根據一系列指令對數據進行處理的工具。
在現代,機械計算機的應用已經完全被電子計算機所替換,其所相關的技術研究叫計算機科學,而“計算機技術”指的是將計算機科學的成果應用于工程實踐所派生的諸多技術性和經驗性成果的總合?!坝嬎銠C技術”與“計算機科學”是兩個相關而又不同的概念,它們的不同在于前者偏重于實踐而后者偏重于理論。此外,電子計算機亦被形象地稱作電腦。至于由數據為核心的研究則稱為信息技術,通常人們接觸最多的是個人計算機。

馮·諾伊曼結構

盡管計算機技術自20世紀40年代第一部電子通用計算機誕生以來以來有了令人目眩的飛速發展,但是今天計算機仍然基本上采用的是存儲程序結構,即馮·諾伊曼結構。這個結構實現了實用化的通用計算機。

馮·諾伊曼結構(英語:von Neumann architecture),也稱馮·諾伊曼模型(Von Neumann model)或普林斯頓結構(Princeton architecture),是一種將程序指令存儲器和數據存儲器合并在一起的電腦設計概念結構。

存儲程序結構將一部計算機描述成四個主要部分:算術邏輯單元、控制電路、存儲器及輸入輸出設備。這些部件通過一組一組的排線連接(特別地,當一組線被用于多種不同意圖的數據傳輸時又被稱為總線),并且由一個時鐘來驅動(當然某些其他事件也可能驅動控制電路)。

功能

概念上講,一部計算機的存儲器可以被視為一組“細胞”單元。每一個“細胞”都有一個編號,稱為地址;又都可以存儲一個較小的定長信息。這個信息既可以是指令(告訴計算機去做什么),也可以是數據(指令的處理對象)。原則上,每一個“細胞”都是可以存儲二者之任一的。

算術邏輯單元(ALU)可以被稱作計算機的大腦。它可以做兩類運算: 第一類是算術運算,比如對兩個數字進行加減法。算術運算部件的功能在ALU中是十分有限的,事實上, 一些ALU根本不支持電路級的乘法和除法運算(由是用戶只能通過編程進行乘除法運算)。第二類是比較運算,即給定兩個數, ALU對其進行比較以確定哪個更大一些。

輸入輸出系統是計算機從外部世界接收信息和向外部世界反饋運算結果的手段。對于一部標準的個人電腦,輸入設備主要有鍵盤和鼠標,輸出設備則是顯示器、打印機以及其他許多后文將要討論的可連接到計算機上的I/O設備。

控制系統將以上計算機各部分聯系起來。它的功能是從存儲器和輸入輸出設備中讀取指令和數據,對指令進行解碼, 并向ALU交付匹配指令要求的正確輸入,告知ALU對這些數據做哪些運算并將結果數據返回到何處??刂葡到y中一個重要組件就是一個用來保持跟蹤當前指令所在地址的計數器。 通常這個計數器隨著指令的執行而累加,但有時如果指令指示進行跳轉則不依此規則。

20世紀80年代以來ALU和控制單元(二者合稱中央處理器)逐漸被集成到一塊集成電路上,稱作微處理器。 這類計算機的工作模式十分直觀:在一個時鐘周期內,計算機先從存儲器中獲取指令和數據,然后執行指令,存儲數據,再獲取下一條指令。這個過程被反復執行,直至得到一個終止指令。

計算機的組成

計算機是由硬件系統(hardware system)和軟件系統(software system)兩部分組成的。而前面所說的馮·諾依曼結構就是今天我們所使用的計算機硬件系統最基本的構成,下面就介紹計算機的硬件系統。

硬件

所謂硬件系統,是指構成計算機的物理設備,即由機械、光、電、磁器件構成的具有計算、控制、存儲、輸入和輸出功能的實體部件。關于硬件系統中各部件的功能在上面已經做了介紹。

軟件

軟件(英語:software)是一系列按照特定順序組織的電腦數據和指示,是電腦中的非有形部分。電腦中的有形部分稱為硬件,由電腦的外殼及各零件及電路所組成。電腦軟件需有硬件才能運作,反之亦然,軟件和硬件都無法在不互相配合的情形下進行實際的運作。
一般來說,計算機軟件劃分為編程語言、系統軟件、應用軟件和介于這兩者之間的中間件。其中系統軟件為計算機使用提供最基本的功能,但是并不針對某一特定應用領域。而應用軟件則恰好相反,不同的應用軟件根據用戶和所服務的領域提供不同的功能。

  • 編程語言(英語:programming language),是用來定義計算機程序的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令。一種計算機語言讓程序員能夠準確地定義計算機所需要使用的數據,并精確地定義在不同情況下所應當采取的行動。

  • 應用程序是電腦軟件的主要分類之一,是指為針對用戶的某種應用目的所撰寫的軟件。

  • 系統軟件(英語:System software),主要指用來運行或控制硬件所開發的計算機軟件,如操作系統、解釋器、編譯器、數據庫管理系統、公用程序等面向開發者的軟件。

  • 中間件(英語:Middleware),又譯中間件,是提供系統軟件和應用軟件之間連接的軟件,以便于軟件各部件之間的溝通,特別是應用軟件對于系統軟件的集中的邏輯,在現代信息技術應用框架如Web服務、面向服務的體系結構等中應用比較廣泛。

操作系統

操作系統(英語:operating system,縮寫:OS)是管理計算機硬件與軟件資源的計算機程序,同時也是計算機系統的內核與基石。操作系統需要處理如管理與配置內存、決定系統資源供需的優先次序、控制輸入與輸出裝置、操作網絡與管理文件系統等基本事務。操作系統也提供一個讓使用者與系統互動的操作界面。
在當今所使用的操作系統可已分為類Unix系統和Windows系統,我們下面介紹的就是一種類Unix系統Linux。而Linux全稱應該是GNU/Linux,這是由于Linux是實現類kernel的功能,而由GNU所提供的軟件加上kernel就是我們所使用的Linux操作系統,這里我們并不區分兩者。

功能

操作系統位于底層硬件與用戶之間,是兩者溝通的橋梁。用戶可以通過操作系統的用戶界面,輸入命令。操作系統則對命令進行解釋,驅動硬件設備,實現用戶要求。以現代標準而言,一個標準PC的操作系統應該提供以下的功能:

  • 進程管理(Processing management)

  • 內存管理(Memory management)

  • 文件系統(File system)

  • 網絡通信(Networking)

  • 安全機制(Security)

  • 用戶界面(User interface)

  • 驅動程序(Device drivers)

Windows操作系統

Microsoft Windows 是微軟公司推出的一系列操作系統。它問世于1985年,起初是 MS-DOS 之下的桌面環境,其后續版本逐漸發展成為主要以個人電腦和服務器用戶設計的操作系統,并最終獲得了世界個人電腦操作系統的壟斷地位。

Windows NT抽象架構

wk_01作業QQ截圖20161203221551.png

Linux操作系統

Linux 是一種自由和開放源代碼的類UNIX操作系統。該操作系統的內核由林納斯·托瓦茲在1991年10月5日首次發布。在加上用戶空間的應用程序之后,成為Linux操作系統。Linux也是自由軟件和開放源代碼軟件發展中最著名的例子。只要遵循GNU通用公共許可證,任何個人和機構都可以自由地使用Linux的所有底層源代碼,也可以自由地修改和再發布。大多數Linux系統還包括像提供GUI的X Window之類的程序。除了一部分專家之外,大多數人都是直接使用Linux發行版,而不是自己選擇每一樣組件或自行設置。

嚴格來講,術語Linux只表示操作系統內核本身,但通常采用Linux內核來表達該意思。Linux則常用來指基于Linux內核的完整操作系統,包括GUI組件和許多其他實用工具。由于這些支持用戶空間的系統工具和庫主要由理查德·斯托曼于1983年發起的GNU計劃提供,自由軟件基金會提議將該組合系統命名為GNU/Linux,但Linux不屬于GNU計劃,這個名稱并沒有得到社區的一致認同。

通常情況下,Linux被打包成供個人計算機和服務器使用的Linux發行版,一些流行的主流Linux發布版,包括Debian(及其派生版本Ubuntu、Linux Mint)、Fedora(及其相關版本Red Hat Enterprise Linux、CentOS)和openSUSE等。Linux發行版包含Linux內核和支撐內核的實用程序和庫,通常還帶有大量可以滿足各類需求的應用程序。個人計算機使用的Linux發行版通常包含X Window和一個相應的桌面環境,如GNOME或KDE。桌面Linux操作系統常用的應用程序,包括Firefox網頁瀏覽器、LibreOffice辦公軟件、GIMP圖像處理工具等。由于Linux是自由軟件,任何人都可以創建一個匹配自己需求的Linux發行版。

Linux架構圖

wk_01作業QQ截圖20161203221223.png

Linux發行版

Linux發行版指的就是通常所說的“Linux操作系統”,它一般是由一些組織、團體、公司或者個人制作并發行的。Linux內核主要作為Linux發行版的一部分而使用。通常來講,一個Linux發行版包括Linux內核,以及將整個軟件安裝到電腦上的一套安裝工具,還有各種GNU軟件,和其他的一些自由軟件,在一些Linux發行版中可能會包含一些專有軟件。發行版為許多不同的目的而制作,包括對不同電腦硬件結構的支持,對普通用戶或開發者使用方式的調整,針對實時應用或嵌入式系統的開發等等。

一個典型的發行版包括:Linux內核,GNU庫和各種系統工具,命令行Shell,圖形界面底層的X窗口系統和上層的桌面環境等。桌面環境有如KDE或GNOME等,并包含數千種從辦公包,編譯器,文本編輯器,小游戲,兒童教育軟件,到科學工具的應用軟件。

基于Fedora

  • CentOS(Community Enterprise Operating System)是Linux發行版之一,它是來自于Red Hat Enterprise Linux依照開放源代碼規定發布的源代碼所編譯而成。由于出自同樣的源代碼,因此有些要求高度穩定性的服務器以CentOS替代商業版的Red Hat Enterprise Linux使用。兩者的不同,在于CentOS并不包含封閉源代碼軟件。CentOS 對上游代碼的主要修改是為了移除不能自由使用的商標。2014年,CentOS宣布與Red Hat合作,但CentOS將會在新的委員會下繼續運作,并不受RHEL的影響。

  • Fedora Linux 是較具知名度的Linux發行包之一,由Fedora項目社區開發、紅帽公司贊助,目標是創建一套新穎、多功能并且自由(開放源代碼)的操作系統。Fedora基于Red Hat Linux。在Red Hat Linux終止發行后,紅帽公司項目以Fedora來替換Red Hat Linux在個人領域的應用,而另外發行的Red Hat Enterprise Linux(Red Hat企業版Linux)則替換Red Hat Linux在商業應用的領域。Fedora對于用戶而言,是一套功能完備、更新快速的免費操作系統;而對贊助者Red Hat公司而言,它是許多新技術的測試平臺,被認為可用的技術最終會加入到Red Hat Enterprise Linux中。Fedora大約每六個月發布新版本。

  • Red Hat Enterprise Linux(RHEL)是一個由 Red Hat 開發的商業市場導向的 Linux 發行版。紅帽公司從 Red Hat Enterprise Linux 5 開始對企業版 LINUX 的每個版本提供 10 年的支持。Red Hat Enterprise Linux 常被簡稱為 RHEL,但它并非官方名稱。

基于Debian

  • Debian(英語發音:/?d?bi?n/)是由GPL和其他自由軟件許可協議授權的自由軟件組成的操作系統,由Debian項目(Debian Project)組織維護。Debian項目是一個獨立的、分散的組織,由3000人志愿者組成,接受世界多個非盈利組織的資金支持,Software in the Public Interest提供支持并持有商標作為保護機構。Debian是一個大的系統組織框架,在這個框架下有多種不同操作系統核心的分支計劃,主要為采用Linux核心的Debian GNU/Linux系統。眾多的Linux發行版,例如Ubuntu、Knoppix和Linspire及Xandros等,都建基于Debian GNU/Linux。

  • Ubuntu是基于Debian發行版和GNOME桌面環境,與Debian的不同在于它每6個月會發布一個新版本(即每年的四月與十月),每2年發布一個LTS長期支持版本。 普通的桌面版可以獲得發布后18個月內的支持,標為LTS(長期支持)的桌面版可以獲得更長時間的支持。其桌面應用系列可以獲得為期3年的技術支持,服務器版可以獲得為期5年的技術支持。而自Ubuntu 12.04 LTS開始,桌面版和服務器版均可獲得為期5年的技術支持。2013年3月有消息指出,Ubuntu計劃在4月25日Ubuntu 13.04發布后,將非LTS版本的支持時間自18個月縮短至9個月,并采用滾動發布模式,允許開發者在不升級整個發行版的情況下升級單個核心包。

  • Kali Linux是基于Debian的Linux發行版, 設計用于數字鑒識和滲透測試。由Offensive Security Ltd維護和資助。最先由Offensive Security的Mati Aharoni和Devon Kearns通過重寫BackTrack來完成,BackTrack是他們之前寫的用于取證的Linux發行版。

基于Slackware

  • Slackware是Slackware Linux, Inc的Patrick Volkerding制作的Linux發行版本。Slackware走了一條與其他的發行版本(Red Hat、Debian、Gentoo、SuSE、Mandriva、Ubuntu等)不同的道路,它力圖成為“UNIX風格”的Linux發行版本。它的方針是只吸收穩定版本的應用程序,并且缺少其他Linux版本中那些為發行版本定制的配置工具。

  • openSUSE(英語發音:/?o?p?n?su?z?/),前身為SUSE Linux和SuSE Linux Professional,是一個Linux發行版與項目,由SUSE與其他公司贊助。openSUSE在全世界,尤其是在德國被廣泛使用。它的開發重心是為軟件開發者和系統管理者創造適用的開放源代碼的工具,并提供易于使用的桌面環境和功能豐富的服務器環境。openSUSE針對桌面環境進行了一系列的優化,對Linux新手較為友好。

基于Arch Linux

  • Arch Linux是朝向輕量(lightweight)以及簡單(simple)的Linux發行版。其中“簡單”(Simplicity)被定義為“避免不必要或復雜的修改”,也就是說,是由開發者角度定義,而非用戶角度思考。

基于Gentoo

  • Gentoo Linux(發音為/?d??ntu?/)是一種Linux操作系統,基于Portage包管理系統,而擁有幾乎無限制的適應性特性,被官方稱作元發行版(meta-distribution),支持多達10種以上的電腦系統結構平臺。此項目和它的產品以巴布亞企鵝命名。Gentoo包管理系統的設計是模塊化、可移植、易維護、靈活以及針對用戶機器優化的。軟件包從源代碼構建,這延續了ports的傳統。但是為了方便,也提供一些大型軟件包在多種架構的預編譯二進制文件,用戶亦可自建或使用第三方二進制包鏡像來直接安裝二進制包。

各發行版的區別

基于維護組織和公司的區別:
上面已經列出了常用的發行版的相關信息,而這些發行版可以分為商業發行版,比如Fedora(Red Hat)、openSUSE(Novell)、Ubuntu(Canonical公司)和Mandriva Linux;和社區發行版,它們由自由軟件社區提供支持,如Debian和Gentoo;也有發行版既不是商業發行版也不是社區發行版,其中最有名的是Slackware。

而在實際使用中又有基于rpm包或deb安裝包的不同:

  • 基于rpm 安裝:RedHat系列、OpenSuse系列。

  • 基于deb 安裝:Debian、Ubuntu系列。

  • 其他方法安裝:Arch Linux、Slackware、Gentoo。

各發行版的分支

wk_01作業QQ截圖20161203234643.png

Linux 系統設計哲學

  • 一切皆文件,設備也是文件。

  • 一個程序只作一件事并做好。

  • 把不同的程序通過管道等方式聯合使用來完成復雜的任務。

  • 在文本文件中存儲配置和數據。

  • 通過shell命令來提高效率和可移植性。

  • 避免使用可定制性低下的用戶界面。

  • 可移植性比效率更重要。

  • 小的就是美的。

可以參考Unix設計哲學

明詞解釋

  • 計算機:電子計算機(英語:computer),亦稱電腦,是一種利用電子學原理,根據一系列指令對數據進行處理的工具。計算機硬件由運算器、控制器、存儲器、輸入設備和輸出設備五大部分組成。

  • API:應用程序接口(英語:Application Programming Interface,簡稱:API),又稱為應用編程接口,就是軟件系統不同組成部分銜接的約定。由于近年來軟件的規模日益龐大,常常需要把復雜的系統劃分成小的組成部分,編程接口的設計十分重要。程序設計的實踐中,編程接口的設計首先要使軟件系統的職責得到合理劃分。良好的接口設計可以降低系統各部分的相互依賴,提高組成單元的內聚性,降低組成單元間的耦合程度,從而提高系統的維護性和擴展性。

  • ABI:應用二進制接口(英語:application binary interface,縮寫為 ABI)描述了應用程序(或者其他類型)和操作系統之間或其他應用程序的低級接口。

  • GNU:GNU是一個自由操作系統,其內容軟件完全以GPL方式發布。這個操作系統是GNU計劃的主要目標,名稱來自GNU's Not Unix!的遞歸縮寫,因為GNU的設計類似Unix,但它不包含具著作權的Unix代碼。GNU的創始人,理察·馬修·斯托曼,將GNU視為“達成社會目的技術方法”。在實際使用上,由于多半使用Linux內核、FreeBSD等替代方案,作為系統核心,其中主要的操作系統是Linux的發行版??梢员环Q為GNU/Linux。

  • GPL:GNU通用公共許可協議(英語:GNU General Public License,縮寫:GNU GPL、GPL),是一個被廣泛使用的自由軟件許可協議條款,保證終端用戶運行、學習、分享(復制)及編輯軟件之自由。GNU GPL最初由理查德·斯托曼(Richard Matthew Stallman)為GNU計劃而撰寫。此許可證最新版本為“第3版”(v3),于2007年6月29日發布。

  • LGPL:GNU寬通用公共許可證(英語:GNU Lesser General Public License)簡稱LGPL,是由自由軟件基金會公布的自由軟件授權條款。它允許企業與軟件開發者使用,或將LGPL授權的軟件集成至他們自己的軟件內(即使該軟件是私有軟件也被允許),同時不會受到Copyleft特性的許可證強制對軟件開源的限制。該許可證常被用于一些(但不是全部)的GNU程序庫。

  • BSD許可證:BSD許可證(英語:Berkeley Software Distribution license),是自由軟件中使用最廣泛的許可證之一。BSD軟件就是遵照這個許可證來發布,該許可證也因此而得名。跟其他許可證相比,從GNU通用公共許可證(GPL)到限制重重的著作權(Copyright),BSD許可證比較寬松,甚至跟公有領域更為接近。事實上,BSD許可證被認為是copycenter(中間版權),介乎標準的copyright與GPL的copyleft之間。"Take it down to the copy center and make as many copies as you want"。[1]可以說,GPL強迫后續版本必須一樣是自由軟件,BSD的后續版本可以選擇要繼續是BSD或其他自由軟件條款或封閉軟件等等。

  • POSIX:可移植操作系統接口(英語:Portable Operating System Interface of UNIX,縮寫為POSIX),是IEEE為要在各種UNIX操作系統上運行軟件,而定義API的一系列互相關聯的標準的總稱,其正式稱呼為IEEE Std 1003,而國際標準名稱為ISO/IEC 9945。此標準源于一個大約開始于1985年的項目。POSIX這個名稱是由理查德·斯托曼應IEEE的要求而提議的一個易于記憶的名稱。它基本上是Portable Operating System Interface(可移植操作系統接口)的縮寫,而X則表明其對Unix API的傳承。Linux基本上逐步實現了POSIX兼容,但并沒有參加正式的POSIX認證。

  • FSF:自由軟件基金會(英語:Free Software Foundation,FSF)是一個致力于推廣自由軟件的美國民間非營利性組織。它于1985年10月由理查德·斯托曼建立。其主要工作是執行GNU計劃,開發更多的自由軟件。

  • ASF:Apache軟件基金會(Apache Software Foundation,簡稱為ASF),是專門為支持開源軟件項目而辦的一個非營利性組織。在它所支持的Apache項目與子項目中,所發行的軟件產品都遵循Apache許可證(Apache License)。

Linux基礎

終端

日常我們使用Linux操作系統時都是通過終端進行操作,以下是終端的說明:

  • 物理終端:我們可以將顯示器、鍵盤鼠標等直接連到主機接口上,這樣的終端就是物理終端。我們日常使用的電腦顯示器就是此類終端。同時我們也會稱之為控制臺:console,文件:/dev/console

  • 虛擬終端:除了物理終端系統還會給我們6個虛擬終端,這些終端是附加在物理終端以上的,使用軟件方式虛擬實現的終端。我們可以通過 Ctrl+Alt+F[1-6]快捷鍵進行調整,文件:/dev/tty# [1,6]

  • 圖形終端:也是附加在物理終端以上的,使用軟件方式虛擬實現的終端,但它會額外的提供圖形桌面環境。我們可以通過 Ctrl+Alt+F7 快捷鍵進行調整。

  • 偽終端:圖形界面下打開的命令行接口,還有基于ssh協議或者telnet協議等遠程打開的命令行界面。文件:/dev/pts/#。

登錄系統

在登錄linux 系統中我們即可以直接那物理終端進行登錄,也可以使用ssh 進行遠程登錄。如果我們工作時用的是Windows 系統而如果登錄Linux 系統可以使用Xshell、SecureCRT或者Putty。在我登錄到系統后會顯示如下的界面:

[root@node3 ~]#

其中各相關信息如下:

  • root:當登錄的用戶,實際登錄不建議用root登錄!

  • node3: 當前主機的主機名;

  • ~:用戶當前所在的目錄(current directory),也稱為工作目錄(working directory);

  • #:命令提示符;

    • #:管理員賬號,為root; 擁有最高權限,能執行所有操作;

    • $:普通用戶,非root用戶;不具有管理權限,不能執行系統管理類操作;

基礎知識

命令的語法通用格式

# COMMAND OPTIONS ARGUMENTS

COMMAND:發起一命令:請求內核將某個二進制程序運行為一個進程;

命令分為兩類:

  • 由shell程序的自帶的命令:內置命令(builtin)

  • 獨立的可執行程序文件,文件名即命令名:外部命令

OPTIONS:指定命令的運行特性;

選項有兩種表現形式:

  • 短選項:-C, 例如-l, -d。注意:有些命令的選項沒有-;如果同一命令同時使用多個短選項,多數可合并:-l -d = -ld。

  • 長選項:–word, 例如–help, –human-readable。注意:長選項不能合并;

ARGUMENTS:命令的作用對象;命令對什么生效;
注意:不同的命令的參數;有些命令可同時帶多個參數,多個之間以空白字符分隔;

獲取命令幫助

如果是內部命令我們可以通過下面的方式過去幫助信息:

help COMMAND

而如果是外部命令則可以使用下面的幫助信息:

命令自帶簡要格式的使用幫助

# COMMAND --help

查看命令的簡要說明

簡要說明命令的作用(顯示命令所處的man分類頁面):

# whatis lsof
lsof                 (8)  - list open files

使用man 幫助

# man COMMAND

幫助的段落

  • NAME:功能性說明

  • SYNOPSIS:語法格式

  • DESCRIPTION:描述

  • OPTIONS:選項

  • EXAMPLES:使用示例

  • AUTHOR: 作者

  • BUGS: 報告程序bug的方式

  • SEE ALSO: 參考

語法格式

  • []:可選內容;

  • <>:必須提供的內容;

  • a|b|c:多選一;

  • …:同類內容可出現多個;

man頁面所屬的分類標識

在man的幫助手冊中,將幫助文檔分為了9個類別,對于有的關鍵字可能存在多個類別中, 我們就需要指定特定的類別來查看。
(1)、用戶可以操作的命令或者是可執行文件
(2)、系統核心可調用的函數與工具等
(3)、一些常用的函數與數據庫
(4)、設備文件的說明
(5)、設置文件或者某些文件的格式
(6)、游戲
(7)、慣例與協議等。例如Linux標準文件系統、網絡協議、ASCⅡ,碼等說明內容
(8)、系統管理員可用的管理條令
(9)、與內核有關的文件

操作方法

翻屏

  • 空格鍵:向文件尾翻一屏;

  • b: 向文件首部翻一屏;

  • Ctrl+d:向文件尾部翻半屏;

  • Ctrl+u:向文件首部翻半屏;

  • 回車鍵:向文件尾部翻一行;

  • k: 向文件首部翻一行;

  • G:跳轉至最后一行;

  • #G: 跳轉至指定行;

  • 1G:跳轉至文件首部;

文本搜索

  • /keyword:從文件首部向文件尾部依次查找;不區分字符大小寫;

  • ?keyword:從文件尾部向文件首部依次查找;

    • n: 與查找命令方向相同;

    • N: 與查找命令方向相反;

常用選項

  • -M /PATH/TO/SOMEDIR:到指定目錄下查找命令手冊并打開之;

獲取命令的在線文檔

# info COMMAND

用程序自帶幫助文檔

很多應用程序會自帶幫助文檔,幫助文檔路徑為:/usr/share/doc/APP-VERSION

  • README:程序的相關的信息;

  • INSTALL: 安裝幫助;

  • CHANGES:版本迭代時的改動信息;

官方文檔

例如RedHat:
https://access.redhat.com/documentation/en/

程序官方的文檔

我們在安裝一些系統沒有帶的程序時,在這些程序的官方站點上的“Document”就是該程序的幫助信息。

搜索引擎

Linux 命令

顯示工作目錄pwd

# pwd
/root
# cd /usr/local/games/
# pwd
/usr/local/games

目錄切換cd

切換回家目錄:cd
在上一次所在目錄與當前目錄之間來回切換: cd –
切換回自己的家目錄: cd ~
切換至指定用戶的家目錄:cd ~USERNAME

# pwd
/usr/local/games
# cd ~
# pwd
/root
# cd -
/usr/local/games
# pwd
/usr/local/games
# cd ~pengfeihu
# pwd
/home/pengfeihu

顯示終端機連接tty

在Linux操作系統中,所有外圍設備都有其名稱與代號,這些名稱代號以特殊文件的類型存放于/dev目錄下。你可以執行tty(teletypewriter)指令查詢目前使用的終端機的文件名稱。

參數

  • -s或–silent或–quiet 不顯示任何信息,只回傳狀態代碼。

舉例

# tty
/dev/pts/0

啟動圖形界面startx

startx為啟動X Window的script文件,實際上啟動X Window的程序為xinit。

使用

在某一虛擬終端接口運行命令:

# startx &

列出指定目錄下的內容ls

語法

ls [OPTION]... [FILE]...

選項

  • -a, –all 列出目錄下的所有文件,包括以 . 開頭的隱含文件。

  • -A, –almost-all 列出除了 . 及 .. 以外的任何項目

  • -b, –escape 把文件名中不可輸出的字符用反斜杠加字符編號的形式列出。

  • -B, –ignore-backups 不列出任何以 ~ 字符結束的項目

  • –color[=WHEN] 控制是否使用色彩分辨文件。WHEN 可以是‘never’、‘always’或‘auto’其中之一

  • -d, –directory 將目錄象文件一樣顯示,而不是顯示其下的文件。

  • -F, –classify 加上文件類型的指示符號 (*/=@| 其中一個)。可執行的常規文件追加 * ,目錄文件后面追加 / ,鏈接文件追加 @,FIFOs文件追加 | ,套接字文件追加 = 。

  • -g 類似 -l,但不列出所有者

  • -G, –no-group 不列出任何有關組的信息

  • -h, –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)

  • -i, –inode 印出每個文件的 inode 號

  • -l 列出文件的詳細信息。

  • -L, –dereference 當顯示符號鏈接的文件信息時,顯示符號鏈接所指示的對象而并非符號鏈接本身的信息

  • -m 所有項目以逗號分隔,并填滿整行行寬

  • -n, –numeric-uid-gid 類似 -l,用數字的 UID,GID 代替名稱。

  • -o 類似 -l,顯示文件的除組信息外的詳細信息。

  • -p, –indicator-style=slash 對目錄加上表示符號"/"

  • -q, –hide-control-chars 以 ? 字符代替無法打印的字符

  • -Q, –quote-name 將項目名稱括上雙引號

  • -r, –reverse 依相反次序排列

  • -R, –recursive 同時列出所有子目錄層

  • -s, –size 以塊大小為單位列出所有文件的大小

  • -S 根據文件大小排序

  • –time=WORD 和-l 同時使用時顯示WORD 所代表的時間而非修改時 間:atime、access、use、ctime 或status;

  • –time-style=STYLE 和-l 同時使用時根據STYLE 代表的格式顯示時間: full-iso、iso、locale、posix-iso、+FORMAT。

  • -t 以文件修改時間排序

  • -u 配合 -lt:顯示訪問時間而且依訪問時間排序,配合 -l:顯示訪問時間但根據名稱排序,否則:根據訪問時間排序

  • -U 不進行排序;依文件系統原有的次序列出項目

  • -v 根據版本進行排序

  • -x 逐行列出項目而不是逐欄列出

  • -X 根據擴展名排序

  • -1 每行只列出一個文件

舉例

  • 列出tmp目錄下所有的文件的信息并包含子目錄:

# ls -lR
  • 列出etc目錄下檔案的最后5個,愈新的排愈后面,可以使用如下命令

# ls -ltr |tail -5
  • 列出目前工作目錄下所有檔案及目錄;目錄于名稱后加"/", 可執行檔于名稱后加"*" :

# ls -AF
aliyum.sh*  aliyum.sh~  .ICE-unix/  mysql.sock=  pear/  test/  test1/  yum.log
  • 按文件大小列出:

# ls -lS
  • 指定時間格式列出文件:

# ls -l --time-style=long-iso
drwxr-xr-x. 3 root root     4096 2016-03-12 18:12 aaa
drwxr-xr-x. 2 root root     4096 2016-03-12 17:05 abc
lrwxrwxrwx. 1 root root       13 2016-03-12 15:43 bbb -> /tmp/test/abc
drwxr-xr-x. 2 root root 21999616 2016-03-12 18:04 ddd

文件文本查看工具cat

cat命令的用途是連接文件或標準輸入并打印。這個命令常用來顯示文件內容,或者將幾個文件連接起來顯示,或者從標準輸入讀取內容并顯示,它常與重定向符號配合使用。

語法

cat [OPTION]... [FILE]...

選項

  • -A, –show-all 等于-vET

  • -b, –number-nonblank 對非空輸出行編號

  • -e 等于-vE

  • -E, –show-ends 在每行結束處顯示"$"

  • -n, –number 對輸出的所有行編號

  • -s, –squeeze-blank 不輸出多行空行

  • -t 與-vT 等價

  • -T, –show-tabs 將跳格字符顯示為^I

  • -u (被忽略)

  • -v, –show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外

舉例

查看/etc/issue文件,輸出行的編號:

# cat -n /etc/issue
     1  CentOS release 6.7 (Final)
     2  Kernel \r on an \m
     3

對于空行不輸出編號:

# cat /etc/issue -b
     1  CentOS release 6.7 (Final)
     2  Kernel \r on an \m

將/etc/redhat-release 和 /etc/issue文件組合輸出至test.txt文件:

# cat -b /etc/redhat-release /etc/issue >test.txt
# cat test.txt
     1  CentOS release 6.7 (Final)
     2  CentOS release 6.7 (Final)
     3  Kernel \r on an \m

文件文本查看工具tac

tac 是將 cat 反寫過來,所以他的功能就跟 cat 相反,cat 是由第一行到最后一行連續顯示在螢幕上,而 tac 則是由最后一行到第一行反向在螢幕上顯示出來!

選項

  • -b, –before 在行前而非行尾添加分隔標志

  • -r, –regex 將分 隔標志視作正則表達式來解析

  • -s, –separator=字符串 使用指定字符串代替換行作為分隔標志

查看文件內容類型file

該命令用來識別文件類型,也可用來辨別一些文件的編碼格式。它是通過查看文件的頭部信息來獲取文件類型,而不是像Windows通過擴展名來確定文件類型的。

選項

  • -b:列出文件辨識結果時,不顯示文件名稱。

  • -c:詳細顯示指令執行過程,便于排錯或分析程序執行的情形

  • -f:列出文件中文件名的文件類型

  • -F:使用指定分隔符號替換輸出文件名后的默認的“:”分隔符。

  • -i:輸出mime類型的字符串

  • -L:查看對應軟鏈接對應文件的文件類型

  • -z:嘗試去解讀壓縮文件的內容

回顯echo

echo命令用于在shell中打印shell變量的值,或者直接輸出指定的字符串。linux的echo命令,在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。 echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。

選項

  • -e:啟用反斜線控制字符的轉換

  • -E:關閉反斜線控制字符的轉換(預設如此)

  • -n:取消行末之換行符號(與 -e 選項下的 \c 字符同意)

關于 echo 命令所支援反斜線控制字符如下表:

  • \a 發出警告聲;

  • \b 刪除前一個字符;

  • \c 最后不加上換行符號;

  • \f 換行但光標仍舊停留在原來的位置;

  • \n 換行且光標移至行首;

  • \r 光標移至行首,但不換行;

  • \t 插入tab;

  • \v 與\f相同;

  • \ 插入\字符;

  • \nnn 插入nnn(八進制)所代表的ASCII字符;

舉例

通過echo 命令修改密碼:

# echo -e "redhat\nredhat" |passwd user1

這么操作會讓別人看到密碼,我們可以使用把密碼寫入到文件中然后在修改,也可以通過修改history 命令歷史來清除這條命令,下面介紹是把密碼寫入到文件中來修改密碼:

# echo -e "`cat aaa`\n`cat aaa`" |passwd user1

通過echo顯示文字顏色:

# echo -e "\e[1;31mThis is red text\e[0m"

\e[1;31m 將顏色設置為紅色
\e[0m 將顏色重新置回
顏色碼:重置=0,黑色=30,紅色=31,綠色=32,黃色=33,藍色=34,洋紅=35,青色=36,白色=37

背景色:

# echo -e "\e[1;42mGreed Background\e[0m" Greed Background

顏色碼:重置=0,黑色=40,紅色=41,綠色=42,黃色=43,藍色=44,洋紅=45,青色=46,白色=47

文字閃動:

# echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"

紅色數字處還有其他數字參數:0 關閉所有屬性、1 設置高亮度(加粗)、4 下劃線、5 閃爍、7 反顯、8 消隱

關機或重啟命令shutdown

Linux系統下的shutdown命令用于安全的關閉/重啟計算機,它不僅可以方便的實現定時關機,還可以由用戶決定關機時的相關參數。在執行shutdown命令時,系統會給每個終端(用戶)發送一條屏顯,提示關機操作。定時關機只需要一個簡單的參數,既可以是倒計時,也可以是確切的時間。

命令格式

# shutdown [OPTION]... TIME [MESSAGE]

選項

  • -t 在改變到其它runlevel之前﹐告訴init多久以后關機。

  • -r 重啟計算器。

  • -k 并不真正關機﹐只是送警告信號給每位登錄者〔login〕。

  • -h 關機后關閉電源〔halt〕。

  • -n 不用init﹐而是自己來關機。不鼓勵使用這個選項﹐而且該選項所產生的后果往往不總是你所預期得到的。

  • -c 取消之前的定時關機

  • -f 在重啟計算器〔reboot〕時忽略fsck。

  • -F 在重啟計算器〔reboot〕時強迫fsck。

  • -time 設定關機〔shutdown〕前的時間。

舉例

立即關機:# shutdown -h now
立即重啟:# shutdown -r now
定時關機 ,如果準備定時5分鐘關機后還有其他命令要執行,或者希望將定時關機的命令放在后臺,則:

# shutdown -h +5 &

然后按幾次回車,即可繼續使用終端執行其它操作了。如果希望終止上面執行的5分鐘關機,則執行:

# shutdown -c

希望在20:13關閉計算機:

# shutdown -h 20:13

關機和重啟相關的命令

關機:poweroff、halt
重啟:reboot

顯示與設定硬件時鐘hwclock

在Linux中有硬件時鐘與系統時鐘等兩種時鐘。硬件時鐘是指主機板上的時鐘設備,也就是通常可在BIOS畫面設定的時鐘。系統時鐘則是指kernel中的時鐘。當Linux啟動時,系統時鐘會去讀取硬件時鐘的設定,之后系統時鐘即獨立運作。所有Linux相關指令與函數都是讀取系統時鐘的設定。

參數

  • –hctosys  將系統時鐘調整為與目前的硬件時鐘一致。

  • –systohc  將硬件時鐘調整為與目前的系統時鐘一致。

  • –adjust  hwclock每次更改硬件時鐘時,都會記錄在/etc/adjtime文件中。使用–adjust參數,可使hwclock根據先前的記錄來估算硬件時鐘的偏差,并用來校正目前的硬件時鐘。

  • –set –date=<日期與時間>  設定硬件時鐘。

  • –show  顯示硬件時鐘的時間與日期。

  • –utc  若要使用格林威治時間,請加入此參數,hwclock會執行轉換的工作。

擴展學習

時間設置命令date

在linux環境中,不管是編程還是其他維護,時間是必不可少的,也經常會用到時間的運算,熟練運用date命令來表示自己想要表示的時間,肯定可以給自己的工作帶來諸多方便。

命令格式

date [OPTION]... [+FORMAT]

命令參數

  • -d,–date=字符串 : 顯示指定字符串所描述的時間,而非當前時間

  • -f,–file=日期文件 :類似–date,從日期文件中按行讀入時間描述

  • -r, –reference=文件:顯示文件指定文件的最后修改時間

  • -R, –rfc-2822 :以RFC 2822格式輸出日期和時間 例如:2006年8月7日,星期一 12:34:56 -0600

  • -s, –set=字符串:設置指定字符串來分開時間

  • -u, –utc, –universal:輸出或者設置協調的通用時間

時間輸出格式

  • %% 一個文字的 %

  • %a 當前locale 的星期名縮寫(例如: 日,代表星期日)

  • %A 當前locale 的星期名全稱 (如:星期日)

  • %b 當前locale 的月名縮寫 (如:一,代表一月)

  • %B 當前locale 的月名全稱 (如:一月)

  • %c 當前locale 的日期和時間 (如:2005年3月3日 星期四 23:05:25)

  • %C 世紀;比如 %Y,通常為省略當前年份的后兩位數字(例如:20)

  • %d 按月計的日期(例如:01)

  • %D 按月計的日期;等于%m/%d/%y

  • %e 按月計的日期,添加空格,等于%_d

  • %F 完整日期格式,等價于 %Y-%m-%d

  • %g ISO-8601 格式年份的最后兩位 (參見%G)

  • %G ISO-8601 格式年份 (參見%V),一般只和 %V 結合使用

  • %h 等于%b

  • %H 小時(00-23)

  • %I 小時(00-12)

  • %j 按年計的日期(001-366)

  • %k 時(0-23)

  • %l 時(1-12)

  • %m 月份(01-12)

  • %M 分(00-59)

  • %n 換行

  • %N 納秒(000000000-999999999)

  • %p 當前locale 下的"上午"或者"下午",未知時輸出為空

  • %P 與%p 類似,但是輸出小寫字母

  • %r 當前locale 下的 12 小時時鐘時間 (如:11:11:04 下午)

  • %R 24 小時時間的時和分,等價于 %H:%M

  • %s 自UTC 時間 1970-01-01 00:00:00 以來所經過的秒數

  • %S 秒(00-60)

  • %t 輸出制表符 Tab

  • %T 時間,等于%H:%M:%S

  • %u 星期,1 代表星期一

  • %U 一年中的第幾周,以周日為每星期第一天(00-53)

  • %V ISO-8601 格式規范下的一年中第幾周,以周一為每星期第一天(01-53)

  • %w 一星期中的第幾日(0-6),0 代表周一

  • %W 一年中的第幾周,以周一為每星期第一天(00-53)

  • %x 當前locale 下的日期描述 (如:12/31/99)

  • %X 當前locale 下的時間描述 (如:23:13:48)

  • %y 年份最后兩位數位 (00-99)

  • %Y 年份

  • %z +hhmm 數字時區(例如,-0400)

  • %:z +hh:mm 數字時區(例如,-04:00)

  • %::z +hh:mm:ss 數字時區(例如,-04:00:00)

  • %:::z 數字時區帶有必要的精度 (例如,-04,+05:30)

  • %Z 按字母表排序的時區縮寫 (例如,EDT)

關于時間中顯示CST、UTC、GMT說明:

  • CST:中國標準時間(China Standard Time),這個解釋可能是針對RedHat Linux。

  • UTC:協調世界時,又稱世界標準時間,簡稱UTC,從英文國際時間/法文協調時間”Universal Time/Temps Cordonné”而來。中國大陸、香港、澳門、臺灣、蒙古國、新加坡、馬來西亞、菲律賓、澳洲西部的時間與UTC的時差均為+8,也就是UTC+8。

  • GMT:格林尼治標準時間(舊譯格林威治平均時間或格林威治標準時間;英語:Greenwich Mean Time,GMT)是指位于英國倫敦郊區的皇家格林尼治天文臺的標準時間,因為本初子午線被定義在通過那里的經線。

舉例

顯示當前時間:

# date +'%Y-%m-%d_%H:%M:%S'
2016-12-04_17:06:06
# date +'%F_%T'
2016-12-04_17:06:09

顯示昨天的日期:

# date -d next-day +%Y%m%d
20161205

顯示明天的日期:

# date -d last-day +%Y%m%d
20161203

顯示一年的第幾周:

# date +%U
49

命令歷史history

history命令是查看系統的歷史命令的,如果你經常使用 Linux 命令行,那么使用 history(歷史)命令可以有效地提升你的效率。

用法

history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]

參數

  • n :數字,要列出最近的若干命令列表

  • -c :將目前的 shell 中的所有 history 內容全部消除

  • -a :將目前新增的 history 指令新增入 histfiles 中,若沒有加 histfiles ,則預設寫入 ~/.bash_history

  • -r :將 histfiles 的內容讀到目前這個 shell 的 history 記憶中

  • -w :將目前的 history 記憶內容寫入 histfiles

相關環境變量

  • HISTSIZE:shell進程可保留的命令歷史的條數;

  • HISTFILE:持久保存命令歷史的文件;默認在:~/.bash_history

  • HISTFILESIZE:命令歷史文件的大??;

  • HISTTIMEFORMAT:顯示時間戳 ;

  • HISTCONTROL :控制命令歷史記錄的方式。

    • ignoredups:忽略重復的命令;

    • ignorespace:忽略以空白字符開頭的命令;

    • ignoreboth:以上兩者同時生效;

舉例

使用 Ctrl+R 搜索歷史

Ctrl+R 是我經常使用的一個快捷鍵。此快捷鍵讓你對命令歷史進行搜索,對于想要重復執行某個命令的時候非常有用。當找到命令后,通常再按回車鍵就可以執行該命令。如果想對找到的命令進行調整后再執行,則可以按一下左或右方向鍵。關閉查找命令歷史搜索:Ctrl + g。

快速重復執行上一條命令

  • 使用上方向鍵,并回車執行。

  • 按 !! 并回車執行。

  • 輸入 !-1 并回車執行。

  • 按 Ctrl+P 并回車執行。

從命令歷史中執行一個指定的命令

如果你想重復執行第 4 條命令,那么可以執行 !4。

通過指定關鍵字來執行以前的命令

輸入 !his并回車,將執行最近一條以 !his 打頭的命令。

調用上一條命令的最后一個參數

快捷鍵:ESC+ .
字符串:!$

環境變量的使用

history 還可以根據環境變量的設置完成高級的用法,具體就是將環境變量的值和變量寫入到:/etc/bashrc或別的環境變量配置文件中。

Linux 環境變量

set

set命令作用主要是顯示系統中已經存在的shell變量,以及設置shell變量的新變量值。使用set更改shell特性時,符號"+"和"-"的作用分別是打開和關閉指定的模式。set命令不能夠定義新的shell變量。如果要定義新的變量,可以使用declare命令以變量名=值的格式進行定義即可。 set可以設置某個環境變量的值。清除環境變量的值用unset命令。如果未指定值,則該變量值將被設為NULL。

參數

  • -a  標示已修改的變量,以供輸出至環境變量。

  • -b  使被中止的后臺程序立刻回報執行狀態。

  • -C  轉向所產生的文件無法覆蓋已存在的文件。

  • -d  Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。

  • -e  若指令傳回值不等于0,則立即退出shell。

  • -f   取消使用通配符。

  • -h  自動記錄函數的所在位置。

  • -H Shell  可利用"!"加<指令編號>的方式來執行history中記錄的指令。

  • -k  指令所給的參數都會被視為此指令的環境變量。

  • -l  記錄for循環的變量名稱。

  • -m  使用監視模式。

  • -n  只讀取指令,而不實際執行。

  • -p  啟動優先順序模式。

  • -P  啟動-P參數后,執行指令時,會以實際的文件或目錄來取代符號連接。

  • -t  執行完隨后的指令,即退出shell。

  • -u  當執行時使用到未定義過的變量,則顯示錯誤信息。

  • -v  顯示shell所讀取的輸入值。

  • -x  執行指令后,會先顯示該指令及所下的參數。

使用語法

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...] 
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

set通過選項來開關shell的不同特性,每個特性都對應一個選項。每個特性都有兩種配置方式:

  • 一種是通過set -e和set +e這種形式,即直接指定選項。

  • 另一種是通過set -o errexit和set +o errexit這種形式,即通過o這個選項來指定選項名。

在set命令中,選項前面跟著-號表示開啟這個選項,+表示關閉這個選項。

使用舉例

執行set -o會輸出當前的set選項配置情況,執行set +o也是輸出當前的set選項的配置情況,只不過輸出形式是一系列的set命令。這種輸出形式一般用于重建當前的set配置項時使用。

  • -e or -o errexit :設置了這個選項后,當一個命令執行失敗時,shell會立即退出。

  • -n or -o noexec :設置了這個選項后,shell讀取命令,但是不會執行它們。這個選項可以用來檢查shell腳本是否存在語法錯誤。

  • -u or -o unset :設置了這個選項之后,當shell要擴展一個還未設置過值的變量時,shell必須輸出信息到stderr,然后立即退出。但是交互式shell不應該退出。

  • -x or -o xtrace :設置了這個選項之后,對于每一條要執行的命令,shell在擴展了命令之后(參數擴展)、執行命令之前,輸出trace到stderr。

  • -o pipefail :這個選項會影響管道的返回值。默認情況下,一個管道的返回值是最后一個命令的返回值,比如cmda | cmdb | cmdc這個管道,返回值是由cmdc命令的返回值決定的。如果指定了pipefail選項,那么管道的返回值就會由最后一個失敗的命令決定,意思就是有命令失敗就會返回非0值。如果所有命令都成功,則返回成功。

關閉linux系統中的覆蓋輸出重定向

env

env命令用于顯示系統中已存在的環境變量,以及在定義的環境中執行指令。該命令只使用"-"作為參數選項時,隱藏了選項"-i"的功能。若沒有設置任何選項和參數時,則直接顯示當前的環境變量。 如果使用env命令在新環境中執行指令時,會因為沒有定義環境變量"PATH"而提示錯誤信息"such file or directory"。此時,用戶可以重新定義一個新的"PATH"或者使用絕對路徑。

命令選項:

  • -i:開始一個新的空的環境;

  • -u<變量名>:從當前環境中刪除指定的變量。

環境變量設置export

export命令用于將shell變量輸出為環境變量,或者將shell函數輸出為環境變量。 一個變量創建時,它不會自動地為在它之后創建的shell進程所知。而命令export可以向后面的shell傳遞變量的值。當一個shell腳本調用并執 行時,它不會自動得到原為腳本(調用者)里定義的變量的訪問權,除非這些變量已經被顯式地設置為可用。export命令可以用于傳遞一個或多個變量的值到任何后繼腳本。

參數

  • -f:代表[變量名稱]中為函數名稱;

  • -n:刪除指定的變量。變量實際上并未刪除,只是不會輸出到后續指令的執行環境中;

  • -p:列出所有的shell賦予程序的環境變量。

set、env和export區別

每個shell有自己特有的變量(set)顯示的變量,這個和用戶變量是不同的,當前用戶變量和你用什么shell無關,不管你用什么shell都在,比如HOME,SHELL等這些變量,但shell自己的變量不同shell是不同的,比如BASH_ARGC, BASH等,這些變量只有set才會顯示,是bash特有的,export不加參數的時候,顯示哪些變量被導出成了用戶變量,因為一個shell自己的變量可以通過export “導出”變成一個用戶變量。

  • set 用來顯示本地變量、顯示當前shell的變量,包括當前用戶的變量

  • env 用來顯示環境變量、 顯示當前用戶的變量

  • export 用來顯示和設置環境變量顯示當前導出成用戶變量的shell變量

設置環境變量

我們在編譯安裝軟件時就需要配置好環境變量,下面介紹如何配置:

  • 直接用export命令:

#  export PATH=$PATH:/usr/local/http/bin

這種方式只是在當前shell環境有效,一旦登出就不能使用,如果需要長時間使用需要寫入配置文件。

  • 修改profile文件:

#  vi /etc/profile
export PATH="$PATH:/usr/local/http/bin"
# vi /etc/profile.d/httpd.sh
export PATH="$PATH:/usr/local/http/bin"

這種方式只是對全部用戶有效。

  • 修改.bashrc文件:

#  vi /root/.bashrc
export PATH="$PATH:/usr/local/http/bin"

這種方式只是對root用戶有效。

注意:一旦寫入配置文件則需要source 一下該文件,如果語法沒有錯誤就可以使用了。

常見的環境變量

  • PATH 指定命令的搜索路徑

  • HOME 當前登錄用戶的家目錄

  • HISTSIZE是指保存歷史命令記錄的條數。

  • LOGNAME是指當前用戶的登錄名。

  • HOSTNAME是指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中來取得的。

  • SHELL是指當前用戶用的是哪種Shell。

  • LANG/LANGUGE是和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。

  • MAIL是指當前用戶的郵件存放目錄。

  • PS1是基本提示符,對于root用戶是#,對于普通用戶是$。

  • PS2是附屬提示符,默認是“>”。可以通過修改此環境變量來修改當前的命令符,比 如下列命令會將提示符修改成字符串“Hello,My NewPrompt ”。

關于環境變量的使用

我們的bash 中默認的已經把“/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路徑已經在系統環境變量中了,可以通過echo $PATH來查看當前用戶的環境變量。如果可執行文件在這幾個標準位置,在終端命令行輸入該軟件可執行文件的文件名和參數(如果需要參數),回車即可。

如果不在標準位置,文件名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個“一勞永逸”的辦法是把這個路徑加入環境變量。命令 “PATH=$PATH:路徑”可以把這個路徑加入環境變量,但是退出這個命令行就失效了。要想永久生效,需要把這行添加到環境變量文件里。有兩個文件可 選:“/etc/profile”、"/etc/profile.d/*.sh"和用戶主目錄下的“.bash_profile”,“/etc/profile”、"/etc/profile.d/*.sh" 對系統里所有用戶都有效,用戶主目錄下 的“.bash_profile”只對這個用戶有效。

設置環境變量的格式為“PATH=$PATH:路徑1:路徑2:…:路徑n”,意思是可執行文件的路徑包括原先設定的路徑,也包括從“路徑1”到“路徑n”的所 有路徑。當用戶輸入一個一串字符并按回車后,shell會依次在這些路徑里找對應的可執行文件并交給系統核心執行。那個“$PATH”表示原先設定的路徑 仍然有效,注意不要漏掉。某些軟件可能還有“PATH”以外類型的環境變量需要添加,但方法與此相同,并且也需要注意“$”。

注意,與DOS/Window不同,UNIX類系統環境變量中路徑名用冒號分隔,不是分號。另外,軟件越裝越多,環境變量越添越多,為了避免造成混亂,建議可以在/etc/profile.d/寫個以.sh結尾的該軟件的環境變量,這種寫完以后在今后軟件的刪除可直接刪除文件,不用在該profile文件,下面以mysql為例子:

# cat /etc/profile.d/mysql.sh 
export  PATH=$PATH:/usr/local/mysql/bin
# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin

Linux 目錄

與Windows將硬盤看做“C盤”、“D盤”幾個獨立的分區不同,Linux將整個文件系統看做一棵樹,這棵樹的樹根叫做根文件系統,用/表示。各個分區通過“掛載”(Mount)以文件夾的形式訪問。

  • /: 第一層次結構的根、整個文件系統層次結構的根目錄。

  • /bin/: 需要在單用戶模式可用的必要命令(可執行文件);面向所有用戶,例如:cat、ls、cp,和/usr/bin類似。

  • /boot/:引導程序文件,例如:kernel、initrd;時常是一個單獨的分區。

  • /dev/:存儲特殊文件或設備文件;設備有兩種類型:字符設備(線性設備)、塊設備(隨機設備);

  • /etc/:系統程序的配置文件,只能為靜態;

  • /home:普通的家目錄的集中位置;一般每個普通用戶的家目錄默認為此目錄下與用戶名同名的子目錄,/home/USERNAME;

  • /root:管理員的家目錄;可選;

  • /lib:為系統啟動或根文件系統上的應用程序(/bin, /sbin等)提供共享庫,以及為內核提供內核模塊。

    • libc.so.*:動態鏈接的C庫;

    • ld*:運行時鏈接器/加載器;

    • modules:用于存儲內核模塊的目錄;

  • /lib64:64位系統特有的存放64位共享庫的路徑;

  • /media:便攜式設備掛載點,cdrom, floppy等;

  • /mnt:其它文件系統的臨時掛載點;

  • /opt:附加應用程序的安裝位置;可選路徑;

  • /srv:當前主機為服務提供的數據;

  • /tmp:為那些會產生臨時文件的程序提供的用于存儲臨時文件的目錄;可供所用戶執行寫入操作;有特殊權限;

  • /usr:usr Hierarchy,全局共享的只讀數據路徑;

    • bin:非必要可執行文件 (在單用戶模式中不需要);面向所有用戶。

    • sbin:非必要的系統二進制文件,例如:大量網絡服務的守護進程。

    • lib, lib64:/usr/bin/和/usr/sbin/中二進制文件的庫。

    • include:用來存放Linux下開發和編譯應用程序所需要的頭文件;

    • share:命令手冊頁和自帶文檔等架構特有的文件的存儲位置

    • local:本地數據的第三層次,具體到本臺主機。通常而言有進一步的子目錄,例如:bin/、lib/、share/.這是提供給一般用戶的/usr目錄,在這里安裝一般的應用軟件;

    • X11R6:X-Window程序的安裝位置

    • src:程序源碼文件的存儲位置

  • /var/:變量文件——在正常運行的系統中其內容不斷變化的文件,如日志,脫機文件和臨時電子郵件文件。

    • cache:應用程序緩存數據。

    • lib:系統正常運行時要改變的文件.

    • local:中安裝的程序的可變數據(即系統管理員安裝的程序)。

    • lock:鎖定文件.許多程序遵循在/var/lock 中產生一個鎖定文件的約定,以支持他們正在使用某個特定的設備或文件.其他程序注意到這個鎖定文件,將不試圖使用這個設備或文件.

    • log :各種程序的Log文件,特別是login (/var/log/wtmp log所有到系統的登錄和注銷) 和syslog (/var/log/messages 里存儲所有核心和系統程序信息. /var/log 里的文件經常不確定地增長,應該定期清除.

    • run :保存到下次引導前有效的關于系統的信息文件.例如, /var/run/utmp 包含當前登錄的用戶的信息.

    • spool:存放應用的spool數據,

    • tmp:臨時目錄

  • /proc:基于內存的虛擬文件系統,用于為內核及進程存儲其相關信息;它們多為內核參數,例如net.ipv4.ip_forward, 虛擬為net/ipv4/ip_forward, 存儲于/proc/sys/, 因此其完整路徑為/proc/sys/net/ipv4/ip_forward;

  • /sys:sysfs虛擬文件系統提供了一種比proc更為理想的訪問內核數據的途徑;其主要作用在于為管理Linux設備提供一種統一模型的的接口;

擴展學習1
擴展學習2

原創文章,作者:profibus,如若轉載,請注明出處:http://www.www58058.com/62546

(0)
profibusprofibus
上一篇 2016-12-04
下一篇 2016-12-04

相關推薦

  • DevOps如何重構IT戰略

    翻譯: 至尊寶 原文: http://www.citeworld.com/article/2897738/development/how-devops-can-redefine-your-it-strategy.html?page=2   DevOps究竟是曇花一現還是你一直在尋找的競爭優勢?我們咨詢了一些專家,對于這種趨勢他們的想法是什…

    Python干貨 2015-03-26
  • Vim編輯工具用法的總結

    描述:    Vim是一款強大的命令行界面的文本編輯器,是vi的高級版本,先說下學習它的原因:  1,所有的UNIX Like 系統都會內置vi文本編輯器,其他的文本編輯器則不一定會存在;  2,很多軟件的編輯接口都會主動調用vi  3,vim具有程序編輯的能力,可以主動以字體顏色辨別語法的正確性,方便程序設…

    Linux干貨 2016-08-11
  • mysql主從復制

    MySQL主從復制        主從復制原理: mysql主從同步其實是一個異步復制的過程,要實現復制首先在master上開啟bin-log日志功能。整個過程需要開啟3個線程, 分別是master開啟IO線程,slave開啟IO線程和SQL線程. (1) 在slave服務器執行start…

    Linux干貨 2016-06-26
  • N26-第二周博客作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相 關示例演示。 文件管理類命令:mkdir rmdir cp rm mv ①mkdir命令:創建目錄 格式:mkdir [OPTION]… DIRECTORY… option -m, –mode=MODE -p, –paren…

    Linux干貨 2017-02-02
  • 配置路由實例

    路由的分類和管理 路由:跨網絡通信; 路由分類:     主機路由     網絡路由     默認路由 路由管理命令: route 命令是在本地 IP 路由表中顯示和修改條目網絡命令; 查看:route -n 添加:route add ro…

    Linux干貨 2016-09-12
  • Linux的基礎文件管理命令

    Linux用于管理文件的一些基本常見的命令如下: ls:  列出指定目錄下的清單    -a  顯示所有文件包括隱藏文件    -l  顯示文件的詳細信息    -d  查看目錄自身   示例: cat:  可查看指定路徑下的文件文本 fi…

    Linux干貨 2016-11-06
欧美性久久久久