一、總結文本編輯工具vim的使用方法;shell
全屏幕的編輯器:VIMvim
vi: visual interface安全
sed:行編輯器bash
vi, vi iMproved網絡
vim:app
模式化:編輯器
編輯模式:命令模式分佈式
輸入模式:ide
末行模式:函數
編輯模式 --> 輸入模式:
i: insert,
a:append,
o:new line,
I: 行首
A:行尾
O:上方新建行
輸入模式 --> 編輯模式:
ESC
編輯模式 --> 末行模式:
:
末行模式 --> 編輯模式
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: 複製行
#COMMAND
改變命令:c, change
c$, c^, c0
cb, ce, cw
cc:
#COMMAND
撤消此前的編輯操做:
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
二、總結文件查找命令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 {} \;
無需用戶確認;
三、總結bash環境變量的相關內容;
bash環境配置:
配置文件,生效範圍劃分,存在兩類:
全局配置:
/etc/profile, /etc/profile.d/*.sh
/etc/bashrc
我的配置:
~/.bash_profile
~/.bashrc
按功能劃分,存在兩類:
profile類:爲交互式登陸的shell提供配置
/etc/profile, /etc/profile.d/*.sh
~/.bash_profile
功用:
(1) 定義環境變量,例如PATH、PS1
(2) 運行命令或腳本
bashrc類:爲非交互式登陸shell提供配置
/etc/bashrc
~/.bashrc
功用:
(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
四、總結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...
五、總結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
光盤: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編輯器的練習:
一、複製/etc/grub2.cfg配置文件至/tmp目錄,用查找替換命令刪除/tmp/grub2.cfg文件中的行首的空白字符;(CentOS6爲: /etc/grub.conf)
答:1,$s/^[[:space:]]\+//g
替換前
替換後
二、複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首加一個#; 原有空白字符保留;
答:1,$s/^[[:space:]]/#\1&/g
替換前
替換後
三、替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;
答:1,$s/\/etc\/sysconfig\/init/\/var\/log/g
替換前
替換後
四、刪除/tmp/functions文件中因此#開頭,且#後面至少跟了一個空白字符的行的行首#;
答:1,$s/^#[[:space:]]\+//g
替換前
替換後
文件查找中find命令練習:
一、查找/var目錄屬主爲root,且屬組爲mail的全部文件;
答:find /var -user root -group mail -ls
二、查找/usr目錄下不屬於root、bin或hadoop的全部文件;
答:find /usr -not -user root -a -not -user bin -a -not -user hadoop -ls
三、查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的全部文件;
答: find /etc -ctime -7 -a -not -user root -not -user hadoop -ls
四、查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的全部文件;
答:find / -nouser -a -ctime -7 -ls
五、查找/etc目錄下大於20k且類型爲普通誰的的全部文件;
答:find /etc -type f -a -size +20k -exec ls -lh {} \;
六、查找/etc目錄下全部用戶都沒有寫權限的文件;
答:find /etc -not -perm /222 -ls
七、查找/etc目錄下至少有一類用戶沒有執行權限的文件;
答:find /etc -not -perm -111 -ls
八、查找/etc/init.d目錄下,全部用戶都有執行權限,且其它用戶擁有寫權限的文件;
答: find /etc/init.d/ -perm /111 -a -perm -020
bash環境配置的練習:
一、讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;
答:chmod u+s /tmp/cat
二、建立目錄/test/data,讓某組內普通用戶對其有寫權限,且建立的全部文件的屬組爲目錄所屬的組;此外,每一個用戶僅能刪除本身的文件;
答:chmod 3775 /test/data