第二週主要學習了文本編輯工具vim,vim支持強大的文本編輯功能,須要掌握其經常使用的一些功能,標準IO和管道,,以及用戶組和權限管理。 git
vi: Visual editor, 文本編輯器
文本:ASCII, Unicode
文本編輯種類:行編輯器:sed
全屏編輯器:nano, vi,vim shell
三種主要模式:
1.命令(Normal)模式:
默認模式,移動光標,剪切/粘貼文本
2.插入(Insert)或編輯模式:修改文本
3.擴展命令(extended command )模式:保存,退出等
Esc鍵 退出當前模式,
Esc鍵 Esc鍵 老是返回到命令模式 vim
1.關閉文件
1.1.擴展命令模式:
:q 退出
:q! 強制退出,丟棄作出的修改
:wq 保存退出
:x 保存退出
1.2.命令模式
ZZ 保存退出
ZQ 不保存退出
2.擴展命令模式
按「:」進入Ex模式
2.1.建立一個命令提示符: 處於底部的屏幕左側
2.2.常見命令
w 寫(存)磁盤文件
wq 寫入並退出
x 寫入並退出
q 退出
q! 不存盤退出,即便更改都將丟失
r filename 讀文件內容到當前文件中
w filename 將當前文件內容寫入另外一個文件
!command 執行命令
r!command 讀入命令的輸出
3.命令模式命令
3.1.行間移動:
#G 或者擴展命令模式下:# 跳轉至由第#行
G 最後一行
1G, gg 第一行
句間移動:) 下一句 ( 上一句
段落間移動:} 下一段 { 上一段
3.2.字符編輯:
x 刪除光標處的字符
#x 刪除光標處起始的#個字符
xp 交換光標所在處的字符及其後面字符的位置
~ 轉換大小寫
J 刪除當前行後的換行符
替換命令(r, replace)
r 替換光標所在處的字符
R 切換成REPLACE模式
3.3.刪除命令:
d 刪除命令,可結合光標跳轉字符,實現範圍刪除
d$ 刪除到行尾
d^ 刪除到非空行首
d0 刪除到行首
dw
de
db
#COMMAND
dd:刪除光標所在的行
#dd 多行刪除
D:從當前光標位置一直刪除到行尾,等同於d$
4.擴展命令模式
4.1.地址定界
/pattern/ 匹配pattern的行
/pat1/,/pat2/
從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束
#,/pat/
/pat/,$
使用方式:後跟一個編輯命令
dy
w file: 將範圍內的行另存至指定文件中
r file:在指定位置插入指定文件中的全部內容
4.2.查找和替換
/PATTERN:從當前光標所在處向文件尾部查找
?PATTERN:從當前光標所在處向文件首部查找
n:與命令同方向
N:與命令反方向
在擴展命令模式下完成查找替換操做
格式:s/要查找的內容/替換爲的內容/修飾符
要查找的內容:可以使用模式
替換爲的內容:不能使用模式,但可使用\1, \2, ...等後向引用符號;還可
以使用「&」引用前面查找時查找到的整個內容less
修飾符:
i 忽略大小寫
g 全局替換,默認狀況下,每一行只替換第一次出現
gc 全局替換,每次替換前詢問
查找替換中的分隔符/可替換爲其它字符
s@/etc@/var@g
s#/boot#/#i 編輯器
Linux給程序提供三種 I/O 設備
標準輸入(STDIN)-0 默認接受來自鍵盤的輸入
標準輸出(STDOUT)-1 默認輸出到終端窗口
標準錯誤(STDERR)-2 默認輸出到終端窗口
I/O重定向:改變默認位置 ide
STDOUT和STDERR能夠被重定向到文件
命令 操做符號 文件名
支持的操做符號包括:
\> 把STDOUT重定向到文件
2\> 把STDERR重定向到文件
&> 把全部輸出重定向到文件
\> 文件內容會被覆蓋
set -C 禁止將內容覆蓋已有文件,但可追加
\>| file 強制覆蓋
set +C 容許覆蓋
\>> 原有內容基礎上,追加內容 工具
2> 覆蓋重定向錯誤輸出數據流
2>> 追加劇定向錯誤輸出數據流
標準輸出和錯誤輸出各自定向至不一樣位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合併標準輸出和錯誤輸出爲同一個數據流進行重定向
&> 覆蓋重定向
&>> 追加劇定向
COMMAND > /path/to/file.out 2>&1 (順序很重要)
COMMAND >> /path/to/file.out 2>&1
():合併多個程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt 學習
tr 轉換和刪除字符
tr [OPTION]... SET1 [SET2]
選項:
-c –C --complement:取字符集的補集
-d --delete:刪除全部屬於第一字符集的字符
-s --squeeze-repeats:把連續重複的字符以單獨一個字符表示
-t --truncate-set1:將第一個字符集對應字符轉化爲第二字符集對應的字符
[:alnum:]:字母和數字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符
[:digit:]:數字 [:graph:]:圖形字符 [:lower:]:小寫字母 [:print:]:可打印字符
[:punct:]:標點符號 [:space:]:空白字符 [:upper:]:大寫字母
[:xdigit:]:十六進制字符 spa
管道(使用符號「|」表示)用來鏈接命令
命令1 | 命令2 | 命令3 | …
將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的
STDIN
STDERR默認不能經過管道轉發,可利用2>&1 或 |& 實現
最後一個命令會在當前shell進程的子shell進程中執行
組合多種工具的功能
ls | tr ‘a-z’ ‘A-Z’
less :一頁一頁地查看輸入
ls -l /etc | less
mail: 經過電子郵件發送輸入
echo "test email" | mail -s "test" wang@example.com
bc:算術運算
echo "2^3" |bc code
Linux組的類別
用戶的主要組(primary group)
用戶必須屬於一個且只有一個主組
組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組(supplementary group)
一個用戶能夠屬於零個或多個輔助組
Linux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性
useradd [options] LOGIN
-u UID
-o 配合-u 選項,不檢查UID的惟一性
-g GID 指明用戶所屬基本組,可爲組名,也能夠GID
-c "COMMENT「 用戶的註釋信息
-d HOME_DIR 以指定的路徑(不存在)爲家目錄
-s SHELL 指明用戶的默認shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 爲用戶指明附加組,組須事先存在
-N 不建立私用組作主組,使用users組作主組
-r 建立系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
-m 建立家目錄,用於系統用戶
-M 不建立家目錄,用於非系統用戶
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主組 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被
覆蓋;若保留原有,則要同時使用-a選項
-s SHELL:新的默認SHELL
-c 'COMMENT':新的註釋信息
-d HOME: 新家目錄不會自動建立;若要建立新家目錄並移動原家數據,
同時使用-m選項
-l login_name: 新的名字
-L: lock指定用戶,在/etc/shadow 密碼欄的增長 !
-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
-e YYYY-MM-DD: 指明用戶帳號過時日期
-f INACTIVE: 設定非活動期限
passwd [OPTIONS] UserName: 修改指定用戶的密碼
經常使用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登陸修改密碼
-f:強制操做
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提早多少天開始警告
-i inactivedays:非活動期限
--stdin:從標準輸入接收用戶密碼
chage [OPTION]... LOGIN
-d LAST_DAY
-E --expiredate EXPIRE_DATE
-I --inactive INACTIVE
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 顯示密碼策略
-g GID 指明GID號;[GID_MIN, GID_MAX]
-r 建立系統組
組屬性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
組刪除:groupdel
groupdel GROUP
組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,... 設置有管理權限的用戶列表
newgrp命令:臨時切換主組
若是用戶本不屬於此組,則須要組密碼
groupmems [options] [action]
options: -g, --group groupname 更改成指定組 (只有root)
actions:
-a, --add username 指定用戶加入組
-d, --delete username 從組中刪除用戶
-p, --purge 從組中清除全部成員
-l, --list 顯示組成員列表
groups [OPTION].[USERNAME]... 查看用戶所屬組列表
修改文件的屬主:chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
用法說明:
OWNER
OWNER:GROUP
:GROUP,冒號也可用 . 替換
-R: 遞歸
chown [OPTION]... --reference=RFILE FILE...
修改文件的屬組:chgrp
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 遞歸
文件:
r 可以使用文件查看類工具獲取其內容
w 可修改其內容
x 能夠把此文件提請內核啓動爲一個進程
目錄:
r 可使用ls查看此目錄中文件列表
w 可在此目錄中建立文件,也可刪除此目錄中的文件
x 可使用ls -l查看此目錄中文件元數據(須配合r),能夠cd進入此目錄
X 只給目錄x權限,不給文件x權限
文件權限操做命令:chmod
文件權限(rwx|X)
修改文件權限
chmod [OPTION]... OCTAL-MODE FILE...
-R: 遞歸修改權限
chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
修改一類用戶的全部權限
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + - chmod [OPTION]... --reference=RFILE FILE...
參考RFILE文件的權限,將FILE的修改成同RFILE
任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有
執行權限
啓動爲進程以後,其進程的屬主爲原程序文件的屬主
SUID只對二進制可執行程序有效
SUID設置在目錄上無心義
權限設定:
chmod u+s FILE...
chmod u-s FILE...
任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有
執行權限
啓動爲進程以後,其進程的屬組爲原程序文件的屬組
權限設定:
chmod g+s FILE...
chmod g-s FILE...
默認狀況下,用戶建立文件時,其屬組爲此用戶所屬的主組 一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中建立的文件
所屬的組爲此目錄的屬組
一般用於建立一個協做目錄
權限設定:
chmod g+s DIR...
chmod g-s DIR...
具備寫權限的目錄一般用戶能夠刪除該目錄中的任何文件,不管該文件的權限
或擁有權
在目錄設置Sticky 位,只有文件的全部者或root能夠刪除該文件
sticky 設置在文件上無心義
權限設定:
chmod o+t DIR...
chmod o-t DIR...
除了文件的全部者,所屬組和其它人,能夠對更多的用戶設置權限
ACL生效順序:全部者,自定義用戶,自定義組,其餘人
爲多用戶或者組的文件和目錄賦予訪問權限rwx
mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -m g:admins:rw file| directory
setfacl -x u:wang file |directory
setfacl -b file1 清除全部ACL權限
getfacl file1 | setfacl --set-file=- file2 複製file1的acl權限給file2
mask隻影響除全部者和other的以外的人和組的最大權限 mask須要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission) 用戶或組的設置必須存在於mask權限設定範圍內纔會生效 setfacl -m mask::rx file --set選項會把原有的ACL項都刪除,用新的替代,須要注意的是必定要包含UGO的設置,不能象-m同樣只是添加ACL就能夠