通用快捷键
Ctrl + A
:光标移至最左侧 Ctrl + K
:剪切光标起始位置至行尾 (配合清空整行命令);Ctrl + E
: 光标移至最右侧 Ctrl + U
:剪切光标起始位置至行首 (配合清空整行命令);Ctrl + L
:清屏 (clear命令)Ctrl + C
:中止当前正在执行的命令;Ctrl + W
:以单词为单位向左剪切 Ctrl + Y
:粘贴。
文件和目录
pwd
:显示当前目录路径 ;which
:查看可执行文件的路径(注意是可执行文件)。 如:which node
、which nginx
;ls
:-l
: 显示当前目录下的文件和目录详细(包含权限信息)列表;-a
:显示当前目录下所有(包含隐藏文件和目录)列表。
du
:-ah
:列出文件夹下各个文件和目录的占用大小 ;-sh
:统计当前目录占用内存大小。
cat
:显示文件内容,适合小文件,两屏内信息;-n
:显示行号,一般配合| grep 'xxx'
等使用起到快速查看xxx
所在行数效果;
less
:d键
: 前进半页u键
:后退半页;空格键
:前进一页b键
:后退一页;q键
:停止读取/键
:搜索模式 ,搜索后按n
键跳到下一个,按N
键跳到上一个,同时也可以输入正则表达式匹配。
grep
: 文本检索-i
:忽略大小写-r
:递归查找 。number
:显示行号;
head
: 查看文件开头几行tail
:查看末尾几行。 (使用场景1 :查询日志)-n
: 行数,默认10;-f
:每隔1s更新文件内容;-s
:指定-f实时刷新时间间隔,单位s;- 日志查询:日志一般都是尾部为最新日志,可通过
tail -n 30 test.log
查看最新30行的信息; - 日志搜索:根据报错消息关键字搜索日志,可通过
cat -n test.log | grep 'xxx'
获取到关键字对应行号。假设行号为100,此时再通过cat -n test.log | tail -n +70 | head -n 60
查询到100行上下30行的附近消息(tail -n +70
表示查看70行之后的消息 。head -n 60
表示只看前60行消息); cat -n test.log | tail -n +70 | head -n 60 | > temp.log
:将上述搜索到的信息写入到临时文件temp.log
(发送给其他人查看)。
touch
:创建一个文件(创建并编辑用vim
);mkdir
: 创建一个目录(递归创建mkdir -p one/two/three
);cp
: 拷贝文件和目录mv
:移动文件或目录cp file file_copy
:file
是目标文件,file_copy
是拷贝出来的文件;cp file one/file_copy
: 把file
拷贝到one
目录下,且重命名为file_copy
;cp *.txt folder
: 把当前目录下所有txt
文件拷贝到folder
目录下;-r
:递归的拷贝,常用来拷贝一整个目录。
rm
: 删除文件或目录-f
文件强制删除;-r
递归删除文件夹,著名的删除操作rm -rf
;- 项目中使用
rimraf
库卸载node_modules
文件(npm i -g rimraf
)。
json
// scripts in package.json
"reset": "rimraf node_modules package-lock.json yarn.lock && npm i"
ln
:ln file fileln
:创建fileln
为file
的硬链接,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删除。只有同时删除了 file 与fileln 后,它们共同指向的文件内容才会消失;ln -s file fileln
: 创建fileln
软连接,类似快捷方式。 删除file
会导致fileln
无法访问;- 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用
ln
命令链接(link)它就可以,不必重复的占用磁盘空间; - 无论是软链接还是硬链接,文件都保持同步变化。创建软链接时,如果软链接文件跟源文件不在同一个目录,那么源文件地址必须为绝对路径,否则创建出来的软链接无法使用;
- 不能针对目录创建硬链接(原因:主要是linux为了防止类似引用循环作出的限制,具体可自行网上了解)。
find
: 文件查找 (可使用ag/rg
替代)find -name "file.txt"
: 当前以及子目录下通过名称查找文件。
文件权限管理
drwxr-xr-x
表示文件或目录的权限, 权限的整体是按照用户划分,通过-
分割。顺序为: 文件属性 - 所有者 - 群组用户 - 其他用户。
- 按照权限解读如下:
类型 d
:d
表示目录,就是说这是一个目录,普通文件是-
,链接是l
写 r
:read
表示文件可读。读 w
:write
表示文件可写,一般有写的权限,就有删除的权限。可执行 x
:execute
表示文件可执行。无 -
:表示没有相应权限。
- 按照用户划分解读如下:
d
:是一个文件夹rwxr
:所有者具有读、写、可执行权限;xr
: 群组用户具有读、可执行权限,没有写权限;x
:其他用户具有可执行权限,没有读、写权限。
chmod
:修改访问权限,-r
可以递归修改- 通过数字修改:
4读
--2写
--1可执行
。如7 = 4+2+1
,代表rwx
chmod 731 test.txt
: 代表drwxr-xr-x
- 通过字母修改
u
:user 的缩写,用户的意思,表示所有者。g
:group 的缩写,群组的意思,表示群组用户。o
:other 的缩写,其它的意思,表示其它用户。a
:all 的缩写,所有的意思,表示所有用户。+
:加号,表示添加权限。-
:减号,表示去除权限。=
:等于号,表示分配权限。chmod u+rx file
: 为文件file
的所有者添加rx
权限chmod u=rwx,g=r,o=- file
- 通过数字修改:
chown
: 修改目录所有者chown peigoz /works
:修改works目录的所有者为peigoz
用户chown peigoz:user /works
:修改works目录的所有者为user
用户组下的peigoz
用户-R
:递归修改
进阶
压缩解压
tar
: 压缩文件夹为.tar
。tar -cvf sort.tar sort
: 将sort
文件夹归档为sort.tar
-cvf
:表示create
(创建)+verbose
(细节)+file
(文件),创建归档文件并显示操作细节;-tf
:显示归档里的内容,并不解开归档;-rvf
:追加文件到归档,tar -rvf archive.tar file.txt
;-xvf
:解开归档,tar -xvf archive.tar
;-zcvf
:直接二次压缩为gzip
,tar -zcvf archive.tar.gz archive
;-zxvf
:直接将gzip
解开为文件,tar -zxvf htop-3.0.0.tar.gz
gzip
:压缩tar
为gzip
gunzip
: 解压gzip
为tar
- 压缩后后缀名为
.tar.gz
- 压缩后后缀名为
zip/unzip
:“压缩/解压”zip
文件(zip
压缩文件一般来自windows
操作系统)。
网络和进程
ifconfig
: 查看ip
网络相关信息,如果命令不存在的话, 执行命令yum install net-tools
安装。eth0
对应有线连接(对应有线网卡),就是用网线来连接的上网。lo
表示本地回环(Local Loopback
的缩写,对应一个虚拟网卡)可以看到它的ip
地址是127.0.0.1
。每台电脑都应该有这个接口,因为它对应着“连向自己的链接”。这也是被称之为“本地回环”的原因。所有经由这个接口发送的东西都会回到你自己的电脑。wlan0
表示无线局域网
host
:ip
地址和主机名的互相转换ssh
:连接远程服务器,ssh 用户@ip:port
,可通过配置文件(~/.ssh/config
)配置ssh
别名,或者配置bash
命令(~/.bash_profile
) 简化操作。ps
:用于显示当前系统中的进程,ps
命令显示的进程列表不会随时间而更新,是静态的,是运行ps
命令那个时刻的状态或者说是一个进程快照,ps -ef
列出所有进程;top
:获取进程的动态列表。top -o cpu
按照CPU
使用排序;kill
:结束pid
进程 ,kill pid1 pid2
;scp
:通过网络,把文件从一台电脑拷贝到另一台电脑。(可使用rz
和sz
替代)scp root@192.168.1.5:/root/file.txt file.txt
:表示把远程电脑上的file.txt
文件拷贝到本机
Vim
模式:
- 交互模式:默认模式,可剪切、粘贴、撤消等;
- 插入模式:文本输入;
- 命令模式:保存、退出、命令等;
- 可视模式:高级输入,例如同时插入多行;
状态流转:
txt=> 输入`i`进入插入模式,按`esc`返回交互模式 交互模式 => 输入`:`进入命令模式,输入命令按回车自动返回交互模式 => 使用`Ctrl + V`进入块可视模式,按`esc`返回交互模式
交互模式:
0/Home
:光标跳转行首;$/End
:光标跳转行尾;w
:按单词移动;dd
:删除光标所在行;dw
:删除光标后一个单词;数字 + dd/dw
:删除多行/单词;d0
:从光标所在位置删除至行首;d$
: 从光标所在位置删除至行末;yy/yw/y0/y$
:复制;p
:粘贴dd
或者yy
的内容 ;r
:替换;u
:撤消;数字+gg
跳转指定行;G
:跳转最后一行;gg
:跳转至第一行;/
:向后查找;?
:向前查找;n
: 跳转下一个;N
:跳转上一个。
命令模式:
wq/x
:保存并退出 ;q!
:不保存且退出;- 替换光标所在行所有旧字符串为新字符串:
s/旧字符串/新字符串/g
; - 全文替换:
%s/旧字符串/新字符串/g
; - 替换第几行到第几行中所有字符串:
2,4 s/one/two/g
。
可视模式:可通过方向键同时操作多行
d
键,表示删除选中;I
键,表示在选中之前插入;u
键,表示选中变为小写;U
键,表示选中变为大写。
~/.vimrc
bash
set number " 显示行号
syntax on " 激活语法高亮
set showcmd " 实时看到输入的命令
set ignorecase " 搜索时不区分大小写
set mouse=a " 激活鼠标,用鼠标选中时相当于进入可视模式
// ... 更多配置参考:<https://www.ruanyifeng.com/blog/2018/09/vimrc.html>
PM2
- 启动:
pm2 start app.js --watch -i 2 -n myapp
--watch
:监听应用目录的变化,一旦发生变化,自动重启。(实际更多通过配置文件)-i
:启用多少个实例,可用于负载均衡。如果-i 0
或者-i max
,则根据当前机器核数确定实例数目。-n
:应用的名称。查看应用信息的时候可以用到
- 停止:
pm2 stop app_name|app_id
- 全部停止:
pm2 stop all
- 查看应用列表:
pm2 list
- 重启:
pm2 restart app.js|app_name|app_id
- 重载:
pm2 reload app.js|app_name|app_id
- 区别:集群模式下,由于
pm2
的restart
命令会先杀掉所有进程,再重新拉起,会造成服务终止。但是reload
命令可以实现 重启,维护升级的时候不需要停机。 - 当重载时间过长或者无法重载时,
pm2
会自动切换成restart
- 区别:集群模式下,由于
- 查看应用详细消息:
pm2 show|info|describe app_name|app_id
- 查看应用运行状态:
pm2 monit
- 查看日志:
pm2 logs app_name|app_id
- 其他:在
docker
容器中使用pm2
启动应用时,要使用pm2-runtime
(一个docker
包)而不是pm2 start
, 因为pm2
是默认后台启动的,docker
感知不到,CMD
命令执行完成,docker
容器就结束了(导致容器服务停止)。 所以直接使用node app.js
(pm2-runtime
底层实际命令)启动应用后,应用才能一直在容器中保持运行。