LINUX的学习
linux基础篇
VM 和CentOS的安装
1、vm的安装
# 下载
l.官方地址:https:/www.vmware..com/cn.html
2.其它地址:https:www.nocmd.com/windows/.740.html
# 安装步骤
1.去BIOS里修改设置开启虚拟化设备支持(f2,f10)
2.安装虚拟机软件(vm15.5),演示一把,1.在BIOS开启CPU虚拟化支持
3.https://jingyan.baidu.com/article/ab0b56305f2882c15afa7dda.html #启动BIOS的虚拟化设置 | 开启CPU虚拟化支持
#详细步骤参照网盘Markdown文件
2、CentOS的安装
# Centos下载地址
1.CentOS-7-x8664-DVD-1810.iso CentOS7.6DVD版4G(日前主流的生产环境)
http://mirrors.163.com/centos/7.6.1810/isos/x86 64/CentOS-7-x86 64-DVD-1810.iso
2.CentOS-8.1.1911-x8664-dvdl.iso CentOS8.1DVD版8G(未来的主流.)
https://mirrors.aliyun.com/centos/8.1.1911/isos/x86 64/CentOS-8.1.1911-x86 64-dvd1.iso
#详细步骤参照网盘Markdown文件
虚拟机的快照和克隆
快照:存放的一个状态,即使后面做错了,也能利用快照恢复之前的状态
克隆:相当于拷贝,有两种方式:一、直接复制整个文件夹 二、利用VM克隆
虚拟机的删除:磁盘删除即可,或者直接手动删除虚拟系统对应的文件夹即可
1) 安装好系统以后,先做一个快照 A
2) 进入到系统。创建一个文件夹,再保存一个快照 B
3) 回到系统刚刚安装好的状态 , 即 快照 A
4) 试试看,是否还能再次回到快照 B
5) 示意图
安装vmtools
1) 进入 centos
2) 点击 vm 菜单的->install vmware tools
3) centos 会出现一个 vm 的安装包, xx.tar.gz
4) 拷贝到 /opt
5) 使用解压命令 tar, 得到一个安装文件
6) cd /opt [进入到 opt 目录]
7) tar -zxvf xx.tar.gz
8) 进入该 vm 解压的目录 , /opt 目录下
9) cd vmware...
10) 安装 ./vmware-install.pl
11) 全部使用默认设置即可, 就可以安装成功
12) 注意:安装 vmtools 需要有 gcc . 13) gcc -v
14) 示意图
设置共享文件夹
1) 菜单->vm->setting, 如图设置即可注意:设置选项为 always enable ,这样可以读写了
2) windows 和 centos 可共享 d:/myshare 目录可以读写文件了
3) 共享文件夹在 centos
Linux 目录结构
1) linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
2) 深刻理解 linux 树状文件目录是非常重要的,这里我给大家说明一下。
3) 记住一句经典的话:在 Linux 世界里,一切皆文件(!!)
1) /bin [常用] (/usr/bin 、 /usr/local/bin) 是 Binary 的缩写, 这个目录存放着最经常使用的命令
2) /sbin (/usr/sbin 、 /usr/local/sbin) s 就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序。
3) /home [常用] 存放普通用户的主目录,在 Linux 中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名
4) /root [常用] 该目录为系统管理员,也称作超级权限者的用户主目录
5) /lib 系统开机所需要最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
6) /lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
7) /etc [常用] 所有的系统管理所需要的配置文件和子目录, 比如安装 mysql 数据库 my.conf
8) /usr [常用] 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与 windows 下的programfiles 目录。
9) /boot [常用] 存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件
10) /proc [不能动] 这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
11) /srv [不能动] service 缩写,该目录存放一些服务启动之后需要提取的数据
12) /sys [不能动]这是 linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统sysfs =》【别动】
13) /tmp 这个目录是用来存放一些临时文件的
14) /dev 类似于 windows 的设备管理器,把所有的硬件用文件的形式存储
15) /media [常用] linux 系统会自动识别一些设备,例如 U 盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下
16) /mnt [常用] 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。 d:/myshare
17) /opt 这是给主机额外安装软件所存放的目录。如安装 ORACLE 数据库就可放到该目录下。默认为空
18) /usr/local [常用] 这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
19) /var [常用] 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
20) /selinux [security-enhanced linux] SELinux 是一种安全子系统,它能控制程序只能访问特定文件, 有三种工作模式,可以自行设置.
- 远程登录
- xshell与xftp
vi和vim编辑器的基本使用
vim学习目标:基本掌握就行,实际开发基本还是在自己熟悉的环境,用得少
vim三种模式:插入模式(esc)<–>(i I o O a A)一正常模式(:wq q q!)<–>(esc)命令行模式
vim快捷键的练习
1、拷贝当前行yy,拷贝当前向下的5行5yy,粘贴p
2、删除当前行dd,删除当前向下的5行5dd
3、在文件中查找某个单词,命令行模式下:/单词–回车,输入n查找下一个
4、设置文件的行号。取消文件的行号【命令行下:set nu 和set nonu】
5、编辑/etc/profile 文件,在一般模式下,使用快捷键到文档的最末行【G】和最首行【g】
6、在一个文件中输入“hello”,然后又撤销这个动作【u】
7、编辑/etc/profile文件,并将光标移动到 20行, 输入 20 然后 shft+g
8、更多的看整理文档
LINUX的关机、重启、用户登录注销
shutdown - h now #立即进行关机
shutdown -h 1 #1分钟后关机
shutdown -r now #现在重新启动计算机
halt #关机
reboot #重启
sync #将内存数据同步到硬盘 尽量每次结束前都执行下
“su – 用户名” 命令切换成系统管理员
logout 注销用户 在运行级别3-图形界面无效
Linux 用户管理
useradd 用户名 #添加用户 默认在家目录下 在/home/用户名
useradd -d 指定目录 新的用户名 #给新创建的用户指定目录
passwd 用户名 #用户密码
pwd #显示当前用户所在的目录
userdel 用户名 #删除用户不删除家目录
userdel -r 用户名 #删除用户和家目录
一般情况下保留家目录
id 用户名 #查询用户信息
su -用户名 #切换用户 权限高到权限低不用输入密码 回来logout exit
whoami/who am i #查看当前用户
用户组
groupadd 组名 #新增组
groupdel 组名 #删除组
useradd -g 用户组 用户名 #增加用户时指定组
usermod -g 用户组 用户名 #修改用户的组
●/etc/passwd文件
用户(usr)的配置文件,记录用户的倍种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:生目录:登录shell
●/etc/shadow文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时
间:失效时间:标志
●/etc/group文件
组(group)的配置文件,记录Liux包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
LINUX实用篇
指定运行级别
●基本介绍
运行级别说明:
0:关机
1:单用户【找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户--忽略不计
5:图形界面
6:系统重启
常用运行级别是3和5,也可以指定默认运行级别,后面演示
●应用实例
命令:init[0123456]应用案例:通过init来切换不同的运行级别,比如动5-3,然后关机。
●CentOS7后运行级别说明
在/etc/inittab文件中.
进行了简化,如下:
multi-user.target:analogous to runlevel 3
graphical.target:analogous to runlevel 5
#To view current default target,run:
systemctl get-default
#To set a default target,run:
systemctl set-default TARGET.target #设置运行级别 TARGET 改成multi-user 就是3 graphical就是5
systemctl set-default multi-user.target #设置运行级别3
systemctl set-default graphical.target #设置运行级别5
找回用户密码(单用户模式下)
1、首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。如图
2、进入编辑界面,使用键盘上的上下键把光标往下移动,找到以““ Linux16”开头内容所在的行数”,在行的最后面输入: init=/
bin/sh。如图
3、接着,输入完成后,直接按快捷键:Ctrl+x 进入单用户模式。
4、接着,在光标闪烁的位置中输入:mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键(Enter)。如图
5、在新的一行最后面输入:passwd, 完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可(韩顺平提示: 密码长度最好 8 位以上,但不是必须的), 密码修改成功后,会显示 passwd…..的样式,说明密码修改成功
6、接着,在鼠标闪烁的位置中(最后一行中)输入:touch /.autorelabel(注意:touch 与 /后面有一个空格),完成后按键盘的回车键(Enter)
7、继续在光标闪烁的位置中,输入:exec /sbin/init(注意:exec 与 /后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(提示:这个过程时间可能有点长,耐心等待),完成后,系统会自动重启, 新的密码生效了
帮助指令
●man获得帮助信息
基本语法:man[命令或配置文件](功能描述:获得帮助信息)
案例:查看ls命令的帮助信息man ls
在linux下,隐藏文件是以.开头的,选项可以组合使用。如ls -al 或ls -la/root
●help指令
基本语法:help命令(功能描述:获得shell内置命令的帮助信息)
●应用实例
案例:查看cd命令的帮助信息
●百度帮助更直接
如果英语不太好的,也可以直接百度靠谱。
文件目录指令
●pwd指令
基本语法:pwd
(功能描迷:显示当前工作目录的绝对路径)
应用实例:案例:显示当前工作目录的绝对路径
●ls指令
基本语法:ls [选项][目录或是文件]
常用选项
-a:显示当前目录所有的文件和目录,包括隐藏的。
-l:以列表的方式显示信息
应用实例:案例:查看当前目录的所有内容信息 ls -a
ls -lh /home/ h的参数会将文件大小以人容易看清的单位(M、G等)显示
●cd指令
基本语法:cd[参数](功能描述:切换到指定目录)
理解:绝对路径和相对路径
cd ~或者cd : 回到自己的家目录,比如你是root,cd~到/root
cd.. 回到当前目录的上一级目录
●应用实例
案例1:使用绝对路径切换到root目录 cd /root
案例2:使用相对路径到/root目录,比如在/home/tom ,cd ../../root/
案例3:表示回到当前目录的上一级目录 cd ..
案例4:回到家目录 cd ~
●mkdir指令
mkdir指令用于创建目录
基本语法:mkdir [选项] 要创建的目录
常用选项
-P:创建多级目录
应用实例
案例1:创建一个目录/home/dog
mkdir /home/dog
案例2:创建多级目录/home/animal/tiger
mkdir -p /home/animal/tiger
●rmdir指令
rmdir指令删除空目录
基本语法: rmidir[选项] 要删除的空目录
应用实例:案例:删除一个目录home/dog
rmdir /home/dog
使用细节
rmdir 删除的是空目录,如果目录下有内容时无法删除的。
提示:如果需要删除非空目录,需要使用rm -rf要删除的目录
●touch指令
touch指令创建空文件
基本语法:touch 文件名称
应用实例:案例:在home目录下,创建一个空文件hello.txt
touch hello.txt
●cp指令
cp指冷拷贝文件到指定目录
基本语法: cp [选项] source dest
常用选项
-r:递归复制整个文件夹
应用实例
案例1:将/home/hello.txt拷贝到/home/bbb目录下
cp hello.txt bbb/
案例2:递归复制整个文件夹,举例 比如将/home/bbb 整个目录,拷贝到/opt
cp -r /home/bbb/ /opt/
使用细节:强制覆盖不提示的方法:cp cp -r /home/bbb/ /opt/
●rm指令
说明:rm指令移除文件或目录
基本语法:rm [选项] 要删除的文件或目录
常用选项
-r:递归删除整个文件夹
-f:强制删除不提示
应用实例
案例1:将/home/hello.txt删除
rm /home/hello.txt
案例2:递归删除整个文件夹/home/bbb
rm -rf /home/bbb [删除整个文件夹,不提示]
使用细节:强制删除不提示的方法:带上f参数即可
●mv指令
mv移动文件与目录或重命名
基本语法
mv oldNameFile newNameFile (功能描述:重命名)
mv/temp/movefile /targetFolder (功能描述:移动文件)
应用实例
案例l:将/home/cat.txt文件重新命名为pig.txt
mv cat.txt pig.txt
案例2:将/home/pig.txt文件移动到/root目录下
mv /home/pig.txt /root/
案例3:移动整个目录 ,比如将/opt/bbb 移动到/home下
mv bbb/ /home/
●cat指令
cat查看文件内容
基本语法:cat [选项] 要查看的文件
常用选项
-n:显示行号
应用实例:案例1:/etc/profile文件内容,并显示行号
使用细节:cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more
cat -n /etc/profile | more
●more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明
基本语法: more 要查看的文件
应用实例:案例:采用more查看文件 /etc/profile
操作说明
# 空格键space 下一页 enter 下一行 q 立刻离开 CTRL+f 向下滚动一屏 CTRL+b 返回上一屏 = 输出当前行号 :f输出文件名和当前行号
●Iess指令
Iess指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各
种显示终端。Iss指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示
需要加载内容,对于显示大型文件具有较高的效率。
基本语法:less要查看的文件
应用实例:案例:采用less查看一个大文件文件 /opt/杂文.txt
操作说明:
空格键space 下一页 [pagedown] 下一页 [pageup]上一页
/字串 向下搜索[字串] 向下搜索n 向上搜索N
?字串 向上搜索[字串] 向下搜索n 向上搜索N
q 离开
●echo指令
echo输出内容到控制台
基本语法:echo[选项] [输出内容】
应用实例
案例:使用echo指令输出环境变量, 比如输出$PATH $HOSTNAME
echo $PATH ; echo $HOSTNAME
案例:使用echo指令输出hello,world!
echo "hello,world!"
●head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
基本语法:head 文件 (功能描述:查看文件头10行内容)
head -n 5文件 (功能描述:查看文件头5行内容,5可以是任意行数)
应用实例:案例:查看/etc/profile的前面5行代码
head -n 5 /etc/profile
●tail指令
tai用于输出文件中尾部的内容,默认情况下tai指令显示文件的前10行内容。
基本语法:
1)tail 文件 (功能描述:查看文件尾10行内容)
2)tail-n 5文件 (功能描述:查看文件尾5行内容,5可以是任意行数)
3)tail-f 文件 (功能描述:实时追踪该文档的所有更新)
应用实例
案例1:查看/etc/profile最后5行的代码 tail -n /etc/profile
案例2:实时监控mydate.txt,看看到文件有变化时,是否看到,实时的追加日期
tail -f mydate.txt
●>指令和>>指令
>输出重定向和>>追加
基本语法
1)ls -l > 文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
2)ls -al >> 文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
3)cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)
4)echo "内容" >> 文件
应用实例
案例1:将home目录下的文件列表写入到/home/info.txt中
ls -l /home/ > /home/info.txt #如果info.txt不存在,则自动创建
案例2:将当前日历信息追加到home/mycal文件中
cal >> home/mycal
●ln指令
软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
基本语法:ln -s [原文件或目录][软链接名] (功能描述:给原文件创建一个软链接)
应用实例
案例1:在/home目录下创建一个软连接myroot,连接到/root目录
ln -s /root /home/myroot
案例2:删除软连接myroot
rm /home/myroot
细节说明:当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。
●history指令
查看已经执行过历史命令,也可以执行历史指令
基本语法:history (功能描述:查看已经执行过历史命令)
应用实例
案例1:显示所有的历史命令 history
案例2:显示最近使用过的10个指令。 history 10
案例3:执行历史编号为5的指令 !5
●date指令-显示当前日期
基本语法
1)date (功能描述:显示当前时间)
2)date +%Y (功能描述:显示当前年份)
3)date +%m (功能描述:显示当前月份
4)date +%d (功能描述:显示当前是哪一天)
5)date"+%Y-%m-%d%H:%M:%s"((功能描述:显示年月日时分秒)
应用实例
案例1:显示当前时间信息 date
案例2:显示当前时间年月日 date "+%Y-%m+%d"
案例3:显示当前时间年月日时分秒 date"+%Y-%m-%d%H:%M:%s"
●date指令-设置日期
基本语法:date -s 字符串时间
应用实例:案例1:设置系统当前时间,比如设置成2021-11-11 11:22:22
date -s "2021-11-11 11:22:22"
●cal指令 查看日历指令
基本语法:cal [选项] (功能描述:不加选项,显示本月日历)
应用实例
案例1:显示当前日历 cal
秦例2:显示2020年日历 cal 2020
查找类指令
●find指令
fid指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法:find [搜索范围] [选项]
选项:
-name <查询方式> 按照指定的文件名查找模式查找文件
-user <用户名> 查找指定用户名所有文件
-size <文件大小> 按照指定的文件大小查找文件
应用实例
案例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 +2000M
●locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数
据库实现快速定位给定的文件。生octe指令无需遍历整个文件系统,查询速度较快。为了保证查询结果
的准确度,管理员必须定期更新locate时刻
基本语法:locate 搜索文件
特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建ocate数据库,
应用实例
秦例l:请使用locate指令快速定位hello.txt文件所在目录
updatedb
locate hello.txt
●which指令 可查看某个指令在哪个目录下
which ls
●grep指令和管道符号
grp过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
基本语法:grep[选项] 查找内容 源文件
选项:
-n 显示匹配行及行号
-i 忽略字母大小
应用实例:案例1:请在hello.txt文件中,查找"yes”所在行,并且显示行号
grep -n "yes" /home/hello.txt
cat /home/hello.txt | grep -n "yes"
压缩和解压指令
●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
●zip/unzip指令
zp用于压缩文件,uzip用于解压的,这个在项目打包发布中很有用的
基本语法
zip [选项列] XXX.zip 将要压缩的内容 (功能描迷:压缩文件和目录的命令)
unzip[选项列] XXX.zip (功能描述:解压缩文件)
zip常用选项:
-r:递归压缩,即压缩目录
unzip的常用选项
-d <目录> :指定解压后文件的存放目录
应用实例
案例1:将/home下的所有文件进行压缩成myhome.zip
zip -r myhome.zip /home/
案例2:将myhome.zip解压到/opt/tmp目录下
unzip -d /opt/tmp/ /home/myhome.zip
●tar指令
tar指令是打包指令,最后打包后的文件是,tar.gz的文件。
基本语法
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
案例2:将/home的文件夹压缩成myhome.tar.gz
tar -zcvf myhome.tar.gz /home/
案例3:将pc.tar.gz解压到当前目录,切换到/opt/
tar -zxvf pc.tar.gz
案例4:将myhome.tar.gz解压到/opt/tmp2目录下
tar -zxvf myhome.tar.gz -C /opt/tmp2
Linux实操篇
组管理和权限管理
●查看文件的所有者
指令:ls-ahl
●修改文件所有者 指令:chown用户名文件名
●应用案例
要求:使用root创建一个文件apple,txt,然后将其所有者修改成tom
chown tom apple.txt
●基本指令
groupadd 组名
应用实例
创键一个组,monster
groupadd monster
创建一个用户fox,并放入到monster组中
useradd -g monster fox
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。
●查看文件/目录所在组
基本指令 Is -ahl
●修改文件所在的组
基本指令:chgrp 组名 文件名
应用实例
使用root用户创建文件orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到fruit组。
groupadd fruit
touch orange.txt
chgrp fruit orange.txt
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组。
●改变用户所在组
1.usermod -g 组名 用户名
2.usermod -d 目录名 用户名 改变该用户登陆的初始目录
●应用实例
将zW这个用户从原来所在组,修改到wudang组。
●权限的基本介绍
ls-l中显示的内容如下:
-rwxrw-r--1 rootroot 1213 Feb 2 09:39 abc
0-9位说明
1. 第0位确定文件类型(d,-,l,c,b)
l是链接,相当于windows的快捷方式
d是目录,相当于windows的文件夹
c是字符设备文件,鼠标,健盘
b是块设备,比如硬盘
2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限。---User
3.第4-6位确定所属组(同用户组的)拥有该文件的权限,---group
4.第7-9位确定其他用户拥有该文件的权限---Other
●rwx作用到文件
1.[r]代表可读(read):可以读取,查看
2.[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所
在的目录有写权限,才能删除该文件,
3.[x]代表可执行(execute):可以被执行
●rwx作用到目录
1.[r]代表可读(read):可以读取,ls查看目录内容
2.[w]代表可写(write):可以修改,对目录内创建+删除+重命名目录
3.[x]代表可执行(execute):可以进入该目录
●ls-l中显示的内容如下:
-rwxrw-r--1 rootroot 1213 Feb 2 09:39 abc
10个字符确定不同用户能对文件干什么
第一个字符代表文件类型:-ldcb
其余字符每3个一组(rwx)读(r)写(w)执行(x)
第一组rWX:文件拥有者的权限是读、写和执行
第二组rw-:与文件拥有者同一组的用户的权限是读、写但不能执行
第三组r--:不与文件拥有者同组的其他用户的权限是读不能写和执行
可用数字表示为:r=4,w=2,X=1因此rwx=4+2+1=7
其它说明
1 文件:硬连接数或目录:子目录数
root 用户
root 组
1213 文件大小(字节,如果是文件夹,显示4096字节
Feb209:39 最后修改日期
abc 文件名
●修改权限
●基本说明:
通过chmod指令,可以修改文件或者目录的权限。
●第一种方式:+、-、=变更权限
u:所有者 g:所有组 o其他人 a:所有人(u、g、o的总和)
1)chmod u=rwX,g=rX,0=X 文件/目录名
2)chmod o+W 文件/目录名
3)chmod a-x 文件/目录名
案例演示
1)给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。
chmod u=rwx,g=rx,o=rx adc
2)给abc文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc
3)给abc文件的所有用户添加读的权限
chmod a+r abc
●第二种方式:通过数字变更权限
r=4 W=2 X=1 rwx=4+2+1=7
chmod u:=rwX,g=rx,o=x 文件目录名
相当于chmod751文件目录名
案例演示:要求:将home/abc.txt文件的权限修改成rwx-xr-X,使用给数字的方式实现:
chmod 751 /home/abc.txt
●基本介绍
chown newowner文件/目录 改变所有者
chown newowner:newgroup 文件/目录 改变所有者和所在组
-R 如果是目录 则使其下所有子文件或目录递归生效
案例演示
请将home/abc.txt文件的所有者修改成tom
chown tom /home/abc.txt
请将/home/kkk目录下所有的文件和目录的所有者都修改成tom
chown -R /home/kkk
●基本介绍 修改文件/目录所在组
chgrp newgroup 文件/目录 改变所有组
案例演示
请将home/abc.txt文件的所在组修改成shaolin(少林)
chgrp shaolin /abc.txt
请将home/kkk目录下所有的文件和目录的所在组都修改成shaolin(少林)
chgrp -R shaoli /home/kkk
案例1:
police bandit
jack,jerry:警察
h,xq:土匪
1.创键组
groupadd police
groupadd bandit
2.创健用户
useradd -g police jack ;useradd -g policy jerry
useradd -g bandit h ;useradd -g bandit xq
3.jack创键一个文件,自己可以读写,本组人可以读,其它组没人任何权限
jack: touch jack.txt
chmod 640 jack.txt
4.jack修改该文件,让其它组人可以读,本组人可以读写
jack:chmod o=r,g=rw jack.txt
5.xh投靠警察,看看是否可以读写.
usermod -g police h
案例2
·练习文件权限管理[课堂练习],完成如下操作
1.建立两个组(神仙(sx),妖怪yg))
groupadd sx ;groupadd yg
2.建立四个用户(唐僧,悟空,八戒,沙僧)
useradd tangseng;useradd wukong.useradd bajie,useradd saseng
3.设置密码
4。把悟空,八戒放入妖怪,唐僧沙僧在神仙
usermod -g yg wukong ;usermod -g yg bajie
usermod -g sx tangseng;usermod -g sx saseng
5.用悟空建立一个文件(monkey.java该文件要输出i am monkey)
wukong:vim mokey.java
i am monkey
cat mokey.java
6.给八戒一个可以rw的权限
chmod g+rw mokey.java
7.八戒修改monkey.java对ava加入一句话(i am pig)
wukong:chmod g+rxr wukong
bajie:vim monkey.java
i am pig
8。唐僧沙僧对该文件没有权限
9.把沙僧放入妖怪组
usermod -g yg saseng
10.让沙僧修改该文件monkey.java,加入一句话("我是沙僧,我是妖怪!"):
vim monkey.java
"我是沙僧,我是妖怪!"
11.对文件夹rwx的细节讨论和测试
x:表示可以进入到该目录,比如cd
r:表示可以ls
w:表示可以删除或者创建文件
Crond任务调度
crontab进行定时任务的设置
●概述
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
个别用户工作:个别用户可能希望执行某些程序,比如对ysq数据库的备份。
·基本语法
crontab [选项]
·常用选项
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
●快速入门
设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab-e命令。
接着输入任务到调度文件
如:*/1****ls -l /etc/>/tmp/to.txt
意思说每小时的每分钟执行ls-l/etc/>/tmp/to.txt命令
参数细节说明
第一个”*“ 一小时当中的第几分钟 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·*·*命令”,代表每隔10分钟就执行一端命令
●应用实例
案例1:每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中
*/1****date >> /tmp/mydate
案例2:每隔1分钟,将当前日期和日历都追加到/home/mycal文件中
先写脚本,给脚本增加执行权限
crontab -e 增加 */1**** /home/my.sh
案例3:每天凌晨2:00将mysql数据库testdb,备份到文件中。题示:指令为
mysql dump-u root-p密码数据库>>home/db.bak
crontab -e
0 2 *** mysql dump-u root-p密码数据库>>home/db.bak
●crond相关指令
conrtab-r:终止任务调度。
crontab-:列出当前有那些任务调度
service crond restart[重启任务调度]
at定时任务
●基本介绍
1.at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
2.默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前
时间匹配,则运行此作业。 务了
4.在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
ps -ef 查看当前的进程
ps -ef | grep atd 可以检测atd进程是否在运行
●at命令格式
at [选项] [时间]
Ctrl+D 结束at命令的输入
at时间定义
at指定时间的方法:
1.接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。例如:
04:00
2.使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指
定时间。
3.采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12Pm
4.指定命令执行的具体日期,指定格式为month day(月日)或mm/dd/yy(月/日/年)或dd.mmyy
(日.月.年),指定的日期必须跟在指定时间的后面。例如:04:002021-03-1
5.使用相对计时法。指定格式为:now+count time-units,now就是当前时间,time-units是时间单位,
这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。例如:now+5 minutes
6.直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
at命令选项
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-i atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q<队列> 使用指定的队列
-f<文件> 从指定文件读入任务而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交要运行的任务
●应用实例
案例1:2天后的下午5点执行/bin/ls/home
at 5pm +2 days
/bin/ls/home #ctrl +D 输入2次
案例2:tq命令来查看系统中没有执行的工作任务
案例3:明天17点钟,输出时间到指定文件内比如/root/date100.log
at 5pm tomorrow
date >/root/date100.log #ctrl +D 输入2次
案例4:2分钟后,输出时间到指定文件内比如/root/date200.log
案例5:删除已经设置的任务:atrm 编号
atq #查看at消息
atrm 编号 # 删除对应的任务
linux 实操篇
Linux 磁盘分区、挂载
●原理介绍
1.Linux来说无论有几个分区,分给哪一旦景使用,它归根结底就只有一个根目录,一个独立且唯一的
文件结构,Liux中每个分区都是用来组成整个文件系统的一部分。
2.Linux采用了一种加叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一
个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
3.示意图
查看所有设备挂载情况
命令:lsblk或者lsblk-f
●硬盘说明
1.Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
2.对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘
了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,
前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为
第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展
分区。
3.对于SCSI硬盘则标识为sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和
IDE硬盘的表示方法一样。
●说明:
下面我们以增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。
如何增加一块硬盘
1.虚拟机添加硬盘
●虚拟机增加硬盘步骤1
在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只
有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)!
2.分区
●虚拟机增加硬盘步骤2
分区命令fdisk /dev/sdb
开始对/sdb分区
m 显示命令列表
P 显示磁盘分区同fdisk -l
n 新增分区
d 删除分区
w 写入并退出
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最
后输入w写入分区并退出,若不保存退出输入q。
3.格式化--指定文件类型
●虚拟机增加硬盘步牒3
格式化磁盘
分区命令:mkfs -t ext4 /dev/sdb1
其中ext4是分区类型
4.挂载
●虚拟机增加硬盘步骤4
挂载:将一个分区与一个目录联系起来,
mount 设备名称挂载目录
例如:mount /dev/sdb1/newdisk
umount设备名称或者挂载目录
例如:umount /dev/sdb1或者umount /newdisk
注意:用命令行挂重启后会失效
5.设置可以自动挂载
虚拟机增加硬盘步骤5
永久挂载:通过修改/etc/fstab实现挂载
添加完成后执行mount -a即刻生效
vim /etc/fstab
/dev/sdb1 /newdisk ext4 default 0 0 #新增一行
●查询系统整体磁盘使用情况
基本语法:df -h
应用实例
查询系统整体磁盘使用情况
●查询指定目录的磁盘占用情况
基本语法:du-h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
-max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
应用实例
查询/opt目录的磁盘占用情况,深度为1
磁盘情况-工作实用指令
1.统计/opt文件夹下文件的个数
ls -l /opt |grep "^-" |wc -l
2.统计/opt文件夹下目录的个数
ls -l /opt |grep "^d" |wc -l
3.统计/opt文件夹下文件的个数,包括子文件夹里的
ls -Rl /opt |grep "^-" |wc -l
4.统计/opt文件夹下目录的个数,包括子文件夹里的
ls -Rl /opt |grep "^d" |wc -l
5.以树状显示目录结构,如果没有则使用 yum install tree
tree /home/
Linux网络配置原理图
查看网络IP和网关
查看虚拟网络编辑器和修改虹P地址
虚拟机——虚拟网络编辑器
●查看windows环境的中VMnet8网络配置(ipconfig指令)
●查看linux的网络配置ifconfig
●ping 指令
基本语法 ping 目的主机(功能描述:测试当前服务器是否可以连接目的主机)
应用实例
测试当前服务器是否可以连接百度
ping www.baidu.com
Linux网络环境的配置
●第一种方法(自动获取):
说明:登陆后,通过界面的来设置自动获取ip,特点:Linux启动后会自动获取P,缺点是每次自动获取的
ip地址可能不一样。
第二种方法(指定ip)
说明:
直接修改配置文件来指定P,并可以连接到外网(程序员推荐)
vi /etc/sysconfig/network-scripts/ifcfg-ens33
要求:将ip地址配置的静态的,比如:ip地址为192.168.200.130
ifcfg-ens33文件说明
DEVICE=etho #接口名(设备,网卡)
HWADDR=O0:0C:2x:6x:Ox:x #MAC地址
TYPE=Ethernet #网络类型(通常是Ethemet)
UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44 #随机id
#系统启动的时候网络接口是否有效(yes/no)
ONBOOT=yes
#IP的配置方法[none|static|bootp|dhcp](引导时不使用协议静态分配iP|BOOTP协议|DHCP协议)
BOOTPROTO=static
#IP地址
IPADDR=192.168.200.10
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
重启网络服务或者重启系统生效
service network restart,reboot
设置主机名和hosts映射
●设置主机名
1.为了方便记忆,可以给linux系统设置生机名,也可以根据需要修改主机名
2,指令hostname:查看主机名
3.修改文件在/etc/hostname指定
4.修改后,重启生效
●设置hosts映射
思考:如何通过主机名能够找到(比如ping)某个inux系统?
Windows
在C:WindowsSystem32driversetchosts文件指定即可
案例:192.168.200.130 hspedu100
linux
在/etc/hosts文件指定
案例:192.168.200.1 ThinkPad-PC
●Hosts是什么
一个文本文件,用来记录IP和Hostname(主机名)的映射关系
●DNS
1.DNS,就是Domain Name System的缩写,翻译过来就是域名系统
2.是互联网上作为域名和P地址相互映射的一个分布式数据库
●应用实例:用户在浏览器输入了www.baidu.com
1.浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存,可以理解为本地解析器缓存
2一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)如在cmd窗口中输入
ipconfig /displaydns //DNS域名解析缓存
ipconfig /flushdns //手动清理dns缓存
3.如果本地解析器缓存没有找到对应映射,检查系统中hosts.文件中有没有配置对应的域名1P映射,如果有,则完成解析并返回。
4.如果本地DNS解析器缓存和hosts)文件中均没有找到对应的P
则到域名服务DNS进行解析域
Linux 实操篇 进程管理(重点)
●基本介绍
1.在linux中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
2.每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作
的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
3.一般系统的服务都是以后台进程的方式存在,而目都会常驻在系统中。直到关机才才结束。
●显示系统执行的进程
基本介绍
Ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数.
字段:说明
PID 进程识别号
TTY 终端机号
TIME 此进程所消耗CPU时间
CMD 正在进行的命令或进程名
-a :显示当前终端的所有进程
-u:以用户的格式显示进程信息
-X:显示后台进程运行的参数
ps -aux | more
●ps详解
1.指令:ps -aux | grep xxx,比如我看看有没有sshd服务
2.指令说明
System V 展示风格
USER:用户名称
PID:进程号
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TTY:终端名称,缩写.
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z僵死进程,T-被跟踪或者被停止等等
STARTED:进程的启动时间
TΠME:CPU时间,即进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
●应用实例
要求:以全格式显示当前所有的进程,查看进程的进程。
ps -ef是以全格式显示当前所有的进程
-e显示所有进程。-f全格式
ps -ef | grep xxx
是BSD风格
UID:用户D
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;
数值越小,表明进程是/○密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
●终止进程kill和killall
介绍:
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用k
命令来完成此项任务。
●基本语法
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢
时很有用)
●常用选项
-9:表示强迫进程立即停止
●最佳实践
案例1:踢掉某个非法登绿用户
kill 进程号
案例2:终止远程登录服务sshd,在适当时候再次重启sshd服务
案例3:终止多个gedit,演示:killall gedit
案例4:强制杀掉一个终端
kill -9 bash对应的进程号
●查看进程树
基本语法:pstree [选项],可以更加直观的来看进程信息
●常用选项
-p:显示进程的PID
-u:显示进程的所属用户
●应用实例:
案例1:请你树状的形式显示进程的pid
pstree -p
案例2:请你树状的形式进程的用户
pstree -u
Linux服务管理
●介绍
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比
如(mysql,sshd防火墙等),因此我们又称为守护进程,是Linuxt中非常重要的知识点。【原理图】
●service管理指令
1,service服务名[start|stop restart reload|status]
2.在CentoS7.0后很多服务不再使用service,而是systemctl(后面专门讲)
3.service指令管理的服务在/etc/init,d查看
●service管理指令案例
请使用service指令,查看,关闭,启动network[注意:在虚拟系统演示,因为网络连接会关闭]
查看服务名:
方式1:使用setup ->系统服务就可以看到全部。
set
方式2:/etc/init.d看到service指令管理的服务
ls -l /etc/init.d
服务的运行级别(runlevel):
Linux系统有7种运行级别(runlevel):常用的显级3和5
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,0ot权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GNU模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
●CentOS7后运行级别说明
在/etc/initab
进行了简化,如下:
multi-user.targel:analogous to runlevel 3
graphical.targe analogous to runlevel 5
# To view current default target,run:
systemctl get-default
#To set a default target,run:
systemctl set-default TARGET.target
●chkconfig指令
介绍
1,通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭
2.chkconfig指令管理的服务在/etc/init.d查看
3.注意:Centos7.0后,很多服务性用5 ystenictl管理(后面马上讲)
chkconfig基本语法
chkconfig --list | grep xXX 查看服务
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off
案例演示:对network服务进行各种操作
chkconfig --level 3 network off
使用细节
chkconfig重新设置服务后自启动或关闭,需要重启机器reboots生效.
●systemctl管理指令
l.基本语法:systemctl [start|stop|restart|status] 服务名
2.systemctl指令管理的服务在/usr/lib/systemd/system查看
●systemctli设置服务的自启动状态
1.systemctl list-unit-files [|grep服务名](查看服务开机启动态,grep可以进行过滤)
2.systemctl enable 服务名 (设置服务开机启动)
3.systemctl disable 服务名 (关闭服务开机启动)
4.systemctl is-enabled 服务名 (查询某个服务是否是自启的)
●应用案例:
查看当前防火墙的状况,关闭防火墙和重启防火墙。
systemctl status firewall
systemctl stop firewall;systemctl start firewall
●细节讨论:
1.关闭或者启用防火墙后,立即生效。[telnet测试 某个端口即可]
2.这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
3.如果希望设置某个服务自启动或关闭永久生效,要使用systemctl[enable | disable]服务名
●打开或者关闭指定端口
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不
能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080等
firewall指令
打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
重新载入,才能生效:firewall-cmd --reload
查询端口是否开放:firewall -cmd --query-port=端口/协议
应用案例:
1.启用防火墙,测试111端口是否能telnet
firewall -cmd --query-port=111/tcp
2.开放111端口
firewall -cmd --permanent --add-port=111/tcp
firewall-cmd --reload
3.再次关闭111端口
firewall-cmd --permanent --remove-port=111/tcp
firewall-cmd --reload
动态监控进程
●介绍:
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段
时间可以更新正在运行的的进程。
●基本语法
top [选项]
-d秒数 指定toP命令每隔几秒更新。默认是3秒
-i 使top不显示任何闲置或者僵死进程,
-p 通过指定监控进程ID来仅仅监控某个进程的状态。
●交互选项
P 以CPU使用率排序,默认就是此项
M 以内存的使用率排序
N 以PID排序
q 退出top
应用实例
案例1.监视特定用户
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名,即可
案例2:终止指定的进程。
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程ID号
案例3:指定系统状态更新的时间(每隔10秒自动更新)
监控网络状态
●查看系统网络情况netstat
基本语法
netstat [选顶]
选项说明
-an 按一定顺序排列输出
-P 显示哪个进程在调用
应用案例
请查看服务名为sshd的服务的信息。
netstat -anp |grep sshd
●检测主机连接命令ping:
是一种网络检测检测工具,它主要是用检测远程主机是否正常,或是两部主机间的网线或网卡故障。
如:ping对方ip地址
Linux实操篇
RPM与YUM
●介绍
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了。
rpm包的简单查询指令
查询已安装的rpm列表rpm -qa | grep xx
rpm包名基本格式
-个rpm包名:firefox-60.2.2-1.el7.centos.x86_64
rpm -aq | grep firefox
firefox-60.2.2-1.el7.centos.x86_64 名称:firefox
版本号:60.2.2-1
适用操作系统:el7.centos.x8664
表示centos7.x的64位系统
如果是i686、i386表示32位系统,noarch表示通用。。
rpm包的其它查询指令
rpm-qa:查询所安装的所有rpm软件包
rpm -ga | more
rpm -qa grep X [rpm -ga grep firefox
rpm-q软件包名:查询软件包是否安装
案例:rpm-q firefox
rpm-qi软件包名:查询软件包信息
案例:rpm-qi firefox
rpm-ql软件包名:查询软件包中的文件
比如:rpm-ql firefox
rpm-qf文件全路径名查询文件所属的软件包
rpm -qf /etc/passwd
rpm -qf /root/install.log
●卸载rpm包:
基本语法
rpm-e RPM包的名称
应用案例
删除firefox软件包
细节讨论
1.如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
如:$ rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
1.如果我们就是要删除foo这个rpm包,可以增加参数-nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行
如:$ rpm -e --nodeps foo
安装rpm包
基本语法
rpm -ivh RPM包全路径名称
参数说明
i=install 安装
v=verbose 提示
h=hash 进度条
应用实例
演示卸载和安装firefoxi浏览器
●介绍:
Yum是一个Shel前端软件包管理器。基于RPM包理,能够从指定的服务器自动
下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
●yum的基本指令
查询yum服务器是否有需要安装的软件
yum list | grep xx软件列表
安装指定的yum包
yum install xxx下载安装
●yum应用实例:
案例:请使用yum的方式来安装firefox
●安装JDK
安装步骤
1.mkdir /opt/jdk
2.通过xftp6上传到/opt/jdk下
cd /opt/jdk
4.解压tar-zxvf jdk-8u261-linux-x64.tar.gz
5.mkdir /usr/local/java
6.mv /opt/jdk/jdk1.8.0_261 /usr/local/java
7.配置环境变量的配置文件vim/etc/profile
8.export JAVA_HOME=/usr/local/java/jdk1.8.0_261
9.export PATH=$JAVA_HOME/bin:$PATH
10.source /etc/profile [让文件生效]
测试是否安装成功
编写一个简单的Hello,java输出"hello,world!
●安装TOMCAt
步骤:
1.上传安装文件,并解压缩到/opt/tomcat
2.进入解压目录/bin/,启动tomcat ./startup.sh
3.开放端口 8080
firewall-cmd --permanent add-port=8080/tcp
测试是否安装成功:
在windows、Linux下访:http:/linuxip:8080
●安装IDE
步骤
I.下载地址:https:/www.jetbrains.com/idea/download/#section=windows
2.解压缩到/opt/idea
3.启动idea bin目录下./idea.sh,配置jdk
4.编写Hello world程序并测试成功!
●mysql的安装
大数据定制篇-Shell 编程
●Shell 是什么
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序
●Shell 脚本的执行方式
1) 脚本以#!/bin/bash 开头
2) 脚本需要有可执行权限
创建一个 Shell 脚本,输出 hello world!
vim hello.sh
#!/bin/bash
echo "hello,world~"
●脚本的常用执行方式
方式1(输入脚本的绝对路径或相对路径):
先要赋予 helloworld.sh 脚本的+x 权限, 再执行脚本
./hello.sh 或者使用绝对路径 /root/shcode/hello.sh
方式 2(sh+脚本)
说明:不用赋予脚本+x 权限,直接执行即可
sh hello.sh , 也可以使用绝对路径
变量
●Shell 的变量
Linux Shell 中的变量分为,系统变量和用户自定义变量
系统变量:$HOME、$PWD、$SHELL、$USER 等等,比如: echo $HOME 等等..
显示当前 shell 中所有变量:set
shell 变量的定义
基本语法
定义变量:变量名=值
撤销变量:unset 变量
声明静态变量:readonly 变量,注意:不能 unset
案例 1:定义变量 A
案例 2:撤销变量 A
案例 3:声明静态的变量 B=2,不能 unset
●定义变量的规则
1) 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
2) 等号两侧不能有空格
3) 变量名称一般习惯为大写, 这是一个规范,我们遵守即可
将命令的返回值赋给变量
1) A=`date`反引号,运行里面的命令,并把结果返回给变量 A
2) A=$(date) 等价于反引号
●设置环境变量
基本语法
1) export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量/全局变量)
2) source 配置文件 (功能描述:让修改后的配置信息立即生效)
3) echo $变量名
快速入门
1) 在/etc/profile 文件中定义 TOMCAT_HOME 环境变量
2) 查看环境变量 TOMCAT_HOME 的值
3) 在另外一个 shell 程序中使用 TOMCAT_HOME
注意:在输出 TOMCAT_HOME 环境变量前,需要让其生效
source /etc/profile
●shell 脚本的多行注释
:<<! 内容 !
●位置参数变量
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量比如 : ./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息
●基本语法
$n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
●预定义变量
就是 shell 设计者事先已经定义好的变量,可以直接在 shell
基本语法
1) $ (功能描述:当前进程的进程号(PID))
2) $! (功能描述:后台运行的最后一个进程的进程号(PID))
3) $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
运算符
●基本语法
1) “$((运算式))”或“$[运算式]”或者 expr m + n //expression 表达式
2) 注意 expr 运算符间要有空格, 如果希望将 expr 的结果赋给某个变量,使用 `` 3) expr m - n
4) expr *, /, % 乘,除,取余
条件判断
●基本语法
[ condition ](注意 condition 前后要有空格)
#非空返回 true,可使用$?验证(0 为 true,>1 为 false)
应用实例
[ hspEdu ] 返回 true
[ ] 返回 false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
判断语句
常用判断条件
1) = 字符串比较
2) 两个整数的比较
-lt 小于
-le 小于等于 little equal -eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
3) 按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
4) 按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
应用实例
案例 1:"ok"是否等于"ok" 判断语句:使用 = 案例 2:23 是否大于等于 22
判断语句:使用 -ge
案例 3:/root/shcode/aaa.txt 目录中的文件是否存在
判断语句: 使用 -f
流程控制
●基本语法
if [ 条件判断式 ]
then
代码
fi
或者 , 多分支
if [ 条件判断式 ]
then
代码
elif [条件判断式]
then
代码
fi
注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格
●case 语句
case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
●for 循环
基本语法 1
for 变量 in 值 1 值 2 值 3…
do
程序/代码
done
应用实例 testFor1.sh
案例 1 :打印命令行输入的参数 [这里可以看出$* 和 $@ 的区别]
基本语法 2
for (( 初始值;循环控制条件;变量变化 ))
do
程序/代码
done
应用实例 testFor2.sh
案例 1 :从 1 加到 100 的值输出显示
●while 循环
基本语法 1
while [ 条件判断式 ]
do
程序 /代码
done
注意:while 和 [有空格,条件判断式和 [也有空格
●read 读取控制台输入
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。参数
变量:指定读取值的变量名
案例 1:读取控制台输入一个 NUM1 值
read -p "请输入一个数 NUM1=" NUM1
案例 2:读取控制台输入一个 NUM2 值,在 10 秒内输入。
read -t 10 -p "请输入一个数 NUM2=" NUM2
echo "你输入的 NUM2=$NUM2"
函数
●函数介绍
shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个
系统函数
basename 基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉
应用实例
案例 1:请返回 /home/aaa/test.txt 的 "test.txt" 部分
basename /home/aaa/test.txt
自定义函数
基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]
应用实例
案例 1:计算输入两个参数的和(动态的获取), getSum
#!/bin/bash
#案例 1:计算输入两个参数的和(动态的获取), getSum
#定义函数 getSum
function getSum() {
SUM=$[$n1+$n2]
echo "和是=$SUM" }
#输入两个值
read -p "请输入一个数 n1=" n1
read -p "请输入一个数 n2=" n2
#调用自定义函数
getSum $n1 $n2
Shell 编程综合案例
●需求分析
1) 每天凌晨 2:30 备份 数据库 hspedu 到 /data/backup/db
2) 备份开始和备份结束能够给出相应的提示信息
3) 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2021-03-12_230201.tar.gz
4) 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。
5) 画一个思路分析图
●代码 /usr/sbin/mysql_db.backup.sh
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=hspedu100
#备份的数据库名
DATABASE=hspedu
#创建备份目录, 如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip>${BACKUP}/${DATETIME}/$DATETIME.sql.gz
#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除 10 天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} ;
echo "备份数据库${DATABASE} 成功~"