Linux终端命令

explainshell,将自己不懂的命令行语句输入进去查询,即可查到对应释义

系统指令

指令解释
whoami查询系统当前的用户名
uname -a查询主机名、系统内核/CPU等信息
uptime查询系统运行时间,用户数、负载
env查询系统的环境变量
iostat查询IO速率/CPU使用情况
df -h查询磁盘使用信息
du -sh查询指定目录大小
last查询用户登录记录

导航移动指令

绝对路径

大家都知道,在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,

例如只要看到这个路径:c:/website/img/photo.jpg

我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。

这样完整的描述文件位置的路径就是绝对路径

我们不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。(也可以认为以/开头的都为绝对路径)

相对路径

所谓相对路径,顾名思义就是自己相对与目标位置。

不论将这些文件放到哪里,只要他们的相对关系没有变,就不会出错。

另外我们使用../来表示上一级目录,../../表示上上级的目录,以此类推。(也可认为不是以/开头的都是相对路径)

特殊符号作 用
~代表当前登录用户的主目录
~用户名表示切换至指定用户的主目录
-代表上次所在目录
.代表当前目录
..代表上级目录
指令解释
cd <dir> 或者 cd ~ 或者 cd .. 或者 cd -或者 cd /移动到指定目录 / 移动到当前登录用户的主目录 / 移动到上一级目录 / 返回上一步操作的目录/ 移动到根目录
pwd“print working directory” 打印当前目录的绝对路径
clear清除终端打印信息
ls打印当前目录下的文件和目录,加上-a查看隐藏文件,/ 代表文件系统的根目录-S从大到小排序,-r反向排序,-l更详细信息
rm -rf删除文件/目录,-r是递归删除,-f是强行删除
cp <source> <dest>复制文件,.代表当前目录,-r是递归复制
mv <original> <new>移动文件,.代表当前目录,-r是递归复制,-a复制目录
wc“word count”,-l数行数,-w数字数
echo "some string"打印输入的字符串
ls | wc -l| 将前一命令的输出转为后一命令的输入 左边的作用是”数当前目录下的文件/目录数”
ls / > directory.txt> 将命令输出导出为文件
\输入长命令时换行
mkdir 目录名建立新目录(也可理解为创建文件夹)

文件相关

指令解释
ln -s创建软连接(快捷方式,源文件被删除,soft link就没用了)
ln创建硬连接(独立文件,源文件被删除,hard link仍然存在;源文件修改,hard link同步修改)
tar -xzvf files.tar.gz tar -xjvf files.tar.bz2tar -czvf解压文件gzip 解压文件bzip2压缩文件gzip
cat <file>查看文件内容,-n标记行数
more查看长文件内容
head -x查看文件前x行
tail -x查看文件后x行
grep文件中查找关键词,并显示;keyword部分可以是regex

编辑器

指令解释
vim打开vim编辑器
vim <file>用vim打开文件;如果不存在,就新建
:q退出
i进入输入模式 (insert mode)
<esc>返回默认模式,即命令模式 (command mode)
:w保存文件
:wq or :x保存并退出
:q!退出不保存

权限与配置

指令解释
su -获取超级用户权限 (prompt changes from $ to #)
sudo <command>以超级用户的权限执行命令(权限不够的时候使用)
env, printenv打印系统环境变量
export ENV_NAME=”new” echo $ENV_NAME创建新的环境变量 确认变量的更新
history查询终端命令的历史记录
ls -l查看文件的所有者,组和其他权限的信息
chmod xxx修改文件的访问权限;三个数字代表所有者,用户组,其他;每个数字都是3个bit的二进制;read(4), write(2), execute(1)
echo $PATH终端命令存在的目录存在这个环境变量下
which查看终端命令的执行路径

进程相关

指令解释
ps“Process Status” 打印当前终端的进程
ps aux (for OSX)-a 显示所有用户的进程,-u 显示进程的所有者/用户,-x 显示和当前终端无关的进程
ps aux | grep firefox查询和firefox相关的进程
kill <pid>根据PID杀死进程,-9 硬删除
kill -l查看所有的Linux信号名
top显示所有活跃的进程,以及它们的CPU、内存使用情况

网络相关

指令解释
ping <URL>查询网络服务的连接情况、传输速度
host查询网络服务的IP地址
dig查询DNS记录
traceroute追踪从主机到host的网络传输路径
ssh远程登录服务器
netstat查看网络端口,TCP/UDP状态
ifconfig网络接口属性
route查看路由表
nslookup查询DNS记录相关的IP地址

vim

是什么?

vim是Linux环境下一款功能强大、高度可定制的文本编辑工具,类似于Windows下面的source insight、sublime、notepad。

VI是visual interface的缩写,即可视化接口。

vim 即 vi IMproved,在 vi 的基础上做了很多改进,如:增加了多级撤销、多窗口操作、崩溃后也可以恢复、增加了稳定性、关键字自动补全、上下文自动补全等功能。

工作模式

vim一般有6种工作模式。

  • 普通模式:使用vim打开一个文件时默认模式,也叫命令模式,允许用户通过各种命令浏览代码、滚屏等操作。
  • 插入模式:也可以叫做编辑模式,在普通模式下敲击 i 、a 或 o 就进入插入模式,允许用户通过键盘输入、编辑。
  • 命令行模式:在普通模式下,先输入冒号:,接着输入命令,就可以通过配置命令对vim进行配置了,如改变颜色主题、显示行号等,这些配置命令也可以保存到/etc/vim/vimrc配置文件中,每次打开默认配置执行。
  • 可视化模式:在普通模式下敲击前盘上的 v 键,就进入可视化模式,然后移动光标就可以选中一块文本,常用来完成文本的复制、粘贴、删除等操作。
  • 替换模式:如果我们想修改某个字符,不需要先进入插入模式,删除,然后再输入新的字符,直接在普通模式下,敲击R键就可以直接替换。
  • EX模式:类似于命令行模式,可以一次运行多个命令

vim的各种工作模式可以通过不同的键进行切换,用户统一使用ESC键返回到普通模式。

命令

光标移动命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
单个字符移动:
h 向左移动
l 向右移动
j 向下移动
k 向上移动
xh 向左移动x个字符距离

单词移动:
w 将光标移动到下一个单词的开头
b 将光标移动到前一个单词的开头
e 将光标移动到下一个单词的词末
E 移动到单词的结尾(忽略标点符号)
ge 将光标移动到上一个单词的词末
2w 指定移动的次数

行移动:
$ 将光标移动到当前行的行尾
0 将光标移动到当前行的行首
^ 将光标移动到当前行的第一个非空字符(行首和当前行非空字符不是一个位置)
2| 移到当前行的第2列
fx 将光标移动到当前行的第一个字符x上
3fx 将光标移动到航前行的第3个字符x上
tx 将光标移动到目标字符x的前一个字符上
fx和tx可以通过;和,进行重复移动,一个是正向重复,一个是反向重复
% 用于符号间的移动,它会在一对()、[]、{}之间跳跃

文本块移动:
( 移到当前句子的开头
) 移到下一个句子的开头
{ 移到当前一段的开头
} 移到下一段的开头
[[ 移到当前这一节的开头
]] 移到下一节的开头

在屏幕中移动
xG 跳转到指定的第x行,G移动到文件按末尾,``(2次单引号)返回到跳转前的位置
gg 移动到文件开头
x% 移动到文件中间,就使用50%
H 移动到home
M 移动到屏幕中间
L 移动到一屏末尾
ctrl+G 查看当前的位置状态

滚屏与跳转

1
2
3
4
5
6
7
8
9
10
11
半屏滚动 ctrl+u/ctrl+d
全屏滚动 ctrl+f/ctrl+b

定位光标的位置
zz 将光标置于屏幕的中间
zt 将光标移动到屏幕的顶部
zb 将光标移动到屏幕的底部

设置跳转标记
mx,my,mz设置三个位置
`x,`y,`z跳转到设置

文本插入操作

1
2
3
4
5
6
7
8
9
i 在当前光标的前面插入字符
a 在当前光标的后面追加字符
o 在当前光标的下一行行首插入字符
I 在一行的开头添加文本
A 在一行的结尾处添加文本
O 在光标当前行的上一行插入文本
s 删除当前光标处的字符并进入到插入模式
S 删除光标所在处的行,并进入到插入模式
u 撤销修改

文本删除操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
字符删除
x 删除当前光标所在处的字符
X 删除当前光标左边的字符

单词删除
dw 删除一个单词(从光标处到空格)
daw 无论光标在什么位置,删除光标所在的整个单词(包括空白字符)
diw 删除整个单词文本,但是保留空格字符不删除
d2w 删除从当前光标开始处的2个单词
d$ 删除从光标到一行末尾的整个文本
d0 删除从光标到一行开头的所有单词
dl 删除当前光标处的字符=x
dh 删除当前光标左边的字符=X

行删除
dd 删除当前光标处的一整行=D
5dd 删除从光标开始处的5行代码
dgg 删除从光标到文本开头
dG 删除从光标到文本结尾

行合并
J 删除一个分行符,将当前行与下一行合并

文本复制、剪切与粘贴

1
2
3
4
5
6
7
8
9
10
11
12
y 复制,p 粘贴
yw 复制一个单词
y2w 复制2个单词
y$ 复制从当前光标到行结尾的所有单词
y0 复制从当前光标到行首的所有单词
yy 复制一整行
2yy 复制从当前光标所在行开始的2行

复制文本块
1.首先进入visual模式:v
2.移动光标选择文本
3.复制与粘贴的操作

文本的修改与替换

1
2
3
4
5
6
7
cw 删除从光标处到单词结尾的文本并进入到插入模式
cb 删除从光标处到单词开头的文本并进入到插入模式
cc 删除一整行并进入到插入模式
~ 修改光标下字符的大小写
r 替换当前光标下的字符
R 进入到替换模式
xp 交换光标和下一个字符

文本的查找与替换

1
2
3
4
5
6
7
8
9
10
11
12
13
/string   正向查找
?string 反向查找

设置高亮显示
:set hls
*按键将当前光标处的单词高亮显示,使用n浏览下一个查找高亮的结果
:s/old/new 将当前行的第一个字符串old替换为new
:s/old/new/g 将当前行的所有字符串old替换为new
:90s/old/new/g 将指定行的所有字符串old替换为new
:90,93s/old/new/g 将指定范围的行的所有字符串old替换为new
:%s/old/new/g 将文本中所有的字符串old替换为new
:%s/old/new/gc 依次替换每个字符串关键字
:%s/^struct/int/g 将所有以struct开头的字符串替换为int

撤销修改、重做与保存

1
2
3
4
5
6
7
u 撤销上一步的操作。
Ctrl+r 将原来的插销重做一遍
:U 恢复一整行原来的面貌(文件打开时的文本状态)
:q 若文件没有修改,直接退出
:q! 文件已经被修改,放弃修改退出
:wq 文件已经被修改,保存修改并退出
:e! 放弃修改,重新回到文件打开时的状态

编辑多个文件

文件和缓冲区的区别

文件是保存在磁盘上的,而打开的文件的文件是在内存中,在内存中有一个缓冲区,用来存放打开的文件。

vim每次打开文件时都会创建一个缓冲区,vim支持打开多个文件

1
2
3
4
5
6
7
8
9
:buffers   查看缓冲区列表==ls
:buffer N 根据缓冲区列表的编号跳转到指定缓冲区
:bnext/bprev 遍历缓冲区列表
:bfirst/blast 分别调到缓冲区列表的开头和结尾
:write 将缓冲区的修改保存到磁盘上
:edit! e! 放弃缓冲区的修改,恢复到文件打开时的状态
:edit file 编辑另一个文件
:wnext 保存当前缓冲区的修改并跳转到缓冲区列表中的下一个文件
:set autowrite

标签页与折叠栏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
标签页的新建 tabedit file/tab split
标签页的切换 tabn/tabp
按键:gt/gT
标签页的关闭
tabclose
关闭当前的标签页 tabonly
创建一个折叠
zf200G 将光标和200行之间的代码折叠起来
折叠的打开与关闭
za 打开和关闭折叠
zr/zm 一层一层地打开和关闭折叠
zR/zM 分别打开和关闭所有的折叠
折叠键的光标移动
zj 跳转到下一个折叠处
zk 跳转到上一个折叠处
删除折叠
zd 删除光标下的折叠
zD 删除光标下的折叠以及嵌套的折叠
zE 删除所有的折叠标签
创建的折叠当退出vim之后就失效了。

多窗口操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
分割窗口
split/vsplit filename
窗口间跳转
ctrl+w hjkl
ctrl+w w
移动窗口
ctrl+w HJKL
调整窗口尺寸
ctrl+w +/- 调整窗口的高度
ctrl+w </> 调整窗口的宽度
ctrl+w = 所有的窗口设置相同的尺寸
:resize n将当前窗口尺寸调整为N行
关闭窗口
close 关闭一个窗口
qall 退出所有窗口
qall! 放弃修改,退出所有窗口
wqall 保存并退出所有窗口
wall 保存所有窗口

附:vim键盘命令图

jSnRW6.jpg