管道和重定向
-
管道的使用 - |。
例子:查找當(dāng)前目錄下文件個數(shù)。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# find ./ | wc -l 6152例子:列出當(dāng)前路徑下的文件和文件夾,給每一項加一個編號。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# ls | cat -n 1 dump.rdb 2 mongodb-3.6.5 3 Python-3.6.5 4 redis-3.2.11 5 redis.conf例子:查找record.log中包含AAA,但不包含BBB的記錄的總數(shù)
[root@iZwz97tbgo9lkabnat2lo8Z ~]# cat record.log | grep AAA | grep -v BBB | wc -l -
輸出重定向和錯誤重定向 - > / >> / 2>。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# cat readme.txt banana apple grape apple grape watermelon pear pitaya [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat readme.txt | sort | uniq > result.txt [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat result.txt apple banana grape pear pitaya watermelon -
輸入重定向 - <。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# echo 'hello, world!' > hello.txt [root@iZwz97tbgo9lkabnat2lo8Z ~]# wall < hello.txt [root@iZwz97tbgo9lkabnat2lo8Z ~]# Broadcast message from root@iZwz97tbgo9lkabnat2lo8Z (Wed Jun 20 19:43:05 2018): hello, world! [root@iZwz97tbgo9lkabnat2lo8Z ~]# echo 'I will show you some code.' >> hello.txt [root@iZwz97tbgo9lkabnat2lo8Z ~]# wall < hello.txt [root@iZwz97tbgo9lkabnat2lo8Z ~]# Broadcast message from root@iZwz97tbgo9lkabnat2lo8Z (Wed Jun 20 19:43:55 2018): hello, world! I will show you some code.
別名
-
alias
[root@iZwz97tbgo9lkabnat2lo8Z ~]# alias ll='ls -l' [root@iZwz97tbgo9lkabnat2lo8Z ~]# alias frm='rm -rf' [root@iZwz97tbgo9lkabnat2lo8Z ~]# ll ... drwxr-xr-x 2 root root 4096 Jun 20 12:52 abc ... [root@iZwz97tbgo9lkabnat2lo8Z ~]# frm abc -
unalias
[root@iZwz97tbgo9lkabnat2lo8Z ~]# unalias frm [root@iZwz97tbgo9lkabnat2lo8Z ~]# frm sohu.html -bash: frm: command not found
其他程序
-
時間和日期 - date / cal。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# date Wed Jun 20 12:53:19 CST 2018 [root@iZwz97tbgo9lkabnat2lo8Z ~]# cal June 2018 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@iZwz97tbgo9lkabnat2lo8Z ~]# cal 5 2017 May 2017 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 錄制操作腳本 - script。
給用戶發(fā)送消息 - mesg / write / wall / mail。
文件系統(tǒng)
文件和路徑
- 命名規(guī)則:文件名的最大長度與文件系統(tǒng)類型有關(guān),一般情況下,文件名不應(yīng)該超過255個字符,雖然絕大多數(shù)的字符都可以用于文件名,但是最好使用英文大小寫字母、數(shù)字、下劃線、點這樣的符號。文件名中雖然可以使用空格,但應(yīng)該盡可能避免使用空格,否則在輸入文件名時需要用將文件名放在雙引號中或者通過
\對空格進行轉(zhuǎn)義。 - 擴展名:在Linux系統(tǒng)下文件的擴展名是可選的,但是使用擴展名有助于對文件內(nèi)容的理解。有些應(yīng)用程序要通過擴展名來識別文件,但是更多的應(yīng)用程序并不依賴文件的擴展名,就像
file命令在識別文件時并不是依據(jù)擴展名來判定文件的類型。 - 隱藏文件:以點開頭的文件在Linux系統(tǒng)中是隱藏文件(不可見文件)。
目錄結(jié)構(gòu)
- /bin - 基本命令的二進制文件。
- /boot - 引導(dǎo)加載程序的靜態(tài)文件。
- /dev - 設(shè)備文件。
- /etc - 配置文件。
- /home - 普通用戶主目錄的父目錄。
- /lib - 共享庫文件。
- /lib64 - 共享64位庫文件。
- /lost+found - 存放未鏈接文件。
- /media - 自動識別設(shè)備的掛載目錄。
- /mnt - 臨時掛載文件系統(tǒng)的掛載點。
- /opt - 可選插件軟件包安裝位置。
- /proc - 內(nèi)核和進程信息。
- /root - 超級管理員用戶主目錄。
- /run - 存放系統(tǒng)運行時需要的東西。
- /sbin - 超級用戶的二進制文件。
- /sys - 設(shè)備的偽文件系統(tǒng)。
- /tmp - 臨時文件夾。
- /usr - 用戶應(yīng)用目錄。
- /var - 變量數(shù)據(jù)目錄。
訪問權(quán)限
-
chmod - 改變文件模式比特。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l ... -rw-r--r-- 1 root root 211878 Jun 19 16:06 sohu.html ... [root@iZwz97tbgo9lkabnat2lo8Z ~]# chmod g+w,o+w sohu.html [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l ... -rw-rw-rw- 1 root root 211878 Jun 19 16:06 sohu.html ... [root@iZwz97tbgo9lkabnat2lo8Z ~]# chmod 644 sohu.html [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l ... -rw-r--r-- 1 root root 211878 Jun 19 16:06 sohu.html ...說明:通過上面的例子可以看出,用
chmod改變文件模式比特有兩種方式:一種是字符設(shè)定法,另一種是數(shù)字設(shè)定法。除了chmod之外,可以通過umask來設(shè)定哪些權(quán)限將在新文件的默認(rèn)權(quán)限中被刪除。長格式查看目錄或文件時顯示結(jié)果及其對應(yīng)權(quán)限的數(shù)值如下表所示。
[圖片上傳失敗...(image-fe05a4-1542286931601)]
-
chown - 改變文件所有者。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l ... -rw-r--r-- 1 root root 54 Jun 20 10:06 readme.txt ... [root@iZwz97tbgo9lkabnat2lo8Z ~]# chown hellokitty readme.txt [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l ... -rw-r--r-- 1 hellokitty root 54 Jun 20 10:06 readme.txt ...
磁盤管理
-
列出文件系統(tǒng)的磁盤使用狀況 - df。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 5.0G 33G 14% / devtmpfs 486M 0 486M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 356K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 -
磁盤分區(qū)表操作 - fdisk。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# fdisk -l Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000a42f4 Device Boot Start End Blocks Id System /dev/vda1 * 2048 83884031 41940992 83 Linux Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes 格式化文件系統(tǒng) - mkfs。
文件系統(tǒng)檢查 - fsck。
掛載/卸載 - mount / umount。
編輯器 - vim
-
啟動vim??梢酝ㄟ^
vi或vim命令來啟動vim,啟動時可以指定文件名來打開一個文件,如果沒有指定文件名,也可以在保存的時候指定文件名。[root@iZwz97tbgo9lkabnat2lo8Z ~]# vim guess.py 命令模式、編輯模式和末行模式:啟動vim進入的是命令模式(也稱為Normal模式),在命令模式下輸入英文字母
i會進入編輯模式(Insert模式),屏幕下方出現(xiàn)-- INSERT --提示;在編輯模式下按下Esc會回到命令模式,此時如果輸入英文:會進入末行模式,在末行模式下輸入q!可以在不保存當(dāng)前工作的情況下強行退出vim;在命令模式下輸入v會進入可視模式(Visual模式),可以用光標(biāo)選擇一個區(qū)域再完成對應(yīng)的操作。保存和退出vim:在命令模式下輸入
:進入末行模式,輸入wq可以實現(xiàn)保存退出;如果想放棄編輯的內(nèi)容輸入q!強行退出,這一點剛才已經(jīng)提到過了;在命令模式下也可以直接輸入ZZ實現(xiàn)保存退出。如果只想保存文件不退出,那么可以在末行模式下輸入w;可以在w后面輸入空格再指定要保存的文件名。-
光標(biāo)操作。
- 在命令模式下可以通過
h、j、k、l來控制光標(biāo)向左、下、上、右的方向移動,可以在字母前輸入數(shù)字來表示移動的距離,例如:10h表示向左移動10個字符。 - 在命令模式下可以通過
Ctrl+y和Ctrl+e來實現(xiàn)向上、向下滾動一行文本的操作,可以通過Ctrl+f和Ctrl+b來實現(xiàn)向前和向后翻頁的操作。 - 在命令模式下可以通過輸入英文字母
G將光標(biāo)移到文件的末尾,可以通過gg將光標(biāo)移到文件的開始,也可以通過在G前輸入數(shù)字來將光標(biāo)移動到指定的行。
- 在命令模式下可以通過
-
文本操作。
- 刪除:在命令模式下可以用
dd來刪除整行;可以在dd前加數(shù)字來指定刪除的行數(shù);可以用d$來實現(xiàn)刪除從光標(biāo)處刪到行尾的操作,也可以通過d0來實現(xiàn)從光標(biāo)處刪到行首的操作;如果想刪除一個單詞,可以使用dw;如果要刪除全文,可以在輸入:%d(其中:用來從命令模式進入末行模式)。 - 復(fù)制和粘貼:在命令模式下可以用
yy來復(fù)制整行;可以在yy前加數(shù)字來指定復(fù)制的行數(shù);可以通過p將復(fù)制的內(nèi)容粘貼到光標(biāo)所在的地方。 - 撤銷和恢復(fù):在命令模式下輸入
u可以撤銷之前的操作;通過Ctrl+r可以恢復(fù)被撤銷的操作。 - 對內(nèi)容進行排序:在命令模式下輸入
%!sort。
- 刪除:在命令模式下可以用
-
查找和替換。
- 查找操作需要輸入
/進入末行模式并提供正則表達式來匹配與之對應(yīng)的內(nèi)容,例如:/doc.*\.,輸入n來向前搜索,也可以輸入N來向后搜索。 - 替換操作需要輸入
:進入末行模式并指定搜索的范圍、正則表達式以及替換后的內(nèi)容和匹配選項,例如::1,$s/doc.*/hello/gice,其中:-
g- global:全局匹配。 -
i- ignore case:忽略大小寫匹配。 -
c- confirm:替換時需要確認(rèn)。 -
e- error:忽略錯誤。
-
- 查找操作需要輸入
-
參數(shù)設(shè)定:在輸入
:進入末行模式后可以對vim進行設(shè)定。設(shè)置Tab鍵的空格數(shù):
set ts=4設(shè)置顯示/不顯示行號:
set nu/set nonu設(shè)置啟用/關(guān)閉高亮語法:
syntax on/syntax off設(shè)置顯示標(biāo)尺(光標(biāo)所在的行和列):
set ruler-
設(shè)置啟用/關(guān)閉搜索結(jié)果高亮:
set hls/set nohls說明:如果希望上面的這些設(shè)定在每次啟動vim時都能生效,需要將這些設(shè)定寫到用戶主目錄下的.vimrc文件中。
-
高級技巧
-
比較多個文件。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# vim -d foo.txt bar.txt -
打開多個文件。
[root@iZwz97tbgo9lkabnat2lo8Z ~]# vim foo.txt bar.txt hello.txt啟動vim后只有一個窗口顯示的是foo.txt,可以在末行模式中輸入
ls查看到打開的三個文件,也可以在末行模式中輸入b <num>來顯示另一個文件,例如可以用:b 2將bar.txt顯示出來,可以用:b 3將hello.txt顯示出來。 -
拆分和切換窗口。
可以在末行模式中輸入
sp或vs來實現(xiàn)對窗口的水平或垂直拆分,這樣我們就可以同時打開多個編輯窗口,通過按兩次Ctrl+w就可以實現(xiàn)編輯窗口的切換,在一個窗口中執(zhí)行退出操作只會關(guān)閉對應(yīng)的窗口,其他的窗口繼續(xù)保留。 -
映射快捷鍵:在vim下可以將一些常用操作映射為快捷鍵來提升工作效率。
-
例子1:在命令模式下輸入
F4執(zhí)行從第一行開始刪除10000行代碼的操作。:map <F4> gg10000dd。例子2:在編輯模式下輸入
__main直接補全為if __name__ == '__main__':。:inoremap __main if __name__ == '__main__':
說明:上面例子2的
inoremap中的i表示映射的鍵在編輯模式使用,nore表示不要遞歸,這一點非常重要,否則如果鍵對應(yīng)的內(nèi)容中又出現(xiàn)鍵本身,就會引發(fā)遞歸(相當(dāng)于進入了死循環(huán))。如果希望映射的快捷鍵每次啟動vim時都能生效,需要將映射寫到用戶主目錄下的.vimrc文件中。 -
-
錄制宏。
在命令模式下輸入
qa開始錄制宏(其中a是寄存器的名字,也可以是其他英文字母或0-9的數(shù)字)。執(zhí)行你的操作(光標(biāo)操作、編輯操作等),這些操作都會被錄制下來。
如果錄制的操作已經(jīng)完成了,按
q結(jié)束錄制。通過
@a(a是剛才使用的寄存器的名字)播放宏,如果要多次執(zhí)行宏可以在前面加數(shù)字,例如100@a表示將宏播放100次。可以試一試下面的例子來體驗錄制宏的操作,該例子來源于Harttle Land網(wǎng)站,該網(wǎng)站上提供了很多關(guān)于vim的使用技巧,有興趣的可以去了解一下。
-