一、目录层次
1.常见目录
一级目录 | 功能(作用) |
---|---|
/bin/ | 存放系统命令,存放二进制文件,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 |
/boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
/dev/ | 设备文件保存位置 |
/etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
/home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming |
/lib/ | 系统调用的函数库保存位置(c语言 写的一些固定格式的代码,方便调用) |
/media/ | 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 |
/mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
/misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 |
/opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
/root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下,超级管理员(root) 的家目录 存放的地方 |
/sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 |
/srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
2. linux /usr目录
usr(注意不是 user),全称为 Unix Software Resource,此目录用于存储系统软件资源。FHS 建议所有开发者,应把软件产品的数据合理的放置在 /usr 目录下的各子目录中,而不是为他们的产品创建单独的目录。 小根( / )存放一些根目录不方便存放的文件
Linux 系统中,所有系统默认的软件都存储在 /usr 目录下,/usr 目录类似 Windows 系统中 C:\Windows\ + C:\Program files\ 两个目录的综合体。
子目录 | 功能(作用) |
---|---|
/usr/bin/ | 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行 |
/usr/sbin/ | 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。 |
/usr/lib/ | 应用程序调用的函数库保存位置 |
/usr/XllR6/ | 图形界面系统保存位置 |
/usr/local/ | 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置 |
/usr/share/ | 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 |
/usr/src/ | 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中 |
/usr/include | C/C++ 等编程语言头文件的放置目录 |
3.linux /var 目录
/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。通常,此目录下建议包含如表 4 所示的这些子目录。
/var子目录 | 功能(作用) |
---|---|
/var/lib/ | 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中 |
/var/log/ | 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。 |
/var/run/ | 一些服务和程序运行后,它们的 PID(进程 ID)保存位置 |
/var/spool/ | 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。 |
/var/www/ | RPM 包安装的 Apache 的网页主目录 |
/var/nis和/var/yp | NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录 |
/var/tmp | 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除 |
-
根(/)相当于一个入口,文件的总入口,也是唯一入口
-
bin (sbin) 二进制文件,可执行文件,也可能存在别处,默认使用较多所有用户软连接文件 ----------------命令
-
sbin 管理员可使用的二进制文件---------------------------------命令ls cd useradd
-
boot 系统内核、启动文件
-
dev 硬件文件(黄色)
-
etc 配置文件等同于windows 注册表,一般都是文本文件
-
run 运行的内存中文件 运行中的文件
-
tmp 临时文件 -t 特殊权限
-
usr应用程序和操作系统相关的文件 bin sbin
-
var/log日志文件,数据变化的
-
home 普通用户的家目录的上级目录zhangsan目录会在 home
-
root系统管理员的家目录上 /root
-
lib 动态库文件 类似于windows 的dll文件
-
proc 主要保存系统的内核、进程、外部设备状态和网络状态等
-
media 可移动设备
-
mnt 默认挂载点
-
opt 第三方应用程序安装所在目录程序
文件系统的目录结构(常识)
-
以 . 开头的文件均为隐藏文件
-
路径用/分开 / 不在第一位就是分隔符
-
文件名最长 255个字符
-
区分大小写 linux 注意事项
-
不要太华丽
二、查看文件内容
2.1七类常见的linux的文件
-
d 目录文件directory
-
b 块设备文件block 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。
-
c 字符设备character 这些文件通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用
-
l 符号链接文件link
-
p 管道文件pipe 主要用于进程间通信单向传输 一个发一个输管道文件
-
s 套接字文件socket 套接字文件一般隐藏在 /var/run/ 目录下,用于进程间的网络通信
-
-普通文件 普通文件,包括纯文本文件、二进制文件、各种压缩文件等
第一个字符 | 文件类型 |
---|---|
- | 普通文件,包括纯文本文件、二进制文件、各种压缩文件等。 |
d | 目录,类似 Windows 系统中的文件夹。 |
b | 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。 |
c | 字符设备文件,例如键盘、鼠标等。 |
s | 套接字文件,通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。 |
p | 管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误。 |
l | 链接文件,类似 Windows 系统中的快捷方式。 |
2.2 显示命令
2.2.1 cat
格式:
cat 选项 文件名
只能看普通的文本文件
file 查看是什么文件(普通文件 不能看文本以外的文件)
缺点:
如果内容过多,会显示不全
选项 | 效果 |
---|---|
-n | 显示行号包括空行 |
-b | 跳过空白行编号 空行不编号 |
-s | 将所有的连续的多个空行替换为一个空行(压缩成一个空行) |
-A | 显示隐藏字符 |
例子:
[root@localhost ky15]# cat /etc/centos-release
#查看你系统内核版本
CentOS Linux release 7.4.1708 (Core)
[root@localhost ky15]# cat /proc/version
Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017
[root@localhost data]# cat -b test.txt
#空行不编号
1 111
2 111
3 1111 1111
[root@localhost data]# cat -s test.txt
#将连续的空行压缩成一个空行
111
111
1111 1111
[root@test1 opt]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
#查看文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=0d6498ee-d986-4c39-ac51-2dd0d0310dd2
DEVICE=ens33
ONBOOT=yes
##############################################################################
#多个显示顺序看你命令文件的排列顺序
[root@test1 opt]# echo "1" > 1.txt
[root@test1 opt]# echo "2" > 2.txt
[root@test1 opt]# cat 1.txt 2.txt
1
2
[root@test1 opt]# cat 2.txt 1.txt
2
1
左右排列文件 #详细见目录2.4.5
paste 1.txt 2.txt > 3.txt
1 2
### tac 反方向查看
查看非文本文件内容
hexdump
-C:输出规范的十六进制和ASCII码
-n length:格式化输出文件的前length个字节
[root@localhost ~]#hexdump -C -n 512 /dev/sda
#查看前512字节
0000000 63eb 1090 d08e 00bc b8b0 0000 d88e c08e
0000010 befb 7c00 00bf b906 0200 a4f3 21ea 0006
0000020 be00 07be 0438 0b75 c683 8110 fefe 7507
#以下就不显示了
2.2.2 tac
逆向显示文本内容(倒序输出)
[root@centos8 ~]#seq 10 | tac
10
9
8
7
6
5
4
3
2
1
2.2.3 rev
将同一行的内容逆向显示
[root@centos8 ~]#cat /data/fa.txt
1 2 3 4 5
a b c
[root@centos8 ~]#tac /data/fa.txt
a b c
1 2 3 4 5
[root@centos8 ~]#rev /data/fa.txt
5 4 3 2 1
c b a
[root@centos8 ~]#echo {1..10} |rev
01 9 8 7 6 5 4 3 2 1
2.3 分页显示
2.3.1 more
more [选项] 文件名
基本操作(不是选项)
-
空格下一页 到文末后自动退出
-
b上一行
-
enter一行一行滚动
-
自动退出
-
q退出
[root@test1 var]# ls -lh /etc/*.conf | more //命令显示过多也可以使用管道 加more查看
-rw-r--r--. 1 root root 55 3月 1 2017 /etc/asound.conf
-rw-r--r--. 1 root root 15K 8月 4 2017 /etc/autofs.conf
-rw-------. 1 root root 232 8月 4 2017 /etc/autofs_ldap_auth.conf
-rw-r--r--. 1 root root 22K 8月 7 2017 /etc/brltty.conf
-rw-r--r--. 1 root root 676 8月 3 2017 /etc/cgconfig.conf
-rw-r--r--. 1 root root 265 6月 18 23:09 /etc/cgrules.conf
-rw-r--r--. 1 root root 131 8月 3 2017 /etc/cgsnapshot_blacklist.conf
--More--
不可以向上翻页
2.3.2 less
less [选项] 文件名
-
可以使用/ 查找 n向下 N向上查找
-
Page Up 向上翻页,Page Down 向下翻页
-
其余参考more
[root@test1 var]# less /etc/dhcp/dhcpd.conf 空格到底不会自动退出
#################################################################################
[root@test1 var]# ls -lh /etc/*.conf | less
#按esc后使用shift + :q 回车退出
2.4 显示文件前后内容
2.4.1 head
可以显示文件或标准输入的前面行
格式:head [选项] 具体数字 文件名 (不加具体的数字,默认开头十行)
选项:
-c # 指定获取前#字节
-n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
- # 同上
[root@centos7 ~]#head -n 3 /etc/passwd
#显示前三行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos8 ~]#head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos8 ~]#cat seq.log
1
2
3
4
5
6
7
8
9
10
[root@centos8 ~]#head -n 3 seq.log #显示前三行
1
2
3
[root@centos8 ~]#head -n -3 seq.log #显示开头到倒数第三行
1
2
3
4
5
6
7
[root@centos8 ~]#head -n +3 seq.log #显示前三行
1
2
3
2.4.2 tail
tail 和head 相反,查看文件或标准输入的倒数行
格式:head [选项] 具体数字 文件名
常用选项:
-f 跟踪显示文件fd新追加的内容,常用日志监控,
tail -n 具体数字 文件名 (不加具体的数字,默认结尾十行)
tail -f 具体数字 文件名 实时跟踪最后十行
例子:
abcd[root@localhost test]# echo abcdef|head -c2
ab[root@localhost test]#
[root@localhost test]# head -n -3 3.txt
#-3 不显示最后3行
1
2
3
4
5
[root@localhost ky15]# tail -n -3 3.txt
#-3 只显示最后三行
6
7
8
[root@localhost ky15]# head -n +3 3.txt
#就只显示前三行
1
2
3
[root@localhost ky15]# tail -n +3 3.txt #
#从第三行开始
3
4
5
6
7
[root@localhost data]#cat 1.txt
1
2
3
4
5
[root@localhost data]#tail -n 1 1.txt
5
#显示最后一行
##################################################################################
加入具体数字后显示开头20行
[root@test1 var]# head -20 /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
[root@localhost ky15]# ifconfig ens33 |head -2|tail -1
inet 192.168.91.100 netmask 255.255.255.0 broadcast 192.168.91.255
#使用head 和tail 完成显示具体某一行
[root@test1 var]# ping 192.168.91.1 >log.txt #把ping的结果输入到log.txt文件里。
#开启新终端后
[root@test1 var]# tail -f log.txt
#tail -f 等于tailf
#对log.txt进行实时查看(文件一直在发生变化,不用一直使用ls查看)
2.4.3 wc
wc [选项]... 目标文件..
统计列数,wc本身就是参数 word
-
-l:统计行数
-
-w:统计单词个数
-
-c:统计字节数
wc 统计的单词不是真正的单词
[root@localhost ~]# cat a.txt
dasdasdads
[root@localhost ~]# wc a.txt
1 1 11 a.txt
[root@localhost ~]# cat a.txt
das dasdads
[root@localhost ~]# wc a.txt
1 2 12 a.txt
#行 单词 字符数
########注意空行和换行符
tab 空格 算单词的分隔符
2.4.4 grep
正则表达式:匹配文件中的字符串
通配符:匹配文件名字
ls 后面跟的是通配符(文件名)
fing 后面跟的是通配符(文件名)
grep 后面跟的是正则表达式
grep 过滤文件中命中的字符
用法: grep [选项]... PATTERN [FILE]...
PATTERN:表达式(正则表达式)
grep [选项] 表达式 文件夹
选项:
-i 忽略大小写
-v 反选 ,不显示匹配内容显示其它内容
-o 只显示匹配的内容
-n 显示行号(数字)
-r 递归目录 ,但不找软连接(匹配文件夹用)
-f 比较两个文件中的相同行
-c 匹配的行数
正则表达式:
. 任意字符
^ 一行的开头
$ 一行的结尾
选项:
-color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止
grep -m 1 root /etc/passwd #多个匹配只取第一个
-v 显示不被pattern匹配到的行,即取反
grep -Ev '^[[:space:]]*#|^$' /etc/fstab
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
grep -c root /etc/passwd #统计匹配到的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
grep -A3 root /etc/passwd #匹配到的行后3行业显示出来
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
grep -e root -e bash /etc/passwd #包含root或者包含bash 的行
grep -E root|bash /etc/passwd
-w 匹配整个单词
grep -w root /etc/passwd
useradd rooter
-E 使用ERE,相当于egrep
-F 不支持正则表达式,相当于fgrep
-f file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接
grep root /etc/passwd
grep "USER" /etc/passwd
grep 'USER' /etc/passwd
grep whoami /etc/passwd
[root@test1 opt]# cat 123.txt |grep -v '^$' >test.txt //将非空行写入到test.txt文件
[root@test1 opt]# grep "^b" 123.txt //过滤已b开头
[root@test1 opt]#grep '/$' 123.txt //过滤已/结尾
[root@test1 opt]# grep -v "^$" 123.txt //过滤非空行3 备份与恢
grep '^root' passwd
以 root 开头
grep 'root$' passwd
以 root 结尾
grep '^$' passwd
空行
grep -v '^$' passwd
非空行
grep '^root$' passwd
只为root,没有其它内容
[root@localhost yum.repos.d]# ifconfig ens33 |grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"
192.168.91.100
255.255.255.0
192.168.91.255
[root@localhost yum.repos.d]# ifconfig ens33 |grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"|head -1
192.168.91.100
在某一文件夹中,快速找到所有含有root字符的文件?
grep -r ‘root’ 文件夹
2.4.5 paste
-d 指定分隔符
合并文件
#一个文件放密码一个文件放用户名
[root@localhost ~]#cat user.txt pass.txt
lisi
liwu
liliu
123
345
444
[root@localhost ~]#paste user.txt pass.txt
lisi 123
liwu 345
liliu 444
[root@localhost ~]#paste -d: user.txt pass.txt
###分隔符 用冒号隔开
lisi:123
liwu:345
liliu:444
2.4.6 split
作用:分割文件
split [-b ][-C ][-][-l ][要切割的文件][输出文件名前缀][-a ]
最常用的选项,都在这里了:
-b<字节>:指定按多少字节进行拆分,也可以指定 K、M、G、T 等单位。
-<行数>或-l<行数>:指定每多少行要拆分成一个文件。
输出文件名前缀:设置拆分后的文件的名称前缀,split 会自动在前缀后加上编号,默认从 aa 开始。
-a<后缀长度>:默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号。
例子:
[root@localhost data]#dd if=/dev/zero bs=1024 count=700000 of=k
记录了700000+0 的读入
记录了700000+0 的写出
716800000字节(717 MB)已复制,2.98155 秒,240 MB/秒
[root@localhost data]#split -b 400M k
[root@localhost data]#ls
k xaa xab
[root@localhost data]#split -b 400M k a
#指定分隔名
root@localhost data]#split -b 400M k a
[root@localhost data]#ll
总用量 1400000
-rw-r--r--. 1 root root 419430400 8月 12 15:50 aaa
-rw-r--r--. 1 root root 297369600 8月 12 15:50 aab
-rw-r--r--. 1 root root 716800000 8月 12 15:46 k
没有指定拆分后文件的命名方式的情况下,split 会默认采用 x 字符作为文件前缀,采用类似 aa、ab、ac 的字符串依次作为文件后缀。于是,就出现了我们上面看到的 xaa、xab 了。
[root@localhost data]#split -d -10 /etc/passwd my_passwd
#行数分隔
[root@localhost data]#ls
my_passwd00 my_passwd01 my_passwd02 my_passwd03 my_passwd04
面试题:
我有一个 10G 的文件,怎么分割成小的文件存储?
split -b 100M 文件名
2.4.7归档tar
tar tape archive 磁带归档。 把不同的文件归为几类里。
建立归档(格式)
tar -zcvf
tar fzcv 压缩包的名字(*.tar.gz) 需要压缩的文件
此处选项有先后要求
- -f 代表使用tar 归档 ,只要使用tar ,必带-f
- -c 代表建立归档文件 (Create).tar 格式
- -x 解开归档
- -j 代表使用 bzip2 压缩
- -z 代表使用 gzip 压缩
- -C 指定解压的目录
- -t 不解开压缩包 查看压缩包中的内容
- -v 显示压缩 解压缩过程
- -p 保留权限
- -P 路径
[root@localhost data]# tar -zcvf vm.tar.gz vm1 vm2 zz
vm1
vm2
zz/
[root@localhost data]# tar -jcvf vm.tar.gz vm1 vm2 zz
[root@localhost data]# tar -zxvf vm.tar.gzip -C /opt
vm1
vm2
zz/
[root@localhost zz]# tar -tf vm1.tar.gzip
vm1
3.vi编辑器
Linux 系统中“一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。
linux中常见的 文本 还有 nano gedit 知道
推荐使用 Vi 文本编辑器的原因有很多,比如说:
-
几乎所有的Linux 发行版都内嵌有 Vim 文本编辑器,而其他的编辑器则不一定存在;
-
Vim具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计 接口
vi 和 vim 的区别:
vim 是 vi 的升级版本
vim基本格式:
vim [OPTION]... ...
命令 选项 文件
vim 文件名不存在 是新建
vim 文件名存在 就是修改
如果系统最小化安装vim并没有提前安装,可以使用
yum install vim -y 安装vim编辑器
常用的选项:
+# 打开文件后,让光标处于第#行的行首,+默认行尾(#是数字)
! 打开上一次的文件
+/PATTERN 让光标处于第一个被PATTERN匹配到的行行首用不多
3.1 三种模式
1.命令模式 :默认模式,可以实现移动光标,行间跳转,复制,粘贴,替换,删除
2.输入模式 :编辑文本
3.末行模式 :辅助操作 保存、查找、替换
命令模式 切换到 输入模式
i , o
命令模式 切换到 末行模式
:
末行模式 切换到 命令模式
esc
3.1.1 命令模式
命令模式:此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
#### 退出VIM #######
ZZ 保存退出
ZQ 不保存退出
########## 光标跳转 ##############
h: 左
L: 右
j: 下
k: 上
########## 光标跳转 ##############
h: 左
L: 右
j: 下
k: 上
########## 行内跳转 ##############
行首: 0 ^
行尾:end $
一个单词一个单词跳:w
########## 撤销 ##############
u 撤销一次
U 撤销全部
ctrl + r 取消撤销
########## 复制 ##############
y 复制
yy 复制一行
10 yy 复制10行
########## 粘贴 ##############
p 粘贴到光标处下一行
P 粘贴到光标处上一行
########## 删除 ##############
x 剪切光标处的字符
d 删除(剪切)
dd 删除(剪切)一行
10 dd 删除(剪切)10行
dw 删除一个单词
操作键 | 功能 |
---|---|
ctrl+f或者Pagedown | 向下翻页 |
ctrl+b或者Pageup | 向上翻页 |
Home;^;0 | 跳到本行的行首 |
按 End 键或$ | 跳转到本行的行尾 |
1G 或 gg | 跳转到文件的第一行包括空行 |
G | 跳转文件的末尾 |
#G | #代表行号数字,直接跳转到#行 |
M | 跳转到当前显示页面的中间行 |
x或delete | 删除当前光标的字符 |
dd | 删除一整行 |
#dd | 删除当前光标开始到第#行(包括当前行) |
d^ | 删除当前光标之前到行首 往前不包括当前光标处的字符 86 往后删除包括当前光标处的字符 |
d$ | 删除当前光标到行尾 |
dw | 删除当前光标处的单词 |
R 或shift+r | 替换当前光标处文字,会进入替换模式 |
yy | 复制当前光标处整行 |
#yy | 复制当前光标处向下的#行 |
p | 粘贴到光标处下一行 |
P | 粘贴到光标处上一行 |
u | 只消除上一次可多次使用 |
U | U 取消所有操作 |
/字符 | 向下查找 |
?字符 | 向上查找 |
n | 向同一方向重复上次的查找指令 |
N | 向相反方向重复上次的查找指定末行模式 |
3.1.2 输入模式
输入模式: 使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。
切入到输入模式
快捷键 | 功能描述 |
---|---|
i | 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动 |
I | 行首插入命令 |
o | 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本 |
O | 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 |
a | 在当前光标所在位置之后插入随后输入的文本 |
A | 行尾插入命令 |
3.1.3 末行模式
末行模式:文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“ :”(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。按esc 退出末行模式。
######################基础命令###################
# #具体第#行,例如2表示第2行
#,# #从左侧#表示起始行,到右侧#表示结尾行
#,+# #从左侧#表示的起始行,加上右侧#表示的行数,范例:2,+3 表示2到5行
. #当前行
$ #最后一行
.,$-1 #当前行到倒数第二行
% #全文, 相当于1,$
/pattern/ #从当前行向下查找,直到匹配pattern的第一行,即:正则表达式
/pat1/,/pat2/ #从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/ #从指定行开始,一直找到第一个匹配pattern的行结束
/pat/,$ #向下找到第一个匹配patttern的行到整个文件的结尾的所有行
###################地址定界后跟一个编辑命令#############################
d #删除
y #复制
###########################另存为#############################
w file #将范围内的行另存至指定文件中
r file #在指定位置插入指定文件中的所有内容
.!命令 #将命令执行结果贴到当前光标处
###################查找并替换##########################
格式:
范围 s/要查找的内容/替换的内容/g
g 是修饰符
说明:
要查找的内容:可使用基本正则表达式模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查
找到的整个内容
修饰符:
i #忽略大小写
g #全局替换,默认情况下,每一行只替换第一次出现
c #全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,如:#,@
范例:
s@/etc@/var@g
s#/boot#/#i
################行号##################
显示:set number,简写 set nu
取消显示:set nonumber, 简写 set nonu
#########忽略字符的大小写###############
启用:set ignorecase,简写 set ic
不忽略:set noic
##############自动缩进############
启用:set autoindent,简写 set ai
禁用:set noai
############复制保留格式##############
启用:set paste
禁用:set nopaste
###########显示隐藏字符###############
显示Tab ^I和换行符 和$显示
启用:set list
禁用:set nolist
##############tab用指定空格的个数代替#############
启用:set tabstop=# 指定#个空格代替Tab
简写:set ts=4
###############设置光标所在行的标识线#############
启用:set cursorline,简写 set cul
禁用:set nocursorline
######################加密##########################
启用: set key=password
禁用: set key=
#######################set 帮助#####################
set all
快捷键 | 功能效果 |
---|---|
:q | 退出不保存 |
:q! | 强制退出不保存 |
:w | 保存 |
:w 新文件名 | 另存为新文件: |
:wq :x | 保存并退出 |
:e 其他文件名(如果已修改需要加e!) | 打开新文件进行编辑 |
:r 其他文件名 | 在当前文件中读入其他文件内容 |
!命令 | 执行命令 |
:r!命令 | 读入命令 |
: [替换范围] s /旧的内容/新的内容[/g] | |
:s /old/new | 替换当前行中的第一个old改为new |
:s /old/new/g | 替换当前行中的所有old改为new |
:#,# s /old/new/g | #到#行所有old改为new |
:%s /old/new/g | %代表全文 全文替换所有old改为new |
# d | 删除 第#行 |
#,# d | 删除#到#行 |
#,# y 3,6 y | 复制#到# 行 |
:set nu 或:set nonu | 加行号 不显示行号 |
:set cul (:set nocul ) | 光标所在行有下划线(取消) |
nohl | 取消高亮 |
:set ai | 对齐 回车后和上一行对齐 |
:set all 可以看所有的一些帮助 | 可以看所有的一些帮助 |
set key=password (大X) | 加密码 |
set key=空白 | 取消密码 |
set tabstop=4 (set ts=4) | tab 一次为四个空格 |
.!命令 (who,date ) | 将date命令插入当前行注意会覆盖当前行 |
3.2 配置文件制定vim的工作特性
Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。
/etc/.vimrc #全局
~/.vimrc #个人
Vim 配置文件分为系统配置文件和用户配置文件:
-
系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);
-
用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。
设置参数 | 功能描述 |
---|---|
set nu | 显示行号 |
set cul | 突出显示当前行。 |
set ai | 设置自动缩进,即每行的缩进同上一节相同。 |
set ts=4 | 设置 Tab 键宽度为 4 个空格。 |