為了熟悉 Linux 系統的基本技巧,學習記錄一些下指令的操作,內容真的非常多。以下紀錄了關於操作使用者帳號、群組、目錄、檔案…等等的常用指令,內容有簡化過了,方便查詢使用,請善用Ctrl + F
搜尋關鍵詞。
Table of Contents
快捷鍵
shift + pageup
- 顯示超出畫面可以往上移動,類似上滾輪
shift + pagedown
- 顯示超出畫面可以往下移動,類似下滾輪
ctrl + d
- 登出現在的使用者或直接離開,等於指令
exit
- 登出現在的使用者或直接離開,等於指令
ctrl + z
- 暫停程序,並將程序放置背景
\ + enter
- 使指令連續到下一行
常用指令
基礎
- date: 顯示日期與時間
date [+%Y/%m/%d %H:%M]
- cal: 顯示日曆
cal [month] [year]
- bc: 簡單好用的計算機
改變檔案或目錄的屬性、權限
chgrp: 改變檔案所屬群組
chgrp [-R] 群組名稱 檔案或目錄
- -R 遞迴改變整個目錄裡的所有檔案(包含目錄本身)
chown: 改變檔案擁有者
chown [-R] 帳號名稱 檔案或目錄
chown [-R] 帳號名稱:群組名稱 檔案或目錄
chmod: 改變檔案的權限, SUID, SGID, Sticky bit等等的特性
chmod [-R] 數字或文字表示 檔案或目錄
- 每個檔案一定都會有 user、group、other 的所屬權限
- 每個所屬權限在一般情況下都有 read(可讀)、write(可寫)、execute(可執行) 的權限可設定
- 數字表示可以是3位數或4位數
- 一般: r=4, w=2, x=1
- 特殊: SUID=4, SGID=2, Sticky bit=1
- 範例:
chmod 754 name
=> user: r+w+x, group: r+x, other: r - 範例:
chmod 4754 name
=> 這裡多了的第一個數字為加上特殊權限SUID
- 文字表示
u
g
o
a
(全部)+
-
=
r
w
x
s
t
- 以
,
隔開 - 範例:
chmod u+rwx,g-x,o=r name
- 範例:
chmod u+s,g+s name
=> 此檔案加上SUID與SGID的權限
umask: 查看或修改檔案預設權限
umask [-S]
=> 此為查看umask [數字表示]
=> 此為修改- -S 以文字表示顯示當時預設的權限
- 若是數字表示顯示的方式,表示為 被拿掉的權限
- 範例: 022 => 表示 group 與 other 都預設拿掉寫入(wirte)的權限
檔案與目錄的管理(新增.刪除.修改.移動)
指令 | 使用對象 | 說明 | 使用方法 | 註備 |
---|---|---|---|---|
mkdir | dir | 建立新目錄 | mkdir [-mp] 目錄 |
-m 加入權限,後面接代號 -p 遞迴建立目錄 |
rmdir | dir | 刪除空目錄 | rmdir [-p] 目錄 |
-p 遞迴刪除目錄 目錄下必須為空才能刪 |
cp | file/dir | 複製檔案或目錄 | cp [-ari] 來源檔 目標檔 |
-a 使資料特性完全一樣 -r 遞迴複製整個目錄 -i 會先詢問動作 |
rm | file/dir | 刪除檔案或目錄 | rm [-rfi] 檔案或目錄 |
-r 遞迴刪除整個目錄 -f 強制刪除,忽略不存在的項目 -i 會先詢問動作 |
mv | file/dir | 移動檔案與目錄 | mv [-fiu] 來源檔 目標檔 |
-f 強制覆蓋已存在的檔案 -i 會先詢問動作 -u檔案已存在較舊才覆蓋 |
mv | file/dir | 更改名稱 | mv 原始名稱 更改名稱 |
有類似的指令rename |
touch | file | 建立空檔案 | touch 檔案 |
另個功能是更改日期 |
- touch: 更改檔案日期
touch [-amt] [YYMMDDhhmm] 檔案
- -a 僅修訂 atime;
- -m 僅修改 mtime;
- -t atime與mtime都會被修改
- 範例:
touch -t 201704011200 name
=> 將檔案時間更改為 2017/04/01 12:00
檔案內容查閱
指令 | 說明 | 常用方式 |
---|---|---|
cat | 從第一行開始顯示 | cat [-n] name 列印出行號,連同空白行也會有行號;cat [-A] name 可列出一些特殊字符 |
tac | 從最後一行開始顯示 | tac name |
less | 一頁一頁的方式顯示 | less name |
head | 只看頭幾行 | head -n 20 name |
tail | 只看尾幾行 | tail -n 5 name |
搜尋相關
which: 指令檔名的搜尋 (預設只會顯示找到的第一個)
which [-a] 指令名稱
- -a 列出找到的所有檔案路徑名
whereis: 特定檔案的搜尋 (以資料庫的索引來搜尋)
whereis 搜尋字串
- 通常只會去系統的目錄下搜尋檔案或目錄
locate: 檔案名稱的搜尋 (以資料庫的索引來搜尋)
locate [-lir] 搜尋字串
- -l 只可以輸出幾行的意思
- -i 忽略大小寫的差異
- -r 後面接正規表示法
- 查詢速度非常快
- 在使用
locate 搜尋字串
之前,請先下指令updatedb
,用於更新資料庫,可以避免剛新增的檔案無法被搜尋到 - Linux 每天會自動更新一次資料庫
find: 檔案名稱、使用者、群組名稱…等等的搜尋
find [PATH] [option] [action]
- 一般帳號與root帳號顯示出來的會不一樣
- 查詢速度很慢,盡量少用
- 範例:
find / -name 檔案或目錄名稱
- 範例:
find / -group 群組名稱
grep: 在指定的檔案內容中進行文字搜索
grep 搜尋字串 檔案1 檔案2...
- 可以一次搜索多個檔案
其他
pwd: 顯示目前的目錄
pwd [-P]
- -P 顯示出確實的路徑,而非使用連結 (link) 路徑
cd: 變換目錄
cd [相對路徑或絕對路徑]
ls: 檔案與目錄的檢視
ls [-adlt] 檔名或目錄
ls [--full-time] 檔名或目錄
- -a 全部的檔案,連同隱藏檔一起列出來
- -d 僅列出目錄本身,而不是列出目錄內的檔案資料
- -l 長資料串列出,包含檔案的屬性與權限
- -t 以時間作為排序(預設為檔案名稱做排序)
- –full-time 以完整時間模式(包含年、月、日、時、分)輸出
- 可使用簡化指令
ll
等於ls -al
(常用)
使用者與群組管理之相關指令
使用者操作
useradd: 新增使用者
useradd [-u UID] [-g 初始群組] [-G 次要群組] [-c 說明欄] [-d 家目錄絕對路徑] 帳號名
passwd: 設定使用者密碼
passwd [-luS] 帳號名
- -l 封鎖此帳號,會將 /etc/shadow 第二欄最前面加上!使密碼失效
- -u 解鎖此帳號
- -S 檢測是否為被封鎖
chage: 顯示詳細的密碼參數
chage [-l] 帳號名
- -l 列出該帳號的詳細密碼參數
usermod: 變更使用者帳號
usermod [-u UID] [-g 初始群組] [-G 次要群組] [-c 說明欄] [-d 家目錄絕對路徑] 帳號名
usermod [-LU] 帳號名
- -L 封鎖此帳號,會將 /etc/shadow 第二欄最前面加上!使密碼失效
- -U 解鎖此帳號
userdel: 刪除使用者帳戶與其相關的檔案
userdel [-r] 帳號名
- -r 連同使用者的家目錄也一起刪除
id: 查詢帳號或自己的相關 UID/GID 等等的資訊
id [帳號名]
群組操作
groupadd: 建立群組
groupadd [-g GID] 群組名
groupmod: 變更群組
groupmod [-g GID] [-n 修改群組名稱] 群組名
groupdel: 刪除群組
groupdel 群組名
- 在刪除之前,必須要確認 /etc/passwd 內的帳號沒有任何人使用該群組作為 初始群組
- 再刪除之前可使用
find / -group 群組名
檢查
gpasswd: 群組管理員功能
- 只有root能做的指令:
gpasswd 群組名
- 只有root能做的指令:
gpasswd [-A 帳號1] [-M 帳號2,...] 群組名
- 只有root能做的指令:
gpasswd [-rR] 群組名
- 若沒有任何參數時,則是給予該群組一個密碼
- -A 將此群組的主控權交給指定帳號(群組管理員)
- -M 將帳號加入該群組當中
- -r 將此群組的密碼移除
- -R 讓此群組的密碼欄失效
- 群組管理員與root能做的指令:
gpasswd [-ad] 帳號 群組名
- -a 將帳號加入該群組當中
- -d 將帳號從該群組當中移除
- 只有root能做的指令:
groups: 有效與支援群組的觀察
groups
- 第一個顯示的群組為有效群組
newgrp: 有效群組的切換
newgrp 群組名
- 切換後會進入新的環境,使用指令
exit
切換回原來的有效群組
參考:
如果有興趣的朋友想要更詳細瞭解指令怎麼用的
請詳見《鳥哥的 Linux 私房菜》,裡面有更多知識等你去尋找囉!