Linux学习笔记
Linux学习笔记
一、Linux基本简介
1.1 Linux的应用领域
1.1.1 个人桌面应用领域
此领域是传统linux应用最薄弱的环节,传统linux由于界面简单、操作复杂、应用软件少的缺点,一直被windows所压制,但近些年来随着ubuntu、fedora[fɪˈdɔ:rə] 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,linux在个人桌面领域的占有率在逐渐的提高。
1.1.2 服务器应用领域
linux在服务器领域的应用是最强的。
linux免费、稳定、高效等特点在这里得到了很好的体现,近些年来linux服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛。
1.1.3 嵌入式应用领域
linux运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高。
主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、智能家居、智能硬件等都是其应用领域。以后在物联网中应用会更加广泛。
1.2 学习LINUX的阶段
linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多中型,大型甚至是集群项目都在使用linux,很多软件公司考虑到开发成本都首选linux,在中国软件公司得到广泛的使用。
我个人认为学习linux流程为:
第 1 阶段:linux环境下的基本操作命令,包括 文件操作命令(rmmkdirchmod,chown) 编辑工具使用(vivim)linux用户管理(useradduserdelusermod)等
第 2 阶段:linux的各种配置(环境变量配置,网络配置,服务配置)
第 3 阶段:linux下如何搭建对应语言的开发环境(大数据,JavaEE,Python等)
第 4 阶段:能编写shell脚本,对Linux服务器进行维护。
第 5 阶段:能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优。
第 6 阶段:深入理解Linux系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各个环节的部署和维护方法。
1.3 LINUX的学习方法和建议
1 |
|
二、LINUX 入门
2.1 LINUX介绍
1 ) Linux怎么读 【里纽克斯,利尼克斯,里纳克斯】
2 ) Linux是一款操作系统,免费,开源,安全,高效,稳定, 处理高并发非常强悍,现在很多的企业级的项目都部署到Linux/unix服务器运行。
3 ) Linux创始人
4 ) Linux的吉祥物
5 ) Linux的主要的发行版:Ubuntu、RedHat、CentOS等,Linux内核源码下载地址,可以将源码下载下来查看。
2.2Unix与Linux的关系
2.2.1 Unix来源
2.2.2 Linux来源
Richard提出了伟大的GNU计划,大大促进了开源事业。
2.2.3 Linux与Unix关系
2.2.4 Linux与Windows关系
三、VM 和 LINUX 系统 (CENTOS) 安装
3.1 安装VM和CENTOS
学习Linux需要一个环境,我们需要创建一个虚拟机,然后在虚拟机上安装一个Centos系统来学习。
1 )先安装virtual machine 15.5
2 )再安装Linux(CentOS 7.6 \ CentOS 8.1)
3 )原理示意图,这里我们画图说明一下 VM 和 CentOS的关系。
3.2 安装步骤
1 ) 去BIOS里修改设置开启虚拟化设备支持
2 ) 安装虚拟机软件(VM 15.5)
3 ) 创建虚拟机(空间)
4 ) 安装系统(CentOS 6.8 )
3.3 虚拟机网络连接三种方式
虚拟机网络连接有三种方式:桥接模式、NAT模式和主机模式。
1.桥接模式:虚拟机系统可以与外部系统互相通讯,但是由于桥接模式占用与物理机同一级的ip地址,所以如果当前局域网ip地址耗尽,容易造成ip冲突
2.NAT模式:网络地址转换模式,虚拟机系统可以向外部系统发消息,但是外部系统不可以向虚拟机系统发消息(如果没有内网穿透相关功能的话),NAT模式不会造成ip冲突。
3.主机模式:可以成为单机模式,不与外部系统连接网络,是一个独立的系统。
3.4 虚拟机克隆
如果已经安装了一台Linux操作系统,此时还需要更多,这时可以使用虚拟机克隆操作,有以下两种方式:
方式1:直接拷贝一份安装好的虚拟机文件
方式2:使用vmware的克隆操作(需要先关闭Linux系统)
3.5 虚拟机快照
如果在使用虚拟机系统的时候(比如Linux),如果你想回到原先的某一个状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,vmware特提供了这样的功能,叫快照管理。
1 |
|
需要注意的是,快照底层是使用指针实现的。
3.6 虚拟机迁移删除
虚拟机系统的本质就是文件。因此虚拟机系统的迁移很方便,可以把安装好的虚拟机系统这个文件夹整体拷贝或者剪切到另外位置使用。同样地,虚拟机系统删除也很简单,用vmware进行移除(菜单 -> 从磁盘删除),或者直接手动删除虚拟系统对应的文件夹即可。
3.7 vmtools
3.7.1 vmtools作用
- vmtools安装后,可以让我们在windows下跟好的管理vm虚拟机
- 可以设置windows和centos的共享文件夹
3.7.2 vmtools的安装步骤
1 |
|
3.7.3 使用vmtools来设置windows和linux的共享文件夹
1.在windows中新建一个文件夹
2.在vmware中设置共享文件夹
3.在Centos的/mnt/hgfs/下可以找到共享文件夹
四、Linux 的目录结构
4.1 基本介绍
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
深刻理解linux树状文件目录是非常重要的,这里我给大家说明一下,记住一句经典的话:在Linux世界里,一切皆文件。硬件都当做文件来管理。
4.2 目录结构的具体介绍
/bin:
是Binary的缩写,这个目录存放着最经常使用的命令(命令其实就是一个个可执行文件)。/sbin
:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。/home:
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。(对应MacOS中的/Users
目录)/root:
该目录为系统管理员,也称作超级权限者的用户主目录。/lib
:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。/lost+found
:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。/etc
:所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库 my.conf。/boot
:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/proc
:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。该目录不要动。/srv
:service的缩写,该目录存放一些服务启动之后需要提供的数据。该目录不要动。/sys
:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。该目录不要动。/tmp
:这个目录是用来存放一些临时文件的。/dev
:类似windows的设备管理器,把所有的硬件用文件的形式存储。/media
:linux系统会自动识别一些设备,例如U盘光驱等等,当识别后,linux会把识别的设备挂载到这个目录下(Linux把这些设备映射成文件进行管理)。/mnt
:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。/opt
:这是给主机额外安装软件所摆放的目录,如安装ORACLE数据库就可放到该目录下。默认为空。/usr/local
:这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码的方式安装的程序。/var
:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。/selinux
:SELinux是一种安全子系统,它能控制程序只能访问特定文件。
4.2.1 /opt & /usr/local & /usr 区别
/opt
这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。相当于windows中的D:/Software。
/usr/local
这里主要存放那些手动安装的软件,即不是通过apt-get等自动安装的软件,/usr/local目录下的一些子目录往往都是被加入到PATH环境变量中的。 相当于windows中的C:/Program Files。
/usr
:系统级的目录,可以理解为C:/Windows/,/usr/lib
理解为C:/Windows/System32。
/usr/src
:系统级的源码目录。/usr/local/src
:用户级的源码目录。
4.3 Linux目录总结一下
- linux的目录中有且只要一个根目录 /
- linux的各个目录存放的内容是规划好,不用乱放文件。
- linux是以文件的形式管理我们的设备,因此linux系统,一切皆为文件。
linux的各个文件目录下存放什么内容,必须有一个认识,你脑海中应该有一颗linux目录树
五、远程登录Linux系统
5.1 SSH 三步解决免密登录
5.1.1 客户端生成公私钥
本地客户端生成公私钥:(一路回车默认即可)
1 |
|
上面这个命令会在用户目录. ssh 文件夹下创建公私钥
1 |
|
1 |
|
下创建两个密钥:
- id_rsa (私钥)
- id_rsa.pub (公钥)
5.1.2 上传公钥到服务器
这里测试用的服务器地址为:192.168.235.22
用户为:root
1 |
|
上面这条命令是写到服务器上的 ssh 目录下去了
1 |
|
1 |
|
可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。
5.1.3 测试免密登录
客户端通过 ssh 连接远程服务器,就可以免密登录了。
1 |
|
5.2 管理多个私钥
在~/.ssh/config
中进行配置,配置原则如下所示:
Host
是别名
HostName
是ip地址或者域名
User
是登录用户名
IdentityFile
是私钥地址
PerferredAuthentications
是首选身份验证方式
六、Vi 和 Vim 编辑器
6.1 Vi和Vim的基本介绍
所有的 Linux 系统都会内建 vi 文本编辑器。
Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
6.2 Vi和Vim的三种常见模式
6.2.1 正常模式
在正常模式下,我们可以使用快捷键。
以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
6.2.2 插入模式/编辑模式
在模式下,程序员可以输入内容。按下i,I,o,O,a,A,r,R等任何一个字母之后才会进入编辑模式, 一般来说按i即可。
6.2.3 命令行模式
在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!
6.4 Vi和Vim三种模式的相互转化图
6.5 Vi和Vim的快捷键键盘一览图
Vi和Vim的快键键包罗万象,遇到具体需求可以查看Vim Cheat Sheet或者在linux命令行输入vimtutor
查看vim官方教程。
七、关机、重启和用户登录注销
7.1 关机&重启命令
1 |
|
注意细节:
1.当我们关机或者重启时,都应该先执行以下sync指令,把内存的数据写入磁盘,防止数据丢失。
2.目前的shutdown/reboot/halt等命令君已经在关机前进行了sync。
7.2 用户登录和注销
1 ) 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用su -s
命令来切换成系统管理员身份。
2 ) 在提示符下输入 logout
即可注销用户。(在root
用户下使用会退回到上次的普通用户上,在普通用户上使用会退出系统)
使用细节:
1.logout 注销指令在图形运行级别无效,在 运行级别 3 下有效.
2.运行级别这个概念,后面给大家介绍
八、用户管理
8.1 基本介绍
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。并且Linux的用户需要至少要属于一个组,每一个用户都对应一个自己的家目录。
8.2 添加用户
8.2.1 基本语法
1 |
|
8.2.2 实际案例
添加一个用户jyg
,useradd jyg
,并且默认该用户的家目录在/home/jyg
。
8.2.3 细节说明
- 当创建用户成功后,会自动的创建和用户同名的家目录
- 也可以通过
useradd -d 指定目录 新的用户名
,给新创建的用户指定家目录 - 以什么用户身份登录,初始目录就在该用户的家目录下
8.3 给用户指定或者修改密码
8.3.1 基本语法
1 |
|
8.2.2 实际案例
给用户jyg
更改密码,# passwd jyg
8.4 删除用户
8.4.1 基本语法
1 |
|
8.4.2 应用案例
删除用户
jyg
,但是要保留家目录userdel jyg
删除用户
jyg
以及用户主目录userdel -r jyg
主要注意的是,在删除用户时,我们一般不会将家目录删除。
8.5 查询用户信息
8.5.1 基本语法
1 |
|
8.5.2 应用实例
请查询root 信息 id root
8.5.3 细节说明
当用户不存在时,返回no such user
8.6 切换用户
8.6.1 介绍
在操作Linux中,如果当前用户的权限不够,可以通过 su - 用户名
指令,切换到高权限用户,比如root
8.6.2 基本语法
1 |
|
8.6.3 细节说明
从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
当需要返回到原来用户时,使用exit指令
8.7 查看当前用户 & 登录信息
8.7.1 基本语法
1 |
|
8.8 用户组
8.8.1 介绍
类似于角色,系统可以对有共性的多个用户进行统一的管理。
8.8.2 增加组
1 |
|
8.8.3 删除组
1 |
|
8.9 增加用户时直接加上组
8.9.1 基本语法
1 |
|
需要注意的是,如果增加用户,但是没有指定用户组,那么系统会生成一个和该用户同名的用户组,并把该用户放入同名用户组中。
8.9.2 案例演示
1 |
|
8.10 修改用户的组
8.10.1 基本语法
1 |
|
8.10.2 案例演示
1 |
|
8.11 用户和组相关文件
8.11.1 /ETC/PASSWD 文件
1 |
|
8.11.2 /ETC/SHADOW文件
1 |
|
8.11.3 /ETC/GROUP文件
1 |
|
组密码的作用:非本用户组的用户想切换到本用户组身份时,可以通过密码保证安全性。如果没有设置组密码,则只有属于本用户组的用户能够切换到本用户组的身份。
九、实用指令
9.1 指定运行级别
1 |
|
要修改默认的运行级别:
1 |
|
9.2 切换到指定运行级别的指令
9.2.1 基本语法
1 |
|
9.2.2 应用实例
1 |
|
9.2.3 面试题
1 |
|
9.3 帮助指令
9.3.1 介绍
当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解这个指令的使用方法。
9.3.2 man 命令
基本语法
1 |
|
应用实例
案例:查看ls命令的帮助信息
1 |
|
-a : 不忽略以 . 开头的文件
主要注意的是,[]是可选项的意思,而且可以组合使用且无顺序要求
9.3.3 help指令
基本语法
1 |
|
应用实例
案例:查看cd命令的帮助信息
1 |
|
9.3.4 info命令
基本语法
1 |
|
注意:由于help支持命令少,推荐使用man或者info命令。
9.4 文件目录类
9.4.1 pwd 指令
基本语法
1 |
|
9.4.2 ls指令
基本语法
1 |
|
常用选项
- a :显示当前目录所有的文件和目录,包括隐藏的。
- l :以列表的方式显示信息
9.4.3 cd 指令
基本语法
1 |
|
1 |
|
9.4.4 mkdir指令
基本语法:
1 |
|
常用选项:
- p :创建多级目录
9.4.5 rmdir指令
rmdir指令删除空目录
基本语法:
1 |
|
需要注意的是:rmdir指令只能删除空目录,只能使用rm -rf
9.4.6 touch指令
touch指令创建空文件
基本语法
1 |
|
9.4.7 cp指令
cp 指令拷贝文件到指定目录
基本语法:
1 |
|
常用选项:
- r :递归复制整个文件夹
9.4.8 rm指令
rm 指令移除文件或目录
基本语法
1 |
|
常用选项
- r :递归删除整个文件夹
- f : 强制删除不提示
9.4.9 mv指令
mv 移动文件与目录或重命名
基本语法
1 |
|
案例移动整个目录
1 |
|
9.4.10 cat指令
cat 查看文件内容,是以只读的方式打开。
基本语法
1 |
|
常用选项
- n :显示行号
使用细节
cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more
1 |
|
9.4.11 more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明。
基本语法
1 |
|
操作说明
快捷键 | 功能 |
---|---|
space | 向下翻一页 |
return | 向下翻一行 |
q | 退出 |
b | 向上翻一页 |
z | 向下翻一页 |
= | 输出当前行号 |
:f | 输出文件名和当前行号 |
9.4.12 less指令
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
基本语法
1 |
|
操作说明
快捷键 | 功能 |
---|---|
space | 向下翻一页 |
return | 向下翻一行 |
q | 退出 |
b | 向上翻一页 |
z | 向下翻一页 |
= | 显示当前页面行号范围 |
:f | 显示当前页面行号范围 |
推荐使用less
而不是more
9.4.13 >指令 和 >>指令
>
命令是输出重定向:会将原来的文件内容覆盖
>>
命令是追加:不会覆盖原来文件的内容,而是追加到文件的尾部。
基本语法
1 |
|
9.4.14 echo指令
echo输出内容到控制台。
基本语法
1 |
|
应用实例
1 |
|
9.4.15 head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前 10 行内容
基本语法
1 |
|
9.4.16 tail指令
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的后 10 行内容。
基本语法
1 |
|
9.4.17 ln指令
软链接也叫符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
基本语法
1 |
|
应用实例
案例 1 : 在/home 目录下创建一个软连接 linkToRoot,连接到 /root 目录
1 |
|
案例 2 : 删除软连接 linkToRoot
1 |
|
细节说明
当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。
9.4.18 history指令
查看已经执行过历史命令,也可以执行历史指令
基本语法
1 |
|
应用实例
案例 1 : 显示所有的历史命令
1 |
|
案例 2 : 显示最近使用过的 10 个指令。
1 |
|
案例 3 :执行历史编号为 5 的指令
1 |
|
9.5 时间日期类
9.5.1 date指令-显示当前日期
基本语法
1 |
|
9.5.2 date指令-设置日期
基本语法
1 |
|
9.5.3 cal指令
查看日历指令
基本语法
1 |
|
9.6 搜索查找类
9.6.1 find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法
1 |
|
选项
选项 | 功能 |
---|---|
-name <文件名> | 按照指定的文件名查找模式查找文件 |
-user <用户名> | 查找属于指定用户名所有文件 |
-size <文件大小> | 按照指定的文件大小查找文件 |
应用实例
案例 1 : 按文件名:根据名称查找/home 目录下的hello.txt文件
1 |
|
案例 2 :按拥有者:查找/opt目录下,属于nobody的文件
1 |
|
案例 3 :查找整个linux系统下大于 20 m的文件(+n 大于 -n小于 n等于)
1 |
|
案例 4:查询 / 目录下,所有 .txt的文件
1 |
|
9.6.2 locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
基本语法
1 |
|
特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb
指令创建locate数据库。
应用实例
案例 1 : 请使用locate 指令快速定位 hello.txt 文件所在目录
1 |
|
9.6.3 which指令
which指令可以查看某个指令在哪个目录下。
基本语法
1 |
|
9.6.4 grep指令 和 管道符号 |
grep 过滤查找 , 管道符“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
基本语法
1 |
|
常用选项
- -n : 显示匹配行及行号
- -i :忽略字母大小写
应用实例
案例 1 : 请在 hello.txt 文件中,查找 “yes” 所在行,并且显示行号
1 |
|
9.7 压缩和解压类
9.7.1 gzip/gunzip 指令
gzip 用于压缩文件, gunzip 用于解压的
基本语法
1 |
|
细节说明
当我们使用gzip 对文件进行压缩后,不会保留原来的文件。
9.7.2 zip/unzip 指令
zip 用于压缩文件, unzip 用于解压的,这个在项目打包发布中很有用的
基本语法
1 |
|
zip常用选项
- r:递归压缩,即压缩目录
unzip的常用选项
- d<目录>:指定解压后文件的存放目录
应用实例
案例 1 : 将 /home本身及下的所有文件进行压缩成 mypackage.zip
1 |
|
案例 2 : 将 mypackage.zip 解压到 /opt/tmp 目录下
1 |
|
9.7.3 tar 指令
tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。
基本语法
1 |
|
选项说明
选项 | 功能 |
---|---|
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 (压缩成.gz文件需要加上,同时解压.gz文件也需要加上。如果文件是.tar结尾,不能加z选项) |
-x | 解包.tar文件 |
应用实例
案例 1 : 压缩多个文件,将 /home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz
1 |
|
案例 2 : 将/home 的文件夹 压缩成 myhome.tar.gz
1 |
|
案例 3 : 将 pc.tar.gz 解压到当前目录
1 |
|
案例 4 : 将myhome.tar.gz 解压到 /opt/ 目录下
1 |
|
十、组管理和权限管理
10.1 Linux组基本介绍
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。
10.2 文件/目录所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者(当然随后可以更改文件的所有者)。
10.2.1 查看文件的所有者
基本语法
1 |
|
10.2.2 修改文件所有者
基本语法
1 |
|
应用案例
案例:使用root 创建一个文件apple.txt ,然后将其所有者修改成 tom
1 |
|
10.3 文件/目录 所在组
当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组。
10.3.1 查看文件/目录所在组
基本语法
1 |
|
10.3.2 修改文件/目录所在的组
基本语法
1 |
|
应用实例
实例:使用root用户创建文件 orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到fruit组。
1 |
|
10.4 其它组
除文件所在组外,系统其他组都是文件的其它组.
10.5 改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组。
10.5.1 改变用户所在组
1 |
|
应用实例
实例:创建一个土匪组(bandit)将 tom 这个用户从原来所在的police组,修改到 bandit(土匪) 组
1 |
|
10.6 权限的基本介绍
1 |
|
0 - 9 位说明
第 0 位确定文件类型(d,-,l,c,b)
- l是连接,相当于windows的快捷方式
- d是目录,相当于windows的文件夹
- c是字符设备文件,比如鼠标、键盘等
- b是块设备,比如硬盘
-
是文件
第 1 - 3 位确定所有者(该文件的所有者)拥有该文件的权限。—User
第 4 - 6 位确定所属组(同用户组的)拥有该文件的权限,—Group
第 7 - 9 位确定其他用户拥有该文件的权限 —Other
10.7 RWX权限详解
10.7.1 rwx作用到文件
1 |
|
10.7.2 rwx作用到目录
1 |
|
10.8 文件及目录权限实际案例
1 |
|
1 |
|
10.9 修改权限
基本说明:通过chmod指令,可以修改文件或者目录的权限
10.9.1 第一种方式:+、-、=变更权限
1 |
|
案例演示
案例1: 给abc文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。
1 |
|
案例2: 给abc文件的所有者除去执行的权限,增加组写的权限
1 |
|
案例3: 给abc文件的所有用户添加读的权限
1 |
|
10.9.2 第二种方式:通过数字变更权限
1 |
|
案例演示
案例:将 /home/abc.txt 文件的权限修改成 rwxr-xr-x, 使用给数字的方式实现:
rwx= 4 + 2 + 1 = 7
r-x= 4 + 1 = 5
r-x= 4 + 1 = 5
1 |
|
10.10 修改文件/目录所有者
基本语法:
1 |
|
常用选项:
- -R 如果是目录 则使其下所有子文件或目录递归生效
案例演示:
案例1:请将 /home/abc.txt 文件的所有者修改成 tom
1 |
|
案例2:请将 /home/kkk 目录下所有的文件和目录的所有者都修改成tom,首选我们应该使用root操作。
1 |
|
10.11 修改文件/目录所在组
基本语法:
1 |
|
案例演示:
案例1:请将 /home/abc.txt 文件的所在组修改成 bandit(土匪)
1 |
|
案例2:请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 bandit(土匪)
1 |
|
10.12 最佳实践-警察和土匪游戏
police ,bandit
jack,jerry: 警察
xh,xq: 土匪
( 1 )创建组
1 |
|
( 2 )创建用户
1 |
|
( 3 ) jack 创建一个文件,自己可以读写,本组人可以读,其它组没人任何权限
1 |
|
( 4 )jack 修改该文件,让其它组人可以读, 本组人可以读写
1 |
|
( 5 )xh 投靠警察,看看是否可以读写
1 |
|
10.13 课后练习
建立两个组(神仙,妖怪)
1 |
|
建立四个用户(唐僧,悟空,八戒,沙僧)
1 |
|
设置密码
1 |
|
把悟空,八戒放入妖怪 唐僧 沙僧 在神仙
1 |
|
用悟空建立一个文件 (monkey.java 该文件要输出 iammonkey)
1 |
|
给八戒一个可以rw 的权限
1 |
|
八戒修改monkey.java 加入一句话(iampig)
1 |
|
唐僧 沙僧 对该文件没有权限,把 沙僧 放入妖怪组
1 |
|
让沙僧 修改 该文件 monkey, 加入一句话 (“我是沙僧,我是妖怪!”);
1 |
|
十一、crond 任务调度
11.1 原理示意图
crontab 进行定时任务的设置。
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1 .系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2 .个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
基本语法:
1 |
|
常用选项:
- -e: 编辑crontab定时任务
- -l: 查询crontab任务
- -r: 删除当前用户所有的crontab任务
11.2 快速入门
11.2.1 任务的要求
1 |
|
11.2.2 步骤如下
1 |
|
11.2.3 参数细节说明
项目 | 含义 | 范围 |
---|---|---|
第一个 “*” | 一个小时当中的第几分钟 | 0-59 |
第二个 ”*“ | 一天当中的第几小时 | 0-23 |
第三个 ”*“ | 一个月当中的第几天 | 1-31 |
第四个 ”*“ | 一年当中的第几月 | 1-12 |
第五个 ”*“ | 一周当中的星期几 | 0-7(0和7代表星期日) |
11.2.4 特殊符号的说明
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个”*“就代表一小时中每分钟都执行一次的意思 |
, | 代表不连续的时间。比如0 8,12,16 * * * 命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围。比如0 5 * * 1-6 命令,代表在周一到周六的凌晨5点0分执行命令 |
*/n | 代表每个多久执行一次。比如*/10 * * * * 命令,代表每个10分钟就执行一遍命令 |
11.2.5 特定时间执行任务案例
命令 | 含义 |
---|---|
45 22 * * * |
每天22点45分执行任务 |
0 17 * * 1 |
每周星期一0点17分执行任务 |
0 5 1,15 * * |
每月1号和15号的5点0分执行任务 |
40 4 * * 1-5 |
每周一到周五的4点40分执行任务 |
*/10 4 * * * |
每天4点每隔10分钟执行任务 |
0 0 1,15 * 1 |
每月1号和5号,每周一的0点0分执行任务。(这里1号15号与周一取并集) |
注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱。
11.2.4 任务调度的几个应用实例
案例 1 :每隔 1 分钟,就将当前的日期信息,追加到 /tmp/mydate文件中
1 |
|
案例 2 :每隔 1 分钟, 将当前日期和日历都追加到 /home/mycal文件中
1 |
|
案例 3 : 每天凌晨 2 : 00 将mysql数据库testdb ,备份到文件中 mydb.bak。提示:指令为mysqldump -u root -p密码 数据库 > /home/db.bak
1 |
|
11.3 crond 相关指令
1 |
|
11.4 at定时任务
基本介绍:
- at命令是一次性定时计划任务,at的守护进行atd会以后台模式运行,检查作业队列来运行。
- 默认情况下,atd守护进行每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
- at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看。
ps -ef | grep atd
可以检测atd是否在运行。
基本语法:
1 |
|
选项说明:
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I |
atq的别名(查询) |
-d | atrm的别名(删除) |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q <队列> | 使用指定的队列 |
-f <文件> | 从指定文件读入任务而不是从标准输入读入 |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
at时间定义:
- 接受在当天hh:mm(小时:分钟)式的时间指定。假如该时间已经过去,那么就放在第二天执行。例如:04:00
- 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
- 采用12小时计时制,即在时间后面加上AM(上午)或者PM(下午)来说明是上午还是下午。例如12PM
- 指定命令执行的具体日期,指定格式为month day (月 日)或者 mm/dd/yy(月/日/年) 或者 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04:00 2021-03-01
- 使用相对计时法。指定格式为: now + count time-units,now就是当前时间,time-units是时间单位,几天,几小时。例如:now + 5 minutes
- 直接使用today(今天)、tomorrow(明天)来制定完成命令的时间。
应用实例:
实例1:2天后的下午5点执行 /bin/ls /home
1 |
|
案例2:atq命令来查看系统中没有执行的工作任务
1 |
|
案例3:明天17点钟,输出时间到指定文件内,比如/root/date100.log
1 |
|
案例4:2分钟后,输出时间到指定文件内,比如/root/date200.log
1 |
|
案例5:删除已经设置的任务,artm编号
1 |
|
十二、Linux 磁盘分区、挂载
12.1 LINUX分区
12.1.1 原理介绍
Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 ,Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
示意图:
12.1.2 硬盘说明
- Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
- 对于IDE硬盘,驱动器标识符为“hdx
”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例,hda 3 表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb 2 表示为第二个IDE硬盘上的第二个主分区或扩展分区。 - 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
分区的方式:
1 |
|
1 |
|
12.1.3 使用lsblk指令查看当前系统的分区情况
基本语法:
1 |
|
12.2 挂载的经典案例
需求是给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk
1 |
|
12.2.1 虚拟机增加硬盘步骤 1
在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)!
12.2.2 虚拟机增加硬盘步骤 2
1 |
|
- m 显示命令列表
- p 显示磁盘分区 同
fdisk –l
- n 新增分区
- d 删除分区
- w 写入并退出
说明: 开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
12.2.3 虚拟机增加硬盘步骤 3
1 |
|
12.2.4 虚拟机增加硬盘步骤 4
挂载: 将一个分区与一个目录联系起来。
挂载基本语法:
1 |
|
卸载基本语法:
1 |
|
需要注意的是,使用命令行挂载,在重启后会失效。
12.2.5 虚拟机增加硬盘步骤 5
1 |
|
字段解释
/etc/fstab文件主要包括6段,依次是:
1 |
|
12.3 磁盘情况查询
12.3.1 查询系统整体磁盘使用情况
基本语法
1 |
|
应用实例
实例1:查询系统整体磁盘使用情况
12.3.2 查询指定目录的磁盘占用情况
基本语法
1 |
|
选项说明:
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- –max-depth=1 子目录深度为1
- -c 列出明细的同时,增加汇总值
应用实例
案例1:查询 /opt 目录的磁盘占用情况,深度为 2
12.4 磁盘情况-工作实用指令
- 统计/home文件夹下文件的个数
1 |
|
- 统计/home文件夹下目录的个数
1 |
|
3 统计/home文件夹下文件的个数,包括子文件夹里的
1 |
|
4 ) 统计文件夹下目录的个数,包括子文件夹里的
1 |
|
5 ) 以树状显示/home目录结构
1 |
|
十三、网络配置
13.1 Linux网络配置原理图(含虚拟机)
目前我们的网络配置采用的是NAT。
13.2 查看网络IP和网关
在windows环境下,查看ip配置,基本语法:
1 |
|
在linux环境下,查看ip配置,基本语法:
1 |
|
13.3 Ping测试主机之间网络连通
基本语法
1 |
|
应用实例
案例1:测试当前服务器是否可以连接百度
1 |
|
13.4 Linux网络环境配置
13.4.1 第一种方法(自动获取)
说明:登录以后,通过界面来设置自动获取ip,特点:linux启动后会自动获取ip。
缺点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样。这个不适用于做服务器,因为我们的服务器的 ip需要时固定的。
可以多了解一些DHCP(动态路由选择协议)。
13.4.2 第二种方法(指定固定的ip)
说明:直接修改配置文件来指定ip,并可以连接到外网(程序员推荐),要求:将ip地址配置的静态的,ip地址为 192.168.184.130
1 |
|
修改后,一定要重启服务/重启
1 |
|
13.5 设置主机名和hosts映射
13.5.1 设置主机名
- 为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名
- 指令
hostname
:查看主机名 - 修改文件在
/etc/hostname
指定 - 修改后,重启生效
13.5.2 设置hosts映射
通过 主机名 能够找到(比如ping)某个linux系统。
在windows系统下,修改C:\Windows\System32\drivers\etc\hosts
文件指定即可:
1 |
|
在linux系统下,修改/etc/hosts
文件指定即可:
1 |
|
13.6 主机名解析过程分析(Hosts、DNS)
13.6.1 Hosts是什么
一个文本文件,用来记录ip和Hostname(主机名)的映射关系
13.6.2 DNS
- DNS,就是Domain Name System的缩写,翻译过来就是域名系统
- DNS是互联网上作为域名和ip地址相互映射的一个分布式数据库
13.6.3 当用户在浏览器输入www.baidu.com,系统如何解析的ip地址
浏览器先检查浏览器缓存中有没有该域名解析IP地址,如果有就先返回这个IP完成解析;如果没有,就检查操作系统DNS解析器缓存,如果有就直接返回这个IP完成解析。这两个缓存,可以理解为本地解析器缓存。
一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存该域名的IP地址(DNS解析记录),例如在cmd窗口中输入:
1
2ipconfig /displaydns #DNS域名解析缓存
ipconfig /flushdns #手动清理DNS缓存如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中,有没有配置对应的域名IP映射,如果有,则完成解析病返回该IP
所以,修改系统
hosts
文件,可以做到域名劫持。如果本地DNS解析器缓存和hosts文件中均没有找到哦啊对应的IP,则到域名服务器DNS进行解析域名。
十四、进程管理
14.1 进程的基本介绍
1 |
|
14.2 显示系统执行的进程
14.2.1 ps命令基本介绍
ps
命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以加任何参数。
14.2.2 ps现实的信息选项:
字段 | 说明 |
---|---|
PID | 进程识别号 |
TTY | 终端机号 |
TIME | 此进程所消耗CPU时间 |
CMD | 正在执行的命令或进程名 |
1 |
|
一般组合使用ps -aux
14.2.3 ps指令详解
1 |
|
各字段解释:
USER: 用户名称
PID:进程号
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TTY:终端名称,太长就缩写为
?
.STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
START:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间
COMMAND:进程名或者执行进程所用的命令和参数,如果过长会被截断显示
应用实例:
实例1:查看有没有sshd服务进程
1 |
|
实例2:以全格式显示当前所有的进程,查看sshd进程的父进程。
1 |
|
选项解释:
- -e:显示所有进程
- -f:全格式
各字段解释:
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
思考题,如果我们希望查看 sshd进程的父进程号是多少,应该怎样查询 ?
14.3 终止进程kill和killall
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。
基本语法:
1 |
|
常用选项:
- -9 :表示强迫进程立即停止
应用实践:
案例 1 :踢掉某个非法登录用户tom
1 |
|
案例 2 : 终止远程登录服务sshd, 在适当时候再次重启sshd服务
1 |
|
案例 3 : 终止多个gedit 编辑器 【killall, 通过进程名称来终止进程】
1 |
|
案例 4 :强制杀掉一个终端
1 |
|
14.4 查看进程树pstree
基本语法:
1 |
|
常用选项:
- -p:显示进程的PID
- -u:显示进程的所属用户
应用实例:
案例 1 :请你树状的形式显示进程的pid
1 |
|
案例 2 :请你树状的形式进程的用户
1 |
|
14.5 服务(service)管理
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd,防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
14.5.1 service管理指令
1 |
|
在/etc/init.d
下,可以查看service指令管理的服务。
使用实例:
实例1:使用service
指令,查看、关闭、启动network。
1 |
|
14.5.2 查看服务名
方式 1 :使用setup-> 系统服务 就可以看到(可以查看全部服务,许多发行版不支持了)
1 |
|
方式 2 : /etc/init.d/服务名称(只能查看一部分)
1 |
|
14.5.3 服务的运行级别(runlevel)
Linux系统有 7 种运行级别(runlevel):常用的是级别 3 和 5
- 运行级别 0 :系统停机状态,系统默认运行级别不能设为 0 ,否则不能正常启动
- 运行级别 1 :单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别 2 :多用户状态(没有NFS),不支持网络
- 运行级别 3 :完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别 4 :系统未使用,保留
- 运行级别 5 :X 11 控制台,登陆后进入图形GUI模式
- 运行级别 6 :系统正常关闭并重启,默认运行级别不能设为 6 ,否则不能正常启动
14.5.4 Linux开机的流程说明
14.5.5 chkconfig指令
介绍:
- 通过chkconfig命令可以给服务的各个运行级别设置自 启动/关闭
- chkconfig命令管理的服务在
/etc/init.d
查看 - 注意:centos7.0后,很多服务使用
systemctl
管理
基本语法:
1 |
|
使用细节:chkconfig重新设置服务后自动启动或关闭,需要重启机器生效。
14.5.6 systemctl管理指令
基本语法
1 |
|
systemctl指令管理的服务在/usr/lib/systemd/system
查看。
systemctl设置服务的自启动状态
1 |
|
应用案例
案例1:查看防火墙当前状态,关闭防火墙和重启防火墙
1 |
|
细节讨论:
关闭或者启动防火墙后,立即生效。使用telnet查看
1
telnet ip:port
这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效,要使用
systemctl [enable | disable] 服务名
14.5.7 telnet命令
Linux telnet命令用于远端登入。执行telnet指令开启终端机阶段作业,并登入远端主机。
基本语法:
1 |
|
14.5.8 firewall命令
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。
基本语法:
1 |
|
应用实例:
案例1:开放111端口
1 |
|
案例2:关闭111端口
1 |
|
14.6 动态监控进程
介绍:
top与ps命令很相似。它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。
基本语法:
1 |
|
选项说明:
选项 | 功能 |
---|---|
-d 秒数 | 指定top命令每隔几秒更新,默认是3秒。 |
-i | 是top不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程id来仅仅金控某个进程的状态 |
各项解释:
top:系统时间;up:登录用户数;load average:负载均衡
Tasks:进程数;running:运行进程数;sleeping:睡眠进程数;stopped:停止进程;zombie:僵死进程数(进程已死,内存未释放)
%Cpu(s):us:用户占用Cpu比率;sy:系统占用Cpu比率;ni:用户进程空间内改变过优先级的进程占用Cpu比率;id:空闲Cpu比率;wa:等待输入输出的cpu时间占比;si:软终端占用百分比;st:虚拟机占用百分比
KiB Mem:total:物理内存总量;used:使用的物理内存总量;free:空闲内存总量;buffers:用作内核缓冲的内存量
KiB Swap:total:交换区总量;used:使用的交换区总量;free:空闲交换区总量;cached:缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过得交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出是可不必再对交换区写入。
PR:优先级;NI:nice值。负值代表高优先级,正值代表低优先级;VIRT:进程使用的虚拟内存总量,单位kb。VIRT = SWAP + RES;RES:进程使用的、未被换出的物理内存大小,单位kb。RES = CODE + DATA;SHR:共享内存大小,单位kb;S:进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/通知,Z=僵尸进程)
交互操作说明:
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是此项 |
M | 以内存使用率排序 |
N | 以PID排序 |
q | 退出top |
应用实例:
案例1:监视特定用户
1 |
|
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名,即可。
案例 2 :终止指定的进程。
1 |
|
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程ID号
案例 3 :指定系统状态更新的时间(每隔 10 秒自动更新, 默认是 3 秒):
1 |
|
14.7 查看系统网络情况netstat(重要)
基本语法
1 |
|
选项说明
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的进程
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
应用案例
案例1:查看系统所有的网络服务
1 |
|
案例2:请查看服务名为 sshd 的服务的信息。
1 |
|
十五、RPM 和 YUM
15.1 RPM包的管理
15.1.1介绍
1 |
|
15.1.2 rpm包的简单查询指令
1 |
|
应用实例:
案例1:请查询看一下,当前的Linux有没有安装 firefox.
1 |
|
15.1.3 rpm包名基本格式
1 |
|
15.1.4 rpm包的其它查询指令:
1 |
|
15.1.5 卸载rpm包:
基本语法
1 |
|
应用案例
案例1: 删除firefox 软件包
1 |
|
细节问题
如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。如:
1
rpm -e foo
1
2error:
removing these packages would break dependencies: foo is needed by bar-1.0-1如果我们就是要删除 foo这个rpm 包,可以增加参数 –nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行。如:
1
rpm -e --nodeps foo #带上 --nodeps 就是强制删除。
15.1.6 安装rpm包:
基本语法
1 |
|
参数说明
i=install 安装
v=verbose 提示
h=hash 进度条
应用实例
实例1: 演示安装firefox浏览器
步骤先找到firefox的安装rpm 包,你需要挂载上我们安装centos的iso文件,然后到/media/下去找rpm 找。
1 |
|
15.2 YUM
15.2.1 介绍:
Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用yum的前提是可以联网。
15.2.2 yum的基本指令
1 |
|
15.2.3 yum应用实例
案例1:请使用yum的方式来安装firefox
先查看一下 firefox rpm 在yum服务器有没有
1
yum list | grep firefox
安装yuminstallfirefox会安装最新版本的软件。
1
yum install firefox
十六、搭建 JAVAEE 环境
16.1 概述
如果需要在Linux下进行JavaEE的开发,我们需要安装如下软件:
16.2 安装JDK
16.2.1 安装步骤
1 |
|
16.2.1 测试是否安装成功
随意找一个目录,输入javac --version & java --version
1 |
|
16.3 安装TOMCAT
16.3.1 步骤
1 |
|
16.3.2 测试是否安装成功
1 |
|
16.4 安装IDEA
16.4.1 步骤
1 |
|
16.5 MYSQL5.7的安装和配置
16.5.1 安装的步骤和文档
1 |
|
十七、Shell 编程
为什么要学习SHELL编程
1 |
|
SHELL是什么?
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序.
17.1 SHELL脚本的执行方式
17.1.1 脚本格式要求
1 |
|
17.1.2 编写第一个Shell脚本
需求说明:创建一个Shell脚本,输出helloworld!
1 |
|
17.1.3 脚本的常用执行方式
方式 1 (输入脚本的绝对路径或相对路径)
1 )首先要赋予helloworld.sh 脚本的+x权限
2 )执行脚本
1 |
|
方式 2 (sh+脚本的绝对路径或者相对路径),不推荐
说明:不用赋予脚本+x权限,直接执行即可
1 |
|
17.2 Shell的变量
Shell的变量的介绍
1 |
|
17.2.1 shell变量的定义
基本语法
1 |
|
应用案例:
案例 1 :定义变量A
1 |
|
案例 2 :撤销变量A
1 |
|
案例 3 :声明静态的变量B= 2 ,不能unset
1 |
|
案例 4 :可把变量提升为全局环境变量,可供其他shell程序使用【一会举例。】
17.2.2定义变量的规则
1 |
|
17.2.3 将命令的返回值赋给变量(重点)
1 |
|
17.3 设置环境变量
基本语法
1 |
|
应用案例:
案例1:在/etc/profile文件中定义TOMCAT_HOME环境变量
1 |
|
案例2:查看环境变量TOMCAT_HOME的值
1 |
|
案例3:在另外一个shell程序中使用TOMCAT_HOME。注意:在输出TOMCAT_HOME 环境变量前,需要让其生效
1 |
|
17.4 Shell的注释
单行注释:
1 |
|
多行注释
1 |
|
17.5 位置参数变量
介绍:
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如 :./myshell.sh 100 200
, 这个就是一个执行shell的命令行,可以在myshell 脚本中获取到
基本语法:
1 |
|
应用实例:
案例1:编写一个shell脚本 positionPara.sh , 在脚本中获取到命令行的各个参数信息
1 |
|
17.6 预定义变量
基本介绍
预定义变量就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。
基本语法
1 |
|
应用实例
案例1:在一个shell脚本中简单使用一下预定义变量
1 |
|
17.7 运算符
基本介绍
学习如何在shell中进行各种运算操作。
基本语法:
1 |
|
应用实例
案例 1 :计算( 2 + 3 )X 4 的值
1 |
|
案例 2 :请求出命令行的两个参数[整数]的和
1 |
|
17.8 条件判断
基本语法
1 |
|
应用实例
1 |
|
常用判断
1 |
|
应用实例
案例1:”ok”是否等于”ok”
1 |
|
案例2: 23 是否大于等于 22
1 |
|
案例 3 :/root/install.log目录中的文件是否存在
1 |
|
17.9 流程控制
17.9.1 if 判断
基本语法
1 |
|
1 |
|
应用实例
案例1:请编写一个shell程序,如果输入的参数,大于等于 60 ,则输出 “及格了”,如果小于 60 ,则输出 “不及格”
1 |
|
17.9.2 case语句
基本语法
1 |
|
应用实例
案例 1 :当命令行参数是 1 时,输出 “周一”, 是 2 时,就输出”周二”,其它情况输出 “other”
1 |
|
17.9.3 for循环
基本语法
1 |
|
应用实例
案例 1 :打印命令行输入的参数 【会使用到$* $@,体会$* 与 $@的区别】
1 |
|
1 |
|
1 |
|
1 |
|
基本语法
1 |
|
应用实例
案例 1 :从 1 加到 100 的值输出显示
1 |
|
17.9.4 while循环
基本语法
1 |
|
应用实例
案例 1 :从命令行输入一个数n,统计从 1 +..+n 的值是多少?
1 |
|
17.10 READ读取控制台输入
基本语法
1 |
|
选项:
- -p:指定读取值时的提示符;
- -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
参数
变量:指定读取值的变量名
应用实例
案例 1 :读取控制台输入一个num值
1 |
|
案例 2 :读取控制台输入一个num值,在 10 秒内输入。
1 |
|
17.11 函数
函数介绍:
shell编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。
17.11.1 系统函数
basename基本语法
1 |
|
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
案例 1 :请返回 /home/aaa/test.txt 的 “test.txt” 部分
1 |
|
dirname基本语法
1 |
|
案例 2 :请返回 /home/aaa/test.txt 的 /home/aaa
1 |
|
17.11.2 自定义函数
基本语法
1 |
|
调用直接写函数名:funname [值]
应用实例
案例 1 :计算输入两个参数的和(read), getSum
1 |
|
1 |
|
17.12 SHELL编程综合案例
1 |
|
代码实现:
1 |
|
十八、Ubuntu
Ubuntu介绍
Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于GNU/Linux,支持x 86 、amd 64 (即x 64 )和ppc架构,由全球化的专业开发团队(CanonicalLtd)打造的。
专业的Python开发者一般会选择 Ubuntu 这款Linux系统作为生产平台.
温馨提示:
Ubuntu 和 Centos 都是基于 GNU/Linux 内核的,因此基本使用和Centos是几乎一样的,它们的各种指令可以通用,同学们在学习和使用Ubuntu的过程中,会发现各种操作指令在前面学习CentOS都使用过。只是界面和预安装的软件有所差别。
Ubuntu下载地址:http://cn.ubuntu.com/download/
18.1 设置Ubuntu支持中文
默认安装的ubuntu 中只有英文语言,因此是不能显示汉字的。要正确显示汉字,需要安装中文语言包。
安装中文支持步骤:
1 .单击左侧图标栏打开 SystemSettings(系统设置)菜单,点击打开 LanguageSupport(语言支持)选项卡。
2 .点击 Install/RemoveLanguages,在弹出的选项卡中下拉找到Chinese(Simplified),即中文简体,在后面的选项框中打勾。然后点击ApplyChanges 提交,系统会自动联网下载中文语言包。(保证ubuntu 是联网的)。
3 .这时“汉语(中国)”在最后一位因为当前第一位是”English”,所以默认显示都是英文。我们如果希望默认显示用中文,则应该将“汉语(中国)”设置为第一位。设置方法是拖动,鼠标单击“汉语(中国)”,当底色变化(表示选中了)后,按住鼠标左键不松手,向上拖动放置到第一位。
4 .设置后不会即刻生效,需要下一次登录时才会生效。
18.2 Ubuntu的root用户
安装ubuntu成功后,都是普通用户权限,并没有最高root权限,如果需要使用root权限的时候,通常都会在命令前面加上 sudo 。有的时候感觉很麻烦。
我们一般使用su命令来直接切换到root用户的,但是如果没有给root设置初始密码,就会抛出 su:Authenticationfailure 这样的问题。所以,我们只要给root用户设置一个初始密码就好了。
18.2.1 给root用户设置密码并使用
1 |
|
需要注意的是,sudo
是允许当前用户以root身份执行命令,但是本身还是普通用户;而su root
是切换到root用户,家目录变成/root
。
十九、Ubuntu 软件管理和远程登录
APT介绍
apt是AdvancedPackagingTool的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令可用于软件包的安装、删除、清理等,类似于Windows中的软件管理工具。
ubuntu 软件管理的原理示意图:
19.1 Ubuntu软件操作的相关命令
1 |
|
1 |
|
1 |
|
1 |
|
19.2 更新UBUNTU软件下载地址
19.2.1 寻找国内镜像源
https://mirrors.tuna.tsinghua.edu.cn/
所谓的镜像源:可以理解为提供下载软件的地方,比如Android手机上可以下载软件的安卓市场;iOS手机上可以下载软件的AppStore
19.2.2 备份Ubuntu默认的源地址
1 |
|
19.2.3 更新源服务器列表
1 |
|
19.3 Ubuntu软件安装与卸载
使用apt完成安装和卸载vim 软件,并查询 vim软件的信息:
1 |
|
需要注意的是,现在官方主推apt命令,apt相当于apt-get + apt-cache + apt-config
19.4 使用SSH远程登录Ubuntu
ssh介绍
SSH为SecureShell的缩写,由 IETF 的网络工作小组(NetworkWorkingGroup)所制定;SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。几乎所有 UNIX 平台—包括 HP-UX、Linux、AIX、Solaris、DigitalUNIX、Irix,以及其他平台,都可运行SSH。
使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。和CentOS不一样,Ubuntu默认没有安装SSHD服务(netstat -anp 查看是否有进程监听22号端口,如果连netstat命令都没有安装,可以使用apt install net-tools先安装netstat命令),因此,我们不能进行远程登录。
19.4.1 原理示意图
19.5 使用SSH远程登录Ubuntu
19.5.1 安装SSH和启用
1 |
|
19.5.2 从linux系统客户机远程登陆linux系统服务机
首先,我们需要在linux的系统客户机也要安装openssh-server
基本语法
1 |
|
登出
1 |
|
二十、CentOS8.0 Vs CentOS7.0
可惜,由于红帽的政策,Centos会逐渐变成上游不稳定版本,而且Centos7和Centos8也会很快不被维护。
二十一、日志管理
基本介绍
- 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
- 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
- 可以这样理解日志是用来记录重大事件的工具
21.1 系统常用日志
/var/log
目录就是系统日志文件的保存位置:
应用案例
案例1:使用root用户通过xshell6登陆,第一次使用错误的密码,第二次使用正确的密码登录成功看看在日志文件/var/log/secure里有没有记录相关信息
1 |
|
21.2 日志管理服务rsyslogd
CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd。rsyslogd功能更强大。rsyslogd的使用、日志文件的格式,和syslogd服务兼容的。
/etc/rsyslog.conf
中记录了,各种服务应该写入日志的目录。
应用案例
案例1:查询Linux中的rsyslogd服务是否启动
1 |
|
案例2:查询rsyslogd服务的自启动状态
1 |
|
21.2.1 配置文件 /etc/rsyslog.conf
编辑文件时的格式为:*.*, 存放日志文件
其中第一个*代表日志类型,第二个*代表日志级别
日志类型分为:
auth:pam产生的日志
authpriv:ssh、ftp等登录信息的验证信息
corn:时间任务相关
kern:内核
lpr:打印
mail:邮件
mark(syslog)-rsyslog:服务内部的信息,时间标识
news:新闻组
user:用户程序产生的相关信息
uucp:unix to unix copy主机之间相关的通信
local 1-7:自定义的日志设备
日志级别:
debug:有调试信息的,日志通信最多
info:一般信息日志,最常用
notice:最具有重要性的普通条件的信息
warning:警告级别
err:错误级别,阻止某个功能或者模块不能正常工作的信息
crit:严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert:需要立刻修改的信息
emerg:内核崩溃等重要信息
none:什么都不记录
注意:从上到下,级别从低到高,记录信息越来越少
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
事件产生的时间
产生事件的服务器的主机名
产生事件的服务名或程序名
事件的具体信息
应用案例
案例1:查看一下/var/log/secure日志,这个日志中记录的是用户验证和授权方面的信息,来分析如何查看
1 |
|
案例2:在/etc/rsyslog.conf中添加一个日志文件/var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存.给小伙伴演示重启,登录的情况,看看是否有日志保存。
1 |
|
1 |
|
21.3 日志轮替
基本介绍
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。
21.3.1 日志轮替文件命名
- centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中“dateext”参数
- 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
- 如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
21.3.2 logrotate配置文件
/etc/logrotate.conf
为logrotate的全局配置文件
#rotate log files weekly,每周对日志文件进行一次轮替
weekly
#keep 4 weeks worth of backlogs,共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
rotate4
#create new (empty) log files after rotating old ones,创建新的空的日志文件,在日志轮替后
create
#use date as a suffix of the rotated file,使用日期作为日志轮替文件的后缀
dateext
#uncomment this if you want your log files compressed,日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩#compress
#RPM packages drop log rotation information into this directory
include /etc/logrotate.d/
#包含/etc/logrotate.d/目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来,
#下面是单独设置,优先级更高。
#no packages own wtmp and btmp – we’ll rotate them here
1 |
|
1 |
|
21.3.3 logroate配置文件的参数说明
daily | 日志的轮替周期是每天 |
---|---|
weekly | 日志的轮替周期是每周 |
monthly | 日后在的轮替周期是每月 |
rotate 数字 | 保留的日志文件个数。0指每月备份 |
compress | 日志轮替是,旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组 |
mail address | 当日志轮替是,输出内容通过邮件发送到指定的邮件地址 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize 大小 | 日志轮替的最小值,也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替 |
dateext | 使用日期作为日志轮替文件的后缀 |
sharedscripts | 再次关键字之后的监本只执行一次 |
prerotate/endscript | 在日志轮替前执行脚本命令 |
postroate/endscript | 在日志轮替后执行脚本命令 |
应用案例
案例1:把自己的日志加入日志轮替
1 |
|
21.3.4 日志轮替机制原理
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的。
21.4 查看内存日志
journalctl可以查看内存日志,这里我们看看常用的指令。
1 |
|
注意:journalctl查看的事内存日志,重启清空
应用案例:
案例1:使用 journalctl | grep sshd来看看用户登录清空,重启系统,再次查询,看看日志有什么变化没有
1 |
|
二十二、定制自己的Linux系统
22.1 基本介绍
通过裁剪现有Linux系统(CentOS7.6),创建属于自己的minLinux小系统,可以加深我们对linux的理解。
22.2 启动流程介绍
制作Linux小系统之前,再了解一下Linux的启动流程:
1、首先Linux要通过自检,检查硬件设备有没有故障
2、如果有多块启动盘的话,需要在BIOS中选择启动磁盘
3、启动MBR中的bootloader引导程序
4、加载内核文件
5、执行所有进程的父进程、老祖宗systemd
6、欢迎界面
在Linux的启动流程中,加载内核文件时关键文件:
1)kernel文件:vmlinuz-3.10.0-957.el7.x86_64
2)initrd文件:initramfs-3.10.0-957.el7.x86_64.img
22.3 制作minlinux思路分析
1)在现有的Linux系统(centos7.6)上加一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。需要明确的是,现在加的这个硬盘在现有的Linux系统中是/dev/sdb,但是,当我们把东西全部设置好时,要把这个硬盘拔除,放在新系统上,此时,就是/dev/sda
2)在/dev/sdb硬盘上,将其打造成独立的Linux系统,里面的所有文件是需要拷贝进去的
3)作为能独立运行的Linux系统,内核是一定不能少,要把内核文件和initramfs文件也一起拷到/dev/sdb上
4)以上步骤完成,我们的自制Linux就完成,创建一个新的linux虚拟机,将其硬盘指向我们创建的硬盘,启动即可
二十三、Linux内核源码介绍&内核升级
为什么要阅读linux内核?
1)爱好,就是喜欢linux(黑客精神)
2)想深入理解linux底层运行机制,对操作系统有深入理解
3)阅读Linux内核,你会对整个计算机体系有一个更深刻的认识。作为开发者,不管你从事的是驱动开发,应用开发还是后台开发,你都需要了解操作系统内核的运行机制,这样才能写出更好的代码。
4)作为开发人员不应该只局限在自己的领域,你设计的模块看起来小,但是你不了解进程的调用机制,你不知道进程为什么会阻塞、就绪、执行几个状态。那么很难写出优质的代码。
5)作为有追求的程序员,还是应该深入的了解一个操作系统的底层机制,(比如linux/unix)最好是源码级别的,这样你写多线程高并发程序,包括架构,优化,算法等,高度不一样的,当然老韩也不是要求小伙伴儿把一个非常庞大的Linux内核每一行都读懂。我觉得。你至少能看几个核心的模块。
23.1 linux0.01内核源码
Linux的内核源代码可以从网上下载,解压缩后文件一般也都位于linux目录下。内核源代码有很多版本,可以从linux0.01内核入手,总共的代码1w行左右,最新版本5.9.8总共代码超过700w行,非常庞大.Linux内核下载地址
23.1.1 内核源码阅读技巧
1)linux0.01的阅读需要懂c语言
2)阅读源码前,应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应.
3)在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行
4)对于Linux启动的代码可顺着Linux的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解
23.1.2 linux目录说明
23.1.3 main.c初探
23.2 内核升级
1 |
|
二十四、备份与恢复
基本介绍:
实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术linux的备份和恢复很简单,有两种方式:
1)把需要的文件(或者分区)用tar
打包就行,下次需要恢复的时候,再解压开覆盖即可
2)使用dump和restore命令
24.1 安装dump和restore
1 |
|
24.2 使用dump完成备份
基本介绍
dump支持分卷和增量备份(所谓增量备份是指备份上次备份后修改/增加过的文件,也称差异备份)。
基本语法
1 |
|
选项解释
1 |
|
应用案例
案例1:将/boot分区所有内容备份到/opt/boot.bak0.bz2文件中,备份层级为“0”
1 |
|
案例2:在/boot目录下增加新文件,备份层级为“1”(只备份上次使用层次“0”备份后发生过改变的数据),注意比较看看这次生成的备份文件boot1.bak有多大
1 |
|
通过dump命令在配合crontab可以实现无人值守备份
案例3:显示需要备份的文件及其最后一次备份的层级,时间,日期
1 |
|
案例4:查看备份时间文件
1 |
|
dump备份文件或者目录前面我们在备份分区时,是可以支持增量备份的,如果备份文件或者目录,不再支持增量备份,即只能使用0级别备份案例,也不支持-u选项。
使用dump备份/etc整个目录
1 |
|
24.3 使用restore完成恢复
基本介绍
restore命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件,一般是恢复到当前目录
基本语法
1 |
|
说明下面四个模式,不能混用,再一次命令中,只能指定一种:
1 |
|
选项:
1 |
|
应用案例
案例1:restore命令比较模式,比较备份文件和原文件的区别
1 |
|
1 |
|
案例2:restore命令查看模式,看备份文件有哪些数据/文件
1 |
|
案例3:restore命令还原模式,注意细节:如果你有增量备份,需要把增量备份文件也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可。
1 |
|
案例4:restore命令恢复备份的文件,或者整个目录的文件
1 |
|
二十五、Linux可视化管理
25.1 webmin
25.1.1 基本介绍
Webmin是功能强大的基于Web的Unix/linux系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理操作。除了各版本的linux以外还可用于:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等系统
25.1.2 安装webmin&配置
1)下载地址:http://download.webmin.com/download/yum/,用下载工具下载即可
或者wgethttp://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm
2)安装:rpm -ivh webmin-1.700-1.noarch.rpm
3)重置密码:/usr/libexec/webmin/changepass.pl /etc/webminroot test root
是webmin的用户名,不是OS的,这里就是把webmin的root用户密码改成了test
4)修改webmin服务的端口号(默认是10000出于安全目的)
1 |
|
5)重启webmin
1 |
|
6)防火墙放开6666端口
1 |
|
7)登录webmin
用root账号和重置的新密码test
25.2 bt(宝塔)
25.2.1基本介绍
bt宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务器管理功能。
25.2.2 安装使用
1)安装
1 |
|
&&代表先执行前面的命令,在执行后面的命令。
2)安装成功后控制台会显示登录地址,账户密码,复制浏览器打开登录,
25.2.3 如果bt的用户名,密码忘记了,使用btdefault可以查看
1 |
|
二十六、Linux应用实例
案例1:分析日志t.log(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排序
1 |
|
1 |
|
cut是split命令,-d是指定分割符号(不可以是空格),-f是取出第几列,uniq -c 统计命令是统计相邻行相同的数量
案例2:统计连接到服务器的各个ip情况,并按连接数从大到小排序
1 |
|
案例3:如忘记了mysql5.7数据库的ROOT用户的密码,如何找回?
1 |
|
案例4:统计ip访问情况,要求分析nginx访问日志(access.log),找出访问页面数量在前2位的ip
1 |
|
案例5:使用tcpdump监听本机,将来自ip192.168.200.1,tcp端口为22的数据,保存输出到tcpdump.log,用做将来数据分析
1 |
|
监听网络设备ens33
案例6:常用的Nginx模块,用来做什么
1 |
|
案例7:如果你是系统管理员,在进行Linux系统权限划分时,应考虑哪些因素?
注意权限分离,比如:工作中,Linux系统权限和数据库权限不要在同一个部门
权限最小原则(即:在满足使用的情况下最少优先)
减少使用root用户,尽量用普通用户+sudo提权进行日常操作。
重要的系统文件,比如/etc/passwd,/etc/shadowetc/fstab,/etc/sudoers等,日常建议使用chattr(change attribute)锁定,需要操作时再打开。【演示比如:锁定/etc/passwd让任何用户都不能随意useradd,除非解除锁定】
1
chattr +i /etc/passwd #锁定文件
使用SUID,SGID,Sticky设置特殊权限。
可以利用工具,比如chkrootkit或者rootkit hunter检测rootkit脚本(rootkit是入侵者使用工具,在不察觉的建立了入侵系统途径)[演示使用wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz]
利用工具Tripwire检测文件系统完整性
案例8:权限操作思考题
(1)用户tom对目录/home/test有执行x和读r写w权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗(ok)?能修改吗(no)?能删除吗?(ok)
(2)用户tom对目录/home/test只有读写权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗(no)?能修改吗(no)?能删除吗(no)?
(3)用户tom对目录/home/test只有执行权限x,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗(ok)?能修改吗(no)?能删除吗(no)?
(4)用户tom对目录/home/test只有执行x和写w权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗(ok)?能修改吗(no)?能删除吗(ok)?
案例9:列举Linux高级命令,至少6个
1 |
|
案例10:Linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么?
1 |
|
案例11:使用Linux命令计算t2.txt第二列的和并输出
1 |
|
案例12:Shell脚本里如何检查一个文件是否存在?
1 |
|
案例13:用shell写一个脚本,对文本t3.txt中无序的一列数字排序,并将总和输出
1 |
|
案例14:请用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符“cat”的文件名称
1 |
|
案例15:请写出统计/home目录下所有文件个数和所有文件总行数的指令
1 |
|
案例16:每天晚上10点30分,打包站点目录/var/spool/mail备份到/home目录下(每次备份按时间生成不同的备份包比如按照年月日时分秒)
1 |
|
案例17:如何优化Linux系统,说出你的方法
(1)不用root,使用sudo提示权限
(2)定时的自动更新服务时间,使用nptdate npt1.aliyun.com,让croud定时更新
(3)配置yum源,指向国内镜像(清华,163)
(4)配置合理的防火墙策略,打开必要的端口,关闭不必要的端口
(5)打开最大文件数(调整文件的描述的数量)vim /etc/profile ulimit -SHn 65535
(6)配置合理的监控策略
(7)配置合理的系统重要文件的备份策略
(8)对安装的软件进行优化,比如nginx,apache
(9)内核参数进行优化/etc/sysctl.conf
(10)锁定一些重要的系统文件chattr/etc/passwd /ect/shadow /etc/inittab
(11)禁用不必要的服务setup,ntsysv
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!