1. 安装
软件基于:
vm-box 6.1 免费的,直接从官网搞就好了 centos 8 迅雷链接:https://mirrors.aliyun.com/centos/8.4.2105/isos/x86_64/CentOS-8.4.2105-x86_64-dvd1.iso
安装参照:
https://www.cnblogs.com/gaomanito/p/11460381.html
远程工具:
说明:
- 尽量不要分配在 C 盘下
- 对于分区,可以手动分区
- /boot 分区 1G 文件系统 ext4
- swap 分区 2G 文件系统 swap
- / (根) 分区 17G 文件系统 ext4



- 关于生产环境

关于网络连接:
- 桥接模式:真实的 ip,可能会有 ip 冲突
- NAT 模式:network address translation,虚拟机 ip 映射到 真实主机。
- 主机系统:不和外部进行通讯。

安装 vm 的增强工具,设定一下共享文件夹
关于 xshell https://blog.csdn.net/elie_yang/article/details/81369136
2. linux 的目录结构
- 在 linux 中,一切皆为文件
基本结构如下:
- /bin:
- /user/bin,/user/local/bin 用于存放各种基本指令
- /sbin 用于存放 系统管理员的指令
- /home:目录下,每个用户有一个自己的目录,常用登录名命名
- /root:超级管理员的用户主目录
- /lib:系统开机所需要的最基本的动态链接共享库,类似 windows 中的 DLL
- /lost+found:一般为空,当系统非法关机后,这里存放一些文件。
- /etc:系统配置文件+软件配置文件
- /usr:用户安装的应用存放
- /boot:Linux 启动时的相关文件
- /proc:不要随意更改,一般为虚拟,内存映射文件
- /srv:不要随意更改,存放服务启动的数据
- /sys:不要随意更改,内核文件,2.6 之后有新变化 sysfs
- /tmp:临时文件
- /dev:类似于 windows 的设备管理器,硬件以文件的形式存储
- /media:将 类似于 U 盘,光驱,识别后当作文件管理。
- /mnt:将外部的存储挂载在 /mnt 下,供用户临时挂载别的文件系统。
- /opt:给主机安装的额外软件所存放的目录。
- /user/local:另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式
- /var:不断变化的内容,如 日志信息
- /selinux:安全子系统
3.vim
首先:vim 有三种模式
- 正常模式:一般打开文档的默认格式就是 正常模式,此模式下,可以进行上下左右来移动光标,使用 delete 来删除字符或者整行,也可以使用 复制粘贴功能
- 插入模式:i I,o O,a A,r R 进行插入
- 命令模式:进行替换,查找,行数,保存,退出等
关于快捷键
在一般模式下:
- 复制粘贴:使用 Nyy 表示复制包含光标所在行的 N 行,更新光标位置后 p 进行粘贴
- 删除:Ndd,删除包含光标所在行的 N 行
- 定位首尾行:首行:gg,尾行:G,任意行:N shift+G,N gg
-
在命令模式下:
查找:/word,使用 n 查找下一个
- 行号:使用行号:: set nu,不使用行号:: set nonu
- 定位具体行:: n
4.关机 & 重启命令
# 立即关机shutdown -h nowhalt# 1 分钟shutdown -h 1# 重启shutdown -r nowreboot# 内存数据同步到磁盘,无论是关机还是重启,都应该先执行下面的命令# shutdown / reboot / halt 内置会执行 sync,但是保险起见,建议手动执行sync
5. 用户权限
1. 关于使用root
通常我们使用 普通用户身份进行登录
# 当我们权限不够的时候su - rootpassword:# 转变为 root 身份# 进行完操作后logout
2. 用户管理
# 添加用户 并指定家目录,默认是 /home/usernameuseradd -d path username# 指定用户 修改登录密码,如果不指定,默认当前账号passwd usernamepasswd:Xxxxx# 一般会切换到 root 账户# 删除指定 username 用户,此时会保存 username 的家目录userdel username# 不保留 username 的家目录userdel -r username# 查询用户信息id usernameuid=0(root) gid=0(root) 组=0(root)# 切换用户:权限低 --> 权限高,需要密码,否则不需要# 切换回来:exit/logoutsu - username# 查看当前用户信息,而且是首次登录的信息whoami/ who am i# 查看当前位置pwd
3. 用户组
# 添加组groupadd chang# 删除组groupdel chang# 在添加用户时,指定组useradd -g groupName userName# 已经存在的用户,切换分组usermod -g groupName2 userName
4. 相关文件
/etc/passwd 文件
用户的配置文件,记录用户的各种信息
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow 文件
口令的配置文件
登录名:加密口令:最后一次更改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group 文件
组的配置文件,记录Linux包含的组的信息
组名:口令:组标识号:组内用户列表
6. 运行级别
centos7
/etc/inittab 文件中
multi-user.target:analogous to runlevel 3
graphical.target”analogous to runlevel 5
# 获取默认的运行级别systemctl get-default# 设置默认的运行级别systemctl set-default TARGET.target(e.g.multi-user.target)
centos7.6 及以后:关于 root 密码丢失忘记问题
- 重启,加载界面,键入 e,进入编辑模式

- 键入:init=/bin/sh
- Ctrl + x 进入单用户模式
- mount -o remount,rw / (回车)
- 输入 新密码 (回车,输入时隐藏)
- 再次输入 (回车)
- touch /.autorelabel (回车)
- exec /sbin/init 耐心等待,如果完成后,会自动重启,使用新密码就可以进入了
7. 常用指令
part1 帮助命令
# man 命令man ls# help 命令,内置命令help cd
part2 路径命令
# 当前工作目录的绝对路径pwd# 显示当前路径下的所有 文件和目录ls-a:显示所有,包含隐藏-l:以列表详细信息展示-h:人性化展示,尤其体现在 文件大小上# 切换路径cd-/xxx 绝对路径-~:家路径-..:上级目录
part3 文件,目录命令
# 值得一提:./ 表示当前路径\../ 表示父路径/ 表示根路径# 创建目录mkdir-p:创建多层目录# 删除目录,默认删除,单级,空目录。注意:特指目录rmdir# 如果想强制删除多级,非空目录,文件。注意:可能时目录或者文件rm -rf:# 创建一个空文件touch 文件名# 拷贝指令cp [option] source dest-r:递归复制整个文件夹# 关于文件名一致时,是否覆盖,# 如果默认写法,每个文件都要手动确定# 或者使用 \cp,无需提示,直接全部强制覆盖\cp -r source dest# 移动文件或者目录,或者重命名mv oldName newName# 文件内容的查看cat [opt] 文件名-n:显示行号more 文件名less 文件名# 举例cat -n /etc/profile | more [交互option]# 输出内容到控制台echo [option] [输出内容]# 举例echo $PATHecho "输出的内容记得用双括号"# 文件内容的前 N 行,默认 10head 文件名head -n N 文件名# 文件内容的尾 N 行,默认 10tail 文件名tail -n N 文件名tail -f 文件名:实时监控所有文档的更新,使用 ctrl+c 退出# > 和 >> 含义是重定向,> 表示覆盖,>> 表示追加 文件不存在则会创建ls -l /home > /home/info.txt# 示例,追加,日历信息cal >> /home/mycal.txt
关于 vi 中 more 的交互
关于 less 指令的交互
文件目录
# 相当于用 软连接名创建了个快捷方式ln -s [原文件目录] [软连接名]# 当使用 cd 软连接名时,直接到原文件目录位置# 使用 rm 删除连接rm -f /路径/软连接名# 查看历史操作,默认所有,可以指定 N 条history N# 与之相关的,可以用 !N 执行曾经执行的 第 N 个指令
part4 时间相关
# 显示时间信息date# 显示年月日date "+%Y-%m-%d"# 显示时分秒date "+%H:%M:%S"# 设置系统时间date -s "yyyy-mm-dd HH:MM:SS"date -s "2021-11-11 21:23:23"# 日历 默认输出当前年当前月的信息cal# 日历 显示全年cal 2020# 日历 指定信息cal [[day] mounth] year
part5 搜索查找
# 指定目录,递归遍历所有子目录,将满足条件的文件或者目录显示在终端find [指定范围] [选项]# 根据名称查找find /路径范围 test.txt# 根据拥有者查找find /路径范围 -user nobody/root/user 等等# 根据文件大小 (+,-)N 默认时 等于 N,文件单位:k M Gfind /文件路径 -size +200M# 用于快速定位文件的位置,其实内部有数据库维护位置关系# 所以为了保证准确性,需要管理员定期进行更新# 首次使用时,先使用 updatedb 创建 localtedbupdatedblocate 文件名# 查看某个指令在那个目录下which ls# 过滤查找grep [option] 查找内容 源文件-n:显示匹配的行和行号-i:忽略大小写
part6 压缩和解压
# gzip 压缩文件 Xxx.gz ,gunzip 解压文件 Xxx.gzgzip/gunzip# zip 压缩文件和目录,unzip 解压文件或目录zip [option] Xxx.zip-r:递归压缩unzip [option] Xxx.zip-d<目录>:指定压缩路径,默认到当前路径# tar 既可以打包,也可以解压,既可以是文件也可以是目录 生成的是 .tar.gz# 仔细看,是可以打包,不是压缩,使用 -z 才是压缩tar [option] Xxx.tar.gz 打包的内容-c:产生 .tar 打包文件-v:显示详细信息-f:指定压缩后的文件名-z:指定使用 gizp 形式压缩-x:解压 .tar 文件# 示例:压缩多个文件 到 pc.tar.gztar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt# 示例:将/home 的文件夹 压缩成 myhome.tar.gz 使用 /home/ 来表示文件而非路径tar -zcvf myhome.tar.gz /home/# 示例:将 pc.tar.gz 解压到当前目录tar -zxvf pc.tar.gz# 示例:将 myhome.tar.gz 解压到 /opt/tmp2 下mkdir /opt/tmp2tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
8. 组概念
在 linux 中每个用户必须属于一个组,不能独立于组外 在 linux 中 每个文件有 所有者,所在组[默认是所有者所在组],其他组的概念
# 修改文件的所有者chown 用户名 文件名# 修改文件所在组chgrp 组名 文件名# 修改用户所在组usermod -g 新组名 用户名# 修改用户初始登录位置 但是目录有可能是有权限的,如果权限不够,修改失败usermod -d 目录名 用户名ls -ldrwxr-xr-x. 2 user user 4096 10月 16 21:40 公共权限信息 文件:硬链接数 or 目录:子目录数 所有者 所在组 大小 修改时间 文件名# 其中第一列 一共10位0位l:链接d:目录c:字符设备-:普通文件b:块设备,如硬盘1-3位 文件的所有者4-6位 文件所在组7-9位 文件的其他组r:可读对于文件:可以读内容对于目录:可以查看目录下的文件 lsw:可写对于文件:指可修改,不代表可删除,除非你对该目录有写权限对于目录:目录及子目录可创建+删除+重命名目录x:可执行对于文件:可执行对于目录:可进入-:不可数学表示:r=4 w=2 x=1rwx = 7rw- = 6r-x = 5-wx = 3r-- = 4-w- = 2--x = 1--- = 0
# 修改权限# ## 方式一:+-= 变更权限u:所有者g:所在组o:其他人a:ugochmod u=rwx,g=rx,o=x 文件名/目录chmod o+w 文件名/目录chmod a-x 文件名/目录# ## 方式二:使用数字变更权限# 简单说 u=7 g=5 o=1chmod 751 文件名/目录
# 修改文件所有者chown newowner 文件名/目录chown newowner:newgroup 文件名/目录-R 对于目录进行递归处理# 修改所在组chgrp newgroup 文件名/目录
9. 定时任务调度
多次执行 crontab
设置任务调度的文件:/etc/crontab
设置个人任务调度。执行 crontab -e
crontab -r 终止任务,全部
crontab -l 列出当前任务
service crond restart 重启调度任务
选择任务调度文件
*/1 * * * * ls -l /etc/ > /tmp/to.txt



简单的案例
# 1.选择合适目录cd ~# 2.创建脚本vim my.sh# 文件内容date >> /home/mycalcal >> /home/mycal# 3.添加权限chmod u+x my.sh# 4.手动执行脚本的形式./my.sh# 5.使用任务调度crontab -e# 对于任务内容*/1 * * * * /home/my.sh
一次性 at
at 命令是一次性定时任务,at 的守护进程 atd会以后台形式运行,检查作业队列来运行 默认,atd每60s检查一次,有作业时,匹配时间,匹配成功则运行 at 执行过任务后,任务不会再次执行 at 需要保证,atd 进程启动:ps -ef 查看所有进程 ps -ef | grep atd
at [option] [time]Ctrl + D 两次,结束 at 命令的输入atp 查看没有执行的任务atrm 编号
10. Linux 分区
Linux 来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分 Linux 采用的是 载入 的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时载入的一个分区将使它的存储空间在一个目录下获得。
示例图:
# 查看所有设备挂载的情况lsblk [-f]
硬盘的说明
Linux 硬盘分为 IDE 硬盘 和 SCSI 硬盘(常用),
利用 vm 工具中存储的功能,内存 —> 添加(硬盘)—> SCSI(磁盘类型) —> 创建新的虚拟磁盘 —> 设定容量
- 重启
- 重启后,用 lsblk 可以看到硬盘 sdb,但是还未分区,使用 fdisk /dev/sdb
- 会进行进一步配置
- m 指令:显示命令列表
- p 指令:显示磁盘分区
- n 指令:新增分区
- d 指令:删除分区
- w 指令:写入并退出
- q 指令:退出不保存
- 基本流程:n 新增分区,p 分区类型指定为主分许,两次空格默认全部空间,最后 w 保存退出。
- 分区后的磁盘并不能立即使用分区,需要格式化,指定格式 mkfs -t ext4 /dev/sdb1
- 创建需要挂载的目录 mkdir /home/newdisk
- 现在两边的信息都准备好了,需要牵线搭桥了,即挂载:mount /dev/sdb1 /home/newdisk
- 当我们将内容写在了/home/newdisk 下,就相当于写在了磁盘里 touch kids.data
- 如果我想拆散他们,即卸载:umount /dev/sdb1 or unmount /home/newdisk,一般是 富家公子的母亲擅长
- 但是,留下的东西,kids.data 还是存在的
- 当我们将 /dev/sdb1 重新挂载到别的地方,可能需要再次格式化,老师没讲
注意:用命令行操作挂载,重启后失效
所以永久挂载是修改配置文件:/etc/fstab/
文件中新增:
- 方式一:UUID=XXXXXXX /home/newdisk ext4 defaults 0 0
- 方式二:/dev/sdb1 /home/newdisk ext4 defaults 0 0
然后,重启或者 执行 mount -a 发现已经生效
磁盘情况信息
du [option] 目录(默认当前)-s:指定目录占用大小汇总-h:使用计量单位-a:含文件--max-depth=1:指定子目录深度-c:列出明细同时,增加汇总值
# 统计 /opt 文件夹下 文件个数 grep 指定 - 开头,wc 指令用于统计个数ls -l /opt | grep "^-" | wc -l# 统计 /opt 文件夹下 文件个数(包括子文件) grep 指定 - 开头,wc 指令用于统计个数# -R 表示递归ls -lR /opt | grep "^-" | wc -l# tree 指令可以实现类似效果tree 目录# tree 可以通过 yum install tree 进行安装
wc [option] 文件名# 该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。-c 统计字节数-l 统计行数-m 统计字符数(这个参数不能与 -c 参数一起使用)-w 统计字数(一个字被定义为被空白、跳格或换行字符分隔的字符串)-L 显示最长行的长度--help 显示帮助信息--version 显示版本信息
11.Linux 的网络配置
使用 指定 ip 方案
默认是:动态分配 BOOTPROTO=”dhcp”
这里回头,在做个计网的知识汇总,结合 图解 http
映射文件 /etc/hostname
# 查看 hostnamehostname# windows 下是 C:\Windows\System32\drivers\etc\hosts192.168.200.130 centos8# Linux 下是 /etc/hostname192.168.200.1 thinkpad-c
主机名 解析机制 Hosts & DNS
- 输入URL
- 对于浏览器:进行浏览器中缓存的查找,有直接访问,没有下一步
- DNS 解析器缓存,cmd -> ipconfig /displaydns 查看 /flushdns 清理缓存,有直接访问,没有下一步
- hosts 文件中匹配,有,返回,没有下一步
- 发送到域名服务DNS进行解析,如果还没有,返回域名不存在,如果有,访问并在以上各环节保存一份。
另外,域名服务解析器是多级的。
12.Linux 进程
ps [option]-a:显示所有终端进程-u:以用户的格式显示进程信息-x:显示后台进程运行的参数-e:显示所有进程-f:全格式# SYSTEM V 展示风格# USER 进程的执行用户# PID 进程号# PPID 父进程,0 表示没有父进程# C# %CPU 进程 占用 CPU 的百分比# %MEM 进程 占用 物理内存 的百分比# VSZ 进程 占用 虚拟内存 大小 KB# RSS 进程 占用 物理内存 大小 KB# TTY 终端# STAT 当前运行状态# S- 睡眠,s- 会话的先导进程# N- 进程拥有比普通优先级更低的优先级# R- 正在运行,D- 短暂等待,Z- 僵死进程,T- 被跟踪或被停止# START 进程开始时间# TIME 进程占用 CPU 总时间# COMMAND 进程名,执行该进程的指令和参数# 以全格式查看全部进程ps -ef# 查看 sshd 的父进程ps -ef|grep sshd# 关于进程的终止kill [option] 进程号killall 进程名称,包括子进程选项中 -9:常用,表示立刻停止# 终止远程登录kill sshd对应的进程号# 重新启动/bin/systemctl start sshd.service# 一次性停止多个服务killall gedit# 查看进程树pstree [option]-p:显示进程 PID-u:显示进程的所属用户
13. Linux 的服务管理 service
服务本质就是进程,但是运行在后台,而且通常会监听某个端口,等待其他程序的请求,比如 防火墙,mysql 所以我们也称为:守护进程
# service 基本指令service 服务名 [start|stop|restart|reload|status]# 在 centos 7 之后 许多服务使用 systemctl 管理# service 指令管理的服务在 /etc/init.d 查看# 也可以用 setup 指令,选项中 * 表示自启动,空格切换setup --> 会有GUI界面# chkconfig 用于指定不同运行级别是否自启动# 在 centos7 之后,许多服务使用 systemctl 管理# 查看服务chkconfig --list[|grep 服务名]chkconfig 服务名 --list# 修改服务自启动 指定 N 等级下,服务开启自启动或者关闭自启动,重启后生效chkconfig --level N 服务名 on/off
# systemctl 中的服务管理,临时性的systemctl [start|stop|restart|reload|status] 服务名# systemctl 指令管理的服务在 /usr/lib/systemd/system 查看# 关于自启动状态,查看systemctl list-unit-files [| grep 服务名]# 设置服务自启动 默认指定 运行级别3,5,永久性的systemctl enable 服务名# 关闭服务自启动 默认指定 运行级别3,5,永久性的systemctl disable 服务名# 查看服务是否自启动systemctl is-enabled 服务名
firewall
# 宏观上管理防火墙systemctl start/stop/... firewalld.servicesystemctl enable/disable firewalld.service# 防火墙端口处理# 打开端口firewall-cmd --permanent --add-port=端口号/协议# 关闭端口firewall-cmd --permanent --remove-port=端口号/协议# 重新载入,才可以生效firewall-cmd --reload# 查看端口开放情况firewall-cmd --query-port=端口号/协议# 查看协议netstat -and
14. 动态监控
监控进程
# 用于显示正在执行的进程,top 可以更新top [option]-d N:指定间隔时间,单位是秒,默认是 3-i:不显示闲置或者僵死进程-p:指定进程 PID 来监视某个进程的状态# 交互操作P:cpu 使用率排序M:内存使用率排序N:以 PID 排序q:退出u:监控指定用户k:+PID 结束进程,强制信号量signal 9

监控网络状态
netstat [option]-an:按一定顺序排列输出-p:显示那个进程在调用
16. 软件管理
rpm
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。 RPM是RedHat Package Manager (RedHat软件包管理工具)的缩写,类似windows的 setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。 Linux的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标准了。
# 查询是否已安装rpm -qa|grep Xxxx# 命名格式firefox-60.2.2-1.el7.centos.x86_64# 名称:firefox# 版本号:60.2.2-1# 操作系统:el7.centos.x86_64# 含义是:操作系统为cnetos7.x 的64位系统# 如果是:i686,i386,表示32位系统,noarch 表示通用。# 查询所有安装的 rpm 软件包rpm -qa# 查询具体软件包rpm -q 软件包名# 查询具体软件包,详情rpm -qi 软件包名# 查询软件包中的文件rpm -ql 软件包名# 查询文件所属软件包rpm -qf 文件全路径
# 卸载rpm -e 软件包名 // -e erase# 提示信息:removing these packages would break dependencies:foo is need by bar-1.0-1# 含义是:存在依赖关系,如果删除可能 bar 无法使用 可以使用 --nodeps 强制删除,不推荐# 安装rpm -ivh RPM全路径名称-i:install 安装-v:verbose 提示-h:hash 进度条
yum
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
# 查看可以安装 rpmyum list|grep 软件# 安装指定的 yum 包yum install 软件
17. 开发工具的安装配置
JDK
- 环境变量的配置:/etc/profile 文末新增:
export JAVA_HOME=/user/local/java/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH【:$PATH 含义是,原来的PATH 信息】
- 刷新环境变量:source /etc/profile
- 配置后,可以在任意位置:echo $PATH 查看,或者使用 java -version
- 创建一个 Hello.java,填充一个 main helloworld
- 编译:javac Hello.java
运行:java Hello —>输出 helloworld 成功
Tomcat
使用 ./startup.sh 启动
- 使用 firewall-cmd —permanent —add-port=8080/tcp 增加防火墙访问允许
- 使用 firewall-cmd —reload 重新加载
- 使用 url:linuxip+8080 —> 成功访问
Mysql
- 案例版本,MySQL 5.7
- mkdir /opt/mysql
- cd /opt/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,注意 文件不是 .gz 所以不需要 -z,而且得到的是 rpm
- ps:centos 7.6 自带类mysql 数据库,mariadb,会导致冲突,先删除
- rpm -qa|grep mari
- rpm -e —nodeps mariadb-libs
- rpm -e —nodeps marisa
- 安装
- 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:systemclt start mysqld.service
- 开始设置 root 用户 密码
- mysql 自动给 root 设定随机密码,grep “password” /var/log/mysqld.log 可以查看当前密码:mima
- 使用 mysql -uroot -p 登录 输入密码:mima —> 成功登录进 mysql
- 密码设置策略:set global validate_password_policy=0[默认是1,共 0-2 从小到大要求更复杂]
- 修改 root 初始密码:set password for ‘root’@’localhost’ = password(‘xin_mi_ma’);
- 刷新:flush privileges; 使密码生效

