1、總結文本編輯工具vim的使用方法;
全螢幕的編輯器:VIM
vi: visual interface
sed:行編輯器
vi, vi iMproved
vim:
模式化:
編輯模式:指令模式
輸入模式:
末行模式:
編輯模式 --> 輸入模式:
i: insert,
a:append,
o:new line,
I: 行首
A:行尾
O:上方建立行
輸入模式 --> 編輯模式:
ESC
編輯模式 --> 末行模式:
:
末行模式 --> 編輯模式
打開vim:
# vim
# vim /PATH/TO/SOMEFILE
+#:#為行号;
+/PATTERN
關閉vim:
:q
:q!
:wq
:x
ZZ:儲存退出
光标跳轉:
字元間跳轉:
h:
l:
j:
k:
#COMMAND:
單詞間跳轉:
w:後單詞的詞首
e:目前或後一個單詞的詞尾;
b:目前或前一單詞的詞首;
#COMMAND:
行内跳轉:
^: 跳轉至行首的第一個非空白字元;
0:跳轉至行首;
$: 跳轉至行尾;
行間移動:
#G:
1G, gg
G
句間移動:
)
(
段落間移動:
}
{
編輯指令:
字元編輯:
x: 删除光标所在處的字元
#x:
xp:
r: 替換光标所在處的字元;
删除指令:
d:
d^
d$
d0
dw, de, db
dd:
#COMMAND
注意:删除的内容會被vim編輯器儲存至緩沖區當中;
粘貼:p (paste, put)
如果此複制或删除的内容不是一個完整行
p:粘貼至目前光标所在處後面;
P:粘貼至目前光标所在處前面;
如果複制的内容是完整行(可不止一行)
p: 粘貼至目前光标所在行下方;
P:行上方;
複制指令:y, yank
y
y$, y^, y0
ye, yw, yb
yy: 複制行
改變指令:c, change
c$, c^, c0
cb, ce, cw
cc:
撤消此前的編輯操作:
u: undo
撤消此前編輯操作;
#u
Ctrl+r:
恢複此前的撤消操作
.: 重複前一個編輯操作
翻屏操作:
Ctrl+f: 向後一屏;
Ctrl+b:向前一屏;
Ctrl+d: 向後半屏
Ctrl+u: 向前半屏
vim内建教程:
vimtutor
vim的末行模式
(1) 位址,定界
:start_pos,end_pos
#:第#行;
#,#
#,+#
.: 目前行
$: 最後一行
%: 全文,相當于1,$
/pat1/:第一次被此模式所比對到的行;
#,/pat1/
/pat1/,/pat2/
後可跟編輯指令:
d, y
w, r
(2) 查找
/PATTERN:向尾部進行
?PATTERN:向首部進行
n: 與指令同方向
N:與指令反方向
(3) 查找替換
s: 在末行模式下,在位址定界的範圍内完成查找替換操作;
s/要查找的内容/替換為的内容/修飾符
要查找的内容:可使用模式
替換為的内容:不能使用模式,但可以使用後向引用符号,以引用前面模式中的分組括号所比對到的内容;
\1, \2, ...
&:引用"要找的内容"比對到的整個内容;
修飾符:
i: 忽略大小寫
g: 全局替換
/:用于分隔符,是以,要查找的内容或替換為的内容中出現此符号,要使用\對其轉義,使用格式:\/
分隔符可替換為其它字元:例如@,#等;
多檔案模式:
vim FILE1 FILE2 ...
:next
:first
:prev
:last
:wqall
:q!all
多檔案視窗分割:
vim -o|-O FILE1 FILE2 ...
Ctrl+w, ARROW
單檔案視窗分割:
Ctrl+w, s: split, 水準分割
Ctrl+w, v: vertical, 垂直分割
定制vim的某些工作特性:
(1) 行号
顯示:set nu
禁用:set nonu
(2) 括号比對
顯示:set sm
禁用:set nosm
(3) 自動縮進:
set ai
set noai
(4) 高亮搜尋
set hlsearch
set nohlsearch
(5) 文法着色
syntax on
syntax off
(6) 忽略字元大小寫
set ic
set noic
:help 擷取幫助
:help SUBJECT
特性設定的永久生效方式:
全局配置檔案:/etc/vimrc
使用者個人的配置檔案:~/.vimrc
2、總結檔案查找指令find的使用方法;
find指令:
find [OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:預設為目前路徑;
查找條件:指定的查找标準,可以根據檔案名、大小、屬主屬組、類型等進行;預設為找出指定路徑下的所有檔案;
處理動作:對符合條件的檔案做什麼操作;預設為輸出至螢幕;
查找條件:
根據檔案名進行查找:
-name "檔案名稱": 支援使用glob;
*, ?, []
-iname "檔案名稱":不區分字元大小寫,支援使用glob;
-regex "PATTERN":以PATTERN比對整個檔案路徑字元串,而不僅僅是檔案名稱;
根據屬主、屬組查找:
-user USERNAME: 查找屬主為指定使用者的檔案;
-group GROUPNAME:
-uid UserID: 查找檔案的屬主指定uid的檔案;
-gid GroupID:
-nouser: 查找沒有屬主的檔案;
-nogroup:查找沒有屬組的檔案;
根據檔案類型進行查找:
-type TYPE
f: 普通檔案
d: 目錄
l: 符号連結
b: 塊裝置
c: 字元裝置
p: 命名管道
s: 套接字
組合查找條件:
與條件:-a
或條件:-o
非條件:-not, !
!A -o !B = !(A -a B)
!A -a !B = !(A -o B)
根據檔案大小來查找:
-size [+|-]#UNIT
機關:k, M, G
#UNIT: (#-1,#]
+#UNIT: (#,+oo)
-#UNIT:[0,#-1]
根據時間戳:
以"天"為機關
-atime [+|-]#
#:[#,#+1)
+#: [#+1,oo]
-#: [0,#)
-mtime
-ctime
以"分鐘"為機關
-amin
-mmin
-cmin
根據權限:
-perm [/|-]MODE
MODE: 精确權限比對
/MODE:任何一類對象(u,g,o)的任何一位權限符合條件即可;隐含或條件;
/400
-MODE:為每一類對象指定的每一位權限都必須同時存在方為符合條件;隐含與條件;
處理動作:
-print: 預設處理動作
-ls:類似于對查找到的每個檔案做"ls -l"的操作;
-delete: 删除查找到的檔案;
-fls /path/to/somefile:查找到的檔案的詳細路徑資訊儲存至指定檔案中;
-ok COMMAND {} \;
對每個檔案執行指定的指令之前需要使用者事先确認;
-exec COMMAND {} \;
無需使用者确認;
3、總結bash環境變量的相關内容;
bash環境配置:
配置檔案,生效範圍劃分,存在兩類:
全局配置:
/etc/profile, /etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
按功能劃分,存在兩類:
profile類:為互動式登入的shell提供配置
功用:
(1) 定義環境變量,例如PATH、PS1
(2) 運作指令或腳本
bashrc類:為非互動式登入shell提供配置
(1) 定義指令别名;
(2) 定義本地變量;
變量:記憶體空間,變量名
類型:
環境變量:作用範圍目前shell程序及其子程序
本地變量:作用範圍目前shell程序
局部變量:作用範圍僅為目前shell程序中某代碼片斷(通常為函數上下文)
位置變量:$1, $2
特殊變量:$?
變量定義方式:
bash内置變量:可直接調用,内置了許多環境變量,例如PATH等
自定義變量:
變量指派:變量名=值
bash弱類型:
變量存儲資料時,預設均采用字元形式;任何變量可以不經聲明,直接引用;
120:24bits
120: 8bits
定義本地變量:
name=value
檢視:set
定義環境變量:
export name=value
declare -x name=value
檢視:env, printenv, export
撤消變量:
unset name
引用變量:
${name}, $name
bash中的引用符号:
'': 強引用,變量替換不會發生
"":弱引用
``: 指令引用
shell登入類型:
互動式登入:
直接通過終端進行的登入;
通過su -l Username指令實作的使用者切換;
非互動式登入:
圖形界面下打開的指令行視窗;
執行腳本;
su Username;
配置檔案作用次序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
編輯配置檔案定義的新配置如何生效?
(1) 重新登入;
(2) 讓目前shell程序去重新讀取指定的配置檔案;
source /PATH/TO/SOMEFILE
. /PATH/TO/SOMEFILE
4、總結Linux檔案系統上的特殊權限(SUID、SGID、Sticky)的知識點;
Linux檔案系統上的特殊權限
權限模型:
u, g, o
r, w, x
程序的安全上下文:
前提:程序有屬主(程序以哪個使用者的身份運作);檔案有屬主和屬組;
(1) 使用者是否能夠把某個可執行程式檔案啟動為程序,取決于使用者對程式檔案是否擁有執行權限;
(2) 程式啟動為程序後,此程序的屬主為目前使用者,也即程序的發起者;程序所屬的組,為發起者的基本組;
(3) 程序擁的通路權限,取決其屬主的通路權限:
(a) 程序的屬主,同檔案屬主,則應用檔案屬主權限;
(b) 程序的屬主,屬于檔案的屬組,則應用檔案屬組權限;
(c) 則應用其它權限;
SUID:
(1) 任何一個可執行程式檔案能不能啟動為程序:取決于發起者對程式檔案是否有執行權限;
(2) 啟動為程序之後,其屬主不是發起者,而程式檔案自己的屬主;這種機制即為SUID;
權限設定:
chmod u+s FILE...
chmod u-s FILE...
注意:
s: 屬主原本擁有x權限;
S: 屬主原本無x權限;
SGID:
預設情況下,使用者建立檔案時,其屬級為此使用者所屬的基本組;
一旦某目錄被設定了SGID權限,則對此目錄擁有寫權限的使用者在此目錄中建立的檔案所屬的組為目錄的屬組,而非使用者的基本組;
chmod g+s FILE...
chmod g-s FILE...
Sticky:
對于一個多人可寫的目錄,此權限用于限制每個僅能删除自己的檔案;
權限設定
chmod o+t FILE...
chmod o-t FILE...
5、總結Linux磁盤管理、檔案系統相關知識點及其相關指令的使用方法;
Linux磁盤管理
硬碟:
機械式硬碟
SSD
機械式:
track
sector: 512bytes
cylinder: 分區的基本機關;
MBR:Master Boot Record
512bytes
446: bootloader
64: filesystem allocation table
16: 辨別一個分區
2:55AA
磁盤接口類型:
IDE (ATA):133MB/s,/dev/hd
SCSI: 640MB/s
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
識别硬碟裝置:/dev/sd
标記不同的硬碟裝置:/dev/sd[a-z]
标記同一裝置上的不同分區:/dev/sd[a-z][1-]
1-4: 主或擴充分區辨別
5+:邏輯分區辨別
裝置檔案:特殊檔案
裝置号:
major, minor
major: 裝置類型
minor: 同一類型下的不同裝置
"塊":block,随機裝置
"字元":character,線性裝置
GPT
分區:分隔存儲空間為多個小的空間,每個空間可獨立使用檔案系統;
分區工具:
fdisk, parted, sfdisk
fdisk工具的使用:
最多支援在一塊硬碟上的15個分區;
分區管理子指令:
p: 顯示
n: 建立
d: 删除
t: 修改分區ID
l: 列出所有支援ID類型
w: 儲存退出
q: 放棄修改并退出
m: 擷取幫助
建立完成之後,檢視核心是否已經識别新的分區:
# cat /proc/partitions
有三個指令可以讓核心重讀磁盤分區表:
CentOS 5: partprobe [DEVICE]
CentOS 6,7:
partx
kpartx
partx指令:
partx DEVICE
partx -a DEVICE
partx -a -n M:N DEVICE
M
M:
:N
kpartx指令:
kpartx -af DEVICE
Linux檔案系統管理
檔案系統:
VFS:Virtual File System
Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap
CD光牒:iso9660
Windows: fat32(vfat), ntfs
Unix: ffs, ufs, jfs, jfs2
網絡檔案系統:nfs, cifs
叢集檔案系統:ocfs2, gfs2
分布式檔案系統:ceph,
moosefs, mogilefs, hdfs, gfs, glusterfs
(1) 日志型檔案系統
非日志型檔案系統:ext2
日志型檔案系統:ext3
(2) swap:交換分區
建立檔案系統:
在分區上執行格式化(進階格式化)
要使用某種檔案系統,滿足兩個條件:
核心中:支援此種檔案系統
使用者空間:有檔案系統管理工具
建立工具:mkfs (make filesystem)
mkfs -t type DEVICE
mkfs.type DEVICE
ext系列檔案系統的專用管理工具:
mke2fs -t {ext2|ext3|ext4} DEVICE
-b BLOCK: 1024, 2048, 4096
-L 'LABEL': 設定卷标
blkid指令:
blkid DEVICE
LABEL, UUID, TYPE
Vim編輯器的練習:
1、複制/etc/grub2.cfg配置檔案至/tmp目錄,用查找替換指令删除/tmp/grub2.cfg檔案中的行首的空白字元;(CentOS6為: /etc/grub.conf)

2、複制/etc/rc.d/init.d/functions檔案至/tmp目錄,用查找替換指令為/tmp/functions的每行開頭為空白字元的行的行首加一個#; 原有空白字元保留;
3、替換/tmp/functions檔案中的/etc/sysconfig/init為/var/log;
4、删除/tmp/functions檔案中是以#開頭,且#後面至少跟了一個空白字元的行的行首#;
檔案查找中find指令練習:
1、查找/var目錄屬主為root,且屬組為mail的所有檔案;
2、查找/usr目錄下不屬于root、bin或hadoop的所有檔案;
3、查找/etc目錄下最近一周内其内容修改過,且屬主不為root或hadoop的所有檔案;
4、查找目前系統上沒有屬主或屬組,且最近一周内曾被通路過的所有檔案;
5、查找/etc目錄下大于20k且類型為普通誰的的所有檔案;
6、查找/etc目錄下所有使用者都沒有寫權限的檔案;
7、查找/etc目錄下至少有一類使用者沒有執行權限的檔案;
8、查找/etc/init.d目錄下,所有使用者都有執行權限,且其它使用者擁有寫權限的檔案;
bash環境配置的練習:
1、讓普通使用者能使用/tmp/cat去檢視/etc/shadow檔案;