欢迎各位兄弟 发布技术文章
这里的技术是共享的
https//space.bilibili.com/522319853/channel/seriesdetail?sid=666503
命令行可以做什么: 文件管理 系统管理 软件安装 网络操作

pwd 显示当前命令所处的位置
cp 复制文件/目录
Is 查看目录下的内容
rm 删除文件/目录
cd 进入一个指定的目录
du -sh 查看文件/目录的大小
mkdir 新建一个目录
man 查看命令的帮助信息
mv 重命名或移动文件/目录

修改终端字体大小,,修改完之后终端退出再打开

# ls -l

# ls -la # a 表示显示出来隐藏的文件 文件前面有点号表示隐藏的文件,,,隐藏的文件在图形界面下是看不到的

# mv image2/ ../ #将文件夹移动到上一级目录
# cp -R 视频文件夹 视频文件夹2 #复制文件夹要加一个 -R 参数 -R(表示 recursion 递归)
# rm -f 2.png # 强制删除一个文件 -f (force 强制,不需要确认的提示)
# rm -Rf 视频文件夹2 # #强制删除 文件夹要加一个 -R 参数 -R(表示 recursion 递归) 要加一个 -f (force 强制,不需要确认的提示)
# du -sh #这里表示这个当前文件夹的总的大小是 88M

# du -sh 文件名 #这里表示这个"文件名"的大小
# du -sh 文件夹名 #这里表示这个"文件夹名"的总大小
# du -sh * #表示当前目录所有

# man du #查看 du 命令的帮助文档
touch 创建文件
rm -Rf 删除所有文件
open 打开文件(使用默认程序)
cd ~ 快速进入用户主目录
vim 打开/编辑文本文件
find 查找文件
file 查看文件类型
终端里常用的快捷键
Control + C 中断命令的执行
Control + A 返回行首
Control + E 返回行尾

# open 1.txt #打开一个文件,会以默认的程序打开

# open test.docx #打开一个docx文件,会以默认的word程序打开

# vim 1.txt
# find ./ -name "*. png" #在当前目录下面查找 包含 .png 的文件

# find /etc/ -name "* . ini " bogon:clbjjs chenyuanlong$ find /etc/ -name "* . ini " #查找时,目录的后面要有斜杠,表示在 /etc/ 文件夹(目录)下,
/etc//php .ini
find: /etc/ /cups/certs: Permission denied
# find /etc -name "*. ini” #查找时,如果目录的后面没有斜杠,表示在 /etc 文件下,所以查不到
# find ./ -name "1-2. png" #不用能通配符星号 * ,直接指定文件名
.//文件夹2/1-2. png
bogon: clbjjs chenyuanlong$

# file LINUX-LOGO.png #查看文件类型 (文件信息)

# rm -Rf * #删除当前文件夹下面的所有
# cd ~ #进到用户的主目录

ping
netstat
ifconfig
lsof
networksetup
traceroute
ipconfig


# networksetup -listallhardwareports 查看网络接口简写信息

ifconfig查看指定网卡信息
ifconfig interface-name
例如:
# ifconfig en0

ipconfig
查看/配置
网络接口(网卡)信息
ipconfig getifaddr interface-name #获取ip地址
例如:
# ipconfig getifaddr en0 #获取ip地址

ipconfig getoption interface-name (option-name | option-code) ipconfig #获取网关router的ip地址
例如:
#ipconfig getoption en0 router #获取网关router的ip地址

ipconfig getoption interface-name (option-name | option-code) #ipconfig获取DSN的ip地址
例如:
#ipconfig getoption en0 domain_name_server #ipconfig获取DSN的ip地址
这里不全面 ,可以看看 /node-admin/19385
ifconfig/ipconfig配置IP信息
ifconfig interface name inet ip- addr netmask subnet-mask
ipconfig set interface-name (MANUAL | INFORM) ip-address subnet-mask

来自 https://www.bilibili.com/video/BV1aV411n7MW/?spm_id_from=333.999.0.0
ping
netstat
ifconfig
lsof
networksetup
traceroute
ipconfig

netstat 查看 网络连接、端口、协议等
# netstat

网络连接状态
LISTEN、SYN_SENT、SYN_RECEIVED、 ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、
CLOSE_WAIT、CLOSING、 LAST_ACK、TIME_WAIT、CLOSED
ESTABLISHED 连接已建立
LISTEN 监听状态,套接字正在监听连接,等待连接
TIME_WAIT 我方主动关闭连接或者我方网络异常导致连接中断
CLOSE_WAIT 对方主动关闭连接或者对方网络异常导致连接中断

netstat常用选项
显示所有连接信息,包括常用于服务器的一些端口监听连接
不加-a的话,默认不显示LISTEN连接信息的
-n 不显示别名信息,用数字代替,可以加快命令的执行速度
比如: mysq|的端口用3306直接显示,而不是用mysq|这样的名称显示,推荐使用
-p protocol显示指定网络协议的连接,全部协议在/etc/protocols中
比如: -ptcp或者-pudp也可以是-p TCP或者-P UDP
-v 显示更多的信息,可以显示对应连接的进程ID (PID) 等
当需要查看网络连接是属于哪个进程时可以使用

#man netstat


# netstat -a #显示所有,如果没有-a,那么 listen状态就不显示了
# netstat -n #以数字显示,不解析名称,速度快
# netstat -v #-v 就是 verbose,就是显示冗余,详细信息
# netstat -p tcp #只显示TCP 的信息

# netstat -anp tcp #所有,以数字显示,只显示tcp的信息

# vim /etc/protocols #查看所有协议


# netstat -anvp tcp #所有,以数字显示,只显示tcp的信息,显示更详细的信息(包括进程的信息)
# pid 指的是进程的id号 process id 号
# ps -p 792 #根据进程id显示出进程信息 这里 -p 表示 pidlist
-p pidlist Select by PID. This selects the processes whose process ID
numbers appear in pidlist. Identical to p and --pid.
-p pidlist按PID选择。 这将选择其进程ID,,,, 数字出现在pidlist中。 与p和--pid相同。
#ps: process state (process show);查看进程的相关信息的专用命令

活动监视器,,,也可以根据pid找出对应的程序

netstat常用选项
-r 显示网络路由表信息
查看网络数据包是如何一步一步路由出去的
-L 显示出监听队列的信息
查看监听队列的大小信息,需要与-a-起使用,-aL
-l (是 小L)显示出完整的IPv6的地址信息
注意该参数在windows和linux.上的使用区别,mac下不建议使用

#netstat -r #显示网络中的路由表信息

#netstat -aL #显示哪些端口处于监听状态

#netstat -anL #显示哪些端口处于监听状态, 加个 -n 表示以数字形式显示

netstat常用命令解读
netstat -a
netstat -r
netstat -an
netstat -aL
netstat -anv
netstat -anL
netstat -anvp tcp
netstat -al
netstat -anvp udp
netstat -anl

类unix的操作系统中,所有的一切都是当作文件,包括网络也当作文件
lsof # lsof: (list open files)是一个查看进程打开的文件的工具
查看系统打开文件信息
查看网络信息比netstat更加友好
lsof常用选项
-i 显示所有打开的网络连接 ( i internet 网络)
-i4 => ipv4连接,-i6 => ipv6连接,-iTCP => tcp连接,-iTCP:8080 => tcp 8080端口连接
-s 与 -i配合使用时,用于指定特定的协议和特定的网络状态
lsof -iTCP -sTCP:LISTEN ( s state 状态 )
-n不显示别名信息,用数字代替,可以加快命令的执行速度 (n number 数字)
比如: mysql的端口用3306直接显示,而不是用mysq|这样的名称显示
-P不让端口号与端口名称之间转换,加快命令的执行速度 (P port 端口)
-n -P一起使用,-nP可以大大加快命令的执行速度,推荐使用

# lsof #输出一大堆东西,非常杂乱


# lsof -i #输出所有关于 i ( internet )网络的信息
COMMMAND 表示是什么程序产生的网络连接
PID 表示进程的PID(process ID)
USER 表示是哪个用户

# lsof -i4 #显示ipv4的连接
# lsof -i6 #显示ipv6的连接
# lsof -iTCP #显示intername TCP 的连接
# lsof -iTCP:3306 #显示intername TCP 3306端口 的连接
#没有结果,因为3306是由其它用户启动的,不是由登录的这个用户启动的

# sudo lsof -iTCP:3306 #所以要用提权操作,
# lsof -iTCP -sTCP:LISTEN #用来显示TCP协议连接状态的,处于监听状态的网络连接, sTCP要与 iTCP配合组合结合起来使用
sTCP 表示 status TCP ,,,,,status 例如 LISTEN(监听)、ESTABLISHED(已建立连接)等
#将电脑当中处于监听状态的TCP连接列举出来

# lsof -n -iTCP -sTCP:LISTEN # -n 显示数字,不显示别名,速度更快
# lsof -n -P -iTCP -sTCP:LISTEN # -P 对于端口号 显示数字,不显示别名,速度更快
#看不明白 -n 与 -P的区别,,,只要知道,讲师推荐我们 -n 与 -P 一起使用,会加快命令的执行速度
lsof常用命令解读
lsof -i lsof -iTCP -sTCP:L ISTEN
lsof -iTCP lsof -iTCP -sTCP:LISTEN -nP
lsof -iTCP:8080 lsof -iTCP:3306 -sTCP:LISTEN -nP
lsof -iTCP:8080 -nP
配合sudo使用可以查看所有用户打开的网络连接,比如: sudo lsof -i
不加sudo默认只能查看当前用户打开的网络连接
# lsof -iTCP:3306 -sTCP:LISTEN -nP #-iTCP:3306表示以TCP的3306端口,-sTCP:LISTEN 表示监听状态,-nP,这两个表示以数字显示,加快执行速度

# sudo lsof -iTCP:3306 -sTCP:LISTEN -nP #加个sudo ,可以查看所有用户打开的网络连接 加了-nP,显示了数字3306

# sudo lsof -iTCP:3306 -sTCP:LISTEN #没有 -nP,显示了mysql名称,不显示数字了,,执行会慢一些

查看监听状态的端口
方法一
netstat -an | grep LISTEN netstat -anv | grep -i listen
方法二:
lsof -iTCP -sTCP:LISTEN -nP
sudo lsof -iTCP -sTCP:LISTEN -nP

查看指定端口占用情况
方法一:
netstat -an | grep 3306
netstat -anv | grep 3306
方法二:
lsof -i:3306 -nP
可以配合sudo查看所有用户打开的连接
lsof -iTCP:3306 -sTCP:L ISTEN -nP

traceroute
查看路由追踪信息
traceroute追踪路由信息
traceroute 域名 或者 traceroute IP地址
例如:
traceroute www.baidu.com
traceroute 192.168.8.105

# traceroute www.baidu.com #追踪到百度的路由信息,得到每一跳的路由信息

# 常用的两个表示所有进程
# ps -ef 和 # ps -ax 和 ps aux
ps -ef 详解 见 /node-admin/22348
ps kil killall pkil top

ps查看系统进程信息
ps: process state (process show);查看进程的相关信息的专用命令,,,瞬时状态
# ps

# ps -A # -A all,所有,,,,查看系统当中的所有用户的所有的进程信息
PID: 进程的id,,process id
TTY: 代表在哪个终端下面运行的
TIME: 代表进程的运行时间
CMD: 代表进程的命令


# ps -e #也是查看所有的进程信息 在 ps -e 命令中,e 是 "every" 的缩写。它代表 "所有进程"(every process)。使用这个选项时,ps 命令会显示系统上的所有进程,无论它们是否与当前终端相关联。因此,ps -e 命令用于列出所有正在运行的进程。


# ps -e | less #也是查看所有的进程信息,分屏查看


# ps -a # -a (小写的a),显示的是在终端里面正在运行的所有的进程的信息

# ps -ax #-ax 表示所有的进程
# -a (all): 这个选项的作用是显示当前终端下的所有进程,包括其他用户的进程。但是,它并不包括没有控制终端的进程。
# -x: 这个选项的作用是显示没有控制终端(non-terminal)的进程。这通常包括那些由其他用户启动的、在后台运行的,或者由 init 系统(如 systemd)管理的进程。 那些不是由终端启动或者不需要交互式控制台的进程,比如守护进程(daemons)。


# ps -A 等于 # ps -e 等于 # ps -ax

# ps -ax | less


# ps -ef | less # -e 显示正在运行的所有的进程信息,-f 会显示更多的列项
在 ps -ef 命令中,f 并不是某个英文单词的缩写,而是该命令的一个选项标识符。这个 f 选项代表“全格式”(full format)。
当使用这个选项时,ps 命令会以全格式显示进程信息,这通常包括更详细的字段,如UID(用户ID)、PPID(父进程ID)、
C(CPU利用率)和STIME(进程启动时的系统时间 system time)。全格式输出提供了更丰富的进程信息,
有助于用户更全面地了解系统的运行状态。
UID: user id ,用户id,即这个进程是由哪个用户产生的
PID: 进程的id,,process id
PPID: 父进程的id,,,,parent process id
TTY: 代表在哪个终端下面运行的
TIME: 代表进程的运行时间
CMD: 代表进程的命令


ps 配合管道语法使用
# ps -A | grep nginx #查看有关nginx服务的进程 与 ps -e | grep nginx 和 ps -au | grep nginx 效果是一样的
# 这里显示的是自己这条命令所产生的进程,,,,,也就是说真正的nginx服务器进程没有开启

# nginx #开启nginx服务进程
# ps -e | grep nginx

# ps -ef | grep nginx
第一列代表UID, 这里 501 是 UID

# # ps -ef | less


# id -nu 501 #根据uid 获取用户名

# ps -p 31399 #查看指定 pid 的进程

# ps -u root #查看指定用户root产生的进程,,事实上 # ps -u 0 也可以 ,0是root 的 uid


# ps -U 0 #查看指定用户root产生的进程,,,0是root 的 uid,, 事实上 # ps -U root 也可以

ps 指定输出列项
ps -o keyword #小写的o指定输出列的选项
# ps -A -o user #-A是所有 -o 这里输出仅输出用户


# ps -A -o user -o pid #-A是所有 -o 这里输出仅输出用户和pid


# ps -A -o user -o pid -o comm #-A是所有 -o 这里输出仅输出用户和pid和命令名称 comm是command的缩写


# ps -A -o user -o pid -o comm | less

# ps -L # 可以查看到 user,pid,comm等许多关键词

# man ps #


# ps -A -o user -o pid -o command | less #comm,仅指命令,command包含命令和参数


# ps -A -o user -o pid -o comm | grep -i chome #看看系统当中当前运行了多少chrome浏览器


# ps -A -o user -o pid -o comm | grep -i chome | less #看看系统当中当前运行了多少chrome浏览器


kill #结束掉一个进程,杀死一个进程
# ps -ef | grep nginx #查询有关ningx 进程

# kill -9 31399 #-9是一种信号代码

# ps -ef | grep nginx #查询有关ningx 进程 ,可以看到刚刚有一个nginx进程被杀死了,没有了

HUP 1 挂起
INT 2 中断
QUIT 3 退出
kill 9 代表发送结束的信号给进程,强制中断
TERM 5 从头到尾释放资源整个过程,然后结束进程

杀死其它用户的进程,可能需要 sudo 提权限来结束掉某个进程
killall 也是结束掉一个进程,但是后面跟的是进程的名字
# killall -9 nginx

# ps -ef | grep nginx #查询有关ningx 进程 ,看到nginx进程全部被杀死了,只有本命令所产生的进程

killall 支持批量操作,, 后面的信号码与kill 类似
pkill 也是结束掉一个进程,后面可以跟进程名称 或 部分的进程名称,,也支持批量操作,后面的信号码与 kill 类似


top 查看系统中的动态的进程信息

# top #查看系统中的动态的进程信息,与活动监视器是一样的,是不断变化的


# power 一次tab补齐,两次tab列出所有命令


powermetrics 工具中,-s 参数通常是 --summary ("总结"或者"摘要") 的缩写。这意味着使用 -s 选项时,powermetrics 会输出一个摘要报告,而不是详细的数据流。 这里 只会输出 smc sensor(传感器)的概要信息,,,,,,SMC就是系统管理控制的意思
# powermetrics -h # -h 是 help 帮助的意思
帮助文档里面可以看到 samplers采样器 有 battery(电源) ,disk(磁盘) 等许多







iStat Menus 6 是第三方工具 查看 cpu 温度,风扇转速等

Mac懂-点命令行
第8讲Mac终端下定时关机、重启、睡眠

shutdown
reboot
halt

shutdown [ -h | -s | -r] time [提示信息]
-h: halt,关机
-s: sleep,睡眠
-r: reboot,重启
time 就是执行动作(关机,睡眠,重启)的时间,有4种形式
now #立刻
+分钟数 #多少分钟后执行动作
hh:mm #今天的几时几分 #今天的几时几分执行动作
yymmddhhmm #指定年份、月份、日期、小时、分钟
[提示信息],就是执行动作(关机,睡眠,重启)时界面的提示信息,一般也没什么用,不推荐使用

# sudo shutdown -s +10 #需要提权,,,,,,10分钟之后睡眠

# ps -A | grep shutdown #可以看到10分钟之后睡眠的进程

# sudo kill -9 1747 #需要提权,,,,,,杀死这个进程,也就是取消这个10分钟之后睡眠的进程

# ps -A | grep shutdown #可以看到10分钟之后睡眠的进程没有了

# sudo killall -9 shutdown #kill 后面跟的是进程的名字, 这里名字是 shutdown,不是 pid,,,,,这里会将所有存在shutdown的命令的进程给杀死

# sudo shutdown -h now #立刻关机

# sudo shutdown -r now #立刻重启

# sudo shutdown -s now #立刻睡眠

# sudo shutdown -s 20:00 #今天晚上8点睡眠,,,这里应该是24小时制的时间格式

# sudo killall -9 shutdown #把这个定时任务给关了

# sudo shutdown -h 2104200900 #在2021年04月20日 09:00关机 2104200900 的格式是 两位年两位月两位日两位时两位分
\
# sudo shutdown -r now #立刻重启

# sudo reboot #也是立刻重启

# sudo shutdown -h now #立刻关机

# sudo halt #也是立刻关机


掌握vim的常见用法
理解vim的三种模式
1.命令模式:输入的内容当做命令看待
2.输入模式:输入的内容当文本内容看待
3.底线命令模式(末行模式):输入的内容当命令看待,在底部显示


i I # insert 插入的意思,,, 是输入模式 ,,, 小写i,在当前光标的前面进行输入,,,大写I,就是光标定位到当前行的行首进行输入
a A # append 追加的意思,,, 也是输入模式,,,小写a,在当前光标的后面进行输入,,,大写A,就是光标定位到当前行的行尾进行输入
o O # open 打开的意思,,, 同样也是输入模式,,,小写o,就是在当前行的下面新起一行, ,,, 大写O 就是在当前行的上面新起一行
r R # replace 替换的意思,,, 替换后是命令模式(按下r 或 R 时是替换模式),,,小写r,就是当前光标进行替换,,大写R,就是当前光标及后面进行一直替换,,

h 相当于左箭头,光标向左移动一个字符
j 相当于下箭头,光标向下移动一个字符
k 相当于上箭头,光标向上移动一个字符
l 相当于右箭头,光标向右移动一个字符
G # 移动到最后-行
gg # 移动到第一行
0 或者 home # 数字 0 ,移动到行首
$ (美元符) 或者 end # 移动到行尾

在vim中,gg 是 "go to the top of the file" 的缩写
nG
在 Vim 编辑器中,nG 命令用于跳转到文件的第 n 行。这里的 "n" 是一个数字,代表目标行号,而大写字母 "G" 代表 "Go" 或 "Goto" 的含义,即跳转到指定位置。
n<Enter> n为数字,然后输入回车,光标向下移动n行
Ctrl+f:这个组合键用于向前翻一页,即将屏幕内容向下滚动一页,显示出文本的下一页内容。这里的 "f" 字母可以理解为 "forward"(向前)的简写,表示向文档的更深层次或后续部分移动。
Ctrl+b:这个组合键用于向后翻一页,即将屏幕内容向上滚动一页,显示出文本的上一页内容。字母 "b" 在这里代表 "backward"(向后)的简写,表示向文档的更早部分或前一页移动。
Ctrl+d:这个组合键用于向下翻半页。这里的 "d" 字母可能让人联想到 "down"(向下),表示其功能是将屏幕滚动至下方,显示下一部分文本内容。
Ctrl+u:这个组合键用于向上翻半页。字母 "u" 在这里可能让人联想到 "up"(向上),表示其作用是将屏幕滚动至上方,显示上一部分文本内容。

在 Vim 编辑器中,命令 dd 也不是对某个英文单词的直接缩写。 dd是"delete line"的缩写。
"d":在 Vim 中,单个字母 "d" 通常用于触发删除操作。当它与其他字符结合形成双字符组合时,可以指定具体的删除范围或对象。
"d"(第二个 "d"):在 "dd" 命令中,第二个 "d" 与第一个 "d" 结合,共同指示 Vim 删除当前光标所在的整行。
ndd 就是删除当前行及下面的总共n行 ,,,,先是 gg,然后99999dd,能删除整个文档 (或者 gg dG 也能删除整个文档)
u 表示撤销的操作
x 往后删 (相当于delete)
X 往前删 (相当于backspace)
nx 连接往后删n个字符
nX 连接往前删n个字符
"y":在 Vim 中,单个字母 "y" 通常用于触发复制(yank)操作。当它与其他字符结合形成双字符组合时,可以指定复制的具体范围或对象。
"y"(第二个 "y"):在 "yy" 命令中,第二个 "y" 与第一个 "y" 结合,共同指示 Vim 复制当前光标所在的整行。
yy#复制当前行
nyy #n为数字,复制n行 #就是复制当前行及下面的总共n行
p, P # paste 粘贴,,粘贴复制的内容 #小写p在当前光标行的下面进行粘贴,,,大写P在当前光标行的上面进行粘贴,,,
v, V, Control + v#visual,可视化模式
visual:就是可视化的意思
v:进入可视化, 可以按住h j k l 进行一个一个单词的选中,然后按y进行复制
V:进入可视化,可以按住h j k l 进行以行为单位进行选中
contrl+v ,(ctrl+v):进入可视化,可以按住h j k l 进行以一块一块的(行列)为单位进行选中

/ 斜杠进行搜索,搜索关键词,注意是从当前光标往下搜索 如何高亮显示关键词
/foo\c 这里表示大小写不敏感的查找 c是case的意思
:set ic (set ignorecase) 也可以先设置一下,大小写敏感,然后再查找
:set hlsearch #高亮显示搜索的结果 hight light search ,它只生效一次

# vim ~/.vimrc #在这个文件里面设置一下,永久生效
set hlsearch

? 问号进行搜索,搜索关键词,注意是从当前光标往上搜索,用得不多
:set nu #nu就是number,显示行号 , ,它也只生效一次

# vim ~/.vimrc #在这个文件里面设置一下,永久生效
set hlsearch
set nu

:set nonu #no number 不显示行号

搜索替换关键词
:n1,n2s/word1/word2/g :1,$s/word1/word2/g :1,$s/word1/word2/gc
这里 s 表示switch,substitute,切换替换的意思 g全局的意思,在一行内全局替换 c 表示comfirm确认的意思,即替换时提示确认
:1,$s/macOS/OSX/g #$表示最后一行,,,,,,这个命令行表示从第一行到最后一行,把所有的macOS替换为OSX
:%s/macOS/OSX/g #这里 1,$可以用%来代替,%也表示从第一行到最后一行,即整个文件内的全局替换
:%s@macOS@OSX@g #这里 斜杠/ 也可以用其它符号如@来表示
:%s@macOS@OSX@gi #这里 i 表示查找时大小写不敏感的替换 如果是大写I就是查找时大小写敏感的替换
:s(substitute)命令用来查找和替换字符串。语法如下:
:{作用范围}s/{目标}/{替换}/{替换标志}
例如:%s/foo/bar/g会在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g)。
作用范围分为当前行、全文、选区等等。
当前行:
:s/foo/bar/g
全文:
:%s/foo/bar/g
选区,在Visual模式下选择区域后输入:,Vim即可自动补全为 :'<,'>。
:'<,'>s/foo/bar/g
2-11行:
:5,12s/foo/bar/g
当前行.与接下来两行+2:
:.,+2s/foo/bar/g
上文中命令结尾的g即是替换标志之一,表示全局global替换(即替换目标的所有出现)。 还有很多其他有用的替换标志:
空替换标志表示只替换从光标位置开始,目标的第一次出现:
:%s/foo/bar
i表示大小写不敏感查找,I表示大小写敏感:
:%s/foo/bar/i
# 等效于模式中的\c(不敏感)或\C(敏感)
:%s/foo\c/bar
c表示需要确认,例如全局查找"foo"替换为"bar"并且需要确认:
:%s/foo/bar/gc回车后Vim会将光标移动到每一次"foo"出现的位置,并提示
replace with bar (y/n/a/q/l/^E/^Y)?
按下y表示替换,n表示不替换,a表示替换所有,q表示退出查找模式, l表示替换当前位置并退出。^E与^Y是光标移动快捷键,参考: Vim中如何快速进行光标移动。
:1,$s/macOS/OSX/g

:1,$s/OSX/macOS/gc # c就是confirm,让你替换前有个确认

u, Control + r u是撤销,Control + r是重做

vim常用底线命令(底线命令模式)
保存文件:w (write) 强制保存:w!(感叹号!有强制的意思)
退出文件:q (quit) 强制退出,不保存修改:q! (感叹号!有强制的意思)
保存退出文件:wq 另存为其他文件:w filename
显示行号:set nu 取消显示行号:set nonu







https://brew.sh/zh-cn/ macOS (或Linux)缺失的软件包的管理器,可以用它安装各种软件

https://iterm2.com/features.html 一款终端工具iterm2 iterm 2 ,比macos自带的终端强大
