Linux 学习笔记
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 学习笔记相关的知识,希望对你有一定的参考价值。
一、内容介绍
-
课程内容
-
应用领域
-
Linux 运维工程师、Linux 嵌入式工程师、Linux 下项目开发
-
个人桌面领域(Ubuntu、Fedora)、服务器领域、嵌入式领域
二、Linux 入门
- 概述
- 上世纪 70 年代贝尔实验室的
Ken tompson
和Dennis richres
共同发明了 Unix 操作系统 - 80 年代
Richard Stallman
提出了 GUN 计划,后由Linus
在 Minix 操作系统的基础上发明编写了 Linux 内核
- Linux 与 Unix
三、VM 和 Linux 的安装
-
VMware15.5 安装
-
CentOS7.6 安装
-
网络连接三种方式
-
桥接模式:虚拟系统与母机 IP 地址必须处于同一网段,如母机:192.168.0.10,则虚拟系统 IP 地址网段必须为:192.168.0
-
NAT 模式(网络地址转换模式):虚拟系统有自己的网段,如 192.168.100,仍然可以与外部主机系统通信
-
主机模式:独立系统,不与外界发生联系
- 虚拟机克隆
- 直接拷贝一份安装好的虚拟机文件
- 使用 VMware 软件进行克隆
-
虚拟机快照
-
虚拟机迁移删除
-
vmtools
四、目录结构
- 目录结构介绍
- 目录结构详解
目录名 | 描述 |
---|---|
/bin(binaries) | (/usr/bin、/usr/local/bin)存放常用指令 |
/boot | 存放启动 Linux 时使用的一些核心文件,如一些链接文件以及镜像文件 |
/dev(device) | 类似 windows 的设备管理器,把所有的硬件用文件形式进行映射 |
/etc(etcetera) | 所有系统管理所需要的配置文件和子目录,如 mysql 的 my.conf 配置文件 |
/home | 存放普通用户的目录 |
/lib(library) | 系统开机时所需要的最基本的动态链接库,类似 windows 下的 .dll 文件,几乎所有的应用程序都会使用到这些共享库 |
/media | Linux 系统会自动识别一些设备,如 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 | 软件安装的目标目录,一般是通过源码编译方式安装的程序 |
/selinux | security-enhanced linux,这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 selinux 相关的文件的 |
五、远程登录到 Linux 服务器
-
远程登录
-
远程文件传输
六、vi 和 vim 编辑器
-
vi vim 快速入门
-
vi vim 快捷键
- 拷贝当前行
yy
,拷贝当前行向下的连续 5 行5yy
- 删除当前行
dd
,删除当前行向下的连续 5 行5dd
- 查找单词 bear ,
/bear
回车查找,输入n
查看下一个 - 显示行号
:set nu
,取消显示行号:set nonu
- 跳转到行尾
G
,跳转到行头gg
- 撤销
u
- 将光标移动到第 22 行
22 shift + g
- 快捷键示意图英文版
- 快捷键示意图中文版
- vi vim 内容梳理
七、开机、重启和用户登录注销
- 关机重启
- 立刻关机
shutdown -h now
- 5 分钟后关机
shutdown -h 5
- 立刻重启
shutdown -r now
- 关机
halt
- 重启
reboot
- 同步内存数据到磁盘
sync
- 登录注销
- 切换用户
su - root
- 用户注销
logout
(在图形化界面下无效,在运行级别 3 下有效)
八、用户管理
- 用户管理 1
- 添加 spring 用户
useradd spring
- 添加 spring 时指定 spring 的根目录
useradd -d /home/temp spring
- 给 spring 设置密码
passwd spring
- 用户管理 2
- 删除用户但保留用户主目录
userdel spring
- 删除用户且删除用户主目录
userdel -r spring
- 查询用户信息
id root
- 猜猜我是谁
who am i
(显示的是登入系统时的用户信息)
- 用户管理 3
-
组:系统可以对有共性的多个用户进行分组同一权限管理
-
新增组
groupadd groupname
-
删除组
groupdel groupname
-
添加用户时指定组
useradd -g groupname username
-
修改用户所在组
usermod -g groupname username
-
和用户以及组相关的文件
-
/etc/passwd 用户配置文件
每行含义:用户名:口令:用户标识号:组标识号:注释性信息:主目录:登录Shell
-
/etc/shadow 口令配置文件
每行含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
-
/ect/group 组的配置文件
每行含义:组名:口令:组标识号:组内用户列表
-
- 用户管理 4
九、实用指令
- 运行级别
级别 | 功能 |
---|---|
0 | 关机 |
1 | 单用户(找回丢失密码) |
2 | 多用户无网络服务 |
3 | 多用户有网络服务 |
4 | 系统未使用保留给用户 |
5 | 图形界面 |
6 | 重启 |
- 切换运行级别
init 6
- 查看当前系统的默认运行级别
systemctl get-default
- 设置当前系统的默认运行级别
systemctl set-default multi-user.target
-
找回 root 密码
-
帮助指令
man ls
获得 ls 命令的帮助信息help cd
(获得 shell 内置命令的帮助信息)
- 文件目录指令 1
- 回到自己的家目录
cd ~
- 文件目录指令 2
- 创建多级目录
mkdir -p /home/spring/bear
- 删除空目录
rmdir /home/spring/bear
- 创建一个空文件
touch temp.java
- 文件目录指令 3
- 递归拷贝当前文件夹到指定目录
cp -r srcdirectory dstdirectory
- 以覆盖方式递归拷贝当前文件夹到指定目录
\\cp -r srcdirectory dstdirectory
- 文件目录指令 4
-
重命名
mv oldfilename newfilename
-
查看文件并显示行号
cat -n filename
-
more
键位 功能 space 下翻一页 enter 下翻一行 q 退出 ctrl + f 下滚一屏 ctrl + b 上滚一屏 = 输出当前行号 :f 输出文件名和当前行号
- 文件目录指令 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 退出) -
覆盖重定向
>
,追加重定向>>
- 文件目录指令 6
- 为文件或目录创建软链接(快捷方式)
ln -s srcfile linkname
- 查看最近使用的十个命令
history 10
- 执行曾经执行过的编号为5的指令
!5
- 时间日期指令
- 显示当前时间
date
- 按指定格式显示时间
date "+%Y-%m-%d %H:%M:%S"
- 设置系统当前时间
date -s "2022-02-02 22:22:22"
- 查看指定年指定月的日历
cal 5 2050
- 查找指令 1
- 在指定目录下按文件名检索文件
find /home -name hello.txt
- 在指定目录下按用户名过滤文件
find /home -user root
- 在指定目录下按文件大小过滤文件
find /home -size +200M
(+
大于-
小于) - locate 指令可以快速定位文件路径,因其无需遍历整个文件系统,基于自定义的数据库进行检索,速度较快,第一次使用该指令前,需使用
updatedb
指令生成 locate 数据库 - 查看某个指令存放的目录
which ls
- 查找指令 2
|
管道符:表示将前一个命令的处理结果输出传递给后面的命令处理cat hello.t | grep -n -i "yes"
- 显示行号且忽略大小写方式从文件中查找内容
grep -n -i "yes" hello.txt
- 压缩和解压 1
- 将指定目录下的文件压缩为 .gz 格式
gzip /home/hello.txt
- 解压指定目录下的 .gz 文件
gunzip /home/hello.txt.gz
- 压缩指定目录
zip -r myhome.zip /home
- 解压文件到指定目录
unzip -d /opt myhome.zip
- 压缩和解压 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
- 实用指令小结
十、组管理和权限管理
- Linux 组的介绍
- Linux 中每个用户必须属于一个组,不能独立于组外
- Linux 中每个文件有所有者、所在组和其它组的概念
- 所有者
- 查看文件的所有者
ls -ahl
- 修改文件的所有者
chown username filename
- 所在组
- 修改文件所在组
chgrp groupname filename
- 修改所在组
- 修改用户登入系统的初始目录
usermod -d directoryname username
(用户需要拥有进入新目录的权限)
- rwx 权限
-
权限示意图
-
第一列说明:
-
第 0 位确定文件类型
字符 说明 - 普通文件 d 目录 l 链接(快捷方式) c 字符设备文件,如鼠标、键盘 b 块设备,如硬盘 -
第 1 - 3 位确定文件所有者拥有的权限
-
第 4 - 6 位确定文件所在组拥有的权限
-
第 7 - 9 位确定其它用户对该文件拥有的权限
-
-
第二列表示文件数加目录数,第三列表示所有者,第四列表示所在组,第五列表示大小
-
rwx 权限作用到文件
r:可读 - 可以读取、查看
w:可写 - 可以修改,但不代表可以删除该文件,可以删除一个文件的前提是对该文件所在的目录拥有写权限
x:可执行 - 文件可以被执行
-
rwx 权限作用到目录
r:可读 - 可以查看该目录内容
w:可写 - 可重命名目录,可在目录创建、删除文件
x:可执行 - 可以进入该目录
- 权限说明案例
- rwx 也可用数字表示依次对应
4、2、1
- 修改权限
- u - 所有者,g - 所在组,o - 其他用户,a - 所有人
- 依次赋予权限
chmod u=rwx,g=rx,o=x filenameordirectoryname
<=>chmod 751 filenameordirectoryname
- 增加指定权限
chmod o+w filenameordirectoryname
- 回收指定权限
chmod a-x filenameordirectoryname
- 修改所有者和所在组
- 修改文件或目录所有者
chown newowner filenameordirectoryname
- 修改文件的所有者和所在组
chown newowner:newgroup filenameordirectoryname
- 修改某个目录下的所有文件或目录的所有者和所在组
chown -R newowner:newgroup filenameordirectoryname
- 权限管理应用案例 1
- 权限管理应用案例 2
- 权限管理应用案例 3
- 权限管理应用案例 4
十一、定时任务调度
- crond 快速入门
-
任务调度:系统在某个指定的事件执行特定的命令或程序
-
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描
- 用户工作:用户希望执行某些程序,如对 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 都表示周日)
- crond 时间规则
-
特殊符号说明
符号 含义 * 代表任何时间。如第一个占位符为 * 代表一小时中的每分钟都执行一次命令 , 代表不连续的时间。如 “0 8,12,16 * * *” 代表每天的 8、12、16 点整执行一次命令 - 代表连续的时间范围。如 “0 5 * * 1-6” 代表周一至周六的 5 点整执行一次命令 */n 代表每隔多久执行一次。如 “*/10 * * * *” 代表每隔 10 分钟执行一次命令
- crond 应用案例
- at 任务调度机制
-
at 命令是一次性定时计划任务,at 的守护进程 atd 会在后台运行。默认情况下 atd 守护进程每隔 60s 检查一次作业队列,若有作业存在且作业运行时间与当前时间匹配,则运行此作业
-
在使用 at 命令时必须保证其守护进程 atd 处于运行状态,可以使用
ps -ef |grep atd
指令查看 -
at 命令格式
at [params] [time]
,可以使用ctrl + d
结束 at 命令的输入参数 含义 -m 当指定的任务完成后,就给用户发送邮件,即使没有标准输出 -I atq 的别名 -d atrm 的别名 -v 显示任务将要被执行的时间 -c 打印任务的内容到标准输出 -V 显示版本信息 -q<队列> 使用指定的队列 -f<文件> 从指定文件读入任务而不是从标准输入读入 -t<时间参数> 以时间参数的形式提交要运行的任务 -
at 命令时间
- 以 hh:mm(小时:分钟)指定,若该时间已过,则第二天执行
- 使用 midniging、noon、teatime 等比较模糊的词语来指定
- 采用 12 小时计时制来指定,如 12pm
- 使用具体的时间来指定,如 month day、mm/dd/yy、dd.mm.yy,例如 04:00 2021-03-01
- 使用相对计时法 now + count time-units,单位可以是 minutes、hours、days、weeks
- 直接使用 today、tomorrow 来指定时间
- at 任务调度实例
- 两天后的下午 5 点执行命令
at 5pm + 2 days
,/bin/ls /home<EOT>
,输入结束按两次ctrl + d
结束 at 命令的输入 - 查看工作队列中的任务
atq
<=>at -l
- 删除已经存在的第 1 号任务
atrm 1
- 任务调度小结
十二、Linux 磁盘分区、挂载
- 磁盘分区机制
-
查看 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 硬盘的表示方法一致
-
查看磁盘详细信息
- 增加磁盘应用案例
-
增加磁盘步骤:
-
通过虚拟机设置为 Linux 系统增加一块硬盘,重启后系统识别到新增的硬盘
-
使用
fdisk /dev/sdb
命令对新增的硬盘进行分区,分区结束时输入w
写入分区并退出,若不想保存在输入q
-
格式化分区,系统为新增的磁盘分区分配唯一的 40 位字符串的 UUID
mkfs -t ext4 /dev/sdb1
-
分区挂载到目录下
mount /dev/sdb1 /home/bear
-
-
卸载分区挂载关系
umount /dev/sdb1
或umount /home/bear
-
使用命令行挂载重启后会失效,永久挂载需修改 /etc/fstab 配置文件实现,配置文件编辑完成使用
mount -a
指令使挂载立即生效
- 磁盘情况查询
-
查询系统整体磁盘使用情况
df -h
-
查询指定目录的磁盘占用情况
du -h
参数 含义 -s 指定目录占用大小汇总 -h 带计量单位M、K、G -a 包含文件 -c 列出明细的同时,增加汇总值 –max-depth=1 子目录深度
- 磁盘实用指令
- 统计指定目录下的文件个数
ls -l /opt | grep "^-" | wc -l
- 以树状显示目录结构
tree /opt
(安装 tree 指令yum install tree
)
- 磁盘分区挂载小结
十三、网络配置
-
NAT 网络原理图
-
网络配置指令
-
网络配置实例
-
通过修改配置文件指定 Linux 主机的 IP 地址
-
vim /etc/sysconfig/network-scripts/ifcfg-ens33
-
修改虚拟机设置:编辑 -> 虚拟网络编辑器,修改子网 IP 和网关 IP 与 Linux 虚拟机 IP 处于同一网段
-
使配置生效
service network restart
或reboot
-
- 主机名和 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 地址相互映射的一个分布式数据库
-
主机名解析机制分析:
- 浏览器先检查浏览器缓存中是否存在该域名对应的 IP,有则完成域名解析;否则检查操作系统的 DNS 解析器缓存中是否存在该域名对应的 IP,有则完成域名解析(即先查看本地解析器缓存)
- 如果在本地解析器缓存中没有找到域名与 IP 的对应映射,则检查系统的 hosts 文件,找到映射关系则完成域名解析
- 如果在 hosts 文件中仍未找到域名与 IP 的映射关系,则到 DNS 服务器中进行查找
-
查看本地域名解析器缓存
ipconfig /displaydns
-
清除本地域名解析器缓存
ipconfig /flushdns
- 网络配置小结
十四、进程管理
- 进程基本介绍
- 在 Linux 中,每一个执行的程序都称为一个进程,每一个进程都分配一个 id(pid 进程号)
- ps 指令详解
-
ps 指令用来查看当前系统中进程的执行情况
参数 含义 -a 显示当前终端的所有进程信息 -u 以用户的格式显示进程信息 -x 显示后台进程 -
进程详细信息说明
名称 含义 USER 用户名称 PID 进程号 %CPU 进程占用 CPU 的百分比 %MEM 进程占用物理内存的百分比 VSZ 进程占用虚拟内存大小(KB) RSS 进程占用物理内存大小(KB) TT 终端名称(缩写) STAT 进程状态 STARTED 进程启动时间 TIME CPU 时间 COMMAND 启动进程所用的命令和参数 -
进程状态说明
参数 含义 S- 睡眠 s- 该进程是会话的先导进程 N- 进程优先级比普通优先级更低 R- 正在运行 D- 短期等待 Z- 僵死进程 T- 被跟踪或被停止
- 父子进程
- 以全格式显示当前所有进程(包括父进程)
ps -ef
- 终止进程
-
通过进程号杀死进程
kill 7940
-
重启 sshd 服务
/bin/system start sshd.service
-
通过进程名称杀掉进程(包括子进程)
killall gedit
-
查看本机终端进程
ps -aux | grep bash
,强制杀掉终端进程kill -9 8963
- pstree 指令
- 以树状形式显示进程信息并显示用户、进程号信息
pstree -p
- 服务管理 1
- 服务本质是运行在后台的进程,通常会监听某个端口,等待其它程序的请求,又称为守护进程
- 服务管理指令
service servicename [start | stop | restart | reload | status]
- service 指令可以管理的服务在 init.d 中查看
ls -l /etc/init.d/
- 查看服务名
setup
- 服务管理 2
- 开机流程:开机 -> Bios -> /boot -> 启动进程 systemd -> 确定运行级别 -> 启动对应服务
- 服务管理 3
-
通过 chkconfig 指令服务在各种运行级别下设置是启动或关闭,chkconfig 指令管理的服务在 /etc/init.d 文件中查看
-
查看 chkconfig 管理服务在各级别下的状态
chkconfig --list
-
设置服务在某个运行级别下的状态
chkconfig --level 5 servicename on/off
,重启系统后生效
- 服务管理 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
- 服务管理 5
- 打开端口
firewall-cmd --permanent --add-port=端口号/协议
- 关闭端口
firewall-cmd --permanent --remove-port=端口号/协议
- 打卡或关闭端口,需重载后方生效
firewall-cmd --reload
- 查询端口是否开放
firewall-cmd --query-port=端口号/协议
- 查看网络端口情况
netstat -an | more
- 动态监控系统 1
-
top 与 ps 命令很相似,都是用来显示正在运行的进程,top 与 ps 最大的不同之处在于 top 在执行一段时间后可以更新正在运行的进程
参数 功能 -d 秒数 指定 top 命令刷新频率,默认为 3s -i 不显示闲置或僵死的进程 -p 指定进程号来动态监控某个进程的状态 -
动态监控系统
- 动态监控系统 2
-
交互指令
指令 功能 P 以 CPU 使用率降序排序,默认项 M 以内存使用率降序排序 N 以进程号降序排序 q 退出 u 监视特定用户 k 通过进程号终止指定的进程
- 监控网络状态
-
以一定顺序并显示进程信息的方式显示网络情况
netstat -anp | more
- 进程管理小结
十五、rpm 和 yum
- 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
- rpm 管理 2
-
强制删除软件包
rpm -e --nodeps firefox
-
安装 rpm 包
rpm -ivh rpmurl
i:install
v:verbose(提示)
h:hash(进度条)
- yum
- yum 是一个 shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 rpm 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
- 查询 yum 服务器是否存在需要的软件包
yum list | grep packagename
- 安装指定的 yum 包
yum install packageurl
- 软件包管理小结
十六、搭建 JavaEE 环境
- 安装配置 JDK 8
-
安装配置 Oracle Java 8
- 通过 Xftps6 将 jdk 压缩文件上传到 Linux /opt 目录下
- 解压压缩文件
tar -zxvf jdk-8u311-linux-x64.tar.gz
- 自定义 jdk 安装目录
mkdir /usr/local/java
- 移动解压包到自定义目录
mv /opt/jdk1.8.0_311 /usr/local/java
- 配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_311
export PATH=$JAVA_HOME/bin:$PATH
- 使环境变量配置立即生效
source /etc/profile
- 安装配置 tomcat 8
-
安装配置 tomcat8
- 上传压缩文件到 /opt 目录下
- 解压
tar -zxvf apache-tomcat-8.5.59.tar.gz
- 自定义 tomcat 目录
mkdir /usr/local/tomcat
- 移动解压包到自定义目录
mv apache-tomcat-8.5.59 /usr/local/tomcat/
- 进入 tomcat bin 目录下启动 tomcat
cd /usr/local/tomcat/apache-tomcat-8.5.59/bin/
./startup.sh
- 开放 8080 端口
firewall-cmd --permanent --add-port=8080/tcp
- 重载即刻开放端口
firewall-cmd --reload
- 安装配置 idea 2020
- 安装配置 mysql 5.7
-
安装配置 MySQL5.7
- 删除 CentOS7.6 自带的数据库类 MySQL 数据库 mariadb
- 查询与 mariadb 相关的软件包
rpm -qa | grep mari
- 依次移除两个软件包
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
、rpm -e --nodeps marisa-0.2.4-4.el7.x86_64
- 从网络下载 MySQL 软件压缩包
wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
- 解压压缩包
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
- 依次安装 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
- 启动 MySQL 服务
systemctl start mysqld.service
- 查询 root 密码
grep "password" /var/log/mysqld.log
- 登录 MySQL
mysql -u root -p
- 设置密码设置提示策略
set global validate_password_policy=0;
- 重置 root 密码
set password for 'root'@'localhost' =password('yourpassword');
- 使密码立即生效
flush privileges;
- 小结
十七、Shell 编程
- shell 变成快速入门
-
Shell 是一个命令解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止和编写一些程序
-
脚本以 #!/bin/bash 开头,脚本需要有可执行权限
- 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)
- 设置环境变量
- 将 shell 变量输出为环境变量(全局变量)
export 变量名=值
- 让配置文件立即生效
source 配置文件
- 查询环境变量的值
echo $变量名
- shell 脚本的多行注释
:<<! content !
- 位置参数变量
-
$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=$#
- 预定义变量
$$
:当前进程的进程号$!
:后台运行的最后一个进程的进程号$?
:最后一次执行的命令的返回状态。0 - 命令正确执行;!0 - 执行出错- 以后台方式运行脚本
sh /home/var.sh &
- 运算符
$((运算表达式))
<=>$[运算表达式]
<=>expr m + n
,使用 expr 时运算符间有空格,希望将结果赋值给变量时使用反引号 `- expr \\* / %
- 条件判断
-
[ condition ]
,condition 前后需要有空格,非空返回 true,可以用$?
进行验证,0 为 true,>1 为 false -
判断语句
符号 功能 =
字符串比较是否相等 -lt
小于 -le
小于等于 -eq
等于 -gt
大于 -ge
大于等于 -ne
不等于 -r
有读权限 -w
有写权限 -x
有执行权限 -f
文件存在并且是一个常规文件 -e
文件存在 -d
文件存在并且是一个目录
- 单分支多分支
-
分支格式
#!/bin/bash if [ "ok" = "ok" ] then echo "equal" elif[ "lcx" = "lcx" ] echo "not equal" else echo "quit" fi
- case 语句
-
case 语句快速入门
#!/bin/bash case $1 in "1") echo "Monday" ;; "2") echo "Tuesday" ;; *) echo "other" ;; esac
- 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"
- 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"
- 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"
- 系统函数
-
basename:返回文件名
-
dirname:返回文件路径,不包含文件名
- 自定义函数
-
基本语法
[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
- 定时备份数据库 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
- shell 编程笔记梳理
十八、Python 开发平台 Ubuntu
- ubuntu 安装
- ubuntu 中文支持
- ubuntu 的 root
- hello python
十九、apt 软件管理和远程登录
- APT 原理机制图
- apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,可以使用 apt 命令进行软件包的安装、删除、清理等,类似于 windows 中的软件管理工具
- 查看 apt 配置文件
cat /etc/apt/sources.list
- 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 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章