1. 程式人生 > 其它 >Linux學習筆記(第一週)

Linux學習筆記(第一週)

目錄

Linux 筆記

基本概念

UNIX 體系結構

作業系統(核心):一種軟體,控制計算機硬體資源,提供程式執行環境。

​ 核心的介面被稱為系統呼叫 (system call, 圖中的陰影部分)。公用函式庫構建在系統呼叫介面之上,應用程式既可使用公用函式庫,也可使用系統呼叫。(我們將在 1.11節對系統呼叫和庫函式做更多說明。) shell 是一個特殊的應用程式,為執行其他應用程式提供了一個介面。

核心

核心主要負責4種功能:

1. 系統記憶體管理
2. 軟體程式管理
3. 硬體裝置管理
4. 檔案系統管理

登入

​ 使用者在登入 UNIX 系統時,先鍵入登入名,然後鍵入口令。系統在其口令檔案(通常是 /etc/passwd 檔案)中檢視登入名。口令檔案中的登入項由 7 個以冒號分隔的欄位組成,依次是:登入名、加密口令、數字使用者 ID (205)、數字組 ID (105) 、註釋欄位、起始目錄 (/home/sar) 以及shell 程式 (/bin/ksh) 。

sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh

shell

​ shell 是一個命令列直譯器,它讀取使用者輸入,然後執行命令。 shell 的使用者輸入通常來自於終端(互動式 shell) ,有時則來自千檔案(稱為 shell 指令碼)。

​ 系統從口令檔案中相應使用者登入項的最後一個欄位中瞭解到應該為該登入使用者執行哪一個 shell 。

​ 大多數Linux 發行版都包括多種shell,但通常都會指定預設 shell 為 bash shell(Bourne again shell),由GNU 專案開發,被視為用來替代標準的 Unix shell —— Bourne shell 。

GNU工具

​ GNU組織開發了類似UNIX作業系統的標準計算機系統工具,和Linux核心一起構成了完整的GNU/Linux系統。

常用指令

Linux系統的線上求助:man page info page

# 查詢date指令的使用手冊(manual)
man date 

​ 在輸出的第一行可以看到『DATE(1)』,DATE我們知道是命令的名稱, (1)代表的是『一般使用者可使用的命令』的意思。數字的意思表示如下表:

代號 代表內容
1 使用者在shell環境中可以操作的命令或可執行檔案
2 系統核心可呼叫的函式與工具等
3 一些常用的函式(function)與函式庫(library),大部分為C的函式庫(libc)
4 裝置檔案的說明,通常在/dev下的檔案
5 配置檔案或者是某些檔案的格式
6 遊戲(games)
7 慣例與協議等,例如Linux檔案系統、網路協議、ASCII code等等的說明
8 系統管理員可用的管理命令
9 跟kernel有關的檔案

​ 在 man指令中,還有很多常用功能如下:

按鍵 進行工作
空格鍵 向下翻一頁
[Page Down] 向下翻一頁
[Page Up] 向上翻一頁
[Home] 去到第一頁
[End] 去到最後一頁
/string 向『下』搜尋 string 這個字串,如果要搜尋 vbird 的話,就輸入 /vbird
?string 向『上』搜尋 string 這個字串
n, N 利用 / 或 ? 來搜尋字串時,可以用 n 來繼續下一個搜尋 (不論是 / 或 ?) ,可以利用 N 來進行『反向』搜尋。舉例來說,我以 /vbird 搜尋 vbird 字串, 那麼可以 n 繼續往下查詢,用 N 往上查詢。若以 ?vbird 向上查詢 vbird 字串, 那我可以用 n 繼續『向上』查詢,用 N 反向查詢。
q 結束這次的 man page

​ 與 man不同,info的說明檔案將內容分成多個node,並且每個node都有定位與連結。 在各連結之間還可以具有類似『超連結』的快速按鈕,可以透過[tab]鍵在各個超連結間移動。

# 查詢date指令的使用手冊(info)
info dir 
按鍵 進行工作
空格鍵 向下翻一頁
[Page Down] 向下翻一頁
[Page Up] 向上翻一頁
[tab] 在 node 之間移動,有 node 的地方,通常會以 * 顯示。
[Enter] 當游標在 node 上面時,按下 Enter 可以進入該 node 。
b 移動游標到該 info 畫面當中的第一個 node 處
e 移動游標到該 info 畫面當中的最後一個 node 處
n 前往下一個 node 處
p 前往上一個 node 處
u 向上移動一層
s(/) 在 info page 當中進行搜尋
h 顯示求助選單
? 命令一覽表
q 結束這次的 info page

編輯器:nano

# nano 文字編輯器
nano text.txt
  • [ctrl]-G:取得聯機幫助(help),很有用的!
  • [ctrl]-X:離開naon軟體,若有修改過檔案會提示是否需要儲存喔!
  • [ctrl]-O:儲存檔案,若你有許可權的話就能夠儲存檔案了;
  • [ctrl]-R:從其他檔案讀入資料,可以將某個檔案的內容貼在本檔案中;
  • [ctrl]-W:搜尋字串,這個也是很有幫助的命令喔!
  • [ctrl]-C:說明目前游標所在處的行數與列數等資訊;
  • [ctrl]-_:可以直接輸入行號,讓游標快速移動到該行;
  • [alt]-Y:校正語法功能開啟或關閉(單擊開、再單擊關)
  • [alt]-M:可以支援滑鼠來移動游標的功能

資料同步寫入磁碟:sync

# 將記憶體中尚未被升級的資料寫入硬碟中
sync

關機命令:shutdown

# 關機
shutdown [-t 秒] [-arkhncfF] 時間 [警告資訊] 
選項與引數: 
-t sec : -t 後面加秒數,亦即『過幾秒後關機』的意思 
-k     : 不要真的關機,只是傳送警告資訊出去! 
-r     : 在將系統的服務停掉之後就重新啟動(常用) 
-h     : 將系統的服務停掉後,立即關機。 (常用) 
-n     : 不經過 init 程式,直接以 shutdown 的功能來關機 
-f     : 關機並啟動之後,強制略過 fsck 的磁碟檢查 
-F     : 系統重新啟動之後,強制進行 fsck 的磁碟檢查 
-c     : 取消已經在進行的 shutdown 命令內容。 
時間   : 這是一定要加入的引數!指定系統關機的時間!時間的範例底下會說明。 

# 示例:告訴大家,這部機器會在十分鐘後關機!並且會顯示在目前登陸者的螢幕前方! 
shutdown -h 10 'I will shutdown after 10 mins' 
# 立刻關機
shutdown -h now

重新啟動,關機:reboot

# 重啟
reboot
# 不理會目前系統狀態,硬體關機
halt
# 直接關機
poweroff

切換執行等級:init

# 直接切換關機
init 0
# 純文字模式
init 3
# 含有圖形介面模式
init 5
# 重新啟動
init 6

檔案許可權

檔案許可權概念

​ 在Linux裡面,任何一個檔案都具有『User, Group及Others』三種身份的個別許可權,可以用下圖表示:

​ 若王大毛是user,二毛三毛是group,張小豬是others。

​ 若我們想要檢視某一目錄下所有Linux相關檔案的屬性,可以使用如下命令:

# 選項『-al』則表示列出所有的檔案詳細的許可權與屬性
ls -al

​ 查詢的結果如下:

​ 這七個欄位表示的意思如下:

​ 其中第一個欄位表示的是許可權,許可權一共通過10個字元表示,各部分表示的含義如下:

  • 第一個字元代表這個檔案是『目錄、檔案或連結檔案等等』:

    • 當為[ d ]則是目錄,例如上表檔名為『.gconf』的那一行;
    • 當為[ - ]則是檔案,例如上表檔名為『install.log』那一行;
    • 若是[ l ]則表示為連結檔(link file);
    • 若是[ b ]則表示為裝置檔案裡面的可供儲存的介面裝置(可隨機存取裝置);
    • 若是[ c ]則表示為裝置檔案裡面的串列埠裝置,例如鍵盤、滑鼠(一次性讀取裝置)。
  • 接下來的字元中,以三個為一組,且均為『rwx』 的三個引數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個許可權的位置不會改變,如果沒有許可權,就會出現減號[ - ]而已。

​ 第二欄表示有多少檔名連結到此節點(i-node):

​ 每個檔案都會將他的許可權與屬性記錄到檔案系統的i-node中,不過,我們使用的目錄樹卻是使用檔名來記錄, 因此每個檔名就會連結到一個i-node囉!這個屬性記錄的,就是有多少不同的檔名連結到相同的一個i-node號碼去就是了。

許可權對檔案的重要性

​ 檔案是實際含有資料的地方,包括一般文字檔案、資料庫內容檔案、二進位制可執行檔案(binary program)等等。 因此,許可權對於檔案來說,他的意義是這樣的:

  • r (read):可讀取此一檔案的實際內容,如讀取文字檔案的文字內容等;
  • w (write):可以編輯、新增或者是修改該檔案的內容(但不含刪除該檔案);
  • x (execute):該檔案具有可以被系統執行的許可權。

許可權對目錄的重要性

  • r (read contents in directory):表示具有讀取目錄結構列表的許可權,可以查詢該目錄下的檔名資料,可以利用 ls 這個指令將該目錄的內容列表顯示出來!
  • w (modify contents of directory):對於目錄來說,可寫入許可權表示具有異動該目錄結構列表的許可權,包括以下許可權:
    • 建立新的檔案與目錄;
    • 刪除已經存在的檔案與目錄(不論該檔案的許可權為何!)
    • 將已存在的檔案或目錄進行更名;
    • 搬移該目錄內的檔案、目錄位置。
  • x (access directory):目錄的x代表的是使用者能否進入該目錄成為工作目錄。

切換使用者:su

# 切換使用者
su - user

建立使用者:useradd

# 建立使用者名稱為aaa的使用者
sudo useradd -m aaa
# -m 表示自動建立使用者的登入目錄

修改使用者密碼:passwd

# 更新使用者aaa的密碼
sudo passwd aaa

刪除使用者:userdel

# 刪除使用者aaa
sudo uesrdel -r aaa
# -r 表示同時刪除主目錄裡該使用者的檔案

檢視當前使用者資訊:whoami

# 檢視當前使用者資訊
whoami

登出使用者:logout

# 登出當前使用者
logout
exit

改變檔案屬性與許可權

改變所屬群組:chgrp

# 改變所屬群組(change group)
chgrp [-R] dirname/filename
選項與引數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案、目錄都更新成為這個群組之意。常常用在變更某一目錄內所有的檔案之情況。

​ 我們使用指令更改所屬群組的結果如下:

改變檔案擁有者:chown

# 改變所屬群組(change group)
chown [-R] 賬號名稱 檔案或目錄
chown [-R] 賬號名稱:組名 檔案或目錄
選項與引數:
-R : 進行遞迴(recursive)的持續變更,進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都變更。

​ 使用chown更改的效果如下:

改變許可權:chmod

​ 剛剛提到Linux檔案許可權字元為:『-rwxrwxrwx』,我們可以使用數字來代表各個許可權,各許可權的分數對照表如下:

r:4 w:2 x:1

​ 每種身份(owner/group/others)各自的三個許可權(r/w/x)分數是需要累加的,例如當權限為:『-rwxrwx---』分數則是:

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0

​ 所以我們設定許可權的變更,只要計算出許可權數字作為引數輸入就好。變更許可權的指令 chmod 語法如下:

# 改變檔案許可權(change mode)
chmod [-R] xyz 檔案或目錄
選項與引數:
xyz : 剛剛提到的數字型別的許可權屬性,為 rwx 屬性數值的相加。
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更

​ 使用效果如下:

​ 除了上述辦法外,還可以使用下面的方法設定:

# 設定user為rwx,group和others為rx
chmod  u=rwx,go=rx  .bashrc
# 為所有使用者增加寫許可權
chmod  a+w  .bashrc
# 為所有使用者取消執行許可權
chmod  a-x  .bashrc

​ 設定的指令規則如下表格:

chmod u g o a +(加入) -(除去) =(設定) r w x 檔案或目錄

檔案與目錄管理

目錄與路徑

變換目錄:cd

# 切換目錄(Change Directory)
cd [相對路徑或絕對路徑]
# 切換home
cd ~
# 切換vbird使用者的home目錄
cd ~vbird
# 不加任何路徑,表示切換home目錄
cd
# 切換目前的上一級目錄
cd ..
# 切換回到剛剛的目錄
cd -
# 切換絕對路徑
cd /var/spool/mail
# 切換相對路徑
cd ../mqueue

顯示目前所在目錄:pwd

# 顯示所在目錄(Print Working Directory)
pwd [-P]
# 選項與引數:
-P  :顯示出確實的路徑,而非使用連結 (link) 路徑。

建立新目錄:mkdir

# 建立新目錄(make directory)
mkdir [-mp] 目錄名稱
# 選項與引數:
-m :配置檔案的許可權喔!直接配置,不需要看預設許可權 (umask) 的臉色~
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞迴建立起來!

刪除『空』的目錄:rmdir

# 刪除空目錄(remove directory)
rmdir [-p] 目錄名稱
選項與引數:
-p :連同上一級『空的』目錄也一起刪除

環境變數 PATH

​ 當我們在執行一個命令的時候,舉例來說ls好了,系統會依照PATH的配置去每個PATH定義的目錄下搜尋檔名為ls的可執行檔, 如果在PATH定義的目錄中含有多個檔名為ls的可執行檔,那麼先搜尋到的同名命令先被執行。

# 檢視環境變數
echo $PATH

​ 關於PATH環境變數需要注意的:

  • 不同身份使用者預設的PATH不同,預設能夠隨意執行的命令也不同(如root與vbird);
  • PATH是可以修改的,所以一般使用者還是可以透過修改PATH來執行某些位於/sbin或/usr/sbin下的命令來查詢;
  • 使用絕對路徑或相對路徑直接指定某個命令的檔名來執行,會比搜尋PATH來的正確;
  • 命令應該要放置到正確的目錄下,執行才會比較方便;
  • 本目錄(.)最好不要放到PATH當中。

檔案與目錄管理

檔案與目錄檢索:ls

# 檢索檔案和目錄
ls [-aAdfFhilnrRSt] 目錄名稱
ls [--color={never,auto,always}] 目錄名稱
ls [--full-time] 目錄名稱
選項與引數:
-a  :全部的檔案,連同隱藏檔( 開頭為 . 的檔案) 一起列出來(常用)
-A  :全部的檔案,連同隱藏檔,但不包括 . 與 .. 這兩個目錄
-d  :僅列出目錄本身,而不是列出目錄內的檔案資料(常用)
-f  :直接列出結果,而不進行排序 (ls 預設會以檔名排序!)
-F  :根據檔案、目錄等資訊,給予附加資料結構,例如:
      *:代表可執行檔; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 檔案;
-h  :將檔案容量以人類較易讀的方式(例如 GB, KB 等等)列出來;
-i  :列出 inode 號碼,inode 的意義下一章將會介紹;
-l  :長資料串列出,包含檔案的屬性與許可權等等資料;(常用)
-n  :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在帳號管理提到!)
-r  :將排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小;
-R  :連同子目錄內容一起列出來,等於該目錄下的所有檔案都會顯示出來;
-S  :以檔案容量大小排序,而不是用檔名排序;
-t  :依時間排序,而不是用檔名。
--color=never  :不要依據檔案特性給予顏色顯示;
--color=always :顯示顏色
--color=auto   :讓系統自行依據配置來判斷是否給予顏色
--full-time    :以完整時間模式 (包含年、月、日、時、分) 輸出
--time={atime,ctime} :輸出 access 時間或改變許可權屬性時間 (ctime) 
                       而非內容變更時間 (modification time)

​ 在 ubuntu 中,可以設定別名(alias)來將長命令用短命令表達。ls 使用別名指定預設顯示:非隱藏檔的檔名、 以檔名進行排序及檔名代表的顏色顯示如此而已。

​ 對於ls,在 ~/.bashrc 配置裡,已經將其設定了ls -l 等同 llls -A 等同 lals -CF 等同於 l

​ 可以使用alias命令來檢視別名:

複製、刪除、移動:cp rm mv

複製:cp

cp [-adfilprsu] 來源檔(source) 目標檔(destination)
cp [options] source1 source2 source3 .... directory
選項與引數:
-a  :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
-d  :若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身;
-f  :為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次;
-i  :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
-l  :建立硬式連結(hard link),而非複製檔案本身;
-p  :連同檔案的屬性一起復制過去,而非使用預設屬性(備份常用);
-r  :遞迴持續複製,用於目錄的複製行為;(常用)
-s  :建立符號連結(symbolic link),亦即快捷方式;
-u  :若 destination 比 source 舊才升級 destination !
最後需要注意的,如果來源檔有兩個以上,則最後一個目的檔一定要是『目錄』才行!
  • 在預設的條件中, cp 的來源檔與目的檔的許可權是不同的,目的檔的擁有者通常會是命令操作者本身。假如是 root 的身份,複製過來的檔案擁有者與群組就改變成為 root 所有了。
    ​ 由於具有這個特性,因此當我們在進行備份的時候,某些需要特別注意的特殊許可權檔案, 例如密碼檔 (/etc/shadow) 以及一些配置檔,就不能直接以 cp 來複制,而必須要加上 -a 或者是 -p 等等可以完整複製檔案許可權的選項才行。
  • Hard Link:每個檔案都會佔用一個 inode ,檔案內容由 inode 的記錄來指向。想要讀取該檔案,必須要經過目錄記錄的檔名來指向到正確的 inode 號碼才能讀取。
    Symbolic link:建立一個獨立的檔案,而這個檔案會讓資料的讀取指向他 link 的那個檔案的檔名。

刪除:rm

# 移除檔案或者目錄
rm [-fir] 檔案或目錄
選項與引數:
-f  :就是 force 的意思,忽略不存在的檔案,不會出現警告資訊;
-i  :互動模式,在刪除前會詢問使用者是否動作
-r  :遞迴刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!

移動檔案與目錄,或更名:mv

# 移動檔案或者更名
mv [-fiu] source destination
mv [options] source1 source2 source3 .... directory
選項與引數:
-f  :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋;
-i  :若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋!
-u  :若目標檔案已經存在,且 source 比較新,才會升級 (update)

檔案內容查詢

直接列印

順序列印檔案內容:cat
# 列印檔案內容(Concatenate)
cat [-AbEnTv] test.txt
選項與引數:
-A  :相當於 -vET 的整合選項,可列出一些特殊字元而不是空白而已;
-b  :列出行號,僅針對非空白行做行號顯示,空白行不標行號!
-E  :將結尾的斷行位元組 $ 顯示出來;
-n  :列印出行號,連同空白行也會有行號,與 -b 的選項不同;
-T  :將 [tab] 按鍵以 ^I 顯示出來;
-v  :列出一些看不出來的特殊字元
反向列印檔案內容:tac
# 反向列印檔案內容
tac test.txt
新增行號列印檔案:nl
# 指定以某種模式新增行號列印(Number of Lines)
nl [-bnw] 檔案
選項與引數:
-b  :指定行號指定的方式,主要有兩種:
      -b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);
      -b t :如果有空行,空的那一行不要列出行號(預設值);
-n  :列出行號表示的方法,主要有三種:
      -n ln :行號在螢幕的最左方顯示;
      -n rn :行號在自己欄位的最右方顯示,且不加 0 ;
      -n rz :行號在自己欄位的最右方顯示,且加 0 ;
-w  :行號欄位的佔用的位數。

按頁列印

一頁一頁翻動:moreless
# 選擇按頁翻動檔案
more text
# 具體操作
空白鍵 (space):代表向下翻一頁;
Enter         :代表向下翻『一行』;
/字串         :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
:f            :立刻顯示出檔名以及目前顯示的行數;
q             :代表立刻離開 more ,不再顯示該檔案內容。
b 或 [ctrl]-b :代表往回翻頁,不過這動作只對檔案有用,對管線無用。
# 選擇按頁翻動檔案
less text
# 具體操作
空白鍵    :向下翻動一頁;
[pagedown]:向下翻動一頁;
[pageup]  :向上翻動一頁;
/字串     :向下搜尋『字串』的功能;
?字串     :向上搜尋『字串』的功能;
n         :重複前一個搜尋 (與 / 或 ? 有關!)
N         :反向的重複前一個搜尋 (與 / 或 ? 有關!)
q         :離開 less 這個程式;

分片讀取

讀取前幾行:head
# 顯示前幾行
head [-n number] 檔案 
選項與引數:
-n  :後面接數字,代表顯示幾行的意思
讀取後幾行:tail
# 顯示後幾行
tail [-n number] 檔案 
選項與引數:
-n  :後面接數字,代表顯示幾行的意思
-f  :表示持續偵測後面所接的檔名,要等到按下[ctrl]-c才會結束tail的偵測

顯示非純文字檔案:od

# 顯示非純文字檔案(Octal Dump)
od [-t TYPE] 檔案
選項或引數:
-t  :後面可以接各種『型別 (TYPE)』的輸出,例如:
      a       :利用預設的位元組來輸出;
      c       :使用 ASCII 位元組來輸出
      d[size] :利用十進位(decimal)來輸出資料,每個整數佔用 size bytes ;
      f[size] :利用浮點數值(floating)來輸出資料,每個數佔用 size bytes ;
      o[size] :利用八進位(octal)來輸出資料,每個整數佔用 size bytes ;
      x[size] :利用十六進位(hexadecimal)來輸出資料,每個整數佔用 size bytes ;

修改檔案時間或建置新檔: touch

有關時間的三個引數:

  • modification time (mtime):當該檔案的『內容資料』變更時,就會升級這個時間!內容資料指的是檔案的內容,而不是檔案的屬性或許可權喔
  • status time (ctime)
    當該檔案的『狀態 (status)』改變時,就會升級這個時間,舉例來說,像是許可權與屬性被更改了,都會升級這個時間啊。
  • access time (atime)
    當『該檔案的內容被取用』時,就會升級這個讀取時間 (access)。舉例來說,我們使用 cat 去讀取 /etc/man.config , 就會升級該檔案的 atime 了。
# 修訂檔案的日期與時間 或 建立空檔案
touch [-acdmt] 檔案
選項與引數:
-a  :僅修訂 access time;
-c  :僅修改檔案的時間,若該檔案不存在則不建立新檔案;
-d  :後面可以接欲修訂的日期而不用目前的日期,也可以使用 --date="日期或時間"
-m  :僅修改 mtime ;
-t  :後面可以接欲修訂的時間而不用目前的時間,格式為[YYMMDDhhmm]

檔案與目錄預設許可權

建立/修改檔案時預設許可權:umask

# 表示預設許可權需要去掉的數值 
# 理解為 umask XOR {目錄777;檔案777} = mode
umask 
# 按符號顯示預設許可權
umask -S
# 修改umask預設許可權
umask 022

配置檔案隱藏屬性:chattr

該命令只能在Ext2/Ext3的檔案系統上面生效

# 設定檔案屬性(change attributes)
chattr [+-=][ASacdistu] 檔案或目錄名稱
選項與引數:
+   :新增某一個特殊引數,其他原本存在引數則不動。
-   :移除某一個特殊引數,其他原本存在引數則不動。
=   :配置一定,且僅有後面接的引數

A  :當配置了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的計算機有幫助
S  :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。
a  :當配置 a 之後,這個檔案將只能新增資料,而不能刪除也不能修改資料,只有root才能配置這個屬性。 
c  :這個屬性配置之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)
d  :當 dump 程式被執行的時候,配置 d 屬性將可使該檔案(或目錄)不會被 dump 備份
i  :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、配置連結也無法寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能配置此屬性
s  :當檔案配置了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟空間,所以如果誤刪了,完全無法救回來了喔!
u  :與 s 相反的,當使用 u 來配置檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中,可以使用來救援該檔案喔!
# 注意:屬性配置常見的是 a 與 i 的配置值,而且很多配置值必須要身為 root 才能配置

​ 嘗試凍結檔案效果如下:

顯示檔案隱藏屬性:lsattr

# 列出檔案隱藏屬性(list attributes)
lsattr [-adR] 檔案或目錄
選項與引數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來! 

檔案特殊許可權:SUID SGID SBIT

  • Set UID:當 s 這個標誌出現在檔案擁有者的 x 許可權上時,例如剛剛提到的 /usr/bin/passwd 這個檔案的許可權狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊許可權。SUID如下限制與功能:

    1. SUID 許可權僅對二進位制程式(binary program)有效;
    2. 執行者對於該程式需要具有 x 的可執行許可權;
    3. 本許可權僅在執行該程式的過程中有效 (run-time);
    4. 執行者將具有該程式擁有者 (owner) 的許可權。

    例如使用者使用passwd指令修改密碼的時候,他會臨時獲得root的許可權,可以對 /usr/bin/passwd寫入。

  • Set GID:當 s 標誌在群組的 x 時則稱為 Set GID, SGID。

  • Sticky Bit:SBIT 目前只針對目錄有效,對於檔案已經沒有效果了。

    • 當使用者對於此目錄具有 w, x 許可權,亦即具有寫入的許可權時;
    • 當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案

    換句話說:當甲這個使用者於 A 目錄是具有群組或其他人的身份,並且擁有該目錄 w 的許可權, 這表示『甲使用者對該目錄內任何人建立的目錄或檔案均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的許可權專案時, 則甲只能夠針對自己建立的檔案或目錄進行刪除/更名/移動等動作,而無法刪除他人的檔案。

配置特殊許可權

​ 在原有三個表示許可權的數字之前再加上一個數字的話,最前面的那個數字就代表這幾個許可權了:

  • 4 為 SUID
  • 2 為 SGID
  • 1 為 SBIT

觀察檔案的基本型別:file

# 檢視檔案型別
file

命令與檔案搜尋

命令檔案的搜尋:which

# 尋找執行檔案
which [-a] command
選項或引數:
-a :將所有由 PATH 目錄中可以找到的命令均列出,而不止第一個被找到的命令名稱

which根據PATH這個環境變數所規範的路徑,去搜尋執行檔案的檔名。

特定檔案的搜尋:whereis locate find

# 尋找指定檔案
whereis [-bmsu] 檔案或目錄名
選項與引數:
-b    :只找 binary 格式的檔案
-m    :只找在說明檔 manual 路徑下的檔案
-s    :只找 source 來原始檔
-u    :搜尋不在上述三個專案當中的其他特殊檔案
# 以資料庫方式搜尋檔案
locate [-ir] keyword
選項與引數:
-i  :忽略大小寫的差異;
-r  :後面可接正規表示法的顯示方式
# 按條件查詢檔案
find [PATH] [option] [action]
選項與引數:
1. 與時間有關的選項:共有 -atime, -ctime 與 -mtime ,以 -mtime 說明
   -mtime  n :n 為數字,意義為在 n 天之前的『一天之內』被更動過內容的檔案;
   -mtime +n :列出在 n 天之前(不含 n 天本身)被更動過內容的檔案檔名;
   -mtime -n :列出在 n 天之內(含 n 天本身)被更動過內容的檔案檔名。
   -newer file :file 為一個存在的檔案,列出比 file 還要新的檔案檔名
2. 與使用者或群組名稱有關的引數:
   -uid n :n 為數字,這個數字是使用者的帳號 ID,亦即 UID ,這個 UID 是記錄在/etc/passwd 裡面與帳號名稱對應的數字。
   -gid n :n 為數字,這個數字是群組名稱的 ID,亦即 GID,這個 GID 記錄在/etc/group
   -user name :name 為使用者帳號名稱喔!例如 dmtsai 
   -group name:name 為群組名稱喔,例如 users ;
   -nouser    :尋找檔案的擁有者不存在 /etc/passwd 的人!
   -nogroup   :尋找檔案的擁有群組不存在於 /etc/group 的檔案!當你自行安裝軟體時,很可能該軟體的屬性當中並沒有檔案擁有者,這是可能的!在這個時候,就可以使用 -nouser 與 -nogroup 搜尋。
3. 與檔案許可權及名稱有關的引數:
   -name filename:搜尋檔名稱為 filename 的檔案;
   -size [+-]SIZE:搜尋比 SIZE 還要大(+)或小(-)的檔案。這個 SIZE 的規格有:c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB還要大的檔案,就是『 -size +50k 』
   -type TYPE    :搜尋檔案的型別為 TYPE 的,型別主要有:一般正規檔案 (f),裝置檔案 (b, c), 目錄 (d), 連結檔 (l), socket (s), 及 FIFO (p) 等屬性。
   -perm mode  :搜尋檔案許可權『剛好等於』 mode 的檔案,這個 mode 為類似 chmod 的屬性值,舉例來說, -rwsr-xr-x 的屬性為 4755 !
   -perm -mode :搜尋檔案許可權『必須要全部囊括 mode 的許可權』的檔案,舉例來說,我們要搜尋 -rwxr--r-- ,亦即 0744 的檔案,使用 -perm -0744,當一個檔案的許可權為 -rwsr-xr-x ,亦即 4755 時,也會被列出來,因為 -rwsr-xr-x 的屬性已經囊括了 -rwxr--r-- 的屬性了。
   -perm +mode :搜尋檔案許可權『包含任一 mode 的許可權』的檔案,舉例來說,我們搜尋 -rwxr-xr-x ,亦即 -perm +755 時,但一個檔案屬性為 -rw------- 也會被列出來,因為他有 -rw.... 的屬性存在!