此文包含的命令: cd、pwd、mkdir、rmdir、rm、ls、cp、mv、cat、tac、more、less、head、tail、od、touch、umask、chattr、lsattr、file、chgrp、chown。 理論: 一、檔案的種類 正規檔案:[-] 目錄(directory): ...
此文包含的命令:
cd、pwd、mkdir、rmdir、rm、ls、cp、mv、cat、tac、more、less、head、tail、od、touch、umask、chattr、lsattr、file、chgrp、chown。
理論:
一、檔案的種類
正規檔案:[-]
- 純文本檔案(ASCII):用戶看得懂的數字或字母等組成的。
- 二進位文件(binary): 操作系統認識的文件。即可執行的0101代碼文件。
- 數據格式文件(data): 應用程式認識的文件格式。例如last命令才能查看的/var/log/wtmp登入數據記錄文件。
目錄(directory):[d]
連結檔(link):[l]
類似與windows的快捷方式。
設備與裝置文件(device):[b]、[c] 通常在/dev目錄下
- 區塊(block)設備檔 :[b] 例如硬碟,可以隨機在硬碟的不同區塊讀寫。
-
字元(character)設備文件:[c] 例如鍵盤滑鼠,一次性順序讀取。
資料介面文件(sockets):[s] 通常在/var/run目錄下
這種類型的檔案通常被用在網路上的數據承接,我們可以啟動一個程式來監聽客戶端的要求, 而客戶端就可以透過這個socket來進行 數據的溝通
數據輸送文件(FIFO, pipe):[p]
FIFO也是一種特殊的文件類型,他主要的目的在解決多個程式同時存取一個檔案所造成的錯誤問題。
二、檔案的擴展名
- *.sh : 腳本戒批處理文件 (scripts),因為批處理文件為使用shell寫成的
- *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件。這是因為壓縮軟體分別為 gunzip, tar 等。
- *.html, *.php:網頁相關檔案,分別代表 HTML 語法不 PHP 語法的網頁檔案啰!.html 的檔案可使用網頁瀏覽器直接打開,.php的檔案透過client端的瀏覽器瀏覽server端,以得到運算後的網頁。
三、許可權與指令的關係
- 讓用戶能進入某目錄成為『可工作目錄』的基本許可權為何:
- )可使用的指令:例如 cd 等變換工作目錄的指令
- )目錄所需許可權:用戶對這個目錄至少需要具有 x 的許可權
- 用戶在某個目錄內讀取一個檔案的基本許可權為何?
- )可使用的指令:例如本章談到的 cat, more, less等等
- )目錄所需許可權:用戶對這個目錄至少需要具有 x 許可權;
- )檔案所需許可權:使用者對檔案至少需要具有 r 的許可權才行!
- 讓使用者可以修改一個檔案的基本許可權為何?
- )可使用的指令:例如 nano 或 vi 編輯器等;
- )目錄所需許可權:用戶在該檔案所在的目錄至少要有 x 許可權;
- )檔案所需許可權:使用者對該檔案至少要有 r, w 許可權
- 讓一個使用者可以建立一個檔案的基本許可權為何?
- )目錄所需許可權:用戶在該目錄要具有 w,x 的許可權
- 讓用戶進入某目錄並執行該目錄下的某個指令的基本許可權為何?
- )目錄所需許可權:用戶在該目錄至少要有 x 的許可權;
- )檔案所需許可權:使用者在該檔案至少需要有 x 的許可權
四、特殊的許可權--suid、sgid、sbid
- SUID (set UID)
當 s 這個標誌出現在檔案擁有者的 x 許可權上時(『-rwsr-xr-x』),則此檔案有SUID屬性,如/usr/bin/passwd。
- SUID的限制和功能:
- SUID 許可權僅對二迚製程序(binary program)有效;(對shell script和目錄都無效)
- 執行者對於該程式需要具有 x 的可執行許可權;
- 本許可權僅在執行該程式的過程中有效 (run-time);
- 執行者將具有該程式擁有者 (owner) 的許可權。
- SUID的限制和功能:
- SGID (set GID)
s 在群組的 x 時則稱為 Set GID, 即SGID。 例如 /usr/bin/locate
- 如果是對檔案來說, SGID 有如下的功能:
- SGID 對二迚製程序有用;
- 程式執行者對於該程式來說,需具備 x 的許可權;
- 執行者在執行的過程中將會獲得該程式群組的支持!
- 如果是對目錄來說, SGID 有如下的功能:
- 用戶若對於此目錄具有 r 與 x 的許可權時,該用戶能夠進入此目錄;
- 用戶在此目錄下的有效群組(effective group)將會變成該目錄的群組;即進入該目錄的用戶創建的檔案或目錄屬組都是此目錄的屬組。
- 用途:若用戶在此目錄下具有 w 的許可權(可以新建檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同。
- 如果是對檔案來說, SGID 有如下的功能:
- SBIT (Sticky Bit)
Sticky Bit, SBIT 目前只針對目錄有效,對於檔案已經沒有效果了。
SBIT 對於目錄的作用是:
- 當用戶對於此目錄具有 w, x 許可權,亦即具有寫入的許可權時;
- 當用戶在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案
五、檔案的時間屬性。
- modification time (mtime): 當該檔案的『內容數據』變更時,就會更新這個時間!內容數據指的是檔案的內容,而不是檔案的屬性或許可權喔!
- status time (ctime): 當該檔案的『狀忞 (status)』改變時,就會更新這個時間,舉例來說,像是許可權與屬性被更改了,都會更新這個時間啊。
- access time (atime): 當『該檔案的內容被取用』時,就會更新這個讀取時間 (access)。舉例來說,我們使用 cat 去讀取 /etc/man.config , 就會更新該檔案的 atime 了。
- 總結:
- 對目錄沒有x執行許可權就無法訪問目錄。
- w許可權對於檔案不包含刪除許可權;對於目錄則可以刪除目錄或檔案。
- 複製行為(cp)會複製執行者的屬悵不許可權.
命令:
一、常用命令
- cd 變換目錄
- pwd 顯示當前工作目錄
- ls [-aAdfFhilnrRSt] 目錄名稱 顯示目錄或檔案屬性
-
- ls [--color={never,auto,always}] 目錄名稱
- -a 全部的檔案,連同隱藏檔( 開頭為 . 的檔案) 一起列出來(常用)
- -d 僅列出目錄本身,而不是列出目錄內的檔案數據(常用)
- -l 長數據串列出,包含檔案的屬性與許可權等等數據;(常用)
- -S 以檔案容量大小排序,而不是用檔名排序
- -t 依時間排序,而不是用檔名。
- --full-time 以完整時間模式 (包含年、月、日、時、分) 輸出
- --time={atime,ctime} 輸出 access 時間或改變許可權屬性時間 (ctime) 而非內容變更時間 (modification time)
4. cp [-adfilprsu] 來源文件(source) 目標文件(destination)
-
- cp [options] source1 source2 source3 .... directory
- -a 相當亍 -pdr 的意思,至亍 pdr 請參考下列說明;(常用)
- -i 若目標文件(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
- -p 連同檔案的屬性一起複制過去,而非使用預設屬性(備份常用);
- -r 遞歸持續複製,用於目錄的複製行為;(常用)
- -d 若來源文件為鏈接文件的屬性(link file),則複製鏈接文件屬性而非檔案本身。
- -s 複製成為符號鏈接文件 (symbolic link),亦即『快捷方式』檔案;
- -u 若 destination 比 source 舊才更新 destination !比對的時間為創建時間(mtime)。
5. mv [-fiu] source destination
-
- mv [options] source1 source2 source3 .... directory
- -f force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋;
- -i 若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋!
- -u 若目標檔案已經存在,且 source 比較新,才會更新 (update) 比對的時間為創建時間。
6. rm [-fir] 檔案或目錄
-
- -f 就是 force 的意思,忽略不存在的檔案,不會出現警告訊息;
- -i 互動模式,在刪除前會詢問使用者是否動作
- -r 遞歸刪除,最常用在目錄的刪除
7. umask [-S] 查看檔案設定分數
-
- 新建目錄或檔案的許可權等於預設許可權減去umask許可權,目錄預設許可權預設為777,檔案預設許可權預設為666
- umask xxxx 為設置umask值
8. file 文件路徑 查看文件類型
二、目錄相關命令
- mkdir [-mp] 目錄名稱 創建一個新目錄
- -m 直接設置目錄的許可權。
- -p 幫助你直接將所需要的目錄(包含上層目錄)遞歸建立起來!
- rmdir [-p] 目錄名稱 刪除一個空目錄
- -p 連同上層『空的』目錄也一起刪除
三、檔案相關命令
- cat [-AbEnTv] 檔案名
- -n 列印出行號,連同空白行也會有行號,與 -b 的選項不同;
- -b 列出行號,僅針對非空白行做行號顯示,空白行不標行號!
- -A 相當於 -vET 的整合選項,可列出一些特殊字元而不是空白而已;
- tac 檔案名 反向列示
- more 檔案名
- 空格鍵 (space):代表向下翻一頁;
- Enter :代表向下翻『一行』;
- /字元串 :代表在這個顯示的內容當中,向下搜尋『字元串』這個關鍵詞;
- :f :立刻顯示出文件名以及目前顯示的行數;
- q :代表立刻離開 more ,不再顯示該檔案內容。
- b 或 [ctrl]-b :代表往回翻頁,不過這動作只對檔案有用,對管線無用。
- less 檔案名
- 空格鍵 :向下翻動一頁;
- [pagedown]:向下翻動一頁;
- [pageup] :向上翻動一頁;
- /字元串 :向下搜尋『字元串』的功能;
- ?字元串 :向上搜尋『字元串』的功能;
- n :重覆前一個搜尋 (與 / 或 ? 有關!)
- N :反向的重覆前一個搜尋 (與 / 或 ? 有關!)
- q :離開 less 這個程式;
- head [-n number] 檔案
- -n 後面接數字,代表顯示幾行的意思(接負數則表示除了後面n行)
- tail [-nf number] 檔案
- -n 後面接數字,代表顯示幾行的意思
- -f 表示持續偵測後面所接的檔名,要等到按下[ctrl]-c才會結束tail的偵測
- 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 [-acdmt] 檔案
- -a :僅修訂 access time;
- -c :僅修改檔案的時間,若該檔案不存在則不建立新檔案;
- -d :後面可以接欲修訂的日期而不用目前的日期,也可以使用 --date="日期或時間"
- -m :僅修改 mtime ;
- -t :後面可以接欲修訂的時間而不用目前的時間,格式為[YYMMDDhhmm]
四、目錄或檔案許可權相關命令
- chgrp 改變所屬群組
- # chgrp -R user test 修改test目錄及其子目錄或檔案的屬組為user
- chown 改變檔案擁有者
- chown [-R] 賬號名稱 檔案戒目彔
- hown [-R] 賬號名稱:組名 檔案戒目彔
- chmod 改變許可權
- 數字類型改變檔案許可權
- 命令: # chmod [-R] xyz 目錄或檔案
- owner = rwx = 4+2+1 = 7----------X
- group = rwx = 4+2+1 = 7----------y
- others= --- = 0+0+0 = 0----------z
- 符號類型改變檔案許可權
- 命令: # chmod [-R] ABC,ABC,ABC 目錄或檔案-----------ABC之間用逗號分開
- A={u 屬主 g 屬組 o 其他人 a 所有}--------一次可多選
- B={ + 加入 - 除去 = 設定 }
- C={r 讀 w 寫 x 執行 } --------一次可多選
- 數字類型改變檔案許可權
- SUID、SGID、SBIT 特殊許可權設置
- 基本屬性的基礎上,前面再加上一個1、2、3、4、5、6、7之中的一個!
- u+s 或g+s 或o+t
- chattr [+-=][ASacdistu] 檔案或目錄名 配置文件夾或檔案的隱藏屬性
- a :當設定 a 之後,這個檔案將只能增加數據,而不能刪除也不能修改數據,只有root 才能設定這個屬性。使用>>添加內容
- i :讓一個檔案『不能被刪除、改名、設定連結也無法 寫入或新增資料!』對亍系統安全性有相當大的幫助!只有 root 能設定此屬性
- lsattr [-adR] 檔案或目錄 顯示檔案或目錄的隱藏屬性
- -a :將隱藏文件的屬性也秀出來;
- -d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的文件名;
- -R :連同子目錄的數據也一併列出來!
五、指令與檔案的查找
- which (尋找『執行檔』)
- which 是根據用戶所設定的 PATH 變數內的目錄去搜尋可執行文件的!
- which [-a] 執行檔名稱
- -a :將所有由 PATH 目錄中可以找到的指令均列出,而不止第一個被找到的指令名稱
- whereis (尋找特定的檔案)
- 搜尋資料庫檔案,速度較快。(因為 Linux 系統會將系統內的所有檔案都記錄在一個資料庫檔案裡面)
- whereis [-bmsu] 檔案或目錄名
- -b :只找 binary 格式的檔案
- -m :只找在說明文件 manual 路徑下的檔案
- -s :只找 source 杢源檔案
- -u :搜尋丌在上述三個項目弼中的其他特殊檔案
- locate (尋找特定的檔案)
- 『已建立的資料庫 /var/lib/mlocate/』
- 更新locate資料庫的命令:updatedb。updatedb 指令會去讀取 /etc/updatedb.conf 這個配置文件的設定,然後再去硬碟裡面進行搜尋文件名的動作
- locate [-ir] keyword
- -i :忽略大小寫的差異;
- -r :後面可接正則表示法的顯示方式
- find (尋找特定的檔案)
- find可以根據【時間】、【使用者或組名】、【檔案許可權以及名稱、大小】、【-exec 接額外的動作 \;】----其中而外的動作中由【指令加{}組成】---{}為前面find匹配的內容
- find [PATH] [option] [action]
- 例題:
- 找出 /etc 底下,檔案大小介於 50K 到 60K 之間的檔案,並且將許可權完整的列出 (ls -l):
- find /etc -size +50k -a -size -60k -exec ls -l {} \;
- 嘗試用 find 找出目前 linux 系統中,所有具有 SUID 的檔案有哪些?
- find / -perm +4000 -print
- 找出 /etc 底下,容量大於 1500K 以及容量等於 0 的檔案:
- find /etc -size +1500k -o -size 0
- 找出 /etc 底下,檔案容量大於 50K 丏檔案所屬人丌是 root 的檔名,且將許可權完整的列出 (ls -l);
- find /etc -size +50k -a ! -user root -exec ls -ld {} \;
- find /etc -size +50k -a ! -user root -type f -exec ls -l {} \; 均可
- 找出 /etc 底下,3天前5天內更改過的檔案
- find /etc -mtime +3 -a -mtime -5 -exec ls -l {} \;