Vim編輯器:node
全屏幕的編輯器:VIMshell
vi: visual interface數據庫
sed:行編輯器apache
vi, vi iMprovedvim
vim: centos
模式化:安全
編輯模式:命令模式bash
輸入模式:網絡
末行模式:app
編輯模式 --> 輸入模式:
i: insert,
a:append,
o:new line,
I: 行首
A:行尾
O:上方新建行
輸入模式 --> 編輯模式:
ESC
編輯模式 --> 末行模式:
:
末行模式 --> 編輯模式
ESC
一、總結文本編輯工具vim的使用方法;
打開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
Linux文件查找:
locate: 非實時查找,根據數據庫(速度快);模糊查找;
find:實時查找,精確匹配;速度慢;
find [查找位置] [查找標準] [處理動做]
查找位置:默認爲當前目錄;
查找標準:默認爲查找指定目錄下的全部文件;
處理動做:顯示到標準輸出;
查找標準:
-name "文件名稱": 根據文件名查找,精確查找文件。
支持glob, *, [], ?
-iname "文件名稱":根據文件名查找,不區分字符大小寫;name ignore case
-user USERNAME: 根據屬主查找;
-group GRPNAME: 根據屬組查找;
-uid UID; #按照Uid 來查找
-gid GID; #按照gid來查找
-nouser:查找沒屬主的文件;
-nogroup: 查找沒有屬組的文件;
組合查找條件:
-a: 與
-o:或
-not, !: 非
三、總結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...
SUID, SGID, STICKY
000
001
010
011
100
101
110
111
chmod 4777 FILE
chmod 3755 DIR
五、總結Linux磁盤管理、文件系統相關知識點及其相關命令的使用方法;
Linux系統管理
磁盤和文件系統管理;
RAID, LVM; btrfs;
程序包管理:rpm, yum(dnf)
Linux的網絡管理;
進程和做業管理:htop, glances, tsar;
sed和awk;
Linux系統的開機啓動流程;
內核基礎知識,內核定製編譯;
系統安裝:kickstart, pxe
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
Linux文件系統管理:
mkfs, mkfs -t type = mkfs.type
ext:mke2fs
建立文件系統:
mke2fs [OPTION]... DEVICE
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L 'LABEL'
-j: mke2fs -t ext3
-i #:
-N #:
-m #: 預留磁盤空間佔據多大百分比的空間爲後期管理使用;
-O FEATURE[,...]
-O ^FEATURE:關閉此特性
has_journal
文件系統屬性查看及調整工具:
e2label
e2lable DEVICE [LABEL]
tune2fs
顯示ext系列文件系統的屬性,或調整其屬性;
-l:顯示超級塊中的信息;顯示整個文件的屬性及佈局等相關信息;
-L 'LABEL':修改卷標;
-m #: 調整預留給管理員的管理空間百分比;
-j: ext2 --> ext3
-O:文件系統屬性的啓動或關閉
-o:文件系統默認掛載選項的啓用或關閉
dumpe2fs:
-h: 僅顯示超級塊信息;
文件系統檢測:
fsck: Filesystem check
fsck -t type
fsck.type
-a: 自動修復錯誤
-r: 交互式修復錯誤
-f: 強制檢測
e2fsck:ext系列文件系統專用的檢測修復工具;
-y: 自動回答爲「yes」
-f:force
文件系統的掛載和使用:
kernel --> rootfs(分區)
rootfs分區:
bin, sbin, etc, lib, lib64, dev, tmp, proc, sys
/sbin/init
將額外文件系統與根文件系統某現存的目錄創建起關聯關係,進而使得此目錄作爲其它文件系統訪問入口的行爲,稱之爲掛載;
解除此關聯關係的過程:卸載;
掛載點:mount point, 設備掛載至目錄;
注意:掛載點在掛載在以後,其內部原有的文件會被暫時隱藏;創建使用空目錄作爲掛載點;
掛載方法:
mount:經過讀取/etc/mtab文件來顯示當前系統全部已經掛載的設備;
mount -a:掛載/etc/fstab文件中的全部支持自動掛載的文件系統;
mount [options] [-o options] DEVICE MOUNT_POINT
[options]:命令選項
[-o options]:掛載選項
DEVICE: 要掛載的設備
(1) 設備文件:/dev/sda5
(2) 卷標:-L 'LABEL'
(3) UUID:-U 'UUID'
(4) 僞文件系統名稱
MOUNT_POINT: 掛載點
經常使用選項:
-t type:文件系統類型
-r: 以「只讀」方式掛載此文件系統
-w: 以「讀寫」方式掛載此文件系統
-n:每一個文件系統在掛載時都會自動更新/etc/mtab文件,-n用於禁止此功能;
此時,若是想查看掛載的全部文件系統:cat /proc/mounts
-a: 自動掛載全部支持自動掛載的設備;
-B:綁定目錄至另外一個目錄上;
-o 掛載選項:
async:異步模式
sync: 同步模式
atime/noatime:是否更新訪問時間戳;
diratime/nodiratime:是否更新目錄的訪問時間戳;
auto/noauto: 是否容許此設備被自動掛載;
exec/noexec:是否容許執行此文件系統上應用程序;
dev/nodev:是否支持在此設備上使用設備文件;
suid/nosuid:
remount:從新掛載
ro
rw
user/nouser: 是否容許普通掛載此設備;
acl:是否支持此設備上使用facl;
defaults:rw, suid, dev, exec, auto, nouser, and async
umount:卸載命令
# umount DEVICE
# umount MOUNT_POINT
查看正在訪問指定掛載點的進程:
# fuser -v MOUNT_POINT
終止全部正在訪問指定的掛載點的進程:
# fuser -km MOUNT_POINT
交換分區:
free命令:
查看memory和swap的使用狀態
-m: 以MB爲單位
-g: 以GB爲單位
mkswap:建立交換分區
mkswap [option] DEVICE
-L 'LABEL'
swapon:啓用交換分區
swapon [option] [DEVICE]
-a: 激活全部交換分區
-p PRIORITY: 設定其優先級;
swapoff:禁用交換分區
swapoff [option] [DEVICE]
文件系統等空間佔用信息的查看工個:
df: disk free
-h: human-readable
-i: inode數量
-P: 以Posix兼容的格式輸出
du: disk usage
-h: human-readable
-s: summary
文件系統相關掛載配置文件:/etc/fstab
每行定義一個文件系統;
要掛載的設備或僞文件系統 掛載點 文件系統類型 掛載選項 轉儲頻率 自檢次序
要掛載的設備:
設備文件、LABEL=、UUID=、僞文件系統名稱
掛載選項:
defaults
轉儲頻率:
0: 不轉儲
1: 天天轉儲
2: 每隔一天轉儲
自檢次序:
0:不自檢
1:首先自檢,一般只有/才爲1
2:
...
文件系統上的連接文件:
硬連接:
兩個路徑指向同一個inode
不能對目錄進行;
不能跨分區進行
指向同一個inode的多個不一樣路徑; 建立文件的硬連接會增長inode的引用計數;刪除硬連接僅是刪除其一個訪問路徑,只到最後一個路徑被刪除;
符號連接:
連接文件的數據指向另外一個文件路徑;
能夠對目錄進行;
能夠跨分區;
指向的是另外一個文件路徑;而非inode;
對文件建立符號連接不會增長其引用計數;刪除原文件,符號連接文件也將沒法;
ln [-s] SRC DEST
-s:symbolic link
-v:verbose
六、複製/etc/grub.cfg配置文件至/tmp目錄,用查找替換命令刪除/tmp/grub.cfg文件中的行首的空白字符;
%s/^[[:space:]]\+//g
七、複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首加一個#; 原有空白字符保留;
%s/^[[:space:]]/#&/g
八、替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;
%s/\etc\sysconfig\init//var/log/g
九、刪除/tmp/functions文件中因此#開頭,且#後面至少跟了一個空白字符的行的行首#;
%s/^#[[:space:]]\{1,\}+//g
十、查找/var目錄屬主爲root,且屬組爲mail的全部文件;
find /var –user root –a group mail -ls
十一、查找/usr目錄下不屬於root、bin或hadoop的全部文件;
find /usr -not -user root -o -user bin -o -user hadoop
十二、查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的全部文件;
find /etc -mtime -7 -a -not -user root -a -not -user hadoop
1三、查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的全部文件;
find / -not -nouser -o -nogroup -a -atime 7
1四、查找/etc目錄下大於20k且類型爲普通文件的全部文件;
find /etc -size +20k -a -type f -ls
1五、查找/etc目錄下全部用戶都沒有寫權限的文件;
find /etc -not -perm +222
1六、查找/etc目錄下至少有一類用戶沒有執行權限的文件;
find /etc -not -perm -111
1七、查找/etc/init.d目錄下,全部用戶都有執行權限,且其它用戶擁有寫權限的文件;
[root@localhost tmp]# find /etc/init.d -perm -111 -a -perm -002
/etc/init.d
1八、讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;
[root@localhost tmp]# cp /bin/cat /tmp
[root@localhost tmp]# ll /tmp/cat
-rwxr-xr-x. 1 root root 48568 9月 8 12:23 /tmp/cat
[root@localhost tmp]# chmod u+s /tmp/cat
[root@localhost tmp]# ll /tmp/cat
-rwsr-xr-x. 1 root root 48568 9月 8 12:23 /tmp/cat
[root@localhost tmp]# /tmp/cat /etc/shadow
root:$6$7eb90RabJRKKBYUR$4HCeO5Yt9xSuSTBKWvkI7YvqbR3aKvl5Pvtq8zQdTLjBjj3TwPQO0DT3oq2dRIAwcKVXZCoB7bKPid0aCHhus/:16666:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::
operator:*:15980:0:99999:7:::
games:*:15980:0:99999:7:::
gopher:*:15980:0:99999:7:::
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
dbus:!!:16666::::::
usbmuxd:!!:16666::::::
vcsa:!!:16666::::::
rpc:!!:16666:0:99999:7:::
rtkit:!!:16666::::::
avahi-autoipd:!!:16666::::::
abrt:!!:16666::::::
rpcuser:!!:16666::::::
nfsnobody:!!:16666::::::
haldaemon:!!:16666::::::
gdm:!!:16666::::::
ntp:!!:16666::::::
apache:!!:16666::::::
saslauth:!!:16666::::::
postfix:!!:16666::::::
pulse:!!:16666::::::
sshd:!!:16666::::::
tcpdump:!!:16666::::::
wwg8708:$6$80KZEyBUnTLJh3kW$cLYSqn/gq6DEa0qvVp1eX7/pzbqd2m2yn70363sH6bFn97fFHq9RTh9tCCzBT5jLHvWAp9lOd14JmzjRm53Tv1:16666:0:99999:7:::
wufeng_gg:!!:16673:0:99999:7:::
Oracle:!!:16677:0:99999:7:::
test:!!:16679:0:90:7:::
bash:!!:16684:0:99999:7:::
testbash:!!:16684:0:99999:7:::
busher:!!:16684:0:99999:7:::
nologin:!!:16684:0:99999:7:::
centos:!!:16684:0:99999:7:::
user1:!!:16684:0:99999:7:::
hadoop:!!:16685:0:99999:7:::
1九、建立目錄/test/data,讓某組內普通用戶對其有寫權限,且建立的全部文件的屬組爲目錄所屬的組;此外,每一個用戶僅能刪除本身的文件;
[root@localhost tmp]# mkdir -pv /test/data
mkdir: 已建立目錄 "/test"
mkdir: 已建立目錄 "/test/data"
[root@localhost tmp]# chmod g+ws /test/data
[root@localhost tmp]# ll /test/data
總用量 0
[root@localhost tmp]# ll -d /test/data
drwxrwsr-x. 2 root root 4096 9月 8 13:33 /test/data