Linux
Linux基础命令
Linux的目录结构
/
,根目录是最顶级的目录了- Linux只有一个顶级目录:
/
- 路径描述的层次关系同样适用
/
来表示 - /home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt
ls命令
功能:列出文件夹信息
语法:ls [-l -h -a] [参数]
- 参数:被查看的文件夹,不提供参数,表示查看当前工作目录
- -l,以列表形式查看
- -h,配合-l,以更加人性化的方式显示文件大小
- -a,显示隐藏文件
隐藏文件、文件夹
在Linux中以.
开头的,均是隐藏的。
默认不显示出来,需要-a
选项才可查看到。
pwd命令
功能:展示当前工作目录
语法:pwd
作用是:输出当前所在的工作目录
cd命令
功能:切换工作目录
语法:cd [目标目录]
参数:目标目录,要切换去的地方,不提供默认切换到当前登录用户HOME目录
HOME目录
每一个用户在Linux系统中都有自己的专属工作目录,称之为HOME目录。
普通用户的HOME目录,默认在:
/home/用户名
root用户的HOME目录,在:
/root
FinalShell登陆终端后,默认的工作目录就是用户的HOME目录
相对路径、绝对路径
相对路径,==非==
/
开头的称之为相对路径相对路径表示以
当前目录
作为起点,去描述路径,如test/a.txt
,表示当前工作目录内的test文件夹内的a.txt文件绝对路径,==以==
/
开头的称之为绝对路径绝对路径从
根
开始描述路径
特殊路径符
.
,表示当前,比如./a.txt,表示当前文件夹内的a.txt
文件..
,表示上级目录,比如../
表示上级目录,../../
表示上级的上级目录~
,表示用户的HOME目录,比如cd ~
,即可切回用户HOME目录
mkdir命令
功能:创建文件夹
语法:mkdir [-p] 参数
- 参数:被创建文件夹的路径
- 选项:-p,可选,表示创建前置路径
- 自动创建不存在的父目录,适用于创建连续多层级的目录
touch命令
功能:创建文件
语法:touch 参数
- 参数:参数必填,表示要创建的文件路径
cat命令
功能:查看文件内容
语法:cat 参数
- 参数:被查看的文件路径
more命令
功能:查看文件,可以支持翻页查看
语法:more 参数
- 参数:被查看的文件路径
- 在查看过程中:
空格
键翻页q
退出查看
cp命令
功能:复制文件、文件夹
语法:cp [-r] 参数1 参数2
- 参数1,被复制的
- 参数2,要复制去的地方
- 选项:-r,可选,复制文件夹使用
示例:
- cp a.txt b.txt,复制当前目录下a.txt为b.txt
- cp a.txt test/,复制当前目录a.txt到test文件夹内
- cp -r test test2,复制文件夹test到当前文件夹内为test2存在
mv命令
功能:移动文件、文件夹
语法:mv 参数1 参数2
- 参数1:被移动的
- 参数2:要移动去的地方,参数2如果不存在,则会进行改名
rm命令
功能:删除文件、文件夹
语法:rm [-r -f] 参数...参数
参数:支持多个,每一个表示被删除的,空格进行分隔
选项:-r,删除文件夹使用
选项:-f,强制删除,不会给出确认提示,一般root用户会用到
参数也支持通配符*,用以做模糊匹配
- text* 匹配以text开头的文件或文件夹
- *text 匹配text结尾的文件或文件夹
- *text * 匹配包含text的文件或文件夹
rm命令很危险,一定要注意,特别是切换到root用户的时候。
which命令
功能:查看命令的程序本体文件路径
语法:which 参数
- 参数:被查看的命令
find命令
功能:搜索文件
语法1按文件名搜索:find 路径 -name 参数
路径,搜索的起始路径
参数,搜索的关键字,支持通配符*, 比如:
*
test表示搜索任意以test结尾的文件按文件大小查找:
find 起始路径 -size +|-n [KMG]
查找小于10KB的文件:find / -size -10k 查找小于100MB的文件:find / -size -100mb 查找大于1GB的文件:find / -size +1GB
echo Hello Linux1
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
## grep命令
功能:过滤关键字
语法:`grep [-n] 关键字 文件路径`
- 选项-n,可选,表示在结果中显示匹配的行的行号。
- 参数,关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用””将关键字包围起来
- 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口
> 参数文件路径,可以作为管道符的输入
## wc命令
功能:统计
语法:`wc [-c -m -l -w] 文件路径`
- 选项,-c,统计bytes数量
- 选项,-m,统计字符数量
- 选项,-l,统计行数
- 选项,-w,统计单词数量
- 参数,文件路径,被统计的文件,可作为内容输入端口
> 参数文件路径,可作为管道符的输入
## 管道符|
写法:`|`
功能:将符号左边的结果,作为符号右边的输入
示例:
`cat a.txt | grep itheima`,将cat a.txt的结果,作为grep命令的输入,用来过滤`itheima`关键字
可以支持嵌套:
`cat a.txt | grep itheima | grep itcast`
## echo命令
功能:输出内容
语法:`echo 参数`
- 参数:被输出的内容
- 无需选择,只有一个参数,表示要输出的内容,复杂内容可以用“ "包围
演示:
- 在终端上显示:Hello Linux1
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
- 带有空格或\等特殊符号,建议使用双引号包围
- 因为不包围的话,空格很容易被识别为参数2,尽管echo不受影响
## `反引号
功能:被两个反引号包围的内容,会作为命令执行
示例:
- echo \`pwd\`,会输出当前工作目录
## tail命令
功能:查看文件尾部内容
语法:`tail [-f] 参数`
- 参数:被查看的文件
- 选项:-f,持续跟踪文件修改
## head命令
功能:查看文件头部内容
语法:`head [-n] 参数`
- 参数:被查看的文件
- 选项:-n,查看的行数
## 重定向符
功能:将符号左边的结果,输出到右边指定的文件中去
- `>`,表示覆盖输出 将左侧命令的结果,覆盖写入到符号右侧指定的文件中
- `>>`,表示追加输出 将左侧命令的结果,追加写入到符号右侧指定的文件中
## vi编辑器
### 命令模式快捷键
| 模式 | 命令 | 描述 |
| ------------ | ----- | --------------------------------- |
| **命令模式** | `i` | 在当前光标位置进入 `输入模式` |
| **命令模式** | `a` | 在当前光标位置之后进入 `输入模式` |
| **命令模式** | `I` | 在当前行的开头进入 `输入模式` |
| **命令模式** | `A` | 在当前行的结尾进入 `输入模式` |
| **命令模式** | `o` | 在当前光标下一行进入 `输入模式` |
| **命令模式** | `O` | 在当前光标上一行进入 `输入模式` |
| **输入模式** | `esc` | 任何情况下`esc` 都能回到命令模式 |
****
| 模式 | 命令 | 描述 |
| ------------ | ---------------- | ---------------------- |
| **命令模式** | `键盘上、键盘k` | 向上移动光标 |
| **命令模式** | `键盘下、键盘j` | 向下移动光标 |
| **命令模式** | `键盘左、键盘h` | 向左移动光标 |
| **命令模式** | `键盘右、键盘l` | 向右移动光标 |
| **命令模式** | `0` | 移动光标到当前行的开头 |
| **命令模式** | `$` | 移动光标到当前行的结尾 |
| **命令模式** | `pageup(Pgup)` | 向上翻页 |
| **命令模式** | `pagedown(PgDn)` | 向下翻页 |
| **命令模式** | `/` | 进入搜索模式 |
| **命令模式** | `n` | 向下继续搜索 |
| **命令模式** | `N` | 向上继续搜索 |
| **模式** | 命令 | 描述 |
| ------------ | ---------- | -------------------------------- |
| **命令模式** | `dd` | 删除光标所在行的内容 |
| **命令模式** | `ndd` | n是数字,表示删除当前光标向下n行 |
| **命令模式** | `yy` | 复制当前行 |
| **命令模式** | `nyy` | n是数字,复制当前行和下面的n行 |
| **命令模式** | `p` | 粘贴复制的内容 |
| **命令模式** | `u` | 撤销修改 |
| **命令模式** | `ctrl + r` | 反向撤销修改 |
| **命令模式** | `gg` | 跳到首行 |
| **命令模式** | `G` | 跳到行尾 |
| **命令模式** | `dG` | 从当前行开始,向下全部删除 |
| **命令模式** | `dgg` | 从当前行开始,向上全部删除 |
| **命令模式** | `d$` | 从当前光标开始,删除到本行的结尾 |
| **命令模式** | `d0` | 从当前光标开始,删除到本行的开头 |
### 底线命令快捷键
![image-20240514212954898](./Linux/image-20240514212954898.png)
## 命令的选项
我们学习的一系列Linux命令,它们所拥有的选项都是非常多的。
比如,简单的ls命令就有:-a -A -b -c -C -d -D -f -F -g -G -h -H -i -I -k -l -L -m -n -N -o -p -q -Q -r-R -s -S -t -T -u -U -v -w -x -X -1等选项,可以发现选项是极其多的。
课程中, 并不会将全部的选项都进行讲解,否则,一个ls命令就可能讲解2小时之久。
课程中,会对常见的选项进行讲解, 足够满足绝大多数的学习、工作场景。
### 查看命令的帮助
可以通过:`命令 --help`查看命令的帮助手册
![image-20240514213545358](./Linux/image-20240514213545358.png)
### 查看命令的详细手册
可以通过:`man 命令`查看某命令的详细手册
![image-20240514213539751](./Linux/image-20240514213539751.png)
# Linux常用操作
## 软件安装
- CentOS系统使用:
- yum [install remove search] [-y] 软件名称
- install 安装
- remove 卸载
- search 搜索
- -y,自动确认
- Ubuntu系统使用
- apt [install remove search] [-y] 软件名称
- install 安装
- remove 卸载
- search 搜索
- -y,自动确认
> yum 和 apt 均需要root权限
## systemctl
功能:控制系统服务的启动关闭等
语法:`systemctl start | stop | restart | disable | enable | status 服务名`
- start,启动
- stop,停止
- status,查看状态
- disable,关闭开机自启
- enable,开启开机自启
- restart,重启
## 软链接
功能:创建文件、文件夹软链接(快捷方式)
语法:`ln -s 参数1 参数2`
- 参数1:被链接的
- 参数2:要链接去的地方(快捷方式的名称和存放位置)
## 日期
语法:`date [-d] [+格式化字符串]`
- -d 按照给定的字符串显示日期,一般用于日期计算
- 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
- %Y 年%y 年份后两位数字 (00..99)
- %m 月份 (01..12)
- %d 日 (01..31)
- %H 小时 (00..23)
- %M 分钟 (00..59)
- %S 秒 (00..60)
- %s 自 1970-01-01 00:00:00 UTC 到现在的秒数
示例:
- 按照2022-01-01的格式显示日期
![image-20240514213528329](./Linux/image-20240514213528329.png)
- 按照2022-01-01 10:00:00的格式显示日期
![image-20240514213523029](./Linux/image-20240514213523029.png)
- -d选项日期计算
![image-20240514213518516](./Linux/image-20240514213518516.png)
- 支持的时间标记为:
![image-20240514213514134](./Linux/image-20240514213514134.png)
## 时区
修改时区为中国时区
![image-20221027220554654](https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220554.png)
## ntp
功能:同步时间
安装:`yum install -y ntp`
启动管理:`systemctl start | stop | restart | status | disable | enable ntpd`
手动校准时间:`ntpdate -u ntp.aliyun.com`
## ip地址
格式:a.b.c.d
- abcd为0~255的数字
特殊IP:
- 127.0.0.1,表示本机
- 0.0.0.0
- 可以表示本机
- 也可以表示任意IP(看使用场景)
查看ip:`ifconfig`
## 主机名
功能:Linux系统的名称
查看:`hostname`
设置:`hostnamectl set-hostname 主机名`
## 配置VMware固定IP
1. 修改VMware网络,参阅PPT,图太多
2. 设置Linux内部固定IP
修改文件:`/etc/sysconfig/network-scripts/ifcfg-ens33`
示例文件内容:
```shell
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 改为static,固定IP
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="1b0011cb-0d2e-4eaa-8a11-af7d50ebc876"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.88.131" # IP地址,自己设置,要匹配网络范围
NETMASK="255.255.255.0" # 子网掩码,固定写法255.255.255.0
GATEWAY="192.168.88.2" # 网关,要和VMware中配置的一致
DNS1="192.168.88.2" # DNS1服务器,和网关一致即可
ps命令
功能:查看进程信息
语法:ps -ef
,查看全部进程信息,可以搭配grep做过滤:ps -ef | grep xxx
kill命令
nmap命令
netstat命令
功能:查看端口占用
用法:netstat -anp | grep xxx
ping命令
测试网络是否联通
语法:ping [-c num] 参数
wget命令
curl命令
top命令
功能:查看主机运行状态
语法:top
,查看基础信息
可用选项:
交互式模式中,可用快捷键:
df命令
查看磁盘占用
iostat命令
查看CPU、磁盘的相关信息
sar命令
查看网络统计
环境变量
- 临时设置:export 变量名=变量值
- 永久设置:
- 针对用户,设置用户HOME目录内:
.bashrc
文件 - 针对全局,设置
/etc/profile
- 针对用户,设置用户HOME目录内:
PATH变量
记录了执行程序的搜索路径
可以将自定义路径加入PATH内,实现自定义命令在任意地方均可执行的效果
$符号
可以取出指定的环境变量的值
语法:$变量名
示例:
echo $PATH
,输出PATH环境变量的值
echo ${PATH}ABC
,输出PATH环境变量的值以及ABC
如果变量名和其它内容混淆在一起,可以使用${}
压缩解压
压缩
tar -zcvf 压缩包 被压缩1...被压缩2...被压缩N
- -z表示使用gzip,可以不写
zip [-r] 参数1 参数2 参数N
解压
tar -zxvf 被解压的文件 -C 要解压去的地方
- -z表示使用gzip,可以省略
- -C,可以省略,指定要解压去的地方,不写解压到当前目录
unzip [-d] 参数
su命令
切换用户
语法:su [-] [用户]
sudo命令
比如:
1 | itheima ALL=(ALL) NOPASSWD: ALL |
在visudo内配置如上内容,可以让itheima用户,无需密码直接使用sudo
chmod命令
修改文件、文件夹权限
语法:chmod [-R] 权限 参数
权限,要设置的权限,比如755,表示:
rwxr-xr-x
参数,被修改的文件、文件夹
选项-R,设置文件夹和其内部全部内容一样生效
chown命令
修改文件、文件夹所属用户、组
语法:chown [-R] [用户][:][用户组] 文件或文件夹
用户组管理
用户管理
genenv命令
getenv group
,查看系统全部的用户组getenv passwd
,查看系统全部的用户
env命令
查看系统全部的环境变量
语法:env
Shell脚本编程
概念
Shell是什么?
- Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序。看一个示意图
入门案例
- 脚本要求格式
- 脚本以
#!bin/bash
开头 - 脚本执行需要权限
- 脚本以
- 编写第一个Shell脚本
- 需求说明,新建一个Shell脚本,输出Hello world
1 | 创建shell脚本,注意以sh结尾 |
基本语法
- Shell变量介绍
- Linux Shell中的变量分为,系统变量和用户自定义变量
- 系统变量:$HOME、$PWD、$SHELL、$USER等,比如:echo $HOME 等等
- 显示当前shell中所有变量:set
- shell变量的定义
- 定义变量:变量名=值
- 撤销变量:unset 变量
- 声明静态变量:readonly变量,注意:不能unset
1 | 案例 |
注意:
设置环境变量
- 基本语法
export 变量名=变量值
:将shell变量输出为环境变量/全局变量source 配置文件
:让修改后的配置信息立即生效echo $变量名
:查询环境变量的值
案例:
1 | 1. 在/etc/profile文件中定义TOMCAT_HOME环境变量 |
shell脚本多行注释: :<<! 内容 !
位置参数变量
介绍
- 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:
./myshell.sh 100 200
,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
- 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:
基本语法
$n
:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}$*
:这个变量代表命令行中所有的参数,$* 把所有的参数堪称一个整体$@
:这个变量代表命令行中所有的参数,不过$@ 把每个参数区分对待$#
:这个变量代表命令行中所有参数的个数
案例:
1 | 编写一个shell脚本position.sh 在脚本中获取到命令行的各个参数信息 |
预定义变量
基本介绍
- 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$
:当前进程的进程号(PID)$!
:后台运行的最后一个进程的进程号(PID)$?
:最后一次执行的命令的返回状态,如果这个变量的职位0,证明上一个命令正确执行,如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了
案例:
1 | 在一个shell脚本中简单使用一下预定义变量preVar.sh |
运算符
基本介绍
- 学习如何在shell中进行各种运算操作
基本语法
- “$((运算式))” 或 “$[运算式]” 或者 expr m + n
- 注意expr 运算符间要有空格,如果希望将expr 的结果赋给某个变量,使用``
- expr m - n
- expr
\*
,/
,%
乘、除、取余
案例:
1 | 计算(2+3)*4 |
条件判断
案例:
1 | 案例1. "ok" 是否等于 "ok" |
流程控制
if分支
注意:[条件判断式] 中括号和条件判断式之间必须有空格
案例:
1 | 请编写一个shell程序,如果输入的参数,大于等于60 则输出"及格了" 如果小于60,则输出 "不及格" |
case语句
案例:
1 | 当命令行参数是1时,输出"周一",是2时,就输出"周二",其他情况输出 "other" |
for循环
案例:
1 | 打印命令行输入的参数[这里可以看出$* 和 $@ 的区别] |
while循环
案例:
1 | 从命令中输入一个数n,求1+...+n的值是多少 |
read读取控制台输入
案例:
1 | 案例1:读取控制台输入一个num值 |
函数
basename
- 函数介绍
- shell编程和其他语言一样,有系统函数,也可以自定义函数,系统函数中,我们这里就介绍两个
案例:
1 | 案例1:请返回/home/aaa/test.txt的 "test.txt" 的部分 |
dirname
案例:
1 | 案例1:请返回/home/aaa/test.txt 的 /home/aaa |
自定义函数
案例:
1 | 案例1:计算输入两个参数的和(动态的获取),getSum |
Shell脚本案例
1 | BACKUP=/data/backup/db |