--- title: Linux 上課筆記 vi tags: Note_Linux, Linux description: Linux . --- # Linux 上課筆記 vi ## vi編輯器 ### 指令 - vi的編輯有『命令模式』及『編輯模式』二種,編輯模式的作用文字做輸入、刪除的動作,而命令模式中可以做複製、貼上、存檔之類的動作。 - 進入編輯模式的指令只有幾個。大部份的指令都是命令模式下的動作,有的指令要加『:』,有的指令不需加『:』,大概的規則是,和儲存檔案、離開vi、設定vi的指令要加上『:』,其它的指令都不用。 ### 由命令模式進入編輯模式 |指令 | 說明及範例 | | -------- | -------- | | i | 插入文字 | | a | 會跳到游標後面一個字元的位置,才進入『-- 插入 --』狀態。 | | o | 會新增一行空行在目前游標所在位置的下一行。 | | R | 取代 | ### 回到命令模式、常用指令 |指令 | 說明及範例 | | -------- | -------- | | Esc | 由編輯模式跳回命令模式 | | u | 復原,可連續復原 | | :w | 儲存檔案 | | :q | 離開程式 | | :q! | 強制離開 | ### 移動位置 - 以下的動作都是在命令模式中執行,編輯模式中的動作很單純,就是輸入文字及字元的刪除等,其餘的動作都是在命令模式中才需要用到。 - 當我們使用遠端登入到系統時,鍵盤上原有的方向鍵、PageUp、PageDown不見得可以使用,所以我們還是要記得下表的組合按鍵,將來在瀏覽文件時就比較方便了。 |型態 | 說明及範例 | | -------- | -------- | | h, j, k, l | 方向鍵 | | ctrl f | 往下翻一個螢幕 | | ctrl b | 往上翻一個螢幕 | | G | 直接跳到檔案的最後一行 | ### 刪除 |型態 | 說明及範例 | | -------- | -------- | | dd | 刪除游標所在的那一行 | | :12, 36 d | 將第12行至36行刪除,這種刪除方式要在最前面加上『:』符號 | ### 搜尋 |型態 | 說明及範例 | | -------- | -------- | | /string | 往下搜尋string字串 | | ?string | 往上搜尋string字串 | | n | 依原本方向繼續搜尋下一個 | | N | 以相反方向繼續搜尋下一個 | + 如果我們是使用『/』指令搜尋字串,因為它是往下搜尋,所以我們按下『n』鍵時,它會就繼續往下搜尋。反過來說,若我們是使用『?』指令搜尋字串,因為它是往上搜尋,所以我們按下『n』鍵時,它會繼續往上搜尋。 ### 複製、剪下、貼上 |型態 | 說明及範例 | | -------- | -------- | | dd | 剪下整行(刪除)。8dd 剪下八行| | yy | 複製的功能。 yy 複製整行。5yy 複製五行| | p | 貼到游標的後面 | ## 設定vi環境 + 為了使我們操作vi更順手,可以做一些設定,設定的方式是使用『:set nu 選項』的方式來設定vi環境 |型態 | 說明及範例 | | -------- | -------- | | ai | autoindent;當我們在撰寫程式時,常常會使用tab鍵縮排,若我們啟動這個功能後,按下Enter換行時,會自動對齊上一行的縮排位置。| | nu | number;編輯文件時,會顯示每一行的行數。| | sm | showmatch;當輸入右括號時,程式會將游標先移到左括號處,再跳回來,讓我們可以知道這個右括號是相對於那一個左括號。| ## 變更vi預設的選項 + 我們使用『:set nu ai sm』設定vi環境,但每次離開vi後再回到vi時,就得再設定一次,我們可以將這些設定值存成vi的預設值,操作方式如下: + 回到個人的家目錄中,用vi編輯 .exrc 的檔案。 + 按『i』進入編輯模式,set開頭(但是沒有冒號)輸入我們要做設定的選項,例如,輸入『set nu sm ai』。 + 按『esc』鍵回到命令模式,輸入『:wq』存檔後離開,以後再啟動vi時,就會以這些設定值為主。 ## 其它 + 字串取代 ```shell= :1,$s/centos/ntcb1501/g ``` ### 上機操作 ```shell= [student@Linux root]$ sudo su - [root@Linux root]#cd /home [root@Linux root]#tail -n 5 /etc/passwd > user.txt [root@Linux root]#vim user.txt tcpdump:x:72:72::/:/sbin/nologin centos:x:500:500:centos:/home/centos:/bin/bash ntcbimd:x:501:501::/home/ntcbimd:/bin/bash ESC--> :1,$s/centos/ntcb1501/g ESC--> :1,$s/student/ntcb1501/g ESC--> :set nu ntcb1501:x:1500:1500:ntcb1501:/home/ntcb1501:/bin/bash [root@Linux root]#groupadd -g 1500 student2023 [root@Linux root]# cat user.txt ntcb1501:x:1501:1500:ntcb1501:/home/ntcb1501:/bin/bash ntcb1502:x:1502:1500:ntcb1502:/home/ntcb1502:/bin/bash ntcb1503:x:1503:1500:ntcb1503:/home/ntcb1503:/bin/bash ntcb1504:x:1504:1500:ntcb1504:/home/ntcb1504:/bin/bash ntcb1505:x:1505:1500:ntcb1505:/home/ntcb1505:/bin/bash [root@Linux root]#newusers < user.txt [root@Linux root]#ls -l /home [root@Linux root]#tail -n 7 /etc/passwd ( tail -n 7 /etc/group, tail -n 7 /etc/shadow) [root@Linux root]# vim userpw.txt ntcb1501:student ntcb1502:student ntcb1503:student ntcb1504:student ntcb1505:student [root@Linux root]# chpasswd < userpw.txt ( tail -n 7 /etc/shadow ) ``` ```shell= #!/bin/bash #!/bin/bash # 要修改密码的用户 USER="your_username" # 新密码 PASSWORD="student" # 主机列表 HOSTS=("ntcb1501" "ntcb1502" "ntcb1503" "ntcb1504" "ntcb1505") # 循环访问每台主机 for HOST in "${HOSTS[@]}"; do echo "Changing password for $USER@$HOST" # 使用 ssh 连接到远程主机并执行 passwd 命令 # 注意:这种方法可能会有安全风险 ssh $USER@$HOST "echo -e '$PASSWORD\n$PASSWORD' | passwd" done echo "Password change complete!" ``` ### 上機操作 ```shell= [root@Linux root]#df [root@Linux root]#df > myfile [root@Linux root]#cat myfile [root@Linux root]#echo ‘old data’ > myfile [root@Linux root]# cat myfile [root@Linux root]#echo ‘old data’ >> myfile [root@Linux root]#wc < myfile ``` [Linux] vi 與 vim 指令一覽表整理 https://code.yidas.com/linux-vi-vim-command/ 大家來學VIM(一個歷久彌新的編輯器) http://www.study-area.org/tips/vim/ ![](https://i.imgur.com/Ed7X1Fx.png)