天行健,君子以自強不息;地勢坤,君子以厚德載物。
每個人都有惰性,但不斷學習是好好生活的根本,共勉!
文章均為學習整理筆記,分享記錄為主,如有錯誤請指正,共同學習進步。
文章目錄
- 一、介紹
- 二、用戶和用戶組
- 1. Linux用戶分類
- 2. 用戶管理命令
- 2.1 命令使用權限
- 2.2 添加用戶
- 2.3 切換用戶
- 2.4 修改用戶密碼
- 2.5 修改已有用戶信息
- 2.6 刪除用戶
- 3. 用戶組管理
- 3.1 使用權限
- 3.2 增加用戶組
- 3.3 修改用戶組
- 三、系統管理
- 1. 日期時間管理
- 1.1 使用者權限
- 1.2 date命令
- 1.2.1 語法
- 1.2.2 參數
- 1.2.3 顯示時間
- 1.2.4 設置時間
- 1.3 時間類型分類
- 1.3.1 UTC世界標準時間
- 1.3.2 GMT格林尼治時間
- 1.3.3 CST北京時間
- 1.4 時區拓展
- 2. 用戶顯示
- 3. sudo命令
- 3.1 語法
- 3.2 參數
- 4. top命令
- 4.1 使用權限
- 4.2 描述
- 4.3 顯示進程信息
- 4.3 進程(任務)的狀態監控屬性描述
- 4.4 顯示完整命令
- 4.5 舉例
- 5. ps命令
- 5.1 使用者權限
- 5.2 語法
- 5.3 顯示進程信息
- 5.4 顯示指定用戶信息
- 5.5 顯示所有進程信息
- 6. kill命令
- 6.1 使用者權限
- 6.2 語法
- 6.3 參數說明
- 6.4 舉例
- 6.5 殺死指定用戶所有進程
- 6.5.1 過濾itcast用戶進程來刪除
- 6.5.2 直接殺死來刪除
- 7. 關機命令
- 7.1 使用者權限
- 7.2 語法
- 7.3 參數描述
- 7.4 立即關機
- 7.5 指定參數進行關機
- 8. 重啟命令
- 8.1 使用者權限
- 8.2 語法
- 8.3 參數描述
- 8.4 直接重啟
- 8.5 指定參數進行重啟
- 四、創建文件和目錄
- 1. 創建文件
- 1.1 重定向符(>)創建文件
- 1.2 touch命令創建文件
- 1.3 echo命令創建文件
- 1.4 printf命令創建新文件
- 1.5 cat命令創建文件
- 1.6 vi/vim命令創建文件
- 1.7 nano命令創建文件
- 1.8 head命令創建命令
- 1.9 tail命令創建文件
- 1.10 truncate命令創建文件
- 2. 創建目錄
- 2.1 語法
- 2.2 命令參數描述
- 2.3 創建空目錄
- 2.4 舉例
- 2.5 -p參數的使用
- 2.6 創建目錄時顯示提示信息
- 2.7 創建目錄時指定權限
- 五、路徑的概念
- 1. 絕對路徑
- 2. 相對路徑
- 六、刪除文件和目錄
- 1. 刪除文件
- 1.1 rm命令刪除文件
- 1.1.1 參數
- 1.1.2 語法
- 1.2 備用刪除命令
- 1.2.1 ps和kill命令組合
- 1.2.2 lsof和kill命令組合
- 1.2.3 fuser命令
- 1.2.4 參數描述
- 1.2.5 使用find命令結合-exec來刪除
- 1.2.6 使用find和xargs來刪除
- 1.3 增量刪除
- 1.3.1 創建測試目錄
- 1.3.2 創建文件
- 1.3.3 查看目錄結構
- 1.3.4 操作流程
- 1.4 海量刪除
- 2. 刪除目錄
- 2.1 強制刪除目錄
- 2.2 提示刪除
- 2.3 一次刪除多個目錄
- 2.4 root權限刪除
- 2.5 其他刪除命令
- 2.5.1 python刪除目錄
- 2.5.2 find命令刪除目錄
- 七、復制文件和目錄
- 1. 語法
- 2. 參數解釋
- 3. 復制文件
- 4. 復制目錄
- 5. 復制文件時直接覆蓋
- 6. 復制多個文件到指定目錄
- 7. 復制軟鏈接文件
- 7.1 不加-d復制軟鏈接
- 7.2 加-d復制軟鏈接
- 8. 復制并保留源文件屬性
- 9. 創建源文件的硬鏈接
- 10. 創建源文件的軟鏈接
- 11. 復制舉例
- 12. rsync復制(拓展)
- 八、移動文件和目錄
- 1. 移動文件
- 2. 移動目錄(即文件夾)
- 2.1 移動文件到指定目錄
- 2.2 移動目錄下的所有文件到指定目錄
- 2.3 移動指定類型的文件到指定目錄
- 2.4 移動目錄以及目錄下的所有內容
- 九、重命名文件和目錄
- 1. rm重命名語法
- 2. rename重命名語法
- 2.1 單文件修改
- 2.2 批量修改
- 十、查看文件內容
- 1. 查看文件類型
- 2. 查看整個文件
- 2.1 cat命令查看
- 2.2 more命令查看
- 2.3 less命令查看
- 3. 查看部分文件
- 4. 處理文件的操作
- 4.1 創建空文件
- 4.2 過濾文件內容
- 5. 統計文件內容
- 6. 對文件內容進行排序
- 7. 查看長內容文件
- 7.1 cat命令查看
- 7.1.1 語法
- 7.1.2 參數解釋
- 7.2 more命令查看
- 7.2.1 語法
- 7.2.2 百分比
- 7.3 grep
- 7.3.1 語法
- 7.3.2 options參數選擇
- 7.3.3 模式查找(正則查找)
- 十一、vi文本編輯器編輯文本
- 1. vi介紹
- 1.1 vi的特點
- 1.2 vi的工作模式
- 2. vi的啟動與退出
- 3. vi基本命令
- 3.1 常用命令分類
- 3.2 屏幕翻滾命令
- 3.3 光標定位命令
- 3.4 光標移動命令
- 3.5 文本輸入與刪除
- 3.5.1 文本的輸入insert
- 3.5.2 文本的刪除delete
- 4. 文本的修改與替換
- 4.1 文本的修改correct
- 4.2 文本的替換replace
- 5. 文本的拷貝與粘貼copy
- 6. 撤銷與重做
- 7. vi常用末行命令
- 7.1 字符串搜索
- 7.2 字符串替換s
- 7.3 全局命令global
- 7.4 全局替換
- 7.5 文件操作與退出命令
- 7.6 其他常用命令
- 7.6.1 行編輯命令
- 7.6.2 執行shell命令
- 7.6.3 設定vi選項
- 十二、查找文件
- 1. find
- 1.1 基本用法
- 1.2 舉例
- 2. locate
- 3. grep
- 3.1 grep語法
- 3.2 舉例
- 4. 通過特定程序定位文件
- Linux命令匯總
一、介紹
服務器維護等內容均通過SSH客戶端工具操作,故linux命令必不可少
二、用戶和用戶組
1. Linux用戶分類
用戶有以下幾種類型:root用戶、系統用戶和普通用戶
用戶類型 | 權限等級 | 描述信息 |
---|---|---|
root用戶 | UID為0 | 權限最高,也稱為超級用戶 |
系統用戶 | UID為1-999 | 用戶不具有登錄linux系統的能力但系統運行又不可或缺,也稱為虛擬用戶、偽用戶、假用戶,如ftp、mail等用戶 |
普通用戶 | UID為1000-60000 | 可登錄系統操作自己目錄的內容的用戶 |
拓展
/etc/passwd文件
所有用戶均記錄在該文件,一行表示一個用戶的賬號信息,信息組成部分共7個,依次為用戶名、密碼、用戶標識號UID、用戶所屬的主要群組標識號GID、用戶名全稱、用戶主目錄、用戶使用的Shell類型
UID值
UID使用戶的ID值,系統中的每一個用戶的UID值唯一,該值是確認用戶權限的標識,用戶登錄系統所處的角色通過UID判斷識別而非用戶名
/etc/shadow文件
該文件是/etc/passwd的互補文件,內容包含用戶及被加密的密碼和/etc/passwd中不包含的信息,如用戶賬號有效期,該文件只有root權限可讀取和操作
2. 用戶管理命令
2.1 命令使用權限
用戶管理的相關命令使用權限范圍或者級別為root管理員
2.2 添加用戶
添加用戶的語法如下
useradd <username> <options>
username為用戶名
options為參數值
如useradd libai -b /usr表示添加用戶名李白并指定賬號的主目錄的基目錄為/usr
options參數可選如下
參數 | 描述 |
---|---|
-b | b為base的簡寫,后跟目錄,指定新賬戶的主目錄的基目錄 |
-c | c為commit的簡寫,后跟描述信息,指定新用戶的一段提交描述 |
-d | 后跟目錄,指定新用戶的主目錄,如果目錄不存在則同時使用-m選項可創建主目錄 |
-D | D為defaults的簡寫,顯示或更改默認的useradd配置 |
-e | e為expiredate的簡寫,后跟日期,指定新用戶的過期日期 |
-f | 后跟日期,指定用戶的密碼不活動期 |
-g | g為gid的簡寫,后跟用戶組的名稱或ID,指定用戶所屬的用戶組 |
-G | G為groups的簡寫,后跟用戶組,指定用戶所屬的附加組 |
-h | h為help的簡寫,顯示幫助信息 |
-k | k為skel的簡寫,后跟目錄,指定用戶的骨架目錄 |
-K | K為key的簡寫,后跟key=value,不使用/etc/login.defs中的默認值 |
-l | 不將此用戶添加到最近登錄和登錄失敗的數據庫 |
-m | 創建用戶的主目錄 |
-M | 不創建用戶的主目錄 |
-N | 不創建同名的組 |
-o | 允許使用重復的UID創建用戶 |
-p | p為password的簡寫,后跟密碼,指定加密后的新賬號密碼 |
-r | 創建一個系統賬號 |
-R | R為root的簡寫,后跟目錄,指定chroot到的目錄 |
-s | s為shell的簡寫,后跟shell文件,指定新用戶的登錄shell |
-u | u為uid的簡寫,后跟UID,指定用戶的用戶號,如果同時有-o選項則可以重復使用其他用戶標識號 |
-U | U為user-group的簡寫,創建于用戶同名的組 |
-Z | 后跟seuser,為selinux用戶映射使用指定的seuser |
2.3 切換用戶
語法:
su <username>
如切換到用戶libai
su libai
2.4 修改用戶密碼
語法
passwd <options> <username>
options可用參數如下
參數 | 描述 |
---|---|
-l | 鎖定口令,禁用賬號 |
-u | 口令解鎖 |
-d | 設置賬號無口令 |
-f | 強迫用戶下次登錄時修改口令 |
2.5 修改已有用戶信息
語法
usermod <options> <username>
options可用參數
參數 | 完整字母 | 描述 |
---|---|---|
-a | append | 后跟附加組,將用戶追加到下邊-G中提到的附件組中,并不從其他組中刪除此用戶 |
-c | commit | 后跟描述信息,GECOS字段的新值 |
-d | 后跟目錄,指定新用戶的主目錄,如果目錄不存在則同時使用-m選項可創建主目錄 | |
-e | expiredate | 后跟日期,指定新用戶的過期日期 |
-f | 后跟日期,指定用戶過期inactive天數后,設定密碼為失效狀態 | |
-g | gid | 后跟用戶組的名稱或ID,強制使用Group為新主組 |
-G | groups | 后跟用戶組,指定用戶所屬的新的附加用戶組 |
-h | help | 顯示幫助信息 |
-l | login | 后跟登錄名,指定新的登錄名稱 |
-L | lock | 鎖定用戶賬號 |
-m | move-home | 將home目錄內容移至新位置,該參數僅與-d參數一起使用 |
-o | non-unique | 允許使用重復的UID創建用戶 |
-p | password | 后跟密碼,指定加密后的新賬號密碼 |
-R | root | 后跟目錄,指定chroot到的目錄 |
-s | shell | 后跟shell文件,指定新用戶的登錄shell |
-u | uid | 后跟UID,指定用戶的用戶號,如果同時有-o選項則可以重復使用其他用戶標識號 |
-U | user-group | 創建于用戶同名的組 |
-Z | selinux-user | 后跟seuser,為selinux用戶映射使用指定的seuser |
2.6 刪除用戶
語法
userdel <options> <username>
options參數
參數 | 完整字母 | 描述 |
---|---|---|
-f | force | 強制刪除用戶,即使當前用戶已經登錄,也會被刪除 |
-h | hellp | 顯示幫助信息 |
-r | remove | 刪除用戶的同時刪除與用戶相關的所有文件,包括主目錄和郵件池 |
-R | root | 后跟chroot目錄,表示chroot到的目錄 |
-Z | selinux-user | 為用戶 |
3. 用戶組管理
3.1 使用權限
用戶組的使用權限范圍為root管理員用戶
3.2 增加用戶組
先新增一個用戶組,然后將用戶組添加到組中
語法
groupadd <options> <useradd>
options參數可選項
參數 | 完整字母 | 描述 |
---|---|---|
-f | force | 如果組已經存在則成功退出,且如果GID已經存在則取消-g |
-g | gid | 后跟GID,為新組使用GID |
-h | help | 顯示幫助信息 |
-K | key | 后跟key=value,不使用/etc/login.defs中的默認值 |
-o | non-unique | 允許使用重復的GID創建用戶組,一般與-g選項同時使用,新用戶組GID和系統已有用戶組的GID可以相同 |
-p | password | 后跟密碼,指定加密后的新賬號密碼 |
-r | system | 創建一個系統賬戶 |
-R | root | 后跟chroot目錄,表示chroot到的目錄 |
拓展
用戶主組、附加組
一個賬戶可以屬于多個組群,挑一個作為用戶的主組,用戶登錄系統后就屬于改組
3.3 修改用戶組
語法
groupmod <options> <group>
options參數選項
參數 | 完整字母 | 描述 |
---|---|---|
-g | gid | 后跟GID,為用戶組指定新的GID |
-h | help | 顯示幫助信息 |
-n | new-name | 后跟新組,改名為新的組名 |
-o | non-unique | 允許使用重復的GID,一般與-g選項同時使用,新用戶組GID和系統已有用戶組的GID可以相同 |
-p | password | 后跟密碼,將密碼改為加密過的密碼 |
-R | root | 后跟chroot目錄,表示chroot到的目錄 |
三、系統管理
1. 日期時間管理
1.1 使用者權限
使用者權限為所有用戶
1.2 date命令
當日期由date設置時,系統重啟后不會保存date的設置
date用于顯示或設定系統地日期和時間
通過date命令可以查看日期
1.2.1 語法
date [options]
1.2.2 參數
options參數選項
參數 | 描述 |
---|---|
-d | 后跟字符串,顯示字符串所指的日期與時間,字符串前后必須加上雙引號 |
-s | 后跟字符串,根據字符串來設置日期與時間,字符串前后必須加上雙引號 |
-u | 顯示GMT時間 |
-help | 幫助提示 |
-version | 顯示版本信息 |
1.2.3 顯示時間
date
1.2.4 設置時間
date -s "2024-05-30 12:00:00"
1.3 時間類型分類
1.3.1 UTC世界標準時間
UTC:協調世界時,又稱為世界統一時間、世界標準時間、國際協調時間,由于英文CUT和法文TUC的縮寫不同,作為妥協簡稱UTC
1.3.2 GMT格林尼治時間
GMT:格林尼治 平太陽時間,指格林尼治所在地的標準時間,也表示地球自轉速率的一種形式
GMT的英文名::Universal TiMe,也可以叫做GMT(Greenwich Mean Time)
1.3.3 CST北京時間
CST:北京時間(中國國家標準時間)
北京時間是中國采用國際時區東八時區的區時作為標準時間
北京時間不是北京(東經116.4°)的地方時間,而是東經120°的地方時間
北京時間處于國際時區劃分中的東八區,同格林尼治(世界時)時間相差8小時(北京時間=世界時+8小時),所以名為北京時間
東八區包括的范圍從東經112.5°到東經127.5°,以東經120°為中心線,東西各延伸7.5°,總寬度為15°的區域
中國幅員遼闊,東西跨了5個時區(東五區,東六、七、八、九區)授時臺必須建在地理中心地帶,從而產生了長短波授,北京時間和北京當地時間是兩個概念,北京時間的發波不在北京,而在陜西蒲城,處于東七區。
1.4 時區拓展
東八區:東八區UTC/GMT+08:00是比世界協調時間UTC/格林尼治時間GMT快8小時的時區,時區位置東經112.5°到127.5°之間,格林尼治時間為0:00時東八區的標準時間為08:00
2. 用戶顯示
顯示用戶
logname [options]
該命令用于顯示用戶名稱,后面的參數可以不加,直接使用logname進行查看
options參數選項
參數 | 描述 |
---|---|
–help | 幫助信息 |
–version | 顯示版本信息并退出 |
3. sudo命令
控制用戶對系統命令的使用權限即root允許的操作
當你不是root用戶想要使用root用戶的權限,可以在命令前加sudo來提高當前用戶的權限
3.1 語法
sudo [options]
3.2 參數
options參數選項
參數 | 完整字母 | 描述 |
---|---|---|
-A | askpass | 使用助手程序進行密碼提示 |
-b | background | 在后臺運行命令 |
-C | close-from=num | 關閉所有>=num的文件描述符 |
-E | preserve-env | 在執行命令時保留用戶環境 |
-e | edit | 編輯文件而非執行命令 |
-g | group=group | 指定的用戶組或ID執行命令 |
-H | set-home | 將home變量設為目標用戶的主目錄 |
-h | help | 顯示幫助信息 |
-h | host=host | 在主機上運行命令(如果插件支持) |
-i | login | 以目標用戶身份運行一個登錄shell,可同時指定一條命令 |
-K | remove-timestamp | 完全一處時間戳文件 |
-k | reset-timestamp | 無效的時間戳文件 |
-l | list | 列出用戶權限或檢查某個特定命令;對于長格式,使用兩次 |
-n | non-interactive | 非交互模式,不提示 |
-P | preserve-groups | 保留組向量,而非設置為目標的組向量 |
-p | prompt=prompt | 使用指定的密碼提示 |
-r | role=role | 以指定的角色創建SELinux安全環境 |
-S | stdin | 從標準輸入讀取密碼 |
-s | shell | 以目標用戶運行shell;可同時指定一條命令 |
-t | type=type | 以指定的類型創建SELinux安全環境 |
-U | other-user=user | 在列表模式中顯示用戶的權限 |
-u | user=user | 以指定用戶或ID運行命令(或編輯文件) |
-V | version | 顯示版本信息并退出 |
-v | version | 更新用戶的時間戳而不執行命令 |
-- | 停止處理命令行參數 |
4. top命令
4.1 使用權限
所有使用者
4.2 描述
企業級開發中,開發運維人員經常使用top命令查看服務器上運行的程序占用的CPU情況以及占用內存情況
目的是檢測程序是否在正常范圍內運行
top命令用于實時顯示process的動態
4.3 顯示進程信息
top
然后可按q鍵退出
4.3 進程(任務)的狀態監控屬性描述
4.2的命令查看的結果會有很多參數,以下是對參數的描述
參數 | 描述 |
---|---|
PID | 進程id |
USER | 進程所有者 |
PR | 進程優先級 |
NI | nice值,負值表示高優先級,正值表示低優先級 |
VIRT | 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES |
RES | 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA |
SHR | 共享內存大小,單位kb |
S | 進程狀態,D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵尸進程 |
%CPU | 上次更新到現在的CPU時間占用百分比 |
%MEM | 進程使用的物理內存百分比 |
TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
COMMAND | 進程名稱(命令名/命令行) |
4.4 顯示完整命令
top -c
-c
參數是command的簡寫
與top命令不同的是command屬性可以進行補全
4.5 舉例
顯示指定進程4160的信息
top -p 4160
5. ps命令
該命令類似于在windows中通過任務管理器查看進程信息
linux ps命令用于顯示當前進程process的狀態信息
5.1 使用者權限
所有用戶
5.2 語法
ps
5.3 顯示進程信息
ps -A
5.4 顯示指定用戶信息
ps -u itcast
5.5 顯示所有進程信息
ps -ef
6. kill命令
linux kill命令用于刪除執行中的程序或工作,可強制終端
6.1 使用者權限
所有用戶
6.2 語法
kill [-s <信息名稱或編號>][程序]
或
kill [-l <信息編號>]
6.3 參數說明
參數 | 后跟變量 | 描述 |
---|---|---|
-l | <信息編號> | 如果不加<信息編號>選項,則-l參數會列出全部的信息名稱 |
-s | <信息名稱或編號> | 指定要送出的信息 |
[程序] | [程序]參數可以是程序的PID或是PGID,也可以是工作編號 |
6.4 舉例
殺死一個進程,如進程號15642
kill 15642
強制殺死進程,如進程號15555
kill -KILL 15555
徹底殺死進程,如進程號15555
kill -9 15555
6.5 殺死指定用戶所有進程
方法有兩種
6.5.1 過濾itcast用戶進程來刪除
kill -9 $(ps -ef | grep itcast)
6.5.2 直接殺死來刪除
kill -u itcast
7. 關機命令
shutdown命令可以用來關閉系統,關機前傳送信息給所有使用者正在執行的程序,shutdown也可用于重開機
7.1 使用者權限
管理員用戶
7.2 語法
shutdown [-t seconds] [-rkhncfF] time [message]
7.3 參數描述
關于語法中參數的解釋
參數 | 描述 |
---|---|
-t | seconds 設定在幾秒鐘之后進行關機程序 |
-k | 不會真的關機,只是將警告信息傳送給所有使用者 |
-r | 關機后重新開機 |
-h | 關機后停機 |
-n | 不采用正常程序來關機,用強迫的方式殺掉所有執行中的程序然后自行關機 |
-c | 取消目前已經進行中的關機動作 |
-f | 關機時,不做fsck動作(檢查linux檔系統) |
-F | 關機時,強迫進行fsck動作 |
time | 設定關機的時間 |
message | 傳送給所有使用者的警告信息 |
7.4 立即關機
shutdown -h now
或者
shutdown
7.5 指定參數進行關機
指定1分鐘后關機,1分鐘后關機并顯示警告信息
shutdown +1 "system will shutdown after 1 minutes"
8. 重啟命令
reboot命令用于重啟計算機
8.1 使用者權限
管理員、普通(需要驗證)用戶
8.2 語法
reboot [-n] [-w] [-d] [-f] [-i]
8.3 參數描述
參數 | 描述 |
---|---|
-n | 在重啟前不做將記憶體資料歇會硬盤的動作 |
-w | 不會真的重啟,只把記錄寫到/var/log/wtmp檔案里 |
-d | 不把記錄寫到/var/log/wtmp檔案里(-n參數包含了-d) |
-f | 強迫重啟,不會叫shutdown指令 |
-i | 在重啟之前先把所有網絡相關的裝置停止 |
8.4 直接重啟
reboot
8.5 指定參數進行重啟
指定1分鐘后重啟,并發出警告信息
shutdown -r +1 "system will restart after 1 minutes "
四、創建文件和目錄
1. 創建文件
創建文件的方式有多種,以下列舉
1.1 重定向符(>)創建文件
重定向符可以創建一個空文件,不允許在創建時輸入任何文本內容
語法
> 文件名
如:
> test.txt
1.2 touch命令創建文件
touch命令常用于將每個文件的訪問和修改時間更新為當前時間
如果指定的文件名不存在則會創建新文件,touch不允許在創建文件時插入文本內容,默認創建空文件
語法
touch 文件名
如:
touch test.txt
1.3 echo命令創建文件
大多數操作系統內置echo,常用于腳本文件、批處理文件和插入文本的命令
echo允許在創建文件時插入文本內容
語法
echo "需要添加到文件的內容" > 文件名
如:
echo "這是一個使用echo命令創建的新文件" > test.txt
創建文件后也可以用兩個重定向符繼續向文件中添加內容,如
echo "追加內容到文件中" >> test.txt
1.4 printf命令創建新文件
用法和echo相同
語法
printf "需要添加到文件的內容" > 文件名
如:
printf "這是一個使用printf命令創建的新文件" > test.txt
創建文件后也可以用兩個重定向符繼續向文件中添加內容,如
printf "追加內容到文件中" >> test.txt
1.5 cat命令創建文件
cat是concatenate的簡寫,通常用于讀取文件數據
cat作為類unix系統中最常用的命令之一,提供了三個與文本文件相關的功能:顯示文件內容、組合多個文件內容到一個輸出、創建一個新文件
語法
cat > 文件名
回車后然后輸入內容,輸入完后使用ctrl+c或者ctrl+d退出
向同一個文件添加內容可使用兩個重定向符,如
cat >> 文件名
回車后輸入追加內容,輸入結束后使用ctrl+c或者ctrl+d退出
1.6 vi/vim命令創建文件
vim向上兼容vi,通常系統會自帶vi編輯器,vim編輯器有些系統是需要自行安裝的
vim有更好的界面體驗,可編輯所有種類的純文本文件
創建文件(也是編輯文件)的語法
vi 文件名
或者
vim 文件名
如果文件已存在則進行編輯,如果文件不存在則創建并編輯
至于如何使用vim命令進行編輯保存等操作,可參考文章:vim安裝及使用
1.7 nano命令創建文件
nano是一個編輯器,是一個小且用戶友好的自由軟件,打開多個文件、逐行滾動、撤銷重做、語法高亮、行號等
語法
nano 文件名
1.8 head命令創建命令
head用于輸出一個文件的開頭部分,默認打印一個文件的開頭10行到標準輸出,若有多個文件則每個文件都會有一個標題,用于表示文件名
語法
head -c OK /dev/zero > test.txt
使用ls查看創建的文件
ls -lh test.txt
1.9 tail命令創建文件
tail命令通常用于輸出文件最后的一部分,默認打印每個文件最后10行到標準輸出,若有多個文件則每個文件都會輸出一個標題,用于表示文件名
語法
tail -c OK /dev/zero > test.txt
使用ls查看創建的文件
ls -lh test.txt
1.10 truncate命令創建文件
truncate命令通常用于將一個文件的尺寸縮小或者擴展為某個指定的尺寸
語法
truncate -s OK test.txt
使用ls查看創建的文件
ls -lh test.txt
2. 創建目錄
命令mkdir是make directory的縮寫
2.1 語法
mkdir [options] 目錄名稱
2.2 命令參數描述
語法命令中options參數選項
參數 | 描述 |
---|---|
-m | 指定目錄權限,后跟數字,也可跟權限字符,雖然跟chmod類似,但不是通過"rwxrwxrwx"這種方式直接賦予 |
-p | 創建多級目錄,如果路徑中某些目錄不存在會自動創建 |
-v | 每次創建目錄都顯示信息 |
–help | 顯示幫助信息 |
–version | 顯示版本信息 |
2.3 創建空目錄
mkdir 目錄名
2.4 舉例
在當前目錄創建空目錄test
mkdir test
在root目錄下創建空目錄test
mkdir /root/test
遞歸創建多級目錄
mkdir /root/test/111/hhhh
2.5 -p參數的使用
若該路徑中有目錄不存在則會創建失敗,此時使用-p參數即可創建成功
mkdir -p /root/test/111/hhhh
2.6 創建目錄時顯示提示信息
創建新目錄顯示提示信息
mkdir -v 目錄名
如創建新目錄test
mkdir -v test
2.7 創建目錄時指定權限
mkdir -m 目錄權限 目錄名
如:創建test目錄并賦予目錄可讀可寫可執行權限
mkdir -m 777 test
五、路徑的概念
1. 絕對路徑
從根目錄開始的路徑成為絕對路徑,linux中根路徑為/,如果路徑以/開始則為絕對路徑
當前位置的絕對路徑查看命令
pwd
2. 相對路徑
相對路徑有一些符號需要注意
符號 | 描述 |
---|---|
. | 表示用戶所處的當前目錄 |
… | 表示上級目錄 |
~ | 表示當前用戶自己的home目錄 |
~USER | 表示用戶名為USER的home目錄,這里USER是在/etc/passwd中存在的用戶名 |
使用…/表示上一級
使用…/…/表示上上級目錄
以此類推
六、刪除文件和目錄
1. 刪除文件
1.1 rm命令刪除文件
rm是remove的縮寫,默認情況下linux系統帶有-i參數
一般情況下使用rm進行刪除
1.1.1 參數
rm命令中可添加以下參數
參數 | 描述 |
---|---|
-i | 刪除前提示確認信息 |
-f | 參數表示強制刪除 |
-r | 參數表示目錄中有子目錄進行刪除 |
使用rm -rf filename
命令可刪除大多數情況的文件
1.1.2 語法
刪除文件或目錄
rm 文件或目錄
刪除前逐一詢問確認
rm -i 文件或目錄
直接刪除,無需確認
rm -f 文件或目錄
遞歸刪除文件目錄及其子目錄的文件
rm -rf 目錄
1.2 備用刪除命令
當以上命令無法刪除時,可能是進程被占用,可嘗試以下命令
1.2.1 ps和kill命令組合
ps和kill命令查看并刪除相應的進程,再執行rm
1.2.2 lsof和kill命令組合
lsof查看使用該文件并kill刪除然后再執行rm
1.2.3 fuser命令
使用fuser -kvm /mnt/test,然后再執行rm
1.2.4 參數描述
參數 | 描述 |
---|---|
-k | kill的縮寫 |
-v | 詳細輸出 |
-m | 表示指定的靈位掛載點 |
1.2.5 使用find命令結合-exec來刪除
find /tmp -type f -exec rm -rf {} \;
1.2.6 使用find和xargs來刪除
find /tmp -type f | xargs rm -rf
1.3 增量刪除
1.3.1 創建測試目錄
mkdir {dirA, dirB}
1.3.2 創建文件
dirA創建三個文件A1,A2,A3
touch dirA/{A1,A2,A3}
dirB創建三個文件B1,B2,B3
touch dirB/{B1,B2,B3}
1.3.3 查看目錄結構
tree -L 2 dirA/ dirB/
1.3.4 操作流程
1
將dirA的所有文件同步到dirB內,保留文件的屬主,屬組,文件權限信息等
rsync -avz dirA/ dirB/
2
將dirA的所有文件同步到dirB內,并刪除dirB內多余的文件
rsync -avz --delete dirA/ dirB/
3
將dirA的所有文件同步到dirB,但在dirB內除了B3不刪除,其他的都刪除
rsync -avz --delete --exclude='B3' dirA/ dirB/
4
將dirA目錄內的A1.txt和A2.txt不同步到dirB目錄中
rsync -avz --exclude='A1' --exclude='A2' dirA/ dirB/
5
將dirA目錄內的A1和A2不同步到dirB目錄中,并且dirB目錄內刪除多余的文件
rsync -avz --exclude='A1' --delete dirA/ dirB/
6
將dirA目錄內的A1和A2不同步到dirB目錄中,并且將dirB目錄內刪除多余的文件,同時,如果dirB內有A2和A1這兩個被排除同步的文件,仍然將其刪除
rsync -avz --exclude='A1' --exclude='A2' --delete-exclude dirA/ dirB/
1.4 海量刪除
文件過多時,執行rm -rf file*報錯,此時考慮同步刪除操作高效快速,建立一個空目錄作為中轉,然后刪除
rsync --delete-before -avH --progress --stats /tmp/ /yourdir/
參數解釋
參數 | 描述 |
---|---|
-a | 歸檔模式 |
-v | 顯示全部過程 |
-H | 保持硬鏈接 |
-progress | 在傳輸時顯示傳輸過程 |
注意
有掛載點的情況必須先執行unmount
如果刪除不掉可以嘗試刪除其父目錄
2. 刪除目錄
2.1 強制刪除目錄
rm -Rf 目錄名
2.2 提示刪除
默認刪除帶有子目錄的目錄時不會提示子目錄信息
刪除帶有子目錄的目錄提供詳細信息,使用-v參數
rm -Rf -v 目錄名
2.3 一次刪除多個目錄
rm -rf -v 目錄1 目錄2 目錄3
2.4 root權限刪除
如果目錄為root權限,普通用戶無法刪除目錄,此時使用sudo命令獲取root權限
sudo rm -Rf 目錄名
2.5 其他刪除命令
2.5.1 python刪除目錄
import os
os.remove("目錄名")
2.5.2 find命令刪除目錄
find 目錄 -type d -name '*cache*' -exec rm -r {} +
或者
find 目錄 -type d -delete
參數解釋
參數 | 描述 |
---|---|
-exec | 將匹配文件和文件夾運行給定命令 |
-type d | 匹配目錄類型 |
-name ‘cache’ | 提供名稱或名稱模式 |
-delete | 選項將自動刪除匹配的文件和文件夾 |
七、復制文件和目錄
復制使用cp命令
cp命令是copy的縮寫
1. 語法
cp [options] source dest
source是源文件或目錄
dest是目標文件或目錄
2. 參數解釋
命令相關參數
參數 | 描述 |
---|---|
-r | 遞歸復制整個文件夾 |
-i | 若目標文件或目錄已存在則詢問是否覆蓋 |
-p | 保留源文件或源目錄的所有屬性 |
-d | 當復制符號鏈接時把目標文件或目錄也建立為符號鏈接,并指向與源文件或目錄鏈接的原始文件或目錄。如果不加該選項,則復制的依然是源文件而不是符號鏈接文件,并且對硬鏈接文件無效 |
-l | 對源文件建立硬鏈接,而非復制文件 |
-s | 對源文件建立符號鏈接,而非復制文件 |
-b | 覆蓋已存在的目標文件前將目標文件進行備份 |
-v | 詳細顯示cp命令執行的操作過程 |
3. 復制文件
語法
cp 源文件 目標文件/目標目錄
注:當目標為文件時,會進行文件內容覆蓋,即將文件內容復制到目標文件中
4. 復制目錄
語法
cp -r 源目錄 目標目錄
注:因為目錄中可能會含有子目錄,需要使用參數-r進行遞歸復制,否則會報錯
5. 復制文件時直接覆蓋
\cp 源文件 目標文件
使用\cp不用輸入y確認是否覆蓋文件
6. 復制多個文件到指定目錄
復制多個文件到指定目錄時只需要將文件列舉即可,如下
cp 源文件1 源文件2 源文件3 目標目錄
7. 復制軟鏈接文件
復制軟鏈接語法
cp -d 軟鏈接文件 目標目錄或目標文件
注:如果不加-d參數復制的是軟鏈接文件本身,而不是軟鏈接對應的文件
如:
軟鏈接tt.txt對應的是/home/test/tt.txt文件,此時復制軟鏈接到當前文件的tt.link
7.1 不加-d復制軟鏈接
不加-d參數時
cp tt.txt tt.link
該命令是將tt.txt文件本身復制到tt.link文件,但此時復制的tt.txt和復制后的tt.link都不是軟鏈接
7.2 加-d復制軟鏈接
加-d參數時
cp -d tt.txt tt.link
該命令會將tt.txt軟鏈接復制到tt.link,復制后tt.link也是一個軟鏈接,而且指向原tt.txt對應的/home/test/tt.txt文件
8. 復制并保留源文件屬性
語法
cp -p 源文件 目標目錄或目標文件
通過加-p參數將源文件的時間等屬性保留
9. 創建源文件的硬鏈接
語法
cp -l 源文件 目標文件
如:cp -l /t/test.txt test.link
10. 創建源文件的軟鏈接
語法
cp -s 源文件 目標文件
如:cp -s /t/test.txt test.link
11. 復制舉例
如將上一級的test目錄中的所有文件復制到當前位置
cp ../test/* ./
如果test目錄中的文件還有子目錄,可以使用rf參數進行遞歸強制執行
cp ../test/* ./ -rf
復制文件到當前目錄
如將上一級的test.txt文件復制到當前目錄中
cp ../test.txt ./
復制文件到另一個文件
如將test.txt的內容復制到test2.txt
cp test.txt test2.txt
復制某類文件
如將所有.txt結尾的文件復制到test目錄
cp *.txt /test
12. rsync復制(拓展)
rsync是一種快速且通用的命令,可將兩個位置目錄或文件進行同步,也可以將文件復制到本地或者遠程位置
當包含子目錄時rsync的遞歸參數是-a,傳輸特殊設備和阻止設備,保留符號鏈接,修改時間,組,所有權和權限
復制時如果目標文件存在則覆蓋
最安全的方式是在目標目錄和源目錄尾部都加上/
八、移動文件和目錄
移動文件或目錄使用命令mv即move的縮寫
1. 移動文件
語法
mv <源文件名稱或地址> <新文件名稱或地址>
此方法也可修改文件名
2. 移動目錄(即文件夾)
2.1 移動文件到指定目錄
語法
mv <源文件> <目標目錄>
2.2 移動目錄下的所有文件到指定目錄
語法
mv <源文件目錄/*> <目標目錄>
或者
mv <源文件目錄> <目標目錄>
2.3 移動指定類型的文件到指定目錄
如移動目錄test中.txt結尾的文件到指定目錄
mv test/*.txt <目標目錄>
2.4 移動目錄以及目錄下的所有內容
mv <源目錄> <目標目錄/>
即在目標目錄后加上/即可將文件和文件所在的目錄本身都移動到目標目錄
九、重命名文件和目錄
使用mv或者rename重命名文件或者目錄
mv不僅可以移動文件或目錄,還可以用來重命名
1. rm重命名語法
目錄或文件重命名
mv 源文件名或目錄名 重命名后的文件名或目錄名
2. rename重命名語法
2.1 單文件修改
rename 源文件名 重命名后的文件名
rename如果是perl版本,則可以使用正則進行rename操作
2.2 批量修改
將文件名稱的部分替換
rename a b *
如果文件有a1.txt和c2.txt
通過rename a b *
命令后,文件會被修改為b1.txt,b2.txt
十、查看文件內容
1. 查看文件類型
語法
file 文件或目錄的路徑
如果是文件則顯示問價的字符編碼
如果是目錄則顯示目錄名:directory
如果是符號鏈接則顯示鏈接到哪個文件
如果是二進制可執行程序則能確定程序編譯時面向的平臺一級需要何種類型的庫
2. 查看整個文件
查看整個文件內容有以下幾種方式
2.1 cat命令查看
語法
cat 文件列表
可選參數
參數 | 完整字母 | 描述 |
---|---|---|
-n | number | 由1開始對所有輸出的行數編號 |
-v | show-nonprinting | 使用^和M-符號,除了LFD和TAB之外 |
-E | show-ends | 在每行結束處顯示$ |
-T | show-tabs | 將TAB字符顯示為^ |
-A | show-all | 等價于-vET |
2.2 more命令查看
語法
more [+數字] [-數字] file
以全屏方式按頁顯示文本文件的內容,如果帶上參數’+數字’表示從該行開始顯示,
參數’-數字’表示指定每屏顯示的行數,Enter向下滾動一行,空格或f向下滾動一屏,b向上滾動一屏,q退出
2.3 less命令查看
基于more和vi指令實現的less
可以使用前后左右來查看文件內容
pageup
向上翻頁
pagedown
向下翻頁
=
輸出文件名和當前行的行號等信息
若在使用less指令查看內容時不退出less就能執行shell的其他命令可使用!command的方式直接執行指令,執行結束后自動返回less指令
指令執行中可按h鍵顯示less的快捷鍵幫助
冒號:提示符下輸入查找的關鍵字先輸入/后輸入關鍵字最后回車可以實現快速定位
3. 查看部分文件
tail命令可以輸出文件中的尾部內容
head [options] [文件列表]
head命令可顯示文件頭部內容
head [options] [文件列表]
options可選
參數 | 描述 |
---|---|
-n | 行數,指定顯示頭部內容的行數,默認10行 |
-c | 字符數,指定顯示頭部內容的字符數 |
4. 處理文件的操作
4.1 創建空文件
touch newfile
4.2 過濾文件內容
grep命令過濾
grep [options] [匹配模式] file
按照匹配模式的規則搜索指定文件,并將匹配的內容輸出
options選項
參數 | 描述 |
---|---|
-v | 搜索不含指定字符串的行 |
-x | 整行匹配 |
-c | 統計符合匹配模式的行數 |
-E | 用來擴展選項為正則表達式 |
cut命令過濾
cut [options] [文件]
指令顯示行中指定的部分,刪除文件中指定的字段
options選項
參數 | 描述 |
---|---|
-d | 指定字段的分割符,字段的默認分割符為"TAB",用法: -d “分割符” |
-f | 指定起始字段位置和結束字段位置,顯示這個范圍的字段內容,用法: -f 開始位置-結束為止,如 -f 1-7 |
若只顯示一個字段,則不用填兩個參數,顯示哪個位置的字段填那個位置即可,如-f 2
5. 統計文件內容
語法
wc [options] [文件列表]
統計文件的行數、單詞數和字符數
options選項
參數 | 描述 |
---|---|
-l | 打印總行數 |
注意:windows下文件的最后一行不會自動添加換行符,用wc統計時,發現會少一行,使用換行符"\n"作為結束標志,實際是統計換行符的個數
6. 對文件內容進行排序
語法
sort [options] [文件]
options選項
參數 | 描述 |
---|---|
-c | 檢查文件是否已經按照順序排序 |
-n | 按照數值的大小排序 |
-o<輸出文件> | 將排序后的結果存入指定的文件 |
-t<分割字符> | 指定排序時所用的欄位(列)分割字符(如果分割符是制表符,房子啊字符串中時正常寫,否則在前面加上$) |
-r | 以相反順序 |
-u | 在輸出行中去除重復行(只考慮用來排序的行) |
-b | 忽略每一行前面的所有空白部分,從第一個可見字符開始比較 |
-k<start,end> | 指定需要排序的列,start和end都是數字,start分為三個部分(選項[bdfinr]、排序列、開始的位置),end默認到本域結束,-k可以出現多次,代表多列排序(第一個是主列)。數字列如1.2表示對第一個域的第二個字符開始到本域的最后一個字符為止的字符串進行排序,1.2,1.2表示只按第一個域的第二個字符進行排序 |
sort將文件/文本的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按照ASCII碼值進行比較,最后將他們按升序輸出
7. 查看長內容文件
cat和more
7.1 cat命令查看
7.1.1 語法
查看文件內容命令語法
cat [options] 文件名
7.1.2 參數解釋
options參數選項
參數 | 描述 |
---|---|
-b | 對非空輸出行編號 |
-n | 對輸出的所有行編號 |
注意:當文件內容超出窗口,會自動到下一屏顯示
7.2 more命令查看
7.2.1 語法
查看文件內容命令語法
more 文件名
7.2.2 百分比
當文件內容超出窗口時,會顯示一個提示信息:–More–(xx%)
當顯示百分比時,可以有如下操作
操作健 | 功能 |
---|---|
空格鍵 | 顯示文本下一屏內容 |
Enter | 一次滾動文本的一行 |
b | 回滾一屏 |
f | 前滾一屏 |
q | 退出 |
/word | 搜索word字符串(word可替換) |
7.3 grep
grep命令是Linux中強大的文本搜索工具
7.3.1 語法
語法如下
grep [options] 目標字符 文件名
7.3.2 options參數選擇
參數 | 描述 |
---|---|
-n | 顯示匹配行和行號 |
-v | 顯示不包含匹配文本的所有行(相當于求反) |
-i | 忽略大小寫 |
7.3.3 模式查找(正則查找)
可通過正則表達式進行查找
查找以a開頭以b結尾的內容
grep ^a b$ 文件名
參數 | 描述 |
---|---|
^a | 以a開頭 |
b$ | 以b結尾 |
十一、vi文本編輯器編輯文本
1. vi介紹
- Linux文本編輯器有ex、sed、vi和emacs等
- vi是最基本的文本編輯器
- vi是visual的縮寫
- vi是所有unix和Linux系統上必配的編輯器
- 現在Linux上配備的主流的文本編輯器是vi的增強版vim
- vim是vi improved的簡稱
- vi是一個全屏幕文本編輯器,具備文本編輯的所有功能,高效快捷
1.1 vi的特點
- 編輯功能強大:
具有高級編輯特性,可通過正則表達式、宏和命令腳本完成復雜編輯,實現智能化和自動化 - 適用于各種版本的Unix/Linux系統:
vi是Unix/Linux系統的標準文本編輯器 - 適用于各種類型的終端:
對終端設備有廣泛的適應性 - 使用靈活快捷:
初學者可能覺得命令復雜難度高,但對于熟練掌握后的人來說,就是一個編輯利器
1.2 vi的工作模式
vi有三種工作模式
- 命令模式command mode:
輸入任何字符都作為命令來解釋執行,屏幕上不顯示輸入內容,命令模式用于完成各種文本修改工作 - 輸入模式insert mode:
輸入的任何字符都將作為文件的內容被保存,并顯示在屏幕上,輸入模式用于完成文本錄入工作 - 末行模式last line mode:
也稱為ex轉義模式,在末行模式下,光標停留在屏幕的最末行,在此接收輸入的命令并執行,末行模式用于執行全局性操作,如文件操作、參數設置、查找與替換、拷貝與粘貼、執行shell命令等
2. vi的啟動與退出
輸入命令進入vi全屏幕編輯環境
vi 文件名
啟動過程描述:先建立一個編輯緩沖區,若指定了文件且該文件已存在,則將其內容讀到編輯緩沖區中,若指定的文件不存在,則創建此文件,然后將光標定位在第一行第一列的位置上
vi啟動后首先進入命令模式,此時可通過vi的編輯命令進行文本的輸入和修改
注意:編輯命令只是在修改調入緩沖區中的文本的副本,文本本身不會被修改,編輯完成后,需要用:wq命令將修改后的內容保存到文件中并退出vi才算完成修改,此次運行未對文件做任何修改,則可用:q退出
3. vi基本命令
vi命令相當多,但常用的只有一小部分
3.1 常用命令分類
- 屏幕翻滾
- 移動光標
- 插入與刪除
- 修改與替換
- 拷貝與粘貼
- 復原與重復
vi命令不需要配置鼠標和控制鍵,操作速度更快,效率更高
盡管vi只用字符命令就可以完成所有編輯操作,vi還是提供了鍵盤的其他控制操作的支持
按鍵 | 命令模式 | 輸入模式 | 末行模式 |
---|---|---|---|
Home | 移動光標到行的最前面 | 移動光標到行的最前面 | 移動光標到行的最前面 |
End | 移動光標到行的最后面 | 移動光標到行的最前面 | 移動光標到行的最前面 |
PageDown | 向下翻頁 | 移動光標到行的最前面 | 向下翻找歷史命令 |
PageUp | 向上翻頁 | 移動光標到行的最前面 | 向下翻找歷史命令 |
Delete | 刪除光標位置的字符 | 移動光標到行的最前面 | 移動光標到行的最前面 |
Insert | 進入輸入模式 | 替換-輸入 | 無效 |
Backspace | 光標前移一個字符 | 刪除光標前的字符 | 刪除光標前的字符 |
Space | 光標后移一個字符 | 空格 | 空格 |
Enter | 光標下移一個字符 | 換行 | 提交命令 |
上下左右箭頭 | 按箭頭方向移動光標 | 按鍵都方向移動光標 | 找歷史命令 |
注:
在命令模式下輸入的字符都被vi解釋為命令,不在屏幕上顯示,若輸入的是非法命令則警報
vi區分大小寫
以下分類介紹常用vi命令
3.2 屏幕翻滾命令
以下為屏幕翻滾命令的組合鍵列表
組合鍵 | 功能 |
---|---|
ctrl+u | 向上翻半屏 |
ctrl+d | 向下翻半屏 |
PageDown | 向下翻一屏 |
ctrl+f | 向下翻一屏,同PageDown |
PageUp | 向上翻一屏 |
ctrl+b | 向上翻一屏,同PageUp |
[n]z+Enter | 將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部 |
3.3 光標定位命令
按鍵與功能列表
按鍵 | 功能 |
---|---|
Home | 光標移動至行首 |
0 | 光標移動至行首,同Home |
End | 光標移動至行尾 |
$ | 光標移動到行尾,同End |
^ | 光標移動至行首第一個非空格字符 |
[n]G | 光標移動到第n行,未指定n時移動到末行 |
[n]I | 光標移動到第n行,未指定n時移動到首列 |
H、M、L | 光標移動到屏幕首、中、尾行行首 |
3.4 光標移動命令
vi不支持鼠標移動光標,但可以將通過按鍵進行操作
按鍵與功能列表
按鍵 | 功能 |
---|---|
按鍵左下上右 | 光標向左、下、上、右移動一個字符 |
h、j、k、l | 光標向左、下、上、右移動一個字符,同箭頭鍵 |
b、w | 光標移動到上一個詞、下一個詞首 |
e | 光標移動到詞尾 |
(、) | 光標移動到句首、句尾 |
{、} | 光標移動到段首、段尾 |
注:光標移動命令前帶數字n時表示重復移動n次,如4e表示移動到后面第4個詞的詞尾
3.5 文本輸入與刪除
輸入文本前先將光標定位到要輸入內容的位置,執行插入命令,進入輸入模式,處于輸入模式時屏幕底部會顯示–insert–提示
表示后續的輸入都作為文件的輸入內容,輸入完成后按esc命令返回命令模式
3.5.1 文本的輸入insert
插入命令都是單字符命令,可實現在當前光標位置的前、后、行首、行尾、上一行、下一行開始輸入
命令如下
按鍵 | 功能 |
---|---|
a或A | 在光標位置后、行尾后開始插入 |
i或I | 在光標位置前、行首前開始插入,i的作用于insert鍵相同 |
o或O | 在光標所在行之后、光標所在行之前的新行開始插入 |
3.5.2 文本的刪除delete
刪除文本最簡單的方法是將光標移動到要刪除的字符上,每按一下x鍵或者delete鍵就會刪除一個字符,刪除文本內容較多時,可用以下命令
按鍵 | 功能 |
---|---|
x或X | 刪除光標處、光標前的字符,x的作用與delete鍵相同 |
dd | 刪除光標所在的行 |
D | 刪除光標右面的文本 |
J | 刪除當前行尾的換行符,使當前行與下一行合并尾一行 |
d+ | 定位符 刪除從光標位置到指定位置范圍內的字符 |
關于d+參數的常用如下
參數 | 描述 |
---|---|
d0或d^ | 刪除光標左面的文本,0或^表示行首 |
d$ | 刪除光標右面的文本,$表示行尾 |
dG | 刪除光標所在行之后的所有行,G表示最后一行 |
db | 刪除光標處前的字符直到詞首,b代表詞首 |
de | 刪除光標處的字符直到詞尾,e表示詞尾 |
dw | 刪除光標處的字符直到下一個詞的詞首,w表示下一個詞的詞首 |
注:
命令前帶n時表示刪除方位擴大n倍,如3dd表示刪除3行,2de表示刪除從光標開始的兩個詞
4. 文本的修改與替換
4.1 文本的修改correct
文本修改指改寫一部分文本的內容,修改過程描述:先刪除指定范圍的文本,然后插入新文本,最后esc結束插入
命令如下
命令 | 功能 |
---|---|
cc | 修改光標所在的行 |
C | 修改光標處到行尾的文本 |
c+ | 定位符 修改光標到指定范圍內的文本,常用如下: |
c0或c^ | 修改光標左面的文本 |
c$ | 修改光標右面的文本 |
cG | 修改光標所在行之后的所有行 |
cb | 修改光標處前的字符直到詞首 |
cw | 修改光標處的字符直到詞尾 |
cl | 修改光標處的字符 |
注:
以上命令前帶數字表示修改范圍擴大n倍,如4cc表示修改從光標所在行開始的4行,3cw表示修改從光標開始的3個詞
4.2 文本的替換replace
替換replace指覆蓋,是相同長度字符替換,替代substitute指取代,可以相同也可以不同長度內容進行取代
替換命令
命令 | 功能 |
---|---|
r | 用輸入的字符替換光標處的字符 |
R | 用輸入的文本逐個替換從光標處開始的各個字符,直到按下esc鍵 |
替代命令
命令 | 功能 |
---|---|
s | 用輸入的文本替代光標處的字符,用esc鍵結束輸入,等同于cl |
S | 用輸入的文本替代光標所在的行,用esc鍵結束輸入,等同于cc |
5. 文本的拷貝與粘貼copy
拷貝指將光標處的文本幅值到一個緩沖區中,類似Windows的剪切板
粘貼指將緩沖區中的內容插入到光標處
命令與功能
命令 | 功能 |
---|---|
yy | 拷貝光標所在行至緩沖區 |
y+定位符 | 拷貝光標到指定范圍內的文本,常用如下: |
y0或y^ | 拷貝光標左面的文本 |
y$ | 拷貝光標右面的文本 |
yG | 拷貝光標所在行之后的所有行 |
yb | 拷貝光標處的字符直到詞首 |
yw | 拷貝光標處的字符直到詞尾 |
6. 撤銷與重做
撤銷undo
消除上一個命令所做的修改,恢復到命令執行前的樣子
重做redo
重復執行上一個命令
命令
命令 | 功能 |
---|---|
u | 撤銷上一個命令所做的修改 |
U | 撤銷最近針對一行所做的全部修改,在對一行連續做了多處修改后,可用此命令一次恢復全行 |
. | 重復前一個命令 |
7. vi常用末行命令
命令模式下輸入:或/或?字符都將進入末行模式,后續的輸入被解釋尾行命令,在屏幕末行顯示
屏幕輸入完成后按Enter鍵執行,末行命令執行結束后返回命令模式,或退出vi
命令分類:字符串搜索與替換命令、文件操作與退出命令、其他
7.1 字符串搜索
在文件中查找某各字符串可用字符串搜索命令,執行命令后光標會停留在第一個匹配字符串的首字符處
按n或N可移至下一個匹配字符串首,不存在匹配字符串則末行顯示"找不到模式"
命令
命令 | 功能 |
---|---|
/模式 | 從光標處向后 搜索與指定模式匹配的字符串,按n向后繼續找 |
?模式 | 從光標處向前搜索與指定模式匹配的字符串,按N向前繼續找 |
如查找test字符串,使用命令/test,光標從當前位置移動到后面第一個test的字符的t上,按n移動到下一個test上,當搜索到文件尾時,再按n則返回到文件頭繼續搜索
7.2 字符串替換s
字符串替換使用s命令,指定的行中搜索與指定模式相匹配的字符串,并用另一個字符串替換他
命令
:[n1,n2]s/p1/p2/[g][c]
參數描述
參數 | 描述 |
---|---|
n1,n2 | 表示目標行的行號范圍,可以使用%代表所有行,未指定范圍時,目標行就是光標所在的當前行 |
p1 | 用作搜索的字符串模式 |
p2 | 用作替換的字符串模式 |
s | 命令可以帶g和c選項 |
g | 表示替換目標行中所有匹配的字符串,沒有g則只替換目標行中第一個匹配的字符串 |
c | 表示替換前要求用戶確認 |
^ | 代表行首 |
$ | 代表行尾 |
模式中可以用^代表行首,$代表行尾
7.3 全局命令global
全局命令使用g
在全文中搜索含有與指定模式匹配的字符串的行,對匹配的行做標記
命令格式如下
命令 | 作用 |
---|---|
:g/p1 | 搜索所有包含p1字符串模式的行 |
:g!p1 | 搜索所有不包含p1字符串模式的行 |
如
命令 | 作用 |
---|---|
:g/test | 命令將找出所有含有test的行 |
:g!test | 命令將找出所有不包含test的行 |
命令與其他命令聯合使用
命令 | 作用 |
---|---|
:g/p1/ | 對所有包含p1的行執行指定的命令 |
:g!p1/ | 對所有不包含p1的行執行指定的命令 |
如
p命令顯示行,聯合使用如下
命令 | 作用 |
---|---|
:g/test/p | 顯示所有含有test的行 |
d命令刪除行,聯合使用如下
命令 | 作用 |
---|---|
:g!test/d | 刪除所有不包含test的行 |
7.4 全局替換
s命令面向行的字符串替換,可與g命令聯合使用
全局替換命令格式
g命令/s命令
表示先用g命令再文件中搜索含有某個模式的行,并做標記,然后用s命令對所有標記的行執行搜索和替換
常用命令如下
命令 | 作用 |
---|---|
:g/p1/s/p2/p3/g | 將文件中所有含有p1的行中的p2用p3替換 |
:g!p1/s/p2/p3/g | 將文件中所有不含有p1的行中的p2用p3替換 |
:g/p1/s//p2/g | 將文件中所有的p1用p2替換,這里的:g/p1/s//p2/g是:g/p1/s/p1/p2/g的簡寫,當s命令的搜索模式與g命令的搜索模式相同時,可省略s命令中的搜索模式,命令中//中間沒有空格 |
7.5 文件操作與退出命令
文件操作包括讀文件和寫文件,讀文件是將文件內容讀入到編輯緩沖區中,寫文件是將編輯緩沖區的內容保存到文件中
退出vi時可選擇是否保存文件
常用退出和文件操作命令如下
命令 | 作用 |
---|---|
:w [文件名] | 寫入指定文件,若未指定文件則寫入當前文件,即vi啟動時打開的文件 |
:q | 未修改源文件,不保存文件,直接退出 |
:wq或者:x | 保存文件并退出 |
:q! | 放棄修改,不保存文件,退出 |
:e! | 放棄修改,編輯區恢復為文件原樣 |
:e 文件名 | 打開指定的文件,調入編輯區 |
:r 文件名 | 讀入指定的文件,將文件內容插入到光標位置 |
:f | 在屏幕末行顯示文件相關信息 |
7.6 其他常用命令
7.6.1 行編輯命令
對指定的行進行編輯,指定行范圍時,可用.代表當前行,用$代表最后一行,用%代表所有行
常用行編輯命令如下
命令 | 作用 |
---|---|
:n | 跳至第n行 |
:n1,n2con3 | 將第n1至n2行之間的內容拷貝到第n3行下,如2,7co$表示將第2行到第7行的文字幅值到文件末尾處 |
:n1,n2mn | 將第n1到n2行之間的內容移至第n3行下,如:.m10表示將當前行移動到第10行下 |
:n1,n2d | 將第n1到n2行之間的內容刪除,如2,7d表示刪除第2行到第7行的內容 |
:p | 顯示當前行的內容, |
:nu | 顯示當前行的行號和內容 |
7.6.2 執行shell命令
使用vi編輯文件時,不退出vi情況下執行shell命令,執行期間vi暫時掛起,待命,執行結束后返回vi繼續運行
執行shell命令的格式如下
:!
命令執行指定的shell命令
7.6.3 設定vi選項
可通過設置vi的選項來規定vi的一些外觀和行為特性
設定vi選項的方法其中之一是使用set命令
常用如下
命令 | 作用 |
---|---|
:set all | 顯示所有選項 |
:set ai | 設定自動縮進 |
:set noai | 取消自動縮進 |
:set nu | 設定行號顯示 |
:set nonu | 取消行號顯示 |
:set hlsearch | 設定高亮顯示搜索到的字符串 |
:set nohlsearch | 取消高亮顯示搜索到的字符串 |
:set ic | 設定搜索命令中忽略大小寫 |
:set noic | 取消搜索命令中忽略大小寫 |
十二、查找文件
查找文件的方法大致有四種
- find
- locate
- grep根據查找文件內容查找
- 特定程序的指定用法
1. find
可通過find查找文件
1.1 基本用法
語法
find / -option params
1.2 舉例
舉例查找當前目錄下文件名為.text的文件
find ./ -name .text
舉例查找文件類型為管道的文件
find / -type p
注:創建管道文件的命令為mkfifo
舉例查看大于200M的文件
find / -size +200M
當前目錄下查找大于100M并且小于300M的文件
find ./ -size +100M -size -300M
注:生產環境慎用該命令,會產生性能問題
當前目錄查找2天以前修改的文件
find ./ -mtime +2
注: stat fileName查看文件時間戳,查看文件創建時間ctime,文件訪問時間atime
命令模式find path m/a/c time +n -n
+n
是指n天以前
-n
是指n天以內
查找文件名中有index的python文件即*index*.py
find / -name *index*.py
2. locate
locate比find查找文件更快、更簡單
查找test.txt文件
locate test.txt
locate快的原因
locate不會為搜索到的文件或目錄讀取文件系統
實際上是一個數據庫來查找用戶正在查找的內容,并根據該搜索內容生成其輸出,這樣查找很快,但問題是剛建的文件不會被搜索到,若想使剛創建的文件被搜索到可使用sudo updatedb更新數據庫,否則只能第二天才可以搜索到,默認后臺數據庫一天一更新
etc/下查找以m開頭的文件
locate /etc/m
locate -S可以查看數據庫的信息
locate -S
3. grep
根據文件內容查找
grep是一種強大的文本搜索工具
grep可以使用正則表達式搜索文本,并把匹配的行打印出來
grep全稱:Global Regular Expression Print,表示全局正則表達式版本,使用權限為所有用戶
3.1 grep語法
grep [-abcEFGhHiLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<范本樣式>][-f<范本樣式>][--help][范本樣式][文件或目錄...]
3.2 舉例
在當前目錄下查找文件中包含test字符的文件
grep test ./*
在/etc目錄下查找文件內容中含有libai的文件或目錄
grep libai /etc/*
查找文件中內容有test并且以libai開頭的文件
grep test libai*
注:grep只能在文件中搜索,如果是個目錄,則會提示一個******是一個目錄的信息
4. 通過特定程序定位文件
速度更快,更精準,但比較少用,依賴于特定的應用程序
查找php的配置文件
php -i | grep php.ini
Linux命令匯總
感謝閱讀,祝君暴富!