笔记的目录是从原先的Typora文档中摘录下来,记录的是Linux的实操篇 大部分的内容根据B站韩顺平老师的讲课整理而成
Linux实操篇
实用小技巧
#后台运行的方式运行 myShell01.sh ./myShell01.sh & 这样就是后台运行
Ctrl + c 可以退出程序运行,比如在这里的后台运行 myShell01.sh 脚本时候,退不出来
Ubuntu终端的界面字体大小
放大: ’Ctrl’ + ’shift ’ + ‘ + ’ 缩小:’Ctrl’ + ‘ - ’
5.1 vi和vim
正常模式:
在正常模式下我们可以使用快捷键
插入模式/编辑模式:
在模式下,程序员可以输入,按下 i, I , o, O , a , A 可以打开
命令行模式:
可以提供相关的指令,完成读取,存盘、替换
ll 把当前目录的文件显示出来
1. :wq!,写入保存并强制退出
2. :w,保存但不退出
3. :q,退出
4. :q!,强制退出,不保存
5. :e!,放弃所有修改,从上次保
存文件开始再编辑命令历史
5.2 快捷键使用案例
- 拷贝当前行 yy ,拷贝当前行向下5行 5yy ,并粘贴(字母p) 拷贝与删除都是在正常模式下进行操作
- 删除当前行 dd,删除当前向下的5行 5dd
- 在文件中查找某个单词(命令行模式下
/关键字,回车 查找 ,输入 n 就是查找下一个)查询 - 设置文件的行号,取消文件的行号 (命令行模式下,:set nu 和 :set nonu)
- 编辑 /etc/profile文件,使用快捷键到文档的最末行[G]和最首行[gg] 正常模式之下
- 在一个文件中输入“hello”,然后又撤销这个动作 u 正常模式之下
- 编辑 /etc/profile文件,并将光标移动到第20行 正常模式下 20 + shift + g
5.3 开机、重启和用户登录注销
shutdown -h now:立即关机
shutdown -h 1:表示1分钟之后关机
shutdown -r now:立即重启
halt :直接使用,关机
reboot:重启
sync:把内存的数据存入磁盘
当我们重启或者关机时,都应该先执行 sync命令,防止数据丢失
用户登录和注销
用户登录尽量不用 root用户,防止出现一些不必要的麻烦
注销,logout在这里指的是在登录xshell5的时候
5.3 用户管理
默认的终端打开所属的目录为 根目录下 名为home目录下的 以用户名命名的目录
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
Linux的用户需要至少要属于一个组
看网上的需要先转换用户权限 su root su = switch user
添加用户:useradd[选项] 用户名
一般没有指定新用户的位置
5.4 实用指令
使用小技巧:
可以通过上下箭头的键,调出原来的指令
5.4.1 指定用户级别
Linux设置了七个运行级别,配置文件在 /etc/inittab
0:关机
1:单用户(找回丢失密码)
2:多用户无网络服务
3:多用户网络服务 平常使用的最多(程序员使用)
4:系统未使用保留给用户
5:图形界面
6:重启
切换到指定运行级别的指令:init [0,1,2,3,5,6]
例题:找回丢失的密码,如果我们不小心忘记用户密码,怎么办
进入到单用户模式,然后修改 root 密码。因为进入单用户模式,root不需要密码就可以登录
开机 -> 在引导的时候输入回车键 ->看到一个界面输入 e -->看到一个新的界面,选中第二行(编辑内核kernel)
再输入e -->在这行的最后输入 1 ,再输入回车键 -->再次输入 b,这时就会进入单用户模式
这时就进入了单用户模式,可以修改密码,passwd
5.4.2 帮助指令
当我们对某个指令不熟悉时,我们可以使用Linux的帮助指令来了解这个指令的使用方法
man 获取帮助信息 例题:man ls 查看 ls
help命令 获取shell内置命令的帮助信息
例题:查看 cd的信息 help cd
5.4.3 文件目录类指令
5.4.3.1 pwd指令
pwd指令 :显示当前工作目录的绝对路径
5.4.3.2 ls指令
ls指令: 显示当前目录的文件或者目录
ls [选项] [目录或是文件]
常用选项: -a 显示当前目录所有的文件和目录,包括隐藏的
? -l 以列表的形式显示信息
应用案例:显示当前目录的所有信息 ls -la
5.4.3.3 cd指令
cd指令:切换文件指令
绝对路径:从根目录开始一点一点到牧目标位置
相对路径:从当前工作目录开始定位 … + /相同等级的文件夹 … 代表回到上一级路径
常用参数: cd : 或者 cd ~ 回到自己的家目录
? cd … 回到当前目录的上一级目录
假设当前目录在 user/lib文件,回到 /root目录 cd …/…/root 两次回到上级目录 相对路径写法
5.4.3.4 mkdir指令
mkdir指令:用于创建目录
mkdir /home/dog 创建单级目录,表示在/home目录下创建一个 dog目录
mkdir -p /home/animal/tiger 创建多级目录,此时home目录之下没有animal目录
5.4.3.5 rmdir指令
rmdir指令:删除空目录
rmdir /home/dog 删除dog空目录
5.4.3.6 touch指令
touch指令:创建空文件
touch 文件名 touch hello.txt
? touch ok1.txt ok2.txt 创建多个文件
5.4.3.7 cp指令
cp指令:拷贝指令
拷贝文件到指定目录 cp [选项] source dest
常用选项: -r 递归复制整个文件夹
- 拷贝当前目录下的aaa.txt文件到 当前目录的bbb目录之下 cp aaa.txt bbb/ 这里用的相对路径
- 递归复制整个文件夹,比如将/home/test整个目录拷贝到 /home/zwj目录之下 cp -r test/ zwj/ 这里也是先回到了hone目录之下,才使用的相对路径
如果还想再一次拷贝原来已经拷贝的文件,使用 \ 斜杠 \cp -r test/ zwj/ 这个指令是强制覆盖原来的文件
5.4.3.8 rm指令
rm指令:删除文件或目录 ,空的也可以删除
rm [选项] 要删除的文件或目录
常用选项:-r 递归删除整个文件夹
? -f 强制删除不提示
rm -rf ./test/* 表示删除 ./test 文件夹下的所有文件和目录,但是不删除 test文件夹本身
5.4.3.9 mv指令
mv指令:移动文件与目录或者重命名
mv oldName newName 重命名
mv /temp/movefile targetFile 移动文件或者目录(相当于剪切 cut)
将 /home/pig.txt 文件移动到 /root目录下
5.4.3.10 cat指令
cat指令:查看文件内容,相当于打开文件,但是只能浏览,不能修改
cat [选项] 要查看的文件
常用选项:-n 显示行号
cat -n /etc/profile | more 查看文件内容,经常和more指令在一起使用,more指令是为了分页显示
| 代表管道符
5.4.3.11 more指令
more指令: more 要查看的文件
more指令是一个基于VI编辑器的文本过滤器,它以全屏的方式按页显示文件的内容。
more指令中内置了很多快捷键,详见操作说明
操作 | 功能说明 |
---|
空白键(space) | 代表向下翻一页 | Enter | 代表向下翻一行 | q | 代表立刻离开more,不再显示该文件内容 | Ctrl + F | 向下滚动一屏forward | Ctrl + B | 返回上一屏backward | | |
5.4.3.12 less指令
less指令: less 要查看的文件
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大。支持各种显示终端。
less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据需要加载内容,
对于显示大型文件具有较高的效率
操作 | 功能说明 |
---|
空白键(space) | 代表向下翻一页 | pagedown | 向下翻动一页 | pageup | 向下翻动一页 | /字串 | 向上搜寻[字串]的功能。n:向下寻找;N:向上寻找 | ?字串 | 向下搜寻[字串]的功能。n:向下寻找;N:向上寻找 | q | 离开这个less程序 |
5.4.3.13 > 和 >> 指令
重定向和追加指令:> 和 >> 两个指令
重定向指令 > 相当于写入的 r,只有覆盖,没有追加
追加指令就是相当于 r+ ,追加在原来文本的后面
基本语法:
ls -l > 文件 将列表的内容写入文件之中,如果文件不存在则自动创建
ls -al >> 文件 将列表的内容追加到文件之中,不存在则自动创建
cat 文件1 > 文件2 将文件1的内容覆盖到文件2中
echo “内容” >> 文件 将"内容"追加到文件末尾
5.4.3.14 echo指令
echo指令:输出内容到控制台
echo [选项] [输出内容]
经常用echo输出环境变量,输出当前的文件环境路径
echo $PATH
输出hello world
echo “hello world”
5.4.3.15 head指令
head指令:显示文件的开头,比如文件有2000行,默认查看文件前十行
head 文件
例如:查看 /etc/profile 文件的前五行 head -n 5 /etc/profile
5.4.3.16 tail指令
tail指令:显示文件尾部的内容,默认显示文件的最后10行
基本语法:
tail 文件 查看文件后10行内容
tail -n 5 文件 查看文件后5行内容
tail -f 文件 实时追踪文档的所有更新,工作经常使用
例如:实时监控 mydate.txt,看看到文件有变换时,是否看到,实时追加的日期
tail -f mydate.txt
然后 ls -l >> mydate.txt 回车之后,如果此时在监控这个 tail -f mydate.txt,会立即显示追加信息
5.4.3.17 ln指令
ln指令:软链接指令,也叫符号链接指令,类似于Windows的快捷方式。主要存放了链接其他文件的路径
基本语法:
ln -s [原文件或目录] [软链接名] 给原文件创建一个软链接
例如:在 /home目录下创建一个软链接 linkToRoot,连接到 /root目录
ln -s /root linkToRoot
即使 说 cd linkToRoot 本质上还是在 /home目录下(仍然在软链接目录下),类似桌面快捷键打开某个软件
删除软链接方式:rm -rf linkToRoot (不用待斜杠 linkToRoot/
5.4.3.18 history指令
history指令:查看已经执行过的历史命令,也可以执行历史指令
基本语法:history [数字选项] 加上回车就行
例如:
显示所有的历史命令 history
显示最近使用的10个指令 history 10
执行历史编号为5的指令 !5 叹号加上数字
5.4.4 时间日期类指令
5.4.4.1 date指令
date指令:显示当前日期 引号加不加都可以
基本语法:
date 显示当前的时间
date + %Y 显示当前年份
date + %m 显示当前月份
date + %d 显示当前是哪一天
date + “+%Y-%m-%d %H:%M:%S” (+不要忘记,-也可以不写)显示年月日时分秒
应用示例:
显示当前日期信息:date
显示当前年月日: date “+%Y-%m-%d”
显示当前年月日时分秒:date “+%Y年%m月%d日 %H:%M:%S”
? date +%Y-%m-%d %H:%M:%S 没有引号也可以
date指令:设置日期
基本语法:date -s 字符串时间
例如:设置系统当前时间,比如设置成 2020-11-11 11:22:22
date -s “2020-11-11 11:22:22”
5.4.4.2 cal指令
cal指令:查看日历指令
基本语法:cal [选项] (如若不加选项,显示本月日历)
例如:显示当前日历: cal
? 显示2020年日历 cal 2020
5.4.5 搜索查找类指令
5.4.5.1 find指令
find指令:将从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端
基本语法: find [搜索范围] [选项]
选项说明:
选项 | 功能 |
---|
-name<查询方式> | 按照指定的文件名查找模式查找文件 | -user<用户名> | 查找属于指定用户名的所有文件 | -size<文件大小> | 按照指定的文件大小查找文件 |
例如:
1.按文件名:根据文件名查找 find /home -name hello.txt
? find / -name *.txt 查找 / 目录下 所有 .txt 类型的文件
2.按照文件拥有者查找 find /opt -user nobody
3.按照文件大小查找 find /home -size +2M 从/home目录下查找大于2M的文件
? +n -n n 大于 小于 等于
5.4.5.2 locate指令
locate指令:可以快速定位文件路径
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
基本语法:locate 搜索文件
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
例如: updatedb
? locate hello.txt
5.4.5.3 grep指令和管道符号 |
grep指令:grep过滤查找,管道符 “|” 表示将前一个命令的处理结果输出传递给后面的命令处理
基本语法: grep [选项] 查找内容 源文件
常用选项: -n 显示匹配及行号
? -i 忽略字母大小写
例如:在hello.txt文件中,查找"yes",所在行,并显示行号
? cat hello.txt | grep -n yes
5.4.6 压缩和解压缩指令
5.4.6.1 gzip和gunzip指令
gzip指令用于压缩文件 : gzip 文件 (功能描述,只能将文件压缩成 * .gz类型的压缩文件)
gunzip指令用于解压缩文件 :gunzip 文件.gz gunzip hello.txt.gz
当我们使用gzip指令,不会保留原来的文件
5.4.6.2 zip和unzip指令
zip用于压缩文件,unzip用于解压的,在项目打包发布中很有用
基本语法:
? zip [选项] XXX.zip 要压缩的内容 功能:压缩文件
? unzip [选项] XXX.zip 功能:解压文件
zip常用选项:
? -r 递归压缩文件
ubzip常用选项:
? -d<目录> 指定解压后文件的存放目录
例如:
将 /home目录下所有文件压缩在 myPackage.zip中
zip -r myPackage.zip /home/
将myPackage.zip中的文件解压到 /opt/tmp目录下
unzip -d /opt/tmp/ myPackage.zip
5.4.6.3 tar指令
tar指令:打包指令,既可以压缩,也可以解压,根据参数来判定,最后打包的文件是 .tar.gz格式
基本语法: tar [选项] xxx.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式 .tar.gz)
选项说明:
选项 | 功能 |
---|
-c | 产生 tar打包文件 | -v | 显示详细信息 | -f | 指定压缩后的文件名 | -z | 打包同时压缩 | -x | 解包 .tar文件 |
应用举例:
- 压缩多个文件,将 /home/a1.txt和 /home/a2.txt压缩成 a.tar.gz 文件
? tar -zcvf a.tar.gz a1.txt a2.txt 因为有参数 -v ,所以会显示信息
-
将 /home文件夹压缩成 myHome.tar.gz 文件 tar -zcvf myHome /home/ -
将 a.tar.gz 解压到当前目录 tar -zxvf a.tar.gz -
将 myHome.tar.gz 解压到 /opt/ 目录 tar -zxvf myHome.tar.gz -C /opt/
? 注意点:解压到某个目录,前提这个目录存在,而且指令要加上 参数 -C
5.4.7 修改用户密码
修改正在登录的用户的密码
passwd 回车 输入就行
修改其他的用户
passwd 用户名
不知道密码的情况下,在开机的时候,ESC键,一系列操作
5.5 组管理和权限管理
5.5.1 Linux组的基本介绍
5.5.2 组的相关指令和应用
文件 / 目录所有者
指令:ls -ahl 查看文件所有者
应用示例:创建一个组 police,再创建一个用户 tom ,然后使用 tom来创建一个文件tom.txt,看看情况如何
groupadd police
useradd -g police tom
passwd tom
touch tom.txt
ls -ahl
修改文件所有者
指令:chown 用户名 文件名
应用案例:使用 root创建一个文件 apple.txt ,然后将其所有者修改成 tom
touch apple.txt
chown tom apple.txt
注意:改完之后,apple.txt 文件的所有者变为了 tom,但是apple.txt的所在组还是 root用户所在的那个组
组的创建
groupadd 组名
创建一个组 monster
创建一个用户 fox,并放入到monster组中
groupadd monster
useradd -g monster fox
id fox 用来查看用户所在的组
文件/目录所在组
当某个用户创建了一个文件后,默认这个文件的所在组就是该用户的所在组
查看文件/目录所在组
基本指令:ls -ahl
修改文件所在的组
基本指令:chgrp 组名 文件名
例如:使用root用户创建文件 orange.txt,看看当前这个文件属于哪个组。然后将这个文件的所在组,修改到police组
touch orange.txt
ls -ahl
chgrp police orange.txt
其他组:除去文件的所有者和所在组的用户外,系统的比其他用户都是文件的其他组
改变用户所在组
usermod -g 组名 用户名
usermod -d 目录名 用户名 改变该用户登录的初始目录
例如:创建一个土匪组(bandit),将tom这个用户从原来的police组改变到 土匪组
groupadd bandit
usermod -g bandit tom
5.5.3 权限的基本介绍
使用 ls 指令查看当前目录下的文件
文件的类型:在一行的最前面的参数
-:代表普通文件
d:代表目录
l:代表软链接
c:字符设备(键盘、鼠标)
b:块文件,硬盘
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
0-9位说明
第0位确定文件类型(d, -, c, b, l)
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 -User
第4-6位确定所属组(同用户组的)拥有该文件的权限。 -Group
第7-9位确定其他用户拥有该文件的权限。 -Other
rwx权限详解
rwx作用到文件
[r] 代表可读(read):可以读取,查看
[w] 代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
[x] 代表可执行(execute):可以被执行
rwx作用到目录
[r] 代表可读(read):可以读取,ls查看目录内容
[w] 代表可写(write):可以修改,目录内创建+删除+重命名目录
[x] 代表可执行(execute):可以进入该目录
5.5.4 权限管理
修改权限-chmod
通过 chmod指令,可以修改文件或者目录的权限
第一种方式:+、-、= 加上 变更的权限
u:所有者, g:所在组 o:其他人(组) a:所有人(u、g、o的总和)
- chmod u=rwx,g=rx,o=w 文件目录名 = 代表的是赋予的意思
- chmod o+w 文件目录名 + 代表的是增加的意思
- chmod a-x 文件目录名 - 代表的是去除的意思
案例演示:
- 给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限
- 给abc文件的所有者除去执行的权限,增加组的写的权限
- 给abc文件的所有用户添加读的权限
chmod u=rwx,g=rx,o=x abc
chmod u-x,g+w abc
chmod a+r abc
如果想给某个文件夹下的所有文件,都将它们的权限进行改变,是不是要加上 -R
第二种方式:通过数字变更权限
r = 4 w = 2 x = 1 rwx = 4+2+1 = 7
chmod u=rwx,g=rx,o=x 文件名 相当于
chmod 751 文件名
案例演示:
将/home/abc.txt文件的权限修改为 rwxr-xr-x ,使用数字的方式实现
rwx = 4 + 2 + 1 = 7
r-x = 4 + 1 = 5
chmod 751 abc.txt
修改文件所有者-chown
递归修改所有文件
chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变文件的所有者和所有组
-R 如果是目录,则使其下所有的子文件或者目录递归生效
案例演示:
请将 /home/abc.txt 文件的所有者修改成 tom 都要小心权限的限制,很重要
请将 /home/kkk目录下所有的文件和目录的所有者都修改成tom
chown tom /home/abc.txt
chown -R tom /home/kkk/
修改文件所在组-chgrp
基本语法:chgrp newgroup file 改变文件的所在组
案例演示:
请将 /home/abc.txt 文件的所在组修改成 shaolin(少林)
请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 shaolin
chgrp shaolin abc.txt
chgrp -R shaolin /home/kkk/
来个权限实践作业
groupadd police
groupadd bandit
useradd -g police jack
useradd -g police jerry
useradd -g bandit xh
useradd -g bandit xj
jack创建一个文件,自己可以
chmod 640 jack.txt
chmod o=r,r=rw jack.txt
5.6 定时任务调度
定时的调用我们的脚本或者代码 crontab 机制
crond任务调度
基本介绍
编辑器一定要选择正确,如果是第一次使用的话,记得选择 vim.tiny 这个选项
crond 进行定时任务的设置
基本语法: crontab [选项]
常用选项: -e 编辑crontab定时任务
? -l 查询crontab任务,显示
? -r 删除当前用户的所有crontab任务
如果只是简单的任务,直接写在 crontab中
参数和入门
快速入门案例:
crontab -e 打开编辑模式,实际上是在 /etc/crontab 文件中
*1/ * * * * ls -l /etc/ >> /tmp/to.txt
ESC退出编辑模式
:wq 保存退出
**参数说明:**五个占位符的说明
项目 | 含义 | 范围 |
---|
第一个 “*” | 一小时当中的第几分钟 | 0-59 | 第二个 “*” | 一天当中的第几个小时 | 0-23 | 第三个 “*” | 一个月当中的第几天 | 1-31 | 第四个 “*” | 一年当中的第几个月 | 1-12 | 第五个 “*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
特殊符号说明:
特殊符号 | 含义 |
---|
* | 代表任何时间。比如第一个 “*” 就代表一小时中每分钟都执行一次的意思。 | , | 代表不连续的时间。比如 “0 8,12,16 * * * 命令” 代表在每天的8点0分,12点0分,16点0分都执行一次命令。 | - | 代表连续的时间范围。比如 “0 5 * * 1-6 命令”,代表在周一到周六的凌晨5点0分执行命令 | */n | 代表每隔多久就会执行一次命令。比如 “*/10 * * * *”,代表每隔十分钟就执行一次命令 | | |
特定时间执行任务案例
时间 | 含义 |
---|
45 22 * * * 命令 | 在22点45分执行命令 | 0 17 * * 1 命令 | 每周一的17点0分执行命令 | 0 5 1,15 * * 命令 | 每月1号和15号的凌晨5点0分执行命令 | 40 4 * * 1-5 命令 | 每周一到周五的凌晨4点40分执行命令 | */10 4 * * * 命令 | 每天的凌晨4点,每隔十分钟执行一次命令。就是在4点以内,每隔十分钟执行一次 | 0 0 1,15 * 1 命令 | 每月一号和十五号,每周一的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为它们定义的都是天。非常容易让管理员混乱 |
应用实例
案例1:每隔1分钟,就将当前的日期信息,追加到 /tmp/myDate文件中
- 先编写一个文件 /home/myTask1.sh 写入语句 date >> /tmp/myDate.txt
- 给 myTask1.sh 一个可以执行的权限 chmod 744 /home/myTask1.sh
- crontab -e 进入编辑模式
- 输入 */1 * * * * /home/myTask1.sh
- 保存退出 ESC :wq
案例2:每隔1分钟,将当前日期和日历都追加到 /home/myCal 文件中
- 先编写一个文件 /home/myTask2.sh 写入语句 date >> /tmp/myCal.txt 和 cal >> /tmp/myCal.txt
- 给 myTask2.sh 一个可以执行的权限 chmod 744 /home/myTask2.sh
- crontab -e 进入编辑模式
- 输入 */1 * * * * /home/myTask2.sh
- 保存退出 ESC :wq
案例3:每天凌晨2:00 将MySQL数据库 testdb,备份到文件/tmp/mydb.bak中
- 先编写一个文件 /home/myTask3.sh 写入语句 /user/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak 其中 root表示当前用户,proot表示密码
- 给 myTask3.sh 一个可以执行的权限 chmod 744 /home/myTask3.sh
- crontab -e 进入编辑模式
- 输入 0 2 * * * /home/myTask3.sh
- 保存退出 ESC :wq
crond相关指令:
crontab -r 终止任务调度,可以使用指令重启
crontab -l,列出当前有哪些任务调度
service crond restart 重启任务调度
5.7 磁盘分区、挂载
5.7.1 分区基础知识
分区的方式:
mbr分区
最多支持四个主分区
系统只能安装在主分区
扩展分区要占一个主分区
MBR最多支持2TB,但拥有最好的兼容性
gtp分区
支持无限多个主分区
最大支持8E (1EB=1024PB,1PB=1024TB)
5.7.2 Linux分区
原理介绍:
- Linux无论有几个分区,分给哪一个目录使用,它归根到底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
- Linux采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
硬盘说明
- Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
- 对于IDE硬盘,驱动器标识符为"
hdx~ ",其中 "hd"表示分区所在的设备的类型,这里是指IDE硬盘。“x"为盘号(a为基本盘,b为基本从属盘,c为辅助盘,d为辅助从属盘),”~"代表分区,前四个分区用数字1-4表示,它们是主分区或者拓展分区,从5开始就是逻辑分区。例如:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示第二个IDE硬盘上的第二个主分区或拓展分区。 - 对于SCSI硬盘则标识 “
sdx~ ”,SCSI是用 "sd"表示分区所在设备的类型,其余的和IDE硬盘一样
使用 老师不离开指令 lsblk -f 查看系统的分区和挂载情况
5.7.3 给Linux增加一块硬盘
增加一块硬盘 sdb1 1G 挂载在 /home/newDisk文件上
-
虚拟机添加硬盘 -
分区 fdisk /dev/sdb -
格式化 mkfs -t ext4 /dev/sdb1 其中 ext4是分区类型 -
挂载(普通挂载只能一次,挂机之后就没了) 先创建一个文件夹 mkdir newDisk 挂载 mount /dev/sdb1 /home/newDisk -
设置可以自动挂载(永久挂载,系统重启之后可以自动挂载) vim /etc/fsdb 进入文件,然后进行编辑,找到 UID,先把那一行复制,然后将原来的那一行修改 /dev/sdb1 /home/newDisk ext4 …
5.7.4 磁盘查询指令
查询系统整体磁盘使用情况
基本语法:df -h
? df -lh
例如:查询系统整体磁盘使用情况
查询指定目录的磁盘占用情况
基本语法:du -h /目录
选项和参数 -s 指定目录占用大小总汇
? -h 带计量单位
? -a 含文件
? -max-depth=1 子目录深度
? -c 列出明细的同时,增加汇总量
查询 /opt目录占用磁盘情况,深度为1
du -ach --max-depth=1 /opt
工作中常用指令
rm copy tar grep 递归的时候 使用 -r
ls chmod chgrp 递归的时候使用 -R
- 统计/home文件夹下文件的个数
- 统计/home文件夹下目录的个数
- 统计/home文件夹下文件的个数,包括子文件夹里的
- 统计/home文件夹下目录的个数,包括子文件夹里的
- 以树状显示目录结构
grep 过滤指令 “^-” 匹配以 "-"开头的行
ls -l 以列的形式列出 -a 列出所有
wc -l 列出有多少行
wc -w 有多少字,字的区分是以空格、挑格或换行符
ls -l /home | grep "^-" | wc -l
ls -l /home | grep "^d" | wc -l
ls -lR /home | grep "^-" | wc -l
ls -lR /home | grep "^d" | wc -l
tree命令直接写
5.8 网络配置
5.8.1 基础介绍
常用指令 : ifconfig
5.8.2 查看网络IP和网关
查看网络虚拟编辑器
修改IP地址(修改虚拟网卡IP)
可以在虚拟机中修改 184 这个东西,对应Linux虚拟机和vmnet8虚拟网卡的IP
查看网关
网关是什么
网关英文名称为Gateway,又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。
网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器,与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
通俗点形容,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。
网关作用
简单来说,网关是设备与路由器之间的桥梁,由它将不同的网络间进行访问的控制,转换,交接等等。
比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程。
查看Windows的vmnet8网络配置
- ipconfig 指令 查看,在cmd界面输入 ifconfig
- 界面查看
ping测试主机之间网络连通
基本语法:ping 目的主机(测试当前服务器是否可以连接目的主机)
ping www.baidu.com
5.8.3 Linux网络环境配置
自动连接
界面操作,选择 自动连接选项
缺点:Linux启动后会自动获取IP缺点是每次自动获取的IP地址可能不一样。这个不适应于做服务器,因为服务器的IP需要固定的。
指定固定IP地址
说明:直接修改配置文件来指定IP,并可以连接到外网,编辑 vi /etc/sysconfig/network-scripts/ifcfg-eth0
要求:将IP地址配置为静态的,IP地址为192.168.184.xxxx
5.9 进程管理
5.9.1 基本介绍
- 在Linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www的服务器
- 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前屏幕上可以进行操作的。后台进程则是实际在操作,但是由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。
5.9.2 显示系统执行的进程
基本介绍:
ps指令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数
字段 | 说明 |
---|
PID | 进程识别号 | TTY | 终端机号 | TIME | 此进程消耗CPU时间 | CMD | 正在执行的命令或进程名 | USER | 用户名称 | %CPU | 进程占用CPU的百分比 | %MEM | 进程占用的物理内存百分比 | VSZ | 进程占用的虚拟内存大小(单位:KB) | RSS | 进程占用的物理内存大小(单位:KB) | STAT | 进程状态,s:睡眠,r:运行,n:表示进程拥有比普通优先级更低的优先级,z:耗死进程 | START | 进程的启动时间 | TT | 终端名称缩写 | | | | |
参数选项:
ps -a :显示当前终端的所有进程信息
ps -u :以用户的格式显示进程信息
ps -x :显示后台进程运行的参数
5.9.3 终止进程kill和killall
介绍:若是某个进程执行一半需要停止时,或是已经消耗了很大的系统资源时,此时可以考虑停止该进程
基本语法:
kill [选项] 进程号 (通过进程号杀死进程)
killall 进程名称 (通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
常用选项:
-9 :表示强制杀死进程
例如:
一般先通过 ps -aux | grep xxxx 找到xxxx的指令的进程号
中断远程登录 sshd 的进程, kill 进程号 ,想要再次打卡的话,使用指令 service sshd start
中断多个gedit编辑器 killall gedit
强制杀掉一个终端:比如同时开启两个终端(Ctrl+Alt+T)
5.9.4 服务管理
服务的本质就是进程,但是在后台运行,通常会监听某个端口,等待其他程序的请求,比如MySQL,sshd,防火墙等。因此我们称为守护进程,是Linux中非常重要的知识点
**service管理指令:**Ubuntu和centos指令不一样
service 服务名 [start | stop | restart | reload | status]
查看当前防火墙的状态,关闭防火墙,开启防火墙
sudo ufw status: 查看防火墙状态,inactive是关闭状态,active是开启状态
sudo ufw enable:开启防火墙
sudo ufw default deny:启动默认防御,作用:关闭所有外部对本机的访问(本机访问外部正常)
sudo ufw disable:关闭防火墙
sudo ufw allow|deny [service]:禁用防火墙
sudo ufw allow 80:允许外部访问80端口,协议包含tcp和udp
sudo ufw allow 80/tcp:允许其它主机使用tcp协议访问本机80端口
sudo ufw delete allow 80:禁止外部访问80 端口
sudo ufw allow from 192.168.1.1:允许此IP访问所有的本机端口
sudo ufw deny smtp:禁止外部访问smtp服务
sudo ufw reject out smtp:禁止访问外部smtp端口,不告知“被防火墙阻止”
sudo ufw deny out to 192.168.1.1:禁止本机192.168.1.1对外访问,告知“被防火墙阻止”
sudo ufw delete allow smtp:删除上面建立的某条规则
sudo ufw delete deny 80/tcp:要删除规则,只要在命令中加入delete就行了
sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22:要拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口
可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):
sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16
实例:
1.设置允许访问 SSH
sudo ufw allow 22/tcp
2.设置允许访问 http
sudo ufw allow 80/tcp
3.设置允许访问 https
sudo ufw allow 443/tcp
4.设置允许访问 pptp
sudo ufw allow 1723/tcp
chkconfig指令:给每个服务的各个运行级别设置自启动/关闭
chkconfig --list | grep sshd grep 过滤,只关心 sshd的情况
chkconfig 服务名 --list 查看只关心 服务名的 情况
chkconfig --level 5 服务名 on / off
chkconfig --level 5 sshd off 解释:sshd在运行级别为5的时候,不要自启动
应用示例:
chkconfig --list
sudo sshd status
chkconfig --level 5 sshd off
chkconfig --level 5 ufw off 在运行级别为5的时候,关闭防火墙
chkconfig ufw off 在所有运行级别下关闭防火墙
5.9.4 动态监控进程
top 和 ps 命令很相似,它们都是用来显示正在执行的进程。top与ps最大的不同之处在于top在执行一段时间之后可以更新它正在运行的进程。
基本语法:
top [选项]
这些选项可以在 top 一起写,也可以先top之后,再输入这些选项,同样能够出现效果
操作 | 功能 |
---|
P | 以CPU使用率排序,默认就是此项 | M | 以内存的使用率排序 | N | 以PID排序 | q | 退出top | | |
监视特定用户
top 然后回车会出现进程的情况,如果此时再输入 u,会出现让你选择监视哪个用户的功能 user
如果此时输入 k ,意思是杀死哪个进程 kill
5.9.5 监控网络状态
查看系统网络的状态 netstat,可以看到哪些IP与本机有连接
基本语法:
netstat [选项]
netstat -anp
-an 按一定顺序排列输出
-p 显示哪个进程在调用
例如:请查看服务名为sshd服务的信息
netstat -anp | grep sshd
5.10 RPM和YUM
Ubuntu中的RPM需要转换为 deb,
RPM包的管理
一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM拓展名的文件。
RPM是RedHat Package Manager的缩写,类似Windows下的step.exe,通用的工具。
rpm简单查询指令
查询已安装的RPM列表 rpm -qa | grep xxx 查询的名字
rpm -qi xxxx 查询包的信息
卸载 rpm包
rpm -e RPM包的名称
安装rpm包
参数说明 i – install v = verbose 提示 h = hash 进度条
rpm -ivh packageName.rpm
deb的使用
deb在Ubuntu中使用,等同于RPM包
deb包的各种指令
安装deb软件包
sudo dpkg -i xxx.deb
删除软件包
sudo dpkg -r xxx.deb
连同配置文件一起删除
sudo dpkg -r --purge xxx.deb
sudo dpkg –P xxx.deb
查看软件包信息
sudo dpkg -info xxx.deb
查看文件拷贝详情
sudo dpkg -L xxx.deb
查看系统中已安装软件包信息
sudo dpkg -l
yum管理使用
yum是一个shell前端软件包管理器。可以自动处理依赖关系
Yum在centos中使用较多,乌班图不用这个也许
基本指令:查询和安装
yum -list 列出所有信息
yum list | grep firefox 查看单独的软件信息
yum install software 安装命令
5.11 Shell使用
Shell是一个命令行解释器,他为用户提供了一个向Linux发送请求以便运行程序的界面系统级程序
Shell脚本执行方式
脚本以 #!/bin/bash 开头
需要可执行权限
编写一个脚本
输出 “Hello World!”
常用执行方式
方式1:(输入脚本的绝对路径或相对路径)
? 首先要赋予myShell01.sh脚本的 +x权限 chmod 744 myShell01.sh
? 执行脚本 直接路径就能执行 ./myShell01sh 或者 /home/wusuxia/myShell01.sh
方式2:(sh + 脚本) (不推荐)
? 不用赋予脚本 +x权限,直接执行即可
? sh ./myShell01.sh
Shell变量
Linux Shell的变量分为 系统变量和用户自定义变量
系统变量
例如:$PATH $USER $HOME $PWD $SHELL 等
显示当前shell 所有的变量 set
用户自定义变量
基本语法:
定义变量: 变量=值
撤销变量:unset 变量
声明静态变量:readonly 变量,注意:不能unset
变量定义的规则
变量名称可以由字母、数字、下划线组成,但是不能以数字开头
等号两侧不能有空格 name = “” 不能这样
变量名称一般习惯为大写
将命令的返回值赋给变量
A=`ls -l /home` 反引号 esc键下面的那个键
MY_DATA=$(date) $加上() 也可以
?
设置环境变量
基本知识
基本语法:
- export 变量名=变量值 (将shell变量输出为环境变量)
- source 配置文件 (让修改后的配置信息立即生效)
- echo $变量名 (查询环境变量的值)
快速入门:
- 在/etc/profile 文件中定义 TOMCAT_HOME环境变量
- 查看环境变量TOMCAT_HOME的值
- 在另一个shell程序中使用TOMCAT_HOME
注意:在输出 JAVA_HOME 环境变量时,不需要让其生效
多行注释
单行注释 # 警号键
:<<!
代码块
!
位置参数变量
介绍:
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如:./myShell01.sh 100 200 ,这个就是一个执行shell的命令行,可以在myShell01.sh脚本中获取到参数信息
基本语法:
$n n为数字,$0 表示命令本身,$1 ~
9
表
示
第
一
到
第
九
个
参
数
,
十
以
上
的
参
数
需
要
用
大
括
号
包
含
,
如
9 表示第一到第九个参数,十以上的参数需要用大括号包含,如
9表示第一到第九个参数,十以上的参数需要用大括号包含,如{10}
?
这
个
变
量
代
表
命
令
行
中
所
有
的
参
数
,
* 这个变量代表命令行中所有的参数,
?这个变量代表命令行中所有的参数,* 把所有的参数看成一个整体
$@ 这个变量代表命令行中所有的参数,不过 $@ 把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
实际案例:
编写一个shell脚本 positionPara.sh ,在脚本中获取到命令行的各个参数信息
vim positionPara.sh
#!/bin/bash
#获取到各个参数信息
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
在shell终端输入
./positionPara.sh 10 90 接下来出现如下信息
./positionPara.sh 10 90
10 90
10 90
参数个数=2
shell预定义变量
基本介绍:
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法:
$$ 获取当前进程的进程号
$! 获取后台进行的最后一个进程的进程号
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非 0(具体哪个数,由命令自己决定),则证明上一个命令执行不正确
简单使用:
#后台运行的方式运行 myShell01.sh ./myShell01.sh & 这样就是后台运行
Ctrl + c 可以退出程序运行,比如在这里的后台运行 myShell01.sh 脚本时候,退不出来
vim preVar.sh
#!/bin/bash
echo "$$"
#后台运行的方式运行 myShell01.sh
./myShell01.sh & 这样就是后台运行
echo "执行的值为:$!"
echo "$?"
Shell运算符
基本语法:
"$((运算式))" 或 "$[运算式]"
`expr m + n` 注意 expr 运算符间要有空格
`expr m - n`
`expr \*, / , %` 乘、除、取余
应用示例:
计算 (2 + 3) x 4
条件判断
基本语法:
[ condition ] (注意condition的前后要有空格)
#非空返回TRUE,可以使用 $? 验证 (0为TRUE,> 1为FALSE)
应用示例:
[ atguigu ] 返回TRUE
[] 返回FALSE
[ condition ]&&echo OK || echo notok 条件满足执行后面的语句
判断语句
两个整数的比较
=字符串比较
-lt 小于 [ 23 -lt 34 ]
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
按照文件权限进行判断
-r 有读的权限 [ -r 文件 ]
-w 有写的权限
-x 有执行的权限
按照文件类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在 [ -e 文件 ]
-d 文件存在并且是一个目录
应用示例:
"ok" 是否等于 "ok"
23 是否大于 22
判断 /root/install.log 目录中的文件是否存在
流程控制
流程控制if
判断语句基本语法:
if [ 条件判断 ] then
程序
fi
或者
if [ 条件判断 ]
then
程序
elif [ 条件判断 ]
then
程序
fi
流程控制case
基本语法:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
....省略其他分支
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
案例:
当命令行参数是1时,输出"周一",是2时,输出"周二",其他情况输出 "other"
case $1 in
"1")
echo "Monday"
;;
"2")
echo "Thrusday"
;;
*)
echo "other"
;;
esac
循环
for循环
基本语法1:
for 变量 in 值1 值2 值3...
do
程序
done
for i in "$*"
do
echo "the number is $i"
done
for j in "$@"
do
echo "the number is $j"
done
基本语法2:
for((初始值;循环控制条件;变量变化))
do
程序
done
应用示例:
从1加到100的值输出显示 [这里可以看出 $* 和 $@ 的区别]
SUM=0
for ((i=1;i<100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum = $SUM"
while循环
基本语法:
while [ 条件判断 ]
do
程序
done
案例:从命令行输入一个数 n ,统计从 1 +...+ n 的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i++1]
done
echo "sum = $SUM"
读取控制台输入
在交互的过程中输入参数
基本语法:
read[选项](参数)
选项:
-p:指定读取值时的提示符
-t:指定读取值时的等待时间(秒),如果没有在指定的时间内输入,就不再等待了
参数
变量:指定读取的变量名
案例1:读取控制台输入一个 num 值
案例2:读取控制台输入一个 num 值,在10秒内输入
read -p "Please input your number: " NUM1
read -t 10 -p "Please input your number: " NUM2
函数
函数有两种:系统函数和自定义函数
系统函数
basename函数基本语法
功能:返回完整路径最后 / 部分,常用于获取文件名
basename [pathname][suffix]
basename [string][suffix] 功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符
然后将字符显示出来
选项:
suffix 为后缀,如果 suffix被指定了,basename会将pathname或string中的suffix去掉
应用示例:
请返回 /home/wusuxia/readDemo.sh 的 "readDemo.sh" 部分
终端直接输入指令
basename /home/wusuxia/readDemo.sh 得到 readDemo.sh
basename /home/wusuxia/readDemo.sh .sh 得到 readDemo
dirname 函数基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件的绝对路径 功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下 的路径(目录部分)
dirname /home/wusuxia/readDemo.sh 返回 /home/wusuxia
自定义函数
基本语法:
[ function ] funname[()]
{
Action;
[return int;]
}
调用的时候直接写函数名:funname
案例:计算输入两个参数的和
function getSum(){
SUM=$[$n1+$n2]
echo "sum is = $SUM"
}
read -p "input the first number n1: " n1
read -p "input the second number n2: " n2
#调用函数 感觉很奇怪,和之前学的编程都不一样 ^<>^
getSum $n1 $n2
shell编程综合案例
需求分析:
- 每天凌晨2:10备份数据库 atguiguDB 到 /data/backup/db
- 备份开启和备份结束能够给出相应的提示信息
- 备份后要求以备份时间为文件名,并打包成 .tar.gz 形式,比如:2021-08-15_230201.tar.gz
- 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
BACKUP=/data/backup/db
DATETIME=$(date +%Y_%m_%d_%H%M%S)
echo "======== start backup ========"
echo "======== the path of backup is $BACKUP/$DATETIME.tar.gz"
HOST=localhost
DB_USER=wusuxia
DB_PAD=123456
DATDBASE=atguiguDB
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
rm -rf $BACKUP/$DATETIME
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
然后再次使用 crontab -e 指令
|