linux笔记

2020/3/10

Linux操作系统是UNIX操作系统的一种克隆系统,它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。
Linux以它的高效性和灵活性著称,Linux模块化的设计结构,使得它既能在价格昂贵的工作站上运行,也能够在廉价的PC机上实现全部的Unix特性,具有多任务、多用户的能力。Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Windows图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统进行操作。

自学站点推荐:

  1. https://www.icourse163.org/(慕课)
    1. https://www.icourse163.org/search.htm?search=linux#/
  2. https://cn.netacad.com/(思科)
  3. https://www.educoder.net/(在线实训)
    1. https://www.educoder.net/shixuns?id=16&type=sub&palce=6
  4. https://www.linuxprobe.com/(Linux培训,Linux就该这么学,资源多)
  5. https://www.fujieace.com/linux/man/china-man.html(命令查找)

开源协议

主要流行的开原协议有六种:GPL、BSD、MIT、MPL(Mozilla)、Apache和LGPL,需要记住的是开源不等于免费,开源也不等于没有约束

廖雪峰

  1. 简单宽松的协议
    如果你怕麻烦只想要一个简单协议,MIT协议相对宽松但抓住了要点,此协议允许别人以任何方式使用你的代码同时署名原作者,但原作者不承担代码使用后的风险,当然也没有技术支持的义务,jQuery和Rails就是MIT协议。

  2. 有专利的需求
    如果你的作品中涉及到专利相关,Apache协议也是个相对宽松与MIT类似的协议,但它简单指明了作品归属者的著作权,Apache服务器,SVN还有NuGet等是使用的Apache协议。

  3. 代码分享与促进

    如果你在乎作品的传播和别人的修改,希望别人也以相同的协议分享出来。GPL(V2或V3)是一种版本自由的协议(可以参照copy right来理解,后者是版本保留,那copyleft便是版权自由,或者无版权,但无版权不代表你可以不遵守软件中声明的协议)。此协议要求代码分发者或者以此代码为基础开发出来的衍生作品需要以同样的协议来发布。

不同协议的详细比较

参考资料:

  1. http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
  2. https://www.zhihu.com/question/28292322/answer/222922925
  3. https://choosealicense.com/

三种软件模式

  • 商业软件
    • 由开发者出售拷贝并提供软件技术服务,用户只有使用权, 但不得进行非法拷贝、扩散和修改
  • 共享软件
    • 共享软件由开发者提供试用程序拷贝授权,用户在使用该程序拷贝一段时间之后,必须向开发者缴纳使用费,开发者则提供相应的升级和技术服务
  • 自由软件
    • 自由软件所指称的软件,其使用者有使用、复制、散布、研究、改写、再利用该软件的自由
    • 自由软件的创始人:Richard M.Stallman,他是黑客历史上最伟大的黑客,被称为黑客中的圣者

什么是操作系统

操作系统(Operating Ststem,简称OS)传统上是负责对电脑硬件直接控制及管理的系统软件

  • 操作系统的功能一般包括处理器管理、存储管理、文件管理、设备管理和作业管理等
  • 当多个程序同时运行时,操作系统负责规划以及优化每个程序的处理时间

对计算机系统而言,操作系统是对所有系统资源进行管理的程序的集合;对用户而言,操作系统提供了对系统资源进行有效利用的简单抽象的方法

Linux系统

Linux是个类Unix的系统,同时他是一个自由软件,是免费的、源代码开放的,编制他的目的是简历不受任何商业化软件版权制约的、全世界都能自由使用的UNIX兼容产品,稳定可靠本课主要以centos为主

虽然常被称为Linux,但他们应该更准确的被称为GNU/Linux

特点

  • 开放性的系统
  • 多用户多任务的系统
  • 具有出色的稳定性和速度性能
  • 具有可靠的系统安全性
  • 提供了丰富的网络功能
  • 标准兼容性和可移植性
  • 提供了良好的用户界面

组成

  • Linux内核

    内核源代码:https://www.kernel.org/,内核(Kernel)是系统的心脏,实现操作系统的基本功能

  • Linux Shell:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口

  • LInux应用程序:包括文本编辑器、编程语言、window、办公套件、Internet工具、数据库等

  • Linux文件系统:文件系统是文件存放在磁盘等存储设备上的组织办法。通常是按照目录层次方式进行组织。系统以/为根目录

内核版本

image-20200312134541891

主流Linux发行套件

主要分redhat红帽类和debian类,目前主流为红帽7

  • redhat(服务器)

    redhat.com

    免费开放下载安装,但不能自动更新以及后期问题技术解决支持

    收费项目:

    • 自动更新漏洞
    • 后期问题技术解决支持
  • centos(服务器)

    北美Linux爱好者们制作而成,与红帽几乎相等,支持自动更新,但无技术支持(已被红帽收购)

  • defora(个人)

    界面友好,常用作进入软件redhat前的测试(红帽旗下)

  • Ubuntu

    界面友好(debian类)

课后作业:站点推荐的查看与环境下载与搭建centos7

安装使用:virtualbox 或 vmware workstation

具体文件结构

  1. /:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。
  2. /bin:bin 就是二进制(binary)英文缩写。在一般的系统当中,都可以在这个目录下找到linux常用的命令。系统所需要的那些命令位于此目录。
  3. /boot:Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录。
  4. /cdrom:这个目录在刚刚安装系统的时候是空的。可以将光驱文件系统挂在这个目录下。例如:mount /dev/cdrom /cdrom
  5. /dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和常用的windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
  6. /etc:etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。
  7. /home:如果建立一个用户,用户名是"xx",那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。
  8. /lib:lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。
  9. /lost+found:在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。
  10. /mnt:这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom等目录。可以参看/etc/fstab的定义。
  11. /media:有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。
  12. /opt:这里主要存放那些可选的程序。
  13. /proc:可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。
  14. /root:Linux超级权限用户root的家目录。
  15. /sbin:这个目录是用来存放系统管理员的系统管理程序。大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的,凡是目录sbin中包含的都是root权限才能执行的。
  16. /selinux :对SElinux的一些配置文件目录,SElinux可以让linux更加安全。
  17. /srv: 服务启动后,所需访问的数据目录,举个例子来说,www服务启动读取的网页数据就可以放在/srv/www中
  18. /tmp:临时文件目录,用来存放不同程序执行时产生的临时文件。有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。
  19. /usr:这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。在这个目录下,可以找到那些不适合放在/bin或/etc目录下的额外的工具
  20. /usr/local:这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面、。
  21. /usr/share :系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。
  22. /var:这个目录的内容是经常变动的,看名字就知道,可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/ www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地。

安装与详解

2020/3/12

  • 虚拟机如果出现虚拟机被锁定,可以去虚拟机存储的目录中将.lck的文件删除
  • 系统版本介绍
    • DVD 标准版(推荐用这个)4G
    • Everything 完整版本10G
    • LiveKDE 体验版1G
    • Minnimal 最小安装包0.9G
    • NetInstall 网络安装0.5G
  • 我们可以在镜像站中选择下载,下面介绍的安装过程是用了网易的centOS的DVD标准版,http://mirrors.163.com/centos/7.7.1908/isos/x86_64/

image-20200312132803802

安装过程

首先我们新建虚拟机,这里最好用自定义来安装

image-20200312023501249

选择硬件兼容性这里越高越好

image-20200312023525501

这里我们使用稍后安装操作系统

image-20200312023625126

选择Linux,并选择对应的版本

image-20200312023649173

这里选择安装的位置以及在VM中显示的名称

image-20200312023724438

为虚拟机指定的处理器(CPU)数量

image-20200312023740953

为其分配的内存

image-20200312023750071

为其分配磁盘大小,为了后期的操作越大越好,接下来都是默认下一步即可

image-20200312023832356

完成之后选择编辑虚拟机设置添加挂载光盘镜像

image-20200312023908015

点击CD/DVD(IDE)这里推荐使用centOS DVD即标准版,你也可以使用Everything的版本,选择好之后点击完成并打开虚拟机

image-20200312023944540

打开虚拟机之后会让你选择安装还是测试,这里选择第一个安装install CentOS即可

image-20200312114456274

这里可能需要你按下回车键,然后等待一会

image-20200312024303748

进入了安装界面进行配置,为了体验良好可以选择中文安装,这里选择中文在安装的时候是中文,安装完成之后也自动会是中文,点击继续

image-20200312114736077

之后等待一会,这里的安装源就是我们的iso文件,右边的软件选择它默认是最小安装,如果选择了最小安装,安装之后是没有图像界面的,如果想安装带有GUI姐买你的话这里就需要点击软件选择

image-20200312115021760

然后选择带GUI的服务器,点击完成即可

image-20200312115003876

之后点击安装位置,这是具体分区,我们使用自动配置完成即可

image-20200312115128268

然后点击KDUMP,将其取消,点击完成

image-20200312115218057

最后配置网络设置,这里需要视具体情况配置,配置虚拟机的时候使用了NAT,所以直接配置自动获取就好,假如你使用了桥接的方式则需要根据局域网的配置进行手动获自动配置,完成之后你也可以更改下面的主机名,记得点击应用然后完成开始安装

image-20200312115330472

安装过程中你需要配置一个root密码(记得设置得复杂点),因为在平时操作中我们都是用普通用户去登录所以建议再创建一个用户

image-20200312115723457

配置好之后等待安装完成,安装好之后会让你选择重启计算机,点击重启

image-20200312125008634

等待重启完成之后会让你同意开源协议,点进去同意即可,然后点击完成配置

image-20200312125344674

此时已经配置完成了,点击登录你刚刚创建的用户登录或选择未列出使用root即可进入带有图形界面的centOS

image-20200312125535307

image-20200312130015602

在GUI的界面可以和字符界面进行互换

详解

图像界面在linux中也只是一个程序

如果是最小化安装则是纯命令行的模式,服务器的安全级别比较高的话也是纯命令行的模式

安装好图形界面可以自由切换命令行的图形界面

字符界面转图形界面:init 3

Linux工作界面

Linux的工作界面有两种:字符界面与图形界面

字符界面

  • 使用字符界面的好处

    • 在字符操作方式下可以高效的完成所有的任务,尤其是系统管理任务

    • 系统管理任务通常在远程进行,而远程登录后进入的是字符工作方式

    • 由于使用字符界面不用启动图形工作环境,大大的节省了系统资源开销

  • 如何进入字符界面

    • 在图形环境下开启终端窗口进入字符界面的方式
    • 在系统启动后直接进入字符工作方式
    • 使用远程登录方式(Telnet或SSH)进入字符工作方式
    • 字符界面登录与注销
      • 虚拟控制台(Virtual Console)
        • 系统默认提供了6个虚拟控制台。每个虚拟控制台可以独立的使用,互不影响
        • 使用Alt+F1~Alt+F6进行多个虚拟控制台之间的切换
      • 登录提示符
        • 超级用户登录后的操作提示符是:#
        • 普通用户登录后的操作提示符是:$
      • 注销
        • logout命令
        • Ctrl+D热键
  • 注意:一般应该使用普通用户登录系统,不要使用root用户登录,当需要进行超级用户工作时可以使用su - 命令切换为超级用户身份

  • 在Linux环境下使用SSH远程登录Linux

    • ssh:Secure shell
    • 用户在通过ssh连接到远程系统时在网络上传输的口令和数据都是经过加密的,比传统的telnet远程登录更加安全
    • ssh的使用方法:
      • $ ssh -l osmond 192.168.1.100
      • $ ssh osmond@192.168.1.100
  • 在Windows环境下使用putty远程登录Linux

    • 在putty中支持telnet、ssh、rlogin等连接方式
  • 获取帮组:

    • 字符界面:
      • help:获得bash的内部命令棒子
      • man:获得手册页帮助(推出man按q即可)
        • $ man passwd
        • $ man 5 passwd
        • $ man -k selinux
      • info:获得texinfo文档帮助(推出info按q即可)
      • pinfo:获得texinfo文档帮助
      • wh*命令
        • $ whatis ls
        • $ whereis ls
        • $ whichis ls

图形界面

在使用环境中图形界面虽然友好,但是非常耗费系统资源,而且图形界面存在的安全漏洞也更多

  • 两种桌面集成环境
    • Gnome集成环境
      • 获得帮助:
        • tylp:浏览帮助文档
    • KDE集成环境

shell

概念

shell是用户和Linux内核之间的接口程序,为用户提供使用操作系统的操作接口。他是一种基于传统字符界面的操作系统,与DOS有几分类似,在Linux系统中具有极其重要的地位
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。同Linux本身一样,Shell也有多种不同的版本。目前主要有下列版本的Shell: Bourne Shell:是贝尔实验室开发的。

  • BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。
  • Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。
  • C Shell:是SUN公司Shell的BSD版本。
  • Z Shell:The last shell you’ll ever need! Z是最后一个字母,也就是终极Shell。它集成了bash、ksh的重要特性,同时又增加了自己独有的特性。

功能

  • 进行命令解释
  • 解释型的程序设计语言

shell种类

  • Bourne shell (sh)
  • C shell (csh)
  • Korn shell (ksh)

虚拟终端的作用

  • 当在系统启动时直接进入字符工作方式后,系统提供了多个虚拟控制台。每个虚拟控制台可以独立使用,互不影响
  • 虚拟控制台使得 Linux成为一个真正的多用户操作系统。在不同的控制台上,可以同时接受多个用户登录;也允许一个用户进行多次登录。
  • 虚拟控制台之间的切换
    • alt+f1~alt+f6
    • ctrl+alt+f1~ctrl+alt+f6(用户使用startx命令在字符界面下启动了图形环境时切换字符虚拟终端的方式,使用ctrl+alrt+f7切换到图形界面)

X Window概念和作用

一套Unix共通的图形界面标准,复合X Window协定的软件都可以在任何X Window上显示,执行与显示独立运作

人性化桌面环境:Gnome与KDE

GNOME桌面图标的作用

GNOME是GNU网络对象模型环境(GNU Network Object Model Environment)的缩写,他是GNU项目的一部分,是完全开放源代码的自由软件

在Red Hat Linux系统中,已经将GNOME作为默认的桌面管理器

image-20200312143150700

KDE桌面

KDE桌面环境( K desktopnvi ronment)是使用图标、窗口、菜单和面板之类常用图形化对象的图形化桌面。KDE的外观、操作和 Windows非常相似,大大降低了 Linux用户的学习难度,同时在稳定性上KDE也非常出色

其他

image-20200312143430030

image-20200312143453832

关机

  • shutdown或shutdown -h now/+n(立即或n分钟后关闭系统)
  • halt:关闭系统(其实就是调用shutdown -h)
  • intit 0

重启

  • shutdown -r
  • inti 6
  • reboot

PV-VG-LV的设备名

含义 设备名
PV 物理卷:磁盘或分区 /dev/dsa
VG 卷组:一组磁盘 和/或 分区 /dev/<VG name>(目录)
LV 逻辑卷:LVM分区 /dev/<VF name>/<LV name>

系统文件夹

位置 说明
/bin 存放所有用户可以使用的目录
/sbin 存放只有系统管理员可以使用的目录
/boot 用于存放于系统启动相关的文件
/dev 设备文件存放位置
/etc 配置文件存放位置
/home 普通用户家目录
/lib 用户存放系统的动态链接库
/mnt 移动存储介质的默认挂载点
/root root用户家目录。
/proc 位于内存中的内核信息
/tmp 用于存放各种临时文件
/var 用于存放经常变化的文件

每一个用户都有自己的主目录(家目录),主目录与根目录不一样

文件路径

linux的路径采用/开始,文件夹在创建中尽量避免使用 空格,因为空格在shell中是作为分隔符使用

  • rpm的绝对路径是从/usr/lib/rpm
  • 从usr到rpm的相对路径是:./lib/rpmvcvcvvvc

image-20200317160001893

绝对路径与相对路径

  1. 查看当前所在的路径的命令:pwd
  2. 如果想切换到/etc/目录应使用:cd /etc
  3. 回到上次所在目录:cd -
  4. 回到主目录:cd
  5. 切换到根目录:cd /
  6. 切换到上级目录:cd ..
  7. 若当前位于/etc/stsconfig/network-scripts/warpper目录下如何快速回到/etc/stsconfig目录下:cd ../..

Linux命令介绍

2020/03/17

虚拟机中linux系统导出ova文件放到一个地方

在云平台中当用户需要一个虚拟机的时候,就可以通过这种ova的方法快速给用户建立一个虚拟系统

图形界面与字符界面

图形界面非常消耗系统资源且安全漏洞较多

大小写区分

inux系统中命令区分大小写,windows中区分大小写,如果在windows中创建文件夹,大小写相同的文件夹将报错,在linux中复制a和A的文件夹到windows会报错!

shell

在shell中是作为分隔符使用,shell也能算是编程的一种

Linux常用命令

获取帮助

man

man [命令]

-h

[命令] -h / --help

help

help [命令]

info

info [命令]

百度/谷歌

init

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败

  • init一共分为7个级别,这7个级别的所代表的含义如下
  • 0:停机或者关机(千万不能将initdefault设置为0)
  • 1:单用户模式,只root用户进行维护
  • 2:多用户模式,不能使用NFS(Net File System)
  • 3:完全多用户模式(标准的运行级别)
  • 4:安全模式
  • 5:图形化(即图形界面)
  • 6:重启(千万不要把initdefault设置为6)

系统关机或重启或切换字符界面

通过快捷键切换图形与字符窗口

ctrl+alt+[f1~F6]按这个快捷键可以快速的进入其他窗口进行测试

从GUI界面切换字符界面

在终端内输入:init 3

从字符界面切换到字符界面

在终端内输入:init 5

init 5和startx的区别

 使用init 5 切换到运行级别5和使用startx登录图形界面看起来差不多,其实差别挺大的。最主要的差别就是语系,你可能发现你设定的环境是中文的,但是startx后系统桌面环境变成英文的了,并且输入法也调不出来了。

  • startx是单纯的以执行命令者的身份启动X图形界面,环境变量是当前身份的。任意用户可以执行。
  • init 5 切换到运行级别5,则是启动 runlevel 5所对应的服务,并运行图形登录管理器,由用户选择以何种身份登录。该操作是有重新启动系统服务的,需要重新输入用户名和密码登陆。只有root有权执行。

  可以用chkconfig --list |more 查看在runlevel 5上启动的服务,和用ps -aux查看在startx启动时运行服务信息对比即知.startx只是在原运行级别基础上加载了图形,而init 5除了图形外还有

logout

注销推出当前用户窗口

exit

注销推出当前用户窗口,和ctrl+d差不多,与windows的ctrl+w类似

shutdown

shutdown会给系统计划一个时间关机,它可以被用于停止、关机、重启机器,也可以在后面添加参数进行指定关机的操作

shutdown
shutdown now	 ### 立刻关机
shutdown 13:20   ### 在指定小时/分钟关机,额外地,你也可以设置一个广播信息在系统关闭前发送给所有已登录的用户。
shutdown -p now  ### 关闭机器
shutdown -H now  ### 停止机器      
shutdown -r09:35 ### 在 09:35am 重启机器
shutdown -h now	 ### 立刻关机(生产常用)
shutdown -h +1   ### 一分钟后关闭

如果下取消即将进行的关机,只需要在下面输入

shutdown -c

halt

halt是通知硬件来停止所有CPU功能,但是仍然保持通电。你可以用它使系统处于地层维护状态,但是注意有些情况会让他完全关闭系统

halt			### 停止机器
halt -p 		### 关闭机器
halt --reboot	### 重启机器

poweroff

如同名字一般,poweroff会发送一个ACPI习惯好来通知系统关闭

poweroff			### 关闭机器
poweroff --halt		### 停止机器
poweroff --reboot	### 重启机器

reboot

这个也和名字一样,通知系统重启

reboot			### 重启机器
reboot --halt	### 停止机器
rebopt -p		### 关闭机器

目录管理与文件管理

Linux与windows不同,linux是从/根目录开始的,windows是从盘符开始,在Linux中的绝对路径与相对路径的写法是如何呢?下面先吧目录结构打出来

|-- /					# 根目录
|   |--root				# 文件夹
|   |  |--a				# 文件夹
|   |  |  |--b			# 文件夹
|   |  |  |--D			# 文件夹
|   |  |  |  |--C		# 文本文件

绝对路径

假设当前文件位置为/root/a/d要切换到/root/a/b中,切换路径时使用的绝对路径的命令为:cd /root/a/b

相对路径

假设当前文件位置为/root/a/b要切换到/root 中,切换路径时使用的相对路径的命令为:cd ../../

ls

  • 简介:列出目录内容,与ls, dir, vdir类似

  • 命令:ls [-选项] [文件名...]
    记得后面的参数要添加空格

    命令 解释
    ls 直接使用ls命令出来的结果是列出当前目录下的文件与文件夹,其中蓝色的是目录,黑色的是文件
    ls -a 是显示所有文件及目录,包括隐藏文件(隐藏文件一般以“.“点号开头)
    ls -d 是将目录名像其他文件一样列出,而不是列出他们的内容
    ls -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
    ls -A -A同-a,但不列出“.”(当前目录)及“。。”(父目录)
# 显示a文件夹内的内容
[root@centos /]# ls -l a
总用量 4
-r-xr--rw-. 1 bit  bit    0 4月   1 21:57 a.txt
drwxr-xr-x. 2 root root  19 4月   1 18:16 b
-rw-r--r--. 1 root root 204 4月   1 21:46 b.txt
drwxr-xr-x. 2 root root  19 4月   1 18:16 c
# 显示a文件夹
[root@centos /]# ls -ld a
drwxrwsrwx. 4 root root 50 4月   1 21:48 a

cd

  • 切换当前路径
  • 命令:cd [dirName]
  • cd ~ 跳转到自己的home目录
  • cd ../.. 跳转目前目录的上两层

pwd

  • 显示目前的目录

image-20200319174647844

mkdir

  • 新加一个文件夹

  • mkdir [-p] 文件夹名
    在Linux中是区分大小写的所以文件名使用A和a都可以,但是在windows下是不行的

  • mkdir -p 确保目录名称存在,不存在就建一个

    mkdir -p a/aa/aaa/aaaa使用这个方式可以一次新建多个文件夹目录

rmdir

  • 删除一个空的目录,若文件夹非空则无法删除
  • rmdir [-p] 文件名
  • rmdir -p当子目录被删除后使它也成为空目录的话,则一并删除
    • 加入在文件夹B里面有个文件C,如果命令为rmdir -p B/C则此时B和C都会被删除

cp

  • 复制文件或文件夹
  • cp [参数] 源文件 目的地址

    多个文件cp [参数] 源文件... 目的地址
  • copy复制文件,从哪到哪,建议使用tab键自动补齐
    • 假如由文件夹b与d,文件夹b里面有一个文件c,此时在b里面使用cp c ../d则可以复制文件到d里
  • cp /etc/*.conf /home/a一键复制目录下多个后缀的文件到指定目录/home/a
    cp /etc/a*.conf ../../a将以a开头的conf文件复制到上两层的a文件夹中

rm

  • 删除文件或目录

  • rm [参数] 文件名|文件夹

参数 解释
-i 删除前逐一询问确认
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确定
-r 将目录及以下之档案亦逐一删除
  • 删除文件夹

image-20200318211626885

mv

  • 移动(改名)文件
  • 命令:mv [S源文件] [替换的名字 | D目的文件夹]
  • 改名:将文件d改为dddd
    • mv d dddd
  • 移动:将文件d移动到上一层的文件夹a里
    • mv d ../a

cat

  • 连接文件并在标准输出上输出,cat可以创建或者预览文件

  • 命令:cat [option] [文件名]

  • [option]

    命令 解释
    -b 对非空输出行编号
    -E 在每行结束处显示“$”
    -n 输出所有行的编号
    -s 不输出多行空行
  • 如果当前目录中没有所输入的这个文件则会自动创建一个
    image-20200318212610327

  • cat > filename 将下面内容输出到filename这个文件,跳到下一行再按ctrl+c可退出
    image-20200317230433141

  • cat filename1 filename2 > filename3 将filename1和filename2的内容输出到filename3中
    image-20200317230002331

  • cat filename1 >> filename2将file1的文件内容附加到file2的文件后面,而file2的内容孩子
    image-20200318212707066

  • -E 在每行的结束处输出一个”$”

    img

  • -n 输出所有行的编号

    img

重定向>与>>

>

我们将文件ab打印到终端上,如何使用cat >命令进行覆写,在后面写完之后按ctrl+c就可以看到后面输出了之前我们输入的内容

img

>>

接着上面的内容我们将ab这个文件的后面追加一些文字,追加的内容是从最后的下一行开始添加

img

tac

从最后一行开始现实,可以看到tac是cat的倒写

image-20200318210549379

touch

  • touch可以创建一个空文件,也可以更改文件的时间
  • 命令:touch [文件名] -[参数]
    • -t [[ CC] YY] MMDDhhmm[ .ss]
  • touch wenjianjia
  • touch wenjianjia -t 03171637
    更改时间为三月17日16:37
  • image-20200318210029109

nl

显示的时候,顺便输出行号

more

一页一页的显示文件内容,但是不能往前翻

img

img

less

与more类似,但是比more更好的是它可以往前翻页

  • 输入了less之后可以用滚轮滑动查看,按q可推出
  • img
    img

只看开头几行

image-20200318211258599

tail

只看返回结尾的几行

image-20200318211352848

  • tail -num filename
    tail-1 filename 则显示filename的最后一行,-2则显示左后两行

grep

  • 打印匹配给定模式的行
  • 命令:cat [文件名] | grep [正则表达式]

小技巧

在复制移动重命名都可以使用绝对路径和相对路径

一次新建多个文件夹mkdir -p a/aa/aaa/aaaa

一次复制目录下多个后缀文件cp /etc/*.conf /home/a
你也可以复制目录下以a开头的.conf文件:cp /etc/a*.conf /home/a

重命名 mv anaconda- ff.txt aa.txt

重定向,不将其输出至屏幕,而是输出到指定的文件内

例如将ls -l的输出结果输出到指定的文件内ls -l aa.txt

压缩与归档

压缩

前三个都会将单独的文件压缩,会将原来的文件给删除

gzip

  • 压缩每个单独文件,并将源文件删除,后缀为gz

命令:

gzip [name] 压缩name这个文件
注意在压缩的时候
gzip *.conf`

image-20200319104459777

gunzip name.gz解压name.gz这个文件

image-20200319104523324

bzip2

  • 压缩每个单独文件,并将源文件删除,后缀为bz2

bzip2 name压缩name这个文件

bunzip2 name.bz2 解压name.bz2这个文件

image-20200319175609862

xz

压缩每个单独文件,并将源文件删除,后缀为xz

  • xz a.txt压缩a.txt这个文件
  • unxz a.txt.xz解压a.txt这个文件

image-20200319161026726

注意上下不同,上面为每个单独压缩,下面为每个压缩成单个文件

zip

  • 压缩多个文件成单独的一个文件,后缀为zip

zip name.zip a*.conf 压缩文件名为name.zip,压缩所有a开头的conf文件

  • zip name.zip a.conf b.txt单独选取多个文件

image-20200319180158660

  • unzip new.zip将new.zip解压缩,若有重复则会询问是否覆盖

image-20200319180244086

归档

归档只负责吧多个文件归类串联起来,本身不负责压缩,不过你可以添加参数进行归档与压缩成指定格式的压缩文件

tar

将文件归档

tar命令选项说明:

  • -c :建立一个压缩文件的参数指令(create 的意思);

    归档组合使用,压缩归档文件会使用到这个

  • -x :解开一个压缩文件的参数指令!

    解压组合使用,解压归档文件会使用到这个

  • -t :查看 tarfile 里面的文件!

    • 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。
  • -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

  • -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

  • -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

  • -f :文件名,请留意,在 f 之后要立即接文件名!不要再加参数!

  • -j 用 bzip2 压缩或解压

压缩

tar

tar -cvf new.tar a.*
c:建立一个压缩文件的参数指令
v:显示过程
f:文件名为new.tar
image-20200319105640331

gz

tar -czf a.tar.gz ./
c:建立一个压缩文件的参数指令
z:生成一个gzip压缩过的包
f:文件名为new.tarimage-20200319191000664

bz2

tar -cjf a.tar.bz2 ./
c:建立一个压缩文件的参数指令
j:生成一个bzip2压缩过的包
f:文件名为new.tar
image-20200319191550179

解压

tar

tar -xvf new.tar a.*
x:解开一个压缩文件的参数指令
v:显示过程
f:文件名为new.tar
image-20200319192737499

gz

tar -xzvf a.tar.gz ./
x:解开一个压缩文件的参数指令
z:解开一个gzip压缩过的包
v:显示过程
f:文件名为new.tar
image-20200319192217957

bz2

tar -xjvf a.tar.bz2 ./
x:解开一个压缩文件的参数指令
j:解开一个bzip2压缩过的包
v:显示过程
f:文件名为new.tar
image-20200319192039940

其他

switch

编辑器

常用的文本编辑器

  • Vi(Vim)
  • nano
  • emacs
  • gedit

VI(建议)

vim是vi的升级版,目前大多都是使用VIM,

  • Vim是彩色的,Vi是黑白的
  • Vi每个系统都会有,但是Vim不一定有,Vi与Vim是不同的!

直接输入vi就可以开始编辑新的文件

三种模式

  • 普通模式
  • 插入模式
  • 命令模式

普通模式(查看模式、normal模式)

  • vi [filename] 如果当前路径存在则查看,不存在则新建查看的状态(read)
  • esc键可以进入查看模式
基本操作
  • G 用于直接跳转到文件末尾
  • gg 用于直接跳转到文件头
  • x删除光标所在的字符 (单独)
  • r替换光标所在的字符(单独)
  • ~切换光标所在字母的大小写(单独)
  • u取消上一次编辑操作(undo)
  • .重复上一步编辑操作(redo)
  • ZZ用于存盘推出Vi
  • ZQ用于不存盘推出Vi

插入模式(编辑模式)

  • i (insert)插入状态
  • a 追加模式

命令模式

在下面有独立一行用作输入命令

基本命令
  • :w保存
  • :w newfile存为另一个名为newfile的文件
  • :wq保存并退出Vi
  • :q用于直接退出Vi(仅限未作修改的时候推出)
  • q!不保存并退出Vi(强制退出)
  • :set number 显示行号
  • :set nonumber不显示行号
  • :set autoindent缩进,常用于程序的编写
  • :set noautoindent取消缩进
  • :set tabstop=num设置显示制表符的空格字符个数
  • :set显示设置的所有选项
  • :set all 显示所有可以设置的选项

image-20200325003828721

Nano(不建议)

  • 有的系统有有的没有
  • 命令行

emacs(不建议)

  • 有的系统有有的没有
  • 命令行

gedit(不建议)

  • 有图形界面的文本编辑器,类似于windows下的记事本
  • 有的系统有有的没有

Linux的远程管理

命令行界面

SSH

ssh (secure shell),linux默认安装并打开的服务
ststemctl status sshd(查看系统sshd状态)
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

  • 服务端openssh
  • 客户端putty或xshell

默认已经安装了openssh-server服务,并启动

如何使用密钥免密连接Linux系统?

  1. 用puttygen或xshell产生一对密钥

    公钥、密钥

    公钥:传到linux服务器上
    私钥:自己保存

  2. 将公钥传输到linux系统用户的家目录ssh/下.文件名称为authorized_key
    如何传文件到linux?可以用sftp

  3. 在客户端工具中设置用密钥进行身份验证

图形界面

  1. VNC(tigervnc[服务端]、vnc客户端)

    VNC (Virtual Network Console/compute )是虚拟网络控制台(虚拟网络计算)的缩写。它是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。 在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下用户只需要其中的两个命令:vncserver 和 vncviewer。
    条件:linux系统应安装图像界面
    vnc虚拟网络控制台
    VNC服务
    VNC客户端
    默认已安装但是没有配置

  2. WEB网站的安装
    webmin(推荐了解)
    redhat8系统自带cockpit

使用密钥进行身份验证

参考:https://www.cnblogs.com/dudumao/p/7456208.html

  • 使用xshell生成公钥,点击工具>新建用户密钥生成向导

  • 生产密钥参数默认即可,然后点击下一步进行生成公钥对,生成好了点击下一步

  • 到了用户密钥信息,密钥名称可改或不改,但是不能和已有的重复,密码可以留空,不过建议还是填写,填好了就下一步(记得别按完成)

  • 到了公钥注册这一步就需要将公钥保存为文件通过ftp传输到linux上

  • 接下来转到linux上操作:

    • 这里我们默认新建一个新用户bit

      [root@centos]# useradd bit
      [root@centos]# passwd bit
      
    • 进入管理员模式并在bit用户文件夹内操作文件并将公钥写入一个文件中

      [root@centos]# su bit
      [root@centos]$ mkdir .ssh
      [root@centos]$ chmod 700 .ssh/
      [root@centos]$ cd .ssh/
      [root@centos]$ cat id_rsa_1024.pub > authorized_keys
      [root@centos]$ chmod 600 authorized_keys
      [root@centos]$ su -
      
    • 用vim修改ssh部分参数,并重启ssh服务

      [root@centos]# vim /etc/ssh/sshd_config
      # 以下是修改的内容
      PasswordAuthentication no
      PubkeyAuthentication yes
      AuthorizedKeysFile  .ssh/authorized_keys
      # 以上是修改的内容
      [root@centos]# service sshd resetart
      
    • 接下来在xshell中将连接的属性>用户省份验证>方法改为Public key用户名改为上面写的bit,选择刚刚新建的用户密钥并输入上面输入的密码

使用VNC进行图形界面连接

参考:https://jingyan.baidu.com/article/eb9f7b6d5ff296869264e858.html

安装VNC

yum install vnc-server -y

配置VNC

  • vncserver 安装完毕后输入“vncserver”启动VNC设置密码,注意:启动后将自动在user/.vnc目录下创建xstartup文件
    image-20200703120931631

  • vim /root/.vnc/xstartup在最后面添加下面内容后按esc后输入:wq保存并退出

    VNCSERVERS="Z:root"
    VNCSERVERARGS[2]="-GEMETRY 800x600 -nolisten tcp -localhost"
    
  • vncpasswd回车键确定,开始输入VNC访问密码并按回车键确定

  • netstat -tlup | grep vnc输入查看VNC使用端口
    image-20200703121459957

    • 注意:VNC访问默认监听如下3个TCP端口:

      • RFB(Remote FrameBuffer)协议 默认端口 :5900+显示器号
      • HTTP协议默认端口: 5800+显示器号
      • X协议 默认端口 :6000+显示器号
    • iptables -I INPUT -p tcp --dport 5901 -j ACCEPT

测试

  • 在vnc中输入IP:1即可连接
  • 1对应5901端口,以此类推9对应5909端口,如超过100则需使用完整端口号

使用putty将inux文件传输下载

# cd 到putty的目录下
PSFTP.exe
# 连接linux的ip
open 192.168.3.121
# 遇到store key in cache?(y/n) 输入y就好
# 输入用户名和密码
# 上传文件
put filename.txt
# 下载文件
get filename.txt

Linux用户管理

Linux是一个多用户多任务系统,用户可以分为三类

  • 超级用户
    • 最大的权限
    • root根用户
  • 系统用户
    • 系统用户是仅限于系统使用的,他不可以超出它(FTP)的范围,你也可以把它理解为一个服务系统用户
    • 主要是为了满足相应的系统进程对文件属主
    • 他不能登录,例如FTP、bin、adm、ip
  • 普通用户(可以登录系统中进行相关操作)

用户管理

用户主要通过/etc/passwd/etc/shadow这两个文件保存

cd /etc/
less passwd # 查看用户详细情况
less shadow # 查看用户密码与过期时间(已加密)
  • 打开/etc/passwd文件里面都是一行一个账户,每一行以冒号分隔开:
    • 用户名:X(密码):Uid(i组ID):用户的全名:用户的主目录:用的哪一个shell
      普通用户的ID号从1000开始,根用户和系统用户是0
    • 密码为X是因为
      以前的密码默认都是保存在/etc/passwd这个文件,后来改进将这个密码更换到/etc/shadow中,上面那个X算是一个占位,只有系统能读取这个文件,其他都不能读取,里面的密码都是经过sha512加密过的文件
  • /etc/shadow文件里面都是保存是账户的密码与其他配置也是用冒号分隔开
    • 用户名:加密过的密码:密码的相关参数(更改时间与过期时间等)

用户的添加删除

useradd

  • 添加用户
  • useradd username不能输入已存在的usernam
  • 用户虽然已经添加了但是还没设置密码所以不能登录,在/etc/shawod文件里密码会显示为!,表示不能登录

passwd

  • 设置用户密码
  • passwd username回车即可开始设置密码,简单的密码会被提醒

usermod

  • 修改指定用户的各项设置

  • usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]

  • 参数:

    • -c <备注>  修改用户帐号的备注文字。
    • -d <登入目录>  修改用户登入时的目录。
    • -e <有效期限>  修改帐号的有效期限。
    • -f <缓冲天数>  修改在密码过期后多少天即关闭该帐号。
    • -g <群组>  修改用户所属的群组。
    • -G <群组>  修改用户所属的附加群组。
    • -l <帐号名称>  修改用户帐号名称。
      • 若用户中有进程正在使用则需要kill掉指定进程后才能更改用户名
    • -L  锁定用户密码,使密码无效。
    • -s <shell>  修改用户登入后所使用的shell。
    • -u <uid>  修改用户ID。
    • -U  解除密码锁定。
  • 例如:

    • 更改用户的名字

      usermod -l newusername oldusername
      

userdel

  • 删除用户username
  • userdel username注意这种方法不会讲home目录下的档案删除
  • 参数
    • userdel -r username彻底删除用户(包括home目录下的档案)

组管理

  • 每个用户都可以属于很多组,其中有一个组是用户的主要组
  • 在创建用户的时候默认会创建一个用户的主要组
  • 在linux中组是可以设置密码的
cd /etc/
less group # 查看组详细情况
less gshadow # 查看组的密码(已加密)
  • /etc/group中也是以冒号等隔开
    • 组的名称:组的密码:组的ID号:组所有的用户
  • /tec/gshadow中也是以冒号等隔开
    • 组队名称:组的名称:组的密码:组的管理员

在组管理中-g与-G不同

groupadd

  • 添加组
  • groupadd groupname

gpasswd

  • 修改组密码
  • gpasswd groupname
    • 回车即可开始设置,当其他用户需要加入组的时候就可以通过这个密码加入

groupmod

  • 更改群组识别码或名称
  • groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]
  • 参数
    • -g <群组识别码>  设置欲使用的群组识别码。
    • -o  重复使用群组识别码。
    • -n <新群组名称>  设置欲使用的群组名称。

groupdel

  • 删除组
  • groupdel groupname

用户和组状态命令

查看组的用户

  • less group
  • tail group

whoami

  • 查看当前用户名称
  • whoami
    • 回车就会返回当前用户的名字

groups

  • 查看用户属于那个组
  • groups username
    • 回车就会返回指定username的所在组:username

id

  • 用于显示用户的ID以及所属群组的ID
  • id [-gGnru][--help][--version][用户名称]
    • id返回当前用户的详细信息
    • id username返回username用户的信息(不同权限可显示的内容不同
    • -g或--group  显示用户所属群组的ID。
    • -G或--groups  显示用户所属附加群组的ID。
    • -n或--name  显示用户,所属群组或附加群组的名称。
    • -r或--real  显示实际ID。
    • -u或--user  显示用户ID。
    • -help  显示帮助。
    • -version  显示版本信息。

newgrp

  • 临时加入到指定组

  • newgrp groupname

  • linux中的newgrp命令主要是将当前登录用户临时加入到已有的组中,用法如下:newgrp groupname

    • 上面命令的含义是将用户yan加入到现有的组grptest中,注意输入命令后需要设置对应的组密码,所以需要先设置gpasswd groupname

    • 验证方法

     [yan@localhost etc]$ newgrp grptest
     Password:
     [yan@localhost etc]$ groups
     grptest yan
    

切换用户

su

  • 切换用户
  • su若后面不输入其他参数则默认进入root根用户
  • su -带入环境变量

image-20200331150609731

可以看到su是直接在当前环境下切换root根用户,而su -则是切换用户并切换环境到root的环境变量中

文件的管理

image-20200401175702270

read 读权限

  1. 对于文件而言,就是查看里面的内容

    cat、vim、less、more等

  2. 对目录而言,就是查看目录里的内容

    ls等

write 写权限

  1. 对文件而言,就是修改里面的内容

    vi、vim等

  2. 对目录而言,就是创建、删除、重命名、移动

    mkdir、touch、rm、vm、cp

execute 可执行权限

  1. 对文件而言,就是执行这个文件里的命令

    执行脚本文件或可执行文件

  2. 对目录而言,就是进入目录可以使用cd命令进入

文件权限表示

  • d 文件夹
  • 后面代表其他人对这个文件夹的权限,没有权限就是---横线
  • rwx 读取、写入、执行(用户的权限)
  • r-x 所属组的权限
  • r-x 其他人的权限
  • num 文件数
  • 用户
  • 群组
  • 大小
  • 日期
  • 文件/文件夹名
[root@centos ~]# ls -l
总用量 8
-rw-------. 1 root root 1627 3月  12 12:25 anaconda-ks.cfg
-rw-r--r--. 1 root root 1655 3月  12 12:54 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 3月  12 12:56 公共
drwxr-xr-x. 2 root root    6 3月  12 12:56 模板
drwxr-xr-x. 2 root root    6 3月  12 12:56 视频
drwxr-xr-x. 2 root root    6 3月  12 12:56 图片
drwxr-xr-x. 2 root root    6 3月  12 12:56 文档
drwxr-xr-x. 2 root root    6 3月  12 12:56 下载
drwxr-xr-x. 2 root root    6 3月  12 12:56 音乐
drwxr-xr-x. 2 root root    6 3月  12 12:56 桌面
# 另一个用户
[bit@centos home]$ ls -l
总用量 4
drwx------. 15 bit  bit   4096 3月  31 16:09 bit
drwx------.  3 test test    78 3月  31 15:45 test
drwx------.  5 1002 test1  128 3月  31 15:48 test1

改变文件或目录存取权限的命令

需要记住的参数缩写

  • u user
  • g group
  • o other
  • a all
  • r read
  • w write
  • x excute
  • + 增加权限
  • -减去权限
  • = 直接等于某些权限
  • -R 递归修改指定目录下所有文件、子目录的权限

chgrp

更改群组

chgrp groupname filename将filename的组权限改为groupname

chown

更改所有者,修改属主或属组,只能在root用户执行

chown username filename将filename的用户权限改为username

chown :groupname filename将filename的群组权限改为groupname

chmod

更改权限标记

image-20200401180400472

例子

  • chmod o+w filename 对filename允许其他用户添加写功能
  • chmod u+x,g+w,o-w filename 对filename允许当前用户执行,允许组写入,不允许其他用户写入
  • chmod a-r filename 对filename不允许所有用户与组读取
  • 系统对文件系统的权限还可以表示为数字:
    • chmod 755 test.txt
      rwx r-x r-x一般可以分3个为一段
      111 101 101
      7 5 5
    • chmod 600 test.txt
      rw- --- ---
      110 000 000
      6 0 0

特殊权限的设置 chmod s/t

  • 特殊权限设置
    • SUID (Set User ID)
      • 只对二进制程序有效
    • SGID(Set Group ID)
    • Sticky-Bit
  • 特殊权限指的是什么?什么时候需要?
    • /bin/passwd命令
    • shadow文件
  • 对可执行文件
    • SUID
    • SGID
  • 对目录
    • SGID
    • sticky-bit
  • 相关命令
    • chmod u+s
    • chmod g+s
    • chmod +t

chmod u+s

  • chmod u+s filename文件执行的时候拥有文件所有者的权限,只限可执行文件 (二进制程序)

例子

  • 一个经典的情况:用户有权限修改密码,但是无权限修改shawod文件
  • linux解决方案:在linux将passwd文件的权限设为S,S表示为若登录账号为bit使用该文件的时候,行使的时候还是文件拥有者者的权限,不管谁执行都是root
    注:只有管理员才能设置,此方法是有一定危险性的,此权限只限于可执行文件
[root@centos ~]# cd /usr/bin/
[root@centos bin]# ls -l passwd
-rwsr-xr-x. 1 root root 27856 8月   9 2019 passwd
过程:
  1. 因为/usr/bin/passwd的权限对任何的用户都是可以执行的,所以系统中每个用户都可以执行此命令。
  2. 而/usr/bin/passwd这个文件的权限是属于root的。
  3. 当某个用户执行/usr/bin/passwd命令的时候,就拥有了root的权限了。
  4. 于是某个用户就可以借助root用户的权力,来修改了/etc/shadow文件了。
  5. 最后,把密码修改成功。
    注:这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上(script),因为脚本还是把很多的程序集合到一起来执行,而不是脚本自身在执行。同样,这个SUID也不能放到目录上,放上也是无效的。

chmod g+s

  • chmod g+s filename 文件执行的时候拥有群组的权限 SGID,创建文件的时候也会归属于此用户组

  • 和SUID一样,只是SGID是获得该程序所属用户组的权限。

    1. SGID对二进制程序有用;

    2. 程序执行者对于该程序来说,需具备x的权限;

    3. SGID主要用在目录上;

      如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。

chmod +t

  • chmod +t filenamet是粘置位,sticky-bit
    若一个文件里有多个用户的文件,让在文件夹的文件用户只能删除自己读写的文件,不能删除他人的文件仅有自己与 root才有权力删除
  • 这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
  • 一般用于临时文件,linux的tmp和win的临时文件,多个程序临时使用tmp文件夹,各自独立运行且不影响

文件存储结构与链接文件

文件类型

linux下面的文件类型主要有:

  1. 普通文件:C语言源代码、shell脚本、二进制的可执行文件等。分为纯文本和二进制
  2. 目录文件:目录,存储文件的唯一地方
  3. 链接文件:指向同一个文件或目录的文件
  4. 特殊文件:与系统外设相关的,通常在/dev下面。分为块设备和字符设备

可以通过ls -l, file,stat,ls -i几个命令来查看文件的类型等相关信息

文件存储

Linux正统的文件系统(如ext2、ext3、ext4)一个文件由目录项、inode和数据块组成

  • 目录项:包含文件名和inode节点号
  • Inode:又称文件索引节点,是文件基本信息的存放地和数据块指针存放地
  • 数据块:文件的具体内容存放地

Linux正统的文件系统(如ext2、ext3、ext4等)将硬盘分区时会划分出目录块、 inode table区块和data block数据区域。一个文件由一个目录项、 inode和数据区域块组成。 Inode包含文件的属性(如读写属性、 owner等,以及指向数据块的指针),数据区域块则是文件内容。当査看某个文件时,会先从iode tabe中査出文件属性及数据存放点,再从数据块中读取数据

image-20200407151538628

  • 有个目录项,每一个目录项文件指向一个索引inode表(索引节点编号)

  • 目录项结构:image-20200407151635240

    • 查看节点编号

      • li -li可以查看当前文件下的索引节点号

      • stat filename查看单个文件的详细inode信息

        [root@centos a]# stat bit 
          文件:"bit"
          大小:34        	块:0          IO 块:4096   目录
        设备:fd00h/64768d	Inode:17709411    硬链接:2
        权限:(2775/drwxrwsr-x)  Uid:( 1000/     bit)   Gid:( 1000/     bit)
        环境:unconfined_u:object_r:default_t:s0
        最近访问:2020-04-02 21:31:55.421690059 +0800
        最近更改:2020-04-02 21:31:53.500668341 +0800
        最近改动:2020-04-02 21:31:53.500668341 +0800
        创建时间:-
        
  • inode表再指向了数据,数据是存储在一个单独的数据区

  • inode结构

    • 一般inode目录表只占文件系统磁盘空间的1%
    • image-20200407151725750

硬链接、符号链接

  • 符号链接和硬链接是我们常见的两个概念:
  • 硬链接
    • 是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中任意一个其余的文件将不受影响。
  • 符号链接
    • 也叫软链接,他只是对源文件在鑫的位置建立一个“快捷方式”接的文件将成为无源之水->仅剩下文件名了,当然删除这个链接,也不会影响到源文件,但对链接文件的使用、应用都是直接调用源文件的

image-20200407144155127

硬链接

  • ln 源文件 链接文件名
  • 修改其副本文件将会对存储的内容进行修改,其余副本或主文件读取存储内容的时候也会修改,使用ln创建的文件本质上是创建一个链接指向存储的内容
  • 没增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收,
  • 文件的大小为文件内容的大小,硬链接不能链接目录
  • image-20200407145015637

软链接

  • ln -s 源文件 链接文件名
  • 类似建立了一个快捷链接,指向了源文件,当被指向的源文件被删除了软链接还存在但是失效了,可以看到源文件和软链接指向的inode表都不一样
  • 符号链接的大小为路径的长度,软链接可以链接目录
  • image-20200407145533540

其他说明

  • rm A删除的只是A这个文件名,而A对应的数据块(文件)只有inode节点链接数减少为0的时候才会被系统回收

使用限制

  • 硬链接Hard Link
    • 创建硬链接会增加额外的记录项以引用文件
    • 对应于同一文件系统上的一个物理文件
    • 每个目录项引用相同的inode号
    • 创建时连接数递增
    • 不能跨文件系统
    • 不能link目录
  • 符号连接(软链接)Stmbolic Link
    • 一个符号链接的内容是它引用文件的名称
    • 可以对目录进行链接
    • 可以跨分区
    • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数

进程管理

概述

进程是正在运行的程序的实例

  • 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
  • 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
  • 进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
  • 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

进程分类

  • 交互进程
    • 由一个shell启动的进程,用户发布一个命令后系统执行,执行完毕显示结果然后等待用户再次输入命令
  • 守护进程
    • 在开机启动的程序,一般是在后台运行的特殊进程,执行的是特定的系统任务,用户是不可以与计算机对话的,linux中守护进程在windows中叫做服务

进程的属性

进程ID

  • ps通过此命令可以查看当前运行进程的id号

  • pid(PID process IDentity)是一个整数,每一个进程都有一个唯一的PID来代表自己身份,进程也可以根据PID来识别其他的进程

    img

父进程和父进程ID

  • 可以使用ps -o ppid,pid,cmd命令查看父进程ID,进程ID,命令
  • 其中ppid是parent PID,可以通过下图看到ps命令的PPID与-bash的PID 9291相同
    • 可以说-bash是ps命令的父进程
    • ps是-bash的子进程
    • img
  • 也可以使用pstree命令将进程树打印出来,可以看到下图中第二个dhclientNetworkManager的子进程
    • img

启动进程的用户ID和所属组GID

​ RUID(Real User ID) RGID(Real Group ID)

​ EUID(Effect User ID) EGID(Effect Group ID)

可以使用ps -eo ruid,rgid, euid,egid,pid, cmd

进程的状态

由于cpu只能一个时间内对一个进程运行,多个程序需要运行则需要分时运行

  • 运行 run

  • 休眠 suspend

  • 僵死 zombie

    • 运行程序过多或重复运行或运行错误
  • 由于cpu只能一个时间内对一个进程运行,多个程序需要运行则需要分时运行,所以会产生三种运行状态,运行的时候就是进程运行在前台,休眠则是进程在后台中暂停活动,僵死则是当前进程报错卡主或程序子进程的退出信息滞留在内核中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占

  • 当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在内核里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为>0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从内核中取出子进程的退出信息,并清空该信息在内核中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。

    当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在内核中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。

进程执行的优先级别

可以指定某一进程在被执行时的优先度

进程所连接的终端名

从哪个终端获取的

进程资源占用

TTY teletype

tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适。

终端是一种字符型设备,他有多种类型,通常使用tty来简称各种类型的终端设备。

进程启动

  • 手动启动

  • 调度启动

    • at定时在某一时间点启动程序任务

    • 结束时输入ctrl+D结束

    • 操作

      at now+1minutes
      ls /a
      cat bit2.ini
      

    要结束的时候输入ctrl+D

在VIM挂起进程

在vim中使用ctrl+Z可以暂停(挂起)进程回到命令行

查看进程信息

ps

  • ps [options] [--help] 查看当前系统运行的进程状态
  • ps :process status,他可以兼容多种选项的类型例如:
    • UNIX中ps -a -u -x
    • BSDps aux
    • GNU
    • 推荐使用ps -aux
  • ps -aux显示所有的进程的全部信息
  • ps -e -e表示列出全部进程(只显示PID、TTY、time、CMD)
  • ps -eo pid,comm,cmd-o指定输出后面三个参数
    • pid(PID process IDentity)是一个整数,每一个进程都有一个唯一的PID来代表自己身份,进程也可以根据PID来识别其他的进程
    • comm(COMMAND)这个进程的简称
    • CMD是进程所对应的程序以及运行时所带的参数,一些中括号[]括 起来的,他们是内核的一部分功能,被打扮成进程的样子以方便操作系统管理
  • ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
  • -A 列出所有的行程
  • -w 显示加宽可以显示较多的资讯
  • -au 显示较详细的资讯
  • -aux 显示所有包含其他使用者的行程
  • au(x) 输出格式 :
  • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • USER: 行程拥有者
  • PID: pid
  • %CPU: 占用的 CPU 使用率
  • %MEM: 占用的记忆体使用率
  • VSZ: 占用的虚拟记忆体大小
  • RSS: 占用的记忆体大小
  • TTY: 终端的次要装置号码 (minor device number of tty)
  • STAT: 该行程的状态:
  • D: 无法中断的休眠状态 (通常 IO 的进程)
  • R: 正在执行中
  • S: 静止状态
  • T: 暂停执行
  • Z: 不存在但暂时无法消除
  • W: 没有足够的记忆体分页可分配
  • <: 高优先序的行程
  • N: 低优先序的行程
  • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
  • START: 行程开始时间
  • TIME: 执行的时间
  • COMMAND:所执行的指令

uptime

系统已经运行了多长时间

[root@centos /]# uptime
 20:59:26 up 37 min,  3 users,  load average: 0.01, 0.29, 0.58

w

当前登录的用户,以及他们正在干什么

[root@centos /]# w
 21:02:13 up 40 min,  3 users,  load average: 0.74, 0.58, 0.65
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
bit      :0       :0               173月20 ?xdm?   4:11   0.62s /usr/libexec/gnome-ses
root     :1       :1               20:36   ?xdm?   4:11   0.48s /usr/libexec/gnome-ses
bit      pts/1    :0               21:00    5.00s  0.32s  1.57s /usr/libexec/gnome-ter

top

  • top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
  • Linux top命令用于实时显示 process 的动态,交互式监视资源密集型流程
  • 参数
    • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
    • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
    • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
    • s : 安全模式,将交谈式指令取消, 避免潜在的危机
    • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
    • n : 更新的次数,完成后将会退出 top
    • b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
    • p:显示指定的pid进程

pstree

显示进程树,将所有进程以柱状图显示

free

显示 内存使用情况

[root@centos /]# free
              total        used        free      shared  buff/cache   available
Mem:        2027940     1082188      523028       18212      422724      778284
Swap:       2097148      161536     1935612

管理进程

kill

  • kill PID 杀死进程
    • PID指的是用ps命令查看的PID
  • 用kill来结束进程(发送值15,终止信号给进程)
  • kill -9 PIDkill PID无法关闭进程则使用值9杀死进程信号
    • 在杀死进程的时候切记会对文件当前运行状态损坏!
      image-20200407161202794
  • man 7 signal值的说明
    image-20200407160805151

timeout

  • timeout 时间 命令 指定时间内查看指定的命令,超出时间自动退出
  • timeout 10 top 执行10秒的top命令

nice

  • nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]]配置调用程序的优先级
  • linux nice命令以更改过的优先序来执行程序,如果未指定程序,则会打印出目前的排程优先序,内定的adjustment为10,范围为-20(最高优先序)到19(最低优先序)
  • 比如,你希望操作系统能分配更多的CPU资源给浏览器进程,让浏览速度更快、更流畅,操作体验更好。那具体应该怎么做呢?尽管linux的进程调度算法十分复杂,但都是以进程的优先级为基础的。因此,只需要改变进程的优先级即可。
  • 命令
    • nice当nice没有选项时,输出值表示系统进程缺省的优先级值,一般为0
      • 当没有给出具体的优先级值时默认为10,如nice vi设置vi进程的优先级值为10
    • nice -n 优先级值 调度的任务,-n与--adjustment的效果是一样的
      • image-20200409200732390

renice

  • renice [优先等级][-g<程序群组名称>...][-p<程序识别码>...][-u <用户名称>...]

  • 重置改变程序的优先级

  • 命令

    • renice -5 -p 5200 #将PID为5200的进程的niceness设为-5
    • renice -5 -u xie #将属于用户xie的进程的niceness设为-5
    • renice -5 -g group1 #将属于group1组的程序的niceness设为5
  • image-20200409201202123

杀进程

kill

上面有将这里不复述

killall

  • killall 正在运行的程式名

  • killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错

  • 操作

    [root@centos /]# ps
       PID TTY          TIME CMD
      6009 pts/1    00:00:00 su
      6019 pts/1    00:00:00 bash
      6130 pts/1    00:00:00 vim
      6144 pts/1    00:00:00 ps
    [root@centos /]# killall vi
    vi: no process found
    [root@centos /]# killall vim
    

pkill

  • pkill 正在运行的程式名

  • pkill 和killall 应用方法差不多,相比killall他可以不输入全名,也是直接杀死运行中的程式;如果你想杀掉单个进程,请用kill 来杀掉。

  • pkill=pgrep+kill。

  • 操作

    [root@centos /]# ps
       PID TTY          TIME CMD
      6009 pts/1    00:00:00 su
      6019 pts/1    00:00:00 bash
      6130 pts/1    00:00:00 vim
      6173 pts/1    00:00:00 ps
    [root@centos /]# pkill vi
    [root@centos /]# pkill vim
    

管理后台任务

  • 前台(foreground)
  • 后台(background)

前台就是在当前窗口中运行的进程,后台大多是一种在不需用户干预的情况下运行于操作系统后台的计算机进程,通常用于执行如日志记录、系统监测、作业调度以及用户提醒等任务

如何让工作进入后台? &

jobs

list your jobs 查看后台的工作

image-20200407161931650

&

  • vi file.txt &
  • Run a job in the background 在后台运行作业
  • vi &这样也可以直接在后台运作
  • image-20200407163023810

^Z

  • 在vim的操作视图中使用ctrl+Z命令即可挂起当前作业回到字符界面
  • Suspend the current (foreground) job 挂起当前(前台)作业

fg

  • fg jobID

    • jobID为在jobs中查看的ID数
  • Unsuspend a job: bring it into the foreground 取消暂停作业:将其置于前台。

  • 可以将后台的进程调用置于前台

  • 操作

    [root@centos /]# jobs
    [1]+  已停止               vi
    [root@centos /]# pkill vi
    [root@centos /]# fg 1
    vi
    Vim: Caught deadly signal TERM
    Vim: Finished.
    已终止
    

bg

  • bg jobID

    • 将挂起的作业在后台运行,使jobs命令可以看到左边有+、-、空格
  • Make a suspended job run in the background 使挂起的作业在后台运行

  • 操作

    [root@centos /]# jobs
    [1]   已停止               vi
    [2]-  已停止               vi
    [3]+  已停止               vi
    [root@centos /]# bg 1
    [1] vi &
    
    [1]+  已停止               vi
    [root@centos /]# jobs
    [1]+  已停止               vi
    [2]   已停止               vi
    [3]-  已停止               vi
    

^C

  • 在前台应用中使用ctrl+C可以中断执行

网络配置

查看

  • /etc/sysconfig/network-scripts网络配置的文件一般存放于此,也可以直接配置这些文件来达到网络配置,但是容易出错所以不建议直接配置此文件!新版本中将不被允许而是由服务代替编辑配置
  • ifconfig此命令也不建议使用,因为在Linux操作系统中最小安装时默认不安装ifconfig这个命令,使用ip这个命令来取代配置IP地址

显示当前连接情况 - ip

参考

ip addr

ip addr show 显示当前所有的网络情况

  • ip addr
  • ip a s
  • ip a

ip route

  • ip route显示路由信息
    • ip route show
  • ip link显示连接状态
    • ip link show
    • ip link set ens33 up指定物理设备连接开启
  • ip -s link显示所有网络连接和数据包情况

ip addr add

  • ip addr add 192.168.3.110/24 dev ens33给ens33添加一个ip

ip addr del

  • ip addr del 192.168.3.110/24 dev ens33删除ens的一个ip

查看端口和服务状况

netstat

  • netstat用于显示网络状态,利用netstat指令可让你得知整个Linux系统的网络情况
  • netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
  • 参考

ss

  • ss [-参数]ss 是 Socket Statistics 的缩写,用来统计 socket 连接的相关信息,它跟 netstat 差不多,但有着比 netstat 更强大的统计功能,能够显示更多更详细的连接信息
  • 命令
    • ss -l 显示本地打开的所有端口
    • ss -pl 显示每个进程具体打开的socket
    • ss -t -a 显示所有tcp socket
    • ss -u -a 显示所有的UDP Socekt
    • ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
    • ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
  • 命令可以提供如下信息:
    • 所有的TCP sockets
      • 所有的UDP sockets
      • 所有ssh/ftp/ttp/https持久连接
      • 所有连接到Xserver的本地进程
      • 使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、端口过滤
      • 所有的state FIN-WAIT-1 tcpsocket连接以及更多.
  • 使用ss命令替代netstat部分命令,例如netsat -ant/lnt等.
  • 参考

ping

  • ping [-参数]Linux ping命令用于检测主机。

    执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常

  • 参数

    • -d 使用Socket的SO_DEBUG功能。
    • -c<完成次数> 设置完成要求回应的次数。
      • ping -c 4 8.8.8.8
    • -f 极限检测。
    • -i<间隔秒数> 指定收发信息的间隔时间。
    • -I<网络界面> 使用指定的网络接口送出数据包。
    • -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
    • -n 只输出数值。
    • -p<范本样式> 设置填满数据包的范本样式。
    • -q 不显示指令执行过程,开头和结尾的相关信息除外。
    • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
    • -R 记录路由过程。
  • 参考

    • -s<数据包大小> 设置数据包的大小。
    • -t<存活数值> 设置存活数值TTL的大小。
    • -v 详细显示指令的执行过程。

IP 配置网络配置

  • ip a add 192.168.1.1/24 dev ens33
    • 给指定网卡添加一个ip(不是覆盖修改)
    • dev ens33 指定的网卡

网络服务说明

  • 新的服务:NetworkManager(优先)
    • 开机优先启动
  • 旧服务:network(次级、第二)
    • 开机后启动

device与connection的区别

  • 简介
    • device:设备
    • connection:连接
  • 一个设备可以有多个连接配置,

配置网络的主要命令

nmtui

  • nmtuiNetworkManager Text user interface
    命令行下图形界面的配置网络设置

nmcli

  • nmcli OPTIONS OBJECT {COMMAND|help}
  • OPTIONS 选项
    • -p[retty] 漂亮的输出 *
    • -t[erse] 简介的输出
    • -m[ode]tabular|multiline输出模式
    • -c[olors]auto|yes|no是否在输出中使用颜色
    • -f[ields]<field1,field2,...>|all|common指定要输出的字段
    • -e[scape]yes|no值中的列分隔符
    • -a[sk]询问缺少的参数
    • -s[how-secrets]允许显示密码
    • -w[ait]<seconds>设置超时等待完成操作
    • -v[version]显示程序版本
    • -h[elp]打印帮助
  • OBJECT 科目(* -常用)
    • g[eneral] 通用,网络管理的一般状况及操作 *
      • nmcli general查看设备简要状态
      • nmcli general permissions查看当前用户对网络设置的的权限
      • nmcli general hostname YOURHOSTNAME设置计算机名YOURHOSTNAME
        • hostname可以直接查看,或者vi /etc/hostname
      • nmcli general logging记录日志的等级,默认为INFO
        • nmcli general logging level 日志等级 domains 所选域更改日志记录等级!只是一次生效,重启恢复原状
        • journalctl查看日志
        • journalctl -u NetworkManager查看NetworkManager日志
    • n[etworking] 网络,网络开启与禁用
      • nmcli networking connectivity check当前模式(全双工/半双工)
      • nmcli networking on|off开关网络连接
    • r[adio] 无线,网络开关
      • nmcli radio all on|off开关无线
    • c[onnection] 连接,网络连接管理 *
      • nmcli connection show可以查看又有什么设备后再输入
    • d[evice] 设备,设备管理 *
      • nmcli device status 当前设备状态(简要)
      • nmcli device show ens33显示设备信息(详细)
      • nmcli device disconnect ens33禁用设备ens33
      • nmcli device connect ens33启用设备ens33
      • nmcli device monitor ens33监控指定设备ens33
      • nmcli device set ens33 autoconnect yes|no指定设备是否设置自动连接
      • nmcli device set ens33 managed yes|no指定设备是否设置被NetworkManager管理
    • a[gent]代理,安装代理
    • m[onitor] 监控,监控NetworkManager的变动,每当NetworkManager出现改动时打印一行信息
      • nmcli monitor显示更改日志,会占用前台,所有网络设备当变动时会在下方打印出
    • help 帮助
  • 命令
    • nmcliNetworkManager command line interface
      纯命令行配置网络设置
    • nmcli con show查看当前连接
    • nmcli con show ens33查看指定设备连接属性
    • nmcli con add con-name “interface-name” ifname ens33 type ethernet 建立一个连接
    • nmcli con up “interface-name”生效一个连接
    • nmcli dev show ens33查看ens33属性
    • nm-connection-editor限定图形界面下配置网络

设置主机名

  • hostnamectl查看主机名与本机信息
  • hostnamectl set-hostname MYNEWNAME设置主机名为MYNEWNAME

Linux软件管理

RPM

  • RPM软件包管理器,英文原义:RPM Package Manager(原Red Hat Package Manager,是一个递归缩写)。
  • 注解:一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。作为一个软件包管理工具,RPM管理着系统已安装的所有RPM程序组件的资料。
  • 包命名规则
    • software-1.2.3-1.tar.gz
    • software-1.2.3-1.i386.rpm
  • 主要功能
    • 安装
    • 卸载
    • 升级
    • 查询
    • 验证
  • 输出选项
    • -v
      • 安装时显示软件名称
    • -h
      • 使用#显示进度
  • 常见的基于RPM的更新系统
    • Red Hat Network
    • yum
    • zypp
    • urpmi
    • ART-RPM

安装

  • rpm -i|-install package_name.rpm
    • rpm -ivh rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm安装httpd包
  • rpm -F|--freshen package_name重装

安装Apache阿帕奇

如果是第一次安装会提示依赖包

[root@centos Packages]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm 
错误:依赖检测失败:
	/etc/mime.types 被 httpd-2.4.6-90.el7.centos.x86_64 需要
	httpd-tools = 2.4.6-90.el7.centos 被 httpd-2.4.6-90.el7.centos.x86_64 需要
	libapr-1.so.0()(64bit) 被 httpd-2.4.6-90.el7.centos.x86_64 需要
	libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-90.el7.centos.x86_64 需要
[root@centos Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
[root@centos Packages]# rpm -ivh apr-1.4.8-5.el7.x86_64.rpm apr-util-1.5.2-6.el7.x86_64.rpm
[root@centos Packages]# rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
[root@centos Packages]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm

卸载

  • rpm -e|--erase pack_path_name切记是package,包含软件名的

升级

  • rpm -U|--upagrade package_name

查询

  • rpm -p package_name
  • rom -q package_name查询软件包是否安装并查看软件包的版本
  • rpm -qa查询已安装的所有软件包
  • rpm -qa | grep package_name查询已安装的所有关于与rpmfile名字的包
    • rpm -qa | grep dhcp查询安装了的DHCP
  • rpm -ql package_name查看指定rpmfile包安装了什么文件与安装路径

查看安装文件

rpm -ql dhcp检查DHCP安装了什么文件

其他

  • --replacepkgs重新安装rpm包
  • --justdb升级数据库,不修改文件系统
  • --percent在软件包安装时输出百分比
  • --help帮助
  • --version显示版本信息
  • -c显示所有配置文件
  • -d显示所有文档文件
  • -h显示安装进度
  • -l列出软件包中的文件
  • -a显示出文件状态
  • -p查询/校验一个软件包文件
  • -v显示详细的处理信息
  • --dump显示基本文件信息
  • --nomd5不验证文件的md5支持
  • --nofiles不验证软件包中的文件
  • --nodeps不验证软件包的依赖关系
  • --whatrequires查询/验证需要一个依赖性的软件包
  • --whatprovides查询/验证提供一个依赖性的软件包

yum

  • yum是Yellow dog Updater,Modified的简称 ,用python写成,基于RPM可以自动解决依赖问题,他拥有自己的配置文件位于/etc/yum.conf,库在/etc/yum.repos.d/,由于yum追求安全可靠,所以新的软件不会在库上出现
  • 特点
    • 便于管理大量系统的更新问题
    • 可以同时配置多个资源库*.repo(Repository)
    • 简介的配置文件

常用命令

  1. 列出所有可更新的软件清单命令:yum check-update
  2. 更新所有软件命令:yum update
  3. 仅安装指定的软件命令:yum install <package_name>
  4. 仅更新指定的软件命令:yum update <package_name>
  5. 列出所有可安裝的软件清单命令:yum list
  6. 删除软件包命令:yum remove <package_name>
  7. 查找软件包 命令:yum search <keyword>
  8. 清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包
    • yum clean headers: 清除缓存目录下的 headers
      • yum clean oldheaders: 清除缓存目录下旧的 headers
      • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

查询

  • yum search NAME 可支持模糊查询软件包名

安装

  • yum install NAME安装指定软件包名安装包
  • yum install NAME -y

删除卸载

  • yum remove NAME 删除卸载指定软件

清理yum索引

  • yum clean all将本地yum库索引清理掉,下次索引时就会下载新的索引

  • less /etc/yum.conf查看yum配置文件

  • 查看yum库

      [root@centos ~]# cd /etc/yum.repos.d/
      [root@centos yum.repos.d]# ls
      CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
      CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
    

手动添加在线yum库

添加国内源镜像

  • /etc/yum.repos.dcentos yum源文件存放目录

  • CentOS-Base开头的文件为系统默认的源文件如需添加国内镜像,只需要先备份这个文件,并改成其他名字,再用国内的源改成这个名字的源文件即可

  • 这里我们通过重命名来备份

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
    
  • 添加国内源

    • 网易

      CentOS7
      [root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
      CentOS6
      [root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
      CentOS5
      [root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
      
    • 阿里云

      CentOS7
      [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base-aliyun.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      CentOS6
      [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base-aliyun.repo http://mirrors.aliyun.com/repo/Centos-6.repo
      CentOS5
      [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base-aliyun.repo http://mirrors.aliyun.com/repo/Centos-5.repo
      
  • 编译源信息:

    yum makecache 
    
  • 更新源会看到镜像信息

     yum -y update
    

添加制定软件源

  • 新建Nginx.repo文件来并下载Nginx,好处是可以一直与官方保持最新版本(需要联网)

    • touch /etc/yum.repos.d/Nginx.repo新建文件

    • vi /etc/yum.repos.d/Nginx.repo编辑文件

    • 并将Nginx给的内容粘贴上去

      20200416旧版:

      [nginx-stable]
      name=nginx stable repo
      baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
      gpgcheck=1
      enabled=1
      gpgkey=https://nginx.org/keys/nginx_signing.key
      module_hotfixes=true
      
    • yum install nginx安装nginx

yun挂载虚拟机iso源

参考

为了能直接使用本地,请先将本地网络断开nmcli d con dis ens33

  • pwd命令先得到iso的路径,我这里的iso路径为:/run/media/root/CentOS\ 7\ x86_64 /mnt

    • 首先我们将其挂载,CentOS\ 7\ x86_64z中的\作用是转义空格,不作为分隔符使用
    mount /run/media/root/CentOS\ 7\ x86_64 /mnt
    
  • 然后去CentOS\ 7\ x86_64将yum挂载源更改其中三个内容,注意baseurl=file:///后面的内容以你的iso路径为准

    baseurl=file:///run/media/root/CentOS\ 7\ x86_64/
    gpgcheck=0
    enabled=1
    
    • 然后使用yum repolist all查看是否有启用源
      显示的结果应该为

      c7-media     CentOS-7 - Media       启用
      
  • 成功之后使用yum search httpd,以下结果为本地源的查找结果
    image-20200416152412013

制作yum离线软件库 - createrepo

  • /myrpm/中有许多rpm文件,要制作索引
  • createrepo /myrpm/制作在/myrpm/全部rpm文件的索引,建立好之后会多出一个文件夹repodata,里面包含了索引文件
    image-20200416155443228

yum将逐渐淘汰

yum将逐渐淘汰,取而代之的是DNF,在8中会替代yum的操作,yum已经停止更新不再更新

磁盘管理

概念

硬盘的技术指标

  • 主轴转速:指硬盘盘片在一分钟内所能完成的最大转数。
  • 平均寻道时间:指磁头从得到指令到寻找到数据所在磁道的时间,它描述硬盘读取数据的能力。
  • 数据传输率:指的是从硬盘缓存向外输出数据的速度,单位为MB/S.
  • 高速缓存:缓存是数据的临时寄存器,主要用来缓解速度差和实现数据预存取等。
  • 单碟容量:指每张碟片的最大容量。这是反映硬盘综合性能指标的一个重要的因素。

硬盘接口方式

  • FC-AL接口主要应用于任务级的关键数据的大容量实时存储。可以满足髙性能、高可靠和高扩展性的存储需要
  • SCSI接口主要应用于商业级的关键数据的大容量存储。
  • SAS接口是个全才,可以支持SAS和SATA磁盘,很方便地满足不同性价比的存储需求,是具有高性能、高可靠和高扩展性的解决方案,因而被业界公认为取代并行SCSI的不二之选。
  • SATA接口主要应用于非关键数据的大容量存储,近线存储和非关键性应用(如替代以前使用磁带的数据备份).
  • PATA(俗称IDE)接口已基本淘汰。

主引导记录 MBR

MBR (Main Boot Record)

  • MBR位于硬盘的0磁道0柱面1扇区【512字节】
    • 装载操作系统的硬盘引导程序【446字节】
    • 硬盘分区表( Disk Partition Table,DPT)【64字节】
      • 分区ID或者类型
      • 分区起始磁道
      • 分区磁道数
    • 最后两个字节“55, AA”是分区的结束标志
  • MBR是由分区程序(如fdisk)所产生的
    • 不依赖任何操作系统
    • 硬盘引导程序是可以改变的,从而实现多系统共存

磁盘分区

  • 指向附加分区描述符的扩展分区
  • 内核最多支持分区数:
    • IDE驱动器为63
    • SCSI驱动器为15
  • 为什么是分区驱动?
  • 容量、性能、配额和修复

分区类型

三个主系统,第四个为扩展分区,里面有L的逻辑分区

image-20200421210114544

两种硬盘存储方式

  • 基本硬盘存储
    • 在基本磁盘上存储数据需要在磁盘上创建主分区、扩展分区和逻辑分区,然后对这些分区进行管理
  • 动态硬盘存储
    • 在动态硬盘上存储数据需要在磁盘上创建动态卷,然后对这些卷进行管理

操作 - 分区管理工具

常用的操作:分区、格式化、挂载/卸载、自动挂载

  • 常用的分区工具
    • fdisk
    • sfdisk
    • GNU parted - 高级分区操作(创建、复制、调整大小等等)
  • partprobe - 重新设置内存中的内核分区表版本

fdisk

image-20200421210414413

  • fdisk -l查看本地存储列表
    • fdisk -l /dev/sdb 查看指定的
  • fdisk /dev/sdb 这里/dev/sdb为指定的磁盘进入分区管理界面
    • m 获取帮组
    • l 显示可支持的类型
    • n 添加新的分区
      • p 主要分区,可用来安装操作系统
        • 选择指定的分区号(1-4)
        • 起始扇区(2048-10485759,默认为 2048) - 由于我的硬盘设置为5G所以实际最大的大小会不一样
        • Last扇区 结束的扇区(+扇区 or +size{K,M,G} (2048-10485759,默认为 10485759)
          • 假如我输入100000,这个表示为100000个扇区
            返回:分区 1 已设置为 Linux 类型,大小设为 47.8 MiB
          • 假如我输入+1G,这个表示为添加1G的内存
            返回:分区 2 已设置为 Linux 类型,大小设为 1 GiB
      • e 扩展分区,只能用于存储,不可安装操作系统
        • 扩展分区是不能格式化的,扩展分区必须建立逻辑分区使用
        • l 逻辑分区
          • 这个分区是可以被格式化的
          • 不管有没有逻辑分区都是从/dev/sdb5开始,只建立扩展分区是不能直接用的,建立了扩展分区之后还要再次n后之前的e就会变成l(logical逻辑)的命令
          • 添加逻辑分区的扇区大小操作与主要分区一样
    • p 查看分区情况
    • w 写入硬盘
      • 注意这个命令将写入硬盘,此命令不可逆!

格式化分区 format

格式化成指定系统格式,扩展分区是不能格式化的

  • mkfs -t vfat /dev/sdb1
  • mkfs -t ext4 /dev/sdb5
  • mkfs.ext4 /dev/sdb2
  • mkfs.vfat /dev/sdb2
    • 如果是使用mkfs.***的格式就不需要加-t

挂载 mount

  • 挂载的文件与设备都是临时的,重启之后就没了
  • 当分区建立好了之后是不能直接使用的,需要将其挂载到分区内,扩展分区是不能挂载的!要挂载逻辑分区
  1. 先建立空文件夹

    默认的linux会自动挂载到mnt和media文件夹中

    cd mntmkdir diskb1 diskb2文件夹的名字可以随便起

  2. 挂载分区到文件夹内

  • mount 选项 设备名 挂载点(目录)

  • mount -t vfat /dev/sdb1 /mnt/diskb1

  • mount /dev/sdb1 /mnt/diskb2

  • mount 查看已挂载的分区(有点复杂)

遇到NTFS的文件系统需要安装工具才能对NTFS文件系统操作

df 查看分区情况

img

lsblk 查看块设备命令

  • list block devices

blkid 查看UUID

问题

  1. 能否挂载到非空目录?

    可以,但不建议,会将原本的内容都隐藏

  2. 能否将一个分区多次挂载?

    可以,还可以用不同的权限挂载,但一般用的不多

  3. 如何读取NTFS文件系统?如NTFS的U盘或exFAT

    直接使用是不支持,需要配合第三方工具,但最新的系统中支持了exFAT,要使用NTFS则需要安装ntfs-3g这个软件

卸载 - umount

这个卸载不是删除文件,而是卸载挂载

这里假设分区/dev/sdb1挂载在目录/mnt/cdrom1

  • umount 挂载的分区名
    • umount /dev/sdb1
  • umount 挂载点目录
    • umount /mnt/cdrom1

自动挂载 - 开机自动挂载

vim /etc/fstab

  • 限制说明:

    • /目录必须优先于其他mount point被挂载进来
    • 其他挂载点必须已经创建的目录
    • 所有挂载点同一时间内只能挂载一次
    • 所有分区在同一时间内只能挂载一次
  • 目录/etc/fstab

  • 在fstab文件内添加内容:分区名称 挂载点 文件系统类型 defaults 0 0

    • 后面两个0代表是否自动检查与备份
    • 新建挂载点文件夹mkdir /mnt/cdrom1
    • /dev/sdb1 /mnt/cdrom1 vfat defaults 0 0
  • LABEL=

    • LABEL=/dev/sdb1 /mnt/cdrm1 vfat defaults 0 0
  • UUID

    • 先使用lsblk命令获得清晰的全局块设备布局
    • 然后使用blkid命令获得设备的UUID
    • 使用 vi命令,vi /etc/fstab
    • 在最后一行添加UUID=第二部获取的UUID 挂载点 文件系统类型 defaults 0 0,然后命令模式下使用:wq保存退出
    • 重启一次使用dfdf -h命令查看

其他工具

parted

  • 交互模式
    • parted [选项] <硬盘设备名>
  • 命令行模式
    • parted [选项] <硬盘设备名> <子命令> [<子命令参数>]
    • 子命令
      • help [COMMAND]打印帮助信息
      • print [free |NUMBER|all]显示分区表
      • mkpart PART-TYPE [FS-TYPE] START END创建新分区
      • rm NUMBER删除指定分区
      • set NUMBER FLAG STATE设置分区标记

逻辑卷管理

概念

  • LVM是逻辑卷管理(Logical Bolume Manager)的简称,他是Linux环境下对卷进行方便的抽象层

  • LVM是建立在硬盘和分区之上的一个逻辑层来为文件系统屏蔽下层磁盘分区布局,从而提高磁盘分区管理的灵活性。

  • LVM允许在多个物理设备间重新组织文件系统,包括重新设定文件系统的大小。

LVM结构

先将其变成物理卷(physical volume, PV),再转换逻辑卷成为一个大VG大磁盘(vgcreate),再划分成若干个逻辑分区后像普通分区一样格式化后直接挂在到文件系统中

image-20200423102309602

LVM - 物理区域

  • 每一个物理卷被划分为基本单元(称为 Physical EXtent,PE),具有唯一编号的
  • PE是可以被LWM寻址的最小存储单元PE的大小可根据实际情况在创建物理卷时指定,默认为4MB
  • PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小需要一致

LVM - 卷组

  • 卷组( Volume group,VG)建立在物理卷之上,它由一个或多个物理卷组成
  • 卷组创建之后,可以动态添加物理卷到卷组中,在卷组上可以创建一个或多个“LVM分区”(逻辑卷)
  • 一个LVM系统中可以只有一个卷组,也可以包含多个卷组
  • LVM的卷组类似于非LWM系统中的物理硬盘

LVM - 逻辑卷

  • 逻辑卷( Logical Volume,LV)建立在卷组之上,它是从卷组中“切出”的一块空间
  • 逻辑卷创建之后,其大小可以伸缩
  • LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)

操作

磁盘(分区)

  • disk /partition

物理卷(physical volume, PV)

  • /dev/sd*?
  • pvdisplay查看拥有哪些物理卷
  • pvcreate 分区或磁盘
    • pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb5 /dev/sdb6一次创建多个物理卷
    • pvcreate /dev/sdc也可以直接对磁盘进行物理卷创建

卷组(volume group, VG)

  • /dev/VG name/
  • 创建卷组
    • vgcreate 卷组名称 物理卷列表
    • vgcreate vg1 /dev/sdb1 /dev/sdb2 /dec/sdc将三个物理卷加到一个卷组中(逻辑上指定的大磁盘)
  • 向组卷vg添加物理卷pv
    • vgextend [选项] 参数
    • 实例
      • vgextend vg1 /dev/sdb2将物理卷/dev/sdb2添加至卷组vg1
    • 选项
      • -d调试模式
      • -t仅测试
    • 参数
      • 卷组:指定要操作的卷组名称
      • 物理卷列表:指定要删除的物理卷列表
  • 删除卷组vg内物理卷pv
    • vgreduce [选项] 参数
    • 实例
      • vgreduce vg1 /dev/sdb2将物理卷/dev/sdb2从卷组vg1中删除
    • 选项
      • -a如果命令行中没有指定要删除的物理卷,则删除所有空物理卷
      • --removemissing删除卷组中丢失的物理卷,使卷组恢复正常状态
    • 参数
      • 卷组:指定要操作的卷组名称
      • 物理卷列表:指定要删除的物理卷列表
  • vgchange激活与停用
    • 激活卷组 - linux系统会自动激活卷组
      • vgchange -a y vg1 激活卷组vg1
    • 停用卷组
      • vgvhange -a n vg1停用卷组vg1

逻辑卷(logical volume, LV)

  • /dev/VG name/LV name/

  • 创建逻辑卷

    • lvcreate [选项] 参数
    • 实例
      • lvcreate -L 大小 -n 名称 卷组名
      • lvcreate -L 500M -n newlv1 vg1创建大小为500M的逻辑卷,名为newlv1
    • 选项
      • -L指定逻辑卷大小,单位为lLmMgGtT字节
      • -l指定逻辑卷大小(LE数)
  • 删除指定LVM逻辑卷

    • lvremove [选项] 参数
    • 实例
      • lvremove /dev/vg1/newlv1删除逻辑卷newlv1
    • 选项
      • -f强制删除
    • 参数
      • 逻辑卷:指定要删除的逻辑卷
  • 扩展逻辑卷空间

    • lvextend [选项] 参数
    • 实例
      • lvextend -L + 100M /dev/vg1/newlv1增加100M空间
    • 选项
      • 与创建逻辑卷一致
  • 调整逻辑卷空间大小

    lvresize命令用于调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为它有可能导致数据丢失。

    • lvresize [选项] 参数
    • 实例
      • lvresize -L +200M /dev/vg1/newlv1将逻辑卷空间增加200M
    • 选项
      • 与创建逻辑一致
    • 参数
      • 逻辑卷:指定要删除的逻辑卷

格式化

mkfs -t ext4 /dev/vg1/newlv1

挂载

mkdir /a/newlv1dir
mount /dev/vg1/newlv1 /a/newlv1dir

服务

systemctl

  • systemctl [starat|stop|restart|try-restart|reload|status|is-active] SERVERNAME
    • 参数
      • systemctl start启动服务
        • systemctl start dhcpd.service启动dhcp服务
      • systemctl restart先stop,如果失败则再start
      • systemctl try-restart先stop,如果失败不再启动;如果停止成功则再start
      • systemctl reload重新加载
      • systemctl status状态查看
        • systemctl status dhcpd[.server]查看dhcp服务状态
        • systemctl status dhcp[.server] -l查看服务详细内容,可以使用这个命令来查看服务报错的详细内容
      • systemctl stop firewalld关闭防火墙
      • systemctl enable vsftpd设置vsftpd开机自启
      • systemctl is-enabled vsftpd检查vsftpd是否开机自启

DHCP

20200428

概念

  • DHCP (Dynamic Host Configuration Protocol)动态主机配置协议是TCP/IP协议簇中的一种
  • DHCP是由因特网工程任务组(IETF)设计的,详尽的协议内容参考RFC2131和RFC1541
  • DHCP协议主要是用来自动为局域网中的客户机器分配TCP/IP信息的网络协议,并完成每台客户机的 TCP/IP协议配置
    • TCP/IP信息包括IP地址、子网掩码、网关,以及DNS服务器等。
  • DHCP的前身是 BOOTP(引导协议),DHCP可以说是 BOOTP的增强版本

优点

  • 减少管理员的工作量
  • 避免IP冲突
  • 减少收入错误的可能
  • 能方便地更改网络的IP网段
  • 移动计算机后不用重新配置网络信息
  • 提高IP地址的利用率

DHCP相关概念

  • DHCP客户
    • 是指一台通过DHCP服务器来获得网络配置参数的主机,通常是不同的客户机或工作站。
  • DHCP服务器
    • 是指提供网络配置参数给DHCP客户的主机。
  • DHCP中继代理
    • 是指在DHCP服务器和DHCP客户之间转发DHCP消息的主机或路由器。若要使用DHCP服务器支持跨越多重路由的子网,则路由器可能需要硬件升级路由器必须支持RFC1533、RFC1534、RFC1541和RFC1542.
  • 作用域
    • 是指一个网络中的所有可分配的IP地址的连续范围。作用域主要用来定义网络中单一的物理子网的IP地址范围。作用域是服务器用来管理分配给网络客户的IP地址的主要手段。
  • 超级作用域
    • 是指一组作用域的集合,它用来实现同一个物理子网中包含多个逻辑IP子网的情况。在超级作用域中只包含一个成员作用域或子作用域的列表。然而超级作用域并不用于设置具体的范围。子作用域的各种属性需要单独设置。
  • 排除范围
    • 是指作用域内从DHCP服务中排除的有限P地址序列。
      排除范围确保在这些范围内的任何地址都不由DHCP服务器分配给DHCP客户机。
  • 地址池
    • 定义DHCP作用域并应用排除范围之后,剩余的地址在作用域内形成可用地址池。地址池内的地址由DHCP服务器在网络上动态指派给DHCP客户机。
  • 保留
    • 指通过DHCP服务器的永久地址租约指派。保留确保了子网上指定的硬件设备始终可使用相同的IP地址。
  • 租用
    • 是指DHCP客户从DHCP服务器上获得并临时占用某IP地址的过程。
  • 租约
    • 是指客户机可使用的被DHCP服务器指派的IP地址的时间长度,在这个时间范围内客户机可以使用所获得的IP地址。
    • 当客户机获得IP地址时租约被激活。在租约过期之前,客户机一般需要通过服务器更新其地址租约。当租约期满或在服务器上删除时租约停止。租约期限决定租约何时期满以及客户需要用服务器更新它的次数。

简单描述过程

  1. 复制dhcpd.conf.example文件
  2. 编辑配置dhcpd.conf文件
  3. 建立作用域,设置网关、dns
  4. 启动systemctl start dhcpd.service
  5. 查看客户端获取情况

动手

  1. yum install dhcp安装dhcp服务器

    1. 查询是否已经安装DHCP服务rpm -qa | grep dhcp
    2. 查看安装文件rpm -ql dhcp
  2. 配置一个静态IP,两台机器建议配置网络设置为自定义特定虚拟网络

  3. 根据需求配置静态IP

    • systemctl start dhcpd.service启动服务,在启动前需要先配置dhcp,如果没有配置启动则会报错

    • cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf将其覆盖

    • vim /etc/dhcp/dhcpd.con简略模式

      subnet 192.168.3.0 netmask 255.255.255.0 {
              range dynamic-bootp 192.168.3.100 192.168.3.200;	#地址池
              option routers 192.168.3.1;	
      }
      
    • vim /etc/dhcp/dhcpd.condhcpd.conf详细模式(可选)

    # 设置作用域名
    # option definitions common to all supported networks...
    option domain-name "bit.cn";		# 客户机上显示的域名
    option domain-name-servers ns1.bit.cn, ns2.bit.cn;	#DNS域名
    #......省略中间的大部分内容
    # 定义一个作用域,划分网段并配置网关,mac绑定指定IP
    subnet 192.168.3.128 netmask 255.255.255.128 {
            range dynamic-bootp 192.168.3.130 192.168.3.200;	#地址池
            option routers 192.168.3.1;	
            option domain-name-servers 114.114.114.114;	# DNS服务地址
            option domain-name "bit.cn";	# 域名
            option broadcast-address 192.168.1.255;	#广播地址
            default-lease-time 300;	# 默认租约时间
            max-lease-time 7200;	# 最大租约时间
            host Bcomputer{		#host后什么名字都可以
                    hardware ethernet 00:0C:29:15:D0:66;		#绑定的mac地址
                    fixed-address 192.168.3.155;		# 绑定的ip地址
    }
    }
    
  4. systemctl start dhcpd启动dhcpd服务

  5. 测试,让DHCP服务器和客户机在同一物理网络下然后获取IP地址

DNS

20200430

概念

  • DNS( Domain Name Service,域名系统)是个分布式数据库系统,其作用将域名解析成IP地址

  • 域名系统允许用户使用友好的名字而不是难以记忆的数字-IP地址来访问 Iinternet上的主机。

  • DNS是基于客户/服务器模型设计的。

  • Linux下假设DNS服务器通常是使用BIND来进行

  • 组成

    • 域名系统
      • 标识一组主机并提供他们的有关信息的树结构的详细说明
    • 域名服务器
      • 保持和维持域名空间中数据的程序
    • Stub解析器
      • 解析器是简单的程序或子程序库,它从服务器中提取信息以响应对域名空间中主机的查询,用于DNS客户
  • 域名空间的分层结构

    • image-20200430101408111
    • image-20200430101430378
  • DNS服务器类型——权威性服务器

    • 主域名服务器( Primary Name Server)
      • 是区数据的最根本的来源,是从本地硬盘文件中读取域的数据的,它是所有辅域名服务器进行域传输的源。
    • 辅域名服务器( Secondary Name Server)
      • 通过“区传输( zone transfer)”从主服务器复制区数据,辅域名服务器可以提供必需的冗余服务。所有的辅域名服务器都应该写在这个域的NS记录中。
    • 残根域名服务器( Stub Name Server)
      • 与辅域名服务器类似,但只复制NS记录而不复制主机数据。
    • 秘密域名服务器( Stealth Name Server)
      • 并没有列在这个域的NS记录里,仅对于知道其IP地址的人可见。

动手

配置一个主DNS

  1. 安装

    chroot机制,当服务被攻陷的时候,只会限制在服务内,而不会影响到实机

    • yum install bind-libs bind bind-chroot bind-utils
      • bind-libs
      • bind
      • bind-chroot
      • bind-utils
    • rpm -ql bind查看安装文件
  2. 配置主配置文件(新建区域)

    • 概念

    • 主配置文件位置:/etc/named.conf

    • vim /etc/named.conf改了第2、9行的any,并添加了第17行的zone

  • 配置/etc/named.conf

    options {
            listen-on port 53 { any; };	#侦听的端口{侦听的IP地址;};
            directory       "/var/named";	# 区域配置文件所存放的位置,正常不改动
            dump-file       "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
            recursing-file  "/var/named/data/named.recursing";
            secroots-file   "/var/named/data/named.secroots";
            allow-query     { any; };	# 允许查询的{允许的IP地址;};
    #......省略中间的大部分内容
    zone "." IN {
            type hint;
            file "named.ca";
    };  # "."代表DNS的根服务器,文件位于、var/named/named.ca
    
    # 声明一个自己的DNS区域,区域的名称引号引起来
    zone "bit.com" {
    	type master;	# 主要区域
    	file "bit.com.zone";	# 此区域的区域文件名,路径在directory指定的/var/named
    };
    # 声明一个自己的DNS区域,末尾记得加;
    
    # 也可以将自己的区域放在named.rfc1912.zones这个文件中
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    
  1. 编辑区域文件(资源记录文件)注意权限!

    • 概念

      • 默认区域文件位置:/var/named
      • bit.com.zone注意这里的区域文件名为在主配置文件中申明的文件名
    • cp /var/named/named.localhost /var/named/bit.com.zone 使用模板文件,然后将其名改为bit.com.zone

    • chown :named bit.com.zone安全起见要将组权限要修改为named

    • vim /var/named/bit.com.zone编辑区域文件
      第二行中123321.qq.com123321@qq.com的意思,这里用处是当dns出现问题会发送邮件给管理员邮箱123321@qq.com

      • 操作

        $TTL 1D
        @       IN SOA  dns.bit.com. 123321.qq.com (
                                                0       ; serial
                                                1D      ; refresh
                                                1H      ; retry
                                                1W      ; expire
                                                3H )    ; minimum
                IN      NS      dns.bit.com.
        dns     IN      A       192.168.129.136
        www     IN      A       192.168.129.100
        mail    IN      A       1.2.3.4
        
  2. 检查配置和区域文件语法问题

    • named-checkconf
    • named-checkzone bit.com bit.com.zone
  3. 启动

    • systemctl start named-chroot建议使用这个方法启用DNS服务,会更加安全
    • systemclt start named 启用DNS服务
  4. 测试

    • nslookup在nslookup中检查区域配置文件中配置的dns、www、mail是否解析正确,在其他机器上可能会由于防火墙的问题呗拦截
      • server localhost 使用本地dns服务
      • dns.bit.com 解析dns.bit.com
      • www.bit.com
      • mail.bit.com
      • exit退出
补充
  • /etc/named.rfc1912.zones为标准的dns扩展模板,你也可以在这个文件中添加zone进行操作
  • 在zone选项中
    • file "host.com.zone"后面的文件名其实可以随便取,只需要/var/named/这个目录下有host.com.zone这个文件即可
    • allow-update是否允许更新
    • 主配置文件可以完全手打也可以使用模板named.localhost,将其复制并改名host.com.zone并修改其中内容即可

配置主DNS与辅DNS

由于上面已经有详细说明,这里就不再重复

  • 主DNS在named.conf文件中添加

    ...
    zone "bit.com" IN {
            type master;
            file "bit.com.zone";
            allow-update{none;};	# 不允许更新
            allow-transfer {192.168.3.104;};	# 允许传输
    };
    
    • 重启named-chroot服务

    • 若辅助区域拥有多个,则根据需要允许数据传输的IP有多个

      allow-transfer{
      	192.168.3.22;
      	192.168.3.33;
      };
      
  • 辅助DNS在named.conf文件或/etc/named.rfc1912.zones中添加

    ....
    zone "bit.com" IN {
            type slave;		# 辅助DNS
            file "slaves/bit.com.zone";
            masters {192.168.3.105};	# 如果有多个主DNS可以继续在后面添加
    };
    
    • 启动named-chroot服务
  • 可参考:

补充
  • 如果nslookup验证失败了,可以试试允许dns通过或关闭防火墙systemctl stop firewalld

转发器

具体参考:https://blog.51cto.com/sweetpotato/1607383

转发器在一台拥有dns环境的空机上配置/etc/named.conf文件:

options {
forwarders { 192.168.3.105; }; #指明转发器是谁
forward only; #only表示仅转发 ;也可以使用first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询
};

验证

假设DNS的IP地址为192.168.3.105

  • ping

    • ping 192.168.3.105测试与DNS的连通性
    • ping mail.bit.com此时解析到的会是主区域配置表里的ip
  • dig

    • dig @DNS_IP 请求的域名
    • dig @192.168.3.1005 mail.bit.com
  • nslookup

     [root@centos ~]# nslookup
     > server localhost
     Default server: localhost
     Address: ::1#53
     Default server: localhost
     Address: 127.0.0.1#53
     > mail.bit.com
     Server:		localhost
     Address:	::1#53
     
     Name:	mail.bit.com
     Address: 192.168.3.123
     > 
     
    

WEB服务

工作原理

一般可分成4个步骤:连接过程、请求过程、应答过程以及关闭连接

常见的web服务器

  • IIS
  • kangle
  • websphere
  • apache
  • tomcat
  • jboss

WEB组件

  • 统一资源标识符URI
    • 协议名称://极其地址:端口号/路径号/文件名
      • 协议名称一所使用的访问协议。如:htt、ftp等
      • 机器地址一数据所在的机器,IP地址/域名
      • 端口号一请求数据的数据源端口(可省略)
      • 路径名一数据所在的相对路径
      • 文件名一请求数椐的文件名
  • Web客户和Web服务器
    • Web服务器的职责
      • 默认监听 TCP/IP的80端口
      • 接受Web客户请求
      • 检查请求的合法性,包括安全性屏蔽
      • 针对请求获取并制作和处理数据
      • 把处理后的信息发送给提出请求的客户机
    • Web浏览器的职责
      • 生成一个Web请求(通常在単击某个链接点时启动)
      • 通过网络将Web请求发送给某个Web服务器
      • 解释服务器传来的Web文档,并把结果显示在屏幕上
    • WEB客户端与服务器通信过程
      • 每取一个网页建立一次连接,读完后马上断开,当需要另一个网页时重新连接,周而复始
  • 超文本传输协议HTTP
    • 超文本传输协议( Hyper Text Transfer Protocol)是在Web上传输资源最常用的方式
    • HTTP规定了客户机和服务器等Web组件相互交换信息的格式和含义
    • HTTP协议的特点
      • URL资源识别
      • 请求-响应方式
      • 无状态性
      • 携带元数据
    • HTTP的连接方式
      • 传统方式
      • 持久连接方式
      • 管线化方式
    • HTTP的协议头
      • 请求头
      • 响应头
    • HTTP的请求方式
      • HEAD
      • GET
      • POST
      • PUT
      • DELETE
      • CONNECT
      • OPTIONS
      • TRACE
    • HTTP的响应代码
      • 信息1xx
        • 表明服务端接收了客户端请求,客户端继续发送请求
      • 成功2xx
        • 客户端发送的请求被服务端成功接收并成功进行了处理
      • 重定向3xx
        • 服务端给客户端返回用于重定向的信息
      • 客户端错误4x
        • 客户端的请求有非法内容
      • 服务器错误5xx
        • 服务端未能正常处理客户端的请求而出现意外错误
  • Web缓存和Web代理
    • WEB缓存
      • HTTP协议定义了客户端缓存机制
      • 架设Web缓存服务器和内容分发网络(CDN)可以加快客户端访问
    • WEB代理
      • 同时扮演者客户和服务器的双重身份
        • 对于Web客户来说是服务器
        • 对于Web服务器来说是客户
      • 还可以过滤不希望的Web请求,实现高速缓存
  • Cookie和 Session机制
    • HTTP是一个无状态协议,因此当Web服务器将Web客户请求的响应发送出去后,服务器便
      不必保存任何信息了。
    • Web服务器可以指示Web客户以存储Cookie的方式在一系列请求和响应之间维持状态,而服务器端则采用 Session机制保持状态
  • Web内容的构建组件
    • 使用HTML/XHTML、CSS、Javascript构建静态Web页面
    • 使用CGI、PHP、Python、Ruby、Java、Servlet、Node.js等技术构建动态Web应用
    • 使用各种数据发布格式及语言(XML、YAML、JSON、RSS/Atom)交换数据

Linux下常用的Web服务器

  • Apache
  • Nginx
  • Lighttpd

Apache

安装与启动

  • yum install httpd httpd-tools httpd-manual安装
  • systemctl start httpd启动
  • 网页打开失败大部分是防火墙导致,具体参考下面关闭防火墙或允许http服务规则

配置

  • /etc/httpd/conf/httpd.confhttpd服务的配置文件
  • /var/www/html/index.html可以在这个路径下创建html文件替换掉默认网站

虚拟主机

  • 若要创建不同的虚拟主机,使用不同的ip、port、servername即可

使用不同的主机名端口等配置

先创建对应的目录,建议在/var/www/这个目录下,假设这里需要使用bit.com作为主机名

先配置html文件

  • mkdir bit.com/var/www/目录下创建文件夹bit.com

  • 然后在里面再创一个文件:touch index.html这里只是单纯测试所以只需要在里面随便放一些文字即可

  • 我这里只是想测试所以只放了一些文字:

    This is www.bit.com!
    

配置httpd服务配置文件

  • vim /etc/httpd/conf/httpd.conf修改添加了端口记得去linux安全设置里面允许端口通过,可参考Linux安全

    ...
    # 可以直接使用这个命令添加不同端口访问
    Listen 81
    # 也可以添加不同IP和端口访问
    Listen 192.168.3.199:85
    # 创建一个虚拟主机名
    <VirtualHost 192.168.3.105:80>
    	DocumentRoot "/var/www/bit.com"
    	ServerName www.bit.com
    </VirtualHost>
    # 也可以配置多个,ip和端口也都可以修改
    <VirtualHost 192.168.3.106:81>
    	DocumentRoot "/var/www/bit.xyz"
    	ServerName www.bit.xyz
    </VirtualHost>
    

启动apache服务

  • systemctl start httpd启动后去浏览器中查看,若无法打开可能是防火墙未允许通过或配置有误

Nginx

  • nginx小巧,功能强大,有逐渐占Apache的趋势
  • /usr/share/nginx/html/index.htmlnginx的默认html文件在这里

创建repo库文件

也可以参考这里,因为Linux系统一般不自带Nginx,所以需要手动添加库文件以便下载或更新Nginx

  • touch /etc/yum.repos.d/nginx.repo新建repo文件,名字可随意
  • 官网中选择RHEL-CentOS,或者直接复制下面repo信息然后粘贴到:vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

安装启动测试

  • yum install nginx -y当repo库保存好了之后就可以使用这个命令安装
  • rpm -ql nginx查看nginx文件
  • systemctl start nginx测试nginx服务是否能正常启动,此时可以在浏览器中输入centos的ip地址查看,若不能正常打开可能是防火墙未允许或者nginx的配置有误

配置nginx

  • 添加配置html文件

    • mkdir /var/www/bit.com与apache一样添加一个文件夹并创建一个index.html文件
    • vim var/www/bit.com/index.html仅测试所以随便添加内容即可,我在里面输入的是This is www.bit.com
  • /etc/nginx/conf.d/default.d编辑默认网站配置

    • 配置文件

      ... 
      # 一个server就是一个网站
      server{
      	listen	192.168.3.106:80;
      	server_name	www.bit.com;
      	root	/var/www/bit.com;
      }
      
    • 如果需要不同IP或端口可以修改listen后的参数,例如:listen 192.168.3.199:85;

    • 如果需要修改不同的域名可以在server_name后修改参数,如:server_name www.bit.xyz;

    • 记得/var/www/bit.com目录下需要拥有一个index.html文件

重启nginx测试

由于上面已经开启了nginx服务所以这里重启一次

  • systemctl restart nginx重启nginx服务
  • 此时192.168.3.105是nginx的默认站点,192.168.3.106是我自己的www.bit.com站点
  • 打开浏览器输入192.168.3.106
    • 或修改dns或修改hosts文件再输入www.bit.com

Tomcat

Tomcat也是一直web服务器,但他是需要配合java使用,也可以参考这里

安装

  • 先打开官网,在左侧可以选择对应的版本,我选择的是Tomcat 9.你也可以直接点我直接到达tomcat 9的下载页面,下滑找到Core下的tar.gz链接将其下载下来image-20200517163813753

  • 在命令行中对其进行解压

    [root@centos 下载]# ls
    apache-tomcat-9.0.35.tar.gz
    [root@centos 下载]# tar -zx -f apache-tomcat-9.0.35.tar.gz 
    [root@centos 下载]# mv apache-tomcat-9.0.35 tomcat
    [root@centos 下载]# ls
    apache-tomcat-9.0.35.tar.gz  tomcat
    

启用服务

[root@centos 下载]# tomcat/bin/startup.sh 
Using CATALINA_BASE:   /root/下载/tomcat
Using CATALINA_HOME:   /root/下载/tomcat
Using CATALINA_TMPDIR: /root/下载/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /root/下载/tomcat/bin/bootstrap.jar:/root/下载/tomcat/bin/tomcat-juli.jar
Tomcat started.

此时去浏览器中输入localhost:8080即可发现服务已启用成功!

数据库

目前MariaDB等同于MySQL,由于MariaDB有逐渐上升的趋势,且MySQL有弱化的趋势,所以这里只叙述MariaDB,其他部分涉及到SQL语句这里也不叙述

MariaDB

安装

yum install mariadb-server安装MariaDB

启动

systemctl start mariadb启动mariaDB服务

初始化

  • mysql_secure_installation初始化数据库
    • 一开始会询问是否设置数据库root的密码,回车确认
    • Set root password? [Y/n] 是否设置root密码,推荐y
      • New password:之后会让你输入密码
    • Disallow root login remotely? [Y/n]是否不允许root用户远程登录,推荐n
    • Remove anonymous users? [Y/n]移除anonymous用户,推荐y
    • Remove test database and access to it? [Y/n]是否要移除测试数据库
    • Reload privilege tables now? [Y/n]是否要重启以生效刚刚的设置

访问测试

  • mysql -u root -p后面会让你输入密码,这里输入你上面设置的密码即可
  • flush privileges刷新数据库

外部访问

参考:https://www.cnblogs.com/mapu/p/9184212.html

  • firewall-cmd --add-service=mysql外部访问,首先第一步需要允许防火墙通过3306或mysql服务,如果你需要永久允许通过可以在后面添加--permanent
  • 对于外部访问的工具,你可以使用NavicatMYSQL-Front等工具...
  • 外部访问最主要的是用户,指定用户IP所访问的数据库

指定用户通过“指定IP”访问“所有”的数据库

  • grant all privileges on *.* to "root"@"192.168.1.99" identified by "password";
    • on *.* 表示允许访问任意数据库
    • to "root"@"192.168.1.99"表示指定用户root只能被192.168.1.99这个IP的主机访问数据库
    • by "password"表示需要通过passowrd这个密码访问

指定用户通过“任何ip”访问“指定”的数据库

  • grant all privileges on bit.* to "bit"@"%" identified by "password" with grant option;
    • on bit.*表示允许访问bit这个数据库下的任意数据表
    • to "bit"@"%"表示指定用户bit可以被任意IP的主机访问数据库
    • by "password"表示需要通过passowrd这个密码访问

Linux安全

防火墙 firewall

一般真机中为了安全起见建议不要直接关闭,后果自负

常用命令

服务

  • firewall-cmd -add-service=http 添加
  • firewall-cmd --remove-service=http 删除
  • 若要永久保存(持久化)后面加上 --permanent
    • firewall-cmd --reload重新载入防火墙配置

端口

  • firewall-cmd -add-port=3306/tcp 添加,也可以将tcp改为udp

  • firewall-cmd --remove-service=3306/tcp 删除,也可以将tcp改为udp

  • 若要永久保存(持久化)后面加上 --permanent

  • 重新加载防火墙策略:systemctl reload firewalld

详细

  • 防火墙在运行的时候会有两种配置模式,Runtime Mode(当前运行模式)和Permanent Mode(永久模式),Runtime mode只会在当前运行的时候生效,重启后失效,Permanent mode则是在每次重启时生效,立刻添加不会立刻生效(写如文件)

查看

  • firewall-cmd --get-default-zone查看当前的默认区域
  • firewall-cmd --get-zone查看所有可使用区域
  • firewall-cmd --get-services查看当前系统可用服务,可以添加到防火墙
  • firewall-cmd --list-services当前区域可使用的服务,已经添加到服务器
  • firewall-cmd --list-all当前区域所有信息
  • firewall-cmd --add-service=vnc-server添加服务
  • firewall-cmd --list-port查看开放的端口
  • firewall-cmd --reload重新载入防火墙配置

添加到永久模式

  • firewall -cmd --add-service=http --permanent将http写入永久模式
  • systemctl restart firewalld需要重启一次才会启动http防火墙配置

添加指定端口-永久模式

  • firewall-cmd --add-port=3306/tcp --permanent添加允许端口到永久默认

删除指定服务

  • firewall-cmd --remove-service=http删除http服务

SELinux

概念

SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)可参考

  • 其他程序之外增加的安全机制,Linux系统中会默认安装,所有的程序都会受到SELinux限制,所以即使当http服务受到了控制也不会影响系统
  • 根目录:/etc/selinux/
  • 配置文件:/etc/selinux/config

Mac

MAC(Mandatory Access Control)强制访问控制

  • 在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。
  • 这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。
  • 即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。
  • 这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。
  • 而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。

DAC

DAC(Discretionary Access Control)自主访问控制

  • 在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。
  • 只要访问这个资源的进程符合以上的条件就可以被访问。
  • 而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。
  • 这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。

MAC和DAC的对比

可以看到,在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。

image-20200514120855496

SELinux的基本概念

  • 主体(Subject)

    • 可以完全等同于进程(注:为了方便理解,如无特别说明,以下均把进程视为主体。)
  • 对象(Object)

  • 被主体访问的资源。可以是文件、目录、端口、设备等。(注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。)

  • 政策和规则(Policy & Rule)

    • 系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。

      而哪些进程需要管制、要怎么管制是由政策决定的。

      一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。

      规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。

      在 CentOS 7 系统中,有三套政策,分别是:

      1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。

      2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。

      3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。

      政策可以在 /etc/selinux/config 中设定。

  • 安全上下文(Security Context)

    • 安全上下文是 SELinux 的核心

      安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。一个「进程安全上下文」一般对应多个「文件安全上下文」。只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。

    • 文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。

    • 安全上下文的结构及含义

      安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0

      image-20200514121600685

SELinux的三种工作模式

  • enforcing强制模式,selinux彻底检查,保护linux的安全
  • permissive宽容模式,selinux不执行,但只记录
  • disabled关闭模式,关闭selinux

SELinux 工作模式可以在 /etc/selinux/config 中设定。

如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(原作者表示重启了大约10分钟),SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。

SELinux工作流程

image-20200514121635844

动手

查看状态

  • getenforce查看SELinux当前运行的工作模式
  • sestatus详细的SELinux当前运行的工作状态
  • getsebool -a查看系统服务是否允许的布尔值on/off,-a是所有的
    • setsebool ftpd_anon_write=on临时设定为开启
    • setsebool ftpd_full_access=1临时设定为开启
    • setsebool ftpd_anon_write=on -P永久有效
    • ftp_home_dir(centos7/redhat没有)由于没有用处所以官方将其取消

改变状态

一般真机中为了安全起见建议不要直接关闭,后果自负,有时候服务不能访问,有可能是防火墙也有可能是SELinux的问题,在保证安全的情况下暂时关闭测试是否因为他们所导致,如果是则需要对其进行设置

  • setenforce 0临时关闭SELinux的状态,变成permissive状态
  • setenforce 1临时开启SELinux的状态,变成enforcing状态

对服务端口

添加

semanage port -a -t http_port_t -p tcp 12345对htttp服务添加端口

删除

semanage port -d -t http_port_t -p tcp 12345对http服务删除端口

Types类型

查看进程的安全上下文

ps auxZ | grep -v grep | grep http

查看文件或文件夹类型

ls -Z可以查看当前文件夹下的Types类型

改变文件或文件夹类型

chcon -R -t htpd_sys_content_y /mydir/改变文件夹mydir的types类型

示例

除了防火墙上默认允许http开放的80等端口,其他端口SELinux都会对其进行管制,如果我要http添加83端口,因为其中默认不包含83,所以需要在SELinux上添加此端口外部才能访问,若是单独在防火墙中进行添加也无法访问

  • semanage port -l |grep -w http_port_t查看http默认允许的端口
  • 这里以http为例子,若在httpd.conf文件中添加listen 83,如果我没有在SELinux中添加,则无法启动httpd服务,因为SELinux会为了安全拒绝,可以用下面这条命令对其放行
    • semanage port -a -t http_port_t -p tcp 83在SELinux中放行83端口给http
    • firewall-cmd --add-port=83/tcp如果防火墙中没有允许83端口通过,那就需要在防火墙中添加端口

上下文

  • ls -Z`显示上下文
    • 用户 角色 类型
    • public_content_t
    • public_content_rw_t
  • chcon改变上下文
    • chcon -R -t public_content_t filename更改文件的上下文为public_content_t
    • chcon --reference=/var/www/html filename改变文件夹的上下文,参考自文件夹html的上下文

FTP

FTP,TFTP, SFTP,FTPS总结和对比

概念

  • 类型
    • tftp 简单文件传输协议 UDP
      • TFTP是TCP/IP协议族中在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
      • 优势
        1. TFTP能够用于那些有UDP而无TCP的环境
        2. TFTP代码所占的内存要比FTP小
    • ftp
      • FTP是在网络层传输文件的应用层协议,基于TCP连接,使用客户/服务器模式。
        对于ftp服务器来说,常用的端口有两个,一个是tcp端口21,此端口经常用于连接,另一个是tcp端口号20, 此端口经常用于传输数据。
    • SFTP与FTPS
      • SFTP(SSH 文件传输协议SSH File transfer protocol)也称为通过安全套接层的文件传输协议File Transfer protocol via Secure Socket Layer, 以及 FTPS(FTP-SSL) 都是最常见的安全 FTP 通信技术,用于通过 TCP 协议将计算机文件从一个主机传输到另一个主机。SFTP 和 FTPS 都提供高级别文件传输安全保护,通过强大的算法(如 AES 和 Triple DES)来加密传输的数据。当你在FTP服务器上收发文件的时候,你面临两个风险。第一个风险是在上载文件的时候为文件加密。第二个风险是,这些文件在你等待接收方下载的时候将停留在FTP服务器上,这时你如何保证这些文件的安全。一个选择是创建一个支持SSL的FTP服务器,它能够让你的主机使用一个FTPS连接上载这些文件。这包括使用一个在FTP协议下面的SSL层加密控制和数据通道。一种替代FTPS的协议是安全文件传输协议(SFTP)。这个协议使用SSH文件传输协议加密从客户机到服务器的FTP连接。
    • sftp
      • sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
      • SFTP 或 SSH 文件传输协议是另一种安全的安全文件传输协议,设计为 SSH 扩展以提供文件传输功能,因此它通常仅使用 SSH 端口用于数据传输和控制。当 FTP 客户端软件连接到 SFTP 服务器时,它会将公钥传输到服务器进行认证。如果密钥匹配,提供任何用户/密码,身份验证就会成功。
    • ftps (ftp over ssh)
      • FTPS也称作“FTP-SSL”和“FTP-over-SSL”,是一种多传输协议,相当于加密版的FTP。默认端口号是21。FTPS是在安全套接层使用标准的FTP协议和指令的一种增强型FTP协议,为FTP协议和数据通道增加了SSL安全功能。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。
      • FTPS最常见的问题之一是建立数据传输连接。在FTPS中,数据通过单独的通道(不同于发起命令的主通道,DATA)传输。 这意味着每次列出目录或上传/下载文件时都会建立新连接。
  • ftp有两种模式
    • 主动
    • 被动

配置

安装

  • yum install vsftpd安装vsftp服务
  • rpm -ql vsftpd

配置开机启动

  • systemctl enable vsftpd设置开机自启
  • systemctl is-enabled vsftpd查询是否开机启动

配置文件

  • vim /etc/vsftpd/vsftpd.conf配置vsftpd配置文件
  • grep -v "^#" vsftpd.conf查看vsftpd.conf的有效配置
  • vsftp是通过/etc/pam.d/vsftpd这个文件来身份验证,同时是在/etc/vsftpd/vsftpd.conf文件中的末尾pam_serice_name=vsftpd来指向身份验证文件

启动

systemctl start vsftpd启动vsftpd

访问

匿名账户

如果需要登录匿名账户,则需要在vsftpd.conf文件中更改允许匿名选项:anonymous_enable=YES,记得重启一次vsftpd服务,不输入任何东西则系统ftp会默认填充anonymous,但命令行一定要输入,一般只能下载不能上传

  1. 账户名:anonymous,密码:空(不输入)或者邮件地址
  2. 账户名:ftp,密码:ftp
  • 如果需要匿名用户写入需要开启SELinux的ftpd_anon_writeftpd_full_access

  • setsebool ftpd_anon_write=on临时设定为开启,允许匿名用户读写

  • setsebool ftpd_full_access=1临时设定为开启,取消对本地虚拟用户的限制

  • setsebool ftpd_anon_write=on -P永久有效

  • ftp_home_dir(centos7/redhat没有)由于没有用处所以官方将其取消

  • 如果出现登录失败: 500 OOPS: vsftpd: refusing to run with writable root inside chroot(),需要在vsftp的配置文件中添加一条命令

    • vim /etc/vsftpd/vsftpd.conf编辑配置文件

      allow_writeable_chroot=YES
      

本地用户

我们可以在FTP上使用系统本地用户进行登录访问,如果账户没有限制在自己的家目录内(chroot),则这种方法不安全,因为可以直接跳转到其他根目录去,几乎能看到任何文件夹

防火墙

  • firewall-cmd --add-service=ftp配置防火墙允许ftp通过
  • firewall-cmd --add-service=ftp --permanent配置永久允许防火墙允许ftp通过
    • firewall-cmd --reload 重新载入防火墙配置

命令行

  • ftp 192.168.3.105在windows的cmd中输入即可发起连接,如果需要使用匿名用户anonymous则需要修改ftp的根路径

  • 之后会要求输入账号与密码,以下是输入成功样子:

    用户(192.168.3.105:(none)): bit
    331 Please specify the password.
    密码:
    230 Login successful.
    
  • 登录成功后就如同在centos的shell一样,输入命令即可:

    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    下载
    公共
    图片
    文档
    桌面
    模板
    视频
    音乐
    

工具

这里使用的工具是FileZilla,你也可以使用其他工具

其他

将本地用户限制在其家目录中

参考1 参考2

  • 先新建用户

    # 将vuser1文件目录放置在/vuser1中,这里将限制其在此
    useradd -d /vuser1 vuser1
    passwd vuser1
    # vuser2默认会在/home/vuser2中,这里将限制在此
    useradd vuser2
    passwd vuser2
    # vuser3也会在home目录里,但不做限制
    useradd vuser3
    passwd vuser3
    
  • vim /etc/vsftpd/vsftpd.conf

    chroot_local_user=YES # YES为所有的人都限制,NO为所有人都不被限制
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list 
    allow_writeable_chroot=YES # 添加权限
    
    • 可能上述可能模糊,这里拆分一下
    chroot_local_user=YES # YES 为所有的用户都开启限制
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list # 若此文件存在此文件内的用户名不会受到限制
    --------------------------
    chroot_local_user=NO # NO 不限制所有用户
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list # 若此文件存在此文件内的用户名会受到限制
    
  • firewall-cmd --add-service=ftp后面在防火墙中允许其通过

  • setsebool ftpd_full_access=1允许登入

  • setsebool ftpd_anon_write=1允许写入

    • 如果测试过程中还是失败可以尝试将selinux暂时停止setenforce 0,也可以将防火墙临时关闭systemctl stop firewalld
  • 测试,在另外一台机器上,可以是linux也可以是windows,这里以windows为例子,注:下面有将一些不必要的信息给去掉了

    C:\>ftp 192.168.3.105
    用户(192.168.3.105:(none)): vftp1
    密码:
    230 Login successful.
    ftp> mkdir vftp1
    257 "/vftp1" created
    ftp> ls
    linux1
    vftp1
    ftp> quit
    221 Goodbye.
    C:\>ftp 192.168.3.105
    用户(192.168.3.105:(none)): vftp2
    密码:
    230 Login successful.
    ftp> ls
    linux2
    ftp> mkdir vftp2
    257 "/vftp2" created
    ftp> pwd
    257 "/"
    ftp> quit
    C:\>ftp 192.168.3.105
    用户(192.168.3.105:(none)): vuser3
    密码:
    230 Login successful.
    ftp> cd /
    250 Directory successfully changed.
    ftp> ls
    bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
    

虚拟用户

参考

  • 使用linux中创建的用户登录可能会导致linux的安全问题,所以创建虚拟的用户相对会安全一点

    • setsebool ftpd_anon_write=on临时设定为开启,允许匿名用户读写
    • setsebool ftpd_full_access=1临时设定为开启,取消对本地虚拟用户的限制
  • 先创建一个用户名、密码,明文的文件,将用户名和密码放入vim ftpuser

    vuser1
    12345678
    vuser2
    87654321
    
  • db_load -T -t hash -f ftpuser /etc/vsftpd/vu.dbftpuser文件处理转换成数据库文件

  • chmod 600 vu.db为了安全,更改权限防止其他用户读取更改

  • vim /etc/vsftpd/vsftpd.conf编辑vsftp配置文件

    chroot_local_user=YES
    chroot_list_enable=YES
    # (default follows)
    chroot_list_file=/etc/vsftpd/chroot_list
    ...
    pam_service_name=vsftpd
    # 在文件的末尾添加
    guest_enable=YES
    guest_username=vftp
    user_config_dir=/etc/vsftpd/vuserconf
    allow_writeable_chroot=YES
    # 结束
    userlist_enable=YES
    tcp_wrappers=YES
    
  • cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.copy复制备份一个vsftpd文件

  • vim /etc/pam.d/vsftpd编辑vsftpd文件

    #%PAM-1.0
    auth    required        pam_userdb.so   db=/etc/vsftpd/vu
    account required        pam_userdb.so   db=/etc/vsftpd/vu
    
  • 创建一个vftp用户

    • useradd vftp
    • passwd vftp
  • mkdir /etc/vsftpd/vuserconf创建虚拟用户配置文件目录

  • 配置虚拟用户的配置文件

    • vim /etc/vsftpd/vuserconf/vftp1这里只记录一个,有多少个用户就创建多少个虚拟用户配置文件

    • 简单配置:

      local_root=/home/vftp1
      
    • 详细配置:

      # 设置虚拟用户的目录
      local_root=/home/vftp1
      # 设置虚拟用户是否可以写入
      write_enable=YES
      local_umask=022
      anon_world_readable_only=NO
      # 允许虚拟用户的上传功能
      anon_upload_enable=YES
      # 设置虚拟用户是否可以创建文件夹
      anon_mkdir_write_enable=YES
      # 设置虚拟用户是否可以知晓其他的写入操作,比如删除、重命、覆盖操作
      anon_other_write_enable=YES
      # 最多允许同意账号在10个不同的IP登录
      max_per_ip=10
      # 最大下载速度(字节/秒)
      local_max_rate=2500000
      # session超时时间
      idle_session_timeout=600
      # 连接超时时间
      data_connection_timeout=120
      # 最多连接数量
      max_clients=10
      
    • mkdir /home/vftp1创建文件夹给vftp1这个用户作家目录

    • chmod 777 vftp如果需要ftp在这个文件夹内操作可以使用这个命令(仅供测试)

  • systemctl restart vsftpd重启vsftpd服务

  • 常见错误

    • 错误 :500 OOPS: cannot change directory:/
      • 权限问题 或者
        1. setsebool ftpd_disable_trans 1
        2. service vsftpd restart
    • 错误:500 OOPS: unrecognised variable in config file: cal_root
      • 大部分情况是复制的时候丢失了字符,应该是 local_root 回头去看看vsftpd.conf配置文件!
    • 错误:500 OOPS:could not read chroot() list file:/etc/Vsftpd/chroot_list
      • 遇到这种情况是因为在/etc/Vsftpd目录下没有一个文件叫做chroot_list的文件,创建即可

多个虚拟FTP主机

参考

  • ifconfig ens33:0 192.168.3.107/24添加一个虚拟IP

  • useradd -d /ftp2 ftp2添加一个ftp2用户并设置其家目录为/ftp2

  • passwd ftp2设置密码

  • cp /etc/vsfptd/vsftpd.conf /etc/vsftpd/vsftpd2.conf将原有的vsftpd.conf配置文件复制一份用作于新的虚拟FTP

  • vim /etc/vsftpd/vsftpd.conf配置原vsftpd.conf添加内容

    listen_address=192.168.3.105 #原本主机的IP
    
  • vim /etc/vsftpd/vsftpd2.conf配置新的vsftpd2.conf添加内容

    listen_address=192.168.3.107
    ftp_username=ftp2
    local_root=/var/ftp2
    
  • 测试,使用不同的IP进行测试即可

  • 如果失败了请配置selinux与firewall服务,这里不再赘述

FTPS

参考

  • yum install openssl安装openssl

  • cd /etc/pki/tls/certs切换目录进行密钥生成

  • make vsftpd.pem生成证书密钥文件

    • 后面填写的资料可以随便填

      Country Name (2 letter code) [XX]:CN
      State or Province Name (full name) []:SD
      Locality Name (eg, city) [Default City]:XX
      Organization Name (eg, company) [Default Company Ltd]:
      Organizational Unit Name (eg, section) []:
      Common Name (eg, your name or your server's hostname) []:ftp.name.com
      Email Address []:
      
  • 编辑配置vsftpd.conf配置文件对其添加ssl加密参数

    ssl_enable=YES   #启用ssl加密
    allow_anon_ssl=YES   #允许匿名用户使用ssl加密
    force_local_data_ssl=YES     #强制本地用户数据传输加密
    force_local_logins_ssl=YES   #强制本地用户登录加密
    force_anon_logins_ssl=YES    #强制匿名用户登录加密
    force_anon_data_ssl=YES  #强制匿名用户数据传输加密
    ssl_tlsv1=YES    #支持TLS方式
    ssl_sslv2=NO     
    ssl_sslv3=NO     
    rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem      #RSA凭证档案所在
    pasv_min_port=64000
    pasv_max_port=64100
    
  • 配置selinux

    • setsebool ftpd_full_access on
    • setsebool ftpd_use_passive_mode on
  • 配置防火墙

    • firewall-cmd --add-port=64000-64100/tcp允许指定端口的tcp连接
    • firewall-cmd --add-service=ftp 允许ftp防火墙服务项通过
  • 测试,可在FileZilla等工具上测试

  • 如果失败了请配置selinux与firewall服务,这里不再赘述

SELinux与FTP

  • 如何FTP服务配置使用中出现了问题可以从SELinux或防火墙中寻找问题
    • SELinux
      • getenforce查看状态
      • setenforce 00关、1开,Permissive和Enforcing的切换
      • ftp_home_dir(centos7/redhat没有)由于没有用处所以官方将其取消

LAMP

概念

(Linux+Apache+MariaDB+PHP,开源黄金组合)

  • LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:
    • Linux,操作系统
    • Apache,网页服务器
    • MariaDB或MySQL,数据库管理系统(或者数据库服务器)
    • PHP、Perl或Python,脚本语言
  • 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的廉价和普遍,这个组合开始流行(大多数Linux发行版本捆绑了这些软件)。当一起使用的时候,它们表现的像一个具有活力的“解决方案包”(Solution Packages)。其他的方案包有苹果的WebObjects(最初是应用服务器),Java/J2EE和微软的.NET架构。
  • “LAMP包”的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流,甚至当这些文本流并非源自程序自身时也是。正是由于这个原因系统设计者经常称这些脚本语言为胶水语言。

简易配置

  • 安装

    • yum install httpd mariadb-server php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash
  • 启动

    • systemctl start httpd mariadb
  • 初始化数据库

    • mysql_secure_installation初始化数据库
      • 一开始会询问是否设置数据库root的密码,回车确认
      • Set root password? [Y/n] 是否设置root密码,推荐y
        • New password:之后会让你输入密码
      • Disallow root login remotely? [Y/n]是否不允许root用户远程登录,推荐n
      • Remove anonymous users? [Y/n]移除anonymous用户,推荐y
      • Remove test database and access to it? [Y/n]是否要移除测试数据库
      • Reload privilege tables now? [Y/n]是否要重启以生效刚刚的设置
  • 编辑配置主页

    • vim /var/www/html/index.php编辑php文件

      <?PHP
      $connect = mysqli_connect('localhost','root','password','myDB','3306')or die("连接数据库失败".mysql_error());
      if($connect){
          echo "连接成功!";
      }
      ?>
      
  • 防火墙与selinux

    • firewall-cmd --add-service=http --add-service=https --add-service=mysql
    • setenforce 0
  • 测试

    • 打开浏览器输入http:\\localhost\index.php
  • 应用测试请往下翻看

详细基础搭建

  1. Apache

    • 安装yum install httpd
    • 设置开机启动systemctl enable httpd
    • 启动systemctl start httpd
  2. mariadb

    • 安装yum install mariadb-server
    • 设置开机启动systemctl enable mariadb
    • 启动systemctl start mariadb
    • mysql_secure_installation初始化数据库
      • 一开始会询问是否设置数据库root的密码,回车确认
      • Set root password? [Y/n] 是否设置root密码,推荐y
        • New password:之后会让你输入密码
      • Disallow root login remotely? [Y/n]是否不允许root用户远程登录,推荐n
      • Remove anonymous users? [Y/n]移除anonymous用户,推荐y
      • Remove test database and access to it? [Y/n]是否要移除测试数据库
      • Reload privilege tables now? [Y/n]是否要重启以生效刚刚的设置
  3. PHP

    • 安装yum install php

    • 安装web常用PHP组件yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

    • 可选测试

  • vim /var/www/html/index.php在网页根目录中新建一个php主页
    <?PHP echo "hello world!"; ?>

  • 重启Apache加载PHPsystemctl restart httpd

  • vim /var/www/html/inde.phpPHP+SQL简单测试

    <?PHP
    $connect = mysqli_connect('localhost','root','password','myDB','3306')or die("连接数据库失败".mysql_error());
    if($connect){
        echo "连接成功!";
    }
    ?>
    
  • vim /var/www/html/inde.phpPHP连接数据库,忘记了可参考(可选)

    <?PHP
    	$connect = mysqli_connect('localhost','root','password','myDB','3306');
        //2.定义sql语句
         $sql='select * from table';
            mysqli_query($connect,'set names utf8');
        //3.发送SQL语句
            $result=mysqli_query($connect,$sql);
    $arr=array();//定义空数组       
            while($row =mysqli_fetch_array($result)){
                    var_dump($arr);
                    echo "<br>";
            }
        //4.关闭连接
           mysqli_close($connect);
    ?>
    

扩展应用

可以使用织梦、可道云、moodle等应用

可道云

  • 教程其实可以参考官网:https://kodcloud.com/download/
  • wget http://static.kodcloud.com/update/download/kodbox.1.09.zip下载kod的压缩包文件(最新的版本命令可在上面的官网链接获取)
  • unzip kodbox.1.09.zip解压压缩包到当前目录下
  • mv kodbox.1.09.zip /var/www/html/kodbox将文件夹重命名并放置在其他位置
  • cd /var/www/html/kodbox切换到此目录下
  • chmod -Rf 755 ./*按官方说明授予权限
  • 打开浏览器访问localhost/kodbox根据提示进行设置即可

织梦

  • 先在官网下载安装压缩包:http://www.dedecms.com/products/dedecms/downloads/
  • tar -xzvf DedeCMS-V5.7-UTF8-SP2.tar.gz下载好之后对其进行解压(文件名视具体情况变动)
  • mv kodbox.1.09.zip /var/www/html/dede
  • cd /var/www/html/dede切换到此目录下
  • chmod -Rf 755 dede授予权限
  • 打开浏览器访问localhost/dede/uploads/install/index.php根据提示进行设置即可

moodle

  • PHP版本>7.1
  • PHP5
    • wget https://download.moodle.org/stable30/moodle-3.0.tgz下载历史旧版本
    • tar -xvf moodle-3.0.tgz解压压缩包
    • chmod -R 755 moodle授予权限
    • 打开浏览器访问localhost/moodle/install.php根据提示进行设置即可

NFS

概念

主要用于linux之间的文件共享

  • 网络文件系统( Network File System,NFS)采
    用客户机服务器工作模式
  • NFS是分布式计算系统的一个组成部分,可实现在异种网络上共享和装配远程文件系统。
  • NFS提供了一种在类UNX系统上共享文件的方法。
  • NFS还可以结合远程网络启动实现
    • 无盘工作站(PXE启动系统,所有数据均在服务器的磁盘阵列上)
    • 瘦客户工作站(本地启动系统,本地磁盘存储了常用的系统工具,而所有/home目录的用户数据被放在NFS服务器上并且在网络上处处可用)

协议模型

  • NFS协议提供了一种远程文件系统规范
    image-20200529191504082

NFS协议版本

RHEL/CentOS7支持NFS V3、NFS V4客户端,默认使用NFS V4协议

image-20200529191534873

NFS V4

NFSv4内置了远程挂装和文件锁定等协议支持,因此NFSv4不再需要与 rpcbindrpc. mountd、rpc. statd和 locks互动
在 Centos7中,当NFS服务器端使用exportfs命令时仍然需要rpc. mountd守护进程,但它不参与跨越网络线路的操作。
NFSv4的nfs服务仍然监听在tcp:2049端口。

与NFS相关的RPM包

  • nfs- utils:NFS的主要组件。包含有rpc.nfsd及rpc. mountd这两个NFS的核心守护进程及其相关文档、执行文件等
  • rpcbind:提供RPC的端口映射的守护进程及其相关文档、执行文件等

与NFS相关的工具

  • exportfs:在NFS服务器端,维护NFS共享资源的命令
  • showmount:用来在NFS客户端查看服务器共享的目录
  • nfsstat:显示NFS的状态统计信息
  • recinto:显示由RPC维护的端口映射,显示已经注册的RPC服务列表。

动手

安装

  • yum install nfs-utils安装
  • systemctl enable nfs-server开机自启
    • 因为作者做了软连接,所以也可以使用nfs

      image-20200528101938996

  • systemctl start nfs-server启动nfs服务

配置共享文件夹

  • 配置文件:/etc/exports
  • vim /etc/exports编辑nfs配置文件
  • 格式:共享目录 主机表(参数表) 主机表2(参数表)
    • /srv/nfs 192.168.3.0(ro) 192.168.4.45(rw)
    • /srv/nfs *(ro)允许所有主机,ro-readonly只读
    • showmount -e localhost查看本机共享情况
  • 参数
    • ro 设置共享目录为只读的权限
    • rw 设置共享目录为可读写的权限
    • root_squash 将root哟用户或其所属组映射为匿名用户或组(nfsnobody),这是默认值
    • no_root_squash 将root用户或其所属组映射成匿名用户或组,这样设置很不安全不建议使用
    • all_squaash将所有远程访问的普通用户或组都映射成匿名用户或组,适合公用目录
    • no_all_squash 不将所有远程访问的普通用户或组都映射成匿名用户或组,这是默认值

配置防火墙

  • firewall-cmd --add-service=nfs --add-service=mountd --add-service=rpc-bind --permanent
  • firewall-cmd --reload

Linux客户端

查询

  • showmount -e 192.168.3.106

挂载

  • mkdir /mnt/linux_nfs新建文件夹以挂载
  • mount -t nfs nfs服务器地址:/共享目录 挂载点
  • mkdir /mnt/linux_nfs新建文件夹以挂载
  • mount -t nfs 192.168.3.106:/srv/nfs /mnt/linux_nfs将主机192.168.3.106的文件夹/srv/nfs挂载到本机的/mnt/linux_nfs

卸载

  • umount /srv/nfs

windwos客户端访问NFS

  • 一开始windows并不支持NFS,但随后增加了访问功能,但需要安装额外功能,通过映射网络驱动器的方式来使用
  • 控制面板>程序>程序和功能>启用或关闭Windows功能>NFS服务将NFS服务勾选上,确定并安装即可
  • 安装完成打开cmd
    • showmount -e 192.168.3.105查询NFS,有的windows版本不支持
    • mount 192.168.3.105:/srv/nfs f:映射网络驱动器到f盘

开机启动

ip:/共享目录 挂载点 nfs _netdwv 0 0

其他

  • exportfs
    • 用于维护NFS共享的目录列表
    • 当修改了/etc/ exports之后,无需重新启动nfs服务,可以使用 exports命令使改动立刻生效。
    • exportfs [-aruv]
      • -a全部挂载或卸载/etc/ exports配置文件中的设置
      • -r全部挂载/etc/exports中的设置,同步更新/var/lib/nfs/xtab的内容
      • -u卸载共享目录
      • -v在显示输出列表的同时显示这顶参数
  • nfsstat
  • rpcinfo

SAMBA

概念

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,服务消息块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

SMB/CIFS协议和SAMBA,Linux用NFS,Windows用SMB,由于Linux觉得SMB不错,但win不理睬,Linux是后面才将SAMBA补上

  • SMB( Server Message Block,服务信息块)协议是个高层协议,它提供了在网络上的不同计算机之间共享文件、打印机和不同通信资料的手段
  • SMB使用NetBIOS API实现面向连接的协议,该协议为 Windows客户程序和服务提供了一个通过虚电路按照请求一响应方式进行通信的机制。
  • SMB的工作原理就是让NetBIOS与SMB协议运行在TCP/IP上,并且使用 NetBIOS的名字解释器让Linux机器可以在 Windows的网上邻居中被看到,从而和 Windows9X/NT200X进行相互沟通,共享文件和打印机。
  • Samba允许 Linux服务器与 Windows系統之间进行通信,使跨平台的互访成为可能。 Samba采用C/S模式,其工作机制是让 Netbios( Windows网上邻居的通信协议)和SMB两个协议运行于TCP/IP通信协议之上并且用 Vetbeult协议让 Windows在“网上邻居”中能浏览Linux服务器
  • Sambar服务器可实现如下功能:WINS和DNS服务;网络浏览服务; Linux和 Windows城之间的认证和授权; UNICODE字符集和城名映射满足CFS协议的UNX共享等。 Sambal服务器可实现如下功能:WINS和DNS服务;网络浏览服务; Linux和 Windows城之间的认证和授权;UNICODE字符集和坂名映射满足CIFS协议的UNX共享等

Samba主要服务

  • 文件和打印机共享
  • 用户验证和授权
  • 名称解析
  • 流浪(服务通告)

Samba守护进程

  • Smbd:实现共享和验证授权服务
  • Nmbd:实现名字解析和浏览服务

mba服务器包括两个后台应用程序:Smbd和Nmbd.Smbd是 Samba的核心,主要负责建立 Linux Samba服务器与 Samba客户机之间的对话,验正用户身份并提供对文件和打印系统的访;Nmbd主要负责对外发布 Linux Samba服务器可以提供的 Netbios:名称和浏览服务,使 Windows用户可以在“网上邻居”中浏览 Linux Samba服务器中共享的源另外 Samba还包括一些管理工具,如smb- client, smbmount, testp arm, smbpasswd等

服务概览

  • 软件包:samba,samba-common
  • 服务类型:由Systemd启动的守护进程
  • 配置单元:/usr/lib/systemd/system/[smb|nmb]d.service
  • 守护进程:/usr/sbin/nmbd,/usr/sbin/smbd
  • 监听端口:
    • NetBIOS UDP:137(-ns),UDP:138(-dgm),TCP:139(-ssn)
    • SMB over TCP TCP:445(-ds)
  • 配置文件:/etc/samba/
  • 相关软件包:samba-swat,samba-client,testoarm,cifs-utils

动手

安装

  • yum install samba

编辑配置文件

  • mkdir -p /srv/samba/example 配置一个共享文件夹

    • touch test.txt放置文件以验证
  • semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"修改文件类型

  • restorecon -Rv /srv/samba/example/用于恢复selinux文件属性即恢复文件的安全上下文,-R 连同子目录一起修改,-v 将过程显示到屏幕上

  • vim /etc/samba/smb.conf编辑配置文件

    [global] #段
    	workgroup = SAMBA-name	#工作组
    	netbios name = Server
    	security = user
    	log file = /var/log/samba/%m.log
    	log level = 1
    [bit] #自定义的名字
    	path = /srv/smaba/example/
    	read only = no
    
  • testparm检查sam.conf配置文件

创建smb用户

Linux共享必须是单独的系统用户,nologin创建系统用户但不能登录

  • useradd -M -s /sbin/nologin example创建一个用户以添加到smb中,直接新建用户smb是不能使用的
  • passwd example配置密码
  • smbpasswd -a example添加到smb账户中以供远程访问
    • -a添加用户,要添加的用户必须是系统用户
    • -d冻结用户,将这个用户冻结,禁止使用
    • -c恢复用户,将用户解冻,允许使用
    • -n吧用户的密码设置成空,要在global中写入 null passwords -ture
    • -x删除用户

启动服务

  • systemctl start smb启动smb服务
  • firewall-cmd --add-service=samba --permanent允许smb服务通过
  • firewall-cmd --reload重新载入配置文件
  • systemctl enable smb设置开机自启

访问测试

  • \\192.168.3.105在外部windows机器的文件管理器输入Linux的IP,账户密码是刚刚创建的example

删除

如果想重新连接,则需要先在cmd中将其删除

  • net use \\192.168.3.105 /del

定时任务

Scheduling tasks,定时循环执行指定操作以保障系统长久化使用,这是系统自带的服务,无需安装

  • cron

  • 文件位置:/etc/cron.d

  • 计划任务保存的地方:/var/spool/cron/

  • cat /etc/crontab查看

    [root@centos /]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

动手

设置任务

  • crontab -e一般用户使用这个命令为这个用户的任务
    • -e需要编辑
  • crontab -e -u username管理员可以给指定用户添加任务

格式

执行的最小时间间隔是每分钟,每分钟检查一次需要做什么任务

  • 分钟、小时、日、月、星期、用户名(管理员下)、命令

  • minute 0-59

  • hour 0-23

  • month 1-12

  • day of week 0-7(0=0,星期天)

  • *代表任意允许的值

  • 8,19如果有多个值用逗号隔开

  • 0-23/2*/2代表偶数的值(0,2,4,6...22)

  • 具体

    # 分钟、小时、日、月、星期、[用户名(管理员下,可选)]、命令
    # 每年的一月一日 重启一次电脑 `*`表示都匹配
    0	0	1	1	*	reboot
    # 每个新七天的凌晨3点钟 重启一次httpd
    0	3	*	*	0	systemctl restart httpd
    # 每个工作日的8点和19点执行 记录一个日志
    0	8,19	*	*	1-5	logger message rom root
    

查看计划任务

如果设置了任务,可以在/var/spool/cron/这个目录下查看,文件名为设置任务的指定用户名,不建议直接使用vim编辑,标准的编辑是使用crontab -e

  • cat /car/spool/cron/root查看root用户设置的计划任务
  • crontab -l当前用户的任务

安全

计划是默认所有用户都能使用,默认系统使用黑名单cron.deny

  • /etc/cron.allow在其中填写用户名则能使指定用户可以使用crontab命令,其他用户不允许

  • /etc/cron.deny在其中填写用户名则能使指定用户不可以使用crontab命令,其他用户允许

    • 这里将用户bit添加至cron.deny

      [bit@centos cron.hourly]$ crontab -e
      You (bit) are not allowed to use this program (crontab)
      See crontab(1) for more information
      

定时执行临时任务

只能临时执行一次,而不是循环执行.(at.d)

  • at(windows下也有)

    • ctrl+D保存并退出编辑

    • 在十一点执行一个任务

      [root@centos /]# at 11:00
      at> dir / > /rootdir.txt
      at> <EOT>
      job 1 at Thu Jun  4 11:00:00 2020
      [root@centos cron.hourly]# atq
      1	Thu Jun  4 11:00:00 2020 a root
      
  • atq查看建立的工作

  • atrm [num]

log日志

  • logger this is a logger记录日志
  • Direct write(Apache samba)服务个体记录的日志
  • rsyslogd 系统本身服务记录的日志
    • unix上是使用了syslogd,后来的rsyslogd是他的升级版(r:更可靠的)
    • rsyslogd信息多,写带不用文件,可远程
  • journald(sysemd-journald)与系统进程绑定的服务记录的日志
    • 二进制保存的文件,不能直接查看,自开机启动以来的日志信息(重启后会重新开始记录,旧记录会丢失)
    • journal可以通过这个命令查看开机启动以来的日志

rsyslogd

  • 获取信息的途径

    • /var/log/*通常的信息会写入到此目录中
    • journalctl
    • systemctl status 服务名
  • 查看日志文件

    • tail /var/log/messages查看日志文件
      • tail -f /var/log/messages实时查看日志文件
  • /etc/rsyslog.conf系统自带的日志文件配置

    • 模块、全局指令、规则

    • facility、priority、destination服务、信息级别、目的文件

      • rsyslog.conf

        # mail服务 .*代表全部的级别 /../..什么级别的信息保存在什么地方
        mail.*                                                  -/var/log/maillog
        
    • 信息级别:debug、info、notice、warning、error、crit、alert、emerg越来越严重

journalctl

  • journalctl --no-pager
  • journalctl --follow实时查看日志信息
  • journalctl -f实时查看日志信息
  • journalctl _UID=0
  • journalctl -n 20等同于tail -n 20
  • journalctl -p eror只显示错误信息
  • journalctl --since yesterday -p err自什么时间到什么时间的错误
  • journalctl --since --until(YYYY-MM-DD hh:mm:ss)从什么时候到什么时候
  • journalctl -o verbose
  • journalctl _SYSTEMD_UNIT=sshd.service
  • 保存journal信息
    • /run/log/journal
    • /var/log/journal monthly保存总空间10%或15%就开始清理之前的记录
    • /etc/systemd/journald.conf配置文件

rotaing log files

  • 按时间归档日志文件(每周)
  • /etc/logrotate.conf
  • /etc/logrotatd.d

SSL

  • web安全->HTTPS
  • Secure Sockets Layer(SSL)
    • v2与v3都有漏洞,逐渐被TLS
  • Transport Layer Security (TLS)
  • CA(Certificate Authority)

配置HTTPS

环境搭建

  • yum install http
  • yum install mod_ssl

ssl配置文件

此处做介绍无需配置/etc/httpd/conf.d/ssl.conf

...
# 启用ssl
SSLEngine on
# sslv2喝sslv3都有爆过出现漏洞
# 与所有ssl协议兼容,排除SSLv2与SSLv3
SSLProtocol all -SSLv2 -SSLv3
# 建议的写法,排除所有只使用1、1.1、1.2版本
# SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2

生成SSL

  • openssl rsa -text -in /etc/pki/tls/private/localhost.key
  • openssl x509 -text -in /etc/pki/tls/certs/localhost.crt

验证SSL和TLS协议

  • 格式:openssl s_client -connect hostname:port -protocol
  • openssl s_client -connect localhost:443 -tls1

防火墙配置

  • firewall-cmd --add-service=https

验证

  • ip a得到本机IP:192.168.1.2
  • 打开浏览器输入:https://192.168.1.2

配置FTPS

环境配置

  • yum install vsftpd
  • yum install mod_ssl

生成SSL

  • openssl rsa -text -in /etc/pki/tls/private/localhost.key
  • openssl x509 -text -in /etc/pki/tls/certs/localhost.crt

验证SSL和TLS协议

  • 格式:openssl s_client -connect hostname:port -protocol
  • openssl s_client -connect localhost:443 -tls1

配置FTP

vim /etc/vsftpd/vsftpd.conf

...
# 末尾添加如下内容
ssl_enable=YES
ssl_tlsv1_2=YES
ssl_tlsv1_1=YES
ssl_tlsv1=NO
ssl_tlsv1=NO
ssl_sslv2=NO
ssl_sslv3=NO

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/pki/tls/certs/localhost.crt
rsa_private_key_file=/etc/pki/tls/private/localhost.key

其他

如果登录失败或不能访问可以尝试关闭selinux与防火墙

  • setenforce 0
  • systemctl stop firewalld

验证

使用FileZilla新建站点,使用SFTP协议输入主机IP、账号密码即可

posted @ 2020-10-29 20:16  bitrabbit  阅读(458)  评论(0编辑  收藏  举报