20189215《Linux內核原理與分析》第一週做業

實驗1 Linux系統簡介

本節主要學習了 Linux 的歷史,Linux 與 Windows 的區別等入門知識。經過學習,我明確了目的,是要用 Linux 來作程序開發、搭建服務器等;而且很是接受不用或少用圖形界面;儘量多學習一些Linux的發行版。在安裝Ubuntu時也遇到了不支持虛擬化的問題,進入BIOS設置得以解決。linux

實驗2 基本概念及操做

  • 學習實踐
  1. 通配符?*的區別

    ?匹配一個字符,*匹配一個或者多個字符。
  2. 批量創建文件
  • 做業
  1. banner命令


    -w參數指定打印寬度,由於實驗樓的環境在屏幕中顯示比較小,必需要加上寬度限制。
  2. toilet命令
  3. flight命令

實驗3 用戶及文件權限管理

  • 學習實踐
  1. 切換用戶
  2. 添加用戶組
    可使用groups命令,或者查看/etc/group文件查看用戶組,使用usermod添加用戶組。
  3. 更改文件全部者
    使用chown命令更改文件權限
  4. 權限更改
    (1)數字更改權限
    數字說明:
    0 - 無權限
    1 - 可執行
    2 - 可寫
    3 - 可寫可執行
    4 - 可讀
    5 - 可讀可執行
    6 - 可讀可寫
    7 - 可讀可寫可執行
    三個數字分別對應文件全部者、所屬用戶組、其餘用戶。

    (2)加減賦值更改權限
    u、g、o分別對應文件全部者、所屬用戶組、其餘用戶。
    +和-分別表示增長、去除權限。
    r、w、x分別表示讀、寫、執行。
  • 做業
    題目:添加一個用戶 loutest,使用 sudo 建立文件 /opt/forloutest,設置成用戶 loutest 能夠讀寫。
  1. 添加用戶loutest
  2. 用戶loutest加入sudo用戶組
  3. 切換用戶建立文件並修改權限

實驗4 Linux目錄結構及文件基本操做

FHS(英文:Filesystem Hierarchy Standard 中文:文件系統層次結構標準),多數 Linux 版本採用這種文件組織形式,FHS 定義了系統中每一個區域的用途、所須要的最小構成的文件和目錄同時還給出了例外處理與矛盾處理。
FHS 定義了兩層規範,第一層是,/ 下面的各個目錄應該要放什麼文件數據,例如 /etc 應該放置設置文件,/bin/sbin則應該放置可執行文件等等。第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如/var/log放置系統日誌文件,/usr/share放置共享數據等等。git

  • 學習實踐
  1. rename批量修改文件名
    修改文件名可使用mv命令,可是想要批量修改的話,須要使用rename命令。
  2. cattac命令(正反)
  3. file命令查看文件類型
  • 做業
  1. 建立一個 homework 目錄,創建名爲 1.txt~10.txt 文件,並刪除 1.txt~5.txt
  2. Linux的日誌文件在哪一個目錄?
    日誌文件基本在/var/log和/var/run中。
    (1)/var/log/boot.log(自檢過程)
    (2)/var/log/cron (crontab守護進程crond所派生的子進程的動做)
    (3)/var/log/maillog (發送到系統或從系統發出的電子郵件的活動)
    (4)/var/log/syslog (只記錄警告信息)
    (5)/var/run/utmp
    (6)/var/log/wtmp(記錄每一個用戶登陸、註銷及系統的啓動、停機的事件)
    (7)/var/run/utmp(記錄有關當前登陸的每一個用戶的信息)
    (8)/var/log/xferlog(記錄FTP會話)

實驗5 環境變量與文件查找

  • 學習實踐
  1. 添加環境變量
  2. 添加自定義路徑且當即生效
  3. 搜索文件
    whereis --簡單快速
    which --小而精
    find --精而細
    locate --快而全,經過/var/lib/mlocate/mlocate.db數據庫查找,不過這個數據庫也不是實時更新的,系統會使用定時任務天天自動執行 updatedb命令更新一次,因此有時候你剛添加的文件,它可能會找不到,須要手動執行一次 updatedb命令。
  • 做業
    題目:尋找文件。找出 /etc/ 目錄下的全部以 .list 結尾的文件
    實驗樓的環境運行不了updatedb命令,因此本次做業在本身電腦上進行。

挑戰1 尋找文件

  • 目標:
  1. 找到sources.list文件(依稀記得在/etc/目錄下)
  2. 把文件全部者改成本身(shiyanlou)
  3. 把權限修改成僅僅只有本身可讀可寫
  • 解答:

實驗6 文件打包與解壓縮

  • 學習實踐
  1. zip打包
    -r表示遞歸打包,將目錄下全部文件打包。
    -9表示打包速度與大小等級設定,1表示最快壓縮但體積大,9表示體積最小但耗時最久。
    -q表示靜默打包,不向終端輸出信息。
    -o表示輸出文件。
  2. tar命令
    -c表示建立一個 tar 包文件
    -x表示解壓縮文件,只能解壓縮到一個已存在的目錄,因此下圖中第一次實現錯誤提示。
    -f 用於指定建立的文件名,注意文件名必須緊跟在 -f 參數以後
  • 做業
    題目:建立一個名爲 test 的文件,分別用 zip 和 tar 打包成壓縮包,再解壓到 /home/shiyanlou 目錄。

實驗7 文件系統操做與磁盤管理

  • 學習實踐
  1. 建立虛擬磁盤
  2. 虛擬磁盤掛載
    因爲實驗樓環境的問題(環境中使用的 Linux 內核在編譯時沒有添加對 Loop device的支持),因此將沒法掛載成功。

    在本身機器上掛載成功。
  • 做業
    題目:找出當前目錄下面佔用最大的前十個文件
    du -a | sort -n -r | head -n 10
    使用du查看當前目錄,並使用-a參數顯示大小,sort進行排序,head取前十。

實驗8 Linux下的幫助命令

  • 學習實踐
    Linux命令分爲內建命令和外部命令。內建命令是 shell 程序的一部分,其中包含的是一些比較簡單的 Linux 系統命令,這些命令是寫在bash源碼的builtins裏面的,並由 shell 程序識別並在 shell 程序內部完成運行,並且解析內部命令 shell 不須要建立子進程,所以其執行速度比外部命令快。好比:history、cd、exit 等等。外部命令是 Linux 系統中的實用程序部分,在系統加載時並不隨系統一塊兒被加載到內存中,而是在須要時纔將其調用內存。雖然其不包含在 shell 中,可是其命令執行過程是由 shell 程序控制的。外部命令是在 Bash 以外額外安裝的,一般放在/bin,/usr/bin,/sbin,/usr/sbin等等。好比:ls、vi等。
    可使用type進行區分。

    help命令是用於顯示 shell 內建命令的簡要幫助信息。
    man沒有內建與外部命令的區分,顯示系統手冊頁中的內容,大多數都是對命令的解釋信息,還有一些相關的描述。
    info是 GNU 的超文本幫助系統,可以更完整的顯示出 GNU 信息。

實驗9 Linux任務計劃crontab

  • 學習實踐
  1. crontab


    添加*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)能夠實現每分鐘在/home/shiyanlou目錄下建立一個以當前的年月日時分秒爲名字的空白文件。
  2. 查看守護進程
    雖然剛剛添加了任務,可是若是cron的守護進程並無啓動,它根本都不會監測到有任務,固然也就不會執行.能夠經過如下2種方式來肯定cron是否成功的在後臺啓動。
  3. 查看文件,能夠看到已經自動執行了幾回

挑戰2 備份日誌

  • 目標:
  1. 爲shiyanlou用戶添加計劃任務。
  2. 天天凌晨3點的時候定時備份alternatives.log到/home/shiyanlou/tmp/目錄。
  3. 命名格式爲年-月-日,好比今天是2017年4月1日,那麼文件名爲2017-04-01。
  • 解答:
    使用crontab -e爲當前用戶添加計劃任務,此時不能使用sudo,不然是給root用戶添加計劃任務。
    添加以下代碼便可:
    0 3 * * * cp alternatives.log /home/shiyanlou/tmp/$(date +\%Y-\%m-\%d)

實驗10 命令執行順序控制與管道

  • 學習實踐
  1. 有選擇的執行命令
    && 表示前一條命令執行成功時才執行後一條命令,|| 表示上一條命令執行失敗後才執行下一條命令
  2. cut命令,1,6顯示第1和第6段,1~6顯示1到6段。

  3. wc計數命令
    wc 命令用於統計並輸出一個文件中行、單詞和字節的數目。
    -l :行數
    -w :單詞數
    -c :字節數
    -m:字符數
    -L :最長行字節數
  4. wc結合管道,統計/etc下面全部目錄數

實驗11 簡單的文本處理

  • 學習實踐

    tr命令能夠用來刪除一段文本信息中的某些文字。或者將其進行轉換。
    -d參數:刪除。
    -s參數:去重。
  • 做業
    題目:在不使用轉換工具的狀況下,使用學過的命令手動完成 dos 文本格式到 UNIX 文本格式的轉換。
    使用tr -d '\r' <test.txt> tes.txt進行轉換,將test.txt轉換爲tst.txt。

實驗12 數據流重定向

  • 學習實踐
  1. 重定向
    分別進行:將cat的連續輸出(heredoc方式)重定向到一個文件;
    echo命令經過管道傳過來的數據做爲cat命令的輸入,將標準輸出做爲命令的輸出;
    echo命令的輸出從默認的標準輸出重定向到一個普通文件。
  2. 標準錯誤定向到標準輸出再定向到文件
    標準錯誤不能直接定向到標準輸出,能夠用如下兩種方式:
  3. tee命令同時重定向到文件和終端
  4. exec實現shell重定向
  5. 建立、關閉文件描述符

  • 做業
    題目:理解下面這段代碼的做用,實際這段代碼不會正常工做,請結合這一小節的知識分析這段代碼沒有正確工做的緣由,並設法解決這個問題。
while read filename; do
    rm -iv $filename
done <<(ls)

理解:這段代碼的本意是讀取當前目錄的文件列表,並有交互地刪除。
rm -iv的做用是在刪除時進行交互,而且顯示步驟。它期待用戶從標準輸入中輸入y或者n來進行是否刪除的操做,可是標準輸入被<<(ls)重定向了,rm命令在 <<(ls)中尋找y或者n,找不到就中斷退出了。
解決:標準輸入必定要給到循環體,此時將標準輸入複製一份,給予rm -iv命令進行交互便可。正則表達式

exec 8<&0    //此時使用3~8都可
while read filename; do
    rm --iv $filename <&8
done <<(ls)

挑戰3 歷史命令

  • 目標:
  1. 處理文本data
  2. 將結果寫入result
  3. 結果包含次數和命令,如「100 ls
  • 解答:
    cat data1 | cut -c 8- | sort |uniq -dc | sort -n -r | head -3 > result

實驗13 正則表達式基礎

  • 學習實踐
  1. grep操做,使用正則表達式(做業:結合正則表達式作更多練習)
    注意:當^放到中括號內爲排除字符,不然表示行首。

  2. 使用擴展正則表達式,加-E,不加則不執行
  3. sed
    sed工具用於過濾和轉換文本的流編輯器。打印奇數行,並將"shiyanlou" 全局替換爲"ly"。
    p一般與-n參數配合使用,不能省略最後的p命令。
  4. awk文本處理語言


    \t要用雙引號。
  • 做業
    題目:基於 pattern space 和 hold space 實現將一個文本倒序輸出和交換奇數行和偶數行。
  1. 反序
    sed '1!G;h;$!d' test.txt
    1!G —— 只有第一行不執行G命令,將hold space中的內容append回到pattern space
    h —— 第一行都執行h命令,將pattern space中的內容拷貝到hold space中
    $!d —— 最後一行不執行。其它行執行d命令,刪除當前行
  2. 奇偶互換
    sed -n 'h;$!{n;G};p' test.txt
    -n —— -n參數靜默模式,只打印受影響的行
    h —— 將pattern space中內容拷貝到 hold space中
    $!{n,G} —— 最後一行不執行。n進入下一行,G將hold space中內容append到pattern space中,appttern space中的兩行位置交換了
    p —— 打印出交換後的兩行
    注意:最後一行不執行的目的,是若是最後一行是奇數行,不須要交換直接打印。

挑戰4 數據提取

  • 目標:
    在文件data2中匹配數字開頭的行,結果寫入/home/shiyanlou/num文件
    在文件data2中匹配出正確格式的郵箱,結果寫入一個名爲/home/shiyanlou/mail的文件
  • 解答:
  1. data2的內容
  2. 匹配數字開頭的行
    grep '^[[:digit:]]' data2>num
  3. 匹配正確格式郵箱
    grep'^[[:alnum:]]*@[[:alnum:]]*\.com' data2>mail

實驗14 Linux下軟件安裝

  • 學習實踐
  1. apt-get是用於處理 apt包的公用程序集,咱們能夠用它來在線安裝、卸載和升級軟件包等。
    比較有用的幾個參數:
    -f——修復損壞的依賴關係
    -d——只下載不安裝
    --reinstall——從新安裝已經安裝但可能存在問題的軟件包
  2. dpkg工具——"Debian Package"的簡寫
    能夠安裝deb形式打包的軟件包。
  3. 從二進制包安裝
    二進制包的安裝比較簡單,將從網絡上下載的二進制包解壓後放到合適的目錄,而後將包含可執行的主程序文件的目錄添加進PATH環境變量便可。

實驗1五、16 Linux 進程概念和管理

經過這兩節大體瞭解進程的概念、進程之間存在的相互關係、進程的查看命令pspstreetop、進程的管理命令killnicerenice等。shell

實驗17 Linux 日誌系統

經過本實驗,瞭解了較新的系統日誌收集工具rsyslog及其配置文件,還有一個日誌文件管理工具logrotate,省心省力,不但能夠壓縮日誌文件,減小存儲空間,還能夠將日誌發送到指定E-mail,方便管理員及時查看日誌。logrotate是基於CRON來運行的,其腳本是 /etc/cron.daily/logrotate;同時咱們能夠在 /etc/logrotate中找到其配置文件。數據庫

小結

本次進行了共計21個實驗,即便之前使用過Ubuntu系統,也學習到了不少新的知識,將我對Linux系統的認識扳回了正確的方向,即便表面類似,內部的原理也是大有不一樣的。學習了不少知識,可是不少命令還不熟練,須要本身在實際使用中加深理解,熟練使用。bash

相關文章
相關標籤/搜索