1、總結文本編輯工具vim的使用方法;
移動光標的方法 | |
---|---|
h 或 向左箭頭鍵(←) | 光標向左移動一個字符 |
j 或 向下箭頭鍵(↓) | 光標向下移動一個字符 |
k 或 向上箭頭鍵(↑) | 光標向上移動一個字符 |
l 或 向右箭頭鍵(→) | 光標向右移動一個字符 |
[Ctrl] + [f] | 屏幕『向下』移動一頁,相當於 [Page Down]按鍵 (常用) |
[Ctrl] + [b] | 屏幕『向上』移動一頁,相當於 [Page Up] 按鍵 (常用) |
[Ctrl] + [d] | 屏幕『向下』移動半頁 |
[Ctrl] + [u] | 屏幕『向上』移動半頁 |
+ | 光標移動到非空格符的下一列 |
- | 光標移動到非空格符的上一列 |
n<space> | 那個 n 表示『數字』,例如 20 。按下數字後再按空格鍵,光標會向右移動這一行的 n 個字符。例如 20<space> 則光標會向後面移動 20 個字符距離。 |
0 或功能鍵[Home] | 這是數字『 0 』:移動到這一行的最前面字符處 (常用) |
$ 或功能鍵[End] | 移動到這一行的最後面字符處(常用) |
H | 光標移動到這個屏幕的最上方那一行的第一個字符 |
M | 光標移動到這個屏幕的中央那一行的第一個字符 |
L | 光標移動到這個屏幕的最下方那一行的第一個字符 |
G | 移動到這個檔案的最後一行(常用) |
nG | n 爲數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu) |
gg | 移動到這個檔案的第一行,相當於 1G 啊! (常用) |
n<Enter> | n 爲數字。光標向下移動 n 行(常用) |
搜尋與取代 | |
/word | 向光標之下尋找一個名稱爲 word 的字符串。例如要在檔案內搜尋 vbird 這個字符串,就輸入 /vbird 即可! (常用) |
?word | 向光標之上尋找一個字符串名稱爲 word 的字符串。 |
n | 這個 n 是英文按鍵。代表重複前一個搜尋的動作。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字符串,則按下 n 後,會向下繼續搜尋下一個名稱爲 vbird 的字符串。如果是執行 ?vbird 的話,那麼按下 n 則會向上繼續搜尋名稱爲 vbird 的字符串! |
N | 這個 N 是英文按鍵。與 n 剛好相反,爲『反向』進行前一個搜尋動作。 例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。 |
:n1,n2s/word1/word2/g | n1 與 n2 爲數字。在第 n1 與 n2 行之間尋找 word1 這個字符串,並將該字符串取代爲 word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 並取代爲 VBIRD 則: 『:100,200s/vbird/VBIRD/g』。(常用) |
:1,$s/word1/word2/g | 從第一行到最後一行尋找 word1 字符串,並將該字符串取代爲 word2 !(常用) |
:1,$s/word1/word2/gc | 從第一行到最後一行尋找 word1 字符串,並將該字符串取代爲 word2 !且在取代前顯示提示字符給用戶確認 (confirm) 是否需要取代!(常用) |
刪除、複製與貼上 | |
x, X | 在一行字當中,x 爲向後刪除一個字符 (相當於 [del] 按鍵), X 爲向前刪除一個字符(相當於 [backspace] 亦即是退格鍵) (常用) |
nx | n 爲數字,連續向後刪除 n 個字符。舉例來說,我要連續刪除 10 個字符, 『10x』。 |
dd | 刪除遊標所在的那一整列(常用) |
ndd | n 爲數字。刪除光標所在的向下 n 列,例如 20dd 則是刪除 20 列 (常用) |
d1G | 刪除光標所在到第一行的所有數據 |
dG | 刪除光標所在到最後一行的所有數據 |
d$ | 刪除遊標所在處,到該行的最後一個字符 |
d0 | 那個是數字的 0 ,刪除遊標所在處,到該行的最前面一個字符 |
yy | 複製遊標所在的那一行(常用) |
nyy | n 爲數字。複製光標所在的向下 n 列,例如 20yy 則是複製 20 列(常用) |
y1G | 複製遊標所在列到第一列的所有數據 |
yG | 複製遊標所在列到最後一列的所有數據 |
y0 | 複製光標所在的那個字符到該行行首的所有數據 |
y$ | 複製光標所在的那個字符到該行行尾的所有數據 |
p, P | p 爲將已複製的數據在光標下一行貼上,P 則爲貼在遊標上一行! 舉例來說,我目前光標在第 20 行,且已經複製了 10 行數據。則按下 p 後, 那 10 行數據會貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢? 那麼原本的第 20 行會被推到變成 30 行。 (常用) |
J | 將光標所在列與下一列的數據結合成同一列 |
c | 重複刪除多個數據,例如向下刪除 10 行,[ 10cj ] |
u | 復原前一個動作。(常用) |
[Ctrl]+r | 重做上一個動作。(常用) |
. | 重複前一個動作 |
第二部份:一般模式切換到編輯模式的可用的按鈕說明
進入插入或取代的編輯模式 | |
---|---|
i, I | 進入插入模式(Insert mode): i 爲『從目前光標所在處插入』, I 爲『在目前所在行的第一個非空格符處開始插入』。 (常用) |
a, A | 進入插入模式(Insert mode): a 爲『從目前光標所在的下一個字符處開始插入』, A 爲『從光標所在行的最後一個字符處開始插入』。(常用) |
o, O | 進入插入模式(Insert mode): 這是英文字母 o 的大小寫。o 爲『在目前光標所在的下一行處插入新的一行』; O 爲在目前光標所在處的上一行插入新的一行!(常用) |
r, R | 進入取代模式(Replace mode): r 只會取代光標所在的那一個字符一次;R會一直取代光標所在的文字,直到按下 ESC 爲止;(常用) |
[Esc] | 退出編輯模式,回到一般模式中(常用) |
第三部份:一般模式切換到指令列模式的可用的按鈕說明
指令列的儲存、離開等指令 | |
---|---|
:w | 將編輯的數據寫入硬盤檔案中(常用) |
:w! | 若文件屬性爲『只讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案權限有關啊! |
:q | 離開 vi (常用) |
:q! | 若曾修改過檔案,又不想儲存,使用 ! 爲強制離開不儲存檔案。 |
:wq | 儲存後離開,若爲 :wq! 則爲強制儲存後離開 (常用) |
ZZ | 這是大寫的 Z 喔!若檔案沒有更動,則不儲存離開,若檔案已經被更動過,則儲存後離開! |
:w [filename] | 將編輯的數據儲存成另一個檔案(類似另存新檔) |
:r [filename] | 在編輯的數據中,讀入另一個檔案的數據。亦即將 『filename』 這個檔案內容加到遊標所在行後面 |
:n1,n2 w [filename] | 將 n1 到 n2 的內容儲存成 filename 這個檔案。 |
:! command | 暫時離開 vi 到指令列模式下執行 command 的顯示結果!例如 『:! ls /home』即可在 vi 當中察看 /home 底下以 ls 輸出的檔案信息! |
vim 環境的變更 | |
:set nu | 顯示行號,設定之後,會在每一行的前綴顯示該行的行號 |
:set nonu | 與 set nu 相反,爲取消行號! |
2、總結文件查找命令find的使用方法;
find path -option [ -print ] [ -exec -ok command ] {} ;
-name "文件名稱": 支持使用glob;
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱;
-user USERNAME: 查找屬主爲指定用戶的文件;
-uid UserID: 查找文件的屬主指定uid的文件;
-gid GroupID:
-nouser: 查找沒有屬主的文件;
-nogroup:查找沒有屬組的文件;
根據文件類型進行查找:
d: 目錄
l: 符號鏈接
b: 塊設備
s: 套接字
!A -o !B = !(A -a B)
!A -a !B = !(A -o B)
單位: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環境變量的相關內容;
sh環境配置:
配置文件,生效範圍劃分,存在兩類:
全局配置:
/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
定義本地變量:
查看: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:
4、總結Linux文件系統上的特殊權限(SUID、SGID、Sticky)的知識點;
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磁盤管理、文件系統相關知識點及其相關命令的使用方法;
6、複製/etc/grub.cfg配置文件至/tmp目錄,用查找替換命令刪除/tmp/grub.cfg文件中的行首的空白字符;
:%s/^[[:space:]]\{1,}/g
7、複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首加一個#; 原有空白字符保留;
%s/^ /# /g
8、替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;
%s@/etc/sysconfig/init@/var/log@g
9、刪除/tmp/functions文件中所以#開頭,且#後面至少跟了一個空白字符的行的行首#;
:%s/^# \{1,}/ /gc
10、查找/var目錄屬主爲root,且屬組爲mail的所有文件;
[Task@magedu tmp]$ sudo find /var -user root -group mail -ls 786590 4 drwxrwxr-x 2 root mail 4096 9月 1 23:25 /var/spool/mail 792773 4 -rw------- 1 root mail 1943 9月 1 23:25 /var/spool/mail/root |
11、查找/usr目錄下不屬於root、bin或hadoop的所有文件;
[Task@magedu usr]$sudo find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls 530922 0 -rw-r--r-- 1 Test Test 0 9月 2 04:27 /usr/123 |
12、查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的所有文件;
sudo find /etc/ -atime -7 -a ! \( -user root -o -user hadoop \) -ls |
13、查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的所有文件;
sudo find /etc/ -atime -7 -a -nouser -a -nogroup -ls |
14、查找/etc目錄下大於20k且類型爲普通文件的所有文件;
sudo find /etc/ -size +20k -a -type f -ls |
15、查找/etc目錄下所有用戶都沒有寫權限的文件;
find /etc -perm 555 -type f -ls |
16、查找/etc目錄下至少有一類用戶沒有執行權限的文件;
find /etc -perm /666 -type f -ls |
17、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶擁有寫權限的文件;
find /etc/init.d -perm -111 -a -perm -002 -ls |
18、讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;
sudo chmod u+s /bin/cat
19、創建目錄/test/data,讓某組內普通用戶對其有寫權限,且創建的所有文件的屬組爲目錄所屬的組;此外,每個用戶僅能刪除自己的文件;
# chmod g+s /tmp/test/data
# chmod g+w /tmp/test/data
# chmod o+t /tmp/test/data
[root@magedu /]# mkdir -p /tmp/test/data [root@magedu /]# chmod g+s /tmp/test/data [root@magedu /]# chmod g+w /tmp/test/data [root@magedu /]# chmod o+t /tmp/test/data [root@magedu /]# chown .test123 /tmp/test/data [root@magedu /]# id Test uid=503(Test) gid=503(Test) 組=503(Test),513(test123) [root@magedu /]# id Task uid=504(Task) gid=504(Task) 組=504(Task),0(root),513(test123) [root@magedu /]# [root@magedu /]# ls -l /tmp/test/data/ 總用量 0 -rw-rw-r--. 1 Task test123 0 9月 5 05:56 123 -rw-rw-r--. 1 Test test123 0 9月 5 05:56 321 [root@magedu /]# su - Test [Test@magedu ~]$ cd /tmp/test/data/ [Test@magedu data]$ rm 123 rm: 無法刪除"123": 不允許的操作 [Test@magedu data]$ |