# 02.Linux-基本指令
# 1.vi和vim
# 1.介绍
Linux 系统会内置 vi 文本编辑器
Vim可以看作是Vi的增强版本,Vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富。
# 2.模式
1.正常模式
以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、粘贴』来处理你的文件数据。
2.插入模式
按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可. 可以写东西了。
3.命令行模式
在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开 vim,显示行号等动作

# 3.基本应用
案例:使用 vim 开发一个 hello.java 程序
首先输入:vi Hello.java 或者 vim Hello.java (使用vim编辑器编写java程序)
输入i等字母,进入插入模式(编辑模式)
然后是写代码:
public class Hello{
public static void main(String[] args){
System.out.println("Hello World");
}
}
然后保存
先 按 Esc 回到正常模式
然后输入冒号: 接着输入wq (代表写入并退出write quit)
回车
结束
输入ls命令,就可以看到hello.java文件
还想修该文件:再输入 vim hello.java (按Tab键 代码补全) 就有回到了上面
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 4.vim快捷键
1.拷贝当前行 yy,拷贝当前行向下的5行 5yy,并粘贴(输入p)。
2.删除当前行 dd,删除当前行向下的5行5dd
3.在文件中查找某个单词【命令行下/关键字,回车查找,输入n就是查找下一个】
4设置文件的行号,取消文件的行号.[命令行下:set nu和:set nonu]
5.编辑/etc/profile文件,在一般模式下,使用快捷键到该文档的最末行[G]和最首行[gg]
6.在一个文件中输入“hello”,在一般模式下,然后又撤销这个动作u
7.编辑/etc/profile文件,在一般模式下,并将光标移动到,输入20,再输入shift+g
# 2.开机和重启
| 命令 | 介绍 |
|---|---|
shutdown -h now | 立即关机(h → halt,停止系统) |
halt | 立即关机,效果与 shutdown -h now 一致 |
shutdown | 默认 1 分钟后关机 |
shutdown -h 1 | 1 分钟后关机,并向所有已登录用户发送通知消息:“1 分钟后关机” |
shutdown -h 2 | 2 分钟后关机 |
shutdown -r now | 立即重启(r → reboot,重启系统)(注:原表中拼写为 shutdonw,正确为 shutdown) |
reboot | 立即重启,效果与 shutdown -r now 一致 |
sync | 将内存中的数据同步写入磁盘,防止数据丢失 |
| 注意 | 无论重启还是关机,建议先手动执行 sync 命令;现代 shutdown/reboot/halt 已内置 sync,但手动执行更保险 |
# 3.用户管理
# 1.添加用户
语法:useradd 用户名
比如:useradd milan 注册新用户milan
注意:当创建用户成功后,会自动创建和用户同名的家目录,该用户的家目录默认在home目录下
也可以给新用户指定家目录:useradd -d 指定目录 新用户名
比如:useradd -d /home/test king 创建一个新用户king,其家目录test
2
3
4
5
6
7
# 2.指定/修改密码
语法:passwd 用户名 给某个用户设置/更改密码
注意:要写用户名。不写用户名默认设置当前用户,如果当前用户是root就麻烦了。
比如:给milan设置密码
命令:pwd --->显示当前用户所在目录 Print Working Directory
2
3
4
5
# 3.删除用户
语法: userdel 用户名
普通用户不能删除别的用户,只有root用户可以;并且不能自己删除自己
1.删掉用户,但是保留其家目录:
userdel 用户名
2.将用户和其家目录一起删除(这个操作要谨慎):
user -r 用户名
一般情况,建议保留家目录(不删除)
2
3
4
5
6
7
8
9
10
# 4.查看用户信息
语法:id 用户名
id root:
uid=0(root) gid=0(root) 组=0(root) userid是0 gruopid组id是0 所在组0
当用户不存在:返回无此用户 no such user
语法:who am i 或者 who am I
who am i --->第一个登录该系统的用户信息
假设A用户登录系统,切换到B用户,B输入命令who am i,输出的还是A用户的信息
2
3
4
5
6
7
8
# 5.用户组
介绍:类似于角色,系统可以对有共性/有相同的权限的多个用户进行统一的管理
新增组:groupadd 组名
假如A用户和B用户有相同的权限,一个一个赋权限太麻烦了;
可以把A用户和B用户放在一个组里,然后给这个组赋权限,组里的用户有相同的权限。
新增一个用户,其实会默认生成一个跟用户名相同的组,然后把用户放到该组里。
就像是 id root:uid=0(root) gid=0(root) 组=0(root)--->root组
例子:增加一个用户zwj,把他直接放到组wudang中
命令:
groupadd wudang
useradd -g wudang zwj
id zwj:uid=1001(zwj) gid=1001(wudang) 组=1001(wudang)
修改用户的组:usermod -g 用户组 用户名
例子:把zwj 放到组 mojiao 中
命令:
groupadd mojiao
usermod -g mojiao zwj
id zwj:uid=1001(zwj) gid=1002(mojiao) 组=1002(mojiao)
删除组:groupdel 组名
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 6.用户和组相关文件
1./etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
shell:命令解释程序,将发布的指令通过shell解析,再传给Linux内核,shell有很多种,中国一般用的是bash
2./etc/shadow 文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
3./etc/group 文件
组(group)的配置文件,记录 Linux 包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
# 4.实用指令
# 1.运行级别
Linux系统运行级别:
0:关机
1:单用户【可以找回丢失密码】
2:多用户状态没有网络服务(一般不用,没网络)
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是 3 和 5
切换运行级别命令:init 选0-6
指定默认运行级别:
CentOS7之前是在文件/etc/inittab文件中设置
CentOS7之后对设置进行了简化:
用 multi-user.target 代表3运行级别
用 graphical.target 代表5运行级别
7版本之后主要用3和5运行级别。
用命令:systemctl get-default 查看当前系统运行级别
用命令:systemctl set-default multi-user.target /graphical.target 设置默认运行级别
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 2.如何找回root密码
Linux学习笔记-B站韩顺平_韩顺平linux笔记-CSDN博客 (opens new window)
# 3.帮助指令
法:man 命令或配置文件
是manual的简写,manual是手册的意思
功能:获得帮助信息
例子:查看ls命令的帮助信息
输入 man ls 之后,会看到ls的具体信息(输入q退出)
注意:可能不止一页,使用空格或下键,可以往下看
---------------------------------------------------------------------
ls命令:列出目录内容
格式:ls [选项] [文件名...]
ls -a --->列出所有文件,包括隐藏文件(隐藏文件以 . 开头)
ls -l --->单列输出
选项以 - 开始
选项可以组合使用,没有顺序:
比如: ls -al 也可以 ls -a -l 表示列出所有的文件 并 单列输出
ls默认是对当前目录下的文件
也可以指定某个目录:
如: ls -al /root 把root目录下的所有文件单列输出
---------------------------------------------------------------------
语法:help 命令
功能:获得 shell 内置命令的帮助信息
例子:查看 cd 命令的帮助信息
help cd
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
# 4.文件目录指令
绝对路径和相对路径
假如当前目录是/home,要找到/home/tom/a.txt
绝对路径:/home/tom/a.txt
相对路径:tom/a.txt
pwd
基本语法:pwd (print working directory)
功能:显示当前目录的绝对路径
2
ls
基本语法:ls [选项] [目录或是文件]
常用选项:
-a:显示当前目录所有的文件和目录,包括隐藏的。
-l:以列表的方式显示信息
2
3
4
cd
基本语法:cd [参数]
功能:切换到指定目录
cd ~ 或者 cd --->回到当前用户的家目录
cd .. --->回到当前目录的上一级目录
案例 1:使用绝对路径切换到 root 目录
cd /root
案例 2:使用相对路径到 root 目录
比如当前在 /home/tom
cd ../../root ../..回到了根目录,再/root
2
3
4
5
6
7
8
9
10
11
12
mkdir,rmdir
基本语法:mkdir [选项] 要创建的目录路径
功能:创建目录
常用选项:
-p:创建多级目录
案例1:在home下创建一个目录dog
mkdir /home/dog
案例2:在home下创建多级目录 /home/animal/tiger
mkdir -p /home/animal/tiger
---------------------------------------------------------------------
基本语法:rmdir [选项] 要删除的空目录路径
功能:删除一个空目录
案例:删除一个目录 /home/dog
rmdir /home/dog
注意:
rmdir 删除的是空目录,如果目录下有内容是无法删除的。
如果需要删除非空目录,需要使用命令:rm -rf 要删除的目录
比如: 删除animal目录
rm -rf /home/animal
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
touch
基本语法:touch 文件名称
功能:创建空文件
案例::在/home 目录下,创建一个空文件 hello.txt
touch /home/hello.txt
或者当前目录是home:touch hello.text
2
3
4
5
6
cp
基本语法:cp [选项] 被拷贝的文件 拷贝到哪个地方
功能:拷贝文件到指定目录
常用选项:
-r:递归复制整个文件夹
案例1:将 /home/hello.txt 拷贝到 /home/bbb 目录下
若在根目录下操作:
先创建 bbb目录
mkdir /home/bbb
然后复制
cp /home/hello.txt /home/bbb
案例2:递归复制整个文件夹,比如将 /home/bbb 整个目录,拷贝到 /opt
cp -r /home/bbb /opt
注意:强制覆盖不提示的方法:\cp
\cp -r /home/bbb /opt
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
rm
基本语法:rm [选项] 要删除的文件或目录
功能:移除文件或目录
常用选项:
-r:递归删除整个文件夹
-f:强制删除不提示
案例1:将 /home/hello.txt 删除
rm /home/hello.txt
案例2:递归删除整个文件夹 /home/bbb ,并不提示
rm -rf /home/bbb
注意:强制删除不提示的方法:带上 -f 参数即可
2
3
4
5
6
7
8
9
10
11
12
13
mv
功能:移动文件与目录或重命名
基本语法:
mv 原文件名 新文件名 (功能描述:重命名)
mv 被移动的文件 移动到哪 (功能描述:移动文件)
案例 1: 将 /home/cat.txt 文件 重新命名为 pig.txt
[root@hspEdu01 ~]# cd /home
[root@hspEdu01 home]# touch cat.txt
[root@hspEdu01 home]# ls
cat.txt jack king milan zwj
[root@hspEdu01 home]# mv cat.txt pig.txt
[root@hspEdu01 home]# ls
jack king milan pig.txt zwj
案例 2:将 /home/pig.txt 文件 移动到 /root 目录下
[root@hspEdu01 home]# mv pig.txt /root
[root@hspEdu01 home]# ls
jack king milan zwj
[root@hspEdu01 home]# cd /root
[root@hspEdu01 ~]# ls
Hello.java pig.txt
移动并重名:mv pig.txt /root/cow.txt
案例 3: 移动整个目录,比如将 /opt/bbb 移动到 /home 下
mv /opt/bbb /home/
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
cat
前面学过一个查看:vim
cat也可以查看,cat只能查看不能修改,cat更安全。
基本语法:cat [选项] 要查看的文件
功能:查看文件内容
常用选项:
-n:显示行号
案例1:查看 /etc/profile 文件内容,并显示行号。
cat -n /etc/profile
注意:
cat 只能浏览文件,而不能修改文件;为了浏览方便再加上管道命令 | more
管道命令:把前面的结果再交给下一个指令进行处理。
语法:| 其他指令
cat -n /etc/profile | more
意思:先执行cat -n /etc/profile 然后,按回车键输出一行,按空格翻页等。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
more指令
基本语法:more 要查看的文件
功能:
more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
more 指令中内置了若干快捷键(交互的指令),详见操作说明:
2
3
4
| 操作 | 功能说明 |
|---|---|
| 空格键 (space) | 代表向下翻一页; |
| Enter | 代表向下翻「一行」; |
| q | 代表立刻离开 more,不再显示该文件内容。 |
| Ctrl+F | 向下滚动一屏 |
| Ctrl+B | 返回上一屏 |
| = | 输出当前行的行号 |
| :f | 输出文件名和当前行的行号 |
less指令
基本语法:less 要查看的文件
功能:
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。
less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
有一个文件是100M,用vim查看会将其全部加载再显示出来,这样会很慢。
使用less,会先加载一部分显示出来,再根据指令显示剩下的,这样更快。
所以要查找一些大的文件,建议用less。
下面操作中:
想要找某个字或词
输入:/要找的字或词 然后按n向下找 按N向上找
操作说明:
2
3
4
5
6
7
8
9
10
11
12
13
14
| 操作 | 功能说明 |
|---|---|
| 空白键 | 向下翻动一页; |
| [pagedown] | 向下翻动一页 |
| [pageup] | 向上翻动一页; |
| / 字串 | 向下搜寻「字串」的功能;n:向下查找;N:向上查找; |
| q | 离开 less 这个程序; |
echo
基本语法:echo [选项] [输出内容]
功能:输出内容到控制台
案例: 使用 echo 指令输出环境变量
比如输出 $PATH $HOSTNAME
输入:echo $HOSTNAME (环境变量一般加$)
案例: 使用 echo 指令输出 hello,world!
输入:echo hello,world!
echo "hello,world!" 加不加引号都可以
2
3
4
5
6
7
8
9
10
head,tail
功能:head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容。
基本语法:
head 文件 (功能描述:查看文件头 10 行内容)
head -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)
案例: 查看/etc/profile 的前面 5 行代码
head -n 5 /etc/profile
功能:tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的前 10 行内容。
基本语法:
tail 文件 (功能描述:查看文件尾 10 行内容)
tail -n 5 文件 (功能描述:查看文件尾 5 行内容,5 可以是任意行数)
tail -f 文件 (功能描述:实时追踪该文档的所有更新,只要该文件改动了什么内容就可实时看到)
2
3
4
5
6
7
8
9
10
11
12
13
输入覆盖 >,重定向>>
>指令和>>指令:
> 输出重定向(覆盖)
>> 追加
基本语法:
ls -l >文件1 (功能描述:将列表的内容写入文件1中(覆盖写))
ls -al >>文件1 (功能描述:将列表的内容追加到文件1的末尾)
cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件 2)
echo "内容">> 文件1 (将内容追加到文件1的末尾)
案例 1: 将 /home 目录下的文件列表 写入到 /home/info.txt 中,覆盖写入。
ls -l /home > /home/info.txt [如果 info.txt 没有,则会自动创建]
案例 2: 将当前日历信息 追加到 /home/mycal 文件中
cal >> /home/mycal
2
3
4
5
6
7
8
9
10
11
12
13
14
软链接
功能:给原文件创建一个软链接
软链接也称为符号链接,类似于 windows 里的快捷方式,主要存放了链接其他文件的路径
基本语法:
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
ln是link
案例1:在/home 目录下创建一个软连接 myroot,连接到 /root 目录
(这样 切换到myroot 其实就是切换到root)
ln -s /root /home/myroot
案例2: 删除软连接 myroot
rm /home/myroot
当我们使用 pwd 指令查看目录时,仍然看到的是软链接所在目录。
2
3
4
5
6
7
8
9
10
11
12
13
14
history
功能:查看已经执行过历史命令,也可以执行历史指令
基本语法:
history (功能描述:查看已经执行过历史命令)
可以看其他登录的用户做了什么操作。
案例 1: 显示所有的历史命令
history
案例 2: 显示最近使用过的 10 个指令。
history 10
案例 3:执行历史编号为 5 的指令
!5
2
3
4
5
6
7
8
9
10
11
# 5.日期指令
date和cal
date指令:
1.显示当前日期
基本语法:
date (功能描述:显示当前时间)
date +%Y (功能描述:显示当前年份)
date +%m (功能描述:显示当前月份)
date +%d (功能描述:显示当前是哪一天)
date "+%Y-%m-%d %H:%M:%S"(功能描述:显示年月日时分秒)
Y year
m month
d day
H hour
M minute
S second
案例 1: 显示当前时间信息
date
案例 2: 显示当前时间年月日
date "+%Y-%m-%d"
案例 3: 显示当前时间年月日时分秒
date "+%Y-%m-%d %H:%M:%S"
2.设置日期
基本语法:
date -s 字符串时间
案例 1: 设置系统当前时间
date -s "2020-11-03 20:02:10"
cal指令:
查看日历指令 cal
基本语法:
cal [选项] (功能描述:不加选项,显示本月日历)
案例 1: 显示当前日历
cal
案例 2: 显示 2020 年日历
cal 2020
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
# 6.查找指令
find,locate,grep
find 指令
从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法:
find [搜索范围] [选项]
选项说明:
-name 匹配名字
-size 匹配文件大小
-user 匹配指定用户相关文件
案例 1: 按文件名:根据名称查找 /home 目录下的 hello.txt 文件
find /home -name hello.txt
案例 2:按拥有者:查找 /opt 目录下,用户名称为 nobody 的文件
find /opt -user nobody
案例 3:查找整个 linux 系统下大于 200M 的文件
+n 大于 -n 小于 n 等于
单位有 k,M,G
find / -size +200M
[root@hspEdu01 opt]# find / -size +200M
/proc/kcore
/run/media/root/CentOS 7 x86_64/LiveOS/squashfs.img (这个文件大于200M)
[root@hspEdu01 LiveOS]# ls -lh (上面的总用量大小看不懂,加上h human 能看懂的内容)
总用量 433M
-rw-r--r--. 1 root root 433M 11月 26 2026 squashfs.img
-r--r--r--. 1 root root 224 11月 26 2026 TRANS.TBL
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
locate,which
locate 指令
可以快速定位文件路径。
利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。
Locate 指令无需遍历整个文件系统,查询速度较快。
为了保证查询结果的准确度,管理员必须定期更新 locate 时刻
基本语法:
locate 搜索文件
注意:
由于 locate 指令基于数据库进行查询,
所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。
案例 1: 请使用 locate 指令快速定位 hello.txt 文件所在目录
updatedb
locate hello.txt
which 指令
可以查看某个指令在哪个目录下
案例:ls 指令在哪个目录
which ls
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
grep
grep 指令和 管道符号 |
grep指令往往和管道符号 | 结合使用
grep:过滤查找
管道符:“|”
表示将前一个命令的处理结果输出传递给后面的命令处理。
比如:先 cat a.txt,然后又想看a.txt文件中有没有hello这个词
那么就 cat a.txt | grep "hello" --->先找到a.txt,然后再在a.txt中找hello
基本语法:
grep [选项] 查找内容 源文件
常用选项:
-n 显示匹配行及行号
-i 忽略字母大小写
案例 1: 请在 hello.txt 文件中,查找"yes"所在行,并且显示行号
写法 1: cat /home/hello.txt | grep "yes" 引号写不写都行
cat /home/hello.txt | grep -n "yes" 显示行号
写法 2: grep -n "yes" /home/hello.txt
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 7.解压和压缩
gzip和gunzip
gzip/gunzip 指令
gzip 用于压缩文件
gunzip 用于解压的
基本语法:
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
案例 1: gzip 压缩,将 /home 下的 hello.txt 文件进行压缩
gzip /home/hello.txt
案例 2: gunzip 解缩,将 /home 下的 hello.txt.gz 文件进行解压
gunzip /home/hello.txt.gz
2
3
4
5
6
7
8
9
10
11
12
13
14
zip和unzip
zip/unzip 指令
zip 用于压缩文件
unzip 用于解压的
(这个在项目打包发布中很有用的)
基本语法:
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压文件)
zip 常用选项
-r:递归压缩,即压缩目录
unzip 的常用选项
-d<目录> :指定解压后文件的存放目录
案例 1:将 /home 下的所有文件/文件夹压缩成 myhome.zip
zip -r myhome.zip /home/ [将 home 目录及其包含的文件和子文件夹都压缩]
案例 2:将 myhome.zip 解压到 /opt/tmp 目录下
mkdir /opt/tmp
unzip -d /opt/tmp /home/myhome.zip
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tar
tar 指令
tar 指令是打包指令,最后打包后的文件是 .tar.gz 的文件。
把一个或者多个文件(夹)用压缩软件进行压缩的过程,一般可称之为打包。
tar指令可以压缩也可以解压。
根据选项来 压缩还是解压。
基本语法:
tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
选项说明:
-c 产生.tar打包文件
-v 显示详细信息
-f 指定打包的文件名
-z 打包同时压缩
-x 解包.tar文件
案例 1:压缩多个文件,将 /home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
使用了选项:-z -c -v -f
多个文件就 空格直接写在后面就好了
案例 2:将 /home 的文件夹压缩成 myhome.tar.gz
tar -zcvf myhome.tar.gz /home/
案例 3:将 pc.tar.gz 解压到当前目录
tar -zxvf pc.tar.gz
案例 4:将 myhome.tar.gz 解压到 /opt/tmp2 目录下
(1) mkdir /opt/tmp2
(2) tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
注意:-C 后写要解压到的位置
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