Linux学习笔记-命令、Tmux与Vim

  1. 1. 常用命令
    1. 1.1 常用文件管理命令
    2. 1.2 其它常用命令
  2. 2. Tmux与Vim
    1. 2.1 Tmux
    2. 2.2 Vim

本文记录 Linux 的学习过程,内容为 Linux 常用文件管理命令、Tmux、Vim。

1. 常用命令

Linux 中描述路径有两种方式(假设当前用户的目录为 AsanoSaki):

  1. 绝对路径:从根目录(即 /)开始描述,例如:/home/AsanoSaki/main.cpp
  2. 相对路径:从当前的路径开始描述,例如:AsanoSaki/main.cpp(当前在 home 中)。

绝对路径的开头一定是 /,相对路径开头一定不是 /

  • . 表示当前目录,.. 表示上一目录,假如当前在 AsanoSaki 目录下,则路径 ../AsanoSaki/./../AsanoSaki 表示同一路径。
  • ~/ 表示家目录,等价于 /home/AsanoSaki

1.1 常用文件管理命令

  • ctrl+c:取消命令,并且换行。如当前有一个程序正在运行且一直无法停止,则可以使用该操作将当前正在运行的程序中止。另一个作用是中断当前正在输入的这一行,直接跳到下一行重新输入。
  • ctrl+u:清空本行命令。
  • tab:可以补全命令和文件名,如果补全不了快速按两下 tab 键,可以显示备选选项。
  • ls:列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件。
  • pwd:显示当前路径。
  • cd XXX:进入 XXX 目录下,cd .. 表示返回上层目录,cd - 表示返回上一个待过的目录。cd 后面既可以用相对路径也可以用绝对路径,不加目录则默认返回家目录。
  • cp XXX YYY:将 XXX 文件复制成 YYYXXXYYY 可以是一个路径,比如将目录 a 中的文件 tmp.txt 复制到目录 b 中:cp a/tmp.txt b。如果想顺带将复制后的文件重命名则可以写成:cp a/tmp.txt b/tmp2.txt。如果想把目录 a 整个复制到目录 b 下则可以写:cp a b -r
  • mkdir XXX:创建目录 XXX。如在当前目录下创建文件夹 amkdir a。使用绝对路径在目录 a 下创建文件夹 bmkdir /home/AsanoSaki/a/b。直接创建 a 里有 bb 里有 c 的目录:mkdir a/b/c -p
  • rm XXX:删除普通文件。rm XXX -r:删除文件夹。删除多个文件:rm tmp1.txt tmp2.txt。删除当前目录下的所有 txt 文件:rm *.txt。删除 a 中的所有文件:rm a/*
  • mv XXX YYY:将 XXX 文件移动(剪切)到 YYY,和 cp 命令一样,XXXYYY 可以是一个路径,重命名也是用这个命令。
  • touch XXX:创建一个文件。
  • cat XXX:展示文件 XXX 中的内容。

1.2 其它常用命令

(1)系统状况

  • top:查看所有进程的信息(Linux 的任务管理器)。
    • 打开后,输入 M:按使用内存排序。
    • 打开后,输入 P:按使用 CPU 排序。
    • 打开后,输入 q:退出。
  • df -h:查看硬盘使用情况。
  • free -h:查看内存使用情况。
  • du -sh:查看当前目录占用的硬盘空间。
  • ps aux:查看所有进程。
  • kill -9 pid:杀死编号为 pid 的进程。
    • 传递某个具体的信号:kill -s SIGTERM pid
  • netstat -nt:查看所有网络连接。
  • w:列出当前登陆的用户。
  • ping www.baidu.com:检查是否连网。

(2)文件权限

  • chmod:修改文件权限
    • chmod +x xxx:给 xxx 添加可执行权限。
    • chmod -x xxx:去掉 xxx 的可执行权限。
    • chmod 777 xxx:将 xxx 的权限改成 777(三个数字按顺序分别表示 OwnerGroupOther Users,每个数字的二进制例如7的二进制为111,表示具有 rwx 权限,某一位为0表示没有该权限)。
    • chmod 777 xxx -R:递归修改整个文件夹的权限。

(3)文件检索

  • find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有 *.py 文件。
  • grep xxx:从 stdin 中读入若干行数据,如果某行中包含 xxx,则输出该行;否则忽略该行。
  • wc:统计行数、单词数、字节数。
    • 既可以从 stdin 中直接读入内容;也可以在命令行参数中传入文件名列表。
    • wc -l:统计行数。
    • wc -w:统计单词数。
    • wc -c:统计字节数。
  • tree:展示当前目录的文件结构。
    • tree /path/to/directory/:展示某个目录的文件结构。
    • tree -a:展示隐藏文件。
  • ag xxx:搜索当前目录下的所有文件,检索 xxx 字符串。
  • cut:分割一行内容。
    • stdin 中读入多行数据。
    • echo $PATH | cut -d ':' -f 3,5:输出 PATH: 分割后第3、5列数据。
    • echo $PATH | cut -d ':' -f 3-5:输出 PATH: 分割后第3-5列数据。
    • echo $PATH | cut -c 3,5:输出 PATH 的第3、5个字符。
    • echo $PATH | cut -c 3-5:输出 PATH 的第3-5个字符。
  • sort:将每行内容按字典序排序。
    • 可以从 stdin 中读取多行数据。
    • 可以从命令行参数中读取文件名列表。
  • xargs:将 stdin 中的数据用空格或回车分割成命令行参数。
    • find . -name '*.py' | xargs cat | wc -l:统计当前目录下所有 Python 文件的总行数

(4)查看文件内容

  • more:浏览文件内容。
    • 回车:下一行。
    • 空格:下一页。
    • b:上一页。
    • q:退出。
  • less:与 more 类似,功能更全。
    • 回车:下一行。
    • y:上一行。
    • Page Down:下一页。
    • Page Up:上一页。
    • q:退出。
  • head -3 xxx:展示 xxx 的前3行内容。
    • 同时支持从 stdin 读入内容。
  • tail -3 xxx:展示 xxx 末尾3行内容。
    • 同时支持从 stdin 读入内容。

(5)用户相关

  • history:展示当前用户的历史操作。内容存放在 ~/.bash_history 中。

(6)工具

  • md5sum:计算 md5 哈希值。
    • 可以从 stdin 读入内容。
    • 也可以在命令行参数中传入文件名列表。
  • time command:统计 command 命令的执行时间。
  • ipython3:交互式 Python3 环境。可以当做计算器,或者批量管理文件。
    • ! echo "Hello World"! 表示执行 shell 脚本。
  • watch -n 0.1 command:每0.1秒执行一次 command 命令。
  • tar:压缩文件。
    • tar -zcvf xxx.tar.gz /path/to/file/*:压缩。
    • tar -zxvf xxx.tar.gz:解压缩。
  • diff xxx yyy:查找文件 xxxyyy 的不同点。

(7)安装软件

  • sudo command:以 root 身份执行 command 命令。
  • apt-get install xxx:安装软件。
  • pip install xxx --user --upgrade:安装 Python 包。

2. Tmux与Vim

2.1 Tmux

(1)功能

  • 分屏。
  • 允许断开 Terminal 连接后,继续运行进程。

(2)结构

一个 Tmux 可以包含多个 session,一个 session 可以包含多个 window,一个 window 可以包含多个 pane

1
2
3
4
5
6
7
8
9
10
11
12
13
14
实例:
tmux:
session 0:
window 0:
pane 0
pane 1
pane 2
...
window 1
window 2
...
session 1
session 2
...

(3)常用操作

  • tmux [-u]:新建一个 session,其中包含一个 windowwindow 中包含一个 panepane 里打开了一个 shell 对话框,-u 参数可以在 Tmux 中显示中文内容。
  • 按下 Ctrl + a 后手指松开,然后按 %:将当前 pane 左右平分成两个 pane
  • 按下 Ctrl + a 后手指松开,然后按 "(注意是双引号):将当前 pane 上下平分成两个 pane
  • Ctrl + d:关闭当前 pane;如果当前 window 的所有 pane 均已关闭,则自动关闭 window;如果当前 session 的所有 window 均已关闭,则自动关闭 session
  • 鼠标点击可以选则 pane
  • 按下 Ctrl + a 后手指松开,然后按方向键:选择相邻的 pane
  • 鼠标拖动 pane 之间的分割线,可以调整分割线的位置。
  • 按住 Ctrl + a 的同时按方向键,可以调整 pane 之间分割线的位置。
  • 按下 Ctrl + a 后手指松开,然后按 z:将当前 pane 全屏/取消全屏。
  • 按下 Ctrl + a 后手指松开,然后按 d:挂起当前 session
  • tmux a:打开之前挂起的 session
  • 按下 Ctrl + a 后手指松开,然后按 s:选择其它 session
    • 方向键上:选择上一项;
    • 方向键下:选择下一项;
    • 方向键右:展开当前项;
    • 方向键左:闭合当前项。
  • 按下 Ctrl + a 后手指松开,然后按 c:在当前 session 中创建一个新的 window
  • 按下 Ctrl + a 后手指松开,然后按 w:选择其他 window,操作方法与选择 session 完全相同。
  • 按下 Ctrl + a 后手指松开,然后按 PageUp/PageDown:翻阅当前 pane 内的内容。注意第一次唤醒该操作时只能按 PageUp
  • 鼠标滚轮:翻阅当前 pane 内的内容。
  • tmux 中选中文本时,需要按住 shift 键。(仅支持 Windows 和 Linux,不支持 Mac,不过该操作并不是必须的,因此影响不大)
  • tmux 中复制/粘贴文本的通用方式:
    1. 按下 Ctrl + a 后松开手指,然后按 [
    2. 用鼠标选中文本,被选中的文本会被自动复制到 tmux 的剪贴板。
    3. 按下 Ctrl + a 后松开手指,然后按 ],会将剪贴板中的内容粘贴到光标处。

注意:Tmux 的配置文件为 ~/.tmux.conf,默认 Tmux 前缀快捷键是 Ctrl + b!本文是已经修改过了配置文件后的操作说明,不过基本上操作逻辑都是一样的。

2.2 Vim

(1)功能

  • 命令行模式下的文本编辑器。
  • 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
  • 使用方式:vim <filename>
    • 如果已有该文件,则打开它。
    • 如果没有该文件,则打开个一个新的文件,并命名为 filename

(2)模式

  • 一般命令模式
    • 默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
  • 编辑模式
    • 在一般命令模式里按下 i,会进入编辑模式。
    • 按下 ESC 会退出编辑模式,返回到一般命令模式。
  • 命令行模式
    • 在一般命令模式里按下 :/? 三个字符中的任意一个,会进入命令行模式。命令行在最下面。
    • 可以查找、替换、保存、退出、配置编辑器等。

(3)操作

  • i:进入编辑模式。
  • ESC:进入一般命令模式。
  • h 或左方向键:光标向左移动一个字符。
  • j 或下方向键:光标向下移动一个字符。
  • k 或上方向键:光标向上移动一个字符。
  • l 或右方向键:光标向右移动一个字符。
  • n<Space>n 表示数字,按下数字后再按空格,光标会向右移动 n 个字符。
  • 0Home:光标移动到本行开头。
  • $End:光标移动到本行末尾。
  • G:光标移动到最后一行。
  • :nnGn 为数字,光标移动到第 n 行。
  • gg:光标移动到第一行,相当于 1G
  • n<Enter>n 为数字,光标向下移动 n 行。
  • /word:向光标之下寻找第一个值为 word 的字符串。
  • ?word:向光标之上寻找第一个值为 word 的字符串。
  • n:重复前一个查找操作。
  • N:反向重复前一个查找操作。
  • :n1,n2s/word1/word2/gn1n2 为数字,在第 n1 行与 n2 行之间寻找 word1 这个字符串,并将该字符串替换为 word2
  • :1,$s/word1/word2/g:将全文的 word1 替换为 word2
  • :1,$s/word1/word2/gc:将全文的 word1 替换为 word2,且在替换前要求用户确认。
  • v:选中文本,连续按两次 ESC 取消选中。
  • d:删除选中的文本。
  • dd:删除当前行(其实是剪切)。
  • ggdG:删除全部内容。
  • y:复制选中的文本。
  • yy:复制当前行。
  • ggyG:复制全部内容。
  • p:将复制的数据在光标的下一行/下一个位置粘贴。
  • u:撤销。
  • Ctrl + r:取消撤销。
  • >:将选中的文本整体向右缩进一次。
  • <:将选中的文本整体向左缩进一次。
  • :w:保存。
  • :w!:强制保存。
  • :q:退出。
  • :q!:强制退出。
  • :wq:保存并退出。
  • :set paste:设置成粘贴模式,取消代码自动缩进。
  • :set nopaste:取消粘贴模式,开启代码自动缩进。
  • :set nu:显示行号。
  • :set nonu:隐藏行号。
  • gg=G:将全文代码格式化。
  • :noh:关闭查找关键词高亮。
  • Ctrl + q:当 Vim 卡死时,可以取消当前正在执行的命令。

异常处理:
每次用 Vim 编辑文件时,会自动创建一个 <filename>.swp 的临时文件。
如果打开某个文件时,该文件的 swp 文件已存在,则会报错。此时解决办法有两种:

  • 找到正在打开该文件的程序,并退出。
  • 直接删掉该 swp 文件即可。

Vim 的配置文件在 ~/.vimrc 中。

上一章:无。

下一章:Linux学习笔记-Shell