20189215《Linux內核原理與分析》第一周作業


實驗1 Linux系統簡介

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

實驗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放置共享數據等等。

  • 學習實踐
  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環境變量即可。

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

通過這兩節大致了解進程的概念、進程之間存在的相互關系、進程的查看命令pspstreetop、進程的管理命令killnicerenice等。

實驗17 Linux 日志系統

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

小結

本次進行了共計21個實驗,即使以前使用過Ubuntu系統,也學習到了很多新的知識,將我對Linux系統的認識扳回了正確的方向,即使表面相似,內部的原理也是大有不同的。學習了很多知識,但是很多命令還不熟練,需要自己在實際使用中加深理解,熟練使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM