天天看點

Linux基礎入門(實驗樓實驗)

實驗一 Linux系統簡介

Linux和windows、Mac OS一樣是一種作業系統。最早流行起來的作業系統是UNIX,但由于其過度商業化,價格昂貴,是以在校園裡人們大多選擇MINIX。1991年,Linux之父Linus Torvalds從MINIX入手,計劃開發一個性能更好的作業系統。他第一次發行的版本吸引了很多黑客,這使它很快具有了一些吸引人的特性。 Linux本身隻是作業系統的核心,它沒有自己去開發應用程式,而是使用已有的自由軟體,這減少了搭建開發環境花費的工作量,Linux中許多重要的軟體都來自于自由軟體基金GNU項目。

Linux發展到今天已經成為了具有免費、穩定、安全、資源占用少、定制性高、具有多種可選擇圖形使用者界面的優秀系統。是以盡管Linux沒有特定的支援廠商,缺少對遊戲娛樂和專業軟體的支援,但仍然在世界範圍内受到開發人員的廣泛歡迎。Linux現在擁有Debian、Ubuntu、CentOS等多個發行版。

實驗二 基本概念及操作

Linux桌面環境

Linux本身是沒有圖形界面的,我們看到的圖形界面實際上是運作在 Linux上的一套軟體,這些實作了用戶端功能的桌面環境有KDE,GNOME,XFCE,LXDE,使用者可以根據自己的喜好選擇不同的桌面環境,定制自己的桌面。實驗樓目前使用XFCE桌面環境。

Linux基礎入門(實驗樓實驗)

Linux終端

概念

我們與Linux系統的互動通過一個叫Shell的中間程式完成,在圖形界面下Linux系統還為我們提供了一個叫終端模拟器的程式----Terminal。終端本質上對應着Linux上的/dev/tty裝置,Linux的多使用者登入實際上就是通過不同的/dev/tty裝置完成。Linux預設提供6個Terminal。

Shell

對應于Linux核心,shell是linux系統提供給我們的“殼”,它之是以被稱作shell是因為它隐藏了作業系統的底層細節。Shell既是使用者互動的界面,也是控制系統的腳本語言,在Linux中常見的shell有bash、zsh、ksh、csh等,Ubuntu終端預設使用的是bash,實驗樓中的終端則使用zsh。

指令行操作初體驗

建立空檔案、檢視目錄

Linux基礎入門(實驗樓實驗)

運用通配符批量操作

Linux基礎入門(實驗樓實驗)
Linux基礎入門(實驗樓實驗)

在使用終端進行互動的過程中,會有指令打起來麻煩,容易打錯,終端用起來很累的感覺,熟練使用快捷鍵可以大大提高終端的使用效率,linux下的快捷鍵如

tab

補全指令、目錄、檔案名等都很好用,詳細可以參考Linux快捷鍵大全。

作業##

Linux基礎入門(實驗樓實驗)

實驗三 使用者及檔案權限管理

Linux使用者管理

Linux是可以多使用者登入的,他們共享一部分主機資源,也有自己的使用者空間。盡管他們的檔案都是放在同一個實體磁盤上,但由于Linux的使用者管理和權限控制讓使用者看起來有屬于自己的空間。

檢視使用者

輸出的第一清單示目前僞終端使用者的使用者名,第二列

pts/0

中的

pts

表示僞終端,

表示僞終端序号。

Linux基礎入門(實驗樓實驗)

建立使用者

在Linux系統中,root賬戶擁有着最高的權利,可以建立/添加使用者。我們一般登入都是以普通使用者的身份登入,要建立使用者需要root權限,這需要用到

sudo

指令。要使用這個指令需要兩個條件:

  • 知道目前使用者的登入密碼
  • 目前使用者在sudo組中

su <user>

可以切換到使用者user;

sudo <cmd>

可以以root權限運作指令cmd,這需要目前使用者屬于sudo組,且需要目前使用者的密碼;

su -<user>

也可以切換使用者,并且會把環境變量改為目标使用者的環境變量。

建立使用者、檢視使用者目錄、切換使用者

Linux基礎入門(實驗樓實驗)
Linux基礎入門(實驗樓實驗)
Linux基礎入門(實驗樓實驗)

使用者組

Linux中每個使用者都屬于一個使用者組,一個使用者可以屬于多個使用者組,同一使用者組中的使用者可以共享一部分特定的資源,當建立一個新使用者時會同時建立一個同名的使用者組,檢視使用者屬于那個使用者組可以用

groups

指令或者檢視

/etc/group

檔案。

檢視使用者組

Linux基礎入門(實驗樓實驗)

删除使用者

Linux基礎入門(實驗樓實驗)

檔案權限

檔案權限就是檔案的通路控制權限,即哪些使用者群組群可以通路檔案及可執行什麼樣的操作。

檢視檔案權限

使用長格式列出檔案

ls -l

可以看到檔案的權限。其中

r

表示讀權限,

w

表示寫權限,

x

表示執行權限。

Linux基礎入門(實驗樓實驗)

指令

ls

還可以添加其他的參數實作更多的功能,如下

Linux基礎入門(實驗樓實驗)

變更檔案所有者

chown

指令可以變更檔案的所有者,如下

Linux基礎入門(實驗樓實驗)

修改檔案權限

檔案權限修改使用

chmod

指令。檔案權限可以用二進制多項式表示,也可以用加減指派的方法表示。對于二進制表示法,按照rwx的順序,對應的值分别為4、2、1,即如果一個檔案對某使用者有rw權限,則值就是6。如下所示:

Linux基礎入門(實驗樓實驗)

作業

添加一個使用者

loutest

,使用

sudo

建立檔案

/opt/forloutest

,設定使用者

loutest

可以讀寫。

Linux基礎入門(實驗樓實驗)

思考

chmod

後接一組數字——一般是三位——表示對應使用者的權限,那麼哪一位數字對應哪些使用者呢?經查證和實驗,第一位數字表示檔案所有者權限,第二位表示與檔案所有者同組的使用者的權限,第三個數字表示其他使用者組的權限。對于四位數字的情況,相當于在原來三位之前再加一位,這一位的用法詳見詳解。

Linux基礎入門(實驗樓實驗)

實驗四 Linux目錄結構及檔案基本操作

Linux目錄結構

Linux目錄看起來和windows相似,但實際上實作機制完全不同。Windows以存儲媒體為基礎實作檔案管理,Linux則是以樹形目錄的形式來建構整個系統。

FHS标準

Linux的目錄結構是規定好的,FHS(Filesystem Hierarchy Standard)定義了兩層規範:

  1. /

    目錄下應該存放什麼檔案資料。
  2. /usr

    /var

    這兩個目錄的子目錄應該放什麼檔案資料。詳見FHS2.3标準文檔

目錄路徑

使用

cd

指令可以切換目錄,在linux裡用

.

表示目前目錄,用

..

表示上一級目錄,用

-

表示上一次所在目錄,用

~

表示目前使用者home目錄。

路徑分為相對路徑和絕對路徑,絕對路徑可以了解為完整路徑,相對路徑則是相對于目前目錄的路徑。使用

pwd

指令可以獲得目前目錄的絕對路徑。

Linux檔案的基本操作

建立檔案、目錄

Linux基礎入門(實驗樓實驗)

複制檔案、目錄

Linux基礎入門(實驗樓實驗)

删除檔案、目錄

Linux基礎入門(實驗樓實驗)

移動、重命名、檢視等

Linux基礎入門(實驗樓實驗)

檢視、編輯檔案

vim

是一個強大的檔案編輯器,Linux下還有一些其他的檔案編輯器都很好用。

批量建立并删除檔案

Linux基礎入門(實驗樓實驗)

環境變量與檔案查找

變量

變量準确的說是Shell變量,變量的作用域即變量的有效範圍(比如一個函數中、一個源檔案中或者全局範圍),在該範圍内隻能有一個同名變量。一旦離開則該變量無效,如同不存在這個變量一般。

Shell中建立變量

Linux基礎入門(實驗樓實驗)

環境變量

通常我們會涉及到的變量類型有三種:

  • 目前 Shell 程序私有使用者自定義變量,如上面我們建立的 tmp 變量,隻在目前 Shell 中有效。
  • Shell 本身内建的變量。
  • 從自定義變量導出的環境變量。

可以簡單地了解為在目前程序的子程序有效則為環境變量,否則不是。

也有三個與上述三種環境變量相關的指令:

set

env

export

。這三個指令很相似,都是用于列印環境變量資訊,卻别在于列印的變量類型不同。

可以直覺的使用

vimdiff

工具比較他們的差别:

Linux基礎入門(實驗樓實驗)

指令的查找路徑與順序

Shell執行使用者輸入的指令是通過環境變量

PATH

來搜尋的,将自己的程式路徑加入到

PATH

中,再運作自己的程式使就不需要輸入完整路徑了。

Linux基礎入門(實驗樓實驗)

通過

source

指令可以讓自己的環境變量立即生效

Linux基礎入門(實驗樓實驗)

搜尋檔案

與搜尋相關的常用指令有

whereis

which

find

locate

whereis

搜尋簡單快速,

locate

搜尋快而全,

which

小而精,

find

精而細。如圖。

Linux基礎入門(實驗樓實驗)

找出

/etc

目錄下所有以

.list

結尾的檔案。

Linux基礎入門(實驗樓實驗)

挑戰一 尋找檔案

尋找在

/etc

目錄下的

sources.list

檔案并修改檔案權限為隻有自己可以通路。

Linux基礎入門(實驗樓實驗)

可以看到本次挑戰中修改權限時犯過不少次錯誤,因為對指令中的參數對應哪些使用者還不夠熟悉,可見要想高效的的使用Linux需要很多的練習。

檔案打包與解壓縮

檔案壓縮的格式有很多,但在Linux下掌握

zip

tar

即可。

Linux基礎入門(實驗樓實驗)

實戰

zip

壓縮和

unzip

解壓縮

廢話不多說直接看操作。

Linux基礎入門(實驗樓實驗)
Linux基礎入門(實驗樓實驗)
Linux基礎入門(實驗樓實驗)

tar

打包工具

tar

原本是一個打包工具,但在Linux上同時還實作了對7z、 bzip2等壓縮工具的支援,隻是需要多加幾個參數,非常友善。

Linux基礎入門(實驗樓實驗)

建立

test

檔案,分别用zip和tar壓縮并解壓到使用者根目錄

Linux基礎入門(實驗樓實驗)

實驗七 檔案系統操作與磁盤管理

基本操作

檢視磁盤和目錄的容量

因為在實驗樓的字元界面對漢字支援有問題,是以文中出現一些“印章”請諒解。

df

Linux基礎入門(實驗樓實驗)

du

Linux基礎入門(實驗樓實驗)

簡單磁盤管理

Linux下一切即檔案,首先嘗試使用

dd

指令從标準輸入讀入并輸出到标準輸出或檔案。

Linux基礎入門(實驗樓實驗)

dd

指令建立虛拟鏡像檔案

Linux基礎入門(實驗樓實驗)

其他磁盤操作

mkfs

指令可以格式化磁盤;

mount

指令可以挂載磁盤到目錄樹;

unmount

可以解除安裝已挂載磁盤;

fdisk

指令可以為磁盤分區。

losetup

指令可以建立鏡像與回環裝置的關聯。

找出目前目錄下占用最大的前十的檔案。

Linux基礎入門(實驗樓實驗)

如圖,首先

du

指令得到檔案的大小,

sort

指令按檔案大小排序,用

head

指令取前十。

實驗八 Linux下的幫助指令

内建指令與外部指令

内建指令實際上是 shell 程式的一部分,其中包含的是一些比較簡單的 Linux 系統指令,這些指令是寫在bash源碼的builtins裡面的,由 shell 程式識别并在 shell 程式内部完成運作,通常在 Linux 系統加載運作時 shell 就被加載并駐留在系統記憶體中。而且解析内部指令 shell 不需要建立子程序,是以其執行速度比外部指令快。比如:history、cd、exit 等等。

外部指令是 Linux 系統中的實用程式部分,因為實用程式的功能通常都比較強大,是以其包含的程式量也會很大,在系統加載時并不随系統一起被加載到記憶體中,而是在需要時才将其調入記憶體。雖然其不包含在 shell 中,但是其指令執行過程是由 shell 程式控制的。外部指令是在 Bash 之外額外安裝的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。

在系統中我們可以使用

type

指令來了解一個指令的類型。

Linux基礎入門(實驗樓實驗)

幫助指令的使用

help

man

info

以上三個指令都可以獲得幫助資訊,不同的是,

help

指令用于顯示Shell内建指令的簡要幫助資訊;

man

指令沒有内建和外部之分,它顯示系統手冊頁中的内容,更加詳細;

info

是GNU的超文本幫助系統,顯示的資訊更多。

實驗九 Linux任務計劃crontab

crontab的使用

crontab簡介

crontab

指令從輸入裝置讀取指令,并将其存放于crontab檔案中,以供之後讀取和執行。通常,

crontab

儲存的指令被守護程序激活,

crond

為其守護程序,crond常常在背景運作,每一分鐘會檢查一次是否有預定的作業需要執行。

crontab準備和使用

在實驗樓需要先啟動

rsyslog

,以便通過日志中的資訊了解任務是否真的被執行了。其次手動啟動

crontab

,通過

crontab -e

添加任務。添加每分鐘01秒時建立檔案的任務如下:

Linux基礎入門(實驗樓實驗)

在檔案中首先用五個參數表示任務執行的時間,後面接具體的任務。五個時間參數分别為分、時、天、月份、周幾。

挑戰二 備份日志

為shiyanlou使用者添加計劃任務,每天三點備份alternative.log到/home/shiyanlou/tmp目錄下,命名為時間,如2018年-10月-08日,并删除前一天備份的檔案。

Linux基礎入門(實驗樓實驗)

實際上圖中的句子有一個錯誤,那就是

&&

應該為

||

,這在後面才會學到。然而即便有錯在實驗樓送出依然通過了,可見實驗樓的在檢測結果時并沒有判斷之前的檔案是否被删除了。

實驗十 指令執行順序控制與管道

指令執行的順序控制

通常情況下我們都是一條一條指令輸入,系統自然也就一條一條的執行,如果我們一次輸入多條呢?

順序執行多條指令

多條指令間可以用

隔開,這樣系統就會順序執行這些指令,這在更新并安裝軟體時十分友善。

有選擇的執行指令

實際上指令順序執行很可能遇到問題,那就是如果下一條指令的執行需要用到前一條指令的結果,那麼順序執行就會出錯。是以我們可以用

&&

||

來連接配接多條指令進行有選擇的執行。當

&&

指令傳回值是0的時候,

&&

後的指令會繼續執行;

||

則在前面的指令傳回值不為零時才會執行後面的指令。要知道前一條指令的傳回值,使用

echo $?

||

&&

任意順序連接配接指令都可以嗎?當然是可以的,其實隻要記住一條标準,那就是

||

&&

後面的指令是否執行之和他們前面一條指令的傳回值有關就行了。

管道

我們在使用一些過濾程式時經常會用到的就是匿名管道,在指令行中用分隔符

|

表示。管道連接配接兩條指令,将前一條指令的輸出直接作為下一條指令的輸入。如圖

Linux基礎入門(實驗樓實驗)

一些搭配管道食用更佳的指令

  1. wc

    指令。這個指令用于統計并輸出一個檔案中行、單詞和位元組的數目。比如統統計/etc下所有的目錄數

    ls -dl /etc/*/ | wc -l

  2. sort

    指令。排序指令,前面已經用過很多次了,這裡不再舉例。
  3. uniq

    去重指令。可用于過濾或者輸出重複行,注意這裡的重複指連續重複,是以經常搭配

    sort

    一起使用。如輸出重複過的行及重複次數

    history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -dc

    .

實驗十一 簡單的文本處理

文本處理指令

  1. tr

    指令。此指令可以用來删除或修改一段文本資訊中的某些文字。如圖78
  2. col

    指令。将

    tab

    轉為一定數量的空格或者反之。圖 79
  3. jion

    指令。将兩個檔案中包含相同内容的一行合并到一起。
  4. paste

    指令。在不對比資料的情況下,直接将多個檔案合并到一起。

不使用轉換工具的情況下,使用學過的指令手動完成dos文本到UNIX格式的轉換。

Linux基礎入門(實驗樓實驗)

很簡單就可以完成轉換,但dos文本格式和UNIX文本格式的差别真的隻有這麼點嗎?

實驗十二 資料流重定向

資料流重定向簡單的了解就是将原本輸出到一個地方的資料轉到另一個輸出位置,如輸出到标準輸出中的資料轉而輸出到檔案中。需要注意的是,标準輸出和标準錯誤輸出是兩種不同的輸出,要對這兩種資訊同時進行重定向需要特殊的操作,即使用

&>

。對比以下兩圖。

Linux基礎入門(實驗樓實驗)
Linux基礎入門(實驗樓實驗)

tee

指令可以實作資料的多重重定向,使用

exec

可以實作“永久”重定向。

Linux基礎入門(實驗樓實驗)

挑戰三 曆史指令

從指令記錄中找出頻次前三的指令并存儲。對這個實驗我是有一些疑問的。下面是送出通過的指令。

Linux基礎入門(實驗樓實驗)

下面是兩種輸出。

Linux基礎入門(實驗樓實驗)

顯然我了解的指令是下面那種輸出,但這種送出是錯誤的,正确的反而是上面那種,感覺實驗樓把檔案行數減掉後的第一個字段直接當成指令了,似乎是實驗樓錯了?

實驗十三 正規表達式基礎

正規表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、正常表示法(英語:Regular Expression,在代碼中常簡寫為 regex、regexp 或 RE),計算機科學的一個概念。正規表達式使用單個字元串來描述、比對一系列符合某個句法規則的字元串。在很多文本編輯器裡,正規表達式通常被用來檢索、替換那些符合某個模式的文本。

正規表達式不論是在什麼作業系統下,都是字元流處理的一種很常用也很重要的方式。在Linux下要注意正規表達式和通配符的區分。正規表達式中的基本文法和特殊符号如下。

Linux基礎入門(實驗樓實驗)
Linux基礎入門(實驗樓實驗)

挑戰四 資料提取

在檔案中比對出數字開頭的行,比對出正确的郵箱格式。

Linux基礎入門(實驗樓實驗)

郵箱比對實際上取巧了,因為該檔案中的資料很少這樣做不會出問題。

實驗十四 Linux下軟體安裝

  • 聯網安裝

    apt-get install <軟體包名>

  • 修複安裝

    apt-get --reinstall install <軟體包名>

  • 解除安裝

    apt-get remove <軟體包名>

  • 本地安裝

    dpkg

實驗十五、十六 程序相關

程式(procedure):不太精确地說,程式就是執行一系列有邏輯、有順序結構的指令,幫我們達成某個結果。就如我們去餐館,給服務員說我要牛肉蓋澆飯,她執行了做牛肉蓋澆飯這麼一個程式,最後我們得到了這麼一盤牛肉蓋澆飯。它需要去執行,不然它就像一本武功秘籍,放在那裡等人翻看。
程序(process):程序是程式在一個資料集合上的一次執行過程,在早期的UNIX、Linux 2.4及更早的版本中,它是系統進行資源配置設定和排程的獨立基本機關。同上一個例子,就如我們去了餐館,給服務員說我要牛肉蓋澆飯,她執行了做牛肉蓋澆飯這麼一個程式,而裡面做飯的是一個程序,做牛肉湯汁的是一個程序,把牛肉湯汁與飯混合在一起的是一個程序,把飯端上桌的是一個程序。它就像是我們在看武功秘籍這麼一個過程,然後一個篇章一個篇章地去練。

通過本實驗我們初步的了解程序在系統中存在的概念,以及程序如何在系統中衍生,發展,以及程序之間存在的互相關系,學會了程序的檢視指令 ps,pstree,top,以及使用這些指令時所得到的資訊的含義,進而擷取我們需要的資訊,同時我們學會了程序的管理指令 kill,nice,renice可以為我們在後續學習程序管理打下基礎,同時了解了工作與程序,以及工作管理的一些使用性的操作。

實驗十七 日志系統

日志資料可以是有價值的資訊寶庫,也可以是毫無價值的資料泥潭。它可以記錄下系統産生的所有行為,并按照某種規範表達出來。我們可以使用日志系統所記錄的資訊為系統進行排錯,優化系統的性能,或者根據這些資訊調整系統的行為。收集你想要的資料,分析出有價值的資訊,可以提高系統、産品的安全性,還可以幫助開發完善代碼,優化産品。日志會成為在事故發生後查明“發生了什麼”的一個很好的“驗證”資訊來源。日志可以為審計進行審計跟蹤。

系統日志主要是存放系統内置程式或系統核心之類的日志資訊如 alternatives.log 、btmp 等等,應用日志主要是我們裝的第三方應用所産生的日志如 tomcat7 、apache2 等等。

配置的日志可以使用

syslog

友善操作,日志轉儲使用

logrotate

十分友善。

通過本實驗我們了解系統日志結構,以及我們可以從中擷取什麼樣的資訊,給我們帶來什麼樣的價值。還有日志工具的配置,以及省心省力的 logrotate。

實驗感想#

Linux表面死闆,實則是一個自由度很高的系統。在終端中進行操作看似困難,但熟悉之後很多事情的效率卻遠高于圖形界面。本次實驗之前我其實用過一些Linux,那時對它的感覺就是雖然難用但是幹淨,它隻做使用者讓它做的事。經過這兩天連續使用Linux,感覺Linux其實沒那麼難用,相反在應用安裝,環境配置時感覺比windows要友善好多,而且真的是能做到“我輸入了什麼,就産生什麼結果”。這和windows等圖形界面的作業系統有很大不同,圖形界面經常滑鼠不小心點一下哪裡就完全偏離了預想的方向。繼續練習,相信Linux的使用會更加得心應手。

繼續閱讀