admin管理员组

文章数量:1598853

Linux

一、Linux操作系统简史

  1. 操作系统发展史,什么是操作系统?
    可能很多人都会说,我们平时装的windows7, windows10都是操作系统,没错,他们都是操作系统。还有没有其他的?想想我们使用的手机,Google公司的Android(安卓)系统,Apple公司笔记本上的的MacOSX、IPhone的IOS,他们都是操作系统。那么我们想想,操作系统都可以做什么?我们买来电脑的后第一件事情就是安装操作系统,有的电脑则在我们买来的时候已经安装好了操作系统。我们可以在操作系统上通过安装程序来看视频,听音乐,玩游戏、浏览网页,还可以弹出移动硬盘和U盘、管理我们硬盘中的文件等等;我们通过操作系统来和计算机交互,系统协调我们安排给计算机的各种任务。操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机操作系统是随着计算机研究和应用的发展逐步形成并发展起来的,它是计算机系统中最基本的系统软件。 我们通过操作系统来使用计算机。
  2. 什么是Linux?
    我们知道Linux是在计算机上运行的,所以说Linux是一组软件,问题是这个软件是操作系统还是应用程序,他可以在那类计算机硬件上运行,来源于哪里?而且一直说他是一款免费的软件,什么是Linux?
    计算机主机就是一堆硬件组成的(电源、主板、cpu、内存、硬盘、显卡、网卡),为了有效的控制这些硬件资源,于是产生了操作系统,操作系统有效的控制硬件资源的分配,并提供计算机运行所需要的功能外,为提供给程序设计师更容易开发软件的环境,操作系统还会提供一套完整的系统接口为程序开发者使用,比如说API应用程序接口,从编程角度Linux系统就是一个大的程序调用库,它提供大量的API函数,目的是方便程序员开发应用程序。
    Linux就处于内核与系统调用接口这两层,所以说Linux是一个操作系统。
  3. 为什么要学习Linux系统呢?
    ①.授权: Linux是免费的系统,系统的源码也是开放的,用户可以对其进行编辑修改;Windows是需要收费的系统,即便是购买之后其系统源码也是受到版权保护,用户不能够对其进行修改;
    ②.软件: 在软件的丰富程度方面,如果您经常使用消费级的软件以及游戏等,显然在这方面Windows的支持更好,尤其是对于游戏玩家,Windows支持的游戏更多;当然Linux可以通过Wine来实现,但是Windows的EXE软件运行在Linux系统上的效果显然体验不如原生的软件;
    ③.安全性: 由于普及率方面等原因,Windows在各种恶意软件和病毒的数量方面显然是比Linux要多,目前由于普及率较少,Linux在这方面的数量更少;
    ④.易用性: 由于开源的特性,Linux拥有不同的发行版本,使用的UI(用户操作页面)虽然大同小异但使用起来也是会存在着不同;在这一点上,显然Windows使用起来更为方便;不过由于在系统资源占用上更少,可以对系统进行深度的定制,因此在运行的硬件适用性上,显然Linux有着更大的优势;
    ⑤.稳定性: 很多服务器选择使用Linux,除了其开源的特性和模块化的内核设计外,还有就是在稳定性方面有着更好的表现;
    简单来说就是Linux系统是开源的不收费的,且安全性和稳定性都比较高,Windows Server系统对服务器硬件要求较高、稳定性也不是很好,而linux在这方面比较优秀。Linux占用硬件资源也比较少,运行速度快,安全性比windows也要好,唯一的缺点就是操作者需要系统化学习,所以就成为了各个大厂(公司)的优选。
  4. centos7操作系统
    ①.安装图形化centos7操作系统,配置网卡并ping通宿主机(本次系统部署是为后边搭建网站平台做准备),修改宿主机vmnet8(虚拟网卡)中ipv4IP地址为:192.168.1.50、子网掩码:255.255.255.0、网关为:192.168.1.1

    ②.操作系统安装完成后,修改网络适配器为自定义vmnet8(Net网络地址转换模式)

    ③.使用vim编辑器打开网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改为 静态IP模式:BOOTPROTO=static ONBOOT=yes 在最下面添加
IP配置:IPADDR=192.168.1.10 子网掩码配置:NETMASK=255.255.255.0 网关:GATEWAY=192.168.1.1
编辑完成之后按ESC键-‘:’输入命令wq保存退出配置文件


④.有以下红框中字节返回结果,代表网络已连通

输入网卡重启命令:systemctl restart network
输入测试网络连通性命令(ping): ping 192.168.1.50

二、Linux安装centOS

  1. 安装镜像和工具
    软件: 推荐使用 VMware,我用的是 VMware 16
    镜像: CentOS7 ,如果没有镜像可以在阿里云下载——CentOS7
    硬件: 因为是在宿主机上运行虚拟化软件安装centos,所以对宿主机的配置有一定的要求。最起码I5CPU双核、硬盘500G、内存4G以上。
  2. 安装步骤
  • 打开VMware选择新建虚拟机
  • 安装模式
    典型安装: VMware会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好
    自定义安装: 自定义安装可以针对性的把一些资源加强,把不需要的资源移除。避免资源的浪费
  • 这里我用的是VMware16,就选择16
  • 这里选择之后安装的操作系统,正确的选择会让VM tools更好的兼容。这里选择Linux下的CentOS
  • 虚拟机名称就是一个名字,在虚拟机多的时候方便自己找到
    VMware的默认位置是在C盘下,我这里改成G盘。
  • 处理器分配要根据自己的实际需求来分配。在使用过程中CPU不够的话是可以再增加的。这次只做安装CentOS演示,所以处理器与核心都选1
  • 内存也是要根据实际的需求分配。我的宿主机内存是16G所以我给虚拟机分配4G内存
  • 网络连接类型的选择,网络连接类型一共有桥接、NAT、仅主机和不联网四种
    桥接与NAT模式访问互联网过程,如下图所示。
    桥接: 选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上。
    NAT: NAT模式就是虚拟机要联网得先通过宿主机才能和外面进行通信。
    仅主机: 虚拟机与宿主机直接连起来。
  • 其余两项按虚拟机默认选项即可
  • 磁盘容量暂时分配40G即可后期可以随时增加,不要勾选立即分配所有磁盘,否则虚拟机会将40G直接分配给CentOS,会导致宿主机所剩硬盘容量减少。 勾选将虚拟磁盘拆分成多个文件,这样可以使虚拟机方便用储存设备拷贝复制
  • 磁盘名称,默认即可
  • 取消不需要的硬件,点击自定义硬件,选择声卡、打印机等不需要的硬件然后移除
  • 点击完成,已经创建好虚拟机
  • 连接光盘,右击刚创建的虚拟机,选择设置
    先选择CD/DVD,再选择使用ISO映像文件,最后选择浏览找到下载好的镜像文件。启动时连接一定要勾选上后确定。

  • 开启虚拟机后会出现以下界面
    ①.Install CentOS 7 安装CentOS 7
    ②.Test this media & install CentOS 7 测试安装文件并安装CentOS 7
    ③.Troubleshooting 修复故障
    选择第一项,安装直接CentOS 7,回车,进入下面的界面
  • 选择安装过程中使用的语言,这里选择中文、简体中文。点击继续
  • 时区选择上海,查看时间是否正确。然后点击完成
  • 点击软件选择,选择GNOME桌面,把带有箭头的勾选上
  • 选择安装位置,在这里可以进行磁盘划分
  • 选择我要配置分区,然后点击完成
  • 如图所示,点击加号,选择/boot,给boot分区分200M。最后点击添加挂载点
  • 然后以同样的办法给其他三个区分配好空间后点击完成,分区大小由自己情况而定
  • 然后会弹出摘要信息,点击 (接受更改)
  • 首先要打开网卡,然后查看是否能获取到IP地址(我这里是桥接),再更改主机名后点击完成,主机名可以随意更改,这里默认不做改动
  • 最后选择 (开始安装)
  • 设置root密码,密码按照要求,设置,太简单会提示重新设置,设置完之后,点击完成
  • 点击创建管理员用户,用户自己设定,密码也自己设定,设定为干之后点击完成
  • 等待系统安装完毕重启系统即可
  • 这里点击LICENSING,里面点击我同意许可协议,点击完成,出来之后点击完成配置。之后一路下一步就可

三、Linux安装kali系统

  1. Debian介绍
    Debian 是精简的 Linux 发行版,有着干净的作业环境。安装步骤简易有效,大部分情况下只要“Enter”····“Enter”一直按下去便可以顺利安装。
    Debian拥有方便高效的软体包管理程序和 deb 软体包,可以让用户容易的查找。安装。移除,更新程序,或系统升级。
    健全的软件管理制度,包括了 Bug 汇报,包维护人等制度,让 Debian 所收集的软件品质在其他的Linux 发行包之上。
    Debian拥有庞大的包库,令用户只需要通过其自身所带的软件管理系统下便可下载并安装包,不必再在网络上查找。
    包库分类清楚,用户可以明确的选择安装自由软件,半自由软件或闭源软件。
  2. 红色圈主部分就是镜像,三个当中下载一个即可:镜像链接
  3. 本次教程依旧采用VMware虚拟机进行实践
    创建虚拟机的教程已经演示多遍,这几就不在演示,直接上手系统的安装。
  • 开机之后会进入这个界面选择第一个选项 “Graphical Install”
  • 选择你的首选语言、位置和键盘布局点击 “Continue”
  • 选择区域
  • 配置键盘选择汉语,点击继续
  • 等他更新完,不用管
  • 主机名我这里使用默认,也可以自己改
  • 这里使用Debian命名
  • 设置root用户密码
  • 设置用户,用户名自己设定
  • 这里也是自己设定
  • 在次设置密码
  • 为 Debian 10 选择硬盘分区方案
    ①.向导分区(安装器将自动创建需要的分区)
    ②.手动分区(正如名字所示,使用这种方式,我们可以手动创建分区方案)
  • 正如我们所视,我大约有 21.5 GB 硬盘空间,选择 “继续”
  • 在接下来的屏幕中,你将被要求选择分区,如果是 Linux 新用户,那么选择第一个选项。假使你想要一个独立的 home 分区,那么选择第二种方案,否则选择第三种方案,它们将为home/,/var/,/tmp/创建独立分区
  • 在接下来的屏幕中,选择 “是” 来将更改写到磁盘中,配置 LVM ,然后在 “继续” 上单击
  • 点击继续,这里的话尽量创建虚拟机的时候把硬盘空间调到40G以上,否则后面会报错
  • 在接下来的屏幕中,选择 “是” 来写更改到磁盘中
  • 正在安装,等待完成即可
  • 在安装期间,安装器将提示你扫描 CD/DVD 以配置软件包管理器,选择 “否” ,然后在 “继续” 上单击
  • 在接下来的屏幕中,如果你想配置基于网络的软件包管理器选择 “yes” ,但是为了使这个方式工作,要确保你的系统连接到了网络,否则选择 “No”
  • 选择中国即可
  • 默认即可
  • 这里不填直接继续
  • 等待即可
  • 选择否不参与调查
  • 选择以下几个



  • 选择第一个
  • 至此安装成功

四、Linux系统启动过程

Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux是自由软件和开放源代码软件发展中最著名的例子。
给大家讲解一下系统从开机到能使用的整个过程。
先通过一张图来简单了解下整个系统启动的流程,整个过程基本可以分为POST–>BIOS–>MBR(GRUB)–>Kernel–>Init–>Runlevel。 下面会详细说明每个过程的作用。

  • BIOS
    BIOS(Basic Input/Output System),计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,基本输入输出系统,该系统存储于主板的ROM芯片上,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。详细的BIOS功能,这边就不说了,BIOS主要的一个功能就是存储了磁盘的启动顺序,BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的Bootloader程序,若第一个磁盘不存在MBR,则会继续查找第二个磁盘(PS:启动顺序可以在BIOS的界面中进行设置),一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。
  • MBR
    MBR(Master Boot Record),主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。
  • GRUB
    GRUB(Grand Unified Bootloader),多系统启动程序,其执行过程可分为三个步骤:
    Stage1: 这个其实就是MBR,它的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1.5
    Stage1.5: 该步骤就是为了识别文件系统
    Stage2: GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。
    PS: 实际上这个步骤/boot还没被挂载,GRUB直接识别grub所在磁盘的文件系统,所以实际上应该是/grub/grub.conf文件,该配置文件的信息如下:
grub.conf: 
    #boot=/dev/sda
    default=0        #设定默认启动的title的编号,从0开始
    timeout=5       #等待用户选择的超时时间
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz    #GRUB的背景图片
    hiddenmenu     #隐藏菜单
    title CentOS (2.6.18-194.el5PAE)      #内核标题
        root (hd0,0)         #内核文件所在的设备
        kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/     #内核文件路径以及传递给内核的参数
        initrd /initrd-2.6.18-194.el5PAE.img                            #ramdisk文件路径
  • Kernel
    Kernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件。
    initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。
    Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。
  • Init
    init,初始化,顾名思义,该程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):
    A.激活udev和selinux;
    B.根据/etc/sysctl.conf文件,来设定内核参数;
    C.设定系统时钟;
    D.装载硬盘映射;
    E.启用交换分区;
    F.设置主机名;
    G.根文件系统检测,并以读写方式重新挂载根文件系统;
    H.激活RAID和LVM设备;
    I.启用磁盘配额;
    J.根据/etc/fstab,检查并挂载其他文件系统;
    K.清理过期的锁和PID文件

    执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。
  • Runlevel
    runlevel,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种
    ①.关机模式
    ②.单一用户模式(直接以管理员身份进入)
    ③.多用户模式(无网络)
    ④.多用户模式(命令行)
    ⑤.保留
    ⑥.多用户模式(图形界面)
    ⑦.重启

    在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本

Run level 0 – /etc/rc.d/rc0.d/
Run level 1 – /etc/rc.d/rc1.d/
Run level 2 – /etc/rc.d/rc2.d/
Run level 3 – /etc/rc.d/rc3.d/
Run level 4 – /etc/rc.d/rc4.d/
Run level 5 – /etc/rc.d/rc5.d/
Run level 6 – /etc/rc.d/rc6.d/

这些目录下的脚本只有K和S开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务

在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
正确的关机流程为:sync > shutdown > reboot > halt
关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档。
例如你可以运行如下命令关机:

Sync 将数据由内存同步到硬盘中。
Shutdown 关机指令,你可以 man shutdown 来看一下帮助文档。列如你可以运行如下命令关机:
Shutdown –h 10 ‘this server will shutdown after 10 mins’ 这个命令意思是,计算机将在10分钟后关机,并且显示在登录用户的当前屏幕中。

Shutdown -h now 立马关机
Shutdown -h 20:25 系统会在今天20:25关机
Shutdown -h +10 十分钟后关机
Shutdown -r now 系统立马重启
Shutdown –r +10 系统十分钟后重启
Reboot 就是重启,等同于shutdown –r now
Halt 关闭系统,等同于shutdown –h now 和 poweroff

最后总结一下,不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。
关机的命令有: shutdown –h now、 halt、 poweroff 和 init 0 。
重启系统的命令有: shutdown –r now、 reboot、 init 6。

五、Linux系统目录结构

登录系统后,在当前命令窗口下输入命令:ls
你会看到如下图所示:

树状目录结构:

目录的解释:

  • /bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令,比如说我们的cd、ls、ps –ef等命令。
  • /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件,这个目录一般不需要做修改。
  • /dev:dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的,比如说系统的磁盘,以及你插入到系统上的U盘都在这个目录下边。
  • /etc:etc存放着各种系统配置文件,没有自定义软件的配置文件也都在这放着。
  • /home:用户的家目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib:/lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件内含了很多程序的共享的代码,以避免每一个程序都包含有相同的子程序的副本,故应而使得某些可执行文件变成共享,节省空间。
  • /media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
  • /opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录,里边创建的文件也只有root有权限查看。
  • /sbin:存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。
  • /srv: 主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务)
  • /sys: 与/proc类似,也是虚拟文件系统,主要是记录与核心相关的信息,不占硬盘空间。
  • /tmp:tmp 这个目录是用来存放一些临时文件的。一般用户或者正在执行的程序暂时放置档案的地方,任何人都可以存取。
  • /usr:用于存放系统应用程序,比较重要的目录/usr/local本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
  • /usr/bin:系统用户使用的应用程序。
  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src:内核源代码默认的放置目录。
  • /var:var 这个目录中存放着在不断扩充着的东西,比如说邮件或者日志文件。
  • /run:运行着进程所需要的文件
  • 注意
    在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
    /etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
    /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,就是说源代码中指向的目录,比如 ls 就是在 /bin/ls 目录下的。
    值得提出的是 /bin、/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
    /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

六、Linux文件和目录操作

  1. ls查看当前目录内容

显示当前目录下的内容,常见的参数有3个:-l –lh –a
ls –l以列表方式显示
ls –hl以大小单位显示
ls –a 显示隐藏文件
touch .1.txt

  1. cd目录跳转
    cd文件目录跳转命令,常见的的操作

cd /home/ 跳转home目录

cd ~ 跳转/root目录

cd / 跳转到根目录

cd… 返回上级目录

  1. mkdir创建目录和touch创建文件

mkdir 创建目录:mkdir zz 在当前目录下创建zz目录
touch 创建文件:touch zz.txt 在当前目录下创建zz.txt文件


可以看到在当前yhk目录下创建了一个zz目录

可以出他俩的区别,mkdir创建的目录是蓝色的,目录可以用cd命令来回切换,而touch创建的是白色的就是文件类型,他不能用cd切换他是直接用vim/vi 命令来编辑文本内容的。

  1. cp复制

cp –r zz zz1 -r表示连同子目录一起拷,将zz内容拷给zz1

5.rm删除
主要有3个参数 -i -r -f

rm –i zz1.txt 删除,有询问‘y/n’

rm –r zz 删除zz和子目录下所有文件

rm –f zz 直接删除zz,不经询问

  1. mv移动

mv text /zz 将text移动到zz目录下
mv text zz text重命名为zz

  1. cat显示文本内容

cat –n 显示行号


more也是显示文本文件内容的命令,如果文本太长,cat效果不佳,使用more会好一些可以用Enter 跟cat用法一样

七、Linux用户和用户组操作

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
①.用户账号的添加,删除与修改;
②.用户口令的管理;
③.用户组的管理

  1. Linux系统用户账号的管理
    用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
    添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。文件权限:读(r=4)、写(w=2)、执行(x=1)
    ①.添加新的用户账号使用Useradd命令,其语法是:Useradd 选项 用户名
    参数说明:

-c comment 指定一段注释性描述。
-m 使用-m选项,可以创建主目录。-d 目录 指定用户主目录,如果此目录不存在,则同时创建。
-g 用户组 指定用户所属的用户组。
-s Shell文件 指定用户的登录Shell,哪个交互式脚本。
-u 用户号 指定用户的用户号

实例1:

useradd –d /home/sam –m sam

此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录)。
实例2:

useradd –s /bin/sh –g group –G adm,root gem

此命令新建了一个用户gem,该用户的登录shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
这里许提前新建组:

groupadd group及groupadd adm

增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow存储用户名和加密 密码等信息,/etc/group存储用户组信息等。

  • 删除帐号
    如果一个用户的账号不在使用,可以从系统中删除,删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必须时还删除用户的主目录。删除一个已有的用户账号使用userdel命令,格式如下:

userdel 选项 名称

常用的选项是 -r,它的作用是把用户的主目录一起删除。列如:

userdel –r sam

此命令删除用户sam 在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

  • 修改帐号
    修改用户账号就是根据实际情况更改用户的有关属性,如用户号,主目录,用户组,登录shell等。
    修改已有用户的信息使用#usermod命令,其格式如下:

#usermod 选项 用户名

常用的选项包括-C,-d,-d,-g,-G,-s,-u,以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定心得资源值。另外有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
列如:

#usermod –s /bin/ksh –d /home/z –g developer sam

此命令将用户sam的登录shell修改为ksh,主目录改为/home/z ,用户组改为developer。

  • 用户口令的管理
    用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
    指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名

可使用的选项:
-l 锁定口令,即禁用账号;
-u 口令解锁;
-d 使账号无口令;
-f 强迫用户下次登录时修改口令;
如果默认用户名,则修改当前用户的口令。

  1. Linux系统用户组的管理
    每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
    用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新
  • 增加一个新的用户组使用#groupadd命令
    其格式:#groupadd 选项 用户组
    可以使用的选项有:

-g GID 指定新用户组的组标识号(GID)
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同

实例1:

groupadd group1

此命令向系统中增加了一个新组group1,新组的组标志号是在当前已有的最大组标识号的基础上加1。

  • 如果要删除一个已有的用户组,使用#groupdel命令,其格式如下

#groupdel 用户组

列如:

#groupdel group1

此命令从系统中删除组group1

  • 修改用户组的属性使用groupmod命令。其语法如下
    groupmod 选项 用户组
    常用的选项有:

-g GID 为用户指定新的组标识号
-o与-g 选项同时使用,用户组的新GID可以与系统已有用户组的GID相同
-n新用户组 将用户组的名字改为新名字

实例1:

groupmod –g 102 group2 指定标识号GID

此命令将组group2的组标识号修改为102。
实例2:

groupmod –g 10000 –n group3 group2

此命令将组group2的标识号改为10000,组名修改为group3。

  1. 与用户账号有关的系统文件
    完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。
    与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括/etc/passwd, /etc/shadow, /etc/group等。
    下面分别介绍这些文件的内容。
  • /etc/passwd文件是用户管理工作涉及的最重要的一个文件
    Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
    这个文件对所有用户都是可读的。它的内容类似下面的例子:

    从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
    1)"用户名"是代表用户账号的字符串。
    通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号,因为冒号在这里是分隔符。
    为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
    2)“口令”一些系统中,存放着加密后的用户口令字。
    虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
    3)“用户标识号”是一个整数,系统内部用它来标识用户。
    一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
    通常用户标识号的取值范围是0~65535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。
    4)“组标识号”字段记录的是用户所属的用户组。
    它对应着/etc/group文件中的一条记录。
    5)“注释性描述”字段记录着用户的一些个人情况。
    例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
    6)“主目录”,也就是用户的起始工作目录。
    它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
    7)用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
    Shell是用户与Linux系统之间的接口。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用bash为默认的登录Shell,即这个字段的值为/bin/bash。
    用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。
    利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。
    8)系统中有一类用户称为伪用户(pseudo users)。
    这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
    伪用户含义:

bin拥有可执行的用户命令文件     ->     uucp UUCP使用
sys拥有系统文件     ->     lp lp或lpd子系统使用
adm拥有账户文件     ->     nobody NFS使用

9)除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。
由于/etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow文件。 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。
10)/etc/shadow中的记录行与/etc/passwd中的一一对应。
它由pwconv命令根据/etc/passwd中的数据自动产生
它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。
这些字段如下:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
①."登录名"是与/etc/passwd文件中的登录名相一致的用户账号。
②."口令"字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
③."最后一次修改时间"表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCO Linux 中,这个时间起点是1970年1月1日。
④."最小时间间隔"指的是两次修改口令之间所需的最小天数。
⑤."最大时间间隔"指的是口令保持有效的最大天数。
⑥."警告时间"字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
⑦."不活动时间"表示的是用户没有登录活动但账号仍能保持有效的最大天数。
⑧."失效时间"字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

  1. 用户组的所有信息都存放在/etc/group文件中
    将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段。
    每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
    当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
    用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
    用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:
    组名:口令:组标识号:组内用户列表
    ①."组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
    ②."口令"字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
    ③."组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组。
    ④."组内用户列表"是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
    /etc/group文件的一个例子如下:

八、Linux压缩解压和文件下载安装

  1. linux压缩和解压缩
  • tar
    解包: tar zxvf filename.tar
    打包: tar czvf filename.tar[输出压缩包的名字] dirname[输入文件的名字]
  • gz
    解压1: gunzip filename.gz
    解压2: gzip -d filename.gz
    压缩: gzip filename
  • .tar.gz 和 .tgz
    解压: tar zxvf filename.tar.gz
    压缩: tar zcvf filename.tar.gz dirname
    压缩多个文件: tar zcvf filename.tar.gz dirname1 dirname2 dirname3…
  • bz2命令
    解压1: bzip2 -d filename.bz2
    解压2: bunzip2 filename.bz2
    压缩: bzip2 -z filename
    .tar.bz2
  • tar、gzip、bzip有什么区别
    ①.gzip:压缩软件,将文件做成一个压缩包,会删除原来的文件,生成一个新的压缩包文件。
    缺陷:gzip不能压缩目录
    ②.bzip
    压缩软件,将文件做成一个压缩包,会删除原来的文件,生成一个新的压缩包文件。
    缺陷:bzip2不能压缩目录
    比较:gzip 比 bzip2 压缩率更大

    ③.tar
    打包文件,不会删除原文件,也不会压缩文件;tar命令是可以跟gzip或者bzip2共同使用
    缺陷:不能压缩文件,需要与gzip组合使用才能压缩文件
  • 打包跟压缩的区别
    打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的,压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间,在压缩的时候通常是先打包再压缩;
  • tar命令tar命令参数前面加”-"与不加“-”的区别
    tar命令参数前面加不加“-”执行命令的结果是没有区别的,区别只要是在于linux风格方面,加“-”属于System V风格,不加“-”属于BSD风格,所以在使用tar命令的时候它的参数加不加“-”结果是一样的,看个人的使用方式;
    常用参数:
    tar命令的常用参数

-z 是否同时具有gz属性
-j 是否同时具有bz2属性
-J 是否同时具有xz属性
-x 解压缩、提取打包的内容
-t 查看压缩包内容
-c 建立一个压缩,打包文档
-C 切换到指定目录,表示指定解压缩包的内容和打包的内容存放的目录
-v 显示压缩或者打包的内容
-f 使用文件名,在f后面要接压缩后的文件的名字,只要用到tar命令,-f选项是必须要用的,-f参数在使用的时候一定排在其他参数的后面,在最右边
-p 保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P 保留绝对路径

  1. 打包
    实例:
    a.将/root/下的ceshi.txt文件和anaconda-ks.cfg文件和time.sh文件打包为一个文件,名称为“jihe.tar”:
    b.查看jihe.tar文件的内容:
    c.提取jihe.tar文件的内容到/opt目录下:
    如果不用“-C”指定目录则会提取内容到当前目录
  2. 压缩
  • linux主要有三种压缩方式
    1.gzip:是公认的压缩这速度最快,压缩大文件的时候与其他的压缩方式相比更加明显,历史最久,应用最广泛的压缩方式
    2.bzip:压缩形成的文件小,但是可用性不如gzip
    3.xz:是最新的压缩方式,可以自动提供最佳的压缩率
    建议的压缩的时候标明后缀:
参数作用命名方式
-z用于gzip压缩方式文件名.tar.gz
-j用于bzip2压缩方式文件名.tar.bz2
-J用于xz压缩方式文件名.tar.xz

实例:用不同的压缩方式压缩/root/目录下的Golden.apk文件
先查看Golden.apk文件的大小:
可以看到Golden.apk文件的大小为187M
a.用gzip压缩方式将Golden.apk文件压缩为Golden.apk.tar.gz文件:
b.用bzip2的压缩方式将Golden.apk文件压缩为Golden.apk.tar.bz2文件:
从上图可以看出红色方框内有报错,这个报错的原因是缺少bzip2的包,需要安装一个bzip2软件包
安装完成之后再重新压缩:
在压缩的过程中,我们可以发现:

压缩速度:gz > bz2 > xz
压缩率:xz > bz2 > gz

  1. 解压
  • 先删除/root/目录下的Golden.apk文件
    tar命令式一个很聪明的命令,我们在解压的时候不需要指明自己压缩的方式它会自己选择跟压缩方式对应的方式去解压,这话说得有点拗口,例:
    a.将Golden.apk.tar.gz解压到当前目录:
    在解压gz压缩方式压缩文件的时候并不需要加上-z,直接用参数-xf即可,另外两种压缩方式在解压的时候一样,因为tar命令会自动选择,解压之后压缩文件还在,如果不指定解压出来的文件保存在哪里,那么会直接解压在当前目录
    b.指定解压出来的文件保存的目录,将Golden.apk.tar.bz2文件解压在/opt/目录下:
    补充:
    a.在打包和压缩的过程中,我们有时候会看到这样的语句:tar: 从成员名中删除开头的“/”,这个并不是报错,是因为没有加上-P选项,没有保留原来的绝对路径去打包或者压缩,提取打包的内容跟解压一样,下面举一个例子:
    将/root/目录以gzip的方式压缩为root.tar.gz压缩文件:
    ①.没有加-P选项:
    ②.加上-P选项:
    解压的时候同理,如果在压缩文件的时候使用了-P选项,那么在解压的时候也要加上-P选项,不然也会出现”tar: 从成员名中删除开头的“/”“,如下图:
    ①.不加-P选项解压使用了-P选项压缩/root/后的root.tar.gz文件:
    ②.加上-P选项解压使用了-P选项压缩/root/后的root.tar.gz文件:
    b.在使用tar压缩或者打包的时候,可以通过增加–exclude来达到排除指定的文件的目的将/root/目录下的harry目录打包,但是不打包harry目录下的ha.txt文件,如下图:
    zip命令和unzip命令 #在使用zip跟unzip命令之前先查看系统有没有安装这两个命令的包,没有的话要自己安装 查看有没有安装zip跟unzip命令的命令:
rpm -q zip unzip

如果有安装了命令则会显示出命令的版本号

  • zip命令
    基本用法:
    zip [参数] [压缩包名] [压缩的目录或者文件的路径]
    zip命令的常用参数

-m 将文件压缩后,删除原文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩的时间
-q 安静模式,在压缩的时候不显示指令执行的过程
-r 递归压缩,将自定目录下的所有子文件以及文件一起处理
-x ”文件列表“,压缩时排除文件列表中的文件

实例:
a.压缩目录,将/root/目录下的harry目录压缩为名为harry.zip压缩包:
①.正常压缩,不加-q选项,显示压缩的过程:
②.加上-q选项,安静模式输出,不显示压缩的过程:
b.压缩多个文件,将/root/目录下的ceshi.txt文件和anaconda-ks.cfg文件和Golden.apk文件压缩为名为jihe.zip的压缩包:因为压缩的全是文件,所以可以不用加上-r选项:
c.压缩文件跟目录,将/root/下的ceshi.txt文件和anaconda-ks.cfg文件和harry目录压缩成名为dajihe.zip的压缩包:
d.将/root/目录下的harry目录压缩为harry1.zip压缩包,排除harry目录下的ha.txt文件:

  • unzip命令基本用法:
    unzip [参数] [压缩文件] (-d [目录]) //如果不是用括号里面的内容,则解压文件在当前工作目录
    unzip命令的常用参数:

-c 将解压缩的结果显示到屏幕上(显示每一个目录下的每一个文件的内容),同时对字符做适当的转换,但是并没有解压压缩包
-l 显示压缩文件内所包含的文件
-t 检查压缩文件是否正确
-v 执行时显示压缩文件的详细信息
-q 安静模式,执行时不显示任何信息
-d 指定文件解压后存储的目录
-x 指定不要处理压缩文件中的那些文件

实例:
a.将harry.zip压缩包解压缩的结果显示出来:具体会显示到每一个文件跟每一个文件的内容
b.显示jihe.zip压缩包里面锁包含的文件
c.检查dajihe.zip压缩文件是否正确:全部OK表示全部文件都是正确的
d.不解压压缩文件dajihe.zip,查看压缩包里面的内容(查看显示的文件列表还包含压缩比率)
使用-v显示的信息比使用-l显示的信息更加详细
e.将dajihe.zip压缩包解压到/opt/目录下
实例:
a.将harry.zip压缩包解压缩的结果显示出来

  1. Linux文件下载
  • Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
    命令:

安装软件(以foo-x.x.x.rpm为例):yum install foo-x.x.x.rpm
删除软件:yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm
升级软件:yum update foo或者yum update foo

  • yum换源:yum官方源下载速度太慢,一般需要换源为阿里云或网易云

①.切换目录到本地yum源地址
[root@localhost ~]# cd /etc/yum.repos.d
②.创建一个文件
[root@localhost yum.repos.d]# mkdir back
③.将所有.repo文件转移到刚创建的目录下
[root@localhost yum.repos.d]# mv *.repo back
④.自己ls 看一下是否清除
⑤.下载安装weget以防万一本机没有weget命令 [root@localhost ~]# yum -y install weget
⑥.下载aliyun的yum源(更换主yum源为国内的阿里云yum源)
[root@linux-server yum.repos.d]#wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun/repo/Centos-7.repo

  • apt是一个命令行实用程序,用于在Ubuntu、Debian和相关Linux发行版上安装、更新、删除和管理deb软件包
    apt是为交互使用而设计的。最好在shell脚本中使用apt-get和apt-cache,因为它们在不同版本之间向后兼容,并且有更多选项和功能。
    大多数apt命令必须以具有sudo权限的用户身份运行。
    安装软件包非常简单,只需运行以下命令:
sudo apt install【update、upgrade、remove】 package_name
  • rpm是一个命令行实用程序,用于在Ubuntu、Debian和相关Linux发行版上安装、更新、删除和管理rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。

安装命令:rpm -i your-package.rpm

  • 文件下载命令:wget
    wget命令是Linux系统用于从Web下载文件的命令行工具,支持 HTTP、HTTPS及FTP协议下载文件,而且wget还提供了很多选项,例如下载多个文件、后台下载,使用代理等等,使用非常方便。
    wget命令的使用
    语法格式

wget [options] [url]

  • dpkg是Debian包管理系统的核心组件之一,它用于管理Debian及基于Debian的Linux发行版中的软件包。dpkg能够通过解析软件包的元数据,完成软件包的安装、升级、删除和查询等操作。

  • dpkg的基本使用方法
    安装软件包: 使用dpkg -i <package_file>命令安装指定的软件包。
    升级软件包: 使用dpkg -i <package_file>命令安装新版本的软件包,已安装的旧版本将被替换。
    删除软件包: 使用dpkg -r <package_name>命令卸载指定的软件包,但保留其配置文件。
    完全删除软件包: 使用dpkg -P <package_name>命令彻底删除指定的软件包及其配置文件。
    查询软件包信息: 使用dpkg -l <package_name>命令查询指定软件包的详细信息。

  • apt、yum、rpm与dnf的区别:
    apt-get/dpkg是德班系(Debian、Ubuntu等)的软件管理命令
    yum 是红帽系(Redhat、Centos、Fedora等)的软件包管理命令
    rpm 是红帽系(Redhat、Centos、Fedora等)的软件包管理命令,但rpm不会管理依赖关系。
    yum会自动管理依赖关系,底层调用rpm管理软件包
    dnf(全称为Dandified yum)是新一代的rpm软件包管理器,目前和YUM共存。但Fedora 22 中,它取代了yum,正式成为 Fedora 22 的包管理器。

  1. Linux文件下载
  • 编译安装与极速安装
    在linux系统中安装软件有两种方式,极速安装和编译安装。极速安装是一种在线安装,通过 install 命令完成,就像 windows 系统中的安装软件程序。而编译安装软件,编译:将源代码变为机器可执行的代码文件。安装:将可执行文件安装到操作系统里,才可以使用。
  • 编译安装
    ①.准备软件包源文件
    从互联网下载相应的软件包(以 .tar.gz 或 .tar.bz2 为后缀),将tarball文件解压到/usr/local/src目录下,并切换到软件包目录下 ;
    ②. ./configure
    用来建立Makefile这个文件,通常程序开发者会写一个script来检查你的Linux系统、相关的软件属性等,这个步骤相当重要,因为将来你的安装信息都是在这一步骤内完成的。另外,这个步骤的相关信息应该要参考一下该目录下的README或INSTALL相关文件。通常可以通过在configure后加上参数来对安装进行控制,比如:./configure –prefix=/usr (指定安装路径为/usr目录下)。
    ③.makeclean(可选)
    make会读取Makefile中关于clean的工作。这个步骤不一定会有,但是一般执行一下,因为它可以去除目标文件。因为谁也不确定源码里面到底有没有包含上次编译过的目标文件(*.o)存在,所以当然还是清除一下比较好。至少等一下新编译出来的执行文件可以确定是使用自己的机器所编译完成的。
    ④.make
    make会依据Makefile当中的默认工作编译的行为。编译的工作主要是进行gcc来将源码编译成为可以被执行的目标文件,但是这些目标文件通常还需要一些函数库之类的链接后,才能生成一个完整的可执行文件。使用make就是要将源码编译成为可以被执行的可执行文件,而这个可执行文件会放置在目前所在的目录之下,尚未被安装到预定安装的目录下。
    ⑤.make install
    这条命令来进行最后的安装,make会依据Makefile这个文件里面关于install的选项,将之前所编译完成的数据安装到默认的目录中,就完成了安装。
    请特别注意,以上的步骤是一步一步来进行的,而其中只要一个步骤失败,那么后续的步骤就完全没法执行的。

九、Linux网络管理命令

1.网络命令

  • ifconfig 命令
  • 查看网络配置文件
    使用 vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet 网络类型(以太网) BOOTPROTO=static 网卡获取ip地址的方式a. dhcp自动获取ip地址b. none 固定的ip地址c. static 固定的ip地址 DEFROUTE=yes 启动默认路由
NAME=ens33 网卡设备的别名
DEVICE=ens33 网卡的名字
ONBOOT=yes 开机或重启网卡时是否启动网卡
IPADDR=192.168.1.10 IP
NETMASK=255.255.255.0 掩码
GATEWAY=192.168.1.2 网关
DNS1=8.8.8.8 DNS 域名解析器

  • 查看指定网络接口信息

  • 设置网络接口参数
  • hostname命令
    查看当前主机名
[root@RHEL8 ~]# hostname

修改当前主机名
修改主机名为zhangsan的两种方法:
①.用命令修改

   #hostnamectl set-hostname zhangsan  
   #su 切换状态(不用重启电脑更新)

②.在配置文件里修改

   vim /etc/hostname   
   zhangsan   
   reboot

centos7的主机名称配置文件:/etc/hostname
centos6的主机名称配置文件:/etc/sysconfig/network HOSTNAME=zhangsan

  • route命令
    用于查看路由表条目
    直接执行route命令可以查看到当前主机中的路由表信息
    linux系统中的路由表决定着从本主机向其他主机,其他网络发送数据的去向,是排除网络故障的关键信息

    'Destination列对应目标网段的地址’
    'Gateway列对应下一跳路由器地址’
    'Genmask列对应子网掩码’
    'Iface列对应发送数据的网络接口’
    ‘目标网段为default时,表示此行时默认网关记录’

  • 设置路由记录
    ①.添加和删除到指定网段的路由记录
    添加:route add -net 目标网段地址/掩码 gw IP网关
    例:
    route add -net 192.168.30.0/24 gw 192.168.30.1
    删除:route del -net 网段地址
    例:
    route del -net 192.168.30.0
    ②.添加和删除路由表中的默认网关记录
    route add default gw IP地址
    例:
    route add default gw 192.168.40.1
    route del default gw IP地址

    例:
    route del default gw 10.0.0.1

  • netstat命令
    查看网络连接情况、路由表,接口统计等信息
    netstat命令基本格式:
    netstat [选项]
    常用选项
    -a:显示当前主机中所有活动的网络连接信息(包括监听,非监听状态的服务端口)
    -n:以数字的形式显示相关的主机地址,端口等信息
    -p:显示与网络连接相关联的进程号,进程名称信息('该选项需要root权限’)
    -t:查看TCP协议相关信息
    -u:显示UDP协议相关的信息
    -r:显示路由信息
    -l:显示处于监听(listening)状态的网络连接及端口信息
    ①.通常使用“-antp”组合选项,以数字形式显示当前系统中所有的TCP连接信息,同时显示对应的进程信息
    ②.结合管道符号|使用“grep”命令,还可以在结果中过滤出所需要的特定记录

    ③.使用“-nuap”选项,以数字形式显示当前系统中所有的UCP连接信息,同时显示对应的进程信息

  • grep、sed、awk的区别?
    grep
    Linux 系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
    sed
    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为 “模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
    awk
    awk 是一个强大的文本分析工具,相对于 grep 的查找,sed 的编辑,awk 在其对数据分析并生成报告时,显得尤为强大。简单来说 awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
    awk 有 3 个不同版本: awk、nawk 和 gawk,未作特别说明,一般指 gawk,gawk 是 AWK 的 GNU 版本

  • 通配符(正则表达式):
    :匹配0个或者多个字符
    ?:匹配单个字符
    -:匹配区间段以内的字符,如[0-9];[a-z]
    实例:find / -name ssh
    (ssh?)
    重定向:
    (输出重定向), <(输入重定向,覆盖内容), >>(输入重定向,不覆盖内容,在原内容后面追加内容)
    echo(显示文字)
    echo 111 > 1.txt 将111输入到1.txt文件中,输出重定向
    cat < 1.txt 输入重定向
    echo 222 >> 1.txxt 追加输出重定向,将222追加到1.txt文件中,不会覆盖源文件。
    wc -l < /etc/passwd 显示passwd的中内容的行数

  1. 测试网络连接
    ping
    命令基本格式 ping [选项] 目标主机
    [root@RHEL8 ~]# ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=64 time=0.032 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=64 time=0.033 ms
    64 bytes from 8.8.8.8: icmp_seq=3 ttl=64 time=0.068 ms
    ^C
    — 8.8.8.8 ping statistics —
    7 packets transmitted, 7 received, 0% packet loss, time 150ms
    rtt min/avg/max/mdev = 0.032/0.058/0.089/0.024 ms
    ‘按Ctrl C 组合键终止ping测试’
  2. 修改网络配置文件
    网络接口配置文件
    #/etc/sysconfig/network-scripts/目录下
    文件名格式为“ifcfg-xxx” ifcfg-ens160:第一块以太网卡的配置文件
    #回环接口lo的配置文件是“ifcfg-lo”

十、Linux磁盘管理

  1. Linux 磁盘管理常用三个命令为 df、du 和 fdisk。
    df(英文全称:disk free): 列出文件系统的整体磁盘使用量
    du(英文全称:disk used): 检查磁盘空间使用量
    fdisk: 用于磁盘分区

  2. df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
    语法: df [-ahikhtm] [目录或文件名]
    选项与参数:
    -a : 列出所有的文件系统,包括系统特有的 /proc 等文件系统;
    -k : 以 KBytes 的容量显示各文件系统;
    -m : 以 MBytes 的容量显示各文件系统;
    -h : 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
    -H : 以 M=1000K 取代 M=1024K 的进位方式;
    -T : 显示文件系统类型
    ①.将系统内所有的文件系统列出来
    ②.将容量结果以易读的容量格式显示出来
    ③.将系统内的所有特殊文件格式及名称和文件类型都列出来

  3. du 语法:du [-ahskm] 文件或目录名称
    Linux du 命令也是查看当前目录、所有子目录大小(以KB为计数单位),但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看,而df是查看磁盘使用量的,还是和df命令有一些区别的,这里介绍 Linux du 命令。
    选项与参数:
    -a : 列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
    -h : 以人们较易读的容量格式 (G/M) 显示;
    -s : 列出总量而已,而不列出每个各别的目录占用容量;
    -S : 不包括子目录下的总计,与 -s 有点差别。
    -k : 以 KBytes 列出容量显示;
    -m : 以 MBytes 列出容量显示;
    ①.只列出当前目录下的所有目录容量(包括隐藏目录)
    ②.将文件的容量也列出来

  4. Fdisk 是 Linux 的磁盘分区表操作工具。
    选项与参数:
    -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
    ①.找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息 (partition分区)
    ②.其实我们常用的只有注有中文的,其它的功能我们不常用(呵,主要是我不会用,否则早会卖弄一下了);
    x扩展功能,也不是常用的;一般的情况下只要懂得 d l m p q t w 就行了;
    ③.离开Fdisk时按下q,那么所有的动作都不会生效!相反,按下w就是动作生效的意思
    想要不储存离开就按q就对了,不要随便按w!使用p可以列出目前这颗磁盘的分割表信息,这个信息的上半部在显示整体磁盘的状态
    ④.用户输入fdisk -l,可查看当前磁盘情况,用户会发现/dev/vdb,如用户没有发现该目录则表示用户的云主机当前没有数据盘,也就不需要执行后续的挂载操作
    ⑤.用户在命令窗口输入fdisk /dev/vdb,对数据盘进行分区,输入n回车新建分区,如图
    ⑥.输入p回车新建主分区,输入分区数目为1,点击回车确认进入分区信息配置页面
    ⑦.用户进行分区配置,输入分区起始地址,分区大小,用户可以进行输入也可以直接回车采取默认值。以下案例,起始大小采取默认,分区大小设置为2048KB
    ⑧.分区配置成功之后,用户输入p进行当前分区查看,可看到已经创建完的分区如下
    ⑨.输入wq,退出当前分区指令
    对盘符进行格式化,将其格式化为ext4文件系统,执行指令 #mkfs.ext4 /dev/vdb1。指令执行之后界面提示done信息,表示格式化执行完毕

  • 磁盘挂载到挂载点位置
    将硬盘mount到指定位置:执行指令#mount /dev/vdb1 /opt/tmp ,执行完成之后输入df -h查看分区,上面出现数据盘信息,说明当前挂载成功,用户可以使用该新分区了。
    mount /dev/sr0 /media/cdrom 挂载设备到cdrom挂载点上,挂载点目录必须存在并为空
    umount /media/cdrom 取消某个挂载设备点

十一、Linux日志管理

对运维人员来说,无论管理什么系统,对日志文件的监控、调用、管理都是其中重要的一部分。服务器问题的解决都是从查看系统(错误)日志开始的。本篇文章,我们就来了解一下Linux系统中的日志管理。

  1. 日志简介
    系统日志是记录系统硬件检查、内核动作、软件启动、用户动作等各项信息的文件。通过系统日志可以判断系统健康状态、检测系统问题、查找攻击证据等。
  • Linux系统中的日志服务
    较老得系统日志由syslog服务完成,较新得系统中由功能更强得rsyslog服务代替了syslog,但两者操作方法基本相同
    查看日志服务是否开启,使用systemtl命令查看并启动服务。
    ①.查看服务是否启动
    [root@server1 ~]# systemctl status rsyslog.service
    ②.若没有启动,则启动服务
    [root@server1 ~]# systemctl start rsyslog.service
  • 常见日志及其作用
    Linux得系统日志主要保存在/var/log目录中,各个主要文件及其作用下在下面列出
  • 日志管理服务 rsyslog 配置
    日志管理服务的配置格式
    rsyslog服务得配置文件为 #/etc/rsyslog.conf #配置文件格式:服务名称[连接符号]日志等级 日志记录位置
    服务名称为系统安装的服务的名称,多个服务名称如果使用同一等级,可用逗号分隔
    两个规则之间(主要用于排除情况),使用分号分隔,详见样例
    连接符号在下面给出,日志等级也在下面给出
    日志记录位置不只是文件绝对路径,有以下方式
  • 日志服务管理的主要服务名称
  • 日志服务配置文件的连接符
  • 日志等级
    日志等级从上到下依次变高
  1. 日志轮替
    如果从一开始的所有记录都记录在一个文件中,势必会造成读写变慢、占用增加,甚至增加由于单个文件损坏导致所有日志丢失的风险。为了解决这个问题,Linux系统采用日志轮替方式,将一段时间以前的记录切割打包到另外的存档文件中,而主日志文件从全新重新开始记录。
  • 日志文件的命名(轮替)规则
    如果配置文件中有"dateext"参数,那么日志会用日期来作为文件后缀,日志文件名不会重叠,就不会发生旧文件改名,当没有这个参数,日志文件会发生改名。当启用新的文件时例如messages,旧的文件会改为messages.1,原来的messages.1文件会变为messages.2,以此类推,过早的文件可能会被压缩,超过最大序号的旧文件会被删除。日志轮替的配置文件为/etc/logrotate.conf,同时具体信息也可以保存在/etc/logrotate.d目录中,在其中可以设置日志轮替信息,参数具体man logrotate查看帮助

十二、Linux vi及vim的使用

  1. 什么是 vim?
    Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
    简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
  2. vi/vim 的使用
    基本上 vi/vim 共分为三种模式,分别是命令模式,末行模式和编辑模式。
  3. 命令模式
    用户刚刚启动 vi/vim,便进入了命令模式。
    此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。在该模式下是不能对文件进行编辑,可以输入快捷键
    进行一些操作(删除行、复制行、移动光标、粘贴等等)
    剪切或删除:dd
    复制行:yy
    粘贴:p
    撤销:u

    移动光标:
    光标移动行首:shift + 6
    光标移动行尾:shift + 4
    光标移动到首行:gg
    光标移动到尾行:G

    末行模式:末行模式:可以在末行模式下输入命令来对文件进行操作(搜索、保存、退出、撤销、显示行号等等)
    保存:: w
    退出::q
    保存并退出::wq
    强制退出!::q!强制退出,刚才做的修改操作不做保存
    搜索/查找::/关键字
    显示行号::set nu
    编辑模式:
    进入方式:i 或者 a
    退出方式:按esc键

十三、Linux计划任务

linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。

  1. crond简介
    crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
    Linux下的任务调度分为两类,系统任务调度和用户任务调度。
    系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件
    (分 时 日 月 周 )个位数需要加*/分****
    在左边各个字段中,还可以使用以下特殊字符:
    星号(*):代表所有可能的值,例如month(月)字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 脚本赋权 Chmod 777 1.sh
    逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
    中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
    正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

  2. crontab命令参数:
    -e:编辑crontab文件内容
    -l:显示所有计划任务

  3. 现在让我们使用crontab -l命令列出它的全部信息:
    $ crontab -l
    #(crondave installed on Tue May 4 13:07:43 1999)
    #DT:ech the date to the console every 30 minites
    0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1 (每天的18点到6点每隔15分钟把时间写到/dev/tty1 )
    #DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

  4. 使用实例
    实例1:每1分钟执行一次command (分 时 日 月 周)
    命令:* * * * * command
    实例2:每小时的第3和第15分钟执行
    命令:3,15 * * * * command
    实例3:在上午8点到11点的第3和第15分钟执行
    命令:3,15 8-11 * * * command
    实例4:每隔两天的上午8点到11点的第3和第15分钟执行
    命令:3,15 8-11 */2 * * command
    实例5:每个星期一的上午8点到11点的第3和第15分钟执行命令:3,15 8-11 * * 1 command
    实例6:晚上11点到早上7点之间,每隔一小时重启smb
    命令:* 23-7/1 * * * /etc/init.d/smb restart
    实例7:每月的4号与每周一到周三的11点重启smb
    命令:0 11 4 * mon-wed /etc/init.d/smb restart
    实例8:一月一号的4点重启smb
    命令:0 4 1 jan * /etc/init.d/smb restart
    实例9:每小时执行/etc/cron.hourly目录内的脚本
    命令:01 * * * * root run-parts /etc/cron.hourly
    说明:root 表示用root身份去执行脚本
    run-parts 表示执行目录下的所有的shell脚本
    如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

十四、Linux防火墙配置

iptables的前身叫ipfirewall,这是一个作者从FreeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具,虽然现在新版系统中早已不在使用Iptables了,但时至今日其还具有顽强的生命力.
查询规则:使用-L 参数查看防火墙默认配置规则
[root@RHEL8 ~]# iptables -L
[root@RHEL8 ~]# iptables –F #清空规则
[root@RHEL8 ~]# iptables –D #指定删除

  1. iptables常用参数

-P(大写):设置默认规则
-F:清空规则链
-L:查看规则链
-A:在规则连末尾加入新规则
-I(大写i):在规则链头部加入新规则
-D num:删除某一条规则
-j:匹配相对应的动作
-s:匹配来源地址IP/MASK,加" ! "表示除这个IP外
-d:匹配目标地址
-i:网卡名称:匹配从这块网卡流入的数据
-o:网卡名称:匹配从这块网卡流出的数据
-p:匹配协议,如TCP、UDP、ICMP
–dport num:匹配目标端口号
–sport num:匹配来源端口号

raw表提供的功能很简单:提供且仅提供一个让数据包绕过连接跟踪的框架。
mangle表提供修改数据包IP头部的功能,例如,修改数据包的TTL等。
nat表顾名思义是用来做网络地址转换的。
filter表是iptables中最常用的表,用来判断一个数据包是否可以通过。
table有优先级:由高到低排列为:raw -> mangle -> nat -> filter


  • 设置默认拒绝:设置默认拒绝规则,把INPUT链设置为默认拒绝,也就是拒绝所有连接请求
    [root@RHEL8 ~]# iptables -P INPUT DROP
    [root@RHEL8 ~]# iptables -L -n --line-numbers 数字形式显示规则并在每个规则的前面加上行号
  • 开启ICMP:在默认规则拒绝的情况下,设置开启ICMP测试,允许ping通
    [root@RHEL8 ~]# iptables -I INPUT -p icmp -j ACCEPT
    [root@RHEL8 ~]# iptables -L -n --line-numbers
  • 允许SSH连接:在默认拒绝的情况下,设置开启22端口,允许远程ssh连接到本机
    [root@RHEL8 ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT(允许)
    [root@RHEL8 ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT(允许)
  • 删除制动规则:在默认拒绝的情况下,删除INPUT链,第2条数据,删除ICMP规则
    [root@RHEL8 ~]# iptables -L -n --line-numbers
    [root@RHEL8 ~]# iptables -D INPUT 2
    [root@RHEL8 ~]# iptables -L -n --line-numbers
  • 指定允许网段访问:在默认况下,设置只允许192.168.1.0/24网段的主机访问本机的22号端口
    [root@RHEL8 ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
    [root@RHEL8 ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
    [root@RHEL8 ~]# iptables -L -n --line-numbers
  • 拒绝访问指定端口:在INPUT规则链中,添加拒绝所有人访问本机的8888号端口
    [root@RHEL8 ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT(拒绝)
    [root@RHEL8 ~]# iptables -L -n --line-numbers
  • 在INPUT规则链中,添加拒绝192.168.1.20 主机访问本机的80端口
    [root@RHEL8 ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT(拒绝)
    [root@RHEL8 ~]# iptables -L -n --line-numbers
  • 拒绝访问指定端口范围:在INPUT规则链中,添加拒绝所有主机访问本机1000-2000端口
    [root@RHEL8 ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT
    [root@RHEL8 ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT
    [root@RHEL8 ~]# iptables -L -n --line-numbers
  1. Linux系统关闭防火墙
    方法一:使用iptables命令手动关闭防火墙
    iptables是Linux系统中的一种防火墙服务,您可以使用iptables命令手动关闭该服务。
    首先,您需要打开终端并以root用户身份登录。打开终端的方式通常是按下Ctrl + Alt + T。
    然后,使用以下命令停止iptables服务。
    sudo service iptables stop

    接下来,您可以使用以下命令来检查是否已成功停止iptables服务。
    sudo iptables -L
    如果iptables没有任何规则,则服务已成功关闭。
    方法二:使用systemctl命令关闭防火墙
    另一种关闭Linux防火墙服务的方法是使用systemctl命令。
    首先,您需要打开终端并以root用户身份登录。
    然后,使用以下命令停止firewalld服务,并禁用防火墙服务。
    sudo systemctl stop firewalld
    sudo systemctl disable firewalld
    接下来,您可以使用以下命令来检查是否已成功停止防火墙服务。
    sudo systemctl status firewalld

十五、Linux配置ssh

  1. 配置SSH登录
  • 查看ssh配置
cat /etc/ssh/sshd_config 
  • 安装SSH
sudo apt-get install ssh #ubuntu,debian 
or 
yum -y install openssh #centos,redhat 
  • 启动服务
service sshd start 
or 
/etc/init.d/sshd start or sudo systemctl restart sshd
  • 查看ssh服务的状态输入以下命令:
sudo service sshd status

步骤:
ssh服务配置文件位置:/etc/ssh/sshd_config
①.修改配置:PasswordAuthentication yes(是否使用公钥验证),PermitRootLogin yes(允许使用root登录)如果配置成‘no’的话,在输入root密码后会显示拒绝密码。
②.启动SSH服务
Service sshd start/stop/status
安装SSH:yum install ssh
启动SSH:service sshd start
重启SSH:service sshd restart
设置开机运行:chkconfig sshd on

③.在电脑终端输入

ssh root@1.1.1.1

(输入服务器密码)

  1. 配置ssh免密码登录
  • 执行命令ssh-keygen -t rsa,生成公钥和私钥(具体步骤详见下图)
  • 修改sshd 服务的配置文件 /etc/ssh/sshd_config开启 Pubkey 认证 PubkeyAuthentication yes
  • 会在当前用户的家目录的.ssh/生成公钥和私钥,私钥 (id_rsa) 与公钥 (id_rsa.pub)
  • 执行ssh-copy-id -i 将公钥文件传输给远程的主机,输入远程主机对应的密码。
  • 命令如下:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.20

  • 此时在执行登录远程主机 ssh root@192.168.1.20,不会再输入密码:(把公钥传输到主机之后,我可以拿我这边的私钥直接验证主机上的公钥,所以不用输入密码)(公钥传输到主机时需要输入一次主机密码)

十六、Linux安全加固

  1. 账户与环境
  • 设置密码策略
    Linux 操作系统的密码设置应满足公司强密码策略的要求,可以修改密码策略的最长使用期限、密码最小长度等参数。 密码策略修改以后,需要重新启动系统,并使用 passwd 命令重新设置强密码。
    方法:

[root@localhost]#vi /etc/login.defs
#打开 login.defs 文件后,修改如下参数值: PASS_MAX_DAYS 90 #密码最长保留期限 90 天 PASS_MIN_DAYS 0 #密码最短保留期限 0 天 PASS_MIN_LEN 8 #密码最小 8 个字符 PASS_WARN_AGE7 #密码到期前 7 天提醒

  • 设置屏幕保护程序
    员⼯离开座位时,如果忘记锁定帐户,将会带来很大的安全隐患,应设置屏幕保护程序开启时长,使系统自动锁定。
    设置方法:
    [root@localhost /]#vi /etc/profile
    编辑profile文件,在“HISTSIZE”一行的后面增加一行:TMOUT=300。数字300 表示 300 秒,如果系统中登录的用户在 300 秒内没有任何操作,系统将⾃动注销,从而实现帐户保护。

  • 删除无用的特殊帐户
    在 Linux 操作系统安装后,系统会自动增加多个特殊帐户,员工应根据业务需要,删除所有无用的帐户 (例如:lp,sync、shutdown、halt、news、uucp、operator、games、gopher 等)。 以下以删除 CentOS 5.4 的缺省用户举例,缺省用户在不同版本中会略有不同。
    设置方法: 在终端中输⼊如下命令删掉相应帐户(/etc/passwd):

  1. 帐户及密码文件
    Linux 操作系统将帐户存放在/etc/passwd 文件中,密码以加密的形式存放在 /etc/shadow 文件中,通过设置这两个文件的属性,可以防止他人使用口令破解⼯具得到密码,但此项设置将会影响到帐户增加、删除、修改及密码修改等操作。
    设置方法:
    使用 chattr 命令设置文件属性:
    [root@localhost /]#chattr +i /etc/passwd
    [root@localhost /]#chattr +i /etc/shadow

    使用 lsattr 命令查看文件属性 :
    [root@localhost /]#lsattr /etc/passwd
    [root@localhost /]#lsattr /etc/shadow

  2. /etc/services 文件
    /etc/services 文件保存了服务的相关信息,对/etc/services 文件进行权限控制,可以有效防止未经许可的添加、删除或修改服务操作。
    设置方法:
    [root@localhost /]#chattr +i /etc/services
    当安装或删除系统服务时,需要使用 root 帐户取消权限控制:
    [root@localhost /]#chattr -i /etc/services
    使用 lsattr 命令可以查看文件属性:
    [root@localhost /]#lsattr /etc/ services

  3. /etc/rc.d/init.d 下 script 文件
    /etc/rc.d/init.d 目录下存储的是操作系统启动后自动运行的脚本文件。进行此项设置后,只有 root 用户对该目录拥有 Read、Write、Execute 脚本文件的权限。
    设置方法:
    [root@localhost /]#chmod –R 700 /etc/rc.d/init.d/*

  4. 禁止root用户远程登录
    使用root 权限远程登录,会使计算机终端⾯临被攻击的风险。远程执行root权限操作时,必须以普通权限用户登录后,再切换到 root 权限。
    方法:
    [root@localhost /]#vi /etc/ssh/sshd_config
    将 PermitRootLogin yes 改为 PermitRootLogin no
    修改后,需要重新启动 sshd 服务:
    [root@localhost /]#service sshd restart

  5. 修改SSH端口
    修改SSH端口,可以防止他人利用黑客工具扫描存活主机,从而降低被攻击的风险。
    设置方法:
    [root@localhost /]#vi /etc/ssh/sshd_config
    修改port22为其它端口,例如将SSH的端口改为222。
    保存修改后,需要重新启动sshd服务
    [root@localhost /]#service sshd restart
    注:setenforce 0

  6. 隐藏系统信息
    在试图远程登录到 Linux 操作系统时,缺省会显示该操作系统的版本、内核、计算机名称等信息。删除这些系统提示信息,可以确保他人无法直接获取计算机相关信息,降低被攻击的风险。
    设置方法:
    编辑/etc/rc.d/rc.local ⽂件,通过在所有输出信息的命令行前加#进行注释。

  7. 查看目前系统已开启的端口
    [root]# netstat -ln
    查看端口对应的服务:
    [root]# lsof –i:端⼝号 获取任何被打开文件的各种信息
    执行ntsysv命令,按空格键去掉不需要的系统服务前的“*”号并『确定』。

  8. 设置时钟同步
    设置时钟同步(NTP)可以使公司所有计算机终端的系统时间保持⼀致,从而准确记录系统操作时间, 并实现对事件的回溯。NTP 的设置文件是/etc/ntp.conf。
    方法:
    #vi /etc/ntp.conf
    增加⼀行:server time.neusoft
    文件保存后,启动 NTP 服务,并且设置其在开机后自动运行:
    #service ntpd start
    #chkconfig --level 35 ntpd on

  9. 设置计算机名

  • 设置规范的计算机终端名称,方便管理员借助计算机名称来识别计算机。
    方法:
    ①.以根⽤户登录,或者登录后切换到根用户,然后在提示符下输入hostname命令, 可以看出当前系统的主机名为 localhost.localdomain。
    2.更改/etc/sysconfig下的network文件,在提示符下输入vim/etc/sysconfig/network, 然后将HOSTNAME后面的值改为想要设置的主机名。
    3.更改/etc下的hosts文件,在提示符下输入vim/etc/hosts,然后将localhost.localdomain改为想要设置的主机名。
    4.在提示符下输入reboot命令,重新启动服务器。
  1. 日志文件开启设置
    通过查看/etc/syslog.conf文件(部分 Linux 版本为/etc/rsyslog.conf)中是否存在 authpriv.*参数确认计算机是否已经开启日志。
    设置方法:
    [root@localhost /]#cat syslog.conf
    查看 authpriv.*参数,如果不存在或被注释,则增加该参数。
    增加参数后对日志文件“/var/log/secure”进行授权:
    ①.将文件的创建时间修改为当前时间
    [root@localhost /]#touch /var/log/secure
    ②.将日志文件的用户属性设置为root
    [root@localhost /]#chown root:root /var/log/secure
    ③.修改日志文件的使用权限
    [root@localhost /]#chmod 600 /var/log/secure

十七、Linux Shell命令

  1. 基础概念
    说起Shell语言,其实很多人习惯的叫法是叫做Shell脚本。或许你在还没学习之前就听说过,Shell脚本、Shell语言、等等名词。但是它们到底是什么,它们之间有什么区别?下面我就逐个来解答一下。
  • Shell
    我们知道对于所有计算机设备来说,它们都是由 CPU、内存、硬盘等硬件做成的。但是单单有这些硬件,我们还没办法使用,因为我们不知道怎么和这些冷冰冰的硬件沟通。
    为了让这些硬件听懂我们的话,计算机的先辈们费尽了九牛二虎之力,写了一个程序来把我们的话翻译给机器听。这个翻译程序shell,只要你输入具体的命令,它就会把它翻译给机器听,这样你就可以和机器沟通了。例如,我们输入ifconfig可以查看IP地址,翻译程序就会将这条命令翻译给硬件,告诉它我们要查看IP地址。其实这里的翻译程序就是Shell,而具体的命令就是Linux命令。
    简单地说,Shell 就是一套位于硬件和用户之间的程序语言,我们一般称之为命令解释器。
  • Shell语言
    有了Shell这个命令解释器,硬件就能听懂我们输入的命令了。但当我们要做一些复杂的逻辑操作时,例如筛选出占用 CPU最高的进程ID。这时候就不仅仅只是一个命令那么简单了,我们需要进行逻辑判断等一系列操作。
    所以说Shell语言就是一系列语言规范的集合,只要你按照这些规范将你的Linux命令组合起来,那么Shell就可以正确解析出你的意图。
    简单地说,Shell语言其实就是一系列的语法规范。
  • Shell脚本
    简单地说,由Linux命令和Shell语言规范组成而成的一系列字符,我们就称之为Shell脚本。
  1. 文件结构
    一个Shell脚本都以.sh为文件名后缀,并且其文件结构都有一定的特点。一个标准的Shell脚本组成结构如下:
    ①.文件标识。第一行的#!是一个特殊标记,标识该 Shell 脚本将使用/bin/bash这个Shell对这个文件内容进行解析。
    ②.文件注释。这部分是对这个文件业务逻辑的注释,一个好的注释可以让别人一眼看懂该文件的目的。
    ③.Shell代码。这部分就是具体的业务代码了。
    在注释部分,建议分为两个部分:
    顶层注释。顶层注释主要是对其内容进行简要概述。版权声明和作者信息是可选的。例如:
    功能注释。其他人通过阅读注释就能够学会如何使用你的程序或库函数,而不需要阅读代码。例如:
    综合以上的建议,整理了一个 Shell 脚本的文件结构范例。下次你要写 Shell 脚本的时候可以直接拷贝过去,修改相关注释以及函数名就可以,即规范又简便。
  2. 运行shell脚本
    运行 Shell 脚本有两种方式,一种是通过 bash 命令,一种是作为可执行程序执行。
    我们写了下面这样一个 Shell 脚本,并将其保存为hello.sh:
    如果我们用bash命令运行,那么是这样的:bash hello.sh。
    运行后会输出:Hello Shell。
    如果想用可执行程序方式运行,那么需要先修改文件的权限,使其具有执行权限,之后再执行脚本。
    同样地,运行后会输出:Hello Shell。
  3. 如何标记语句的结束
    在Shell中标记语句的结束有两种方式:分号和换行。
    例如下面的Shell脚本:
    也可以写成:
    即上面将if表达式后面的分号换成换行符了。但是不推荐这种写法,因为这样不利于阅读。因为最好的阅读方式就是if 和fi对齐,中间是执行的语句,就像上面一开始的例子一样。
  4. 变量的使用
    因为Shell语言是一门弱语言类型,所以变量可以无须定义便可直接使用。在Shell语言中,引用变量有几种方式。
str="Hello" 
echo $str //Hello

第二种,使用 ${} 符号引用

str="Hello" 
echo ${str} //Hello

一般来说,如果不会引起变量的阅读困难,那么可以使用第一种变量引用方式。但如果在较为复杂的环境,会引起阅读和理解困难,那还是使用第二种引用方式。例如:

#!/bin/sh 
echo "What is your name?" 
read USER_NAME 
echo "Hello $USER_NAME" 
echo "I have create an email $USER_NAME@gmail for you"

上面的例子非常简单,输入你的名字,为你创建一个邮箱。虽然上面的例子能正常运行,但是却不易阅读。特别最后一行,你需要很仔细端详,才知道原来是引用了

$USER_NAME

这个变量,而不是引用了

$USER_NAME@gmail

这个变量。在这种情况下,使用花括号来引用变量是更为合适的:

#!/bin/bash 
echo "What is your name?" 
read USER_NAME (read命令是从标准输入中读取数据并赋值给变量)
echo "Hello $USER_NAME" 
echo "I have create an email ${USER_NAME}@gmail for you"

虽然说我们可以加上大括号,或者不加,但是业界统一的规范还是加上大括号。因为这样比较统一,便于阅读。因此树义也建议大家使用第二种方式,即使用加上大括号的方式。

  1. 如何打印字符串
    在Shell脚本中,我们可以使用echo命令来打印字符串。
  • echo命令
    在Shell语言中,一般使用echo命令来打印字符串。而echo命令后面跟着的字符串有好几种形式:裸奔、单引号、双引号。
    ①.裸奔
    所谓裸奔就是后面什么引用符号都不用加,直接写上要输出的字符串。
    这种方式会直接输出echo命令后的所有字符,例如上面会输出:Hello, My Name is chenshuyi!。但这种方式有个缺陷,就是无法输出分号“;”。因为当读到分号的时候,程序会认为这一行代码结束了。

    上面的命令的输出结果是:可以看到程序只输出了Hello,并把后面的I当成了一个命令。
    ②.单引号的引用方式
    ③.双引号的引用方式

    7.如何进行数学运算
    注意:点是键盘数字1旁边的着重符号,Expr命令可以实现数值运算
    注意:Let命令也可以实现数值运算 ,但是计算速度要远高于Expr。

数学表达式:
-eq-------------等于
-ne-------------不等于
-gt--------------大于
-ge-------------大于等于
-lt---------------小于
-le--------------小于等于
-a && ---------与
-o || -----------或
!----------------非

  1. 条件结构if、elif、then、else

    $1接收输入的第一个数据
    $2接收输入的第二个数据

  2. 循环

  • while循环
  • for循环

  1. 函数

十八、Linux Docker安装

  1. docker简介
    Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。
    Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。
    Docker的应用场景
    Web 应用的自动化打包和发布。
    自动化测试和持续集成、发布。
    在服务型环境中部署和调整数据库或其他的后台应用。
    从头编译或者扩展现有的OpenShift或CloudFoundry平台来搭建自己的PaaS环境。

  2. docker架构
    镜像(Image): Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统。
    容器(Container): 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    仓库(Repository): 仓库可看成一个代码控制中心,用来保存镜像。
    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
    Docker容器通过Docker镜像来创建。

  3. docker安装

  • 以kali为例
sudo apt-get install docker-io -y
  • 获取管理员权限
sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps  #测试是否正常

阿里云镜像加速器:阿里云镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://yfs3wlfj.mirror.aliyuncs"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. docker容器使用
docker  #查看所有命令选项
docker stats --help   #查看具体指令的使用方法
docker search xxxx  #查询镜像名称
dcoker pull  ubuntu  #获取镜像
docker run -it ubuntu /bin/bash   #启动一个容器
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
exit 退出终端
docker ps # 查看运行的容器
docker ps -a  #查看所有容器
docker run -itd --name ubuntu-test ubuntu /bin/bash
-d 参数 后台运行
默认不会进入容器,想要进入容器需要使用指令 docker exec
docker start <容器 id>  #启动一个已经停止的容器
docker stop <容器 id>  #停止容器
docker restart <容器 id>  #重启容器
docker exec  -it <容器id ># 交互式终端进入容器
docker rm -f <容器id> #删除未停止的容器
  1. docker镜像使用
docker images  #列出本地主机上的镜像
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
docker rmi [image id]   #镜像删除
docker inspect <镜像名称> #查看镜像信息
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
docker tag 860c279d2fec runoob/centos:dev  #镜像添加一个新的标签。
  1. docker容器连接
  • docker容器互联

docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

  • 容器命名
 docker run -d -P --name runoob training/webapp python app.py # --name 标识来命名容器
  • 新建网络
docker network create -d bridge test-net #-d:参数指定 Docker 网络类型,有 bridge、overlay。
  • 连接容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
  • docker 容器互联
docker exec  -it test1 /bin/bash  #进入test1
apt-get  update  #更新一下
apt-get install iputils-ping #安装ping
ping test2 #测试

- docker 容器运行步骤
①.service docker start #启动docker服务
②.docker pull 【镜像名字】# 安装指定镜像
③.docker run -d -p [本机端口]:[容器端口] --name 【镜像别名】【镜像名称】#后台启动镜像
④.docker exec -it 【镜像别名或者ID】/bin/bash #进入容器
⑤.exit或者control+p+q #退出容器
⑥.docker stop 【镜像别名或者ID】#停止容器

  • 更多内容
    docker的更多内容,请参照文档学习哦!!!docker

十九、Linux安装MySQL

  1. 在安装Mysql之前,需要知晓以下内容
    系统准备: 需要一台Linux服务器,并提前保证系统中安装了必要的组件,如gcc、make等。
    将安装包下载到本地: Mysql官方提供多个版本的安装包,可根据实际需求选择合适的版本。
    安装方式: Mysql的安装方式比较多,包括二进制包安装、yum安装、源码编译安装等方式,这里介绍源码编译安装。

  2. 下载Mysql安装包
    在官方网站上下载适用于Linux的Mysql安装包,将其解压到本地。

  3. 安装依赖包
    在Linux系统中安装Mysql前需要安装以下软件依赖包:

  4. 安装Mysql

  5. 配置Mysql

  6. 设置新密码

  7. 修改Mysql配置文件
    在/etc目录中找到myf文件,通过vi等编辑工具进行修改。以下是一个样例配置,你可以将其复制到myf文件里。

  8. 重启Mysql服务

二十、Linux安装pikachu

  1. 环境准备
    pikachu:pikachu
    Nginx: Nginx
    PHP:添加链接描述

  2. 将下载好的pikachu安装包解压后放到nginx的HTML目录下

  3. 浏览器访问:http://192.168.152.129:8888/pikachu-master/

  4. 创建pikachu数据库

  5. 修改pikachu配置文件config.inc.php正确信息

  6. 使用浏览器访问http://192.168.152.129:8888/pikachu-master/,显示如下界面表示搭建成功

二十一、Linux安装DVWA

  1. 环境准备
    Nginx: Nginx
    Mysql: Mysql
    PHP: PHP
    DVWA: DVWA

  2. 将下载好的pikachu安装包解压后放到nginx的HTML目录下

  3. 创建名为DVWA的数据库

  4. 修改DVWA的配置文件
    /usr/local/nginx/html/DVWA-master/config/config.inc.php,如下图所示

  5. 重新启动nginx服务,之后再浏览器中输入服务器DVWA地址回车就会打开DVWA网站,跳转到登录界面

  6. DVWA默认账户名:admin,默认密码:password。登录之后可以看到它包含了很多类型漏洞练习环境,这时候我们的靶场就搭建成功了

二十二、小结

本章详细的介绍了Linux操作系统下的基础知识,包括:Linux Shell的基础命令、Linux磁盘管理、Linux防火墙配置、Linux下的靶场搭建等,下一章,会给大家详细介绍编程技术(Mysql数据库、html,css,javascript、Python)的基础知识,敬请期待吧~~~

本文标签: 网络安全跟我一起Linux