Linux 筆記 基本概念 UNIX 體繫結構 操作系統(內核):一種軟體,控制電腦硬體資源,提供程式運行環境。 內核的介面被稱為系統調用 (system call, 圖中的陰影部分)。公用函數庫構建在系統調用介面之上,應用程式既可使用公用函數庫,也可使用系統調用。(我們將在 1.11節對系統 ...
目錄
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
等同ll
,ls -A
等同la
,ls -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 :行號欄位的占用的位數。
按頁列印
一頁一頁翻動:more
、less
# 選擇按頁翻動文件
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如下限制與功能:- SUID 許可權僅對二進位程式(binary program)有效;
- 運行者對於該程式需要具有 x 的可運行許可權;
- 本許可權僅在運行該程式的過程中有效 (run-time);
- 運行者將具有該程式擁有者 (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.... 的屬性存在!