Skip to content

通用快捷键

Ctrl + A:光标移至最左侧 Ctrl + K:剪切光标起始位置至行尾 (配合清空整行命令);
Ctrl + E: 光标移至最右侧 Ctrl + U:剪切光标起始位置至行首 (配合清空整行命令);
Ctrl + L:清屏 (clear命令)Ctrl + C:中止当前正在执行的命令;
Ctrl + W:以单词为单位向左剪切 Ctrl + Y:粘贴。

文件和目录

  1. pwd:显示当前目录路径 ;
  2. which:查看可执行文件的路径(注意是可执行文件)。 如:which nodewhich nginx
  3. ls
    • -l: 显示当前目录下的文件和目录详细(包含权限信息)列表;
    • -a:显示当前目录下所有(包含隐藏文件和目录)列表。
  4. du
    • -ah:列出文件夹下各个文件和目录的占用大小 ;
    • -sh:统计当前目录占用内存大小。
  5. cat:显示文件内容,适合小文件,两屏内信息;
    • -n :显示行号,一般配合 | grep 'xxx' 等使用起到快速查看 xxx 所在行数效果;
  6. less
    • d键: 前进半页 u键:后退半页;
    • 空格键:前进一页 b键:后退一页;
    • q键:停止读取 /键:搜索模式 ,搜索后按 n 键跳到下一个,按 N 键跳到上一个,同时也可以输入正则表达式匹配。
  7. grep: 文本检索
    • -i:忽略大小写 -r:递归查找 。
    • number:显示行号;
  8. 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(发送给其他人查看)。
  9. touch:创建一个文件(创建并编辑用vim);
  10. mkdir: 创建一个目录(递归创建mkdir -p one/two/three);
  11. cp: 拷贝文件和目录 mv:移动文件或目录
    • cp file file_copy: file是目标文件,file_copy是拷贝出来的文件;
    • cp file one/file_copy: 把file拷贝到one目录下,且重命名为file_copy
    • cp *.txt folder : 把当前目录下所有 txt 文件拷贝到 folder目录下;
    • -r :递归的拷贝,常用来拷贝一整个目录。
  12. 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"
  1. ln:
    • ln file fileln:创建 filelnfile 的硬链接,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删除。只有同时删除了 file 与fileln 后,它们共同指向的文件内容才会消失;
    • ln -s file fileln: 创建fileln软连接,类似快捷方式。 删除file会导致fileln无法访问;
    • 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间;
    • 无论是软链接还是硬链接,文件都保持同步变化。创建软链接时,如果软链接文件跟源文件不在同一个目录,那么源文件地址必须为绝对路径,否则创建出来的软链接无法使用;
    • 不能针对目录创建硬链接(原因:主要是linux为了防止类似引用循环作出的限制,具体可自行网上了解)。
  2. find: 文件查找 (可使用ag/rg 替代)
    • find -name "file.txt": 当前以及子目录下通过名称查找文件。

文件权限管理

drwxr-xr-x 表示文件或目录的权限, 权限的整体是按照用户划分,通过-分割。顺序为: 文件属性 - 所有者 - 群组用户 - 其他用户。

  1. 按照权限解读如下:
    • 类型 dd表示目录,就是说这是一个目录,普通文件是 - ,链接是 l
    • 写 rread 表示文件可读。
    • 读 wwrite表示文件可写,一般有写的权限,就有删除的权限。
    • 可执行 xexecute 表示文件可执行。
    • 无 - :表示没有相应权限。
  2. 按照用户划分解读如下:
    • d :是一个文件夹
    • rwxr :所有者具有读、写、可执行权限;
    • xr: 群组用户具有读、可执行权限,没有写权限;
    • x:其他用户具有可执行权限,没有读、写权限。
  3. 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

进阶

压缩解压

  1. tar: 压缩文件夹为.tartar -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 :直接二次压缩为gziptar -zcvf archive.tar.gz archive;
    • -zxvf:直接将gzip解开为文件,tar -zxvf htop-3.0.0.tar.gz
  2. gzip:压缩targzip gunzip : 解压gziptar
    • 压缩后后缀名为.tar.gz
  3. zip/unzip:“压缩/解压” zip 文件( zip 压缩文件一般来自 windows 操作系统)。

网络和进程

  1. ifconfig: 查看 ip 网络相关信息,如果命令不存在的话, 执行命令 yum install net-tools 安装。
    • eth0 对应有线连接(对应有线网卡),就是用网线来连接的上网。
    • lo表示本地回环( Local Loopback 的缩写,对应一个虚拟网卡)可以看到它的 ip 地址是 127.0.0.1 。每台电脑都应该有这个接口,因为它对应着“连向自己的链接”。这也是被称之为“本地回环”的原因。所有经由这个接口发送的东西都会回到你自己的电脑。
    • wlan0 表示无线局域网
  2. hostip 地址和主机名的互相转换
  3. ssh:连接远程服务器,ssh 用户@ip:port ,可通过配置文件(~/.ssh/config)配置ssh别名,或者配置bash命令(~/.bash_profile) 简化操作。
  4. ps:用于显示当前系统中的进程, ps命令显示的进程列表不会随时间而更新,是静态的,是运行 ps 命令那个时刻的状态或者说是一个进程快照,ps -ef 列出所有进程;
  5. top:获取进程的动态列表。 top -o cpu 按照CPU使用排序;
  6. kill:结束pid进程 ,kill pid1 pid2
  7. scp:通过网络,把文件从一台电脑拷贝到另一台电脑。(可使用rzsz替代)
    • scp root@192.168.1.5:/root/file.txt file.txt :表示把远程电脑上的 file.txt 文件拷贝到本机

Vim

  1. 模式:

    • 交互模式:默认模式,可剪切、粘贴、撤消等;
    • 插入模式:文本输入;
    • 命令模式:保存、退出、命令等;
    • 可视模式:高级输入,例如同时插入多行;
  2. 状态流转:

    txt
             => 输入`i`进入插入模式,按`esc`返回交互模式  
    交互模式  => 输入`:`进入命令模式,输入命令按回车自动返回交互模式  
             => 使用`Ctrl + V`进入块可视模式,按`esc`返回交互模式
  3. 交互模式:

    • 0/Home:光标跳转行首; $/End:光标跳转行尾; w:按单词移动;
    • dd:删除光标所在行; dw:删除光标后一个单词; 数字 + dd/dw :删除多行/单词;
    • d0:从光标所在位置删除至行首; d$: 从光标所在位置删除至行末;
    • yy/yw/y0/y$:复制;
    • p:粘贴dd或者yy的内容 ; r:替换; u:撤消;
    • 数字+gg 跳转指定行; G:跳转最后一行; gg:跳转至第一行;
    • /:向后查找; ?:向前查找; n: 跳转下一个; N:跳转上一个。
  4. 命令模式:

    • wq/x:保存并退出 ; q!:不保存且退出;
    • 替换光标所在行所有旧字符串为新字符串: s/旧字符串/新字符串/g
    • 全文替换: %s/旧字符串/新字符串/g
    • 替换第几行到第几行中所有字符串:2,4 s/one/two/g
  5. 可视模式:可通过方向键同时操作多行

    • d 键,表示删除选中; I 键,表示在选中之前插入;
    • u 键,表示选中变为小写; U 键,表示选中变为大写。
  6. ~/.vimrc

bash
set number " 显示行号
syntax on " 激活语法高亮
set showcmd " 实时看到输入的命令
set ignorecase " 搜索时不区分大小写
set mouse=a " 激活鼠标,用鼠标选中时相当于进入可视模式
// ... 更多配置参考:<https://www.ruanyifeng.com/blog/2018/09/vimrc.html>

PM2

  1. 启动:pm2 start app.js --watch -i 2 -n myapp
    • --watch:监听应用目录的变化,一旦发生变化,自动重启。(实际更多通过配置文件)
    • -i:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。
    • -n:应用的名称。查看应用信息的时候可以用到
  2. 停止:pm2 stop app_name|app_id
  3. 全部停止:pm2 stop all
  4. 查看应用列表:pm2 list
  5. 重启:pm2 restart app.js|app_name|app_id
  6. 重载:pm2 reload app.js|app_name|app_id
    • 区别:集群模式下,由于 pm2restart 命令会先杀掉所有进程,再重新拉起,会造成服务终止。但是 reload命令可以实现 重启,维护升级的时候不需要停机。
    • 当重载时间过长或者无法重载时,pm2 会自动切换成 restart
  7. 查看应用详细消息:pm2 show|info|describe app_name|app_id
  8. 查看应用运行状态:pm2 monit
  9. 查看日志:pm2 logs app_name|app_id
  10. 其他:在docker容器中使用 pm2 启动应用时,要使用 pm2-runtime (一个docker包)而不是 pm2 start, 因为pm2 是默认后台启动的, docker 感知不到,CMD 命令执行完成,docker 容器就结束了(导致容器服务停止)。 所以直接使用 node app.jspm2-runtime底层实际命令)启动应用后,应用才能一直在容器中保持运行。