天天看點

《LINUX與UNIX SHELL程式設計指南》學習筆記

linux下檔案的幾種類型:目錄,符号連結、套接字檔案....。要注意,說到的檔案類型是一個不一樣的概念。linux下檔案的類型不是字尾名上進行差別。

"-"表示該檔案是一個普通類型的檔案。什麼是普通類型檔案?你得記住linux下幾種類型的檔案。不屬于那裡面列出的,就屬于普通類型檔案了。

chmod 77- 檔案名

讀 4 寫 2 執行 1

專業點的描述:chmod改變權限的方式分為:符号模式(就是使用了使用者符号進行表示)和絕對模式(就是"chmod 777 檔案名"的形式)

絕對模式的一點注意:實際上它是按照8進制進行計算的。而像讀權限是4這樣的表示方式,隻是因為總結出來的一種快捷方式。這樣不用去記8進制了。

chmod 74- yoa 這裡錯誤了。沒注意到一個地方:在絕對模式下,如果想設定沒有任何權限,不是使用"-",而是讓其值為0即可。

針對目錄擁有可執行權限與針對檔案擁有可執行權限,由于對象不同。所表現的概念是不同的。下面差別:

讀權限:檔案則表示可以檢視檔案内容。目錄表示能列出目錄。其實讀目錄,也就是列出該目錄中有什麼内容。本質是一樣的。讀權限表示可以讀内容,而想想目錄的内容是什麼呢?打開目錄内容,就是列出目錄。實際表現是:使用ls能夠列出所有内容資訊。如果沒有該權限。則不行。

寫權限:檔案表示可以修改檔案内容和删除檔案(注意這點)。由于寫權限可以對目标的内容進行修改。如果将目錄的内容看成是所有檔案和子檔案夾的組合。那麼寫權限對于目錄而言,就是能夠在目錄下建立檔案(疑問:删除目錄下的檔案也算嗎?)。

執行權限:針對檔案就是當成可執行檔案進行解析。那麼針對目錄,就是能否進入目錄裡面去。

我應該想到,既然在linux所有檔案都涉及到權限。而linux中檔案包含七種類型(目錄和普通檔案隻是其中一種類型)。,實際上,檔案權限隻針對檔案和目錄表現上有差別。其他的不管你是普通檔案,還是塊裝置檔案、套接字檔案。隻要與目錄進行差別了,權限對他們起作用都一樣的

建立一個檔案是,權限設定有個預設模式:就是你不做設定。系統會自動設定擁有的權限是rw。而沒有x權限(這是出于安全考慮,想想,假如别人把這個檔案當成程式進行執行,會産生不可預料的效果)

然後,這裡就可以明白umask指令了。它就是設定和顯示檔案的預設權限的。

軟連結術語:

符号連結包括軟連結和硬連結。

符号連結就是一個指針,執行一個具體的對象。跟windows環境比較,就類似于"快捷方式"的功能

軟連結的辨別或者表現特征:1.使用ls檢視資訊中顯示檔案的類型是l 2.檔案名顯示類似 "->"的形式

umask學習:

1.可以這樣解釋:系統為每個使用者配置設定了一個umask值。這樣,使用者所建立的檔案預設擁有哪些權限,就是根據umask值确定的。

2.輸入:umask  顯示:002 。的含義是:目前使用者(我)所擁有的umask值是002。也就是其建立的檔案對應擁有什麼樣的權限

3.umask的值計算方法記住兩點:一、檔案的最大權限是6。目錄的最大權限值是7 二、就是拿掉umask值中對應的權位。得到的就是檔案和目錄所擁有的權限。

umask值是3  。可以這樣推測:3=2+1.那麼 就要去掉寫權限和執行權限。得到的對象所擁有的權限是讀權限。

看了上面例子,那麼不要這樣了解了:檔案最大權限 6-3=3 那麼得到的權限應該是寫權限和執行權限。這麼了解,導緻計算的結果錯誤了。

多用吧。就會明白的。還有看列出的那個表。

c h o w n指令總結:

1.幹什麼用的?

change own的縮寫。作用是改變一個檔案的屬主(所有者)。通俗點,就是改變檔案的所有權。

2.指令先要看得懂

chown 使用者名 檔案

3.chgrp指令跟chown一樣。隻是是改變一個檔案的所屬組。那個使用者名變成了組名

這裡想到一個疑問:假如一個檔案所有權是b使用者。而b使用者所屬組是g。那麼該檔案上是否是屬于g組呢?

chgrp是change group的縮寫。應該是專門針對檔案屬于某個組使用的。如果檔案上所有權是一個使用者,而不是一個組。那麼使用chgrp指令起不到作用。你無法改變其所屬組的。

suid/guid使用的比較少。隻需要了解就行了。原因是出于安全性考慮。一般linux廠商都不支援該功能。

第一章(檔案安全與權限)總結:

1.主要講了檔案分哪幾種類型。在linux上檔案擁有哪些權限,如何使用指令配置設定檔案權限。

2.介紹的指令包括:chmod、umask、chown

3.附帶涉及到的知識有:chmod指令設定分為符号模式和絕對模式。怎麼顯示目前使用者所屬組。軟連結使用。

第二章:find指令和xargs

1.find指令功能就相當于windwos系統中的查找。find指令非常耗費系統時間。尤其是在根目錄下進行查找。

2.find指令就是的參數位置:find ~ -name "*.txt" -print; 查找範圍 查找選項(按什麼進行查找) 查找對象 附加選項。

猜測:find程式應該是預設按固定位置進行解析。學了java才明白。指令行的形式傳遞參數,所有的參數儲存在一個args數組中。一次讀取數組的每個元素。哪個下标對應什麼,都預定義好了的。比如第一個作為查找範圍,第二個就使用if進行判斷。根據不同的值進入對應的語句塊中。

第三章:背景執行指令

1.crontab條目:crontab檔案中的條目。一行就是一個條目,表示一個操作。

2.crontab檔案:每個檔案要送出給cron程序。使用指令:crontab davecron;這樣cron程序能夠知道

3.cron程序:

4.crontab指令向cron程序送出檔案。而at指令是向程序送出作業,稍後運作。

5.每個指令執行後面加上&符号。那麼表示将該指令在背景進行運作。這樣就不占用螢幕。示例:指令 &

6.nohup指令:no  hang up 。表示不挂起。在退出系統前,想讓指令繼續在背景執行。使用該指令。

7.将腳本的輸出重定向到一個檔案:  腳本 > 檔案名 2>1&

第三章總結:

主要内容:主講了在背景執行的指令使用。cron程序。crontab檔案的條目設定。如何建立crontab檔案并送出給cron程序。如何向cron程序送出一個作業。将一個腳本的輸出結果定向到一個檔案。

學習到的指令:crontab(向cron程序送出一個crontab檔案)、at(向cron程序送出一個作業)、nohup(送出一個作業。在我退出的時候,不挂起該作業)、ps(檢視程序号的相關資訊)、kill(殺死程序)

第四章總結 主要講了替換中用到元字元介紹,使用方式。

元字元:像替換中用到的"?","*"這些用來替代的符号(對一個集合的字元用一個符号進行替代)。就是元字元。\

學過正則中的符号,就知道那些就是元字元了。

第五章:shell 輸入與輸出

原來:腳本執行結果,如果不指定輸出到什麼地方,預設總是會輸出到螢幕的

第六章:指令執行順序

&&表示左邊指令執行成功。才執行右邊指令。代碼示範:mv /apps/bin /apps/dev/bin && rm -r /apps/bin

|| 表示左邊執行失敗,就執行右邊指令。

小結:主要講了&&和||兩個符号的知識與作用。{}是子shell中執行。()是在目前shell執行。這個具體怎麼了解?

"|"有的時候表示同時執行。

第八章:grep家族

我們常常使用的 ls -l | grep 'd' 原來是這樣的意思:使用左邊的結果作為右邊的輸入。原來grep指令是需要提供查找的檔案名,也就是範圍。現在這種方式,就将左邊的結果視為檔案即可。

什麼時候使用單引号,何時使用雙引号:查找具體的字元時,使用雙引号,按照模式進行比對的時候,使用單引号

第九章:awk介紹

awk '{}'  {}裡面常常是具體的動作

awk指令專門 用來操作檔案的。搜尋查詢之類的操作

awk視為一個單獨的shell指令子產品,它有着自己的指令格式。比如有if判斷語句,可以實作邏輯業務

第十章:sed用法介紹

sed跟vi一樣,是一個文本編輯器。唯一差別在于:sed是一個非互動性文本編輯器。非互動性,不需要獲得輸入資訊,可以在背景執行操作。

使用它的好處在于:可以不在現場,節省使用者時間。