Linux 入门
一、Linux简介
1.Linux介绍
Linux 是一种自由和开放源码的类 UNIX 操作系统。
Linux 英文解释为 Linux is not Unix。
Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
2.Linux发行版
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。
3.Linux应用领域
今天各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,
通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。
目前 Linux 不仅在家庭与企业中使用,并且在政府中也很受欢迎。
4.Linux vs windows
Linux | Windows | |
---|---|---|
界面 | 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 |
驱动程序 | 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 |
使用 | 图形界面使用简单,容易入门。文字界面,需要学习才能掌握 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 |
学习 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 |
软件 | 大部分软件都可以自由获取,同样功能的软件选择较少。 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 |
5.Linux系统目录结构
如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCrNqi0d-1648987594658)(C:\Users\78523\AppData\Roaming\Typora\typora-user-images\image-20220403184556368.png)]
树状目录结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GUCIXUho-1648987594658)(C:\Users\78523\AppData\Roaming\Typora\typora-user-images\image-20220403185517968.png)]
-
/:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
-
/bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
-
/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
-
/boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。
-
/dev: dev 是 Device(设备) 的缩写, 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
-
/etc:etc 是 Etcetera(等等) 的缩写,系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
-
/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,edu 表示用户 edu 的家目录。
-
/lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
-
/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。
-
/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
-
/opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
-
/proc: proc 是 Processes(进程) 的缩写,此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
-
/root:系统管理员root的家目录,也称作超级权限者的用户主目录。
-
/sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写。
-
/usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。
-
/tmp: tmp 是 temporary(临时) 的缩写,一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
-
/srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
-
/sys:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
-
/usr: usr 是 unix shared resources(共享资源) 的缩写,应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
-
/var:: var 是 variable(变量) 的缩写,放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。
-
/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基本命令
pwd:
位当前所在位置
lhz@lhz-deepin:~$
用户lhz登录lhz-deepin这台主机上
~代表当前位置处于当前用户主目录或者称之为当前用户家目录
/home/lhz
sudo
以超级管理员的身份临时执行某条命令
sudo ls #以管理员权限执行ls命令,需要提示输入当前用户的密码
ls
查看或者显示
ls -l 以列表方式显示当前目录下的目录和文件的相关信息
ls -a 显示所有目录和文件包含隐藏的 在linux中不论是目录还是文件前缀加点代表隐藏
ls -al 多个参数可以联合使用
ls-l命令
chmod 777 filename 更改文件权限
ls-l可以查看文件/夹的详细信息
-rw-r--r--@ 1 peter staff 295 Jul 8 18:10 SortPro.java
drwxr-xr-x 4 peter staff 128 May 20 13:34 go
常见快捷键
shutdown #关闭计算机命令
sudo shutdown now #立刻关闭计算机
reboot #重新启动计算机
Tab #命令/目录补全功能
Ctrl+C #中止当前命令的执行
Ctrl+D #表示文件结束,类似Java中的EOF。如:cat > file
history #查看历史命令
clear #清空屏幕内容
uname -a #显示系统内核信息,-a是参数。Linux中绝大多数参数用-开头
date #显示时间
cal #显示日历
cal 05 2018 #显示2018年5月日历, #是注释
cal 2018 #显示2018全年日历
cal #显示当月日历
echo #输出命令
文件(类型)和文件夹
每行的第一个字母表示类型:
-表示这是一个普通文件
d表示这是一个文件夹(目录)
后面紧跟的9个字符分为三组,每组3个字符。这些字符可能是:
r可读,我们为其分配数字编号4
w可写,我们为其分配数字编号2
x可执行,我们为其分配数字编号1
-无权限,我们为其分配数字编号0
其中:
第一组表示当前用户对这个文件/夹的权限
第二组表示当前组对这个文件/夹的权限
第三组表示其它用户对这个文件/夹的权限
例子
-rw-r--r--
第一个字母表示这是一个文件
第一组的rw-表示当前用户对这个文件可读可写,他的编号之和是6
第二组的r--表示同组用户对这个文件只能读,他的编号之和是4
第三组的r--表示其它用户对这个文件只能读,他的编号之和是4
文件/夹的所属用户和所属组
用户和组
sudo命令只能被授权用户才能使用。新建立的用户是不能使用的。
新建用户
sudo adduser tom #新建立用户tom,注意新建立用户的同时也会
建立一个同名的组
为新用户设置密码
sudo passwd tom #为tom用户修改密码
新建组
sudo groupadd staff #建立一个叫做staff的组
建立用户的同时为其指定一个组
sudo useradd -g staff tom #建立一个用户tom,同时将其加入组staff。需要组staff先存在
-g后跟的是组名
将用户加入一个组
sudo usermod -G staff tom #将用户tom加入staff组
删除用户
sudo userdel tom #删除用户tom
如果使用adduser命令建立了tom,其自动建立的组也会被自动删除
删除组
sudo groupdel staff #删除组staff
该命令不能删除使用adduser建立用户时自动建立的同名组
查看所有用户和组
sudo cat /etc/passwd
sudo cat /etc/group
权限
chgrp
sudo chgrp staff file #将文件file的所属组改为staff组所有
chown
sudo chown tom:staff file #将文件file的所属组改为staff,所有者改为tom
sudo chown tom file #将文件file的所有者改为tom用户
sudo chown tom: file #将文件file的所有者改为tom用户
sudo chown :staff file #将文件file的所属组改为staff
chomd
chmod 744 file #将文件file的权限改为744,即rwxr--r--
权限的另一种设置
u=user表示当前用户,即第一组
g=group表示和当前用户的同组用户,即第2组
o=other表示其它用户,即第3组
a=all(u+g+o),即所有组
+表示增加权限
-表示去掉权限:+和-是保持原有权限不变,在其上添加或删除权限
=表示设置权限:是将原有权限都删除,重新设置为=所标记的权限
chmod a=rw file #将所有组的权限都变为rw-,即rw-rw-rw-
chmod a+rw file
chmod u=rwx,g=rw file #rwxrw-第三组不变
chmod ug=rw,o+r file #第一组和第二组rw-,第三组加r
文件夹的权限说明
r:表示能否查看文件夹中的内容,即ls命令
w:能够对文件夹中的内容做修改(删除,建立等)
x:表示能否进入文件夹,即cd命令
mkdir dir
chmod a=- dir #此时该文件夹没有任何权限,不能进入,不能使用ls查看内容
chmod a+r dir #此时只能使用ls dir命令查看文件夹中内容,但是无法进入(cd命令)
chmod a+x dir #此时可以进入文件夹中,即cd dir
chmod a+w dir #此时可以在文件夹中进行操作,如mkdir dir/child
clear
clear 清屏
ctrl + l 清屏 ctrl + u 清空当前行内容
cd
change directory 目录切换
绝对路径与相对路径
相对路径参数:
./ 当前目录 在当前目录./可以省略
../ 父级目录
- 返回上一级目录 从哪儿来回哪儿去
~ 返回当前用户主目录
mkdir
# make directory 创建目录
mkdir /home/lhz/aa
# 可以同时创建多个目录
mkdir /home/lhz/aa/a1 mkdir /home/lhz/aa/a2
# 递归创建 -p
mkdir -p /home/lhz/a/a1 /home/lhz/a/a2 /home/lhz/b/b1 /home/lhz/b/b2
rmdir
# remove directory 删除空目录
rmdir /home/lhz/a/a1
rmdir /home/lhz/b/b1 /home/lhz/b/b2
rmdir /home/lhz/b
rmdir /home/lhz/a
# rmdir: 删除 '/home/lhz/a' 失败: 目录非空
touch
touch 新建一个空白文件 (新建一个空白文档)
touch file #建立一个叫做file的空白文件
rm
remove 删除文件
-f 删除文件不会提示确认信息
-r 递归删除
rm -rf 可以删除文件也可以递归删除目录
注意:禁止在root权限下使用 rm -rf
touch b c
rm b
rm -f c
mkdir -p a/a1 a/a2
rm a
# rm: 无法删除'a': 是一个目录
rm -rf a
cp
copy 拷贝
cp 源文件路径 目标文件路径
-v 显示拷贝过程 -r 递归复制目录及其子目录内的所有内容
mkdir a b
touch a/a.txt
cp a/a.txt b
# 目标文件与源文件同名 注意 如果存在目标文件存在同名文件则覆盖目标同名文件
cp -f a/a.txt b
cp a/a.txt b/b.txt
mv
move 移动
实现类似 剪切和重命名的效果
当源文件和目标文件在同一目录下 表现效果如同重命名
cp -r opt/maven/ ~/
mv ~/maven/ ~/Documents/ #将当前maven文件移动到Documents文件夹里
mv ~/Documents/maven/ ~/Documents/mvn #将当前maven文件移动到Documents文件夹里并改名为mvn
cat
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
参数说明: -n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;
cat settings.xml
cat -n settings.xml
cat -b settings.xml
cat -s settings.xml
cat -sn settings.xml
cat -sb settings.xml
输出重定向和管道
输出重定向
输出重定向是将命令的输出结果转存到文件中。
date > file #替换file中的原有内容
date >> file #在file的后面追加内容
管道/ 管道符|
输出重定向一定是命令和文件之间,但是管道的两侧都是命令。将第一个命令的输出传递给第二个命令作为输入。
nl file | more
nl file 显示文件 | more 分页
grep
ps -aux | tomcat
kill -9 id
tar
tar -cvf aa.tar a.txt b.txt
tar -tvf aa.tar
tar -rvf aa.tar c.txt
rm -f *.txt
tar -xvf aa.tar
tar -zcvf aa.tar.gz a.txt b.txt c.txt
rm -f *.txt
tar -zxvf aa.tar.gz
tar -jxvf FileZilla_3.58.0_i686-linux-gnu.tar.bz2 -C /home/lhz/opt
zip|unzip
zip aa.zip a.txt b.txt c.txt
rm -f *.txt
unzip aa.zip
more
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,
而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,
而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h
参数:
-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声
-l 取消遇见特殊字元 ^L时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数
常用操作命令:
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+D 向下滚动半屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
less
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
参数说明:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向上翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
1.全屏导航
ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏
2.单行导航
j - 下一行
k - 上一行
3.其它导航
G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令
4.其它有用的命令
v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件
5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处
tail
tail 命令可用于查看文件的内容,有一个常用的参数 **-f*F常用于查阅正在改变的日志文件。
tail -F filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
tail -F catalina.out
head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
参数:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。
vi/vim
所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的文本处理器,不过功能已经很齐全了,但是还是有可以进步的地方。
vim 则可以说是程序开发者的一项很好用的工具。
vim键盘图
vi/vim的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
编辑模式|输入模式:
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
末行模式|底线命令模式:
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按ESC键可随时退出底线命令模式。
简单的说,我们可以将这三个模式想成底下的图标来表示:
vi/vim 按键说明
除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。
第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等
yy 拷贝光标所在行
nyy 光标所在行向下拷贝n行 包括光标所在行
p 粘贴yy的内容
数字n p粘贴n次yy的内容
移动光标的方法 | |
---|---|
h 或 向左箭头键(←) | 光标向左移动一个字符 |
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! | |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕『向下』移动半页 |
[Ctrl] + [u] | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
n | 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。 |
0 或功能键[Home] | 这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
$ 或功能键[End] | 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
n | n 为数字。光标向下移动 n 行(常用) |
搜索替换 | |
/word | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用) |
?word | 向光标之上寻找一个字符串名称为 word 的字符串。 |
n | 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! |
N | 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 |
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词! | |
拷贝光标所在行:n1,n2s/word1/word2/g | n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用) |
:1,$s/word1/word2/g 或 :%s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) |
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
删除、复制与贴上 | |
x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd | 剪切游标所在的那一整行(常用),用 p/P 可以粘贴。 |
ndd | n 为数字。剪切光标所在的向下 n 行,例如 20dd 则是剪切 20 行(常用),用 p/P 可以粘贴。 |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除游标所在处,到该行的最后一个字符 |
d0 | 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
y1G | 复制游标所在行到第一行的所有数据 |
yG | 复制游标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除 10 行,[ 10cj ] |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦! | |
. | 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) |
第二部分:一般模式切换到编辑模式的可用的按钮说明
进入输入或取代的编辑模式 | |
---|---|
i, I | 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用) |
a, A | 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用) |
o, O | 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用) |
r, R | 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用) |
上面这些按键中,在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔! | |
[Esc] | 退出编辑模式,回到一般模式中(常用) |
第三部分:一般模式切换到指令行模式的可用的按钮说明
指令行的储存、离开等指令 | |
---|---|
:w | 将编辑的数据写入硬盘档案中(常用) |
:w! | 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! |
:q | 离开 vi (常用) |
:q! | 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 |
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~ | |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出) |
ZQ | 不保存,强制退出。效果等同于 :q!。 |
:w [filename] | 将编辑的数据储存成另一个档案(类似另存新档) |
:r [filename] | 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面 |
:n1,n2 w [filename] | 将 n1 到 n2 的内容储存成 filename 这个档案。 |
:! command | 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息! |
vim 环境的变更 | |
:set nu | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与 set nu 相反,为取消行号! |
特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。
举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。
ps
> ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。 > > ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义 -A 列出所有的进程 -w 显示加宽可以显示较多的资讯 -au 显示较详细的资讯 -aux 显示所有包含其他使用者的行程 ``` USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ``` > - USER: 行程拥有者 > - PID: pid > - %CPU: 占用的 CPU 使用率 > - %MEM: 占用的记忆体使用率 > - VSZ: 占用的虚拟记忆体大小 > - RSS: 占用的记忆体大小 > - TTY: 终端的次要装置号码 (minor device number of tty) > - STAT: 该行程的状态: > - D: 无法中断的休眠状态 (通常 IO 的进程) > - R: 正在执行中 > - S: 静止状态 > - T: 暂停执行 > - Z: 不存在但暂时无法消除 > - W: 没有足够的记忆体分页可分配 > - <: 高优先序的行程 > - N: 低优先序的行程 > - L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O) > - START: 行程开始时间 > - TIME: 执行的时间 > - COMMAND:所执行的指令