一、作業(練習)內容:
1、總結文本編輯工具vim的使用方法;
Vim
(1).命令解釋:模式化的編輯器
(2). 有多種不同的模式:
編輯模式:命令模式
輸入模式:插入模式
末行模式:vim有許多內置命令,此模式作爲命令的接口
編輯模式=====輸入模式:
i:在當前光標所在處,轉換爲輸入模式
I:在當前光標行行首,轉換爲輸入模式
a:在當前光標所在處的後方,轉換爲輸入模式
A:在當前光標所在行的行尾轉換爲輸入模式
o:在當前光標所在行的下方新建一個空白行,並轉換爲輸入模式
O:在當前光標所在行的上方新建一個空白行,並轉換爲輸入模式
輸入模式=====>編輯模式:ESC
編輯模式====>末行模式:“:”
末行模式====>編輯模式:ESC
(3).退出vim
末行模式:
q! 強制退出,不保存編輯的內容退出
wq 保存退出
x 保存退出
xq! x! 強制保存退出
編輯模式:
ZZ 保存退出
(4).編輯命令
光標移動:
字符間移動:
h:光標向左移動
l:光標向右移動
k:光標向上移動
j:光標向下移動
單詞間移動:
w:移動到下一個單詞的詞首
e:移動到下一個單詞的詞尾
b:當前或者前一個單詞的詞首
#:一次跳n個單詞
行首行尾間跳轉:
0:跳轉至非tab字符上絕對行首
^: 跳轉至第一個非空白字符
$: 跳轉至絕對行尾
句子間跳轉:
):跳轉到下一個句子的句首
(:跳轉到前一個句子的句首
段落間移動:
}: 跳轉到下一個段落
{: 跳轉到上一個段落
行間快速移動:
#G #表示想要跳轉的行數
G:文章尾部
1G:文章首部
末行模式:n 跳轉至n行
編輯操作:
x:刪除光標所在處的字符
#x:刪除光標所在處以及向後的#個字符
r: 替換光標所在處的字符
d:刪除命令:
dd:刪除光標所在行 #dd:刪除光標所在行以及下行的共#行:
與跳轉命令一同使用
d$:刪除光標所在處至行尾的內容; D:相同
d^:刪除光標所在處至行行首的內容
dw,de,db:這3個命令支持前面使用#來指明涵蓋的單詞個數
p:粘貼:
行級別:
p:粘貼在光標所在行下方
P:粘貼在光標所在行上方
y:複製
yy:複製光標所在行 Y:複製一整行
#yy:複製光標所在行以及下行共#行
d$:複製光標所在處至行尾的內容
d^:複製光標所在處至行行首的內容
yw,ye,yb:這3個命令支持前面使用#來指明涵蓋的單詞個數
c:修改
cc:刪除光標所在行整行內容,並立即轉爲輸入模式
#cc:
c$,C,c^,c0,cw,cb,ce
撤銷操作:
u:撤銷
#u:撤銷#次操作
取消上一次操作:
Ctrl+r
重複前一次命令
(5).可視化模式:
v:選擇光標所在行光標左側的內容
V:選擇光標所在行向有右側的內容
(6).編輯模式下的翻屏命令
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
(7).文本查找
/PATTERN
?PATTERN
n:向文本尾部查找
N:向文本首部查找
(8).文本替換
末行模式:內置命令接口,有命令歷史記錄功能
有部分內置命令用於編輯操作,此時可使用地址定界法進行
地址定界:
Startline[,endline]
#:第#行
.:當前行
$:最後一行
%:全文
相對定界:
+#:從指定位置向下#個行
-#:從指定位置向上#個行
文本替換命令:s
s/要查找的內容/替換爲的內容/修飾符
/:分隔符,用於分割“查找的內容”和“替換爲的內容”:此分隔符可使用 其他字符,如@,#等:
要查找的內容:可使用正則表達式:此部分可以後面“替換爲的內容”部分 中使用“&”全部引用:
替換爲的內容:不可使用正則表達式,一般爲正常文本,但可以使用正則表
修飾符:
i:查找時不區分字符大小寫
g:global,全局替換;
(9).多文件模式:
打開文件:
vim [OPTION]...[FILE]...
+#:快速定位至#行
+/PATTERN 快速定位至被模式第一次匹配至行
多文件:
vim FILE1 FILE2 FILE3...
末行模式:
:next 下一個
:prev 上一個
:last 最後一個
:first 第一個
退出所有文件:
wqall 保存所有並退出
wall 保存所有
qall 退出所有
多窗口:
-o 水平分割窗口 ctrl+s 水平分割文檔
-O 垂直分割窗口 ctrl+v 垂直分割文檔
(10).界面特性
開啓關閉行顯示:
Set nu
Set nonu
開啓語法高亮功能:
synatx (on|off)
開啓搜索高亮功能:
set hlsearch
set nohlsearch
開啓自動縮進功能:
set autoindent:set ai
set noautoindent: set noai
字符大小寫是否區分功能:
set ignorecase: set ic
Set noignorecase: set noic
(11).配置文件
全局:/etc/vimrc
個人:~/.vimrc
2、總結文件查找命令find的使用方法;
find
(1).命令解釋:
通過遍歷指定的目標目錄,實施查找符合條件指定屬性的文件
(2)命令語法:
find[OPTIONS] [查找路徑][查找條件][處理動作]
查找路徑:默認爲當前路徑
查找條件:默認爲指定路徑下的所有文件
處理動作:默認爲打印至屏幕
查找條件:
-name: “文件名”:文件名支持使用globbing
-iname: “文件名”不區分大小寫
-user:根據屬主查找
-group:根據屬組查找
-uid:根據uid號來查找
-gid:根據gid號來查找
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
組合查找:
與 -a (找出/tmp目錄下屬主有寫權限,並且是root的文件:
或 -o (找出/tmp目錄下名字包含123的文件,或者uid是600的文件
非 -not (找出/tmp目錄下既不屬於root用戶,並且也不屬於hzm用戶的文件
非A或非B = 非(A且B)
非A 且非B = 非(A或B)
查找條件:
根據類型查找:
-type:
f:普通文件
d:目錄文件
l:符號連接
b:塊設備
c:字符設備文件
p:命名管道文件
s:套接字文件
根據文件大小查找:
-size:+|-
常用單位有:k,M,G
#:#-1< x <= # 實例:2k: 結果:1.8k ,1.9k ,1.1k都符合
+: x > # 實例:+2k:結果:2.1k,3.1k都符合 2k不符合
-: x <= #-1 實例:-2k:結果:1k,0.9k都符合
根據時間查找:
以“天”爲單位:
-atime:[+|-] :訪問時間:
#:#- < x < #+1 表示#+1天的時間段被訪問過的文件
-#:x < # 表示#天之內的被訪問過的文件
+#: x >= #+1 表示#+1天之外被訪問過的文件
-mtime: [+|-] :修改時間
-ctime: [+|-] :改變時間
以“分鐘”爲單位:
-amin:[+|-]
-mmin: [+|-]
-cmin: [+|-]
實例:查找/tmp下5分鐘以內被訪問過的文件:
以“權限”爲單位:
-perm:[+|-]mode
mode::精確匹配
+mode:滿足任何一類用戶的任何以爲權限即可 +或關係
-mode:每類用戶的任何一位都需匹配 -且關係
所有都沒有 相反:至少有一個有
所有都有 相反:至少有一個沒有
實例:查找/tmp下包含666權限的文件,或者是精確匹配666的文件
3、總結bash環境變量的相關內容;
總結Bash變量的類型:
本地變量:只對當前shell進程有效的變量,對其他shell進程無效,包括當前shell進程的子進程。 VAR_NAME=VALUE
變量賦值:向變量的存儲空間保存數據
變量引用:${VAR_NAME}
“”:弱引用,裏面的變量會被替換
‘’:強引用,裏面的所有祖父都是字面量,直接輸出
環境變量:對當前shell進程及其子shell有效,對其他shell進程無效。
定義環境變量: export VAR_NAME=VALUE
導出: export VAR_NAME
撤銷變量:unset VAR_NAME
局部變量:對shell腳本中某代碼片段有效,通常用於函數本地:
Loacl export VAR_NAME=VALUE
位置變量:$1,$2,....${10}
特殊變量:$?
查看當前shell進程中的所有變量:set
查看當前shell進程中的所有環境變量:export,printenv,env
變量命名規則:
1.不能使用程序中的關鍵字(保留字) if,case,for
2.只能使用數字,字母和下劃線,且不能以數字開頭
3.要見名之意
變量類型:
數值型:
精確數值:整數
近似數值:浮點型
單精度浮點
雙精度浮點
字符型:
char
string
布爾型:
ture,false
類型轉換:
顯式轉換
隱式轉換
bash是弱類型的語言,一切皆字符
配置文件,生效範圍劃分,存在兩類:
Profile類:爲交互式登陸的用戶提供配置:
全局配置: /etc/profile, /etc/profile.d/*.sh
個人配置: ~/.bash_profile
功用:1.設定環境變量
2.運行命令或腳本
bashrc類:爲非交互式登陸的用戶提供配置:
全局配置: /etc/bashrc
個人配置: ~/.bashrc
功用:1.設定本地變量
2.定義本地別名
登錄類型:
交互式:直接通過終端輸入賬號和密碼登陸
使用su -l username 或 su - username
非交互式:su username
圖形界面下打開的終端
交互登錄用戶:
/etc /profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登陸用戶:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
4、總結Linux文件系統上的特殊權限(SUID、SGID、Sticky)的知識點;
特殊權限:suid
展示於文件屬主的執行權限位
如果屬主本來有執行權限,顯示爲s,否則爲S;
功能:對一個可執行文件來講,任何用戶運行此程序爲進程時,進程的屬主不在是發起者本人,而是可執行程序文件自己的屬主。
管理文件suid權限的方法:
Chmod u+|-s FILE
特殊權限:sgid
展示文件屬組的執行權限爲;
如果屬主本來有執行權限,則展示爲s,否則爲S;
功能:當目錄的屬組有寫權限,且有sgid權限時,那麼所有屬於次此目錄的屬組,且以屬組身份在此目錄文件或目錄時,新文件或目錄的屬組不是創建者所屬的基本組,而是目錄自己的屬組;
Chmod g+|-s
特殊權限:stick
展示於目錄其他用戶的執行權限位
如果其他用戶本來有執行權限,則展示爲t,否則,展示位T
功能:對於全局可寫,或某組全局可寫目錄,所有用戶都於此目錄創建文件或刪除自己爲屬主的那些文件,但不能刪除非自己爲屬主文件或目錄:
Chmod o+|-t
5、總結Linux磁盤管理、文件系統相關知識點及其相關命令的使用方法;
磁盤設備文件:
IDE接口:並行,133MB/s /dev/hda,/dev/hdb
Scsi接口:並行,320MB/s
SATA接口:串行,6Gpbs
Usb接口:串行,480MB/s
SAS接口:串行
設備文件:/dev/sd[a-z][#]
鏈接文件:訪問同一個文件數據,不同路徑
硬鏈接:兩個文件路徑指向了同一個inode。
創建方法:cp -l SRC DEST
ln SRC DEST
特性: 1)目錄不支持硬鏈接;
2)鏈接不能跨文件系統;
3)硬鏈接文件與源文件是指向同一個inode,創建硬鏈接文件只會增加
inode計數;刪除硬鏈接只會減少一次;
符號連接:鏈接文件是一個完全獨立的新文件,但其指向了原文件的訪問路徑;
創建方法:ln -s SRC DEST
特性:(1)符號鏈接文件與原文件是兩個各自獨立的文件;
(2)目錄可以創建符號鏈接;
(3)可以跨文件系統;
(4)刪除鏈接不影響原文件,但刪除原文件,符號鏈接指向的路徑不存在,因此,此時鏈接文件變成錯誤鏈接;其大小不是真正原文件大小,而是指向的原文件的文件路徑字符串所包含的字節數;
磁盤設備:
MBR:用來存放當前分區表 。(主引導扇區)
446bytes:bootloader
64bytes:分區表
16bytes:標記一個分區:4個主分區:3主分區,1個擴展分區
2bytes:55AA,當前MBR信息是否有效的標記
VFS:virtual file system
Linux文件系統:ext2,ext3,ext4,xfs,btrfs
日誌文件系統:加速文件檢測並修復過程
光盤文件系統:iso9660
網絡文件系統:nfs,cifs
集羣文件系統:gfs2,ocfs2
分佈式文件系統:ceph
Windows文件系統:ntfs,vfat
僞文件系統:tmpfs
Swap:虛擬文件系統
創建文件系統:
文件系統:
元數據:每個索引項稱一個inode
根在內核中,其需要被關聯制根文件系統,即rootfs
創建分區:
fdisk命令:查看已經識別的磁盤設備
P:顯示當前分區表
N:創建一個分區
W:保存退出
L:查看支持的分區ID:
D:刪除現有分區
T:修改分區ID
Q:不保存退出
M:顯示幫助信息
分區流程:fdisk /dev/sd* ---> n新建 ---> (e擴展)|(p主分區) --->柱面或者分區大小 --->P 查看是否成功 ---> cat /proc/partitions 查看內核是否識別 --->如果未識別讓內核強制讀取分區表(partx -a /dev/sd*)
文件系統管理工具:
創建文件系統:
mkfs.ext2 mkfs.ext3 mkfs.ext4,mkfs.xfs
檢測文件系統:
fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs
查看其屬性:
dumpe2fs,tune2fs
創建文件系統:
mkfs.FSTYPE /dev/DEVICE
blkid /dev/DEVICE
ext系列:
mke2fs
mke2fs:mke2fs[OPTION].../dev/DEVICE
-t :[ext2|ext3|ext4]:要創建的文件系統類型;
-b :[1024|2048|4096]:上限由page fram決定;
-L: label:卷標;
-j: 相當於 -t ext3 將文件系統格式化爲日誌文件系統;
mkfs.ext3 = mkfs -t ext3 = mke2fs -t ext3
-i#:指定inode與字節的比率;沒多少個字節給創建一個inode;
-N#:直接知名給此文件系統創建多少個inode;
-m#:指定預留空間的百分比,默認爲5;
-O :指明額外選項
UUID:全局唯一標識符
e2label /dev/DEVICE:修改卷標
tune2fs:查看或者修改ext系列文件系統某些屬性
tune2fs -l /dev/DEVICE
修改指定文件屬性:
-L:修改卷標
-m#:調整預留空間百分比
-O[^]FEATURE:開啓或關閉某種特性
-o[^]mount_options:開啓或關閉某種屬性
-o acl
-o ^acl
dumpefs:顯示ext系列文件系統屬性信息
dumpe2fs [-h] /dev/DEVICE
文件系統檢測:
因進程意外終止或系統崩潰等原因導致寫入操作非正常終止時,可能會導致文件損壞,此時應該修復系統。
fsck:
-t:fsck -t ext4 /dev/sdb1
-a:自動修復所有錯誤
-r:交互式修復錯誤
ext系列文件系統的專用工具
e2fsck:
-y:對所有問題自動修復yes;
-f:強制檢測
Windows無法識別linux上專用的文件系統,因此,有存儲設備需要兩種系統之間交叉使用,應該使用Windows文件系統。
swap文件系統:
Linux上 創建交換分區必須使用獨立的磁盤分區
fdisk /dev/DEVICE
t命令調整id:82
創建交換分區系統:mkswap
mkswap[-L] /dev/DEVICE
文件系統掛載:
Linux系統上,所有文件系統必須通過根文件系統的某個分區來訪問;
其餘所有的其他文件系統如果想要被訪問,都只能通過關聯至根文件系統上的某個目錄來實現;
mount:mount DEVICE MOUNT_POINT
mount[option]...[-t fstype][-o option] device mount_point
-r:只讀掛載
-w:讀寫掛載
-t:fstype 被掛載的設備上的文件系統類型:可省略 此時mount會自動使用blkid來判斷
-L:以卷標的方式指定要掛載的設備,因此,DEVICE可省
-U:以UUID的方式指定要掛載的設備,因此,DEVICE可省
-n:默認情況下,設備掛載與否的改變結果會被保存於/etc/mtab中,-n選項用於變動時不更新此文件。
-o:option 掛載選項
async:異步寫入
sync:同步寫入
atmin/noatime:文件或目錄在被訪問時是更新訪問時間戳
diratime/nodiratime:文件或目錄在被訪問時是更新訪問時間戳
auto/noauto:設備是否支持mount-a選相時是否自動掛載
dev/nodev:此設備上是否創建設備文件
exec/noexec:是否允許執行此文件系統上的程序文件
suid/nosuid:是否支持此設備上的文件使用suid權限
remount:重新掛載
acl:mount -o or tune2fs -o acl /dev/device
ro:只讀
rw:讀寫
user/nouser:是否允許普通掛載此文件系統
defaults
mount -a 自動讀取fstab中每一個支持自動掛載的文件系統並把其掛載至每一個掛載目錄下。
另外一個技巧:
將某目錄綁定到指定目錄下,作爲臨時訪問入口
mount --bind 源目錄 目標目錄
查看所有已經掛載設備的方法:
#mount
#cat /etc/mtab
#cat /proc/mounts
掛載點
1.事先存在
2.使用別的進程未使用的目錄
umont MOUNT_POINT
某進程訪問的設備不能卸載,查看方法:
lsof 掛載目錄
fuser -v:掛載目錄
-k: fuser -km 掛載目錄:強制殺掉訪問掛載目錄的進程
df:用來檢查linux服務器的文件系統的磁盤空間佔用情況
[OPTINE]...[FILE]
-l:僅顯示本地文件系統的相關係統
-h:單位換算
-i:顯示indoe的使用情況
du:用於評估文件大小
-s:統計整個目錄以及內部所有文件總體大小
-h:單位換算
du -sh/*
free:查看內存使用狀況
-m
-g
交換分區:創建交換分區:mkswap
swapon -a 啓用/etc/fstab文件中定義的所有交換分區
啓用:swapon /dev/sd*
禁用:swapoff /dev/sd*
文件系統相關配置文件:/etc/fstab
定義開機自動掛載的文件系統;
第一列:掛載設備:設備文件,卷標,uuid,僞文件系統
第二列:掛載點:swap掛載點仍爲swap
第三列:文件系統類型
第四列:掛在選項:defaults表示默認掛載選項,多個掛載選項用,分割。比如defaults,acl,noatime
第五列:轉儲頻率:0:從不備份,1:每天備份,2:每隔一天備份
第六列:自檢次序:0:不自檢,1:首先自檢,只有根文件系統可首先自檢,2:次級自檢。
6、複製/etc/grub.cfg配置文件至/tmp目錄,用查找替換命令刪除/tmp/grub.cfg文件中的行首的空白字符;
%s/^[[:space:]]\+//g
7、複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首加一個#; 原有空白字符保留;
%s/^[[:space:]]/#&/g
8、替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;
%s@/etc/sysconfig/init@/var/log/g
%s/\/etc\/sysconfig\/init/\/var\/log/g
9、刪除/tmp/functions文件中所以#開頭,且#後面至少跟了一個空白字符的行的行首#;
%s/^#[[:space:]]\+//g
10、查找/var目錄屬主爲root,且屬組爲mail的所有文件;
find /var -user root -a -group mail -ls
11、查找/usr目錄下不屬於root、bin或hadoop的所有文件;
find /usr -not -user root -a -not -user bin -a -not -user hadoop
Find /usr -not \( -user root -o -user bin -o -user hadoop \)
12、查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的所有文件;
find /etc -not \( -user root -o -user hadoop \) -a -mtime -7
13、查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的所有文件;
find / -not \( -nouser -a -nogroup \) -a -atime -7
14、查找/etc目錄下大於20k且類型爲普通誰的的所有文件;
find /etc -size +20k -a type f
15、查找/etc目錄下所有用戶都沒有寫權限的文件;
find /etc -not -perm +222
16、查找/etc目錄下至少有一類用戶沒有執行權限的文件;
find /etc -not -perm -111
17、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶擁有寫權限的文件;
find /etc/init.d -perm -113
18、讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;
(1)當前用戶爲hzm查看/etc/shadow文件沒有權限,無法訪問。
(2)切換到root賬戶下將cat程序給予s權限;
chmod u+s /bin/cat
(3)在切換回hzm賬戶來訪問/etc/shadow文件就不受限制了;
19、創建目錄/test/data,讓某組內普通用戶對其有寫權限,且創建的所有文件的屬組爲目錄所屬的組;此外,每個用戶僅能刪除自己的文件;
(1)新建hzm和gley兩個用戶,附加組都爲testgroup,並且創建/test/data目錄也加入到testgroup組中;
useradd -a -G testgroup hzm
useradd -a -G testgroup gley
mkdir /test/data
chown :testgroup /test/data
(2)登陸hzm用戶,在/test/data目錄下創建一個hzm.txt文件,登陸gley用戶,在/test/data目錄下創建一個gley.test文件
hzm:touch hzm.txt /test/data
gley:touch gley.txt /test/data
(3)然後給於該目錄gid權限後,在切換兩個用戶各自創建.word文件,這樣就能看到.word創建的文件所屬組都是testgroup組。
chmod g+s /test/data
hzm:touch hzm.word /test/data
gley:touch gley.word /test/data
(4)然後在給與改目錄sticky權限,這樣用戶只能刪除自己創建的所屬文件;
chmod o+t /test/data