Linux基本操作

一、操作系统

1.作用
主要作用是管理好硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用,作为中间人,链接软件和硬件
 
2.不领域的主流操作系统
桌面操作系统:
  •     Windows
  •     Linux
  •     macOS
服务器操作系统:
  •     Windows Server
  •     Linux
 嵌入式操作系统:Linux
 移动设备操作系统:iOS、Andriod
3.虚拟机

二、操作系统发展史

1.Unix
2.Minix
3.Linux
 

三、Linux内核及发行版本

1.内核版本
内核(kernel)是系统的心脏,是运行程序和管理硬件设备的核心程序,它提供了一个早裸设备与应用程序间的抽象层
Linux内核版本又分为稳定版和了开发版,相中版本相互关联、相互循环
  • 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于旧的稳定版只是修正一些bug或加入一些新的驱动程序
  • 开发版:由于要试验各种解决方案,所以变化很快。
2.发行版本
Linux发行版(也被叫做GNU、Linux发行版)通常包含了包括桌面环境、办公套件、媒体播放提、数据库等应用软件。常见的发行版本:
  • Ubantu
  • Redhat
  • Fedora
  • openSUSE
  • Linux Mint
  • Debian
  • Manjaro
  • Mageia
  • CentOS
  • Arch

四、Linux应用领域

1.服务器
2.嵌入式等
 

五、Centos图形界面

六、文件和目录

1.Window和Linux文件系统的区别
在Windows下,打开计算机,我们看到的是一个个的驱动器盘符。每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形。
在Linux下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录);
 
2.系统目录结构
树状目录结构:

以下是对这些目录的解释:
/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:该目录存放一些服务启动之后需要提取的数据。
/sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:这个目录是用来存放一些临时文件的。
/usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
 
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。 
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
 

七、常用Linux命令的基本使用

命令行程序(终端terminal)
序号 命令 对应英文 作用 使用  
1 ls list 查看当前文件夹下的内容
ls -a 显示当前文件夹下的所有文件(包括隐藏文件)
ls -l显示文件详细列表(默认文件大小为字节)
ls -d仅列出目录本身,而不是列出目录内的文件数据(常用)
ls -lh把文件大小以人性化的方式显示
ls -la
ls -lah
ll等于 ls -l
 
2 cd [目录名] change directory 切换文件夹
cd /home 绝对路径,以根目录开头
cd admin 相对路径,不以根目录开头
cd ..返回上一级目录
cd -切换最后两个命令,相当于电视回看功能
cd ~回到自己的家目录 /home/admin
 
3 pwd Print work directory 查看当前所在文件夹    
4 touch [文件名] touch 如果文件不存在,新建文件 touch [文件名] [文件名] 创建多个文件  
5 mkdir [目录名] make directory 创建目录
mkdir [目录名]
mkdir [目录名] -m配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
mkdir [目录名] -p,如果上级目录不存在,先创建上级目录
mkdir [目录名] [目录名]创建多个文件夹
mkdir [目录名]/{[文件夹名],[文件夹名]}在指定文件夹下创建多个文件夹
 
6 rm [文件名] remove 删除指定的文件名
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
 
7 clear clear 清屏(相当于翻页,上滑时历史记录还在)    
8 gedit [文件名]   如果没有文件,创建文件,然后打开文件    
9 history   查看历史命令    
小技巧:
ctrl+shift+= 放大终端窗口的字体显示
ctrl+- 缩小终端窗口的字体显示
tab键可以补全命令
按↑/↓光标键可以在曾经使用过的命令之间来回切换
如果想要退出选择,并不想执行当前选中的命令,可以按ctrl+c
 
1、终端命令格式
(1)command [-options] [parameter]
    command:命令名,相应功能的英文单词或英文单词的缩写
    [-options]:选项,可用来对命令进行控制,也可以省略
    parameter:传给命令的参数,可以是零个、一个或者多个
(2)command —help
    查阅命令帮助信息, 如 ls —help
(3)man command
    查阅command命令的使用手册,man是manual的缩写,是Linux提供的一个手册,包含了绝大部分的命令、函数的详细使用说明。
    使用man时的操作键:
操作键 功能
空格键 显示手册页的下一屏
Enter键 一次滚动手册页的一行
b 回滚一屏
f 前滚一屏
/word 搜索word字符串
2.ls权限介绍
通配符 含义 使用
* 文件代表文件名中所有字符
ls te* 查看以te开头的文件
ls *html 查看以html结尾的文件
? 代表文件名中任意一个字符
ls ?.c 只找第一个字符任意,后缀为.c的文件 
ls a.? 只找只有单个字符,前两个字符为a.,最后一个字符任意的文件
[] “[“和”]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。
[abc]匹配a、b、c中任意一个
[a-f]匹配从a到f范围内的任意一个字符
ls [a-f]* 找到从a到f范围内的任意一个字符开头的文件
ls a-f 查找文件名为a-f的文件
\ 如果要使用通配符作为普通字符使用,可以在其前面加上转义字符。“?”和“*”处于方括号内时不用使用转义字符就失去通配符的作用 ls \*a 查找文件名为*a的文件
drwxrwxr-x d代表文件夹 -代表文件
rwx rwx r-x r可读 w可写 x执行
第一组指文件拥有者的权限,第二组代表文件拥有的组的权限,第三组代表其他用户权限
 
3.cp命令介绍(参考 Linux文件与目录管理|菜鸟教程
cp即拷贝文件和目录
语法:
cp [-adfilprsu] 来源档(source) 目标档(destination)
cp [options] source1 source2 source3 .... directory
选项与参数:
参数 含义
-a 相当於 -pdr 的意思,至於 pdr 请参考下列说明
-d 若来源档为连结档的属性(link file),则复制连结档属性而非文件本身
-f 为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次
-i 若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l 进行硬式连结(hard link)的连结档创建,而非复制文件本身
-p 连同文件的属性一起复制过去,而非使用默认属性(备份常用)
-r 递归持续复制,用於目录的复制行为
-s 复制成为符号连结档 (symbolic link),亦即『捷径』文件
-u 若 destination 比 source 旧才升级 destination !
例:用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
cp ~/.bashrc /tmp/bashrc
cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖
 
4、mv(移动文件与目录,或修改名称)
(1)语法:
    mv [-fiu] source destination
    mv [options] source1 source2 source3 .... directory
 
(2)选项与参数:
参数 含义
-f force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i 若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u 若目标文件已经存在,且 source 比较新,才会升级 (update)
(3)使用
    复制一文件,创建一目录,将文件移动到目录中
    cd /tmp
    cp ~/.bashrc bashrc
    mkdir mvtest
    mv bashrc mvtest
 
    将刚刚的目录名称更名为 mvtest2
    mv mvtest mvtest2
 
 
5.重定向
使用重定向将命令结果显示到文件中,默认命令返回结果显示在屏幕中
ls > 1.txt 覆盖文件中的内容
ls >> 1.txt 不覆盖文件中的内容
 
6.Linux 文件内容查看
Linux系统中使用以下命令来查看文件的内容:
参数 含义
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl  显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
 
你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。
(1)cat
    语法: cat [文件名]
    选项与参数:
 
参数 含义
-A 相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b 列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E 将结尾的断行字节 $ 显示出来;
-n 列印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T 将 [tab] 按键以 ^I 显示出来;
-v 列出一些看不出来的特殊字符
 
检看 /etc/issue 这个文件的内容:cat /etc/issue
查看多个文件内容: cat 1.txt 2.txt
将文件内容展示在3.txt中: cat 1.txt 2.txt > 3.txt 
(2)more
    语法:more [文件名]
    在 more 这个程序的运行过程中,你有几个按键可以按的:
参数 含义
空白键 (space) 代表向下翻一页
Enter  代表向下翻『一行』
 /字串 代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
 :f   立刻显示出档名以及目前显示的行数;
 q  代表立刻离开 more ,不再显示该文件内容。
 b 或 [ctrl]-b 代表往回翻页,不过这动作只对文件有用,对管线无用。
 
7.管道(|)
ls -l / | more 把左边的命令返回结果交给右边命令进行处理
 
8.建立链接文件
Linux链接文件类似于Windows下的快捷方式。
链接文件分为软链接和硬链接。
软链接:软链接不占用磁盘空间,源文件删除则软链接失效。
硬链接:硬链接只能链接普通文件,不能链接目录。
使用格式:
硬链接:ln 源文件 链接文件
软链接:ln -s 源文件 链接文件
如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。
注意:如果软链接文件和硬链接文件不再同一个目录,源文件要使用绝对路径,不能使用相对路径。
 
9.文本搜索:grep
grep指令用于查找文件里符合条件的字符串。
prep 指令用于查找内容包含指定范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或者所给予的文件名为-,则grep指令会从标准输入设备读取数据。
(1)语法
一般格式为:grep [-选项] '搜索内容字符串’ 文件名
在grep命令中输入字符串参数时,最好用单引号括起来。例如: grep 'a' 1.txt
(2)常用选项说明
选项 含义
-v 显示不包含匹配文本的所有行
-n 显示匹配行及行号
-i 忽略大小写
grep搜索字符串可以是正则表达式,grep常用正则表达式:
参数 含义
^a 行首。搜索以a开头的行:grep -n ‘^a’ 1.txt
ke$ 行尾。搜索以ke结尾的行:grep -n ‘ke$’ 1.txt
[Ss]igna[Ll]
匹配[]里一系列字符串中的一个;搜索匹配单词signal,signaL,Signal,SignaL的行,
grep -n ‘[Ss]igna[Ll]’ 1.txt
. (点)匹配一个非换行符的字符,匹配a和e之间有任意一个字符,可以匹配eee,eae, eve但是不匹配ee,eaae:grep -n ‘e.e’ 1.txt
 
(3)其他参数
参数 含义
-a或--text 不要忽略二进制的数据
-A<显示行数>或--after-context=<显示行数> 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b或--byte-offset 在显示符合样式的那一行之前,标示出该行第一个字符的编号
-B<显示行数>或--before-context=<显示行数> 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c或--count 计算符合样式的列数
-C<显示行数>或--context=<显示行数>或-<显示行数> 除了显示符合样式的那一行之外,并显示该行之前后的内容
-d<动作>或--directions=<动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作
-e<范本样式>或—repgexp=<范本样式> 指定字符串作为查找文件内容的样式
-E或--extented-regexp 将样式为延伸的正则表达式来使用
-f<规则文件>或--file=<规则文件> 指定规则文件。其内容含有一个或多个规则样式,让prep查找符合规则条件的文件内容,格式为每行一个规则样式
-F或--fixed-regexp 将样式视为固定字符串列表
-G或--basic-regexp 将样式视为普通的表示法来使用
-h或--no-filename 在显示符合样式的哪一行之前,不标示该行所属的文件名称
-H或--with-filename 在显示符合样式的那一行之前,标示该行所属的文件名称
-i或--ignore-case 忽略字符大小写的差别
-l或--file-with-matches 列出文件内容符合指定的样式的文件名称
-L或--files-without-match 列出文件内容不符合指定样式的文件名称
-n或--line-number 在显示符合样式的那一行之前,标示出该行的列数编号
-o或--only-matching 只显示匹配matching部分
-q或--quite或--silent 不显示任何信息
-r或--recursive 此参数的效果和指定“-d recurse”效果相同
-s或--no-messages 不显示错误信息
-v或--revent-match 不显示不包含匹配文本的所有行
-V或--version 显示版本信息
-w或--word-regexp 只显示全字符合的列
-x或--line-regexp 只显示全列符合的列
-y 此参数的效果和指定“-i”参数相同
 
(4)实例
①.在当前目录中,查找前缀有test字样的文件中包含test字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
grep test test*
输出结果如下所示:
testfile1.rtf:This is a Linux testfile!
testfile2.rtf:This is a linux testfile2!
testfile2.rtf:test
②以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
grep -r update /etc/acpi
③反向查找。通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
grep -v test *test*
 
10.查找文件:find
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令静载当前目录下查找目录与文件。并且将查到的子目录和文件全部进行显示。
(1)语法
find path -option [ -print ] [ -exec -ok command] {} \;
(2)参数说明:
find根据下列规则判断path和expression,在命令列上第一个-(),!之前的部分为path,之后是expression。如果path是空字符串则使用目前路径,如果expression是空字符串则使用-print为预设expression.
参数 含义
-mount
-xdev
只检查和指定目录在同一个文件系统下的文件,避免列出其他文件系统中的文件
-amin n 在过去n分钟内被读取过
-anewer file 比文件file更晚被读取过的文件
-cmin n 在过去n分钟内被修改过
-cnewer file 比文件更新的文件
-ctime n 在过去n天内被修改过的文件
-empty
空的文件-gid n or -group name : gid 是或是group名称是name
-ipath p
-path p
路径名称符合p的文件,ipath会忽略大小写
-name name
-iname name
文件名称符合name的文件。iname会忽略大小写
-size n 文件大小是n单位,b代表512位元组的区块,c表示字元数,k表示kilo bytes,w是二个位元组。
-type c 文件类型是c的文件。
d 目录
c 字型装置文件
b 区块装置文件
p 具名贮列
f  一般文件
l 符号连结
s socket
-pid n process id 是 n 的文件
 
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
(3)实例
①将目前目录及其子目录下所有名是c的文件列出来
find . -name "*.c”
②将目前目录及其子目录中所有一般文件列出
find . -type f
③将目前目录及其子目录下所有最近20天内更新过的文件列出
find . -ctime -20
④查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;
⑤查找目前目录中文件属性具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
find . -type f -perm 644 -exec ls -l {} \;
⑥查找系统中所有文件长度为0的普通文件,并列出它们的完整路径
find / -type f -size 0 -exec ls l {} \;
 
11.which命令
查看命令位置
which zip:查看zip命令在哪里
 
12.修改文件权限:chmod命令
chmod修改文件权限有两种使用格式:字母发与数字法。
字母法:chmod u/g/o/a +/-/= rwx 文件
 
【u/g/o/a】 含义
u user表示该文件的所有者
g group表示与该文件的所有者属于同一组(group)者,即用户组
o other表示其他以外的人
a all表示这三者皆是

【+-=】 含义
+ 增加权限:chmod u+r text.text(给文件拥有者添加r权限)
- 撤销权限
= 设定权限
 
rwx 含义
r read表示可读取,对于一个目录,如果没有权限,那么就意味着不能通过ls查看这个目录的内容
w write表示可写入,对于一个目录,如果没有w权限,那么久意味着不能在目录下创建新的文件
x excute表示可执行,对于一个目录,如果没有x权限,那么久以为着不能通过cd进入这个目录
- 没有任何权限
 
如果需要同时进行设定拥有者、同组者以及其他人的权限,参考如下:
rwx这些权限也可以用数字来代替
字母 说明
r 读取权限,数字代号为“4”
w 写入权限,数字代号为“2”
x 执行权限,数字代号为“1”
- 不具任何权限,数字代号为“0”
如执行 chmod u=rwx,g=rx,o=r filename 就等同于 chmod u=7,g=5,o=4 filename
chmod 751 file:
  • 文件所有者:读、写、执行权限
  • 同组用户:读、执行权限
  • 其他用户:执行权限
注:如果想递归所有目录加上相同权限,需要加是哪个参数”-R“。如:
chmod 777 text/ -R    递归text目录下所有文件加777权限
 
13.文件压缩与解压
(1)gzip
    打包    tar cvf a.tar *.txt (f必须放在最后,f后面的第一个参数代表要生成的文件名,后面所有的参数是要打包的文件)
    解包    tar xvf a.atr -C atar
    列出包里面的文件    tar tf a.atar
    tar命令很特殊,其参数前面可以使用“-”,也可以不使用
参数 含义
-c 生成档案文件,创建打包文件
-v 列出解档归档的详细过程,显示进度
-f 指定档案文件名称
-t 列出档案中包含的文件
-x 解开档案文件
    打包    tar cf a.tar *    生成a.tar文件
    压缩    gzip -r a.tar    生成a.tar.gz文件
    解压    gip -d a.tar.gz    生成a.tar文件
    解包    tar xf a.tar ~/atar    解包到指定文件夹
 
    打包并压缩    tar czf b.tar.gz *txt    以gzip的形式打包并压缩
    解压并解包    tar zxf b.tar.gz -C btar    以gzip的方式解压并解包
(2)bzip2
    tar jcf j.tar.bz2 *txt    
    tar xjf j.tar.bz2 -C tar
(3)zip
    zip -r zz *txt    zz代表要生成的压缩文件,不需要写扩展名,会自动生成zip扩展名
    unzip -d zz zz.zip    解压时会自动创建目录
 
压缩率:zip<gzip<bzip2
通用性:zip>gzip>bzip2
 
 
14.切换管理员账号
contos下切换到root的简单命令:su
从root命令切换到其他用户: su admin
 
15.设置用户密码:passwd
超级用户可以使用passwd命令为普通用户设置或修改用户密码。
用户可以使用passwd来修改自己的密码,而无需在命令后使用用户名。
 
16.退出登录账户:exit
如果是图形界面,退出当前终端;
如果是使用ssh远程登录,退出登录账户;
如果是切换后的登录用户,退出则返回上一个登录账号。
 
17.查看登录用户:who
who命令用于查看当前所有登录系统的用户信息。
常用选项:
选项 含义
-q或-count 只显示用户的登录账号和登录用户的数量
-u或-heading 显示列标题
admin pts/0
admin tty1
 
18.关机重启:reboot、shutdown
 
命令 含义
reboot 重新启动操作系统
shutdown -r now 重新启动操作系统,shutdown会给别的用户提示
shutdown -h now 立刻关机,其中now相当于时间为0的状态
shutdown -h 20:25 系统在今天的20:25会关机
shutdown h +10 系统再过十分钟后自动关机

八.vim编辑器

1.vim介绍
所有的Unix Like系统都会内建vi文本编辑器,其他的文本编辑器则不一定会存在。
vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便变成的功能特别丰富。
vim键盘图:
2.vi/vim的使用
基本上vi/vim共分为三种模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。
(1)命令模式:
用户刚刚启动vi/vim,便进入了命令模式。此状态下敲击键盘动作会被vim识别为命令,而非输入字符。
常用命令:
命令 含义
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符
: 切换到底线命令模式,以在最底一行输入命令。
(2)输入模式
在命令模式按下i进入输入模式。常用选项:
选项 含义
字符+shift 输入字符
enter 回车键,换行
back space 退格键,删除光标前一个字符
Del 删除键,删除光标后一个字符
方向键 在文本中移动光标
Home/End 光标移动到行首/行尾
Page Up/Page Down 上/下翻页
Insert 切换光标为输入/替换模式,光标将变成竖线/下划线
ESC 退出输入模式,切换到命令模式
(3)底线命令模式
在命令模式下按下:(英文)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令。基本命令有:
命令 含义
q 退出程序
w 保存文件
按ESC可随时退出底线命令模式。
 
(4)vi/vim使用实例
使用vi/vim进入命令模式
建立一个名为runoob的文件(vim runoob.txt):
按下ESC按钮回到命令模式
在命令模式中按下:wq储存后离开vi
 
(5)其他按键说明
命令模式可用的光标移动、复制粘贴、搜索替换等
移动光标的方法
h或←
光标向左移动一个字符
j或↓
光标向右移动一个字符
k或↑
光标向上移动一个字符
l或→
光标向右移动一个字符
如果想要进行多次移动的话,例如向下移动30行,可以使用”30j”或”30↓”的组合按键
Ctrl+f
屏幕向下移动一页,相当于Page Down
Ctrl+b
屏幕向上移动一页,相当于Page Up
Ctrl+d
屏幕向下移动半页
Ctrl+u
屏幕向上移动半页
+
光标移动到非空格符的下一行
-
光标移动到非空格符的上一行
n<space>
按下数字键再按空格键,光标会向右移动这一行的n个字符
0或Home 
数字0,移动到这一行的最前面字符处
$或End
移动到这一行的最后面字符处
H
光标移动到这个品目最上方那一行字符的第一个字符
M
光标移动到这个屏幕的中央那一行的第一个字符
L
光标移动到这个屏幕的最下方那一行的第一个字符
G
移动到这个档案的最后一行
nG 
n为数字。移动到这个档案的第n行。
gg
移动到这个档案的第一行,相当于1G
n<Enter>
n为数字。光标向下移动n行。
搜索替换
/word
向光标之下搜索一个名为word的字符串
?word
向光标之上搜索一个名为word的字符串
n
重复前一个搜寻动作
N
反向进行前一个搜寻动作。如执行/hello,按下N之后表示向上搜索hello
:n1,n2s/word1/word2/g
在第n1与n2之间寻找word1,并将word1取代为word2
:1,$s/word1/word2/g
从第一行到最后一行寻找word1,并将word1替换为word2
:%s/word1/word2/g
:1,$s/word1/word2/gc
从第一行到最后一行寻找word1,并将word1替换为word2,且在取代前显示提示字符给用户确认是否需要取代
:%s/word1/word2/gc
删除、复制、粘贴
x,X
在一行字当中,x向后删除一个字符,X向前删除一个字符
nx
连续向后删除n个字符
dd
删除游标所在的那一整行
d1G
删除光标所在到第一行的所有数据
dG
删除光标所在到最后一行的所有数据
d$
删除游标所在处,到该行的最后一个数据
d0
删除游标所在处,到该行的第一个字符
yy
复制游标所在处的那一行
nyy
复制光标所在的向下n行
y1G
复制光标所在处到第一行的所有数据
yG 
复制光标所在处到最后一行的所有数据
y$
复制光标所在那个字符到该行行尾的所有数据
y0
复制光标所在那个字符到该行行首的所有数据
p,P
p将已复制的数据粘贴在光标的下一行,P将已复制的数据粘贴在光标的上一行
将光标所在行与下一行结合成一行
c
重复删除多个数据,例如向下删除10行(10cj)
u
复原前一个动作
Ctrl+r
重做上一个动作
.
重做前一个动作
编辑模式可用的按键说明:
进入输入或取代的编辑模式
i,I
进入输入模式:i从光标所在处进入,I在目前所在行的第一个非空格符处开始输入
a,A 
进入输入模式:a从目前光标所在的下一个字符处楷书输入,A为从光标所在行的最后一个字符开始输入
o,O
进入输入模式:o在光标所在行的下一行输入新的一行,O在光标所在行的上一行输入新的一行
r,R
进入取代模式:r只会取代光标所在的那个字符一次;R会一直取代光标所在的文字,知道按下ESC为止
ESC
退出编辑模式,回到命令模式
命令模式切换底线命令模式的可用按钮说明:
    
指令行的储存、离开等指令
:w
将编辑的数据写入硬盘档案中
:w!
若文件属性为只读时
:q
离开vi
:q!
若曾修改过档案,又不想存储,使用!为强制离开不存储档案
:wq
存储后离开,若为:wq!则为强制储存后离开
ZZ
若档案没有更改,则存储后离开。若档案已经更改过,则储存后离开
:w [filname]
将编辑的数据储存成另一个档案
:r [filename]
在编辑的数据中,读入另一个档案的数据。亦即将filename这个档案内容加到游标所在行后面
:n1,n2 w [filename]
将n1到n2的内容储存成filename这个档案
:! command
暂时离开vi到指令模式下执行command的显示结果。如「:! ls /home」即可在vi当中查看/home底下ls输出的档案信息。
vim环境的变更
 
:set nu
显示行号,设定之后,会在每一行的行号
:set nonu
取消行号
 
3.添加注释
(1)块选择模式
批量注释:
  • Ctrl+v进入块选择模式
  • 移动光标选中你要注释的行
  • 按大写的I进入行首插入模式
  • 输入注释符号//或#
  • 按两下ESC,vim会自动将选中的所有行首加上注释
  • 保存退出
取消注释:
  • Ctrl+v进入块选择模式
  • 选中要删除的行首的注释符号
  • 按d删除注释
  • ESC保存退出
(2)替换命令
批量注释::起始行号,结束行号s/^/注释符/g
取消注释::起始行号,结束行号s/^注释符//g
 
(3)实例
在10-20行添加//注释::10,20s#^#//#g
在10-20行删除//注释::10,20s#^//##g
在10-20行添加#注释::10,20s/^/#/g
在10-20行删除#注释::10,20s/#//g
posted on 2020-05-15 19:13  憂憂er  阅读(255)  评论(0)    收藏  举报