Linux 之日常必备技能

Linux

文章目录

  • Linux
  • 1.Linux 内容简介
    • 1.1 Linux 入门介绍
    • 1.2 Linux 学习方向
    • 1.3 Linux 应用领域
    • 1.4 Linux 学习阶段和方法
  • 2.Linux 基础
    • 2.1 Linux 的介绍
    • 2.2 Linux 与 Unix 的历史关系
    • 2.3 安装 Vmware 和 CentOS
      • 2.3.1 基本说明
        • 2.3.1.1 安装顺序
        • 2.3.1.2 下载与安装说明
        • 2.3.1.3 进入 BIOS 的快捷键
        • 2.3.1.4 开启虚拟化技术
      • 2.3.2 下载地址
      • 2.3.3 安装与设置 Vmware
        • 2.3.3.1 安装 VMware
        • 2.3.3.2 设置 Vmware
      • 2.3.4 安装 CentOS 8
        • 2.3.4.1 安装虚拟机
          • 2.3.4.1.1 创建虚拟机
          • 2.3.4.1.2 选择创建虚拟机的方式
          • 2.3.4.1.3 选择客户机操作系统
          • 2.3.4.1.4 自定义虚拟机名称和路径
          • 2.3.4.1.5 给虚拟机分配磁盘容量
          • 2.3.4.1.6 硬件设置
          • 2.3.4.1.7 给虚拟机内存、处理器
          • 2.3.4.1.8 指定 ISO 镜像文件
          • 2.3.4.1.9 指定网络连接模式
        • 2.3.4.2 开启虚拟机
          • 2.3.4.2.1 开启虚拟机
          • 2.3.4.2.2 开启中若有报错提示
          • 2.3.4.2.3 解决方法
        • 2.3.4.3 安装 CentOS 8
          • 2.3.4.3.1 Install CentOS Linux 8
          • 2.3.4.3.2 检查镜像文件
          • 2.3.4.3.3 选择安装系统的语言
          • 2.3.4.3.4 指定时区
          • 2.3.4.3.5 自定义是否需要安装哪些软件
          • 2.3.4.3.6 选择自定义分区或自动分区的方式
          • 2.3.4.3.7 自定义主机名和网络设置
          • 2.3.4.3.8 设置 root 根密码
          • 2.3.4.3.9 确认设置并开始安装
          • 2.3.4.3.10 安装完成并重启
          • 2.3.4.3.11 完成安装
            • 2.3.4.3.11.1 最小安装服务器版
            • 2.3.4.3.11.2 桌面版服务器
      • 2.3.5 CentOS 8 配置静态 IP
    • 2.4 CentOS 7 和 CentOS 8 的一些区别
      • 2.4.1 默认的文件系统
      • 2.4.2 内核版本
      • 2.4.3 内核代码名字
      • 2.4.4 标准/默认的仓库频道
      • 2.4.5 支持最大的文件
      • 2.4.6 软件包管理
      • 2.4.7 最大支持的内存
      • 2.4.8 默认的网络数据包过滤
      • 2.4.9 默认的数据库
      • 2.4.10 支持的硬件架构
      • 2.4.11 可供安装的 ISO 镜像类型
      • 2.4.12 默认情况下的Cockpit web控制台的安装状态
      • 2.4.13 默认虚拟机管理
      • 2.4.14 RMP版本的改进
      • 2.4.15 CUPS日志
      • 2.4.16 默认版本的控制系统
      • 2.4.17 编程语言版本
      • 2.4.18 关于容器技术的支持
      • 2.4.19 开发工具支持
      • 2.4.20 NFS配置对比
      • 2.4.21 默认的显示服务器
      • 2.4.22 网络管理
      • 2.4.23 yum 与 dnf
      • 2.4.24 防火墙
      • 2.4.25 网络时间同步
      • 2.4.26 docker 与 podman
    • 2.5 CentOS 8 的新特性
      • 2.5.1 elevator内核命令行参数被废弃
      • 2.5.2 网络脚本被废弃
      • 2.5.3 新内核支持5级paging
      • 2.5.4 Anaconda支持CentOS 8 中的系统目标
      • 2.5.5 CodeReady Linux构建器仓库
      • 2.5.6 改进版本的OpenSSH
      • 2.5.7 RHEL8中不支持数字用户名和组名
      • 2.5.8 默认情况下,securetty现在是禁用的
      • 2.5.9 改进的TCP网络栈
      • 2.5.10 高可用性(HA)
      • 2.5.11 lvmlockd取代了clvmd
    • 2.6 安装 Vmware Tools
    • 2.7 设置共享文件夹
    • 2.8 Linux 目录结构
  • 3.Linux 操作
    • 3.1 Linux 远程登录
    • 3.2 远程上传下载文件
    • 3.3 vi 和 vim 编辑器
      • 3.3.1 vi 和 vim 简介
      • 3.3.2 vi 与 vim 的常用三种模式
        • 3.3.2.1 正常模式
        • 3.3.2.2 插入模式
        • 3.3.2.3 命令行模式
        • 3.3.2.4 vi 和 vim 模式的相互切换
        • 3.3.2.5 vi 和 vim 键盘图
    • 3.4 关机与重启
    • 3.5 用户登录与注销
    • 3.6 用户管理
      • 3.6.1 添加用户
      • 3.6.2 指定密码给用户
      • 3.6.3 删除用户
      • 3.6.4 查询用户信息
      • 3.6.5 切换用户
      • 3.6.6 查看当前登录用户
      • 3.6.7 用户组
        • 3.6.7.1 添加组
        • 3.6.7.2 删除组
        • 3.6.7.3 修改组
      • 3.6.8 用户和组的相关文件
        • 3.6.8.1 /etc/passwd 用户配置文件
        • 3.6.8.2 /etc/shadow 口令置文件
        • 3.6.8.3 /etc/group 组配置文件
    • 3.7 常用命令
      • 3.7.1 指定运行级别
        • 3.7.1.1 基本介绍
        • 3.7.1.2 小结
          • 3.7.1.2.1 CentOS 6.x 版本
          • 3.7.1.2.2 CentOS 7.x/8.x 版本
        • 3.7.1.3 找回 root 密码
          • 3.7.1.3.1 CentOS 6.x 找回 root 密码
          • 3.7.1.3.2 CentOS 7.x/8.x 找回 root 密码
      • 3.7.2 帮助命令
        • 3.7.2.1 man 获取帮助文档
        • 3.7.2.2 help 获取 shell 内置命令的帮助信息
        • 3.7.2.3 通过搜索引擎获取帮助
      • 3.7.3 文件目录类
        • 3.7.3.1 pwd 显示当前工作目录的绝对路径
        • 3.7.3.2 ls 列出当前目录的文件和目录
        • 3.7.3.3 cd 切换到指定目录/路径
        • 3.7.3.4 mkdir 创建目录
        • 3.7.3.5 rmdir 删除空目录
        • 3.7.3.6 touch 创建空文件
        • 3.7.3.7 cp 拷贝文件或目录到指定目录
        • 3.7.3.8 rm 移除文件或目录
        • 3.7.3.9 mv 移动或重命名文件与目录
        • 3.7.3.10 cat 查看文件内容
        • 3.7.3.11 more 全屏分页显示文件内容
        • 3.7.3.12 lsss 分屏查看文件内容
        • 3.7.3.13 > 输出重定向 和 >> 追加
        • 3.7.3.14 echo 输出内容到控制台
        • 3.7.3.15 head 显示文件头部内容
        • 3.7.3.16 tail 显示文件尾部内容
        • 3.7.3.17 ln 创建软连接
        • 3.7.3.18 history 查看已执行过的历史命令
      • 3.7.4 时间日期类
        • 3.7.4.1 date 显示和设置当前日期
          • 3.7.4.1.1 CentOS 7 设置系统时间与网络时间同步
          • 3.7.4.1.2 CentOS 8 设置系统时间与网络时间同步
        • 3.7.4.2 cal 查看当前日历
      • 3.7.5 搜索查找类
        • 3.7.5.1 find 查找指定文件或目录
        • 3.7.5.2 locate 快速定位文件路径
        • 3.7.5.3 grep 过滤查找和管道符 |
      • 3.7.6 压缩和解压类
        • 3.7.6.1 gzip 和 gunzip 解压缩文件
        • 3.7.6.2 zip 和 unzip 解压缩文件
        • 3.7.6.3 tar 打包或解压缩
    • 3.8 常用安装工具
    • 3.9 组管理与权限管理
      • 3.9.1 组的基本介绍
      • 3.9.2 文件或目录所有者
      • 3.9.3 文件或目录所在组
      • 3.9.4 文件或目录的其它组
      • 3.9.5 文件或目录的权限
      • 3.9.6 chmod 修改文件或目录的权限
        • 3.9.6.1 方式 ①:使用 + 、-、= 变更权限
        • 3.9.6.2 方式 ②:通过数字变更权限
      • 3.9.7 chown 修改文件或目录所有者及所在组
      • 3.9.8 chgrp 修改文件或目录的所在组
    • 3.10 定时任务调度
      • 3.10.1 crond 任务调度(守护进程)
    • 3.11 磁盘分区与挂载
      • 3.11.1 分区的方式
        • 3.11.1.1 MBR 分区
        • 3.11.1.2 GTP 分区
        • 3.11.1.3 windows 下的磁盘分区
        • 3.11.1.4 Linux 的分区
          • 3.11.1.4.1 原理简介
          • 3.11.1.4.2 磁盘说明
          • 3.11.1.4.3 挂载的经典案例
    • 3.12 查询磁盘使用情况
      • 3.12.1 查询系统整体磁盘使用情况
      • 3.12.2 查询指定目录的磁盘占用情况
      • 3.12.3 磁盘情况之工作实用指令
    • 3.13 网络配置
      • 3.13.1 Linux 网络配置原理图
      • 3.13.2 查看网络 IP 和网关
        • 3.13.2.1 修改 IP 地址
        • 3.13.2.2 查看网关
        • 3.13.2.3 查看 windows 中 VMnet8 的网络配置
          • 3.13.2.3.1 方式①:命令行查看
          • 3.13.2.3.2 方式②:图形化界面查看
        • 3.13.2.4 ping 测试主机之间网络连通性
      • 3.13.3 Linux 网络环境配置
        • 3.13.3.1 方法①:自动获取
        • 3.13.3.2 方法②:配置静态 IP(指定固定 IP)
        • 3.13.3.3 ifcfg-xxx 网卡配置文件参数详解
    • 3.14 进程管理
      • 3.14.1 进程基本介绍
      • 3.14.2 ps 显示系统执行的进程
      • 3.14.3 kill 或 kill all 终止进程
      • 3.14.4 pstree 查看进程树
    • 3.15 服务管理
      • 3.15.1 服务基本介绍
      • 3.15.2 service 管理指令
      • 3.15.3 firewalld 查看与配置防火墙
      • 3.15.4 windows cmd 窗口查看某个 Linux 端口是否在监听
      • 3.15.5 查看服务名
        • 3.15.5.1 方式① setup 查看系统服务
        • 3.15.5.2 方式② ll /etc/init.d/ 查看系统服务
      • 3.15.6 服务的运行级别【runlevel】
      • 3.15.7 chkconfig 给每个服务的各个运行级别设置自启动或关闭
    • 3.16 进程监控
      • 3.16.1 top 实时动态监控进程
      • 3.16.2 netstat 监控网络状态
      • 3.16.3 ping 检测主机网络连接是否正常
    • 3.17 RPM 与 YUM 软件包的管理
      • 3.17.1 RPM 包的管理
        • 3.17.1.1 RPM 包简介
        • 3.17.1.2 RPM 包查询
        • 3.17.1.3 RPM 包卸载
        • 3.17.1.4 RPM 包安装
      • 3.17.2 YUM 包的管理
        • 3.17.2.1 YUM 包简介
  • 4.Linux 拓展
    • 4.1 搭建 JavaEE 环境
      • 4.1.1 安装 JDK 17
        • 4.1.1.1 安装步骤
        • 4.1.1.2 测试是否安装成功
      • 4.1.2 安装 Tomcat 10
        • 4.1.2.1 安装步骤
        • 4.1.2.2 测试是否安装成功
      • 4.1.3 安装 Eclipse 2021
        • 4.1.3.1 安装步骤
        • 4.1.3.2 测试是否安装成功
      • 4.1.4 安装 MySQL 8
        • 4.1.4.1 安装步骤
        • 4.1.4.2 测试是否安装成功
    • 4.2 大数据 Shell 编程
      • 4.2.1 Shell 简介
      • 4.2.2 Shell 的注释
      • 4.2.3 Shell 的执行方式
        • 4.2.3.1 脚本格式要求
        • 4.2.3.2 编写一个 Shell 脚本
        • 4.2.3.3 脚本的常用执行方式
      • 4.2.4 Shell 变量
        • 4.2.4.1 Shell 变量的介绍
        • 4.2.4.2 Shell 变量的定义
          • 4.2.4.2.1 基本语法
          • 4.2.4.2.2 定义变量的规则
          • 4.2.4.2.3 将命令的返回值赋给变量
        • 4.2.4.3 设置环境变量
        • 4.2.4.4 位置参数变量
        • 4.2.4.5 预定义变量
      • 4.2.5 运算符
      • 4.2.6 条件判断
      • 4.2.7 流程控制
        • 4.2.7.1 if 语句
        • 4.2.7.2 case 语句
        • 4.2.7.3 for 循环
        • 4.2.7.4 while 循环
      • 4.2.8 read 读取控制台输入
      • 4.2.9 函数
        • 4.2.9.1 函数简介
        • 4.2.9.2 系统函数
        • 4.2.9.3 自定义函数
      • 4.2.10 Shell 编程综合案例
    • 4.3 Python 开发平台 Ubuntu
      • 4.3.1 Ubuntu 简介
      • 4.3.2 安装 Ubuntu
      • 4.3.3 Ubuntu 的 root 用户
      • 4.3.4 Ubuntu下开发 Python
      • 4.3.5 APT 软件管理与远程登录
        • 4.3.5.1 更新 Ubuntu 软件下载地址
        • 4.3.5.2 安装 SSH 服务器远程登录

1.Linux 内容简介

1.1 Linux 入门介绍

Linux 基础入门

  1. Linux 入门
  2. Vmware 和 Linux 的安装
  3. Linux 目录结构

Linux 操作

  1. 远程登录(Xshell、Xftp)
  2. vi、vim 编辑器
  3. 开机、重启、用户登录及注销
  4. 用户管理
  5. 实用指令
  6. 定时任务调度
  7. 磁盘分区、挂载
  8. 网络配置
  9. 进程管理
  10. RPM 和 YUM 包管理

Linux 拓展

  1. Linux 之 JavaEE 搭建 JavaEE 环境
    • JDK 的安装
    • Eclipse 的安装
    • Tomcat 的安装
    • MySQL 的安装
  2. Linux 之 大数据 Shell 编程
    • 概述
    • Shell 脚本执行方式
    • Shell 变量
    • 运算符
    • 推荐判断
    • 流程控制
    • 函数
    • 定时维护 MySQL 数据库
  3. Linux 之 Python 开发平台 Ubuntu
    • Python 专业开发平台
    • Ubuntu 下开发 Python 开发环境
    • APT 软件管理和远程登录

小结

Linux 之日常必备技能_第1张图片

Linux 之日常必备技能_第2张图片

1.2 Linux 学习方向

Linux 运维工程师:服务器的规划、调试优化、日常监控、故障处理、数据备份、日志分析、服务器崩溃(瘫痪)了,要迅速恢复。

Linux 嵌入式工程师:熟练掌握各种驱动程序开发,在嵌入式系统中进行程序开发,需要学习C语言等。

Linux 下开发项目:应用最多,在 Liunx 上部署项目(一般要求会搭建、部署、管理、维护等)。

Linux 之日常必备技能_第3张图片

1.3 Linux 应用领域

个人桌面领域的应用

此领域是传统Linux 应用最薄弱的环节,传统Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被windows所压制,但近些年来随着ubuntu、fedora [fɪˈdɔ:rə] 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率在逐渐的提高。

Linux 之日常必备技能_第4张图片

服务器领域

Linux 在服务器领域的应用是最强的。
Linux 免费、稳定、高效等特点在这里得到了很好的体现,近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛。

嵌入式领域

近些年来 Linux 在嵌入式领域的应用得到了飞速的提高。
Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高
主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、智能家居、智能硬件等都是其应用领域。以后再物联网中应用会更加广泛。

1.4 Linux 学习阶段和方法

Linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多中型,大型甚至是集群项目都在使用 Linux ,很多软件公司考虑到开发成本都首选 Linux ,在中国软件公司得到广泛的使用。

Linux 学习阶段

第 1 阶段:Linux 环境下的基本操作命令,包括文件操作命令(rm mkdir chmod, chown) 编辑工具使用(vi vim)Linux 用户管理(useradd userdel usermod)等。

第 2 阶段:Linux 的各种配置(环境变量配置,网络配置,服务配置)。

第 3 阶段:Linux 下如何搭建对应语言的开发环境(大数据,JavaEE, Python等)。

第 4 阶段:能编写shell脚本,对Linux 服务器进行维护。

第 5 阶段:能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优。

第 6 阶段:深入理解Linux 系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各个环节的部署和维护方法。

Linux 学习方法和建议

  1. 高效而愉快的学习
  2. 先建立一个整体框架,然后细节
  3. 不需要掌握所有的 Linux 指令,要学会查询手册和百度
  4. 先know how ,再know why
  5. 计算机是一门"做中学"的学科,不是会了再做,而是做了才会
  6. 适当的囫囵吞枣
  7. Linux 不是编程,重点是实际操作,各种常用指令要玩的溜

2.Linux 基础

2.1 Linux 的介绍

  1. Linux 怎么读?里纳克斯、里纽克斯、里讷克斯、林尼克斯(任一都可以)

  2. Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统;是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目都会部署到 Linux/Unix 系统上。

  3. 常见的操作系统(Win7、Win10、IOS、Android、Mac)

  4. Linux 创始人:Linus Torvalds(林纳斯·托瓦兹)

  5. Linux 基本思想:第一,一切都是文件;第二,每个文件都有确定的用途

  6. Linux 主要发行版:Ubuntu(乌班图)、RedHat(红帽)、CentOS、Debain(蝶变)、Fedora、SuSE、
    OpenSUSE

  7. Linux 吉祥物:Tux

    图片来源于网络

Linux 之日常必备技能_第5张图片

关于吉祥物的小故事

成功了怎么说都可以,反之…

为什么要叫他Tux呢?

是不是因为他像穿了一件晚礼服(tuxedo)?

不单单只是这样哟,叫他Tux更多是来源于James Hughes:

The first person to call the penguin “Tux” was James Hughes, who said that it stood for “(T)orvalds (U)ni(X)”. However, tux is also an abbreviation of tuxedo, the outfit which often springs to mind when one sees a penguin.——From Wikipedia

(完美的双关,Tux和tuxedo。)

那又为什么会选择企鹅来当吉祥物呢?

选择企鹅来作为吉祥物是 Linus 的决定,因为他在去澳大利亚旅游的时候被澳大利亚国家动物园的企鹅咬了一口,这只企鹅在 Linus 的心里也是留下了非常深刻的印象啊,于是 Linus 在决定吉祥物的时候就想起这只小可爱(?)了。

Re: Linux Logo

Linus Torvalds ([email protected])

Sun, 12 May 1996 09:39:19 +0300 (EET DST)

.

Umm… You don’t have any gap to fill in.

“Linus likes penguins”. That’s it. There was even a headline on it in some Linux Journal some time ago (I was bitten by a Killer Penguin in Australia - I’m not kidding). Penguins are fun.

(这只苏破天际的企鹅哟,咬人之后都能被心心念念着当成吉祥物。)

于是在1996年的时候,Larry Ewing 用 Gimp 创作了这只可爱的企鹅,Tux。

Tux已经成为Linux和开源社群的象征。英国Linux用户组(British LUG)甚至在当地的动物园认养了几只企鹅。

现在Linux下也有很多以Tux为主角的游戏,例如SuperTux和SuperTuxKart等。

之前看到有人问为什么这只企鹅要抠脚(蹼)呢?

额…可能是因为吃得太饱了不抱着脚丫子就要坐不起来了吧-。-(捂脸,这是维基百科的锅,哈哈哈哈)。

Torvalds was looking for something fun and sympathetic to associate with Linux, and a slightly fat penguin sitting down after having had a great meal perfectly fit the bill——From Wikipedia

2.2 Linux 与 Unix 的历史关系

Linux 之日常必备技能_第6张图片

Linux 之日常必备技能_第7张图片

Linux 之日常必备技能_第8张图片

Linux vs Windows

特点 Windows Linux
是否免费 收费,且非常昂贵 免费或少许收费
软件与支持 数量和质量的优势,不过大部分为收费软件,由微软官方提供支持和服务。 开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的Linux开发者和自由软件社区提供支持。
安全性 三天两头打补丁安装系统安全更新,还是会中病毒木马。 要说 Linux 没有安全问题,那当然是不可能的,这一点仁者见仁智者见智,相对来说肯定比Windows 平台要更加安全。
使用习惯 普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上手容易入门简单。 兼具图形界面操作和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导,一旦熟练之后效率极高。
可定制性 封闭的,系统可定制性很差。 开源,可定制性非常强。
应用场景 桌面操作系统主要是 Windows 支撑百度,谷歌,淘宝等应用软件和服务的,是后台成千上万的Linux服务器主机。世界上大部分软件和服务都是运行在 Linux 之上的。

肯•汤普森(Ken Thompson)–UNIX之父

兴趣的力量

肯·汤普森出生于1943年。他小学的时候,当有一堂课讲到二进制的时候,喜欢逻辑的他立刻被吸引住,兴趣驱使他做了很多相关的二进制计算,并借助一台十进制计算器将其扩展到各种进制。

兴趣的力量真是太大了!

大二时他有幸接触到一台模拟计算机,通过自我摸索,仔细研读,学会了编程。之后,仅用了一年时间就拿到了硕士学位,稳稳的学霸一枚。

由于游戏,造就了UNIX

1966 年,肯·汤普森加入贝尔实验室,与丹尼斯·里奇(Dennis Ritchie,又一位大神,后面再讲)一起参与名为 Multics(多路信息计算系统)的项目开发。在那个时期,计算机系统还处在批处理的阶段,只能在既慢又笨重的大型机器上工作,要先将程序卡片装入设备,然后等1个小时后才能取运算的结果。贝尔实验室联合麻省理工学院以及通用电气公司想建立一套多使用者、多任务、多层次的 Multics 操作系统,却由于开发周期过长,成本高,进度缓慢等种种原因,1969 年贝尔实验室最后决定撤出这个项目。

Linux 之日常必备技能_第9张图片

PDP-7小型机

让肯·汤普森失望的是,自己再也不能玩自己写的名为“star travel”的游戏了,因为这个游戏完全是基于 Multics 的。既然实验室撤出了项目,那就自己开发个操作系统来满足想玩游戏的愿望。肯·汤普森找到了一台废弃已久的老式 PDP-7小型机,虽然称为小型机,那时候也得有一个房间那么大!在这台机器上他首先重写了游戏,游戏有了后,肯·汤普森还想着要开发一个全新的操作系统。由此接下来他一周一个内核,一个文件系统,一个编辑器,一个编译程序的,竟然在一个月内编写完了操作系统的内核。这个系统做完后,肯·汤普森将其命名为 UNiplexed Information and Computing System,缩写为 UNICS ,后面陆续做了一些改动后,第一版UNIX操作系统诞生。

Linux 之日常必备技能_第10张图片

那一年,肯·汤普森年仅26岁!

1973 年的 10 月,在 IBM 举办的操作系统原理专题研讨会上 ,还不太为外界所知的UNIX被首次提及,当肯·汤普森和与丹尼斯·里奇在会上宣读论文并展示了UNIX后,整个会场瞬间轰动了。随后UNIX的需求量日益增加,肯·汤普森和与丹尼斯·里奇决定将UNIX进一步改写,以便可以移植到各种不同的硬件系统。由于UNIX的源码中不少是用汇编完成,不具备良好的移植性,正好丹尼斯·里奇在 1973 年在 B 语言的基础上开发出了 C 语言,C 语言灵活,也更高效,与硬件无关,并且不失其简洁性,正是UNIX移植所需要的法宝,于是旧版的UNIX与 C 语言完美结合在一起产生了新的可移植的UNIX系统。随着UNIX的广泛使用,C 语言也成为了当时最受欢迎的编程语言一直延续至今。

UNIX的设计哲学就是KISS——Keep It Simple, Stupid

Linux 之日常必备技能_第11张图片

Linux 之日常必备技能_第12张图片

肯·汤普森和与丹尼斯·里奇

1983 年,美国计算机协会将图灵奖授予肯·汤普森和与丹尼斯·里奇。

原文:

For their development of generic operating systems theory and specifically for the implementation of the UNIX operating system.

翻译:

授予肯·汤普森和与丹尼斯·里奇图灵奖以表彰其在通用操作系统理论领域的贡献,特别是UNIX操作系统的开发与实现。

黑客

根据理查德·斯托尔曼的说法,黑客行为必须包含三个特点:好玩高智商探索精神。只有同时满足这三个标准,才能被称为“黑客”。它们构成了黑客的价值观,黑客追求的就是这三种价值,而不是实用性或金钱。

UNIX系统在贝尔实验室是供大家免费使用的。有人发现,汤普森总能进入每个人的账户,于是一位同事便分析UNIX代码,重新编译了系统。令人意想不到的是,汤普森仍然能进入他们的账户,贝尔实验室的科学家们却对此束手无策。直到1983年,汤普森才在他的图灵奖获奖感言里揭示了这一秘密,原来,让他轻松“侵入”各位同事账户的秘诀不在UNIX代码,而在编译UNIX代码的C编译器里,而汤普森正是编译器的开发者。

飞行员肯·汤普森

肯·汤普森在随后并没有走上创业的通路,而是在贝尔实验室从事热爱的开发工作直到退休。但传奇者的人生怎么可能就此陨落,肯·汤普森在退休后竟开启了他另一个爱好并当成了职业——那就是飞行员。

在这里插入图片描述

飞行员肯·汤普森

Go语言

在这里插入图片描述

2006 年,肯·汤普森加入了 Google 公司,开发了Go语言,Go语言也叫Golong语言,是由谷歌公司推出。Go语言的主要开发者有:肯.汤姆逊(Ken Thompson)、罗布.派克(Rob Pike)和罗伯特.格里泽默(Robert Griesemer)。这三个都是大神。

Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go = C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。

评价

他与丹尼斯·里奇一起创造了UNIX。同时也是B程序语言,UTF-8编码,ed文本编辑器的创造者、设计者。Go程序语言的开发者之一。1983年与丹尼斯·里奇一起被授予美国计算机协会图灵奖;1994年IEEE(电气和电子工程师协会)计算机学会先锋奖得主;1998年被授予国家科技奖章;1997年入选计算机历史博物馆名人录。

网络上对肯·汤普森的评价:“世界上最杰出的程序员。”


Unix

Linux 之日常必备技能_第13张图片

UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中,UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,Linux 诞生于 20 世纪 90 年代初,可以说 UNIX 是操作系统中的"老大哥",后来的 Windows 和 Linux 都参考了 UNIX。

现代的 Windows 系统已经朝着“图形界面”的方向发展了,和 UNIX 系统有了巨大的差异,从表面上甚至看不出两者的关联。

UNIX 的坎坷历史

UNIX 操作系统由肯•汤普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)发明。它的部分技术来源可追溯到从 1965 年开始的 Multics 工程计划,该计划由贝尔实验室、美国麻省理工学院和通用电气公司联合发起,目标是开发一种交互式的、具有多道程序处理能力的分时操作系统,以取代当时广泛使用的批处理操作系统。

说明:分时操作系统使一台计算机可以同时为多个用户服务,连接计算机的终端用户交互式发出命令,操作系统采用时间片轮转的方式处理用户的服务请求并在终端上显示结果(操作系统将CPU的时间划分成若干个片段,称为时间片)。操作系统以时间片为单位,轮流为每个终端用户服务,每次服务一个时间片。

可惜,由于 Multics 工程计划所追求的目标太庞大、太复杂,以至于它的开发人员都不知道要做成什么样子,最终以失败收场。

以肯•汤普森为首的贝尔实验室研究人员吸取了 Multics 工程计划失败的经验教训,于 1969 年实现了一种分时操作系统的雏形,1970 年该系统正式取名为 UNIX。

想一下英文中的前缀 Multi 和 Uni,就明白了 UNIX 的隐意。Multi 是大的意思,大而且繁;而 Uni 是小的意思,小而且巧。这是 UNIX 开发者的设计初衷,这个理念一直影响至今。

有意思的是,肯•汤普森当年开发 UNIX 的初衷是运行他编写的一款计算机游戏 Space Travel,这款游戏模拟太阳系天体运动,由玩家驾驶飞船,观赏景色并尝试在各种行星和月亮上登陆。他先后在多个系统上试验,但运行效果不甚理想,于是决定自己开发操作系统,就这样,UNIX 诞生了。

自 1970 年后,UNIX 系统在贝尔实验室内部的程序员之间逐渐流行起来。1971-1972 年,肯•汤普森的同事丹尼斯•里奇发明了传说中的C语言,这是一种适合编写系统软件的高级语言,它的诞生是 UNIX 系统发展过程中的一个重要里程碑,它宣告了在操作系统的开发中,汇编语言不再是主宰。

到了 1973 年,UNIX 系统的绝大部分源代码都用C语言进行了重写,这为提高 UNIX 系统的可移植性打下了基础(之前操作系统多采用汇编语言,对硬件依赖性强),也为提高系统软件的开发效率创造了条件。可以说,UNIX 系统与C语言是一对孪生兄弟,具有密不可分的关系。

20 世纪 70 年代初,计算机界还有一项伟大的发明——TCP/IP 协议,这是当年美国国防部接手 ARPAnet 后所开发的网络协议。美国国防部把 TCP/IP 协议与 UNIX 系统、C语言捆绑在一起,由 AT&T 发行给美国各个大学非商业的许可证,这为 UNIX 系统、C语言、TCP/IP 协议的发展拉开了序幕,它们分别在操作系统、编程语言、网络协议这三个领域影响至今。肯•汤普森和丹尼斯•里奇因在计算机领域做出的杰出贡献,于 1983 年获得了计算机科学的最高奖——图灵奖。

在这里插入图片描述

图 1 为肯•汤普森与丹尼斯•里奇的合影,天才都是不修边幅的……

随后出现了各种版本的 UNIX 系统,目前常见的有 Sun Solaris、FreeBSD、IBM AIX、HP-UX 等。

Solaris 和 FreeBSD

我们重点介绍一下 Solaris,它是 UNIX 系统的一个重要分支。Solaris 除可以运行在 SPARC CPU 平台上外,还可以运行在 x86 CPU 平台上。在服务器市场上,Sun 的硬件平台具有高可用性和高可靠性,是市场上处于支配地位的 UNIX 系统。

对于难以接触到 Sun SPARC 架构计算机的用户来说,可以通过使用 Solaris x86 来体验世界知名大厂的商业 UNIX 风采。当然,Solaris x86 也可以用于实际生产应用的服务器,在遵守 Sun 的有关许可条款的情况下,Solaris x86 可以免费用于学习研究或商业应用。

FreeBSD 源于美国加利福尼亚大学伯克利分校开发的 UNIX 版本,它由来自世界各地的志愿者开发和维护,为不同架构的计算机系统提供了不同程度的支持。FreeBSD 在 BSD 许可协议下发布,允许任何人在保留版权和许可协议信息的前提下随意使用和发行,并不限制将 FreeBSD 的代码在另一协议下发行,因此商业公司可以自由地将 FreeBSD 代码融入它们的产品中。苹果公司的 OS X 就是基于 FreeBSD 的操作系统。

Linux 之日常必备技能_第14张图片

FreeBSD 与 Linux 的用户群有相当一部分是重合的,二者支持的硬件环境也比较一致,所采用的软件也比较类似。FreeBSD 的最大特点就是稳定和高效,是作为服务器操作系统的不错选择;但其对硬件的支持没有 Linux 完备,所以并不适合作为桌面系统。

其他 UNIX 版本因应用范围相对有限,在此不做过多介绍。

Unix和BSD

说到Linux,我们首先要了解Unix。

Unix是一种在AT&T贝尔实验室已经存在很长时间的操作系统。该项目由两位著名的计算机科学家肯•汤普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)领导。

Unix的正式开发始于1969年的夏天,Unix的第一个版本于1971年3月发布,随后的第二个版本于1972年发布。

如果你在Linux机器上或MacOS上输入date命令,你会得到一个名为Unix时间戳的数字。这个数字是自1970年1月1日00:00:00起的秒数。

为什么是1970年1月1日呢?现在你应该知道答案了,那时Unix正处于开发过程中。

Ken Thompson和Dennis Ritchie创建了B语言,这是Unix早期版本中支持的编程语言。然后,在1972年,里奇(Ritchie)重写了B语言,对它进行了更好的改进,成为了C语言,这种语言在今天仍然非常流行。后来的大多数Unix组件都是用C编写的。

在20世纪70年代后期,AT&T与教育机构和外部商业组织共享了Unix,从而导致了许多不同版本Unix的诞生。其中最突出的是由加州大学伯克利分校的计算机系统研究小组构建的教育版本。此版本被广泛称为Berkeley Software Distribution,即BSD。

最初,BSD是建立在Unix设计和代码库的基础上,但是后来,Unix和BSD的版本变得越来越有特色,导致了Unix BSD版本和AT&T代号为System V的Unix版本之间的“标准竞争”。最终,胜利属于SystemV。后来的BSD版本使System V更接近于学习,并纳入了公认的普遍接受的标准。

随着FreeBSD、NetBSD和OpenBSD等开源项目的出现,BSD分支的历史发展告一段落。BSD的最终版本于1995年推出。Unix的最终版本是1989年发布的Unix 10版本,是由Bell Laps开发的。

尽管作为Unix的官方版本和BSD很久以前就停止了开发,但是目前许多操作系统(从闭源到开源)都是基于这两个分支开发的。

比较著名和成功的商业版本可能是苹果的MacOS。目前iOS、watchOS和tvOS系统以及其他苹果操作系统都基于BSD平台。MacOS也是少数几个被认为是类UNIX的操作系统之一。

UNIX 版本

  • Open Solaris
    • 在UNIX的各发行版中,Open Solaris是唯一一个由商业版转为开放源代码的个例。 [4]
  • Oracle Solaris
    • 在UNIX商业版中,Solaris是一个非常优秀的操作系统。 [4]
  • IBM AIX
    • AIX(Advanced Interactivee Xecutive)是IBM公司所有的UNIX操作系统。AIX源自于System V Release 3,运行在IBM公司的Power PC硬件架构之上。 [4]
  • HP-UX
    • HP-UX(Hewlett Packard UNIX,HPUX)是美国惠普公司在System v的基础上开发的UNIX操作系统。 [4]
  • UNIX V6
    • 1975年发表的UNIX V6版是比较成熟的版本,贝尔实验室免费向美国各大学提供该版本,并开始广泛地配备于各大学的PDP-11系列计算机上。1977年,UNIX首次移植到非PDP类型的计算机上。 [5]
  • BSD UNIX
    • 除了贝尔实验室外,另一个使用比较广泛的UNIX版本是美国加州大学贝克利分校开发的BSD UNIX,该版本大量安装在SUN工作站上。1993年推出了4.4BSD版本。BSD是网络的主要平台,对DARPA的TCP/IP提供了支持,其中的网络文件系统(NFS)提供了与很多计算机机种的连接,NFS及AT&T开发的远程文件共享(RFS)使UNIX系统在网络支持方面保持领先地位。 [5]
  • Solaris
    • Solaris曾是使用最广泛、最成功的商业UNIX实现版本。Sun公司的操作系统最初叫做Sun OS,主要基于BSD UNIX版本。

GNU

Linux 之日常必备技能_第15张图片

GNU是一个自由的操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU’s Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理查德·马修·斯托曼,将GNU视为“达成社会目的技术方法”。

作为操作系统,GNU的发展仍未完成,其中最大的问题是具有完备功能的内核尚未被开发成功。GNU的内核,称为Hurd,是自由软件基金会发展的重点,但是其发展尚未成熟。在实际使用上,多半使用Linux内核、FreeBSD等替代方案,作为系统核心,其中主要的操作系统是Linux的发行版。Linux操作系统包涵了Linux内核与其他自由软件项目中的GNU组件和软件,可以被称为GNU/Linux(见GNU/Linux命名争议)。

在Unix的发展过程中,1983年发生了一件重要的事情,这是后来发生剧变的前提。

1983年9月,Richard Stallman宣布引入GNU计划(GNU代表的是GNU,不是Unix)。

GNU项目的目标是创建一个自由的、类unix的操作系统,在这个系统中,人们人们可以自由地复制,开发,修改和分发软件,并且不受限制。

请记住,Unix和Unix的派生版本最初是封闭源的,并拥有版权。

1985年,理查德(Richard)建立了自由软件基金会(FSF),这是一个非营利性组织,旨在促进软件开发的自由。

GNU项目创建了许多重要的产品,如GNU Compiler Collection (gcc)、GNU Debugger、GNU Emacs text editor (Emacs)、GNU build automator (make)等,还有今天使用最广泛的:GNU通用公共许可证(GPL)。

GNU项目取得了许多伟大的成就,创造了许多与Unix相似的工具。然而,GNU仍然缺少一个重要的组成部分:内核(用于处理与硬件设备(CPU、RAM、设备等)的控制和通信的部分)。


Linux

Linux 之日常必备技能_第16张图片

1991年8月25日,一位名叫Linus Torvalds的芬兰学生介绍了一种个人产品,后来成为Linux内核。

Linus的项目很快受到了许多个人和组织的关注。

Linux内核和GNU软件的结合创造了第一个完全免费的操作系统。它的名字是GNU/Linux。

注意:

  • Linux本身只是一个内核,它不是一个完整的操作系统。电脑上使用的操作系统叫做GNU / Linux,人们简单地称它为Linux。
  • Linux操作系统不使用或共享Unix或BSD代码的任何部分。它由Linus和GNU Project全新构建,成为Unix的克隆版本。这就是为什么Linux和当前的Unix后代操作系统(例如MacOS)有很多共同点的原因。

普遍认为,无论是在MacOS上还是Linux上运行像ls、cat、grep这样的命令,其本质是相同的。但它们其实是两种不同的工具。在Ubuntu上运行grep——help或man grepon可以得到GNU版本的介绍,在Mac上可以得到BSD版本的介绍。当然,大多数GNU和BSD (Unix)工具对于每个选项都是相同的,但是也有例外。

您可以在Mac上安装GNU版本,而不是默认版本,这就可以像Linux一样使用相同的命令。

Linux 的那些往事

Linux 内核最初是由李纳斯•托瓦兹(Linus Torvalds)在赫尔辛基大学读书时出于个人爱好而编写的,当时他觉得教学用的迷你版 UNIX 操作系统 Minix 太难用了,于是决定自己开发一个操作系统。第 1 版本于 1991 年 9 月发布,当时仅有 10 000 行代码。

Linux 之日常必备技能_第17张图片

图1为 林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,1969年12月28日- )早期的老照片

Linux 之日常必备技能_第18张图片

图2为 林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,1969年12月28日- )近期的百度百科上的照片

李纳斯•托瓦兹没有保留 Linux 源代码的版权,公开了代码,并邀请他人一起完善 Linux。与 Windows 及其他有专利权的操作系统不同,Linux 开放源代码,任何人都可以免费使用它。

据估计,现在只有 2% 的 Linux 核心代码是由李纳斯•托瓦兹自己编写的,虽然他仍然拥有 Linux 内核(操作系统的核心部分),并且保留了选择新代码和需要合并的新方法的最终裁定权。现在大家所使用的 Linux,我更倾向于说是由李纳斯•托瓦兹和后来陆续加入的众多 Linux 好者共同开发完成的。

李纳斯•托瓦兹无疑是这个世界上最伟大的程序员之一,何况,他还搞出了全世界最大的程序员交友社区 GitHub (开源代码库及版本控制系统)。

关于 Linux 吉祥物的由来是一个很有意思的话题,它是一只企鹅。

为什么选择企鹅,而不是选择狮子、老虎或者小白兔?有人说因为李纳斯•托瓦兹是芬兰人,所以选择企鹅,有人说因为其他动物图案都被用光了,李纳斯•托瓦兹只好选择企鹅。

我更愿意相信以下说法,企鹅是南极洲的标志性动物,根据国际公约,南极洲为全人类共同所有,不属于世界上的任何国家,可国家都无权将南极洲纳入其版图。Linux 选择企鹅图案作为 Logo,其含义是:开放源代码的 Linux 为全人类共同所有,可公司无权将其私有。

Unix 与 Linux 的亲密关系

二者的关系,不是大哥和小弟,"UNIX 是 Linux 的父亲"这个说法更怡当。之所以要介绍它们的关系,是因为要告诉读者,在学习的时候,其实 Linux 与 UNIX 有很多的共通之处,简单地说,如果你已经熟练掌握了 Linux,那么再上手使用 UNIX 会非常容易。

二者也有两个大的区别:

  1. UNIX 系统大多是与硬件配套的,也就是说,大多数 UNIX 系统如 AIX、HP-UX 等是无法安装在 x86 服务器和个人计算机上的,而 Linux 则可以运行在多种硬件平台上;
  2. UNIX 是商业软件,而 Linux 是开源软件,是免费、公开源代码的。

Linux 受至旷大计算机爱好者的喜爱,主要原因也有两个:

  1. 它属于开源软件,用户不用支付可费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿使用,无约束地继续传播;
  2. 它具有 UNIX 的全部功能,任何使用 UNIX 操作系统或想要学习 UNIX 操作系统的人都可以从 Linux 中获益。

开源软件是不同于商业软件的一种模式,从字面上理解,就是开放源代码,大家不用担心里面会搞什么猫腻,这会带来软件的革新和安全。

另外,开源其实并不等同于免费,而是一种新的软件盈利模式。目前很多软件都是开源软件,对计算机行业与互联网影响深远。

开源软件本身的模式、概念比较晦涩。

近年来,Linux 已经青出于蓝而胜于蓝,以超常的速度发展,从一个丑小鸭变成了一个拥有庞大用户群的真正优秀的、值得信赖的操作系统。历史的车轮让 Linux 成为 UNIX 最优秀的传承者。

总结一下 Linux 和 UNIX 的关系/区别

Linux 是一个类似 Unix 的操作系统,Unix 要早于 Linux,Linux 的初衷就是要替代 UNIX,并在功能和用户体验上进行优化,所以 Linux 模仿了 UNIX(但并没有抄袭 UNIX 的源码),使得 Linux 在外观和交互上与 UNIX 非常类似。

说模仿或许会被人喷,你也可以说微创新或者改进。

相比于 UNIX,Linux 最大的创新是开源免费,这是它能够蓬勃发展的最重要原因;而目前的 UNIX 大部分都是收费的,小公司和个人都难以承受。

正是由于 Linux 和 UNIX 有着千丝万缕的联系,所以人们把 Linux 叫做“类UNIX系统”。

Unix / Linux 的系统结构

UNIX/Linux 系统可以粗糙地抽象为 3 个层次(所谓粗糙,就是不够细致、精准,但是便于初学者抓住重点理解),如图 3 所示。底层是 UNIX/Linux 操作系统,即系统内核(Kernel);中间层是 Shell 层,即命令解释层;高层则是应用层。

在这里插入图片描述

内核层

内核层是 UNIX/Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境。

Shell层

Shell 层是与用户直接交互的界面。用户可以在提示符下输入命令行,由 Shell 解释执行并输出相应结果或者有关信息,所以我们也把 Shell 称作命令解释器,利用系统提供的丰富命令可以快捷而简便地完成许多工作。

应用层

应用层提供基于 X Window 协议的图形环境。X Window 协议定义了一个系统所必须具备的功能(就如同 TCP/IP 是一个协议,定义软件所应具备的功能),可系统能满足此协议及符合 X 协会其他的规范,便可称为 X Window。

现在大多数的 UNIX 系统上(包括 Solaris、HP-UX、AIX 等)都可以运行 CDE (Common Desktop Environment,通用桌面环境,是运行于 UNIX 的商业桌面环境)的用户界面;而在 Linux 上广泛应用的有 Gnome(见图 4)、KDE 等。

Linux 之日常必备技能_第19张图片

该图为 Gnome图形界面

X Window 与微软的 Windows 图形环境有很大的区别:

  • UNIX/Linux 系统与 X Window 没有必然捆绑的关系,也就是说,UNIX/Linux 可以安装 X Window,也可以不安装;而微软的 Windows 图形环境与内核捆绑密切。
  • UNIX/Linux 系统不依赖图形环境,依然可以通过命令行完成 100% 的功能,而且因为不使用图形环境还会节省大量的系统资源。

作为服务器部署,绝大多数 Linux 并不安装或并不启用图形环境。

Linux发行版

Linux 之日常必备技能_第20张图片

Linux只是内核部分,GNU提供了在该内核上运行的必要工具。但是,我们可以自由决定内核配置。

一些组织和公司通过将Linux内核与实用程序或程序包管理器相结合来创建完整的操作系统发行版,这些称为Linux发行版。

今天,有无数的Linux发行版,其中许多都是非常熟悉和流行的。一些最常用的发行版包括:Ubuntu, Debian, CentOS, Fedora, Redhat, Linux Mint等。

发行版可以构建在另一个发行版之上。事实上,我上面提到的发行版彼此之间有许多密切的关系。最古老的两个发行版(现在仍然在使用)是Slackware和Debian。它们创建于1993年。

Debian的后代分支也可能是比较大的发行版。除了Debian本身之外,这个分支的主要代表还有Ubuntu(构建在Debian之上)、Linux Mint(构建在Ubuntu之上)和Kali Linux。

另一个著名的发行版是Redhat,主要发行版是CentOS (RHEL),这是一个针对Redhat的企业客户的发行版。除了提供RHEL作为付费发行版之外,Redhat还向社区提供另一个免费发行版,即Fedora。

实际上,通常首先对Fedora版本进行测试以获取反馈和错误修复,然后在稳定的Fedora版本上构建RHEL。此外,Redhat还为RHEL的几乎所有组件提供了免费的源代码,并且社区可以构建发行版(类似于 RHEL)。CentOS是一个社区版本(不受Redhat支持),完全免费,是一个与RHEL类似的企业级质量的发行版。

学习和熟悉Linux,在我个人看来Ubuntu(或Debian)和CentOS将是你应该熟悉的组合。

还有其他完全基于Linux内核的操作系统。其中最突出的就是Android。Android可能是使用Linux内核的比较流行的操作系统。

Linux内核版本

您可以在项目主页上的https://www.kernel.org/上查看Linux内核版本的列表。

要检查正在使用的发行版上的内核版本,可以使用uname -r命令。

使用uname -a命令将打印出整个系统信息,uname -o将打印出操作系统名称。您将得到的结果是:操作系统名称是GNU / Linux,而不仅仅是Linux。

类Unix

MacOS是少数通过Single UNIX Specification(SUS)认证的操作系统之一,并且被认为是类Unix的操作系统。

当前,UNIX商标版权归Open Group所有(请注意,UNIX商标名称中的字母均大写,而对于操作系统,我们可以写成Unix或UNIX)。

“类Unix(Unix-like”)”用于表示具有SUS认证的操作系统,并且可以使用UNIX品牌。

问题是:按照上述定义,Linux是“类Unix”操作系统吗?答案是否定的。现在Linux发行版不允许使用UNIX商标。

除了将“Unix-like”解释为SUS的一个组成部分之外,还有人建议应该在更广泛的意义上使用“Unix-like”这个词。具体来说,它可分为三类:

  • Genetic UNIX:仅与Bell Labs Unix版本的代码库直接相关的操作系统。
  • Trademark UNIX:操作系统符合SUS要求,可以使用UNIX商标。
  • Functional UNIX:“类似于Unix”的操作系统,Linux可以归为此类。

下面是一个简图,描述了Unix的形成和开发过程以及与Unix密切相关的操作系统。

Linux 之日常必备技能_第21张图片

2.3 安装 Vmware 和 CentOS

2.3.1 基本说明

学习 Linux 需要一个环境,需要创建一个虚拟机,然后在虚拟机上安装一个 CentOS 系统来学习。

购买服务器这里不作说明。

2.3.1.1 安装顺序

  1. 先安装虚拟机(Virtual Machine:VMware Workstation 16 Pro
  2. 再安装 Linux(OS:CentOS 8

2.3.1.2 下载与安装说明

  1. 下载说明:推荐优先官网下载,获取下载链接,推荐使用 IDM迅雷 下载,这样下载速度非常快
  2. 安装说明:在安装 Vmware 时,需要先去 [BIOS](#2.3.1.3 进入 BIOS 的快捷键) 里修改设置,[开启虚拟化设备支持技术](#2.3.1.4 开启虚拟化技术)

2.3.1.3 进入 BIOS 的快捷键

  1. **进入BIOS设置主要按键:**DEL, ESC, F1, F2, F8, F9, F10, F12

    Linux 之日常必备技能_第22张图片

  2. 不同主板台式机进入BIOS按键:

    • Award BIOS:按“Del”键

    • AMI BIOS:按“Del”或“ESC”键

    • Phoenix BIOS:按“F2”键

  3. 品牌台式机以及笔记本电脑进入BIOS按键:

    • ibm/thinkpad(冷开机按f1,部分新型号可以在重新启动时启动按f1)
    • 惠普hp(启动和重新启动时按f2或者F10)
    • 索尼sony(启动和重新启动时按f2)
    • 戴尔dell(启动和重新启动时按f2)
    • 宏碁acer(启动和重新启动时按f2)
    • 东芝toshiba(冷开机时按esc然后按f1)
    • 惠普康柏hp compaq(开机到右上角出现闪动光标时按f10,或者开机时按f10)
    • 富士通fujitsu(启动和重新启动时按f2)
    • 三星Samsung(启动和重新时按f2)
    • 联想Lenovo(启动时按F2或Fn+F2,部分机型需关机时按Novo恢复键)
    • 华硕Asus(启动时按F2)
    • 大多数中国大陆国产和台湾品牌(启动和重新启动时按f2)
  4. 开机进入BIOS设置步骤:

    • 按下电源键开机或重新启动计算机,多数电脑会出现品牌LOGO界面,并且提示进入BIOS的按键,以下图为例子,进入BIOS按键为DEL,打开Boot Menu启动菜单的按键是F11;

      Linux 之日常必备技能_第23张图片

    • 按下键盘上的DEL键,这时候电脑就会进入BIOS设置主界面,通过↑↓←→方向键选择设置选项;

      Linux 之日常必备技能_第24张图片

    • 也可以通过启动快捷键F11(比较常见的是F12、Esc)先调出启动菜单,然后鼠标移动到底部Enter Setup回车即可进入BIOS,有些显示的是BIOS Setup。

    Linux 之日常必备技能_第25张图片

  5. 详细参考以下热键大全:

    品牌笔记本
    笔记本品牌 启动按键
    戴尔Dell F2
    宏基Acer F2
    东芝Toshiba 冷开机时按ESC然后按F1
    富士通Fujitsu F2
    联想Thinkpad F12
    IBM F1
    HP(惠普) F2或F10
    SONY(索尼) F2
    Compaq(康柏) F10
    lenovo(联想) F2 (部分机型需关机时按Novo恢复键)
    enq(明基) F2
    品牌台式机
    台式机品牌 启动按键
    IBM F1
    惠普HP F2
    索尼SONY F2
    戴尔Dell F2
    宏碁Acer F2
    东芝Toshiba 冷开机时按ESC然后按F1
    康柏Compaq F10
    富士通Fujitsu F2
    大多数国产品牌 F2
    组装机主板
    主板品牌 启动按键
    Award BIOS Del
    Ami BIOS Del或ESC
    Phoenix BIOS F2
    大部分是F2或Del或ESC,还有一少部分是F9或F10或F12。

2.3.1.4 开启虚拟化技术

BIOS类型一:技嘉主板

  • 电脑关机再开机,在开机启动时,狂按Del键进入BIOS,在BIOS Features下,按方向键选择Intel Virtualization Technology,按Enter键,选择Enabled,回车;
  • F10,选择Yes回车保存,重启。

BIOS类型二:惠普笔记本

  • 电脑关机再开机,开机启动时,狂按F10进入BIOS,选择system configuration,点击Device Configurations

  • 勾选virtualization technology,点击Save,点击File,选择Save Changes And Exit,保存退出,重启即可。

BIOS类型三:华硕UEFI BIOS

  • 电脑关机再开机,开机启动时,狂按F2F8Del进BIOS,在Advanced下,选择CPU Configuration回车;

  • 找到Intel Virtualization Technology回车改成Enabled,按F10保存退出,重启即可。

BIOS类型四:ThinkPad笔记本

  • 电脑关机再开机,开机启动时,狂按F1Fn+F1进入BIOS,切换到Security,选择Virtualization,回车;
  • 选中Intel(R) Virtualization Technology回车,改成Enabled,按F10保存退出,重启即可。

BIOS类型五:Phoenix、InsydeH20主板

  • 电脑关机再开机,开机启动时,狂按DelF1F2等按键进入BIOS,Phoenix主板在Configuration下,选择Intel Virtualization Technology回车,改成Enabled,按F10保存退出,重启即可。

  • InsydeH20也是在Configuration下将Intel Virtualization Technology改成Enabled,按F10保存退出,重启即可。

以上就是虚拟机VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态的解决方法,也就是开启Intel Virtualization Technology虚拟化技术。

2.3.2 下载地址

IDM 官网 下载地址:https://www.internetdownloadmanager.com/

Vmware 官网下载地址:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html

CentOS 官网下载地址:https://www.CentOS.org/download/

CentOS 国内镜像下载地址(官网不行,就选国内镜像下载,以下载 8 版本为例,其它版本同理):

  • http://mirrors.163.com/CentOS/8.4.2105/isos/x86_64/ 【个人常用,推荐】
  • http://mirrors.aliyun.com/CentOS/8.4.2105/isos/x86_64/ 【个人常用】
  • http://mirrors.btte.net/CentOS/8.4.2105/isos/x86_64/
  • http://mirrors.cn99.com/CentOS/8.4.2105/isos/x86_64/
  • http://mirrors.sohu.com/CentOS/8.4.2105/isos/x86_64/
  • http://CentOS.ustc.edu.cn/CentOS/8.4.2105/isos/x86_64/
  • http://mirrors.neusoft.edu.cn/CentOS/8.4.2105/isos/x86_64/
  • http://mirror.lzu.edu.cn/CentOS/8.4.2105/isos/x86_64/
  • http://ftp.sjtu.edu.cn/CentOS/8.4.2105/isos/x86_64/
  • http://man.linuxde.net/download/CentOS
# CentOS 7 版本说明
CentOS-7.0-x86_64-DVD-1503-01.iso           # 标准安装版,一般下载这个就可以了(推荐)
CentOS-7.0-x86_64-NetInstall-1503-01.iso    # 网络安装镜像(从网络安装或者救援系统)
CentOS-7.0-x86_64-Everything-1503-01.iso    # 对完整版安装盘的软件进行补充,集成所有软件。(包含CentOS7的一套完整的软件包,可以用来安装系统或者填充本地镜像)
CentOS-7.0-x86_64-GnomeLive-1503-01.iso     # GNOME桌面版
CentOS-7.0-x86_64-KdeLive-1503-01.iso       # KDE桌面版
CentOS-7.0-x86_64-livecd-1503-01.iso        # 光盘上运行的系统,类拟于winpe 
CentOS-7.0-x86_64-minimal-1503-01.iso       # 精简版,最小安装版,自带的软件最少

# CentOS 7 版本  https://mirrors.163.com/CentOS/7/isos/x86_64/
# 镜像版本                                          # 更新发布时间        # 大小
Index of /CentOS/7/isos/x86_64/
../
0_README.txt                                       06-Nov-2020 22:32    2495
CentOS-7-x86_64-DVD-2009.iso                       04-Nov-2020 19:37      4G
CentOS-7-x86_64-DVD-2009.torrent                   06-Nov-2020 22:44    176K
CentOS-7-x86_64-Everything-2009.iso                02-Nov-2020 23:18     10G
CentOS-7-x86_64-Everything-2009.torrent            06-Nov-2020 22:44    381K
CentOS-7-x86_64-Minimal-2009.iso                   03-Nov-2020 22:55    973M
CentOS-7-x86_64-Minimal-2009.torrent               06-Nov-2020 22:44     39K
CentOS-7-x86_64-NetInstall-2009.iso                27-Oct-2020 00:26    575M
CentOS-7-x86_64-NetInstall-2009.torrent            06-Nov-2020 22:44     23K
sha256sum.txt                                      04-Nov-2020 19:38     398
sha256sum.txt.asc                                  06-Nov-2020 22:37    1258

# CentOS 8 版本  https://mirrors.aliyun.com/CentOS/8/isos/x86_64/
# 镜像版本                                          # 更新发布时间        # 大小
Index of /CentOS/8/isos/x86_64/
../
CHECKSUM                                           02-Jun-2021 04:45     319
CHECKSUM.asc                                       17-Aug-2021 02:51     811
CentOS-8.4.2105-x86_64-boot.iso                    02-Jun-2021 04:21    723M
CentOS-8.4.2105-x86_64-boot.iso.manifest           02-Jun-2021 04:25     635
CentOS-8.4.2105-x86_64-boot.torrent                17-Aug-2021 14:45     29K
CentOS-8.4.2105-x86_64-dvd1.iso                    02-Jun-2021 04:43      9G
CentOS-8.4.2105-x86_64-dvd1.iso.manifest           02-Jun-2021 04:43    477K
CentOS-8.4.2105-x86_64-dvd1.torrent                17-Aug-2021 14:45    370K

2.3.3 安装与设置 Vmware

2.3.3.1 安装 VMware

小提示:安装前,记得在 [BIOS](#2.3.1.3 进入 BIOS 的快捷键) 里,[开启 虚拟化设备支持技术](#2.3.1.4 开启虚拟化技术)

安装要求:尽量硬件配置高一点,cpu核数线程数尽量至少8核双线程以上,RAM内存尽量至少16G,32G以上,磁盘空间要么单独拿一块SSD固态来装虚拟机,要么分区一块大点的固态,尽量把虚拟机和其它软件的运行独立出来,虚拟机运行是很耗资源的,否则,会有卡顿的现象

没下载 VMware® Workstation 16 Pro 的点击 [Vmware下载地址](#2.3.2 下载地址) 跳转到下载地址。

下载好 VMware® Workstation 16 Pro 后,一路 Next(下一步),自行选择一个安装路径(不选C盘就行),傻瓜式安装即可。

下面是安装截图:

安装向导,点击下一步

Linux 之日常必备技能_第26张图片

同意一下协议

Linux 之日常必备技能_第27张图片

更改一下 安装路径,一般不要在 C 盘

Linux 之日常必备技能_第28张图片

取消更新检查,要换新版本,建议卸载旧版本,去官网重新下载新版本安装,至于什么体验计划,无外乎就是收集数据,获取用户的一些使用数据、习惯行为等有用的数据,促使改善他们的产品。

Linux 之日常必备技能_第29张图片

快捷方式看自己留不留

在这里插入图片描述

Linux 之日常必备技能_第30张图片

安装完成

Linux 之日常必备技能_第31张图片

需要重启,就重启一下吧

Linux 之日常必备技能_第32张图片

我把所有可用的许可证都放这了,选择对应版本的,填进去,即可

# 许可证密钥

VM 16:
ZF3R0-FHED2-M80TY-8QYGC-NPKYF
YF390-0HF8P-M81RQ-2DXQE-M2UT6
ZF71R-DMX85-08DQY-8YMNC-PPHV8

VM 15:
FC7D0-D1YDL-M8DXZ-CYPZE-P2AY6
VZ182-0NDE6-0817Y-KMMZZ-YKAC4
ZC75R-0YW5P-H809Y-QYWQZ-NZ8G8
ZV7XK-02D56-480JZ-ENZEX-YF8XD
YC588-FTDDL-H852Y-UXYGE-YZKE2

VM 14:
FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA
CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD

VM 12:
ZC3TK-63GE6-481JY-WWW5T-Z7ATA
ZY3MR-6LD10-H80XZ-9PW7T-QY290
FC11U-8NXDQ-081QZ-2QYGE-NFUYA
FZ54R-8VG96-084CY-YMY5V-X78C2
AV100-6LFE4-081VZ-GQZX9-WFAX0

VM 11:
VY790-6FF9M-H8D3Q-1PY5T-YFUTD
AA5M8-8NGD3-M805Y-K5Q7G-X28E6
UY3TR-88W40-0818Q-65ZXZ-N22RA

VM 10:
1Z0G9-67285-FZG78-ZL3Q2-234JG
5A6F6-88247-XZH59-HL0Q6-8CD2V
HF6QX-20187-2Z391-522NH-9AELT
5F29M-48312-8ZDF9-A8A5K-2AM0Z

这便是那个界面了,我这里呈暗黑,是因为长期工作的原因,白色刺眼,所以,将系统主题颜色改为了深色模式(也就是暗黑模式)

Linux 之日常必备技能_第33张图片

到这里,就基本安装完成了,下面是一些 设置选项【可选】

2.3.3.2 设置 Vmware

编辑-首选项

Linux 之日常必备技能_第34张图片

修改虚拟机默认位置,改在哪,自己开心就好

Linux 之日常必备技能_第35张图片

为虚拟机分配内存

Linux 之日常必备技能_第36张图片

2.3.4 安装 CentOS 8

没下 CentOS 镜像文件的,[点击 CentOS 镜像下载地址](#2.3.2 下载地址) 跳转到下载地址

下载好后,开始安装

2.3.4.1 安装虚拟机

2.3.4.1.1 创建虚拟机

点击文件创建、点击 + 号创建、或者快捷键创建都可以

Linux 之日常必备技能_第37张图片

2.3.4.1.2 选择创建虚拟机的方式

典型和自定义随便,怎样都行,小白或想省事的建议典型,反之,自定义

Linux 之日常必备技能_第38张图片

这里先稍后安装

在这里插入图片描述

2.3.4.1.3 选择客户机操作系统

选择 Linux 和 CentOS 8 64位

Linux 之日常必备技能_第39张图片

2.3.4.1.4 自定义虚拟机名称和路径

自定义虚拟机名称及文件放置路径

Linux 之日常必备技能_第40张图片

2.3.4.1.5 给虚拟机分配磁盘容量

给的磁盘空间不得低于 20G,建议 40G、50G及以上,磁盘储存方式,单个或多个文件根据自己实际需求就好

Linux 之日常必备技能_第41张图片

这里可以直接点击完成,也可以自定义硬件

Linux 之日常必备技能_第42张图片

2.3.4.1.6 硬件设置

去编辑虚拟机设置

Linux 之日常必备技能_第43张图片

2.3.4.1.7 给虚拟机内存、处理器

指定内存大小,根据自己宿主机得性能决定,自己的物理内存多大,适当给一些内存给虚拟机即可,不得低于1G

Linux 之日常必备技能_第44张图片

同理,根据自己宿主机的CPU,配置一下虚拟机的处理器,不地超过或等于宿主机的性能

Linux 之日常必备技能_第45张图片

2.3.4.1.8 指定 ISO 镜像文件

选择 ISO 镜像文件

Linux 之日常必备技能_第46张图片

2.3.4.1.9 指定网络连接模式

网络连接模式,要稍提一下,往下看,根据自己实际需要,选择适合自己的方式即可。

Linux 之日常必备技能_第47张图片

VMware虚拟机常见的网络类型有bridge(桥接),NAT(地址转换)、host-only(仅主机)3种。

NAT(地址转换)
NAT(network address translation),网络地址转换,简单的理解,NAT模式的虚拟机就是通过宿主机(物理电脑)上网和交换数据的。所有的虚拟机构成了一个局域网,宿主机就是这些虚拟机的上网网关,这样有个好处,宿主机的地址变化了,虚拟机的地址不用改。

Linux 之日常必备技能_第48张图片

Bridge(桥接模式)
桥接模式可以理解为通过物理主机网卡架设了一座桥梁,从而连入了实际的网络中。因此,虚拟机可以被分配与物理主机相同网段的独立IP,所有网络功能和网络中的真实机器几乎完全一样。桥接模式下的虚拟机和网内的真实计算机所处的位置是一样的,它就像是区域网中的一台机器。

在Bridge模式下,电脑设备创建的虚拟机就像一台真正的计算机一样,它会直接连接到实际的网络上,上网宿主机(物理机)没有关系。Bridge网络类型的原来逻辑图如下所示。

如果虚拟机要往物理机发数据,桥接模式下数据还得先经过路由器,路由器的带宽会被占用的。

Linux 之日常必备技能_第49张图片

Host-only(仅主机)

在Host-only模式下,虚拟机的网卡会连接到宿主机的VMnet1上,但宿主机系统并不为虚拟机提供任何路由服务,因此虚拟机只能和宿主机进行通信,不能连接到实际网络上,即无法上网。Host-only网络类型的原理逻辑图如图:

Linux 之日常必备技能_第50张图片

小提示

虚拟机A连接到交换机VMnet1,虚拟机A连接到交换机VMnet8,虚拟机A与虚拟机B是不能通信的,它们处在不同的子网中,

即使你把IP设置为同一个网段也不行。虚拟机A和虚拟机B是访问不了物理机的,因为它们连接的交换机VMnet1、VMnet8与物理网卡没有连通。

虚拟机C连接到交换机VMnet0,虚拟机C与虚拟机机A、B处在不同网络,它们之间也是不能连通的。虚拟机C可以访问物理机,因为虚拟机C与物理机地位相同,同处一个网络。

Linux 之日常必备技能_第51张图片

指定固件类型位 UEFI,然后点击确定,完成虚拟机设置

小提示:

USB,声卡,打印机,一般都直接移除掉,服务器基本用不着,除非用桌面板(带GUI的),但都是开发,谁会用桌面版,加上Linux本身桌面版也是精简的,没有Windows和Mac桌面版强大,Linux一般都是作服务器,作桌面版玩玩儿是可以的

UEFI 和 BIOS 的区别

1.UEFI是一种所谓的“固件”,负责在开机时做硬件启动和检测等工作,并且担任操作系统控制硬件时的中介角色。

2.与BIOS相比,UEFI编码99%都是由C语言完成。

3.UEFI 一改之前的中断、硬件端口操作的方法,而采用了Driver/protocol的新方式。

4.UEFI将不支持X86实模式,而直接采用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了)。

5.UEFI输出也不再是单纯的二进制code,改为Removable Binary Drivers。

6.OS启动不再是调用Int19,而是直接利用protocol/device Path。

7.对于第三方的开发,BIOS基本上做不到,除非参与BIOS的设计,但是还要受到ROM的大小限制,而UEFI就便利多了。

8.UEFI弥补BIOS对新硬件的支持不足的问题。

9.与BIOS显著不同的是,UEFI是用模块化、C语言风格的参数堆栈传递方式、动态链接的形式构建系统,它比BIOS更易于实现,容错和纠错特性也更强,从而缩短了系统研发的时间。更加重要的是,它运行于32位或64位模式,突破了传统16位代码的寻址能力,达到处理器的最大寻址,此举克服了BIOS代码运行缓慢的弊端。

Linux 之日常必备技能_第52张图片

2.3.4.2 开启虚拟机

2.3.4.2.1 开启虚拟机

点击开启此虚拟机

Linux 之日常必备技能_第53张图片

2.3.4.2.2 开启中若有报错提示

开启过程中,如果遇到有该错误提示,说明未开启虚拟化技术

解决方法:根据对应的主板型号,进入[BIOS](#2.3.1.3 进入 BIOS 的快捷键),[开启网络虚拟技术](#2.3.1.4 开启虚拟化技术)即可

Linux 之日常必备技能_第54张图片

2.3.4.2.3 解决方法

BIOS类型一:技嘉主板

  • 电脑关机再开机,在开机启动时,狂按Del键进入BIOS,在BIOS Features下,按方向键选择Intel Virtualization Technology,按Enter键,选择Enabled,回车;
  • F10,选择Yes回车保存,重启。

BIOS类型二:惠普笔记本

  • 电脑关机再开机,开机启动时,狂按F10进入BIOS,选择system configuration,点击Device Configurations

  • 勾选virtualization technology,点击Save,点击File,选择Save Changes And Exit,保存退出,重启即可。

BIOS类型三:华硕UEFI BIOS

  • 电脑关机再开机,开机启动时,狂按F2F8Del进BIOS,在Advanced下,选择CPU Configuration回车;

  • 找到Intel Virtualization Technology回车改成Enabled,按F10保存退出,重启即可。

BIOS类型四:ThinkPad笔记本

  • 电脑关机再开机,开机启动时,狂按F1Fn+F1进入BIOS,切换到Security,选择Virtualization,回车;
  • 选中Intel(R) Virtualization Technology回车,改成Enabled,按F10保存退出,重启即可。

BIOS类型五:Phoenix、InsydeH20主板

  • 电脑关机再开机,开机启动时,狂按DelF1F2等按键进入BIOS,Phoenix主板在Configuration下,选择Intel Virtualization Technology回车,改成Enabled,按F10保存退出,重启即可。

  • InsydeH20也是在Configuration下将Intel Virtualization Technology改成Enabled,按F10保存退出,重启即可。

以上就是虚拟机VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态的解决方法,也就是开启Intel Virtualization Technology虚拟化技术。

2.3.4.3 安装 CentOS 8

2.3.4.3.1 Install CentOS Linux 8

这里仅使用最小安装作服务器,桌面版不作说明

提示:

从Windows进入虚拟机:单击Ctrl+G

退出虚拟机回到Windows:Ctrl+Alt

开启Intel Virtualization Technology后,重启电脑,开启此虚拟机,启动界面如下:

Linux 之日常必备技能_第55张图片

2.3.4.3.2 检查镜像文件

小提示:

检查安装文件到达100%时,

  • 测试的edu的镜像,检测不通过,报错,发现有问题:

    ​ ① 若取消检查,发现在点击开始安装之后,就一直卡在安装进度里,以失败告终

    ​ ② 若不取消检查,发现报检查失败,检查不通过,拒绝继续执行后续程序,亦以失败告终

    ​ 所以,需要重新下载一个镜像,换成其它镜像就OK了

  • 测试的aliyun和163的镜像,检测通过,It‘s OK!

Linux 之日常必备技能_第56张图片

2.3.4.3.3 选择安装系统的语言

检查通过后,进入安装语言选项设置

在这里插入图片描述

2.3.4.3.4 指定时区

默认时区为美国-纽约,需要改为中国的,需要修改一下时区,不然和系统时间相差 8 小时。

Linux 之日常必备技能_第57张图片

一般默认在:亚洲-上海,可能是西方国家开发出来这个产品之时,认为中国只有上海最繁华,这种旧思想一直沿用至今,估计他们也懒改这些小细节。

Linux 之日常必备技能_第58张图片

2.3.4.3.5 自定义是否需要安装哪些软件

选择需要安装地软件,需要的就勾选上

Linux 之日常必备技能_第59张图片

我这里最小化安装

Linux 之日常必备技能_第60张图片

2.3.4.3.6 选择自定义分区或自动分区的方式

这里选择自定义分区,小白或不知道咋分区就自动就好了,反之,自定义分区。

Linux 之日常必备技能_第61张图片

分区这里自定义,不会分区就自动

Linux 之日常必备技能_第62张图片

这里简单分配一下,根据自己实际情况去分配就好了

Linux 之日常必备技能_第63张图片

选择接受更改

Linux 之日常必备技能_第64张图片

2.3.4.3.7 自定义主机名和网络设置

设置网络和主机名

Linux 之日常必备技能_第65张图片

更改主机名和打开网络

Linux 之日常必备技能_第66张图片

2.3.4.3.8 设置 root 根密码

设置 root 用户和密码

Linux 之日常必备技能_第67张图片

设置密码,密码太简单要点击两次完成

Linux 之日常必备技能_第68张图片

2.3.4.3.9 确认设置并开始安装

点击开始安装

Linux 之日常必备技能_第69张图片

安装中…

Linux 之日常必备技能_第70张图片

2.3.4.3.10 安装完成并重启

重启系统即可

Linux 之日常必备技能_第71张图片

2.3.4.3.11 完成安装

到这里,基本安装结束了,可以开始使用了

2.3.4.3.11.1 最小安装服务器版

Linux 之日常必备技能_第72张图片

2.3.4.3.11.2 桌面版服务器

带 GUI 的图形化界面,稍多几个步骤。

进入许可协议

Linux 之日常必备技能_第73张图片

同意一下许可协议,点击完成

Linux 之日常必备技能_第74张图片

创建普通用户【可选】,然后结束配置

Linux 之日常必备技能_第75张图片

进入欢迎界面

Linux 之日常必备技能_第76张图片

Linux 之日常必备技能_第77张图片

关闭地理位置和自动提交报告,开启与关闭,自己开心就好。

Linux 之日常必备技能_第78张图片

跳过在线账号登录

Linux 之日常必备技能_第79张图片

创建主目录用户名

Linux 之日常必备技能_第80张图片

自定义设置密码,然后继续

Linux 之日常必备技能_第81张图片

密码设置好后,就可以开始使用了

Linux 之日常必备技能_第82张图片

Linux 之日常必备技能_第83张图片

然后就是这个干干净净的桌面了,点击活动可以打开菜单栏

Linux 之日常必备技能_第84张图片

这个图形化界面确实还是干净、清爽、雅观、暗黑等,低调、素雅的感觉,非常舒服。

Linux 之日常必备技能_第85张图片

2.3.5 CentOS 8 配置静态 IP

# 进入网络配置目录
cd /etc/sysconfig/network-scripts/

# 查看当前路径的文件
ll

# 编辑网络配置文件
vi ifcfg-ens32 或 vim ifcfg-ens32
vi ifcfg-enp0s3 或 vim ifcfg-enp0s3

# 配置如下
# =============== ens32 ===============
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none               # static为静态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens32
UUID=b03s206b-sa7f-4cc4-8d3c-d7aatahcfed9
DEVICE=ens32
ONBOOT=yes                   # yes表示设置开机启动
IPV6_PRIVACY=no
HWADDR=00:0C:29:95:A9:8F
IPADDR=xxx.xxx.xxx.xxx       # 静态IP地址,保持在同一网段即可
PREFIX=24
GATEWAY=xxx.xxx.xxx.xxx      # 网关
DNS1=xxx.xxx.xxx.xxx         # DNS

# =============== eth0 ===============
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=“static”           # static为静态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=3d9407ec-c449-4d84-822b-9b1ffa986d97
DEVICE=eth0
ONBOOT=yes                   # yes表示设置开机启动
IPADDR=xxx.xxx.xxx.xxx       # 静态IP地址,保持在同一网段即可
GATEWAY=xxx.xxx.xxx.xxx      # 网关
NETMASK=xxx.xxx.xxx.xxx      # 子网掩码
DNS1=114.114.114.114         # DNS

# 设置完后,按 ESC 退出编辑模式,输入 :wq 保存退出
:wq

# 重启
reboot

# 测试 分别 ping 静态ip、ping 网关、ping 外网,若 ping 得通,表示网络设置OK
ping xxx.xxx.xxx.xxx

2.4 CentOS 7 和 CentOS 8 的一些区别

因为有些用的 CentOS 7 版本,有些用的 CentOS 8 版本,所以,在这里简单提一下。

2.4.1 默认的文件系统

CentOS 7 与 CentOS 8 都是采用 XFS

2.4.2 内核版本

CentOS 8 采用 4.18.0-xxx
CentOS 7 采用 3.10-0-xxx

2.4.3 内核代码名字

CentOS 8 采用 2019-05-07(Kernel Version 4.18.0-80)
CentOS 7 采用 2014-06-09(Kernel Version 3.10.0-123)

2.4.4 标准/默认的仓库频道

# CentOS 7
Repo ID: rhel-7-server-rpms
Repo Name: CentOS 7 Server (RPMs)

# CentOS 8
Repo ID: rhel-8-for-x86_64-appstream-rpms
Repo Name: CentOS 8 for x86_64 - AppStream (RPMs)
Repo ID: rhel-8-for-x86_64-baseos-rpms
Repo Name: CentOS 8 for x86_64 - BaseOS (RPMs)

2.4.5 支持最大的文件

# CentOS 7
最大. (单独) 文件大小= 500TiB
最大. 文件系统大小 = 500TiB

# CentOS 8
XFS 文件系统,支持的最大文件大小,已从 500 TiB 增加到 1024 TiB。
(此最大文件大小,仅适用于 64 位机器。CentOS 不支持 32 位机器上的 XFS.)

2.4.6 软件包管理

# CentOS 7
yum基于3.0.x版本

# CentOS 8
包管理由 DNF (YUMv4)完成。
yum4 基于 DNF 技术,yum4 命令提供了与早期版本中使用的 Yum v3 的向后兼容性。yum 命令只是到 dnf 的一个符号链接。

2.4.7 最大支持的内存

# CentOS 7
只支持12TB

# CentOS 8
24TB,64位架构

2.4.8 默认的网络数据包过滤

# CentOS 7
CentOS 7 firewalld 守护进程使用 iptables 作为其默认后端。

# CentOS 8
CentOS 8 使用 nftables 取代了 iptables
nftables 是默认的网络包过滤,它取代了以前的 iptables 框架。firewalld 守护进程现在使用 nftables 作为默认后端。这将取代以前使用的“iptables”、“ip6tables”、“arptables”和“ebtables”工具。“nftables”确实为IPv4和IPv6协议提供了一个单一的框架。

2.4.9 默认的数据库

# CentOS 7
CentOS 7 中 MySQL的默认实现是 MariaDB

# CentOS 8
MySQL 8.0
MariaDB 10.3
PostgreSQL 10 and PostgreSQL 9.6
Redis 5.0

2.4.10 支持的硬件架构

# CentOS 7
64-bit AMD
64-bit Intel
IBM POWER7
IBM System z

# CentOS 8
AMD and Intel 64-bit architectures
The 64-bit ARM architecture
IBM Power Systems, Little Endian
IBM Z

2.4.11 可供安装的 ISO 镜像类型

# CentOS 7
Boot ISO
Binary(二进制) DVD ISO
Supplementary(追加的) Binary DVD

# CentOS 8
Binary(二进制) DVD ISO
Boot ISO

2.4.12 默认情况下的Cockpit web控制台的安装状态

# CentOS 7
Cockpit默认情况下没有安装,需要通过启用extra和optional存储库通道来安装。

# CentOS 8
Cockpit是默认安装和可用的。这将在非最小模式下自动安装,并在防火墙中启用所需端口。
Cockpit提供了一个增强的框架,可以用来访问/编辑/更改许多系统设置。这提供了通过web接口的访问,可以使用浏览器访问url地址http://:9090进行管理。

2.4.13 默认虚拟机管理

# CentOS 7
virt-manager将用于基于KVM的虚拟系统管理。

# CentOS 8
默认情况下,它由Cockpit管理。如果需要,还可以安装virt-manager。

2.4.14 RMP版本的改进

# CentOS 7
CentOS 7 是用 RPM 4.11 发布的。在RHEL7上,RPM实用程序在解压时验证单个文件的有效负载内容。

# CentOS 8
CentOS 8 是用 RPM 4.14 发布的。现在,RPM 在开始安装之前验证整个包的内容。
这有很多改进,其中一些值得注意的功能是:
debuginfo包可以并行安装
支持弱依赖关系
支持丰富的或布尔依赖
支持封装文件超过4 GB的大小
支持文件触发器
构建在RHEL8上的包在压缩负载上使用一个新的SHA-256散列。

2.4.15 CUPS日志

# CentOS 7
CentOS 7 系统上,CUPS日志被存储中 /var/log/cups directory.
nobody用户替换nfsnobody

# CentOS 8
CentOS 8 所有类型的CUPS日志都与来自其他程序的日志一起集中记录在systemd journald守护进程中。要访问CUPS日志,请使用“journalctl -u CUPS”命令。

ID为99的nobody用户和组
nfsnobody用户和组对的ID为65534,这也是默认的内核溢出ID。
nobody和nfsnobody用户和组合并到nobodyID(65534)中。

2.4.16 默认版本的控制系统

# CentOS 7
与三个最流行的开源修订控制系统,一起发布:Git、SVN和CVS。

# CentOS 8
Git 2.18
Mercurial 4.8
Subversion 1.10
并发版本系统(CVS)和版本控制系统(RCS)在RHEL8中都不可用。

2.4.17 编程语言版本

# CentOS 7
Python 2 ( 2.7.X)
PHP 5.4
Ruby 2.0.0

# CentOS 8
Python 3
PHP 7.2
Ruby 2.5
Node.js 10

2.4.18 关于容器技术的支持

# CentOS 7
Docker和Docker Registry是 CentOS 7中的Extras订阅频道的一部分。

# CentOS 8
Docker不包括在CentOS 8 .0中。使用容器时,需要使用podman、buildah、skopeo和runc工具。
podman工具已经作为一个完全支持的特性发布了。

2.4.19 开发工具支持

# CentOS 7
OpenJDK8用作默认的Java开发工具包(JDK),而Java 8用作默认的Java版本。

# CentOS 8
提供OpenJDK 11、OpenJDK 8、IcedTea-Web和各种Java工具,如Ant、Maven或Scala。

2.4.20 NFS配置对比

# CentOS 7
默认的NFS配置文件是/etc/sysconfig/nfs

# CentOS 8
NFS配置文件是/etc/ NFS .conf。
当从RHEL7升级时,CentOS 8 尝试自动将所有选项从/etc/sysconfig/nfs转换为/etc/nfs。并不再支持NFS / UDP。

2.4.21 默认的显示服务器

# CentOS 7
默认显示服务器是X.org

# CentOS 8
Gnome display Manager使用的默认显示服务器是Wayland

2.4.22 网络管理

CentOS7

CentOS 7 使用 network 管理网络,NetworkManager 默认是关闭的,CentOS 7 mini 版:两个都是开启的

# CentOS版本
[root@yang ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

# 内核版本
[root@yang ~]# uname -r
3.10.0-1160.24.1.el7.x86_64

# 默认是启动的
systemctl status network

# 默认是关闭的
systemctl status NetworkManager

CentOS8

CentOS 8 没有 network ,使用 NetworkManager 管理网络

修改 ip 地址等操作之后,使用 systemctl restart NetworkManager 重启网络服务

# CentOS版本
[root@VM-0-13-CentOS ~]# cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core)
CentOS Linux release 8.4.2105  # 当前新版本

# 内核版本
[root@VM-0-13-CentOS ~]# uname -r
4.18.0-193.28.1.el8_2.x86_64
4.18.0-305.3.1.el8.x86_64      # 当前新版本

# CentOS 8 没有 network
[root@VM-0-13-CentOS ~]# systemctl status network
Unit network.service could not be found.

2.4.23 yum 与 dnf

CentOS 7 只有 yum,CentOS 8 有 yum 和 dnf

Dandified 像花花公子的

yum dnf
YUM(Yellowdog Updater, Modified) DNF(Dandified YUM)
YUM 使用公开的 API 来解析依赖关系 DNF 使用 libsolv 来解析依赖关系,由 SUSE 开发和维护
API 没有完整的文档 API 有完整的文档
只用 Python 编写 由 C、C++、Python 编写的
YUM 目前在 RHEL 6/7、CentOS 6/7、OEL 6/7 中使用 DNF 目前在 Fedora、RHEL 8、CentOS 8、OEL 8 和 Mageia 6/7 中使用
Yum 只支持基于 Python 的扩展 DNF 支持各种扩展
因为 API 没有正确的文档化,所以创建新功能非常困难 API 有良好的文档,因此很容易创建新的功能
在同步存储库的元数据时,YUM 使用了过多的内存 DNF 在同步存储库的元数据时,使用的内存较少
由于使用公开 API 的原因,Yum 依赖性解析变得迟钝 DNF 使用满足性算法来解决依赖关系解析(它是用字典的方法来存储和检索包和依赖信息)
总的来说,在很多因素的影响下,表现不佳 从内存使用量和版本库元数据的依赖性解析来看,性能都不错
YUM 将在没有验证的情况下更新软件包 DNF 更新:在 DNF 更新过程中,如果包中包含不相关的依赖,则不会更新
如果有存储库不可用,YUM 会立即停止 如果启用的存储库没有响应,DNF 将跳过它,并继续使用可用的存储库处理事务
在 Yum 中则不同 dnf update 和 dnf upgrade 是等价的
Yum 为这种行为提供了一个选项 安装包的依赖关系不更新
Yum 不会这样做 清理删除的包:当删除一个包时,DNF 会自动删除任何没有被用户明确安装的依赖包
Yum 也会这样做 存储库缓存更新计划:默认情况下,系统启动后 10 分钟后,DNF 每小时会对配置的存储库检查一次更新。这个动作由系统定时器单元 dnf-makecache.timer 控制
Yum 不允许你删除运行中的内核 内核包不受 DNF 保护。不像 Yum,你可以删除所有的内核包,包括运行中的内核包
Yum 不使用单独的库来执行这些功能 libsolv:用于解包和读取资源库。hawkey: 为 libsolv 提供简化的 C 和 Python API 库。librepo: 提供 C 和 Python(类似 libcURL)API 的库,用于下载 Linux 存储库元数据和软件包。libcomps: 是 yum.comps 库的替代品。它是用纯 C 语言编写的库,有 Python 2 和 Python 3 的绑定。
Yum 包含 56000 行代码 DNF 包含 29000 行代码
YUM 由 Zdenek Pavlas、Jan Silhan 和团队成员开发 DNF 由 Ales Kozumplik 开发

2.4.24 防火墙

CentOS 7:firewalld 底层使用iptables

CentOS 8:nftables 取代 iptables

# 但是使用都是一样的
systemctl status firewalld

2.4.25 网络时间同步

CentOS 7 支持 NTP 和 Chronyd

CentOS 8 只支持 Chronyd,不支持 NTP

2.4.26 docker 与 podman

CentOS 8 默认安装 podman

docker 与 podman 的区别

  1. docker需要以root用来启动守护进程(docker daemon)。
  2. Podman可以以非特权用户启动容器,但是无法系统上执行任何需要 root 权限的命令。这包括映射主机上低于 1024 的任何特权端口号,以及默认的 HTTP 端口号 80。
  3. docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLI的child process(子进程),而是Docker Engine的child process。
    Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podman的child process。
  4. 因为docke有docker daemon,所以docker启动的容器支持–restart策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动。
  5. docker需要使用root用户来创建容器,但是podman不需要。

2.5 CentOS 8 的新特性

2.5.1 elevator内核命令行参数被废弃

早期的RHEL版本中使用了elevator内核命令行参数来设置所有设备的磁盘调度程序。在CentOS 8 中,该参数被弃用。
上游Linux内核已经取消了对elevator参数的支持,但是出于兼容性的原因,CentOS 8 中仍然可以使用它。

2.5.2 网络脚本被废弃

在CentOS 8 中,网络脚本在默认情况下不可用。有一个新版本的ifup和ifdown正在使用,这将需要NetworkManager守护进程运行,并在后端使用nmcli。

如果需要早期的网络脚本,则必须安装“network-scripts”包。

2.5.3 新内核支持5级paging

在早期版本中,有4级分页实现,可以处理48/46位虚拟/物理地址,并且物理总线上限为64TB。在即将推出的Intel处理器中,这些限制已经扩展到57/52位的虚拟/物理内存寻址,具有128 PiB的虚拟地址空间和4 PB的物理内存容量。

2.5.4 Anaconda支持CentOS 8 中的系统目标

以前,Anaconda没有向订阅管理器提供系统用途信息。在CentOS 8.0中,您可以在安装期间使用Anaconda的system purpose窗口或Kickstart的syspurpose命令设置系统的预期目标。

2.5.5 CodeReady Linux构建器仓库

有一个CodeReady Linux构建器存储库,可用于所有RHEL订阅。这为开发人员提供了额外的包。CodeReady Linux构建器存储库中包含的包不支持生产使用。

2.5.6 改进版本的OpenSSH

OpenSSH的版本是7.8p1,与早期版本相比有很多改进。其中一些是:

不再支持SSH version 1.
默认不开启DNS支持.
最小可接受RSA密钥大小设置为1024位.
移除 ‘Blowfish’, ‘CAST’, ‘RC4’ ciphers.
默认关闭DSA 公钥算法.

2.5.7 RHEL8中不支持数字用户名和组名

useradd和groupadd命令不允许用户名和组名完全由数字字符组成。这是RHEL7中不支持的特性,现在RHEL8完全不支持它。

2.5.8 默认情况下,securetty现在是禁用的

默认情况下禁用了securetty PAM模块,并且从 CentOS 8 中删除了/etc/securetty文件。

2.5.9 改进的TCP网络栈

CentOS 8 拥有TCP网络栈版本4.18,可以提供更高的性能、更好的可伸缩性和更稳定的性能。性能得到了提高,特别是在繁忙的TCP服务器与高进入连接速率。

除了新的TCP栈之外,还有两种新的TCP拥塞算法。在大多数情况下,BBR和NV可以提供比cubic更低的延迟和更好的吞吐量。

2.5.10 高可用性(HA)

在CentOS 8中,pcs完全支持Corosync 3集群引擎和用于集群通信的Kronosnet (knet)网络抽象层。无法将集群节点从RHEL7就地升级到RHEL8。

2.5.11 lvmlockd取代了clvmd

用于管理共享存储逻辑卷的clvmd已被删除,取而代之的是lvmlockd(lvm lock 守护进程)

2.6 安装 Vmware Tools

vmtools 安装后,可以在 windows下更好的管理 vm 虚拟机

  1. 可以直接粘贴命令,在 windows 和 centos 系统之间
  2. 可以设置 windows 和 centos 的共享文件夹

小提示:

一般使用远程工具连接服务器,一般不会使用虚拟机或到本地服务器上操作,建议使用远程操作。

安装 VmTools 步骤:

虚拟机 --> 安装 Vmware Tools 即可,Vmware 16 基本不需要手动去安装,会自动安装。

Vmware 16 版本以下的,可能需要手动安装,装一下也简单。

终端复制、粘贴快捷键默认是 Ctrl + Shift + CCtrl + Shift + V

桌面版

  1. 进入centos

  2. 点击 vm 菜单 -> install vmware tools

  3. centos 会出现一个 vm 的安装包

  4. 点击右键解压, 得到一个安装文件

  5. 进入该 vm 解压的目录,该文件在 /root/桌面/vmware-tools-distrib/ 下

  6. 安装 ./vmware-install.pl

  7. 全部使用默认设置即可

  8. 需要reboot重新启动即可生效

2.7 设置共享文件夹

设置共享文件夹,可以便于 Windows 和 Linux 操作系统之间的文件传输共享。但在实际开发中,一般不会用到,传输文件(文件的上传和下载)一般是使用远程方式完成。

Windows 端:

菜单 -> Vmware(虚拟机) -> Setting(设置),点击选项,选择 always enable(总是启用) 即可

Linux 之日常必备技能_第86张图片

Linux 端:

共享目录在 CentOS 的 /mnt/hgfs/ 路径下,我这里未共享,所以,没有目录

在这里插入图片描述

2.8 Linux 目录结构

Linux 的文件系统:采用级层式树状目录结构(倒栽的树状结构),最上层是根目录/,在根目录下可以创建其它目录。
Linux 世界有一句经典的语句:在 Linux 世界里,一切皆文件

Linux 之日常必备技能_第87张图片

bin -> usr/bin

  • bin (/usr/bin、/usr/local/bin)b:Binary的缩写,存放最经常使用的命令。

boot

  • 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

dev

  • 类似于windows的设备管理器,把所有的硬件用文件的形式存储。

etc

  • 所有的系统管理所需要的配置文件和子目录 my.conf

home

  • 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

lib -> usr/lib

  • 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

lib64 -> usr/lib64

  • linux 64位(可以uname -a查看下内核是否位64位的)用的lib库,和/lib是一样的:
    /lib :标准程序设计库,/lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。又叫动态链接共享库,作用类似windows里的.dll文件。 这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。
    /lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动)。

lost + found

  • 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

media

  • linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

mnt

  • 是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。

opt

  • 是给主机额外安装软件所摆放的目录。如:安装 ORACLE 数据库就可放到该目录下,默认为空。

proc

  • 是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。

root

  • 为系统管理员,也称为超级权限者(超级管理员)的用户主目录。

run

  • /run 是各种各样数据的家园。例如,如果你查看 /run/user,你会注意到一组带有数字名称的目录。可以看到每个目录与当前登录的用户或显示管理器 gdm 相关。数字代表他们的 UID。每个目录的内容都是运行中的进程所使用的文件。
    /run/user 文件只是你在 /run 中找到的一小部分。还有很多其他文件。有一些文件包含了各种系统进程的进程 ID。
    其中某些子目录只能使用 root 权限访问,例如 /run/sudo。例如,以 root 身份运行我们可以看到一些与真实或尝试使用 sudo 相关的文件。
    为了与 /run 的变化保持一致,一些运行时数据的旧位置现在是符号链接。/var/run 现在是指向 /run 的指针,/var/lock 指向 /run/lock 的指针,可以保证旧的引用按预期工作。

sbin -> usr/sbin

  • sbin(/usr/sbin、/usr/local/sbin)s:Super User的意思,存放系统管理员使用的系统管理程序。

selinux

  • [security-enhanced linux] 360,SELinux是一种安全子系统,它能控制程序只能访问特定文件。

srv

  • service缩写,该目录存放一些服务启动之后需要提取的数据。

sys

  • 是 linux 2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统

tmp

  • 是用来存放一些临时文件的。

usr

  • 是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与 windows 下的 program files 目录。

  • local

    • 是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。

var

  • 中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。

3.Linux 操作

3.1 Linux 远程登录

说明:公司开发时候,具体的情况是这样的

  1. linux 服务器是开发小组共享的.
  2. 正式上线的项目是运行在公网的.
  3. 因此程序员需要远程登录到 centos 进行项目管理或者开发.
  4. 画出简单的网络拓扑示意图(帮助理解)
  5. 远程登录客户端有 Xshell 7,Xftp 7 , 我们学习使用 Xshell 7 和 Xftp 7, 其它的远程工具大同小异.

简图:

Linux 之日常必备技能_第88张图片

sshd 服务默认是开启的,该服务会监听 22 号端口

# 查看 sshd 服务状态
service sshd status

# 或者 查看 systemd 系统中所有服务,这里往下翻也可以看到 sshd 服务的状态
systemctl

XShell、XFtp 安装很简单,一路 Next,傻瓜式安装即可,就省略了。

# 查看 Linux 的ip地址
ifconfig 或 ip addr

新建会话,输入服务器 ip、用户名和密码,即可登录

3.2 远程上传下载文件

同理,傻瓜式安装好 XFtp 7 即可,打开新建会话,输入服务器 ip、用户名和密码,将文件拖到服务器窗口上即可

3.3 vi 和 vim 编辑器

3.3.1 vi 和 vim 简介

所有的Linux 系统都会内建vi 文本编辑器。

Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

3.3.2 vi 与 vim 的常用三种模式

3.3.2.1 正常模式

以vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、粘贴』来处理你的文件数据。【使用快捷键

3.3.2.2 插入模式

按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可.【输入编辑内容

3.3.2.3 命令行模式

在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim 、显示行号等的动作则是在此模式中达成的!【输入命令,保存退出

3.3.2.4 vi 和 vim 模式的相互切换

# ================ 【一般正常模式】 ================
# 复制、拷贝当前行
yy

# 复制当前向下的几行
5yy   # 复制当前行向下的 5 行

# 粘贴
p

# 删除当前行
dd

# 删除当前第几行
5dd     # 删除当前行下的 5 行

# 到达文件首行或末尾
G     # 文档末尾
gg    # 文档首行

# 撤销
u

# 移动光标到指定行
:set nu     # 首先显示行号【命令模式】
20          # 输入跳转行数
shift + g   # 按快捷键

# ================ 【命令模式】 ================

# 保存退出
:wq

# 不保存退出
:q

# 强制退出
:q!

# 查找文档中某个关键词
/hello   # 查找与 hello 相关的关键词

# 取消搜索关键词高亮显示
:noh 或 :nohlsearch     # 仅取消当前搜索时的高亮状态,再次搜索关键词时,仍会高亮显示

# 设置或取消文件行号
:set nu       # 设置行号
:set nonu     # 取消行号

Linux 之日常必备技能_第89张图片

3.3.2.5 vi 和 vim 键盘图

Linux 之日常必备技能_第90张图片

Linux 之日常必备技能_第91张图片

3.4 关机与重启

# 立即关机
shutdown now 或 shutdown -h now  # 立即关机
halt     # 等价于关机

# 自定义时间关机
shutdown -h 1      # "hello,1 分钟后关机"

# 立即重启
shutdonw -r now    # 现在重启系统
reboot             # 现在重启系统

# 将内存数据同步到磁盘
sync

# 注:无论关机还是重启,记得先运行 sync 命令,将内存中的数据写到磁盘中,防止数据丢失

3.5 用户登录与注销

登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用”su - 用户名’命令来切换成系统管理员身份.

在提示符下输入logout即可注销用户

# 切换用户登录
su - root    # 切换到 root 用户,普通用户切到管理员用户,需要密码,反之,不要

# 注销用户
logout   # 注:logout 注销指令在图形化界面终端,运行级别无效,在运行级别 3 下有效.

3.6 用户管理

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

Linux 的用户至少需要属于一个组。【一个用户至少属于一个组,一个组可以有多个用户

Linux 之日常必备技能_第92张图片

3.6.1 添加用户

当创建用户成功后,会自动的创建和用户同名的家目录

也可以通过 useradd -d 指定目录新的用户名,给新创建的用户指定家目录

# 添加用户
useradd 用户名       # 默认创建与用户名同名的家目录,然后将用户添加进去
useradd -d 用户名    # 创建指定家目录的用户

# 添加用户时,指定用户组
useradd -g 用户组 用户名  # 指定组,然后将用户添加进入

3.6.2 指定密码给用户

# 指定密码给用户【相当于修改密码】
passwd 用户名

3.6.3 删除用户

只有root用户才能创建用户(useradd xxx)、删除用户(userdel xxx),其它用户无此权限。

# 删除用户
userdel 用户名     # 删除用户,保留家目录(工作中,一般不会删除用户的家目录)
userdel -r 用户名  # 删除用户和家目录

当我们想删除某个用户的时候,出现 userdel: user admin is currently used by process xxx,可能的原因是你创建用户user1之后,使用su命令切换到user1用户下,之后又想删除user1用户,使用su root切换到root用户下,使用userdel user1。出现上述情况的根本原因在于切换回root用户之后,user1还被某个进程占用。

解决方案:ctrl+d(退出当前用户)

第一次使用ctrl+d退出root用户,回到user1用户;

第二次使用ctrl+d退出user1用户,此时会返回到root用户(再按ctrl+d退出登陆连接),此时使用userdel user1正常删除。

Linux 之日常必备技能_第93张图片

3.6.4 查询用户信息

# 查询用户信息
id 用户名    # 当查询的用户不存在时,返回:无此用户

在这里插入图片描述

3.6.5 切换用户

在操作 Linux 中,如果当前用户的权限不够,可以通过 su - 用户名,切换到高权限用户,比如:root

# 切换用户
su - 用户名    # 普通用户(低权限用户)切换到管理员用户(高权限用户),需要输入密码,反之,不需要

Linux 之日常必备技能_第94张图片

3.6.6 查看当前登录用户

# 查看当前登录用户
whoami      # 返回当前登录的用户名称
who am i    # 返回当前登录的用户信息

Linux 之日常必备技能_第95张图片

3.6.7 用户组

类似于角色,系统可以对有共性的多个用户进行统一的管理。

3.6.7.1 添加组

# 添加组
groupadd 组名

在这里插入图片描述

3.6.7.2 删除组

# 删除组
groupdel 组名

在这里插入图片描述

3.6.7.3 修改组

# 修改组
usermod -g 组名 用户名     # 修改用户所在组
usermod -d 目录名 用户名    # 修改用户登录的初始目录

Linux 之日常必备技能_第96张图片

3.6.8 用户和组的相关文件

3.6.8.1 /etc/passwd 用户配置文件

用户(user)的配置文件,记录用户的各种信息

每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

# 编辑 /etc/passwd 文件(或者cat查看一下也可以,这里为了有颜色好看点,就使用vim了)
vim /etc/passwd

Linux 之日常必备技能_第97张图片

3.6.8.2 /etc/shadow 口令置文件

口令的配置文件,已加密处理过

每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

# 编辑 /etc/shadow 文件(或者cat查看一下也可以,这里为了有颜色好看点,就使用vim了)
vim /etc/shadow   # 默认是只读,最后面的标志看不到了

Linux 之日常必备技能_第98张图片

3.6.8.3 /etc/group 组配置文件

组(group)的配置文件,记录Linux包含的组的信息

每行含义:组名:口令:组标识号:组内用户列表

# 编辑 /etc/group 文件(或者cat查看一下也可以,这里为了有颜色好看点,就使用vim了)
vim /etc/group   # 默认是只读,组内用户列表已作处理,看不到了

Linux 之日常必备技能_第99张图片

3.7 常用命令

3.7.1 指定运行级别

3.7.1.1 基本介绍

运行级别

centos 6.8 版本,还是运行级别的方式,7、8 版本改为启动模式

0:# 关机
1:# 单用户【找回丢失密码】
2:# 多用户状态无网络服务
3:# 多用户状态有网络服务
4:# 系统未使用保留给用户
5:# 图形界面
6:# 系统重启
/usr/lib/systemd/system/ctrl-alt-del.target
# 常用运行级别是 3 和 5,要修改默认的运行级别可改文件 /etc/inittab 的 id:5:initdefault: 这一行中的数字
init [012356]    # 0~6,除了4,因为4暂未使用

示意图

Linux 之日常必备技能_第100张图片

现在的版本有些改动,如:8 版本

# 查看 /etc/inittab 下都写了些啥
vim /etc/inittab     

# 它不再像旧版本那样设置 id num:initdefault,而是设置当前默认启动模式的方式【root用户权限下】:systemctl set-default multi-user.target (命令行) 或 systemctl set-default graphical.target (图形化)

可以发现,inittab文件已经不再使用了,而是使用systemd了。

Linux 之日常必备技能_第101张图片

查看与设置当前默认模式

# 查看当前默认启动模式
systemctl get-default     # 最小安装:multi-user.target,图形化界面:graphics.target
vim /etc/systemd/system/default.target  # 默认的启动模式配置文件 /etc/systemd/system/default.target

# 设置当前默认启动模式:
# 设置为 命令行,设置后,它会删除 default.target,并创建一个快捷方式,链接到multi-user.target
systemctl set-default multi-user.target
# Removed /etc/systemd/system/default.target.
# Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.

# 设置为 图形化界面,设置后,它会删除 default.target,并创建一个快捷方式,链接到multi-user.target
systemctl set-default graphical.target
# Removed /etc/systemd/system/default.target.
# Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.

# 通过查看 /etc/systemd/system/default.target,发现 Description、Requires、After几个变量改变了
# 这是 命令行 模式时的配置
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes

# 通过查看 /etc/systemd/system/default.target,发现 Description、Requires、After几个变量改变了
# 这是 图形化界面 模式时的配置
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes

在这里插入图片描述

3.7.1.2 小结

3.7.1.2.1 CentOS 6.x 版本

运行级别方式,在 /etc/inittab 运行级别配置文件中,设置与修改

# 如:设置为 运行级别 3 的模式
init 3      # num:0~6,除了4

# 或者编辑 /etc/inittab 这个运行级别配置文件
vim /etc/inittab
id:3:initdefault:      # 数字0~6,别设置为4就行,因为暂还未使用

# 命令行 --> 图形化界面
# 若需要转为图形化界面,需要执行
yum groupinstall "GNOME Desktop"

# 然后执行命令
startx

# 图形化界面 --> 命令行
Ctrl + Alt + F2

Linux 之日常必备技能_第102张图片

3.7.1.2.2 CentOS 7.x/8.x 版本

运行级别方式,而是启动模式,由 systemctl set-default xxx.target 命令修改当前默认启动模式,在 /etc/systemd/system/default.target 当前默认启动模式配置文件中,可以查看得到。所以,若仍然使用以前的 init num(num:0~6,除了4) 的方式,就无任何效果。

# 查看当前默认启动模式
systemctl get-default

# 修改当前默认启动模式
# 命令行 --> 图形化界面
systemctl set-default graphical.target

# 图形化界面 --> 命令行
systemctl set-default multi-user.target

# 去这个配置文件查看就知道了
vim /etc/systemd/system/default.target

3.7.1.3 找回 root 密码

3.7.1.3.1 CentOS 6.x 找回 root 密码

方法:进入单用户模式(root不需要密码就可以登录),修改 root 密码。

# 启动 Linux 系统

Linux 之日常必备技能_第103张图片

在这里插入图片描述

# 按任意键进入菜单,如:enter
enter

Linux 之日常必备技能_第104张图片

# 启动菜单,输入 e 键
e

Linux 之日常必备技能_第105张图片

# 选择 kernel xxx,再次输入 e 键
e

Linux 之日常必备技能_第106张图片

# 空 1 格,输入数字 1(进入单用户模式)
 1

Linux 之日常必备技能_第107张图片

# 告诉内核要进入单用户模式的运行级别,而不进入其它运行级别,按b引导启动,进入单用户模式,自动进入 root 用户(无需密码)
b

Linux 之日常必备技能_第108张图片

# 修改 root 用户新密码,正常重启即可
passwd root   # 输入新密码并确认即可

# 修改好 root 新密码后,正常重启系统即可
reboot

Linux 之日常必备技能_第109张图片

3.7.1.3.2 CentOS 7.x/8.x 找回 root 密码

方法:修改 Linux 系统启动 kernel 参数

# ① 启动 Linux 系统,选择 kernel 启动菜单
e

Linux 之日常必备技能_第110张图片

# ② 按上下左右键,定位到 linux($root)行,在行尾追加内核参数:rd.break
rd.break

Linux 之日常必备技能_第111张图片

# ③ 按下 Ctrl + X 启动系统,进入 switch_root 模式
# 修改原则:switch_root模式:将原有系统的 / 根目录以ro(只读模式)挂载在 /sysroot/ 目录下,修改root密码,必须将原有系统的 / 根目录挂载为rw(可读写模式)

Linux 之日常必备技能_第112张图片

# ④ 查看挂载的 /sysroot 根分区信息
mount -l |grep /sysroot

在这里插入图片描述

# ⑤ 重挂 /sysroot g为 rw(可读写模式)
mount -o remount,rw /sysroot

# 再次查看挂载的 /sysroot 目录信息
mount -l |grep /sysroot

Linux 之日常必备技能_第113张图片

# ⑥ 切换 /sysroot 根分区
chroot /sysroot

在这里插入图片描述

# ⑦ 修改root密码(无需输入原root密码),直接修改为新的 root 密码即可。
passwd root  # 密码要求必须是 8 位以上的复杂密码

Linux 之日常必备技能_第114张图片

提示:【无需操作,了解即可】

Linux 之日常必备技能_第115张图片

# ⑧ 自动重置 /etc/passwd SELinux 文件上下文,autorelabel 这个名称一定不要写错了,一旦写错了,就登录不进,需要重新来一遍。
touch /.autorelabel

在这里插入图片描述

# ⑨ 退出 shell,会回到 switch_root 模式
exit

在这里插入图片描述

# ⑩ 退出 switch_root 模式,系统会自动重启,等待重启完成即可
exit

# 小提示:
# ① 重置 root 密码需要访问到 kernel 启动菜单,远程重置 root 密码需要远程控制卡访问物理 Console。
# ② 在第 ⑩ 步系统重启过程中,一定要耐心等待系统自送完成重启过程,千万不要关闭系统或硬重启操作。

Linux 之日常必备技能_第116张图片

在这里插入图片描述

3.7.2 帮助命令

3.7.2.1 man 获取帮助文档

当对某个指令不熟悉时,可以使用 Linux 提供的帮助命令,来了解这个指令的使用方法。

# 获取帮助文档
man 命令或配置文件   # 如:man ls

# 查看帮助文档时,按如下键
enter              # 一行一行的往下浏览,按上、下键也是一样的
pagedown(PgDn)    # 下一页
pageup(PgUp)      # 上一页
G                  # 跳转到文档首行(开头)
gg                 # 跳转到文档末尾(结束)
h(help)           # 请求去帮助命令查看
q(quit)           # 退出查看帮助文档

在这里插入图片描述

Linux 之日常必备技能_第117张图片

3.7.2.2 help 获取 shell 内置命令的帮助信息

# 获取 shell 内置命令的帮助信息
help 命令     # 如:help cd

Linux 之日常必备技能_第118张图片

3.7.2.3 通过搜索引擎获取帮助

退而求次的方法。

以上两个帮助命令可以获取指令帮助信息,但需要简单的英语翻译的过程,耗时且有些不通俗易懂,尤其是需要快速获取结果时,或者英语不太佳的,不建议慢慢去一句一句看,直接搜索或看一下翻译,可以快速解决问题,有时间了,再慢慢去深究原文档都可以。

通用的一些搜索方法

国内:百度、知乎、博客、公众号、订阅号、B站、阿里巴巴等搜索,可以快速获取帮助信息,一般可以解决 80% 以上的问题。

国外:谷歌、雅虎、微软、NHN、eBay、时代华纳、Ask、Yandex等,有些可能需要科学(自行解决,不作介绍)。

专业人士:仍未解决,可以像相关专业人士、官方文档或在线解答咨询。

网页标签【可选】:当第一次搜索到关键信息答案时,若觉得重要,可以保存一下网页,添加一下标签,标签中自行分类整理,自己方便浏览即可。这样做是为了方便下次查询,当需要再次查询时,直接输入相关网址/域名信息,会快速列出相关网页,或者直接在标签中选择也可以,这样既精确了搜索目标,节省了大量时间,又减少了像第一次那样去一个一个网页找想要的答案。

好习惯,好生活

Linux 之日常必备技能_第119张图片

搜索用得好,一点没烦恼。

3.7.3 文件目录类

3.7.3.1 pwd 显示当前工作目录的绝对路径

# 显示当前工作目录的绝对路径
pwd     # 可以看到当前在哪个路径下

在这里插入图片描述

3.7.3.2 ls 列出当前目录的文件和目录

# 列出当前目录的文件和目录【后面可以带路径】
ls               # 默认仅显示当前目录的所有文件和目录【不包括隐藏文件和隐藏目录】
ls -a            # 显示当前目录的所有文件和目录【包括隐藏的】
ls -l 或 ll       # 以列表的方式显示当前目录的所有文件和目录【不包括隐藏的】
ls -lh 或 ll -h   # 以列表的方式显示当前目录的所有文件和目录【不包括隐藏的,按照人类的方式显示,h:human】
ls -al            # 以列表的方式显示当前目录的所有文件和目录【包括隐藏的】
ls -ahl           # 以r列表的方式显示当前目录的所有文件和目录【包括隐藏的】

ls

Linux 之日常必备技能_第120张图片

ls -a

Linux 之日常必备技能_第121张图片

ls -l

Linux 之日常必备技能_第122张图片

ll:ls -l 的简写

Linux 之日常必备技能_第123张图片

ls -al

Linux 之日常必备技能_第124张图片

3.7.3.3 cd 切换到指定目录/路径

可以叫目录,也可以叫路径,若是路径,叫路径,似乎更好好些,是文件夹或者目录,叫目录,似乎更好些。

绝对路径与相对路径

# 绝对路径:从根目录开始定位 到 目标目录 的路径,如:/root/admin           # 意味着切到根目录下的root目录下的admin目录
# 相对路径:从当前工作目录开始定位 到 目标目录 的路径,如:./admin/../temp  # 意味着切到当前目录下的admin目录下的上一级目录下的temp目录

. … ~ /

# .:一个点(英文符号),代表当前路径,如:cd ./temp          # 意味着切到当前目录下的temp目录
# ..:两个点(英文符号),代表返回上一级目录,如:cd ../admin  # 意味着切到当前目录的上一级目录下的admin目录
# ~:一个波浪符号,代表用户的家目录,如:cd ~                 # 意味着切到当前用户的家目录(主目录)
# /:① 表示根目录,如:cd /  # 切到根目录  ② 表示路径间隔符,如:cd ./etc/ # 切到当前目录下的etc目录

# 注:切换目录/路径时,cd 后面目录的/ 可写可不写,建议写上,如:cd /etc  <==>  cd /etc/ 【建议】

切到指定目录/路径

# 切换到指定目录
cd [选项] 要切换的路径     # [option]:[选项]

在这里插入图片描述

3.7.3.4 mkdir 创建目录

mkdir(make directory):用于创建目录

# 创建指定目录
mkdir [选项] 要创建的目录    # 创建一级目录
mkdir -p 要创建的多级目录       # 创建多级目录

Linux 之日常必备技能_第125张图片

3.7.3.5 rmdir 删除空目录

# 删除空目录
rmdir [选项] 要删除的空目录      # 删除空目录
rm -rf 要删除的目录                # 强制删除文件和目录

Linux 之日常必备技能_第126张图片

3.7.3.6 touch 创建空文件

# 创建空文件
touch 文件名称

Linux 之日常必备技能_第127张图片

3.7.3.7 cp 拷贝文件或目录到指定目录

# cp 指令拷贝文件到指定目录
cp [选项] 源文件/目录 目标目录/路径    # 拷贝源文件/目录到指定的目标目录/路径【拷贝单个源文件/目录,不包括子目录】
cp -r 源文件/目录 目标目录/路径        # 拷贝源文件/目录到指定的目标目录/路径【递归复制整个目录,包括子目录】
\cp 源文件/目录 目标路径              # 强制覆盖不提示【不包括子目录】
\cp -r 源文件/目录 目标目录/路径       # 强制覆盖不提示【包括子目录】

Linux 之日常必备技能_第128张图片

3.7.3.8 rm 移除文件或目录

# 移除(删除)文件或目录
rm [选项] 要删除的文件或目录  # 删除单个文件或目录
rm -r 要删除的文件或目录      # 递归删除整个目录
rm -f 要删除的文件或目录      # 强制删除不提示
rm -rf 要删除的文件或目录     # 强制删除不提示【递归删除不提示】

Linux 之日常必备技能_第129张图片

3.7.3.9 mv 移动或重命名文件与目录

# 移动或重命名文件与目录
mv 旧文件 新文件       # 重命名文件与目录
mv 源路径 目标路径     # 移动文件与目录

Linux 之日常必备技能_第130张图片

3.7.3.10 cat 查看文件内容

# 查看文件内容
cat [选项] 要查看的文件
cat -n 要查看的文件      # 查看文件内容【显示行号】
cat 要查看的文件 | more  # 将要查看的文件通过管道符交给 more,进行分页显示
cat -n 要查看的文件 | more  # 将要查看的文件通过管道符交给 more,进行分页显示【显示行号】

Linux 之日常必备技能_第131张图片

cat 只能浏览文件,不能修改文件,为了浏览方便,一般会带上管道命令| more

Linux 之日常必备技能_第132张图片

3.7.3.11 more 全屏分页显示文件内容

more指令是一个基于 vi 编辑器的文本过滤器,它以全屏幕的方式,按页显示文本文件的内容。

# 全屏分页显示文件内容
more 要查看的文件

more 指令内置的一些快捷键

操作 描述
Space(空格键) 向下翻一页
Enter(回车键) 向下翻一行
q(quit) 立即退出 more,不再显示该文件内容
Ctrl + B 向上滚动一屏
Ctrl + F 向下滚动一屏
=(等于号) 输出当前行的行号
:f 输出文件名和当前行的行号

Linux 之日常必备技能_第133张图片

3.7.3.12 lsss 分屏查看文件内容

less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容(分屏显示),对于显示大型文件具有较高的效率。

# 分屏查看文件内容
less 要查看的文件     # 一般,大型日志文件,推荐 less

less 的一些快捷操作

操作 描述
Space(空格键) 向下翻一页
PageDown(PgDn) 向下翻一页
PageUp(PgUp) 向上翻一页
/字符串 向下搜索字符串:n:向下查找 N:向上查找
?字符串 向上搜索字符串:n:向上查找 N:向下查找
q(quit) 立即退出 less

Linux 之日常必备技能_第134张图片

3.7.3.13 > 输出重定向 和 >> 追加

>:输出重定向,新内容会覆盖原来的内容【覆盖写】

> >:追加,在内容末尾追加新内容,不会覆盖原来的内容【追加写】

# 输出重定向和追加【如果文件不存在,就创建文件,如果文件存在,就覆盖或追加文件】
ls -l > 文件         # 将显示列表的内容,写入文件中去【覆盖写】
ls -al >> 文件       # 将显示列表的内容,追加到文件的末尾【追加写】
cat 文件1 > 文件2     # 将文件1的内容覆盖到文件2
cat 文件1 >> 文件2    # 将文件1的内容追加到文件2
echo "内容" >> 文件   # 将内容追加到文件中去

Linux 之日常必备技能_第135张图片

3.7.3.14 echo 输出内容到控制台

# 输出内容到控制台
echo [选项] [输出内容]

在这里插入图片描述

3.7.3.15 head 显示文件头部内容

# head用于显示文件的开头部分内容,默认情况下head指令显示文件的前 10 行内容
head 文件       # 默认查看文件头前 10 行内容
head -n 8 文件  # 查看文件头前 8 行内容,num:可以是任意行数 

Linux 之日常必备技能_第136张图片

3.7.3.16 tail 显示文件尾部内容

# tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的尾 10 行内容。
tail 文件          # 默认查看文件尾 10 行内容
tail -n 8 文件     # 查看文件尾 8 行内容,num:可以是任意行数
tail -f 文件       # 实时追踪该文档的所有更新,看日志较多

Linux 之日常必备技能_第137张图片

在这里插入图片描述

3.7.3.17 ln 创建软连接

软链接也成为符号链接,类似于 windows 里的快捷方式,主要存放了链接其他文件的路径

小提示:当使用 pwd 指令查看目录时,看到的是 软链接 所在目录。

# 创建一个软连接
ln -s [原文件或目录] [软链接名]     # 给原文件创建一个软链接
rm -rf 软链接名称     # 删除软连接时,软连接名称后面不要带斜杠

Linux 之日常必备技能_第138张图片

Linux 之日常必备技能_第139张图片

3.7.3.18 history 查看已执行过的历史命令

查看已经执行过历史命令,也可以执行历史指令

# 查看已执行过的历史命令
history          # 显示所有已执行过的历史命令
history 6        # 显示最近已执行过的 6 个历史命令,num:自定义显示已执行过的历史命令条数
!203             # 执行历史编号为 203 的指令,执行哪条历史命令,就选哪个历史命令编号

Linux 之日常必备技能_第140张图片

3.7.4 时间日期类

3.7.4.1 date 显示和设置当前日期

# 显示当前日期【建议加上""】
date                          # 显示当前系统日期(默认格式:星期 月 日 时:分:秒 时区 年)
date +%Y 或 date "+%Y"        # 显示当前年份
date +%m 或 date "+%m"         # 显示当前月份
date +%d 或 date "+%d"         # 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S"      # 显示年月日时分秒,年月日的 - 连接符可以任意替换,时分秒的 : 连接符也是一样的道理,可任意替换

# 设置日期
data -s 字符串时间               # 设置当前系统日期,如:date -s "2020-02-20 20:20:20",如要恢复时间同步,请看下面设置系统时间与同步网络时间

Linux 之日常必备技能_第141张图片

3.7.4.1.1 CentOS 7 设置系统时间与网络时间同步

一些相关时间的基本概念

格林尼治标准时间、世界协调时、中国标准时间和夏令时

  1. 世界协调时(UTC)

    整个地球分为二十四个时区,每个时区都有自己的当地时间。在国际无线电通信的场合,为了统一,使用统一的时间,称为世界协调时(UTC,Universal Time Coordinated)。

  2. 格林尼治时间(GMT)

    格林威治标准时间(Greenwich Mean Time)是指位于英国伦敦郊区皇家格林威治天文台的标准时间,因为本初子午线被定义为经过那里的子午线。(UTC和GMT时间基本相同,本文不做区分)

  3. 科技委(CST)

    中国标准时间( China Standard Time)

    GMT + 8 = UTC + 8 = CST

  4. 钻杆测试(DST)

    夏令时(Daylight Saving Time)是指夏天太阳升起较早时,时钟向前拨一小时,以提前日光的使用。(国内不使用)

硬件时钟和系统时钟

  1. 硬件时钟(RTC)

    RTC(实时时钟)或CMOS时钟,通常由主板上的电池供电,在服务器切断后将继续运行。仅保存日期和时间值,不能保存时区和夏令时设置。

  2. )系统时钟

    通常,服务器开始时会复制实时时钟时间,然后独立运行,节省时间、时区和夏令时设置。

# Linux的时间分为System Clock(系统时间)和Real Time Clock (硬件时间,简称RTC)。
# 系统时间:指当前Linux Kernel中的时间。
# 硬件时间:主板上有电池供电的时间。

# 手动设置时间到一个时间点,可能与当前网络的时间有误差。
date             # 查看系统时间
date -set        # 设置系统时间

hwclock          # 查看硬件时间,如:2021-11-09 15:53:21.800643+08:00
hwclock --set --date = 'xx:xx'  # 设置硬件时间

# hwclock man   # 查看帮助文档
--date=date_string
This option must be used with the --set or --predict functions, otherwise it is ignored.
hwclock --set --date='16:45'
hwclock --predict --date='2525-08-14 07:11:05'

# 设置系统时间同步同步到网络时间
yum -y install ntp ntpdate    # ① 安装ntpdate工具
ntpdate cn.pool.ntp.org       # ② 设置系统时间与网络时间同步
hwclock --systohc             # ③ 将系统时间写入硬件时间
hwclock -w 或 clock -w        # ④ 强制系统时间写入 CMOS 中,防止重启失效

# ========================= 【以上部分为了解,具体配置在下面】 =========================

# 若在安装完Centos Linux操作系统之后,点击系统的时间发现与现在所使用的时间不一致,相差有8小时,而在安装系统的时候,选择的时区是上海,但是CentOS Linux默认的bios时间是utc时间(UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委员会规定和推荐,并由国际时间局(BIH)负责保持的以秒为基础的时间标度。UTC相当于本初子午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示.北京时间比UTC时间早8小时,以1999年1月1日0000UTC为例,UTC时间是零点,北京时间为1999年1月1日早上8点整。),所以我们在时间上面相隔了8个小时。这个时候bios的时间和系统的时间当然是不一致,一个代表 utc 时间,一个代表cst(+8时区),即上海的时间。

# 下面将操作系统的时间进行同步,【这种方法不建议】

# 编辑系统时间配置文件
vi /etc/sysconfig/clock   

# 修改内容如下
ZONE="Asia/Shanghai"
UTC=false            #设置为false,硬件时钟不于utc时间一致
ARC=false

# 时区设置为上海时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 校对时间
ntpdate 192.43.244.18

# 安装 ntp 服务器
yum install ntp

# 设置硬件时间和系统时间一致并校准
/sbin/hwclock --systohc
3.7.4.1.2 CentOS 8 设置系统时间与网络时间同步
# 修改时区
timedatectl set-timezone Asia/Shanghai

# 查看时间是否正确
date

# 安装 chrony
yum -y install chrony

# 修改配置文件
vi /etc/chrony.conf 或 vim /etc/chrony.conf

# 配置同步 NTP 服务器时间地址,建议配置二个以上
server ntp.aliyun.com iburst
server cn.pool.ntp.org iburst
server time1.cloud.tencent.com iburst

# 重启服务
systemctl start chronyd.service

# 设置开机启动服务
systemctl enable chronyd.service

# 查看时间同步源,查看时间同步进度
chronyc sources -v

# 小提示:
*   # 说明时间同步完成# 说明时间同步不成功,这时,检查一下防火墙,再看看 chronyd 有没有重启,开启防火墙永久允许 NTP 服务

# 永久允许对外提供NTP时间服务
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

3.7.4.2 cal 查看当前日历

# 查看当前日历
cal [选项]       # 不加选项,默认显示本月日历
cal 2021        # 显示一整年的日历,如:2021年

Linux 之日常必备技能_第142张图片

3.7.5 搜索查找类

3.7.5.1 find 查找指定文件或目录

# 从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
find [搜索范围/路径] [选项]

# 结果返回的是查找文件的路径
find /root -name temp.txt   # 查找 /root 下文件名为 temp.txt 的文件
find /root -name *.txt      # 查找 /root 下文件后缀为 .txt 的所有文件
find /opt -user root        # 查找 /opt 下面用户为 root 的文件
find / -size +10M           # 查找 / 下面文件大于 10M 的文件(+n:大于  -n:小于  n:等于)
find / -size -100240k       # 查找 / 下面文件小于 100240k 的文件(+n:大于  -n:小于  n:等于)

常用选项

选项 功能
-name(文件名) 按照指定的文件名查找文件
-user(用户名) 按照指定用户名查找文件
-size(文件大小) 按照指定文件大小查找文件(+n:大于 -n:小于 n:等于)

Linux 之日常必备技能_第143张图片

3.7.5.2 locate 快速定位文件路径

# 快速定位文件路径,由于 locate 指令基于数据库进行查询,所以,第一次运行前,必须使用 updatedb 指令创建 locate 数据库。
updatedb         # 创建 locate 数据库
locate 搜索文件    # 搜索指定文件,返回文件路径

在这里插入图片描述

小提示,若有报错:

# 若执行 updatedb,报错:-bash: updatedb: command not found

在这里插入图片描述

解决方法

# 安装 mlocate
yum -y install mlocate

# 再次使用 updatedb 更新
updatedb

# 即可查找文件
locate xxx

3.7.5.3 grep 过滤查找和管道符 |

grep 过滤查找,管道符 “|”,表示将前一个命令的处理结果输出传递给后面的命令处理。

# 过滤查找
grep [选项] 查找内容源文件

# 如:
cat temp.txt | grep 宇宙        # 过滤查找 temp.txt 文件中,含有"宇宙"的关键词及所在的行
cat temp.txt | grep -n 宇宙     # 过滤查找 temp.txt 文件中,含有"宇宙"的关键词及所在的行,并显示行号
cat temp.txt | grep -ni w      # 过滤查找 temp.txt 文件中,含有"w"的关键字及所在的行,忽略大小写并显示行号

常用选项

选项 描述
-n 显示匹配行及行号
-i 忽略字母大小写

Linux 之日常必备技能_第144张图片

3.7.6 压缩和解压类

3.7.6.1 gzip 和 gunzip 解压缩文件

gzip 用于压缩文件,gunzip 用于解压的

# 解压缩文件
gzip 文件         # 压缩文件,只能将文件压缩为*.gz文件【不保留被压缩源文件】
gunzip 文件.gz    # 解压缩文件【不保留gz压缩包】

Linux 之日常必备技能_第145张图片

3.7.6.2 zip 和 unzip 解压缩文件

zip 用于压缩文件,unzip 用于解压的,这个在项目打包发布中很有用的

# 解压缩文件
zip [选项] xxx.zip 将要压缩的内容     # 压缩文件和目录
unzip [选项] xxx.zip                # 解压缩文件

zip 常用选项

选项 描述
-r 递归压缩,即压缩目录

unzip 常用选项

选项 描述
-d 指定解压文件目录/路径

Linux 之日常必备技能_第146张图片

3.7.6.3 tar 打包或解压缩

tar 指令是打包指令,最后打包后的文件是.tar.gz 的文件。根据不同的参数,即可实现打包压缩,又可实现解压缩。

# 打包
tar [选项] xxx.tar.gz 要打包的文件或目录      # 打包目录,压缩后的文件格式.tar.gz
tar -zcvf xxx.tar.gz 要打包的文件或目录      # 打包压缩
tar -zxvf xxx.tar.gz                      # 解压 tar.gz 包
tar -zxvf xxx.tar.gz -C 解压的指定目录      # 解压 tar.gz 包到指定目录下【指定的解压目录必须要存在】

常用选项

选项 描述
-c 打包为 xxx.tar 文件
-v 显示详细信息,显示打包压缩或解压过程
-f 指定打包压缩文件名称
-z 打包压缩
-x 解压 xxx.tar 文件

Linux 之日常必备技能_第147张图片

3.8 常用安装工具

# 最小化安装的,一般需要安装的工具,如:vim(编辑)、ifconfig(网络配置ip)、wget(下载)、chrony(同步网络时间)、mlocate(locate数据库)、zip(压缩文件)、tree(目录结构)、psmisc(进程树)、iptables-services(防火墙:iptables-services 与 firewalld 二选一)等
yum -y install vim net-tools wget chrony mlocate zip tree psmisc ... 
# 仅举例几个,不作过多解释

3.9 组管理与权限管理

3.9.1 组的基本介绍

在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。

  1. 所有者
  2. 所在组
  3. 其它组
  4. 改变用户所在的组

3.9.2 文件或目录所有者

一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。

# 查看文件或目录的所有者
ls -ahl

# 修改文件或目录所有者
chown 用户名 文件或目录名

Linux 之日常必备技能_第148张图片

3.9.3 文件或目录所在组

默认情况下,当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。

# 查看文件/目录所在组
ls -ahl

# 修改文件所在组
chgrp 组名 文件或目录名

Linux 之日常必备技能_第149张图片

3.9.4 文件或目录的其它组

除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

# 改变用户所在组,在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组。
usermod -g 组名 用户名    # 修改用户所在组
usermod -d 目录名 用户名   # 修改用户登录的初始目录

在这里插入图片描述

3.9.5 文件或目录的权限

0-9位

  1. 第 0 位:确定文件类型【d(目录)、-(普通文件)、l(软连接文件)、c(字符设备:键盘、鼠标…)、b(块文件:硬盘…)】
  2. 第 1-3 位:确定所有者(该文件的所有者)拥有该文件的权限。【User】
  3. 第 4-6 位:确定所属组(同用户组的)拥有该文件的权限,【Group】
  4. 第 7-9 位:确定其他用户拥有该文件的权限。【Other】
# ls -l 中显示的内容如下:
drwxr-xr-x. 2 admin admin     6 Nov  9 15:01 admin
-rw-r--r--. 1 root  root  13495 Nov  9 20:23 adminpackage.zip
drwxr-xr-x. 4 root  root     31 Nov  9 20:25 admins
drwxr-xr-x. 3 root  root     19 Nov  8 22:38 admins0
drwxr-xr-x. 2 root  root     23 Nov  8 22:50 admins1
-rw-------. 1 root  root   1564 Nov  8 10:36 anaconda-ks.cfg
-rw-r--r--. 1 root  root    168 Nov  9 09:45 cal.txt
-rw-r--r--. 1 root  root   9537 Nov  9 10:47 Poems.txt
drwxr-xr-x. 2 root  root      6 Nov  9 21:15 tem
drwxr-xr-x. 2 root  root     56 Nov  9 21:16 temp
-rw-r--r--. 1 root  root    806 Nov  9 09:39 temp1.txt
-rw-r--r--. 1 root  root    372 Nov  9 00:32 temp2.txt
-rw-r--r--. 1 root  root    573 Nov  9 20:54 temp.tar.gz
-rw-r--r--. 1 root  root   3493 Nov  9 19:23 temp.txt

Linux 之日常必备技能_第150张图片

探索文件其它组的用户权限后面一个点的含义的过程

# 经过一番实践,得出最终结果是:这个点表示存在 SELinux 的安全标签
.      # 表示存在 SELinux的安全标签

# ============= 接下来,看看这个结果怎么来的 =============

# getenforce来查看SELinux的运行模式
[root@root ~]# getenforce
Enforcing                    # 说明SELinux是启动的

# 随便创建个文件
[root@root ~]# touch tempfile
[root@root ~]# ls -l tempfile
-rw-r--r--. 1 root root 0 Nov 9 19:23 tempfile       # 可以看到这个文件的其它组的用户权限后面是有点的

# 接下来,关闭这个 SELinux,然后重新启动系统
# 编辑 /etc/sysconfig/selinux 配置文件
[root@root ~]# vim /etc/sysconfig/selinux
# SELINUX=enforcing
SELINUX=disabled       # 将其值修改为:disabled

# 保存退出,重新启动系统.
:wq
reboot

# 重新进入系统后,再来看一下 SELinux 的运行模式
[root@root ~]# getenforce
Disabled

# 然后创建一个文件
[root@root ~]# touch tempfile1
[root@root ~]# ls -l tempfile*       # 比较这两个文件:发现一个带点,一个不带点
-rw-r--r--. 1 root root 0 Nov 9 19:23 tempfile
-rw-r--r--  1 root root 0 Nov 9 19:28 tempfile1

# 再来看看这两个文件的安全上下文有没有什么区别
# ① 关掉 SELinux,查看创建的文件的安全上下文
[root@root ~]# ls -Z tempfile*    # 发现:关掉 SELinux 的情况下,创建的文件没有安全上下文,也就没有这个点.
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 tempfile
-rw-r--r--  root root ?                                tempfile1

# ② 开启 SELinux,重启系统,查看创建的文件的安全上下文
[root@root ~]#  ls -Z tempfile*   # 重启后发现:tempfile1 文件的其它组的用户权限,后面自动多了一个点.,也自动加上安全标签
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 tempfile
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 tempfile1 

Linux 的文件或目录权限,有rwx三种
r(Read,读取,4):文件,具有 读取查看 文件内容的权限;目录,具有 读取查看 目录内容的权限。
w(Write,写入,2):文件,具有新增修改文件内容的权限,若要删除该文件,前提是对该文件所在的目录有w权限,否则,不可以删除该文件;目录,具有新建删除修改重命名/移动目录内文件的权限。
x(eXecute,执行,1):文件,具有 执行 文件的权限;目录,具有 进入 目录的权限。

-:没有权限

  1. 目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
  2. 只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
  3. 一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
  4. 目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件
  5. 新建文件默认权限777,新建目录默认权限666。在unix或者linux中,每创建一个文件或者目录时,这个文件或者目录都具有一个默认的权限,比如目录755,文件644,这些默认权限是通过“umask”权限掩码控制的。一般默认的umask值为022,其最终效果就是新创建的目录权限为755,文件权限为644。所以只要修改了用户的umask值,就可以控制默认权限。

小结一下

# rwx作用到文件
1) [ r ]代表可读(read): 可以读取,查看
2) [ w ]代表可写(write): 可以修改,但不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
3) [ x ]代表可执行(execute):可以被执行

# rwx作用到目录
1) [ r ]代表可读(read): 可以读取,ls查看目录内容
2) [ w ]代表可写(write): 可以修改,目录内创建 + 删除 + 重命名目录
3) [ x ]代表可执行(execute):可以进入该目录

如果还没弄明白,再看一下面,或许会有更进一步的了解,明白了,就跳过。


linux ls -l 详解

Linux 之日常必备技能_第151张图片

以root的家目录为例:

Linux 之日常必备技能_第152张图片

可以看到,用 ls -l 命令查看某一个目录会得到一个7个字段的列表。

第1行:总计(total)

Total后面的数字是指当前目录下所有文件所占用的空间总和。可以使用ls –hl查看,也可使用ls –ahl查看。

第1字段: 文件属性字段

-rw-r--r-- 1 root root 762 07-29 18:19 exit

文件属性字段总共有10个字母组成;第一个字符代表文件的类型

字母**“-”**表示该文件是一个普通文件

字母**“d”**表示该文件是一个目录,字母"d",是dirtectory(目录)的缩写

**注意:**目录或者是特殊文件,这个特殊文件存放其他文件或目录的相关信息

字母**“l”**表示该文件是一个链接文件。字母"l"是link(链接)的缩写,类似于windows下的快捷方式

字母**“b”**的表示块设备文件(block),一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,是很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块(通常一个数据块的大小为512字节)

字母为**“c”**表示该文件是一个字符设备文件(character),一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节。

字母为**“p”**表示该文件为命令管道文件。与shell编程有关的文件。

字母“s”表示该文件为sock文件。与shell编程有关的文件。

在此重申下文件链接这个重要概念

链接文件的概念类似于windows里的快捷方式。多个链接文件同时指向一个“源文件”。链接文件分为硬链接或符号链接两种。

在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软连接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接不可用(cat那个软链接文件,则提示“没有该文件或目录“)

硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除源文件的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收,因此文件的内容不会被删除,相当于删除了一个索引。

硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。

软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接

第1字符的后面9个字母表示该文件或目录的权限位。

r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute)

其中前三个表示文件拥有者的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限。

比如:

-rw-r--r-- 1 root root 762 07-29 18:19 exit

表示文件的拥有者root对文件有读写权限,其他人(同组用户和其他用户只有读的权限)

另外,权限组还有一些特殊的表示法:

[root@localhost ~]# ll /usr/X11R6/bin/XFree86
-rws--x--x 1 root root 1960262 2003-02-28 /usr/X11R6/bin/XFree86

s表示这个是网络接口程序"s"是socket的缩写。该程序在运行过程中会打开一个网络接口。

其他UNIX类系统如FreeBSD中还有t权限,表示一个临时(temporary)文件

#ls -l /tmp可以看到这样的权限:drwxrwxrwt 它的最后一位是字母"t"

第2字段:文件硬链接数

-rw-r--r-- 1 root root 762 07-29 18:19 exit

如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数,

第2字段的值为1,说明这个文件只有exit这一个文件名。即只有一个指向该链接的硬链接。。

如果使用ln,做一个指向该文件的硬链接再查看该文件,该文件的第2字段就会变成2

Linux 之日常必备技能_第153张图片

此时exit 和aexit称为互为硬链接。他们指向同一个文件,无论是修改哪一个文件,另一个里也做相应的变化,因为实际上他们指向同一个文件(即同一文件的不同文件名)

互为硬链接的文件具有相同的文件节点。

在这里插入图片描述

可以看出,这两个文件具有相同的文件节点号:162302

可以设置符号链接(软链接),格式如下

Ln –s 源文件 目标链接文件

Linux 之日常必备技能_第154张图片

注意:软链接时文件节点号不一样;

在这里插入图片描述

如果知道一个文件有多个文件名(链接文件)如何查找他的其他文件名分布在什么地方呢?

可以先用 ls -i 获得它的节点号,然后用find查找,如 /etc/sysconfig/networking/ifcfg-eth0 就具有多个文件名,要查找与它互为硬链接的文件

在这里插入图片描述

得到它的节点号为 452946

再用find查找:

在这里插入图片描述

这样就得到了同一个文件的不同文件名的位置。

第2字段: 链接占用的节点

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -&gt; exit

该字段文件占用一个节点,属于软链接(符号链接)

如果是一个目录,则第2字段表示该目录所含子目录的个数。

新建一个空目录,这个目录的第二字段就是2,表示该目录下有两个子目录。为什么新建的目录下面会有两个子目录呢?

因为每一个目录都有一个指向它本身的子目录"。" 和指向它上级目录的子目录"。。",这两个默认子目录是隐藏的。ls -a可以看到

每次在目录下新建一个子目录,该目录第2字段的值就增1,但是新建一个普通文件该字段值不增加。

第3字段:文件(目录)拥有者

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -&gt; exit

该字段表示此文件是属于哪个用户。linux类系统都是多用户系统,每个文件都有它的拥有者。只有文件的拥有者才具有改动文件属性的权利。当然, root用户具有改动任何文件属性的权利。对于一个目录来说,只有拥有该目录的用户,或者具有写权限的用户才有在目录下创建文件的权利

如果某一个用户因为某种原因,被删除,而该用户的文件还存在,那么用ls -l 查看该文件将显示一个代表用户存在前ID号的数字。

先创建一个用户test,将其加入wang用户组,并用su切换,使用ls –l查看文件拥有者,随即删除用户test,用root进入test家目录,查看刚刚创建的文件testing。

Linux 之日常必备技能_第155张图片

可以看到,第三字段成了一个数字,这个数字是原test用户的ID号。因为文件系统对每个文件记录文件所有者的ID,而非用户名。

第4字段:文件(目录)拥有者所在的组

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -&gt; exit

一个用户可以加入很多个组,但是其中有一个是主组,就是显示在第4字段的名称。

可以在useradd的时候用-g指定该用户所在的主组,用-G指定其他组

格式如下:Useradd –g 组名 用户名

第5字段: 文件所占用的空间(以字节为单位)

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -&gt; exit

第5字段表示文件大小,如果是一个文件夹(目录),则表示该文件夹的大小。请注意是文件夹本身的大小,而不是文件夹以及它下面的文件的总大小。

很多人不能理解文件夹是一个特殊的文件的含义,这样的话理解文件夹大小的含义就比较困难了。

第6字段:文件(目录)最近访问(修改)时间

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -&gt; exit

文件创建的时间可以通过touch命令来修改。如:

[root@localhost ~]# touch exit

可以把exit的创建时间修改为当前时间,另外,一个文件还有最后访问时间,最后修改时间等属性。

这些属性可以用ls 的其它参数显示出来。

第7字段:文件名

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

如果是一个符号链接,那么会有一个 “->" 箭头符号,后面根一个它指向的文件名


3.9.6 chmod 修改文件或目录的权限

通过 chmod 指令,可以修改文件或者目录的权限。

Linux 之日常必备技能_第156张图片

3.9.6.1 方式 ①:使用 + 、-、= 变更权限

# 使用 + 、-、= 变更权限
u:所有者
g:所在组
o:其它组
a:所有组(u、g、o 的总和)

# 如:
chmod u=rwx,g=rx,o=x 文件或目录名   # 给所有者授予读、写、执行权限,所在组授予读、执行权限,其它组授予执行权限
chmod o+w 文件或目录名              # 给其它组增加写权限
chmod a-x 文件或目录名              # 给所有组减去执行权限

Linux 之日常必备技能_第157张图片

3.9.6.2 方式 ②:通过数字变更权限

# 通过数字变更权限
r=4
w=2
x=1
rwx=4+2+1=7

# 如:
chmod u=rwx,g=rx,o=x 文件或目录名   # 给所有者授予读、写、执行权限,所在组授予读、执行权限,其它组授予执行权限
chmod 751 文件或目录名              # 相当于 751

Linux 之日常必备技能_第158张图片

3.9.7 chown 修改文件或目录所有者及所在组

使用 root 用户修改

chown newowner file               # 改变文件的所有者
chown newowner:newgroup file      # 改变用户的所有者和所在组
-R                                # 如果是目录则使其下所有子文件或目录递归生效
chown -R newowner file            # 改变文件的所有者【递归所有子目录】
chown -R newowner:newgroup file   # 改变用户的所有者和所在组【递归所有子目录】

Linux 之日常必备技能_第159张图片

3.9.8 chgrp 修改文件或目录的所在组

使用 root 用户修改

基本语法

chgrp newgroup file       # 改变用户的所在组
-R                        # 如果是目录则使其下所有子文件或目录递归生效
chgrp -R newgroup file    # 改变用户的所在组【递归所有子目录】

Linux 之日常必备技能_第160张图片

3.10 定时任务调度

crond 是工具,是linux的一个定时执行的服务项,可以通过crontab 命令添加或者编辑需要定时执行的任务。

crontab 是一个命令 qs,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。因此,crond的概念和crontab是不可分割的。

crond 与 crontab 详解

crontab是什么?

  1. 定时任务软件种类

    at    适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。
    crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现
    anacron 无法周期性执行,只能以天为周期,但有个特点,在关机状态下未>执行的任务,下次开机时可以补上执行

    注:crontab为最常用的定时任务。

  2. crontab工作

    运行linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)默认系统中可以登陆的用户,都可以使用crontab定义计划任务。不过,可以通过/etc/cron.allow文件限制权限。

  3. crontab支持两种状态:

    a.直接编写计划任务;
    b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定。
    crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

Linux下的任务调度分为两类,系统任务调度用户任务调度

  1. 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
    /etc/crontab 文件内容如下:

    前四行是用来配置crond任务运行的环境变量。

    第一行:SHELL变量指定了系统要使用哪个shell,这里是bash

    第二行:PATH变量指定了系统执行命令的路径

    第三行:MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户

    第四行:HOME变量指定了在执行命令或者脚本时使用的主目录

    在这里插入图片描述

  2. 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

使用者权限文件

# 该文件中所列用户不允许使用 crontab 命令
/etc/cron.deny

# 该文件中所列用户允许使用 crontab 命令
/etc/cron.allow

# 所有用户 crontab 文件存放的目录,以用户名命名
/var/spool/cron/

crontab 文件的含义

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段。

# 格式如下:
minute   hour   day   month   week   command

# 其中:
minute      # 表示分钟,可以是从0到59之间的任何整数。
hour        # 表示小时,可以是从0到23之间的任何整数。
day         # 表示日期,可以是从1到31之间的任何整数。
month       # 表示月份,可以是从1到12之间的任何整数。
week        # 表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command     # 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

# 在以上各个字段中,还可以使用以下特殊字符:
星号(*)     # 代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,)     # 可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-)     # 可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/)   # 可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

crond 服务

/sbin/service crond start      # 启动服务
/sbin/service crond stop       # 关闭服务
/sbin/service crond restart    # 重启服务
/sbin/service crond reload     # 重新载入配置

# 查看 crontab 服务状态
service crond status

# 手动启动 crontab 服务
service crond start

# 查看 crontab 服务是否已设置为开机启动
ntsysv

# 设置为开机自动启动
chkconfig –level 35 crond on

crontab 命令详解

# 命令格式
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

# 命令功能
通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

# 命令参数
-u user  # 用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file     # file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e       # 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l       # 显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r       # 从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i       # 在删除用户的crontab文件时给确认提示。

常用方法

  1. 创建一个新的crontab文件

    在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$ HOME目录下的. profile文件,在其中加入这样一行:

    EDITOR=vi; export EDITOR
    

    然后保存并退出。不妨创建一个名为 cron的文件,其中是用户名,例如, davecron。在该文件中加入如下的内容。

          # (put your own initials here)echo the date to the console every
          # 15minutes between 6pm and 6am
          0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
    
    # 保存并退出。确信前面5个域用空格分隔。
    

    在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为cron命令的参数:

         $ crontab davecron
    

    现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。

    同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。

  2. 列出crontab文件

    为了列出crontab文件,可以用:

         $ crontab -l
    
         0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty1
    

    你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对crontab文件做一备份:

         $ crontab -l > $HOME/mycron
    

    这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。

  3. 编辑crontab文件

    如果希望添加、删除或编辑crontab文件中的条目,而E D I TO R环境变量又设置为v i,那么就可以用v i来编辑crontab文件,相应的命令为:

         $ crontab -e
    

    可以像使用v i编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。

    我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

    	    # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
    
    	     30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;
    

    现在保存并退出。最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。

    现在让我们使用前面讲过的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
    
    	    # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
    
    	    30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;
    
  4. 删除crontab文件

    要删除crontab文件,可以用:

         $ crontab -r
    
  5. 恢复丢失的crontab文件

    如果不小心误删了crontab文件,假设你在自己的$ H O M E目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/,其中是用户名。如果由于权限问题无法完成拷贝,可以用:

         $ crontab <filename>
    
    # 其中,是你在$ H O M E目录中副本的文件名。
    

    建议在自己的$ H O M E目录中保存一个该文件的副本。我就有过类似的经历,有数次误删了crontab文件(因为r键紧挨在e键的右边)。这就是为什么有些系统文档建议不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件。

    有些crontab的变体有些怪异,所以在使用crontab命令时要格外小心。如果遗漏了任何选项,crontab可能会打开一个空文件,或者看起来像是个空文件。这时敲delete键退出,不要按,否则你将丢失crontab文件。

  6. 使用实例

    实例1:每1分钟执行一次command

    命令:

    * * * * * command
    

    实例2:每小时的第3和第15分钟执行

    命令:

    3,15 * * * * command
    

    实例3:在上午8点到11点的第3和第15分钟执行

    命令:

    3,15 8-11 * * * command
    

    **中间有空格,不要忘了

查看 cron 运行日志
看 /var/log/cron.log这个文件就可以,可以用tail -f /var/log/cron.log观察

在这里插入图片描述

3.10.1 crond 任务调度(守护进程)

crontab 进行定时任务的设置

任务调度:是指系统在某个时间执行的特定的命令或程序。

任务调度分类

  1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
  2. 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。

基本语法

# 定时任务的设置
crontab [选项]

# 设置任务调度文件
/etc/crontab

# 设置个人任务调度
crontab –e

# 接着输入任务到调度文件,如:
*/1 * * * * ls –l /etc/ > /tmp/to.txt     # 意思是:每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt 命令

常用选项

选项 描述
-e 编辑 crontab 定时任务
-l 查询 crontab 任务(列出当前有哪些任务调度)
-r 删除当前用户所有的 crontab 任务(终止任务调度)

5 个占位符

占位符 含义 范围
第 1 个 * 一小时当中的第几分钟(minute) 0 ~ 59
第 2 个 * 一天当中的第几小时(hour) 0 ~ 23
第 3 个 * 一个月当中的第几天(day) 1 ~ 31
第 4 个 * 一年当中的第几月(month) 1 ~ 12
第 5 个 * 一周当中的星期几(week) 0 ~ 7(0 和 7 都代表星期日)

特殊符号

特殊符号 含义
* 代表任何时间。如:第一个 *,代表一小时中每分钟都执行一次命令。
, 代表不连续的时间。如:0 8,12,16 * * * 命令,代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。如:0 5 * * 1-6 命令,代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次。如:* /10 * * * * 命令,代表每隔10分钟就执行一遍命令

特定时间执行任务案例

时间 含义
45 22 * * * 命令 在22点45分执行命令
0 17 * * 1 命令 每周1的17点0分执行命令
0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。
注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

案例 1:每隔1分钟,就将当前的日期信息,追加到 /root/temptask/datelog 文件中

# 创建一个目录,用于存放执行脚本后,产生的文件,如:mkdir /root/temptask
mkdir /root/temptask

# 编写一个 shell(脚本) 文件
vim /root/datetask1.sh

# 编写命令(要执行的任务,即真正要干的事),如下:
date >> /root/temptask/datelog  # 将当前的日期信息,追加到 /root/temptask/datelog 文件中
:wq      # 保存退出

# 授予 datetask1.sh 可执行权限
chmod 744 datetask1.sh

# 编辑 crontab 定时任务
crontab -e

# 调用脚本,内容如下:
*/1 * * * * /root/datetask1.sh    # 每隔1分钟执行 /root/datetask1.sh 脚本
:wq      # 保存退出

Linux 之日常必备技能_第161张图片

案例 2:每隔1分钟,将当前日期和日历都追加到 /root/temptask/datelog2 文件中

# 创建一个目录,用于存放执行脚本后,产生的文件,如:mkdir /root/temptask
mkdir /root/temptask

# 编写一个 shell(脚本) 文件
vim /root/datetask2.sh

# 编写命令(要执行的任务,即真正要干的事),如下:
date >> /root/temptask/datelog2  # 将当前的日期信息,追加到 /root/temptask/datelog2 文件中
cal >> /root/temptask/datelog2   # 将当前的日历信息也追加进去
:wq      # 保存退出

# 授予 datetask2.sh 可执行权限
chmod 744 datetask2.sh

# 编辑 crontab 定时任务
crontab -e

# 调用脚本,内容如下:
*/1 * * * * /root/datetask2.sh    # 每隔1分钟执行 /root/datetask2.sh 脚本
:wq      # 保存退出

Linux 之日常必备技能_第162张图片

案例 3: 每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件 /root/temptask/myqldb.bak 中。

# 创建一个目录,用于存放执行脚本后,产生的文件,如:mkdir /root/temptask
mkdir /root/temptask

# 编写一个 shell(脚本) 文件
vim /root/mysqldbtask.sh

# 编写命令(要执行的任务,即真正要干的事),如下:【改为自己要备份的mysql登录用户和密码即可】
/usr/local/mysql/bin/mysqldump -u mysql用户 -pmysql密码 testdb >> /root/temptask/myqldb.bak  # 将当前的日期信息,追加到 /root/temptask/myqldb.bak 文件中
:wq      # 保存退出

# 授予 mysqldbtask.sh 可执行权限
chmod 744 mysqldbtask.sh

# 编辑 crontab 定时任务
crontab -e

# 调用脚本,内容如下:
0 2 * * * /root/mysqldbtask.sh    # 每隔1分钟执行 /root/mysqldbtask.sh 脚本
:wq      # 保存退出

与前面同理,就不再截图雷同说明

# crond 相关命令
conrtab –r     # 终止任务调度。
crontab –l     # 列出当前有那些任务调度
service crond restart     # 重启任务调度

3.11 磁盘分区与挂载

3.11.1 分区的方式

3.11.1.1 MBR 分区

  1. 最多支持四个主分区
  2. 系统只能安装在主分区
  3. 扩展分区要占一个主分区
  4. MBR最大只支持 2TB,但拥有最好的兼容性

3.11.1.2 GTP 分区

  1. 支持无限多个主分区(但操作系统可能限制,比如:windows 下最多128个分区)
  2. 最大支持18EB的大容量(1 EB = 1024 PB,1 PB = 1024 TB )
  3. windows 7 64位以后支持 gtp

3.11.1.3 windows 下的磁盘分区

Linux 之日常必备技能_第163张图片

计算机 - 管理

win 7

Linux 之日常必备技能_第164张图片

win 10

这里在分区时,都分为主分区了,并未创建逻辑分区,所以,这里看不到逻辑分区。

Linux 之日常必备技能_第165张图片

3.11.1.4 Linux 的分区

3.11.1.4.1 原理简介
  1. Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构, Linux中每个分区都是用来组成整个文件系统的一部分。
  2. Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

图解说明

Linux 之日常必备技能_第166张图片

3.11.1.4.2 磁盘说明
  1. Linux 硬盘分 IDE 硬盘(并口)和 SCSI 硬盘(串口),目前基本上是 SCSI 硬盘
  2. IDE 硬盘的驱动器标识符:hdx~。
    • hd:表示分区所在设备的类型,这指 IDE 硬盘。
    • x:表示盘号。(a:基本盘,b:基本从属盘,c:辅助主盘,d:辅助从属盘)
    • ~:表示分区,前四个分区用数字 1-4 表示,它们是主分区或扩展分区;从5开始就是逻辑分区。例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
  3. SCSI 硬盘的驱动器标识符:sdx~。
    • SCSI 硬盘用 sd 来表示分区所在设备的类型,其余则与 IDE 硬盘表示方法一样。
# 查看当前系统分区和挂载的情况
lsblk      # 可以查看分区大小
lsblk -f   # 较详细些

Linux 之日常必备技能_第167张图片

3.11.1.4.3 挂载的经典案例

案例:以增加一块硬盘(以 2G 为例),并挂载到 /home/newdisk 为例,来熟悉磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。

Linux 之日常必备技能_第168张图片

如何增加一块硬盘

  1. 虚拟机添加硬盘
  2. 分区
  3. 格式化
  4. 挂载
  5. 设置可以自动挂载。

1.虚拟机添加硬盘

点击虚拟机 --> 设置

Linux 之日常必备技能_第169张图片

选择磁盘,点击添加

Linux 之日常必备技能_第170张图片

选择硬盘,点击下一步

Linux 之日常必备技能_第171张图片

选择 SCSI(S),点击下一步

Linux 之日常必备技能_第172张图片

点击创建新虚拟磁盘(V),点击下一步

在这里插入图片描述

以 2G 为例演示,点击下一步

Linux 之日常必备技能_第173张图片

保持默认,点击完成

在这里插入图片描述

点击确定

Linux 之日常必备技能_第174张图片

# 重启系统【
reboot

重启系统前

Linux 之日常必备技能_第175张图片

重启系统后

Linux 之日常必备技能_第176张图片

2.分区

开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。

# 给磁盘分区
fdisk 分区目录

# 如
fdisk /dev/sdb

Linux 之日常必备技能_第177张图片

3.格式化

# 格式化磁盘
mkfs [选项] 分区类型 分区目录

# 如:(ext4:分区类型)
mkfs -t ext4 /dev/sdb1

Linux 之日常必备技能_第178张图片

4.挂载

# 先创建将要挂载到系统的目录,如
mkdir /home/newdisk

# 临时挂载【重启系统,挂载关系会失效】
mount 设备名称 挂载目录
mount /dev/sdb1 /home/newdisk       # 如,将 /dev/sdb1 挂载到 /home/newdisk 目录下

# 永久挂载【重启系统,挂载关系仍在】
vim /etc/fstab     # 编辑 /etc/fstab 记录分区及挂载点的配置文件
:wq                # 保存退出
mount –a           # a:auto(自动挂载的意思),执行后永久挂载生效,即使以后重启系统,这个挂载关系仍然自动成立

# 卸载(取消挂载)
umount 设备名称或挂载目录

# 如:
umount/dev/sdb1 或 umount/newdisk

【临时挂载】

Linux 之日常必备技能_第179张图片

【永久挂载】

Linux 之日常必备技能_第180张图片

重启系统,测试一下,永久挂载是否配置成功
在这里插入图片描述

永久挂载关系仍然成立,挂载成功

Linux 之日常必备技能_第181张图片

3.12 查询磁盘使用情况

3.12.1 查询系统整体磁盘使用情况

# 查询系统整体磁盘使用情况
df -l
df -h
df -lh

Linux 之日常必备技能_第182张图片

3.12.2 查询指定目录的磁盘占用情况

# 查询指定目录的磁盘占用情况
du -h 查询目录/路径    # 默认为当前目录
-s                # 指定目录占用大小汇总
-h                # 带计量单位
-a                # 含文件
--max-depth=1     # 子目录深度(几级子目录,1:最大深度 1 级子目录,2:最大深度为 2 级子目录,...)
-c                # 列出明细的同时,增加汇总值

# 如:查询 /usr 目录及其下面1级子目录(含文件)的磁盘使用情况(列出明细并目录大小汇总)
du -ach --max-depth=1 /usr

Linux 之日常必备技能_第183张图片

3.12.3 磁盘情况之工作实用指令

# 1) 统计 /root 目录下文件的个数
ls -l /root | grep "^-" | wc -l    # ^:定位符  -:文件类型  wc:统计数量,先列所有文件与目录出来,再过滤,保留只含文件类型,最后统计数量

Linux 之日常必备技能_第184张图片

# 2) 统计 /root 目录下子目录的个数
ls -l /root | grep "^d" | wc -l

Linux 之日常必备技能_第185张图片

# 3) 统计 /root 目录下文件的个数,包括子目录里的
ls -lR /root | grep "^-" | wc -l

Linux 之日常必备技能_第186张图片

# 4) 统计目录下目录的个数,包括子目录里的
ls -lR /root | grep "^d" | wc -l

Linux 之日常必备技能_第187张图片

# 5) 以树状显示 /root 目录结构
# 先安装一下tree
yum -y install tree

# 以树状显示 /root 目录结构
tree /root    # 显示指定目录的树状结构
tree          # 默认显示当前目录的树状结构

Linux 之日常必备技能_第188张图片

3.13 网络配置

3.13.1 Linux 网络配置原理图

默认配置的 NAT 模式网络环境

Linux 之日常必备技能_第189张图片

3.13.2 查看网络 IP 和网关

3.13.2.1 修改 IP 地址

编辑 --> 虚拟网络编辑器

Linux 之日常必备技能_第190张图片

选择VMnet8 --> 修改虚拟网卡的 IP 地址,修改子网 IP(根据自己实际需求决定是否需要修改) --> 应用,确定即可

Linux 之日常必备技能_第191张图片

3.13.2.2 查看网关

选择 VMnet8 --> NAT 设置

Linux 之日常必备技能_第192张图片

自定义网关,确定即可

Linux 之日常必备技能_第193张图片

3.13.2.3 查看 windows 中 VMnet8 的网络配置

3.13.2.3.1 方式①:命令行查看
# 进入 DOS 命令窗口
win + R,输入cmd,回车(Enter)

# 查看网络配置
ipconfig

Linux 之日常必备技能_第194张图片

3.13.2.3.2 方式②:图形化界面查看

任务栏右键网络图标 --> 打开"网络和 Internet"设置

Linux 之日常必备技能_第195张图片

点击更改适配器选项

Linux 之日常必备技能_第196张图片

选择 VMnet8 适配器 --> 右键 --> 点击属性

Linux 之日常必备技能_第197张图片

双击 IPv4

Linux 之日常必备技能_第198张图片

自定义配置 IP地址、子网掩码、网关、DNS,配置好确定即可

Linux 之日常必备技能_第199张图片

3.13.2.4 ping 测试主机之间网络连通性

# 测试主机之间网络连通性(Linux ping windows,反之也可以)
ping 主机ip地址    # 测试当前服务器是否可以连接目的主机
ping 网关
ping 外网

# 如:(都没问题就OK了)
ping 192.168.2.18
ping 192.168.155.255
ping baidu.com

以 ping 外网为例,ping 通了结果一样(不丢数据包即可),就不一一雷同截图了

Linux 之日常必备技能_第200张图片

3.13.3 Linux 网络环境配置

3.13.3.1 方法①:自动获取

登陆后,通过界面来设置自动获取 ip

Linux 之日常必备技能_第201张图片

或者 /etc/sysconfig/network-scripts/ifcfg-xxx 网络配置文件为非静态的,未配置静态 IP、网关、DNS等

这种配置方式:

  • 特点:linux 启动后会自动获取 IP。【这种方式可作个人使用,不适用于作工作大环境服务器使用】
  • 缺点:每次自动获取的ip地址可能不一样。【这种方式不适用于作服务器,因服务器的 ip 需要是固定的】

3.13.3.2 方法②:配置静态 IP(指定固定 IP)

直接修改配置文件来指定IP,并可以连接到外网(xxx工程师推荐),编辑 vim /etc/sysconfig/network-scripts/ifcfg-xxx 网络配置文件

# 示例:将 ip 地址配置的静态的,ip 地址:192.168.155.29
# 编辑 vim /etc/sysconfig/network-scripts/ifcfg-xxx 网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-xxx      # ifcfg-后面名称有些是eth0、ens33...,配置都是一样的

# 修改配置内容,如下:【除了要修改配置的几个参数,其它无需修改或配置】
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static              # 修改为静态 IP 的方式
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DEVICE=ens33
ONBOOT=yes                    # 配置系统启动时,网络接口有效(yes)
IPADDR=xxx.xxx.xxx.xxx        # 修改静态 IP
NETMASK=255.255.255.0         # 配置子网掩码
PREFIX=24                     # 配置子网掩码长度
GATEWAY=xxx.xxx.xxx.xxx       # 配置网关
DNS1=xxx.xxx.xxx.xxx          # 配置 DNS
IPV6_PRIVACY=no

# 重启网络服务或者重启系统生效
service network-manager restart    # 方式①:重启网络服务生效【CentOS 7.x 及其以下】
nmcli c reload                     # 方式①:重启网络服务生效【CentOS 8.x 】
service networking restart         # 方式①:重启网络服务生效【Kali Linux(Debian)】
reboot                             # 方式②:重启系统失效

# 用 ip addr 或 ifconfig 查看配置的 ip 情况
ip addr        # 系统自带
ifconfig       # 需要安装 net-tools,即:yum -y install net-tools

# 测试是否配置网络成功【ping 通了表示网络配置成功】
ping 宿主机ip      # ping windows 本机ip
ping 网关          # ping linux 配置的网关
ping 外网          # ping baidu.com  外网如:百度、腾讯等都可以

# ===================== 重启网络服务,报错小提示 =====================
# 【解决报错】Failed to restart network.service: Unit network.service not found.
# 问题描述:使用systemctl restart network 或 service network restart 命令重启网卡失败。
# 简要分析:命令用得不对,导致找不到相应的网卡服务。
# 解决方法:
service network-manager restart    # 方式①:重启网络服务生效【CentOS 7.x 及其以下】
nmcli c reload                     # 方式①:重启网络服务生效【CentOS 8.x 】
service networking restart         # 方式①:重启网络服务生效【Kali Linux(Debian)】
reboot                             # 方式②:重启系统失效

Linux 之日常必备技能_第202张图片

3.13.3.3 ifcfg-xxx 网卡配置文件参数详解

# 指定主机名与 IP 地址

# /etc/hosts
# 常用来存放设备名到IP地址的映射,格式:IP地址 主机名。
# 使用/etc/hosts存放的映射是本机的映射,需要在每台主机上维护。
# 常常用来存放在启动时需要的映射信息:默认网关、主机本身、域名服务器
[root@root ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.170.130.1 root

# 在 /etc/sysconfig/network-scripts/ifcfg-xxx 对网卡的配置文件进行永久性配置
# eth和ens的区别
一个是真实物理网卡,一个是虚拟网络会话,两者之间的关系就是一个真实物理网卡上可以绑定多个虚拟网络会话。eth0是真实物理网卡,ens33是虚拟网络会话。

# 所有可能出现的内容
示例:
[root@root ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=0cad6372-6ae7-4163-b24e-b24b53e54964
DEVICE=ens33
ONBOOT=yes

# 网卡类型,一般是Ethernet,还有其他的如bond,bridge
TYPE=Ethernet

# 获取IP地址的方式,启动的协议,获取配置的方式。
# dhcp表示动态获取
# static或none表示静态手工配置,若想使用本地配置好的IP则应该设置成这个
BOOTPROTO=dhcp

# 是否设置默认路由,yes表示该配置
# 若为yes则可以在该文件通过IPADDR和PREFIX两个参数来设置网关
DEFROUTE=yes

# dns服务器可以在该文件(网卡的配置文件)中设置,也可以在/etc/resolv.conf中设置。
# 若该选项指定为yes,则表示网络启动后加载的dns服务器的位置是从/etc/resolv.conf读取。(大多情况下就在这里设置)
# 若该选项指定为yes,则表示网络启动后加载的dns服务器的位置该文件内的DNS参数,而不是/etc/resolv.conf文件。
PEERDNS=yes

# IP地址相关配置
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy

# 这个参数对应的值是网卡名,是给用户看的
NAME="ens33"

# UUID由以下几部分的组合:
# 当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
# 时钟序列。
# 全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
# 通用唯一识别码,若vmware克隆的虚拟机无法启动网卡可以去除此项
UUID=0cad6372-6ae7-4163-b24e-b24b53e54964

# 系统逻辑设备名
DEVICE=ens33

# 开机启动时是否激活网卡设备
# centos7装完网卡后默认设置成no
ONBOOT=yes

# 以太网硬件地址,mac地址(hardware)。若是vmware克隆的虚拟机无法启动网卡,也要改这个
HWADDR

# 是否通过NetworkManager管理网卡设备
NM_CONTROLLED=yes

# 设置网卡对应的IP地址,网络服务启动,网卡激活后会自动将该地址配置到网卡上
# 不用dhcp的方式拿ip地址的时候指定这个才有意义(BOOTPROTO=static)
IPADDR

# 子网掩码长度
# 不要这么写PREFIX=255.255.255.0
PREFIX=24

# 该网卡配置的IP对应的网关(默认路由)
# 若主机是多网卡设备,该参数只能在一个网卡的配置文件里面出现,也就是说一台机只有一个默认路由
GATEWAY=192.170.130.1

# 主DNS,若这里设置了值,则会优先于/etc/resolv.conf中设置的DNS服务器的地址
# 不建议使用该参数,一般dns都是需要主机全局生效的,所以放在/etc/resolv.conf更加方便批量管理网卡
# 需要和“PEERDNS=no”配合使用
DNS1="192.170.0.5"

# 次dns,若这里设置了则会优先于/etc/resolv.conf中设置的DNS服务器的地址
# 需要和“PEERDNS=no”配合使用
DNS2="192.170.0.6"

# 生产环境中一般用这种方式指定子网掩码
NETMASK=255.255.255.0

# USERCTL=yes/no 是否允许非root用户控制该设备
USERCTL=no

3.14 进程管理

3.14.1 进程基本介绍

  1. 在 Linux 中,每个执行的程序(代码)都称为一个进程,每一个进程都分配一个 ID 号。
  2. 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如:www 服务器。
  3. 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
  4. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

3.14.2 ps 显示系统执行的进程

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数.

# ps 显示系统进程执行的进程
ps
ps -a            # 显示当前终端的所有进程信息
ps -e            # 显示所有进程
ps -f            # 以全格式显示系统进程
ps -u            # 以用户的格式显示进程信息
ps -x            # 显示后台进程运行的参数
ps -aux          # 以用户的格式显示当前系统所有进程信息
ps -aux | more   # 以用户的格式分页显示当前系统所有进程信息
ps -aux | grep 具体进程名称   # 查看具体某个进程的信息,进程名称:如:systemd、sshd...
ps -ef | more    # 以全格式显示当前系统所有的进程,即查看进程的父进程
ps -ef | grep 具体进程名称    # 查看具体某个进程的父进程信息

ps 显示的信息选项

ps 显示的字段 描述
PID 进程识别号
TTY 终端机号
TIME 此进程所消耗 CPU 时间
CMD 正在执行的命令或进程名

ps -aux | more 详解

# 进程的状态【补注】:
S:睡眠
s:该进程是会话的先导进程
N:进程用有比普通优先级更低的优先级
R:正在运行
D:短期等待
Z:僵死进程
T:被跟踪或被停止进程
...
ps -aux | more 显示的字段 描述
USER 用户名称
PID 进程号,进程 ID
PPID 父进程 ID【为了跟 PID 对应,方便理解,所以,放在此处:ps -ef | more 可以查看父进程的信息】
(0:没有父进程,其它数字:分别指向对应的父进程 ID)
%CPU 进程占用 CPU 的百分比
%MEM 进程占用物理内存的百分比
VSZ 进程占用的虚拟内存大小(单位:KB)
RSS 进程占用的物理内存大小(单位:KB)
TTY 使用的终端名称,缩写TT(?:隐藏)
STAT 进程的状态
START 进程的启动时间
TIME 执行进程总计占用 CPU 总时间
COMMAND 启动进程时所用的命令和参数,若过长会截断显示

Linux 之日常必备技能_第203张图片

ps -aux | grep 进程名称

Linux 之日常必备技能_第204张图片

ps -eff | more 详解

# CPU 用于计算执行优先级的因子【补注】:
数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;
数值越小,表明进程是 I/O 密集型运算,执行优先级会提高.
ps -ef more 显示的字段 描述
UID 用户 ID
PID 进程 ID
PPID 父进程 ID
C CPU 用于计算执行优先级的因子。
STIME 进程启动的时间
TTY 使用的终端名称,缩写TT(?:隐藏)
TIME 执行进程总计占用 CPU 总时间
CMD 启动进程所用的命令和参数,过长会截断显示

Linux 之日常必备技能_第205张图片

ps -ef | grep 具体进程名称

Linux 之日常必备技能_第206张图片

Linux 三种风格(Unix、BSD、GNU)下的 ps 参数说明

Linux 系统中使用 GNU ps 命令支持 3 种不同类型的命令行参数:

  • Unix 风格的参数,前面加单破折线;
  • BSD 风格的参数,前面不加破折线;
  • GNU 风格的长参数,前面加双破折线。

Unix 风格

参数 描述
-A 显示所有进程
-N 显示与指定参数不符的所有进程
-a 显示除控进程(session leader)和无终端进程外的所有进程
-d 显示除控进程外的所有进程
-e 显示所有进程
-C cmdlist 显示包含在 cmdlist 列表中的进程
-G grplist 显示组 ID 在 grplist 列表中的进程
-U userlist 显示属主的用户 ID 在 userlist 列表中的进程
-g grplist 显示会话或组 ID 在grplist 列表中的进程
-p pidlist 显示 PID 在 pidlist 列表中的进程
-s sesslist 显示会话 ID 在 sesslist 列表中的进程
-t ttylist 显示终端 ID 在 ttylist 列表中的进程
-u userlist 显示有效用户 ID 在 userlist 列表中的进程
-F 显示更多额外输出(相对 -f 参数而言)
-O format 显示默认的输出列以及 format 列表指定的特定列
-M 显示进程的安全信息
-c 显示进程的额外调度器信息
-f 显示完整格式的输出
-j 显示任务信息
-l 显示长列表
-o format 仅显示有 format 指定的列
-Y 不要显示进程标记(process flag,表明进程状态的标记)
-Z 显示安全标签(security context)信息
-H 用层级格式来显示进程(树状,用来显示父进程)
-n namelist 定义了 WCHAN 列显示的值
-w 采用宽输出模式,不限宽度显示
-L 显示进程中的线程
-V 显示 ps 命令的版本号

其中 -f 显示的完整格式输出信息有:

  • UID:启动这些进程的用户。
  • PID:进程的进程ID。
  • PPID:父进程的进程号(如果该进程是由另一个进程启动的)
  • C:进程生命周期中的CPU利用率
  • STIME:进程启动时的系统时间
  • TTY:进程启动时的终端设备
  • TIME:运行进程需要的累计CPU时间
  • CMD:启动的程序名称

-l 输出的信息还会增加一些:

  • F:内核分配给进程的系统标记
  • S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)
  • PRI:进程的优先级(越大的数字代表越低的优先级)
  • NI:谦让度值用来参与决定优先级
  • ADDR:进程的内存地址
  • SZ:假如进程被换出,所需交换空间的大致大小
  • WCHAN:进程休眠的内核函数的地址

BSD 风格

参数 描述
T 显示跟当前终端关联的所有进程
a 显示跟任意终端关联的所有进程
g 显示所有的进程,包括控制进程
r 仅显示运行中的进程
x 显示所有的进程,甚至包括未分配任何终端的进程
U userlist 显示归 userlist 列表中某用户 ID 所有的进程
p pidlist 显示 PID 在 pidlist 列表中的进程
t ttylist 显示所有关联的终端在 ttylist 列表中的进程
O format 除了默认输出的列之外,还输出由 format 指定的列
X 按过去的 Linux i386 寄存器格式显示
Z 将安全信息添加到输出中
j 显示任务信息
l 采用长模式
o format 仅显示由 format 指定的列
s 采用信号格式显示
u 采用基于用户的格式显示
v 采用虚拟内存格式显示
N namelist 定义在 WCHAN 列中使用的值
O order 定义显示信息列的顺序
S 将数值信息从子进程加到父进程上,比如:CPU 和内存的使用情况
c 显示真实的命令名称(用以启动进程的程序名称)
e 显示命令使用的环境变量
f 用分层格式来显示进程,表明哪些进程启动了哪些进程
h 不显示头信息
k sort 指定用以将输出排序的列
n 和 WCHAN 信息一起显示出来,用数值表示用户 ID 和组 ID
w 为较宽屏幕显示宽输出
H 将线程按进程来显示
m 在进程后显示线程
L 列出所有格式指定符
V 显示 ps 命令的版本号

在BSD风格下的l参数输出的信息基本与Unix一致,但也有一些不一样:

  • VSZ:进程在内存中的大小,以千字节(KB)为单位
  • RSS:进程在未换出时占用的物理内存
  • STAT:代表当前进程状态的双字符状态码

许多系统管理员都喜欢BSD风格的 l 参数。它能输出更详细的进程状态码(STAT列)。双字符状态码能比Unix风格输出的单字符状态码更清楚地表示进程的当前状态。

第一个字符采用了和Unix风格 S 列相同的值,表明进程是在休眠、运行还是等待。第二个参数进一步说明进程的状态。

  • < :该进程运行在高优先级上
  • N :该进程运行在低优先级上
  • L :该进程有页面锁定在内存中
  • s :该进程是控制进程
  • l :该进程是多线程的
  • + :该进程运行在前台

GNU 风格

GNU的参数是长参数。

参数 描述
–deselect 显示所有进程,出了命令行中列出的进程
–Group grplist 显示组 ID 在 grplist 列表中的进程
–User userlist 显示用户 ID 在 userlist 列表中的进程
–group grplist 显示有效组 ID 在 grplist 列表中的进程
–pid pidlist 显示 PID 在 pidlist 列表中的进程
–ppid pidlist 显示父 PID 在 pidlist 列表中的进程
–sid sidlist 显示会话 ID 在sidlist 列表中的进程
–tty ttylist 显示终端设备号在 ttylist 列表中的进程
–user userlist 显示有效用户 ID 在 userlist 列表中的进程
–format format 仅显示由 format 指定的列
–context 显示额外的安全信息
–cols n 将屏幕宽度设置为 n 列
–columns n 将屏幕宽度设置为 n 列
–cumulative 包含已停止的子进程的信息
–forest 用层级结构显示出进程和父进程之间的关系
–headers 在每页输出中都显示列的头
–no-headers 不显示列的头
–lines n 将屏幕高度设为 n 行
–rows n 将屏幕高度设为 n 排
–sort order 指定将输出按哪列排序
–width n 将屏幕宽度设为 n 列
–help 显示补注信息
–info 显示调试信息
–version 显示 ps 命令的版本号

更多详见《Linux命令行与shell脚本编程大全第3版》

3.14.3 kill 或 kill all 终止进程

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。

# 终止进程
kill [选项] 进程号      # 通过进程号杀死进程
killall 进程名称        # 通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

# 常用选项
-9        # 表示强迫进程立即停止

案例1:踢掉某个非法登录用户(如,这里的 admin 用户)

# kill 非法进程
ps -aux | grep sshd    # 查看某个进程的信息
kill 1881              # 根据进程号杀死进程
ps -aux | grep sshd    # 再次查看就没有被kill的进程信息

Linux 之日常必备技能_第207张图片

案例2:终止远程登录服务sshd, 在适当时候再次重启sshd服务

kill 1014    # 根据进程号杀死进程

案例3: 终止多个 gedit 编辑器

killall gedit    # 根据进程名称杀死所有与它相关的进程,如,杀掉父进程,那该父进程下的所有子进程将全部被终止。

案例4:强制杀掉一个终端 bash

# kill -9 强制杀掉某个进程,因有些进程被认为是重要的,所以,kill被忽略了,因此,需要强制杀掉,才可以终止进程
kill -9 3048

3.14.4 pstree 查看进程树

# 查看进程树,需要安装 psmisc,yum -y install psmisc
pstree [选项]       # 可以更加直观的来看进程信息

# 常用选项
-p        # 显示进程的 PID
-u        # 显示进程的所属用户

pstree       # 默认以树状的形式显示进程的用户 id
pstree -p    # 以树状的形式形式显示进程的 pid
pstree -u    # 以树状的形式显示进程的用户 id

# pstree 详解
# pstree指令用ASCII字符显示树状结构,清楚地表达程序间的相互关系。如果不指定程序识别码或用户名称,则会把系统启动时的第一个程序视为基层,并显示之后的所有程序。若指定用户名称,便会以隶属该用户的第一个程序当作基层,然后显示该用户的所有程序。

# 使用ps命令得到的数据精确,但数据庞大,这一点对掌握系统整体概况来说是不容易的。pstree命令正好可以弥补这个缺憾。它能将当前的执行程序以树状结构显示。pstree命令支持指定特定程序(PID)或使用者(USER)作为显示的起始。

pstree [-acGhlnpuUV][-H <程序识别码>][<程序识别码>/<用户名称> 

# 主要参数
-a  # 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示。
-c  # 不使用精简标示法。
-G  # 使用VT100终端机的列绘图字符。
-h  # 列出树状图时,特别标明执行的程序。
-H<程序识别码>  # 此参数的效果和指定"-h"参数类似,但特别标明指定的程序。
-l  # 采用长列格式显示树状图。
-n  # 用程序识别码排序。预设是以程序名称来排序。
-p  # 显示程序识别码。
-u  # 显示用户名称。
-U  # 使用UTF-8列绘图字符。
-V  # 显示版本信息。

Linux 之日常必备技能_第208张图片

3.15 服务管理

3.15.1 服务基本介绍

服务(service) 本质就是进程,是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如:(mysql、sshd、防火墙等),因此,又称为守护进程。

在这里插入图片描述

3.15.2 service 管理指令

# 服务:开启、停止、重启、重载、状态,在 CentOS7.0 后,不再使用 service,而是 systemctl
service 服务名 [start | stop | restart | reload | status]        # CentOS 7.0 以下
systemctl [start | stop | restart | reload | status] 服务名      # CentOS 7.0 以上

3.15.3 firewalld 查看与配置防火墙

# 【两种方式,任一即可】
# ================= 方式① firewalld =================
# 自带【无需安装】
# 查看防火墙状态
sudo systemctl status firewalld

# 查看已开放的端口(ports)
sudo firewall-cmd --list-all

# 添加目标端口到防火墙(防火墙关闭就不用配置了)
sudo firewall-cmd --add-port=3306/tcp --permanent             # 如:3306 端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent    # 如:8080 端口
# 参数
--zone                 # 作用域
--add-port=8080/tcp    # 添加端口,格式为:端口/通讯协议
--permanent            # 永久生效,没有此参数重启后失效,不会永久生效

# 重启防火墙
sudo firewall-cmd --reload

# 关闭防火墙
# ① 临时关闭
sudo systemctl stop firewalld

# ② 永久关闭,reboot后生效
sudo systemctl disable firewalld

# 查看当前所有 tcp 端口
sudo netstat -ntlp                # 查看当前所有 tcp 端口
sudo netstat -ntulp | grep 3306   # 查看具体 3306 端口的使用情况

# ================= 方式② iptables 方式 =================
# 【需要安装】iptables-services
yum -y install iptables-services

# 启动 iptables
systemctl status iptables     # 状态
systemctl enable iptables     # 开机自启
systemctl disable iptables    # 禁用开机自启
systemctl start iptables      # 开启
systemctl stop iptables       # 停止
systemctl restart iptables    # 重启

3.15.4 windows cmd 窗口查看某个 Linux 端口是否在监听

# windows cmd 窗口查看某个 Linux 端口是否在监听,且可以访问
win+R,输入 cmd
telnet ip port

# 如:
telnet 192.133.167.23 3306

可能会报错:‘telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

Linux 之日常必备技能_第209张图片

原因:系统中的 telnet 客户端是关闭状态。即:Win10 默认没有安装 telnet 功能。

解决方法:进入控制面板 --> 程序(或 程序和功能) --> 启用或关闭Windows功能 --> 勾选Telnet客户端 --> 确定,打开系统中的 telnet 客户端,即可

# 进入控制面板
按 win 徽标键,输入 control(或 控制面板),打开(或 回车)

Linux 之日常必备技能_第210张图片

# 找到程序和功能
点击 程序和功能

Linux 之日常必备技能_第211张图片

# 启用或关闭 Windows 功能
点击 启用或关闭 Windows 功能

Linux 之日常必备技能_第212张图片

# 勾选 Telnet Client,默认未勾选
勾选 Telnet Client

Linux 之日常必备技能_第213张图片

# 勾选确定后,再次测试 telnet 192.133.167.23 3306
telnet 192.133.167.23 3306

Linux 之日常必备技能_第214张图片

3.15.5 查看服务名

3.15.5.1 方式① setup 查看系统服务

# 查看系统服务【防火墙配置、键盘配置、网络配置、系统服务、验证配置】(*:自启动,按空格键取消自启动)
setup

# 可能会报错:-bash: setup: command not found,说明没有安装 setuptool 软件(因是 Minimal 安装模式)
# 解决方法:安装 setuptool(setuptool 软件)、ntsysv(系统服务管理)、system-config-securitylevel-tui(setup 中的防火墙设置)、system-config-network-tui(setup中配套的网络设置)、system-config-date(时区)、authconfig-gtk(setup 工具配套的 authconfig-gtk)、system-config-keyboard(setup 工具配套的键盘配置组件)
yum -y install setuptool ntsysv system-config-securitylevel-tui system-config-network-tui system-config-date authconfig-gtk system-config-keyboard

# 设置 setup 为中文,设置好后重启系统。
echo LANG="zh_CN.UTF-8" > /etc/sysconfig/i18n
echo SUPPORTED="zh_CN.UTF-8:zh_CN:zh" >> /etc/sysconfig/i18n
echo SYSFONT="latarcyrheb-sun16" >> /etc/sysconfig/i18n
reboot     # 重启系统

# setup 命令中,若防火墙配置选项无法打开,出现错误
# 解决方法:安装 system-config-firewall、system-config-firewall-tui dbus eggdbus,并开启 messagebus 服务
yum -y install system-config-firewall system-config-firewall-tui dbus eggdbus && service messagebus start

3.15.5.2 方式② ll /etc/init.d/ 查看系统服务

# 查看系统服务
ll /etc/init.d/      # CentOS 7.0 以下
systemctl            # CentOS 7.0 以上

# init 已被 systemd 取代
# 输入 ll /etc/init.d/ 或 ll /etc/rc.d/init.d/,里面有个 README 文档,其内容如下:
You are looking for the traditional init scripts in /etc/rc.d/init.d,
and they are gone?

Here's an explanation on what's going on:

You are running a systemd-based OS where traditional init scripts have been replaced by native systemd services files. Service files provide very similar functionality to init scripts. To make use of service files simply invoke "systemctl", which will output a list of all currently running services (and other units). Use "systemctl list-unit-files" to get a listing of all known unit files, including stopped, disabled and masked ones. Use "systemctl start foobar.service" and "systemctl stop foobar.service" to start or stop a service, respectively. For further details, please refer to systemctl(1).

Note that traditional init scripts continue to function on a systemd system. An init script  /etc/rc.d/init.d/foobar is implicitly mapped into a service unit foobar.service during system initialization.

Thank you!

Further reading:
        man:systemctl(1)
        man:systemd(1)
        http://0pointer.de/blog/projects/systemd-for-admins-3.html
        https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities

# 翻译
您正在 /etc/rc.d/init.d 中寻找传统的 init 脚本,
他们走了吗?

以下是对正在发生的事情的解释:

您正在运行基于 systemd 的操作系统,其中传统的 init 脚本具有被本机 systemd 服务文件取代。服务文件提供与 init 脚本的功能非常相似。使用服务文件简单地调用"systemctl",它将输出所有当前正在运行的服务(和其他单元)。使用"systemctl list-unit-files" 以获取所有已知单元文件的列表,包括停止,禁用和蒙面的。使用"systemctl 启动foobar.service""systemctl stop foobar.service" 来启动或停止一个服务,分别。欲知更多详情,请参阅系统控制(1)。

请注意,传统的 init 脚本继续在 systemd 上运行系统。 init 脚本 /etc/rc.d/init.d/foobar 被隐式映射在系统初始化期间进入服务单元 foobar.service。

谢谢!

进一步阅读:
        man:systemctl(1)
        man:systemd(1)
        http://0pointer.de/blog/projects/systemd-for-admins-3.html
        https://www.freedesktop.org/wiki/Software/systemd/Incompatibility

至于 systemd 为什么要取代 init

init 进程是 Linux 内核启动的第一个进程,自然也是其他进程的父进程,但是当我们在终端下执行 pstree 命令时,即 以树的形式显示所有进程的层次 时,会发现应该是 init进程 的地方却变成了 systemd

Linux 之日常必备技能_第215张图片

systemd 简介

systemd 是 linux 系统中最新的初始化系统,systemd 和 ubuntu 中的 upstart 是竞争对手,但是 ubuntu 现在也采用了systemd,其实 systemd 的很多概念都来源于 Mac OC 系统上的 launchd。

systemd 和 init 都由 linux 内核加载运行, 都是系统中第一个进程,PID 永远为 1。

systemd 取代 init 的原因

init:

启动时间长,init是串行(后面有介绍)启动,只有前一个进程启动完,才会启动下一个进程;

启动脚本复杂,init进程只是执行启动脚本,不管其他事情,脚本需要自己处理各种情况,这往往使得脚本变得很长;

而且当sysvinit系统初始化的时候,它会将所有可能用到的后台服务进程全部启动运行,并且系统必须等待所有的服务都启动就绪后,才允许用户登录,那么它的缺点也就很显而易见了:

  1. 启动时间过长
  2. 浪费系统资源

某些服务可能在很长一段时间内都没有被使用,比如打印服务在多数服务器上很少被真正使用到。所以说,启动这些服务是没有必要的,浪费资源又浪费时间。

systemd:

按需启动服务,顾名思义,只有当某个服务真正被请求的时候才启动它,当该服务结束,systemd可以关闭它,等待下次需要时再次启动它,减少系统资源消耗;

尽可能启动更少进程,尽可能多的并行启动进程,尽可能减少对shell脚本的利用,减少系统启动等待时间;

串行、并行、并发?,举例说明:

吃饭吃到一半,电话来了,一直吃完了以后才去接,这说明支持串行

吃饭吃到一半,电话来了,停下来接了电话,接完后继续吃饭,这说明支持并发

吃饭吃到一半,电话来了,一边打电话,一边吃饭,说明支持并行

并发的关键是你有处理多个任务的能力,不一定要同时,并行的关键是你有同时处理多个任务的能力

关键在于同时

并发是轮流的处理多个任务,并行是同时处理多个任务

结合csapp上的定义:

并发流的思想与流运行的处理器核数或者计算机数无关。如果两个流在时间上重叠,那么它们就是并发的,即使它们是运行在同一个处理器上的;如果两个流并发的运行在不同的处理器核或者计算机上,称为并行流;

此处某些作者的理解是:

并发是在一个cpu上同时(并不是真正的同时,因为cpu在多个程序中切换的时间很短,看起来是同时)跑多个程序; 并行是每一个cpu运行一个程序(同时);

而且systemd采用linux的cgroups跟踪和管理进程的生命周期:

systemd利用了linux内核的特性即cgroups来完成跟踪的任务,当停止服务时,通过查询cgroups,systemd可以确保找到所有的相关进程,从而干净的停止服务。

cgroups已经出现了很久,它主要用来实现系统资源配置管理。当进程创建子进程时,子进程会继承父进程的cgroups,所以无论创建多少子进程,所有的这些相关进程都会属于同一个cgroups,systemd只需要遍历指定的cgroups即可找到所有相关的进程,将它们一一停止即可。

cgroups 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。简单说,cgroups 可以限制、记录任务组所使用的物理资源。本质上来说,cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。

3.15.6 服务的运行级别【runlevel】

Linux系统有7种运行级别(runlevel):常用的是级别 3 和 5

  • 运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别 1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别 2:多用户状态(没有NFS),不支持网络
  • 运行级别 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别 4:系统未使用,保留
  • 运行级别 5:X11控制台,登陆后进入图形GUI模式
  • 运行级别 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
# 查看或编辑默认的运行级别
vim /etc/inittab          # CentOS 7.0 以下
systemctl get-default     # CentOS 7.0 以上,设置运行级别:systemctl set-default TARGET.target

开机流程说明

在这里插入图片描述

3.15.7 chkconfig 给每个服务的各个运行级别设置自启动或关闭

# 查看所有服务运行级别列表
chkconfig --list            # CentOS 7.0 以下
systemctl list-unit-files   # CentOS 7.0 以上

# 可能会提示:
Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use 'systemctl list-dependencies [target]'.

# 译文
注意:此输出仅显示 SysV 服务,不包括本机系统服务。 SysV 配置数据可能会被本机覆盖系统配置。
如果要列出 systemd 服务,请使用'systemctl list-unit-files'。
查看针对特定目标使用启用的服务 'systemctl list-dependencies [target]'# 查看具体某个服务的运行级别列表
chkconfig 服务名 --list   # CentOS 7.0 以下,如:chkconfig sshd --list,效果等同于 chkconfig --list | grep 服务名
chkconfig --list | grep 服务名        # CentOS 7.0 以下,如:chkconfig --list | grep sshd
systemctl list-dependencies 服务名    # CentOS 7.0 以上,如:systemctl list-dependencies sshd

# 修改某个服务在哪个运行级别下是否自启动【chkconfig 重新设置服务自启动或关闭后,需要重启机器 reboot 才能生效】
                                      # on:开启自启动  off:关闭自启动  level:运行级别
chkconfig --level 5 服务名 on/off      # CentOS 7.0 以下,如:chkconfig --level 5 sshd off
                                      # enable:开启自启动,disable:关闭自启动
systemctl enable/disable 服务名        # CentOS 7.0 以上,如:systemctl disable sshd
# 开启:Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
# 关闭:Removed /etc/systemd/system/multi-user.target.wants/sshd.service.

3.16 进程监控

3.16.1 top 实时动态监控进程

top 与 ps 命令很相似。它们都用来显示正在执行的进程。top 与 ps 最大的不同之处,在于 top 在执行一段时间可以更新正在运行的的进程。有点类似于 windows 任务管理器,实时显示运行进程的效果。

# 实时动态监控进程
top [选项]

top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]

top               # 默认每隔 3 秒,刷新一次
top -u 用户名      # 查看某个用户的实时动态进程信息,如:top -u root

# 常规操作
top           # 每隔 3 秒,显式所有进程的资源占用情况
top -d 2      # 每隔 2 秒,显式所有进程的资源占用情况
top -c        # 每隔 3 秒,显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 5476 -p 8781      # 每隔 3 秒,显示 pid 为 5476 和 pid 为 8781 的两个进程的资源占用情况
top -d 2 -c -p 4356      # 每隔 2 秒,显示 pid 为 4356 的进程的资源使用情况,并显式该进程启动的命令行参数

常用选项

选项 描述
-d 指定 top 命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令:
-i 使 top 不显示任何闲置或者僵死进程。
-p 通过指定监控进程 ID 来仅仅监控某个进程的状态。

快捷键操作

快捷键操作 描述
P 以 CPU 使用率排序,默认就是此项
M 以内存的使用率排序
N 以 PID 排序
q 退出 top
[root@root ~]# top
top - 15:10:41 up  5:10,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 162 total,   1 running, 161 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st
MiB Mem :   3709.4 total,   3093.4 free,    259.4 used,    356.7 buff/cache
MiB Swap:   4032.0 total,   4032.0 free,      0.0 used.   3210.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                 
    922 root      20   0  352120  12976   9160 S   0.7   0.3   0:22.77 vmtoolsd                                 
   3344 root      20   0   65432   4444   3792 R   0.7   0.1   0:00.38 top                                     
     11 root      20   0       0      0      0 I   0.3   0.0   0:04.46 rcu_sched                               
   3260 root      20   0       0      0      0 I   0.3   0.0   0:04.22 kworker/0:2-events_power_efficient       
      1 root      20   0  188580  16636   9136 S   0.0   0.4   0:03.23 systemd                                 
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.03 kthreadd                                 
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                   
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                               
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri             
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                             
     10 root      20   0       0      0      0 S   0.0   0.0   0:00.01 ksoftirqd/0                             
     12 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0                             
     13 root      rt   0       0      0      0 S   0.0   0.0   0:00.03 watchdog/0                               
     14 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0                                 
     15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1                                 
     16 root      rt   0       0      0      0 S   0.0   0.0   0:00.02 watchdog/1                               
     17 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/1                             
     18 root      20   0       0      0      0 S   0.0   0.0   0:00.01 ksoftirqd/1                             
     20 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/1:0H-events_highpri             
     21 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/2                                 
     22 root      rt   0       0      0      0 S   0.0   0.0   0:00.04 watchdog/2                               
     23 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/2                             
     24 root      20   0       0      0      0 S   0.0   0.0   0:00.01 ksoftirqd/2                             
     26 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/2:0H-events_highpri             
     27 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/3                                 
[root@root ~]# 

# top 详解

# ① 第一部分:任务队列信息(系统概况)
15:10:41      # 当前系统时间
up  5:10      # 当前系统运行时间(从开机到当前)
1 user        # 当前登录系统的用户数
load average: 0.00, 0.00, 0.00     # 目前的负载均衡(一般加起来除以3,超过0.7,说明系统有点跑不动了)

#  ② 第二部分:进程信息
Tasks         # 任务(或进程)
162 total     # 进程总数,总共162个
1 running     # 正在运行的进程数,1个进程正在运行
161 sleeping  # 睡眠的进程数,161个进程正在睡眠
0 stopped     # 已停止的进程数,0个进程已停止
0 zombie      # 僵死的进程数,0个进程僵死

# ③ 第三部分:CPU 信息
%Cpu(s)    # 占用 CPU 空间百分比(%:百分比,s:space)
0.1 us     # 用户空间占用 CPU 的百分比,0.1% 被用户空间占用(us:user space)
0.1 sy     # 内核空间占用 CPU 的百分比,0.1% 被系统内核占用(sy:sysctl)
0.0 ni     # 改变过优先级的进程占用 CPU 的百分比,0.0% 被改变过优先级的进程占用(ni:nice)
99.8 id    # 空闲 CPU 百分比,99.8% 被空闲占用(id:idolt)
0.0 wa     # 等待输入输出(IO)的 CPU 时间百分比,0.0%被等待输入输出占用(wa:wait)
0.1 hi     # 硬中断占用 CPU 的时间百分比,0.1% 被硬件中断占用(hi:Hardware IRQ)
0.0 si     # 软中断占用 CPU 的时间百分比,0.0% 被软件中断占用(si:Software Interrupts)
0.0 st     # 虚拟机被 hypervisor 偷去的 CPU 时间占用百分比,0.0%被虚拟机占用(st:Steal time)

# ④ 第四部分:内存信息

# 小提示:MiB --> 标准的国际电工委员会(IEC)制定的单位
# KB、KiB、MB、MiB 之间的关系
# MB 等单位,以 10 为底数标示数据大小,MiB 是以 2 为底数标示数据大小;
# 在国际单位制中 TB、GB、MB、KB 是以 1000 进制来计量,而国际电工协会(IEC)拟定 KiB、MiB、GiB 以二进制单位计量,专用于标示 1024 进位的数据大小;即:如:1KB=10^3B=1000B, 1MB=10^6B=1000000B=1000KB,1GB=10^9B=1000000000B=1000MB,而 1KiB=2^10B=1024B,1MiB=2^20B=1048576B=1024KiB。

MiB Mem           # 内存使用情况,单位是 MiB(mebibyte):2^20 B(bytes 字节)
3709.4 total      # 物理内存总量,总共 3709.4 MiB
3093.4 free       # 空闲内存总量,空闲 3093.4 MiB
259.4 used        # 已使用的内存总量,已使用 259.4 MiB
356.7 buff/cache  # 内核缓存的内存总量,缓存 356.7 MiB

# ⑤ 第五部分:swap 交换区信息
MiB Swap          # 交换区使用情况(单位:MiB):2^20 B(bytes 字节)
4032.0 total      # 交换区总量,总共 4032.0 MiB
4032.0 free       # 空闲交换区总量,空闲 4032.0 MiB
0.0 used          # 已使用的交换区总量,已使用 0.0 MiB
3210.5 avail Mem  # 缓冲可用的交换区总量,缓冲可用 3210.5 MiB  ,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。可用内存=free + buffer + cached

# ⑥ 第六部分:当前运行中的进程详细列表
#    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND      
PID        # 进程的ID。
USER       # 进程属主的名字。
PR         # 进程的优先级。
NI         # 进程的谦让度值。
VIRT       # 进程占用的虚拟内存总量。
RES        # 进程占用的物理内存总量。
SHR        # 进程和其他进程共享的内存总量。
S          # 进程的状态(D:可中断的休眠状态,R:在运行状态,S:休眠状态,T:跟踪状态或停止状态,Z:僵死状态)。
%CPU       # 进程使用的CPU时间比例。
%MEM       # 进程使用的内存占可用内存的比例。
TIME+      # 自进程启动到目前为止的CPU时间总量。
COMMAND    # 进程所对应的命令行名称,也就是启动的程序名。

# ⑦ 第七部分:拓展
列名      含义
PID       # 进程id
PPID      # 父进程id
RUSER     # Real user name
UID       # 进程所有者的用户id
USER      # 进程所有者的用户名
GROUP     # 进程所有者的组名
TTY       # 启动进程的终端名。不是从终端启动的进程则显示为 ?
PR        # 优先级
NI        # nice值。负值表示高优先级,正值表示低优先级
P         # 最后使用的CPU,仅在多CPU环境下有意义
%CPU      # 上次更新到现在的CPU时间占用百分比
TIME      # 进程使用的CPU时间总计,单位秒
TIME+     # 进程使用的CPU时间总计,单位1/100秒
%MEM      # 进程使用的物理内存百分比
VIRT      # 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP      # 进程使用的虚拟内存中,被换出的大小,单位kb。
RES       # 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE      # 可执行代码占用的物理内存大小,单位kb
DATA      # 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR       # 共享内存大小,单位kb
nFLT      # 页面错误次数
nDRT      # 最后一次写入到现在,被修改过的页面数。
S         # 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
COMMAND   # 命令名/命令行
WCHAN     # 若该进程在睡眠,则显示睡眠中的系统函数名
Flags     # 任务标志,参考 sched.h

Linux 之日常必备技能_第216张图片

3.16.2 netstat 监控网络状态

# 查看系统网络情况
netstat     # 查看所有网络服务

-an     # 按一定顺序排列输出
-p      # 显示哪个进程在调用

netstat -anp | more         # 分页查看所有网络服务
netstat -anp | grep sshd    # 查看某个具体的网络服务

Linux 之日常必备技能_第217张图片

3.16.3 ping 检测主机网络连接是否正常

# ping 是一种网络检测检测工具,它主要是用检测远程主机是否正常,或是两部主机间的介质是否为断、网线是否脱落或网卡故障。
ping IP地址      # ping 对方 ip 地址【或 域名】,如:ping 176.123.16.21、ping baidu.com

Linux 之日常必备技能_第218张图片

3.17 RPM 与 YUM 软件包的管理

3.17.1 RPM 包的管理

3.17.1.1 RPM 包简介

一种用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有.RPM扩展名的文件。RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 windows 的 setup.exe,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的。
Linux 的分发版本都有采用(suse、redhat、centos 等等),可以算是公认的行业标准了。

3.17.1.2 RPM 包查询

# 查询已安装的 rpm 列表
rpm –qa | grep 软件包名       # 查看指定软件的 rpm 软件包

# 如:查看是否有已安装 kenel 内核相关的软件
rpm -qa | grep kernel

rpm -qa                  # 查询已安装的所有 rpm 软件包
rpm -qa | more           # 分页显示已安装的所有 rpm 软件包
rpm -qa | grep 软件包名    # 查看指定软件的 rpm 软件包,如:rpm -qa | grep firefox

rpm -q 软件包名            # 查询是否已安装指定的软件包,如:rpm -q firefox
rpm -qi 软件包名           # 查询软件包信息,如:rpm -qi filefox
rpm -ql 软件包名           # 查询软件包中的文件,如:rpm -ql firefox
rpm -qf 文件全路径名        # 查询文件所属的软件包,如:rpm -qf /etc/passwd、rpm -qf /root/install.log

Linux 之日常必备技能_第219张图片

3.17.1.3 RPM 包卸载

# 卸载指定的 RPM 包
rpm -e 软件包名       # 如:rpm -e firefox

# 可能遇到问题:如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
# 报错描述:removing these packages would break dependencies:xxx is needed by xxx
# 解决方法:① 放弃删除 ② 强制删除:增加参数--nodeps ,强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行
rpm -e --nodeps 软件包名   # 强制删除(不管依赖的软件包)指定的软件包

3.17.1.4 RPM 包安装

桌面版、图形化界面,默认已安装的 RPM 包位置在 /media/xxx Final/Packages 里面(前提:需要挂载 CentOS 的 iso 镜像文件,安装系统时,有勾选安装一些常用软件),最小化安装模式的系统,/media 里面没有任何包文件

# 安装指定的 RPM 包
rpm -ivh 软件包名      # i:install(安装),v:verbose(提示),h:hash(进度条),如:rpm -ivh xxx.rpm

3.17.2 YUM 包的管理

3.17.2.1 YUM 包简介

Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

前提:要求可以联网

Linux 之日常必备技能_第220张图片

Linux 之日常必备技能_第221张图片

# 查询 yum 服务器是否有需要安装的软件
yum list|grep 软件包名

# 安装指定的软件包
yum install 软件包名   # 默认安装 yum 服务器上最新版本的软件、相关依赖,有更新或升级时,会提示

# 卸载指定的软件包
yum remove 软件包名

在这里插入图片描述

4.Linux 拓展

4.1 搭建 JavaEE 环境

  • 安装 JDK 17
  • 安装 Tomcat 10
  • 安装 Eclipse 2021
  • 安装 MySQL 8

4.1.1 安装 JDK 17

4.1.1.1 安装步骤

1.先将软件通过 xftp7 上传到自定义目录下(使用其它上传方式也可以,但试了一下,xftp 7 上传挺快的,也不会有什么乱码等问题,所以,就使用它了)

Linux 之日常必备技能_第222张图片

2.解压缩到 /opt 路径下

# 切到上传的压缩软件包路径
cd /home/software

# 列出所有包
ll

# 解压 jdk 压缩包至 /opt 路径下
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /opt

Linux 之日常必备技能_第223张图片

3.配置环境变量

# 修改配置文件
vim /etc/profile

# 内容修改如下(一般追加在末尾):
JAVA_HOME=/opt/jdk-17.0.1             # JAVA_HOME
PATH=/opt/jdk-17.0.1/bin:$PATH        # PATH 路径
export JAVA_HOME PATH                 # 输出变量,使环境变量生效

# 保存退出
:wq

Linux 之日常必备技能_第224张图片

4.注销用户,使环境变量生效。

# 注销用户,重新登录即可
logout

# 或者 重启脚本,随便哪个都可以
source /etc/profile    # 重启脚本

在这里插入图片描述

5.测试环境变量是否配置成功

# 测试环境变量是否配置成功
java -version
javac
java

在这里插入图片描述

4.1.1.2 测试是否安装成功

编写一个简单的 HelloWorld.java,输出 “hello,world!”

# 编写一个 HelloWorld.java 测试文件
vim HelloWorld.java
// 内容如下:
public class HelloWorld {
        public static void main(String[] args) {
                System.out.println("Hello World!");
        }
}
# 编写好后,保存退出
:wq

Linux 之日常必备技能_第225张图片

# 编译一下 HelloWorld.java 文件,产生 .class 文件
javac HelloWorld.java

# 运行一下
java HelloWorld

在这里插入图片描述

4.1.2 安装 Tomcat 10

4.1.2.1 安装步骤

1.解压缩到 /opt 路径下

# 解压 tomcat 压缩包至 /opt 路径下
tar -zxvf apache-tomcat-10.0.12.tar.gz -C /opt

Linux 之日常必备技能_第226张图片

2.启动 tomcat

# 进入 tomcat 的 bin 目录(不想切进去执行命令,可以配置一下环境即可,这里暂不配置环境变量)
cd /opt/apache-tomcat-10.0.12/bin

# 启动 tomcat
./startup.sh

Linux 之日常必备技能_第227张图片

3.开放 8080 端口

# linux 本地访问
http:localhost:8080      # linux 桌面端(本地环境),可以进浏览器去访问一下,会显示 tomcat 首页,但 windows(非本地环境)还访问不了,需要开放 8080 端口

# 开放 8080 端口
# 方式①【建议】
systemctl status firewalld                       # 查看防火墙状态,未开放 8080 端口
firewall-cmd --list-all                          # 查看防火墙开放的端口
firewall-cmd --add-port=8080/tcp --permanent     # 开放 8080
firewall-cmd --reload                            # 重启防火墙
firewall-cmd --list-all                          # 再次查看防火墙列表,显示已开放 8080 端口

# 方式②【未测试,有兴趣,自行深究】
service iptables status      # 查看防火墙状态,它未添加 8080 端口
vim /etc/sysconfig/iptables  # 编辑 /etc/sysconfig/iptables 文件
# 追加内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT      # 放行 8080 端口
service iptables restart     # 重启防火墙,或 systemctl restart iptables
service iptables status      # 再次查看防火墙状态,它已添加 8080 端口了

Linux 之日常必备技能_第228张图片

4.1.2.2 测试是否安装成功

访问 tomcat 首页,看到 tomcat 首页,表示 tomcat 已安装成功。

# Windows Chrome 浏览器访问 Linux 上的 tomcat
http://187.153.18.12:8080/    # 在浏览器地址栏,输入服务器ip:8080,回车即可

# 关闭 tomcat命令
./shutdown.sh

Linux 之日常必备技能_第229张图片

4.1.3 安装 Eclipse 2021

4.1.3.1 安装步骤

1.解压缩到 /opt (上传步骤已略过)

# 解压 eclipse 至 /opt 路径下
tar -zxvf eclipse-java-2021-09-R-linux-gtk-x86_64.tar.gz -C /opt

Linux 之日常必备技能_第230张图片

2.启动 eclipse,配置 jre 和 server

# 切到 eclipse 路径下
cd /opt/eclipse

# 在 linux 图形界面中打开终端(不要在外面通过远程的方式执行此启动命令),启动 eclipse(也可以创建软链接方式启动和配置环境变量)
./eclipse        # 启动 eclipse、diea 等都一样,在图形化界面上去执行

Linux 之日常必备技能_第231张图片

4.1.3.2 测试是否安装成功

3.编写 Hello world 程序并测试成功!

# 同理,输出 HelloWorld 测试程序结果即可,这里懒得装图形化界面,因此,测试步骤省略。

4.1.4 安装 MySQL 8

这里的安装环境:CentOS 8.4.2105 安装 MySQL 8.0.27

4.1.4.1 安装步骤

1.卸载旧版本

# 查看系统是否已安装 mysql 相关软件包
rpm -qa | grep mysql 或者 rpm -qa | grep -i mysql

# 卸载与 mysql 相关的包
rpm -e mysql-xxx          # 正常删除,有依赖时,会有提示,如:rpm -e mysql-communnity-libs
rpm -e --nodeps mysql-xxx # 不管依赖,强制删除,如:rpm -e mysql-communnity-libs
yum -y remove mysql-xxx   # 或者使用 yum 卸载也可以,如:yum -y remove mysql-community-libs【建议使用 yum 卸载,卸得干净些】

# 再次查看是否卸载干净
rpm -qa | grep mysql 或者 rpm -qa | grep -i mysql

# 查找根目录下所有与 mysql 相关目录
find / -name mysql

# 删除找到有相关的目录(有可能会有这些或部分目录,有哪些目录就删除哪些目录)
rm -rf /var/lib/mysql
rm -rf /var/lib/selinux/targeted/active/modules/100/mysql
rm -rf /var/log/mysql
rm -rf /usr/share/bash-completion/completions/mysql
rm -rf /usr/share/selinux/packages/mysql
rm -rf /usr/share/selinux/targeted/default/active/modules/100/mysql

# 删除/etc/my.cnf 文件
rm -rf /etc/my.cnf        # 首次没有,安装过就有

# 删除 /var/log/mysqld.log文件
rm -rf /var/log/mysqld.log       # 首次没有,安装过就有

2.安装环境准备

# 创建mysql安装目录与数据存放目录:
mkdir /usr/local/mysql
mkdir /usr/local/mysql/data
# 给安装 和 存放目录授权,默认是 755 的权限
sudo chmod -R 777 /usr/local/mysql
sudo chmod -R 777 /usr/local/mysql/data
# 创建mysql组
cat /etc/group | grep mysql	# 检查 mysql 组和用户是否存在,如无创建
cat /etc/passwd | grep mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql  # 说明:创建 MySQL 用户,但该用户不能登陆(-s /bin/false参数:指定mysql用户仅拥有所有权,而没有登录权限) 

3.上传并解压

# 将安装包 mysql-8.0.27-linux-glibc2.17-x86_64-minimal.tar.xz 通过 xftp 7 上传至服务器 /home/software (自定义指定目录)里,并解压
tar -Jxvf mysql-8.0.27-linux-glibc2.17-x86_64-minimal.tar.xz -C /opt/   # 解压至 /opt 目录
cd /opt      # 切到 /opt 目录
mv mysql-8.0.27-linux-glibc2.17-x86_64-minimal/ mysql-8.0.27    # 重命名
mkdir -p /opt/mysql-8.0.27/data      # 创建 mysql 的数据存放目录

4.创建用户组、用户,并授权

groupadd mysql               # 创建组 mysql
useradd -r -g mysql mysql    # 将添加的用户 mysql 指定到 mysql 组
chown -R mysql:mysql /opt/mysql-8.0.27/data   # 修改 data 目录的所有者为 mysql,所在组为 mysql

5.配置 my.conf 配置文件

# 在 /etc/路径下,编写一个 my.cnf
vim /etc/my.cnf

# ===================== 配置 my.conf 内容如下 =====================

[mysqld]
# 跳过密码验证
# skip-grant-tables
# skip-name-resolve
bind-address=0.0.0.0
# 设置3306端口
port=3306
user=mysql
# 设置 mysql 的安装目录
basedir=/opt/mysql-8.0.27
# 设置 mysql 数据库的数据的存放目录
datadir=/opt/mysql-8.0.27/data
socket=/tmp/mysql.sock
log-error=/opt/mysql-8.0.27/data/mysql.err
pid-file=/opt/mysql-8.0.27/data/mysql.pid
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的 latin1 字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
symbolic-links=0
explicit_defaults_for_timestamp=true

# ===================== 自定义配置好后,:wq 保存退出 =====================

6.初始化安装

# 切到 mysql 安装目录的 bin 目录下
cd /opt/mysql-8.0.27/bin
./mysqld --defaults-file=/etc/my.cnf  --basedir=/opt/mysql-8.0.27 --datadir=/opt/mysql-8.0.27/data --plugin-dir=/opt/mysql-8.0.27/data/lib/plugin --user=mysql --log-error=/opt/mysql-8.0.27/data/mysql.err --open-files-limit=65535 --pid-file=/opt/mysql-8.0.27/data/mysql.pid --socket=/opt/mysql-8.0.27/data/mysql.sock --port=3306 --initialize     # 初始化后,到 mysql 安装目录的 data 目录下的 mysql.err 文件查找生成的随机密码,root@localhost:后面便是生成的临时登录随机密码
cat /opt/mysql-8.0.27/data/mysql.err    # 示例:root@localhost: oiiSsicdd9.+

7.创建软链接并启动服务

ln -s /opt/mysql-8.0.27/support-files/mysql.server /usr/local/bin/mysqlserver    # 创建 mysqlserver 的软链接
ln -s /opt/mysql-8.0.27/bin/mysql /usr/local/bin/mysql    # 创建 mysql 的软链接
mysqlserver start      # 启动 mysqlserver 服务
ps -ef | grep mysql    # 查看 mysql 的进程

8.mysql 初始登录

# cd /opt/mysql-8.0.27/bin/     # 登录前注意:路径在 mysql 的 bin 目录
# 登录 mysql,使用前面生成的初始随机登录密码
mysql -u root -p

# ======================= 首次登录,可能遇到的报错,如下 =======================

# ① 若报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
# 报错原因:密码验证不通过,意思是:用户 'root'@'localhost' 的错误 1045 (28000) 访问被拒绝(使用密码:YES)
# 解决方法:跳过密码验证,修改 mysql 配置文件 /etc/my.cnf
vim /etc/my.cnf     # 修改 /etc/my.cnf
skip-grant-tables   # 跳过密码验证,登录时不需要密码,追加到 [mysqld]下面,然后保存退出
systemctl restart mysqld  # 重启 mysqld 服务
mysqlserver restart             # 重启 mysql 服务
mysql -u root -p     # 重新登录

# ② 若报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
# 报错原因:没有重启 mysqld 或 mysql 服务,都重启一下,再登录就好了,意思是:用户 '=root'@'localhost' 访问被拒绝(使用密码:否)
# 解决方法:重启 mysqld、mysql 服务
systemctl restart mysqld
mysqlserver restart

# ③ 若报错:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
# 解决方法:安装 libncurses*
yum -y install libncurses*

# ======================= 首次登录,可能遇到的报错,如上 =======================

# 首次登录成功,需要修改登录密码
alter user 'root'@'localhost' identified by 'new password';      # 修改登录密码,new password:修改为你的新密码

# 修改密码时,若报错:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
# 报错原因:未刷新权限
# 解决方法:刷新权限
flush privileges;

# 再次修改密码
alter user 'root'@'localhost' identified by 'new password';     # 现在密码已修改,自己记录一下

# 退出 mysql,将 mysql 的配置文件 /etc/my.cnf 中,[mysqld]下面的 skip-grant-tables 注释掉,然后保存退出
exit    # 退出 mysql
vim /etc/my.cnf   # 编辑 /etc/my.cnf 配置文件
# skip-grant-tables   # 注释掉跳过密码验证
systemctl restart mysqld  # 再次重启 mysqld 服务
mysqlserver restart       # 再次重启 mysql 服务
mysql -u root -p          # 以修改的新登录密码登录

# 设置 mysql 允许远程访问
use mysql;      # 使用 mysql 数据库
select host,user from user;     # 查看 user 表,localhsot:仅支持本地访问
update user set host = '%' where user = 'root';    # 修改 root 用户的 host 为任何机器可以访问,%:支持所有访问
flush privileges;    # 刷新权限
exit                 # 退出,如需要,可以配置一下防火墙,开放 3306 端口

# 开放 3306 端口(仅针对防火墙开启的状态,防火墙已关闭状态无需配置,两种方法任选其一)
# 方法①:开启防火墙,并指定开放端口
systemctl status firewalld                       # 查看防火墙状态,未开放 3306 端口
firewall-cmd --list-all                          # 查看防火墙开放的端口
firewall-cmd --add-port=3306/tcp --zone=public --permanent     # 开放 3306 端口
firewall-cmd --reload                            # 重启防火墙
firewall-cmd --list-all                          # 再次查看列表,显示已开放 3306 端口
firewall-cmd --query-port=3306/tcp               # 查看防火墙是否已开放 3306 端口
# 方法②:关闭防火墙
systemctl stop firewalld         # ① 临时关闭防火墙
systemctl disable firewalld      # ② 永久关闭防火墙

# 配置环境变量
vim /etc/profile
# 编辑内容如下
MYSQL_HOME=/opt/mysql-8.0.27
PATH=$PATH:$MYSQL_HOME/bin
export MYSQL_HOME
# 重启环境变量配置文件,立即生效
source /etc/profile

# mysql 服务开启、关闭、重启、重载、状态、开机自启、关闭开机自启
mysqlserver start 或 systemctl start mysql
mysqlserver stop 或 systemctl stop mysql
mysqlserver restart 或 systemctl restart mysql
mysqlserver reload 或 systemctl reload mysql
mysqlserver force-reload
mysqlserver status 或 systemctl status mysql
systemctl enable mysql
systemctl disable mysql

4.1.4.2 测试是否安装成功

手酸了,截图省了

Navicat 15 测试连接,可以连接上即可

4.2 大数据 Shell 编程

4.2.1 Shell 简介

为什么要 Shell 编程

  1. Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理。
  2. 对于 JavaEE 和 Python 程序员来说,工作的需要,你的老大会要求你编写一些 Shell 脚本进行程序或者是服务器的维护,比如:编写一个定时备份数据库的脚本。
  3. 对于大数据程序员来说,需要编写 Shell 程序来管理集群。

Shell 是什么

Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。

Linux 之日常必备技能_第232张图片

4.2.2 Shell 的注释

# 单行注释 #
# 单行注释内容(井号:代表单行注释内容)

# 多行注释
:<<!
多行注释内容
!

4.2.3 Shell 的执行方式

4.2.3.1 脚本格式要求

  1. 脚本以 #!/bin/bash 开头
  2. 脚本需要有可执行权限

4.2.3.2 编写一个 Shell 脚本

需求:创建一个 Shell 脚本,输出 hello world!

# 随便创建一个目录,用于存放 shell 脚本
mkdir shell

# 编写一个简单的 shell 测试脚本
vim helloworld.sh

# 其内容如下,写好之后,:wq,保存退出
#!/bin/bash
echo "Hello World!"

在这里插入图片描述

4.2.3.3 脚本的常用执行方式

方式①:至少要授予需要要执行脚本的用户 x 权限【推荐】

# 授予可执行权限(x)
chmod 744 helloworld.sh

# 执行 shell 脚本
./helloworld.sh

在这里插入图片描述

方式②:不给可执行权限,使用 sh 执行【不推荐】

# 直接执行 shell 脚本文件(一般使用方式①,通常都给可执行权限)
sh ./helloworld1.sh

在这里插入图片描述

4.2.4 Shell 变量

4.2.4.1 Shell 变量的介绍

  1. Linux Shell中的变量分为,系统变量和用户自定义变量。
  2. 系统变量:$HOME、$PWD、$SHELL、$USER 等等,比如:echo $HOME 等等…
  3. 显示当前 shell 中所有变量:set
# 编写一个脚本,查看当前 shell 中的系统变量
vim var.sh

# 内容如下,写好 :wq,保存退出
echo "PATH=$PATH"        # 输出预定义变量,系统变量
echo "UAER=$USER"

# 授权 var.sh 可执行权限(x)
chmod 744 var.sh

# 执行 var.sh,输出系统变量
./var.sh

# 显示当前 shell 中所有变量
set           # 太多了
set | more    # 分页显示一下

Linux 之日常必备技能_第233张图片

4.2.4.2 Shell 变量的定义

4.2.4.2.1 基本语法

定义变量

变量=变量值
name=admin      # 如:name 为 admin

撤销变量

unset 变量
unset name      # 如:撤销掉 name 变量

声明静态变量

readonly 变量     # 注:静态变量不能 unset

示例:自定义变量

# 编写一个 shell,自定义一个变量
vim customvariable.sh

# 内容如下,写好,:wq,保存退出
name=admin           # 自定义变量
echo "name=$name"    # 使用变量
unset name           # unset 变量
echo "name=$name"

# 授予 customvariable.sh 可执行权限(x)
chmod 744 customvariable.sh

# 执行脚本
./customvariable.sh

Linux 之日常必备技能_第234张图片

# 编写一个 shell,自定义一个静态变量
vim week.sh

# 内容如下,写好,:wq,保存退出
readonly week=7     # 定义静态变量
echo "Fixed days of week = $week days"     # 使用静态变量
unset week     # unset 静态变量,这里会报错:cannot unset: readonly variable,不能 unset 静态变量
echo "Fixed days of week = $week days"     # 这里静态变量仍然是可以使用的

# 授予 week.sh 可执行权限(x)
chmod 744 week.sh

# 执行
./week.sh

Linux 之日常必备技能_第235张图片

4.2.4.2.2 定义变量的规则
  1. 变量名称可以由字母数字下划线组成,但是不能以数字开头
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写
4.2.4.2.3 将命令的返回值赋给变量
  1. VAR_RESULT=`ls -la` 反引号,运行里面的命令,并把结果赋给变量 VAR_RESULT
  2. VAR_RESULT=$(ls -la) 等价于反引号
# 编写一个 shell,自定义一个变量,并将命令的返回值赋给变量
vim returnvariable.sh

# 内容如下,写好,:wq,保存退出
CURRENT_DATE=`date`           # 使用反引号 `` 将命令引起来
echo "date=$CURRENT_DATE"
echo ""
CURRENT_DATE=$(date)          # 或者使用 $() 括起来
echo "date=$CURRENT_DATE"

# 授予 customvariable.sh 可执行权限(x)
chmod 744 returnvariable.sh

# 执行脚本
./returnvariable.sh

Linux 之日常必备技能_第236张图片

4.2.4.3 设置环境变量

基本语法

export 变量名=变量值      # 将 shell 变量输出为环境变量
source 配置文件          # 让修改后的配置信息立即生效
echo $变量名             # 查询环境变量的值

# 注:在输出 xxx 环境变量前,需要 source 配置文件,让其立即生效
source /etc/profile     # 方式①【推荐】
logout                  # 方式②

示例:配置 TOMCAT 的环境变量,并使其立即生效

# 在 /etc/profile 配置文件中,定义 TOMCAT_HOME 环境变量
vim /etc/profile

# 追加内容如下,写好后,:wq,保存退出
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME

# 使环境变量配置文件立即生效
source /etc/profile

# 输出环境变量 TOMCAT_HOME 的值
echo $TOMCAT_HOME

# 在另外一个 shell 程序中,使用 TOMCAT_HOME
vim printtomcathome.sh              # 编写
echo "tocmat_home=$TOMCAT_HOME"     # 编辑内容,输出自定义的环境变量
chmod 744 printtomcathome.sh        # 授权
./printtomcathome.sh                # 执行

Linux 之日常必备技能_第237张图片

4.2.4.4 位置参数变量

简介

当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息

基本语法

$n  # n为数字,$0代表命令本身,$1-$9:代表第 1 到第 9 个参数,10 个及以上的参数,需要用大括号包起来,如:${10}
$*  # 代表命令行中所有的参数,$*把所有的参数看成一个整体
$@  # 代表命令行中所有的参数,$@把每个参数区分对待
$#  # 代表命令行中所有参数的个数

示例

# 案例:编写一个 shell 脚本 positionParameter.sh ,在脚本中获取到命令行的各个参数信息。
vim positionParameter.sh

# 编辑内容如下,写好,保存退出

#!/bin/bash
# 获取各个参数
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "Number of parameters = $#"

# 授予可执行权限(x)
chmod 744 positionParameter.sh

# 执行
./positionParameter.sh 100 200 id name date

Linux 之日常必备技能_第238张图片

4.2.4.5 预定义变量

简介

预定义变量:是 shell 设计者事先已经定义好的变量,可以直接在shell脚本中使用

基本语法

$$    # 当前进程的进程号(PID)
$!    # 后台运行的最后一个进程的进程号(PID)
$?   # 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

示例

# 在一个 shell 脚本中,简单使用一下预定义变量
vim predefinedVariables.sh

# 其内容如下,写好后,:wq,保存退出

#!/bin/bash
echo "Current process ID = $$"
./helloworld.sh &              # 后台方式运行 helloworld.sh,&:后台方式运行
echo "Last process ID = $!"
echo "Executed value = $?"     # 0:正确   非0:不正确

# 授予可执行权限(x)
chmod 744 predefinedVariables.sh

# 执行
./predefinedVariables.sh

Linux 之日常必备技能_第239张图片

4.2.5 运算符

基本语法

$((运算式)) 或 $[运算式]expr

# 如:
expr m + n       # 注:expr 运算符间要有空格
expr m - n
expr \*, /, %    # 乘,除,取余

示例

# 案例1:计算 (12+16)*2 的值
vim operator.sh

# 编辑内容如下,写好后,:wq,保存退出

VALUE1=$(((12+16)*2))     # 方式①:$((表达式))
echo "VALUE1=$VALUE1"

VALUE2=$[(12+16)*2]       # 方式②:$[表达式]【推荐】
echo "VALUE2=$VALUE2"

TEMPVALUE=`expr 12 + 16`
VALUE3=`expr $TEMPVALUE \* 2`   # 方式③:expr 表达式
echo "VALUE3=$VALUE3"

chmod 744 operator.sh     # 授权
./operator.sh             # 执行

Linux 之日常必备技能_第240张图片

# 案例2:求出命令行的两个参数[整数]的和(仍用上面的 operator.sh,已授权x)
vim operator.sh

SUM=$[$1+$2]
echo "sum = $SUM"

./operator 100 200

在这里插入图片描述

4.2.6 条件判断

基本语法

[ condition ]  # 注:condition(条件)前后要有空格,非空返回 true,可使用 $? 验证(0 为 true,>1(非0)为false)

# 如
[ admin ]      # 返回 true
[]             # 返回 false
[condition] && echo OK || echo notok     # 条件满足,执行后面的语句

常用判断条件

# 1.两个整数的比较
=      # 字符串比较
-lt    # 小于
-le    # 小于等于
-eq    # 等于
-gt    # 大于
-ge    # 大于等于
-ne    # 不等于

# 2.按照文件权限进行判断
-r     # 有读的权限
-w     # 有写的权限
-x     # 有执行的权限

# 3.按照文件类型进行判断
-f     # 文件存在并且是一个常规的文件
-e     # 文件存在
-d     # 文件存在并是一个目录

示例

# 案例1:判断 "admin" 是否等于 "admin"
vim conditional_judgment.sh

if [ "admin" = "admin" ]
then    
        echo "admin is equal admin"
fi

chmod 744 conditional_judgment.sh
./conditional_judgment.sh

# 案例2:判断 10 是否大于 8
if [ 10 -gt 8 ]
then    
        echo "10 is greater than 8"
fi

# 案例3:/root/shell/aaa.txt 目录中的文件是否存在
if [ -e /root/shell/helloworld.sh ]
then    
        echo "/root/shell/helloworld.sh 文件存在"
fi

Linux 之日常必备技能_第241张图片

4.2.7 流程控制

4.2.7.1 if 语句

基本语法

# if 语法格式(注:[ 条件判断式],中括号和条件判断式之间必须有空格,建议使用第②种格式)
# 格式①:
if [ 条件判断式 ];then
		# 逻辑代码
fi

# 格式②:
if [ 条件判断式 ]
then
		# 逻辑代码
elif [ 条件判断式 ]
then
		# 逻辑代码
fi

示例

# 案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出"分数及格",如果小于60,则输出"分数不及格"
vim score.sh

if [ $1 -ge 60 ]
then    
        echo "分数及格"
elif [ $1 -lt 60 ]
then    
        echo "分数不及格"
fi

chmod 744 score.sh
./score.sh 100

Linux 之日常必备技能_第242张图片

4.2.7.2 case 语句

基本语法

# case 语法格式
case $变量名 in
"值1")
# 若变量的值等于值1,则执行程序1
;;
"值2")
# 若变量的值等于值2,则执行程序2
;;
# …其他分支…
*)
# 如果变量的值都不是以上的值,则执行此程序
;;
esac

示例

# 案例1 :当命令行参数是1 时,输出"周一", 是2 时,就输出"周二",其它情况输出"other"
vim isweek.sh

case $1 in
"1")    
        echo "周一"
        ;;
"2")
        echo "周二"
        ;;
"3")    
        echo "周三"
        ;;
"4")    
        echo "周四"
        ;;
"5")
        echo "周五"
        ;;
"6")    
        echo "周六"
        ;;
"7")
        echo "周日"
        ;;
*)
        echo "输入星期非法,星期范围 1 ~ 7"
        ;;
esac

chmod 744 isweek.sh
./isweek.sh 6
./isweek.sh 20
./isweek.sh 7

Linux 之日常必备技能_第243张图片

4.2.7.3 for 循环

基本语法

# for 循环格式
# 格式①:
for 变量 in 值1 值2 值3 …
do
# 循环体
done

# 格式②:
for ((初始值;循环控制条件;迭代条件))
do
# 循环体
done

示例

# 案例1:打印命令行输入的参数(这里可以看出 $* 和 $@ 的区别)
vim for.sh

for i in "$*"     # 遍历参数 $*,并赋给 i
do      
        echo "the num is $i"
done    

echo "==========================="

for j in "$@"     # 遍历参数 $@,并赋给 j
do      
        echo "the num is $j"
done

chmod 744 for.sh
./for.sh 100 200 400

# 案例2:从 1 加到 100 的值输出显示
vim for.sh

SUM=0
for((i=1;i<=100;i++))
do      
        SUM=$[$SUM+$i]
done    
echo "sum=$SUM"

./for.sh

Linux 之日常必备技能_第244张图片

在这里插入图片描述

4.2.7.4 while 循环

基本语法

while [ 条件判断式 ]
do
# 循环体
done

示例

# 案例1 :从命令行输入一个数n,统计从1+..+ n 的值是多少?
vim while.sh

SUM=0
i=1
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done    
echo "sum = $SUM"

chmod 744 while.sh
./while.sh 100

Linux 之日常必备技能_第245张图片

4.2.8 read 读取控制台输入

基本语法

# 读取控制台输入
read 选项 输入内容

# 选项:
-p    # 指定读取值时的提示符;
-t    # 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了,继续执行后面的程序

示例

# 案例1:读取控制台输入一个 num 值
vim read.sh

read -p "请输入一个数字:" NUM1
echo "输入的数字是:$NUM1"

chmod 744 read.sh
./read.sh 100

# 案例2:读取控制台输入一个 num 值,在 5 秒内输入。
vim read.sh

read -t 5 -p "敌方还有 30 秒到达战场!" NUM2
echo "对不起!您输入有误:$NUM2,请稍后再试!"

./read.sh

Linux 之日常必备技能_第246张图片

4.2.9 函数

4.2.9.1 函数简介

shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,这里就介绍这两个。

4.2.9.2 系统函数

basename 基本语法

# basename:返回完整路径最后/ 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix]    # basename 会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来。

# 选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

示例

# 案例1:请返回 /root/shell/helloworld.sh 的 "helloworld.sh" 或 "helloworld" 部分
basename /root/shell/helloworld.sh        # 输出文件名+后缀
basename /root/shell/helloworld.sh .sh    # 输出文件名

Linux 之日常必备技能_第247张图片

dirname 基本语法

# dirname:返回完整路径最后/ 的前面的部分,常用于返回路径部分
dirname 文件绝对路径     # 从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

示例

# 案例1:请返回 /root/shell/helloworld.sh 的文件前面部分
dirname /root/shell/helloworld.sh
dirname /root/shell/aaa/bbb/ccc/ddd/helloworld.sh

Linux 之日常必备技能_第248张图片

4.2.9.3 自定义函数

基本语法

# 自定义函数格式
[ function ] funname[()]       # 没有形参,[]:表示可选
{
Action;
[return int;]
}

# 调用直接写函数名:
funname []

示例

# 案例1:计算输入两个参数的和,getSum
vim function.sh

function getSum() {          # 无形参
        SUM=$[$NUM1+$NUM2]
        echo "sum = $SUM"
}

read -p "请输入第一个整数:" NUM1
read -p "情输入第二个整数:" NUM2

getSum $NUM1 $NUM2      # 调用函数

chmod 744 function.sh
./function.sh

Linux 之日常必备技能_第249张图片

4.2.10 Shell 编程综合案例

需求

1)每天凌晨 2:30 备份数据库 mydatabase 到 /root/mysqlback 自定义指定路径下

2)备份开始和备份结束能够给出相应的提示信息

3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz 的形式,比如:2021-11-19_133237.tar.gz

4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。

实现

# 编写一个 shell 脚本
vim mysqlback.sh

# ***************** 编辑内容如下 *****************

#!/bin/bash
#!/bin/bash
# 备份路径:/root/mysqlback
BACKPATH=/root/mysqlback
# 备份文件名称(当前时间作为文件名),如:2021-11-19_133237.tar.gz
BACKNAME=$(date +%Y-%m-%d_%H%M%S)
# 开始备份
echo "=========== 开始备份 ==========="
echo "备份路径:$BACKPATH/$BACKNAME"

# 需备份的信息
# 主机
HOST=localhost
# 用户名
USER=root
# 密码
PASSWORD=root
# 数据库
DATABASE=mysql

# 创建备份路径
# 若备份路径存在就使用,不存在就创建
[ ! -d "$BACKPATH/$BACKNAME" ] && mkdir -p "$BACKPATH/$BACKNAME"
# 备份数据库
# 临时备份文件
mysqldump -u$USER -p$PASSWORD --host=$HOST $DATABASE | gzip > $BACKPATH/$BACKNAME/$BACKNAME.sql.gz
# echo "临时备份数据库:$DATABASE '到' $BACKPATH/$BACKNAME.sql.gz"
# 打包备份文件
# 切到备份路径中
cd $BACKPATH
# 打包为:tar.gz
tar -zcvf $BACKNAME.tar.gz $BACKNAME
# 删除临时备份文件
rm -rf $BACKPATH/$BACKNAME
# 删除 10 天前的备份文件
find $BACKPATH -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "=========== 备份文件完成 ==========="

# ***************** 编辑完成,:wq,保存退出 *****************

# 授权
chmod 744 mysqlback.sh
# 执行
# ./mysqlback.sh

# 编辑 crontab 定时任务
crontab -e
# crontab -r    # 删除定时任务

# 调用脚本,内容如下:
30 2 * * * /root/mysqlback.sh    # 每天凌晨 2:30 分,执行 /root/datetask1.sh 脚本
:wq      # 保存退出

4.3 Python 开发平台 Ubuntu

4.3.1 Ubuntu 简介

Linux 之日常必备技能_第250张图片

Ubuntu(友帮图、优班图、乌班图)是一个以桌面应用为主的开源 GNU/Linux 操作系统,Ubuntu 是基于 GNU/Linux,支持 x86、amd64(即x64)和 ppc 架构,由全球化的专业开发团队(Canonical Ltd)打造的。专业的 Python 开发者一般会选择 Ubuntu 这款 Linux 系统作为生产平台.

Ubuntu 和 CentOS 都是基于 GNU/Linux 内核的,因此基本使用和 CentOS 是几乎一样的,它们的各种指令可以通用,同学们在学习和使用Ubuntu 的过程中,会发现各种操作指令在前面学习 CentOS 都使用过。只是界面和预安装的软件有所差别。

Ubuntu 下载地址:https://cn.ubuntu.com/download

4.3.2 安装 Ubuntu

设置 Ubuntu 支持中文

默认安装的ubuntu 中只有英文语言,因此是不能显示汉字的。要正确显示汉字,需要安装中文语言包。

安装中文支持步骤(旧系统才是默认语言为英文,新系统一般安装时,可以选择安装何种语言):

1.单击左侧图标栏打开System Settings(系统设置)菜单,点击打开Language Support(语言支持)选项卡。

2.点击 Install / Remove Languages,在弹出的选项卡中下拉找到Chinese(Simplified),即中文简体,在后面的选项框中打勾。然后点击Apply Changes 提交,系统会自动联网下载中文语言包。(保证ubuntu 是联网的)。

3.这时“汉语(中国)”在最后一位因为当前第一位是”English”,所以默认显示都是英文。我们如果希望默认显示用中文,则应该将“汉语(中国)”设置为第一位。设置方法是拖动,鼠标单击“汉语(中国)”,当底色变化(表示选中了)后,按住鼠标左键不松手,向上拖动放置到第一位。

4.设置后不会即刻生效,需要下一次登录时才会生效。

4.3.3 Ubuntu 的 root 用户

简介

安装ubuntu成功后,都是普通用户权限,并没有最高root权限,如果需要使用root权限的时候,通常都会在命令前面加上sudo 。有的时候感觉很麻烦。
我们一般使用su命令来直接切换到 root 用户的,但是如果没有给 root 设置初始密码,就会抛出 su : Authentication failure 这样的问题。所以,我们只要给 root 用户设置一个初始密码就好了。

给root用户设置密码并使用

  1. 输入 sudo passwd 命令,输入一般用户密码并设定 root 用户密码。
  2. 设定 root 密码成功后,输入su 命令,并输入刚才设定的 root 密码,就可以切换成 root 了。提示符 $ 代表一般用户,提示符 # 代表root 用户。
  3. 输入exit 命令,退出 root 并返回一般用户
  4. 以后就可以使用 root 用户了
sudo passwd    # 修改 root 用户的密码
su - root      # 切换为 root 用户
exit           # 退出为普通用户

4.3.4 Ubuntu下开发 Python

安装好 Ubuntu 后,默认就已经安装好 Python 的开发环境(旧版本:默认已安装,Python 2.7、Python 3.5;新版本:默认已安装,Python 3.8,2版本未安装)。

Linux 之日常必备技能_第251张图片

4.3.5 APT 软件管理与远程登录

apt是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,我们可以使用 apt 命令可用于软件包的安装、删除、清理等,类似于 Windows 中的软件管理工具。

sudo apt-get update                        # 更新源
sudo apt-get install package               # 安装包
sudo apt-get remove package                # 删除包
sudo apt-cache search package              # 搜索软件包
sudo apt-cache show package                # 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package --reinstall   # 重新安装包
sudo apt-get -f install                    # 修复安装
sudo apt-get remove package --purge        # 删除包,包括配置文件等
sudo apt-get build-dep package             # 安装相关的编译环境
sudo apt-get upgrade                       # 更新已安装的包
sudo apt-get dist-upgrade                  # 升级系统
sudo apt-cache depends package             # 了解使用该包依赖那些包
sudo apt-cache rdepends package            # 查看该包被哪些包依赖
sudo apt-get source package                # 下载该包的源代码

4.3.5.1 更新 Ubuntu 软件下载地址

# 使用 root 用户修改
su - root

# 备份 Ubuntu 默认的源地址
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

# 清空下载源
> sources.list 或 echo '' > sources.list

# 替换下载源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

# 更新下载源
sudo apt-get update
sudo apt-get upgrade

# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

# 网易源
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse

# 清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

# 中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

4.3.5.2 安装 SSH 服务器远程登录

SSH 简介

SSH为Secure Shell的缩写,由IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。几乎所有UNIX 平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。
和CentOS不一样,Ubuntu默认没有安装SSHD服务,因此,不能进行远程登录。

安装和启用 SSH

sudo apt-get install openssh-server   # 安装 SSH 服务端和客户端
service sshd restart     # 重启 sshd 服务,默认监听 22 端口

在 Windows 使用 XShell 7/XFTP 7 登录 Ubuntu

从 linux 系统客户机远程登录 linux 系统服务机

ssh 用户名@IP      # 如:ssh [email protected]

# 若访问出错:查看是否有 ~/.ssh/known_ssh 文件,删除该文件
cat ~/.ssh/known_ssh       # 查看是否有该文件
rm -rf ~/.ssh/known_ssh    # 删除该文件
logoutexit             # 登出

你可能感兴趣的:(Linux,linux,服务器)