Linux 学习笔记

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 学习笔记相关的知识,希望对你有一定的参考价值。

一、内容介绍

  1. 课程内容

  2. 应用领域

  3. Linux 运维工程师、Linux 嵌入式工程师、Linux 下项目开发

  4. 个人桌面领域(Ubuntu、Fedora)、服务器领域、嵌入式领域

二、Linux 入门

  1. 概述
  • 上世纪 70 年代贝尔实验室的 Ken tompsonDennis richres 共同发明了 Unix 操作系统
  • 80 年代 Richard Stallman 提出了 GUN 计划,后由 Linus 在 Minix 操作系统的基础上发明编写了 Linux 内核
  1. Linux 与 Unix

三、VM 和 Linux 的安装

  1. VMware15.5 安装

  2. CentOS7.6 安装

  3. 网络连接三种方式

  • 桥接模式:虚拟系统与母机 IP 地址必须处于同一网段,如母机:192.168.0.10,则虚拟系统 IP 地址网段必须为:192.168.0

  • NAT 模式(网络地址转换模式):虚拟系统有自己的网段,如 192.168.100,仍然可以与外部主机系统通信

  • 主机模式:独立系统,不与外界发生联系

  1. 虚拟机克隆
  • 直接拷贝一份安装好的虚拟机文件
  • 使用 VMware 软件进行克隆
  1. 虚拟机快照

  2. 虚拟机迁移删除

  3. vmtools

四、目录结构

  1. 目录结构介绍

  1. 目录结构详解
目录名描述
/bin(binaries)(/usr/bin、/usr/local/bin)存放常用指令
/boot存放启动 Linux 时使用的一些核心文件,如一些链接文件以及镜像文件
/dev(device)类似 windows 的设备管理器,把所有的硬件用文件形式进行映射
/etc(etcetera)所有系统管理所需要的配置文件和子目录,如 mysql 的 my.conf 配置文件
/home存放普通用户的目录
/lib(library)系统开机时所需要的最基本的动态链接库,类似 windows 下的 .dll 文件,几乎所有的应用程序都会使用到这些共享库
/mediaLinux 系统会自动识别一些设备,如 U 盘、光驱等,当识别成功后,Linux 会把识别的设备挂载到此
/mnt临时挂载别的文件系统,可以将外部的存储挂载到 /mnt/ 上,如共享文件夹
/opt(optional)额外安装的软件包的存放位置,如 oracle 数据库包文件
/proc(process)虚拟的目录,它是系统内存的映射,访问此目录可以获取系统相关信息
/root超级权限者的主目录
/run是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除
/sbin(superuser binaries)(/usr/sbin、/usr/local/sbin)存放系统管理员使用的系统管理程序
/srv存放一些服务启动之后需要提取的数据
/sys这是 Linux 2.6 内核的一个很大的变化,该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs
/tmp(temporary)存放临时文件
/usr(unix shared resources)存放用户的应用程序和文件,类似 windows 下的 program files 目录
/var(variable)存放着不断扩充的东西,如系统日志
/lost + found此目录一般情况下内容为空,当系统非法关机后,自动存放一些文件
/usr/local软件安装的目标目录,一般是通过源码编译方式安装的程序
/selinuxsecurity-enhanced linux,这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 selinux 相关的文件的

五、远程登录到 Linux 服务器

  1. 远程登录

  2. 远程文件传输

六、vi 和 vim 编辑器

  1. vi vim 快速入门

  2. vi vim 快捷键

  • 拷贝当前行 yy ,拷贝当前行向下的连续 5 行 5yy
  • 删除当前行 dd ,删除当前行向下的连续 5 行 5dd
  • 查找单词 bear ,/bear 回车查找,输入 n 查看下一个
  • 显示行号 :set nu ,取消显示行号 :set nonu
  • 跳转到行尾 G ,跳转到行头 gg
  • 撤销 u
  • 将光标移动到第 22 行 22 shift + g
  • 快捷键示意图英文版

  • 快捷键示意图中文版

  1. vi vim 内容梳理

七、开机、重启和用户登录注销

  1. 关机重启
  • 立刻关机 shutdown -h now
  • 5 分钟后关机 shutdown -h 5
  • 立刻重启 shutdown -r now
  • 关机 halt
  • 重启 reboot
  • 同步内存数据到磁盘 sync
  1. 登录注销
  • 切换用户 su - root
  • 用户注销 logout (在图形化界面下无效,在运行级别 3 下有效)

八、用户管理

  1. 用户管理 1
  • 添加 spring 用户 useradd spring
  • 添加 spring 时指定 spring 的根目录 useradd -d /home/temp spring
  • 给 spring 设置密码 passwd spring
  1. 用户管理 2
  • 删除用户但保留用户主目录 userdel spring
  • 删除用户且删除用户主目录 userdel -r spring
  • 查询用户信息 id root
  • 猜猜我是谁 who am i (显示的是登入系统时的用户信息)
  1. 用户管理 3
  • 组:系统可以对有共性的多个用户进行分组同一权限管理

  • 新增组 groupadd groupname

  • 删除组 groupdel groupname

  • 添加用户时指定组 useradd -g groupname username

  • 修改用户所在组 usermod -g groupname username

  • 和用户以及组相关的文件

    1. /etc/passwd 用户配置文件

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

    2. /etc/shadow 口令配置文件

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

    3. /ect/group 组的配置文件

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

  1. 用户管理 4

九、实用指令

  1. 运行级别
级别功能
0关机
1单用户(找回丢失密码)
2多用户无网络服务
3多用户有网络服务
4系统未使用保留给用户
5图形界面
6重启
  • 切换运行级别 init 6
  • 查看当前系统的默认运行级别 systemctl get-default
  • 设置当前系统的默认运行级别 systemctl set-default multi-user.target
  1. 找回 root 密码

  2. 帮助指令

  • man ls 获得 ls 命令的帮助信息
  • help cd (获得 shell 内置命令的帮助信息)
  1. 文件目录指令 1
  • 回到自己的家目录 cd ~
  1. 文件目录指令 2
  • 创建多级目录 mkdir -p /home/spring/bear
  • 删除空目录 rmdir /home/spring/bear
  • 创建一个空文件 touch temp.java
  1. 文件目录指令 3
  • 递归拷贝当前文件夹到指定目录 cp -r srcdirectory dstdirectory
  • 以覆盖方式递归拷贝当前文件夹到指定目录 \\cp -r srcdirectory dstdirectory
  1. 文件目录指令 4
  • 重命名 mv oldfilename newfilename

  • 查看文件并显示行号 cat -n filename

  • more

    键位功能
    space下翻一页
    enter下翻一行
    q退出
    ctrl + f下滚一屏
    ctrl + b上滚一屏
    =输出当前行号
    :f输出文件名和当前行号
  1. 文件目录指令 5
  • less 用于分屏查看文件内容,优点是根据需要显示的内容动态加载文件,对于显示大型文件具有较高的效率

    键位功能
    space下翻一页
    pagedown下翻一页
    pageup上翻一页
    /字串向下搜索字串,n:向下查找 N:向上查找
    ?字串向上搜索字串,n:向上查找 N:向下查找
    q退出
  • 输出内容到控制台 echo $HOSTNAME

  • 查看文件的头 5 行内容 head -n 5 /ect/profile (默认查看 10 行)

  • 查看文件的尾 5 行内容 head -n 5 /ect/profile (默认查看 10 行)

  • 实时监控文件内容的更新 tail -f filename (ctrl + c 退出)

  • 覆盖重定向 > ,追加重定向 >>

  1. 文件目录指令 6
  • 为文件或目录创建软链接(快捷方式)ln -s srcfile linkname
  • 查看最近使用的十个命令 history 10
  • 执行曾经执行过的编号为5的指令 !5
  1. 时间日期指令
  • 显示当前时间 date
  • 按指定格式显示时间 date "+%Y-%m-%d %H:%M:%S"
  • 设置系统当前时间 date -s "2022-02-02 22:22:22"
  • 查看指定年指定月的日历 cal 5 2050
  1. 查找指令 1
  • 在指定目录下按文件名检索文件 find /home -name hello.txt
  • 在指定目录下按用户名过滤文件 find /home -user root
  • 在指定目录下按文件大小过滤文件 find /home -size +200M+ 大于 - 小于)
  • locate 指令可以快速定位文件路径,因其无需遍历整个文件系统,基于自定义的数据库进行检索,速度较快,第一次使用该指令前,需使用 updatedb 指令生成 locate 数据库
  • 查看某个指令存放的目录 which ls
  1. 查找指令 2
  • | 管道符:表示将前一个命令的处理结果输出传递给后面的命令处理 cat hello.t | grep -n -i "yes"
  • 显示行号且忽略大小写方式从文件中查找内容 grep -n -i "yes" hello.txt
  1. 压缩和解压 1
  • 将指定目录下的文件压缩为 .gz 格式 gzip /home/hello.txt
  • 解压指定目录下的 .gz 文件 gunzip /home/hello.txt.gz
  • 压缩指定目录 zip -r myhome.zip /home
  • 解压文件到指定目录 unzip -d /opt myhome.zip
  1. 压缩和解压 2
  • tar 压缩后的文件格式 为 *.tar.gz

    参数功能
    -c产生 .tar 打包文件
    -v显示详细信息
    -f指定压缩后的文件名
    -z打包同时压缩
    -x解包 .tar 文件
  • 压缩多个文件 tar -zcvf pc.tar.gz pig.txt cat.txt

  • 解压到指定目录 tar -zxvf pc.tar.gz -C /opt/temp

  1. 实用指令小结

十、组管理和权限管理

  1. Linux 组的介绍
  • Linux 中每个用户必须属于一个组,不能独立于组外
  • Linux 中每个文件有所有者、所在组和其它组的概念
  1. 所有者
  • 查看文件的所有者 ls -ahl
  • 修改文件的所有者 chown username filename
  1. 所在组
  • 修改文件所在组 chgrp groupname filename
  1. 修改所在组
  • 修改用户登入系统的初始目录 usermod -d directoryname username (用户需要拥有进入新目录的权限)
  1. rwx 权限
  • 权限示意图

  • 第一列说明:

    1. 第 0 位确定文件类型

      字符说明
      -普通文件
      d目录
      l链接(快捷方式)
      c字符设备文件,如鼠标、键盘
      b块设备,如硬盘
    2. 第 1 - 3 位确定文件所有者拥有的权限

    3. 第 4 - 6 位确定文件所在组拥有的权限

    4. 第 7 - 9 位确定其它用户对该文件拥有的权限

  • 第二列表示文件数加目录数,第三列表示所有者,第四列表示所在组,第五列表示大小

  • rwx 权限作用到文件

    r:可读 - 可以读取、查看

    w:可写 - 可以修改,但不代表可以删除该文件,可以删除一个文件的前提是对该文件所在的目录拥有写权限

    x:可执行 - 文件可以被执行

  • rwx 权限作用到目录

    r:可读 - 可以查看该目录内容

    w:可写 - 可重命名目录,可在目录创建、删除文件

    x:可执行 - 可以进入该目录

  1. 权限说明案例
  • rwx 也可用数字表示依次对应 4、2、1
  1. 修改权限
  • u - 所有者,g - 所在组,o - 其他用户,a - 所有人
  • 依次赋予权限 chmod u=rwx,g=rx,o=x filenameordirectoryname <=> chmod 751 filenameordirectoryname
  • 增加指定权限 chmod o+w filenameordirectoryname
  • 回收指定权限 chmod a-x filenameordirectoryname
  1. 修改所有者和所在组
  • 修改文件或目录所有者 chown newowner filenameordirectoryname
  • 修改文件的所有者和所在组 chown newowner:newgroup filenameordirectoryname
  • 修改某个目录下的所有文件或目录的所有者和所在组 chown -R newowner:newgroup filenameordirectoryname
  1. 权限管理应用案例 1
  2. 权限管理应用案例 2
  3. 权限管理应用案例 3
  4. 权限管理应用案例 4

十一、定时任务调度

  1. crond 快速入门
  • 任务调度:系统在某个指定的事件执行特定的命令或程序

  • 任务调度分类:

    1. 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描
    2. 用户工作:用户希望执行某些程序,如对 MySQL 数据库的备份
  • crontab [params]

    参数功能
    -e编辑 crontab 定时任务
    -l查询 crontab 定时任务
    -r删除当前用户的所有 crontab 任务
  • 重启任务调度 service crond restart

  • 每分钟执行一次 ls -l /ect/ > tmp/to.txt 指令 */1 * * * * ls -l /etc/ > /tmp/to.txt

  • 五个占位符的说明:

    占位符含义范围
    第一个一个小时当中第几分钟0 - 59
    第二个一天当中的第几小时0 - 23
    第三个一个月当中的第几天1 - 31
    第四个一年当中的第几个月1 - 12
    第五个一周当中的星期几0 - 7(0 和 7 都表示周日)
  1. crond 时间规则
  • 特殊符号说明

    符号含义
    *代表任何时间。如第一个占位符为 * 代表一小时中的每分钟都执行一次命令
    ,代表不连续的时间。如 “0 8,12,16 * * *” 代表每天的 8、12、16 点整执行一次命令
    -代表连续的时间范围。如 “0 5 * * 1-6” 代表周一至周六的 5 点整执行一次命令
    */n代表每隔多久执行一次。如 “*/10 * * * *” 代表每隔 10 分钟执行一次命令
  1. crond 应用案例
  2. at 任务调度机制
  • at 命令是一次性定时计划任务,at 的守护进程 atd 会在后台运行。默认情况下 atd 守护进程每隔 60s 检查一次作业队列,若有作业存在且作业运行时间与当前时间匹配,则运行此作业

  • 在使用 at 命令时必须保证其守护进程 atd 处于运行状态,可以使用 ps -ef |grep atd 指令查看

  • at 命令格式 at [params] [time] ,可以使用 ctrl + d 结束 at 命令的输入

    参数含义
    -m当指定的任务完成后,就给用户发送邮件,即使没有标准输出
    -Iatq 的别名
    -datrm 的别名
    -v显示任务将要被执行的时间
    -c打印任务的内容到标准输出
    -V显示版本信息
    -q<队列>使用指定的队列
    -f<文件>从指定文件读入任务而不是从标准输入读入
    -t<时间参数>以时间参数的形式提交要运行的任务
  • at 命令时间

    1. 以 hh:mm(小时:分钟)指定,若该时间已过,则第二天执行
    2. 使用 midniging、noon、teatime 等比较模糊的词语来指定
    3. 采用 12 小时计时制来指定,如 12pm
    4. 使用具体的时间来指定,如 month day、mm/dd/yy、dd.mm.yy,例如 04:00 2021-03-01
    5. 使用相对计时法 now + count time-units,单位可以是 minutes、hours、days、weeks
    6. 直接使用 today、tomorrow 来指定时间
  1. at 任务调度实例
  • 两天后的下午 5 点执行命令 at 5pm + 2 days/bin/ls /home<EOT>,输入结束按两次 ctrl + d 结束 at 命令的输入
  • 查看工作队列中的任务 atq <=> at -l
  • 删除已经存在的第 1 号任务 atrm 1
  1. 任务调度小结

十二、Linux 磁盘分区、挂载

  1. 磁盘分区机制
  • 查看 Linux 系统硬盘分区挂载情况 lsblk

  • Linux 硬盘分为 IDE 硬盘和 SCSI 硬盘,目前基本都是 SCSI 硬盘

  • 对于 IDE 硬盘,驱动器标识符为 “hdx~”,其中 “hd” 表明分区所在设备的类型,这里是指 IDE 硬盘。“x” 为盘号(a 为基本盘、b 为基本从属盘、c 为辅助主盘,d 为辅助从属盘);“~” 代表分区,前四个分区用数字 1 - 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例如:hda3 表示第一个 IDE 硬盘上的第三个主分区或扩展分区;hdb2 表示第二个 IDE 硬盘上的第二个主分区或扩展分区

  • 对于 SCSI 硬盘则标识为 “sdx~”,SCSI 硬盘用 “sd” 来表示分区所在设备的类型,其余则和 IDE 硬盘的表示方法一致

  • 查看磁盘详细信息

  1. 增加磁盘应用案例
  • 增加磁盘步骤:

    1. 通过虚拟机设置为 Linux 系统增加一块硬盘,重启后系统识别到新增的硬盘

    2. 使用 fdisk /dev/sdb 命令对新增的硬盘进行分区,分区结束时输入 w 写入分区并退出,若不想保存在输入 q

    3. 格式化分区,系统为新增的磁盘分区分配唯一的 40 位字符串的 UUID mkfs -t ext4 /dev/sdb1

    4. 分区挂载到目录下 mount /dev/sdb1 /home/bear

  • 卸载分区挂载关系 umount /dev/sdb1umount /home/bear

  • 使用命令行挂载重启后会失效,永久挂载需修改 /etc/fstab 配置文件实现,配置文件编辑完成使用 mount -a 指令使挂载立即生效

  1. 磁盘情况查询
  • 查询系统整体磁盘使用情况 df -h

  • 查询指定目录的磁盘占用情况 du -h

    参数含义
    -s指定目录占用大小汇总
    -h带计量单位M、K、G
    -a包含文件
    -c列出明细的同时,增加汇总值
    –max-depth=1子目录深度
  1. 磁盘实用指令
  • 统计指定目录下的文件个数 ls -l /opt | grep "^-" | wc -l
  • 以树状显示目录结构 tree /opt (安装 tree 指令 yum install tree
  1. 磁盘分区挂载小结

十三、网络配置

  1. NAT 网络原理图

  2. 网络配置指令

  3. 网络配置实例

  • 通过修改配置文件指定 Linux 主机的 IP 地址

    1. vim /etc/sysconfig/network-scripts/ifcfg-ens33

    2. 修改虚拟机设置:编辑 -> 虚拟网络编辑器,修改子网 IP 和网关 IP 与 Linux 虚拟机 IP 处于同一网段

    3. 使配置生效 service network restartreboot

  1. 主机名和 hosts 映射
  • 修改主机名 vim /etc/hostname

  • windows:C:\\Windows\\System32\\drivers\\etc\\hosts 中添加 IP 与主机的对应关系 192.168.222.222 machine

  • Linux:/etc/hosts

  • Hosts:一个文本文件,用来记录 IP 和 Hostname 的映射关系

  • DNS:Domain Name System,是互联网上作为域名和 IP 地址相互映射的一个分布式数据库

  • 主机名解析机制分析:

    1. 浏览器先检查浏览器缓存中是否存在该域名对应的 IP,有则完成域名解析;否则检查操作系统的 DNS 解析器缓存中是否存在该域名对应的 IP,有则完成域名解析(即先查看本地解析器缓存)
    2. 如果在本地解析器缓存中没有找到域名与 IP 的对应映射,则检查系统的 hosts 文件,找到映射关系则完成域名解析
    3. 如果在 hosts 文件中仍未找到域名与 IP 的映射关系,则到 DNS 服务器中进行查找
  • 查看本地域名解析器缓存 ipconfig /displaydns

  • 清除本地域名解析器缓存 ipconfig /flushdns

  1. 网络配置小结

十四、进程管理

  1. 进程基本介绍
  • 在 Linux 中,每一个执行的程序都称为一个进程,每一个进程都分配一个 id(pid 进程号)
  1. ps 指令详解
  • ps 指令用来查看当前系统中进程的执行情况

    参数含义
    -a显示当前终端的所有进程信息
    -u以用户的格式显示进程信息
    -x显示后台进程
  • 进程详细信息说明

    名称含义
    USER用户名称
    PID进程号
    %CPU进程占用 CPU 的百分比
    %MEM进程占用物理内存的百分比
    VSZ进程占用虚拟内存大小(KB)
    RSS进程占用物理内存大小(KB)
    TT终端名称(缩写)
    STAT进程状态
    STARTED进程启动时间
    TIMECPU 时间
    COMMAND启动进程所用的命令和参数

  • 进程状态说明

    参数含义
    S-睡眠
    s-该进程是会话的先导进程
    N-进程优先级比普通优先级更低
    R-正在运行
    D-短期等待
    Z-僵死进程
    T-被跟踪或被停止
  1. 父子进程
  • 以全格式显示当前所有进程(包括父进程)ps -ef
  1. 终止进程
  • 通过进程号杀死进程 kill 7940

  • 重启 sshd 服务 /bin/system start sshd.service

  • 通过进程名称杀掉进程(包括子进程)killall gedit

  • 查看本机终端进程 ps -aux | grep bash ,强制杀掉终端进程 kill -9 8963

  1. pstree 指令
  • 以树状形式显示进程信息并显示用户、进程号信息 pstree -p
  1. 服务管理 1
  • 服务本质是运行在后台的进程,通常会监听某个端口,等待其它程序的请求,又称为守护进程
  • 服务管理指令 service servicename [start | stop | restart | reload | status]
  • service 指令可以管理的服务在 init.d 中查看 ls -l /etc/init.d/
  • 查看服务名 setup
  1. 服务管理 2
  • 开机流程:开机 -> Bios -> /boot -> 启动进程 systemd -> 确定运行级别 -> 启动对应服务
  1. 服务管理 3
  • 通过 chkconfig 指令服务在各种运行级别下设置是启动或关闭,chkconfig 指令管理的服务在 /etc/init.d 文件中查看

  • 查看 chkconfig 管理服务在各级别下的状态 chkconfig --list

  • 设置服务在某个运行级别下的状态 chkconfig --level 5 servicename on/off,重启系统后生效

  1. 服务管理 4
  • systemctl 指令管理的服务在 /usr/lib/systemd/system 中查看
  • 查看开机过程中的服务启动状态 systemctl list-unit-files
  • 设置服务开机自启 systemctl enable servicename
  • 关闭服务开机自启 systemctl disable servicename
  • 查询某个服务是否开机自启 systemctl is-enabled servicename
  • 临时关闭防火墙 systemctl stop firewalld.service
  • 查看某台主机的端口是否可访问 telnet 192.168.222.222 22
  1. 服务管理 5
  • 打开端口 firewall-cmd --permanent --add-port=端口号/协议
  • 关闭端口 firewall-cmd --permanent --remove-port=端口号/协议
  • 打卡或关闭端口,需重载后方生效 firewall-cmd --reload
  • 查询端口是否开放 firewall-cmd --query-port=端口号/协议
  • 查看网络端口情况 netstat -an | more
  1. 动态监控系统 1
  • top 与 ps 命令很相似,都是用来显示正在运行的进程,top 与 ps 最大的不同之处在于 top 在执行一段时间后可以更新正在运行的进程

    参数功能
    -d 秒数指定 top 命令刷新频率,默认为 3s
    -i不显示闲置或僵死的进程
    -p指定进程号来动态监控某个进程的状态
  • 动态监控系统

  1. 动态监控系统 2
  • 交互指令

    指令功能
    P以 CPU 使用率降序排序,默认项
    M以内存使用率降序排序
    N以进程号降序排序
    q退出
    u监视特定用户
    k通过进程号终止指定的进程
  1. 监控网络状态
  • 以一定顺序并显示进程信息的方式显示网络情况 netstat -anp | more

  1. 进程管理小结

十五、rpm 和 yum

  1. rpm 管理 1
  • rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 发行版中。它生成 .rpm 扩展名的文件。RPM 是 ReadHat Package Manager 的缩写,类似 windows 中的 setup.exe

  • 查询已安装的 rpm 列表 rpm -qa

  • firefox-60.2.2-1.el7.centos.x86_64

    firefox:名称

    60.2.2:版本号

    el7.centos.x86_64:适用操作系统,即适用 centos7.x 的 64 为系统

    如果是 i686、i386 表示 32 位系统,noarch 表示通用

  • 查询软件包是否安装 rpm -q firefox

  • 查询软件包详细信息 rpm -qi firefox

  • 查询软件包安装后生成了哪些文件 rpm -ql firefox

  • 查询文件归属于哪个软件包 rpm -qf /etc/passwd

  1. rpm 管理 2
  • 强制删除软件包 rpm -e --nodeps firefox

  • 安装 rpm 包 rpm -ivh rpmurl

    i:install

    v:verbose(提示)

    h:hash(进度条)

  1. yum
  • yum 是一个 shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 rpm 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
  • 查询 yum 服务器是否存在需要的软件包 yum list | grep packagename
  • 安装指定的 yum 包 yum install packageurl
  1. 软件包管理小结

十六、搭建 JavaEE 环境

  1. 安装配置 JDK 8
  • 安装配置 Oracle Java 8

    1. 通过 Xftps6 将 jdk 压缩文件上传到 Linux /opt 目录下
    2. 解压压缩文件 tar -zxvf jdk-8u311-linux-x64.tar.gz
    3. 自定义 jdk 安装目录 mkdir /usr/local/java
    4. 移动解压包到自定义目录 mv /opt/jdk1.8.0_311 /usr/local/java
    5. 配置环境变量 vim /etc/profile
    6. export JAVA_HOME=/usr/local/java/jdk1.8.0_311
    7. export PATH=$JAVA_HOME/bin:$PATH
    8. 使环境变量配置立即生效 source /etc/profile
  1. 安装配置 tomcat 8
  • 安装配置 tomcat8

    1. 上传压缩文件到 /opt 目录下
    2. 解压 tar -zxvf apache-tomcat-8.5.59.tar.gz
    3. 自定义 tomcat 目录 mkdir /usr/local/tomcat
    4. 移动解压包到自定义目录 mv apache-tomcat-8.5.59 /usr/local/tomcat/
    5. 进入 tomcat bin 目录下启动 tomcat cd /usr/local/tomcat/apache-tomcat-8.5.59/bin/ ./startup.sh
    6. 开放 8080 端口 firewall-cmd --permanent --add-port=8080/tcp
    7. 重载即刻开放端口 firewall-cmd --reload
  1. 安装配置 idea 2020
  2. 安装配置 mysql 5.7
  • 安装配置 MySQL5.7

    1. 删除 CentOS7.6 自带的数据库类 MySQL 数据库 mariadb
    2. 查询与 mariadb 相关的软件包 rpm -qa | grep mari
    3. 依次移除两个软件包 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64rpm -e --nodeps marisa-0.2.4-4.el7.x86_64
    4. 从网络下载 MySQL 软件压缩包 wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
    5. 解压压缩包 tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
    6. 依次安装 MySQL rpm 包
      • rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
      • rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
      • rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
      • rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
    7. 启动 MySQL 服务 systemctl start mysqld.service
    8. 查询 root 密码 grep "password" /var/log/mysqld.log
    9. 登录 MySQL mysql -u root -p
    10. 设置密码设置提示策略 set global validate_password_policy=0;
    11. 重置 root 密码 set password for 'root'@'localhost' =password('yourpassword');
    12. 使密码立即生效 flush privileges;
  1. 小结

十七、Shell 编程

  1. shell 变成快速入门
  • Shell 是一个命令解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止和编写一些程序

  • 脚本以 #!/bin/bash 开头,脚本需要有可执行权限

  1. shell 变量
  • Linux 中 Shell 变量分为系统变量和用户自定义变量,系统变量如 $HOME、$PWD、$SHELL、$USER 等

  • 定义变量:变量名=值;撤销变量:unset 变量名;声明静态变量:readonly变量,只读便令不支持 unset

  • shell 快速入门

    #!/bin/bash
    # 定义变量A
    A=100
    echo A=$A
    # 撤销定义变量A
    unset A
    echo A=$A
    # 定义静态变量B,不可 unset
    readonly B=200
    echo B=$B
    
  • 变量定义规则:变量名称可以由字母、数字和下划线组成,不能以数字开头;等号两侧不能有空格;变量名一般大写

  • 将命令的返回值赋给变量 A=`date` <=> A=$(date)

  1. 设置环境变量
  • 将 shell 变量输出为环境变量(全局变量)export 变量名=值
  • 让配置文件立即生效 source 配置文件
  • 查询环境变量的值 echo $变量名
  • shell 脚本的多行注释 :<<! content !
  1. 位置参数变量
  • $n:n 为数字,$0 代表命令本身,$1-$9 代表第 1 到第 9 个参数,10 以上的参数,10 以上的参数需要用花括号包含,如 $10

  • $*:命令行中的所有参数,$* 把所有的参数看成一个整体

  • $@:命令行中的所有参数,$@ 把每个参数区分对待

  • $#:命令行中所有参数的个数

  • 位置参数变量快速入门

    #!/bin/bash
    # 依次输出每一个参数变量
    echo args0=$0
    echo args1=$1
    echo args2=$2
    # 整体输出所有参数
    echo args=$*
    # 区别输出所有参数
    echo args_=$@
    # 输出参数个数
    echo args_nums=$#
    

  1. 预定义变量
  • $$:当前进程的进程号
  • $!:后台运行的最后一个进程的进程号
  • $?:最后一次执行的命令的返回状态。0 - 命令正确执行;!0 - 执行出错
  • 以后台方式运行脚本 sh /home/var.sh &
  1. 运算符
  • $((运算表达式)) <=> $[运算表达式] <=> expr m + n,使用 expr 时运算符间有空格,希望将结果赋值给变量时使用反引号 `
  • expr \\* / %
  1. 条件判断
  • [ condition ],condition 前后需要有空格,非空返回 true,可以用 $? 进行验证,0 为 true,>1 为 false

  • 判断语句

    符号功能
    =字符串比较是否相等
    -lt小于
    -le小于等于
    -eq等于
    -gt大于
    -ge大于等于
    -ne不等于
    -r有读权限
    -w有写权限
    -x有执行权限
    -f文件存在并且是一个常规文件
    -e文件存在
    -d文件存在并且是一个目录
  1. 单分支多分支
  • 分支格式

    #!/bin/bash
    if [ "ok" = "ok" ]
    then 
        echo "equal"
    elif[ "lcx" = "lcx" ]
        echo "not equal"
    else
    	echo "quit"
    fi
    
  1. case 语句
  • case 语句快速入门

    #!/bin/bash
    case $1 in
    "1")
    echo "Monday"
    ;;
    "2")
    echo "Tuesday"
    ;;
    *)
    echo "other"
    ;;
    esac
    
  1. for 循环
  • 第一种语法

    #!/bin/bash
    # $* 将命令行参数看作一个整体,所以 for 循环只执行一次
    for i in "$*"
    do
            echo "args is $i"
    done
    echo "==========="
    # $@ 区别对待各个命令行参数,所以有几个参数 for 循环执行>几次
    for j in "$@"
    do
            echo "args is $j"
    done
    
  • 第二种语法

    #!/bin/bash
    SUM=0
    for(( i=1; i<=$1; i++))
    do
            SUM=$[ $SUM+$i ]
    done
    echo "sum = $SUM"
    
  1. while 循环
  • while 循环示例

    #!/bin/bash
    SUM=0
    i=0
    while [ $i -le $1 ]
    do
            SUM=$[$SUM+$i]
            i=$[ $i+1 ]
    done
    echo "The result is $SUM"
    
  1. read 获取输入
  • 示例

    #!/bin/bash
    # 读取控制台输入的一个值
    read -p "Please input a number:" NUMBER
    echo "The number that you entered is $NUMBER"
    # 读取用户 10s 内输入的一个值
    read -t 10 -p "Please input a number:" NUMBER1
    echo "The number you entered is $NUMBER1"
    
  1. 系统函数
  • basename:返回文件名

  • dirname:返回文件路径,不包含文件名

  1. 自定义函数
  • 基本语法

    [function] function_name[()]
    
    	Action;
    	[return int;]
    
    
    // 调用
    function_name []
    
  • 应用案例

    #!/bin/bash
    # Define the funtion
    function getSum() 
            SUM=$[$n1+$n2]
            echo "Sum is $SUM"
    
    
    read -p "Input the first number:" n1
    read -p "Input the second number:" n2
    
    # Call the function
    getSum $n1 $n2
    
  1. 定时备份数据库 1
  2. 定时备份数据库 2
  • 每天凌晨 2:30 定时备份指定的数据库,同时检查 10 天前的备份文件是否存在,存在则删除

    DIRECTORY=/data
    DATETIME=$(date +%Y%m%d%H%M%S)
    DB_HOST=localhost
    DB_USER=root
    DB_PWD=2020@mywife
    DB_NAME=mine
    
    # If the save directory not exists, then create it
    [ ! -d "$DIRECTORY/$DATETIME" ] && mkdir -p "$DIRECTORY/$DATETIME"
    
    # Backup the database
    mysqldump -h$DB_HOST -u$DB_USER -p$DB_PWD $DB_NAME > $DIRECTORY/$DATETIME/$DB_NAME.sql
    
    # Compress the backup file
    cd /$DIRECTORY
    tar -zcvf $DIRECTORY/$DATETIME.tar.gz $DATETIME
    rm -rf $DIRECTORY/$DATETIME
    
    # Delete the file that existing more than 10 days
    find $DIRECTORY -atime +10 -name "*.tar.gz" -exec rm -rf  \\;
    echo "Backup databse named $DB_NAME successfully"
    
  • 定时调用脚本

    crontab -e
    30 2 * * * /home/bash/backup_mysql_mine.sh
    
  1. shell 编程笔记梳理

十八、Python 开发平台 Ubuntu

  1. ubuntu 安装
  2. ubuntu 中文支持
  3. ubuntu 的 root
  4. hello python

十九、apt 软件管理和远程登录

  1. APT 原理机制图
  • apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,可以使用 apt 命令进行软件包的安装、删除、清理等,类似于 windows 中的软件管理工具
  • 查看 apt 配置文件 cat /etc/apt/sources.list
  1. APT 更新源和实例
  • apt 常用命令

    命令功能
    sudo apt-get update更新源
    sudo apt-get install package安装包
    sudo apt-get remove package删除包
    sudo apt-cache show package获取包的相关信息
    sudo apt-get source package下载该包的源代码
    sudo apt-cache search 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查询该包被那些包依赖
  • 清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn

  • 备份配置文件 cp /etc/apt/sources.list /etc/apt/sources.list.backup

  • 将原配置文件置空 echo '' > sources.list

  • 加入新内容到配置文件

    deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    
    deb http:

    以上是关于Linux 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

    linux ssh scp免密码

    Linux第二周学习笔记

    Linux学习笔记组管理和权限管理

    Linux学习笔记组管理和权限管理

    Linux第二周学习笔记(12)

    Linux学习笔记