本文记录 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。