本文记录 Linux 的学习过程,内容为 Linux 常用文件管理命令、Tmux、Vim。
1. 常用命令
Linux 中描述路径有两种方式(假设当前用户的目录为 AsanoSaki):
- 绝对路径:从根目录(即
/)开始描述,例如:/home/AsanoSaki/main.cpp。 - 相对路径:从当前的路径开始描述,例如:
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文件复制成YYY,XXX和YYY可以是一个路径,比如将目录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。如在当前目录下创建文件夹a:mkdir a。使用绝对路径在目录a下创建文件夹b:mkdir /home/AsanoSaki/a/b。直接创建a里有b,b里有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命令一样,XXX和YYY可以是一个路径,重命名也是用这个命令。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(三个数字按顺序分别表示Owner、Group、Other 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:查找文件xxx与yyy的不同点。
(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 | 实例: |
(3)常用操作
tmux [-u]:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个 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中复制/粘贴文本的通用方式:- 按下
Ctrl + a后松开手指,然后按[。 - 用鼠标选中文本,被选中的文本会被自动复制到
tmux的剪贴板。 - 按下
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个字符。0或Home:光标移动到本行开头。$或End:光标移动到本行末尾。G:光标移动到最后一行。:n或nG:n为数字,光标移动到第n行。gg:光标移动到第一行,相当于1G。n<Enter>:n为数字,光标向下移动n行。/word:向光标之下寻找第一个值为word的字符串。?word:向光标之上寻找第一个值为word的字符串。n:重复前一个查找操作。N:反向重复前一个查找操作。:n1,n2s/word1/word2/g:n1与n2为数字,在第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。