Linux教程-修炼
在2020这个特殊的时期,在家就是为国家做贡献!一切都会好起来的,加油中国!!
Linux
第1章 Linux 简介
1.1 为什么要学习Linux
开源、稳定、漏洞少、靠谱公司都用它。一般的服务器都是用linux系统。
1.2 Linux是什么
Linux 怎么读 【里纽克斯,利尼克斯,里纳克斯】
Linux 是一款操作系统,免费,开源, 安全,高效,稳定, 处理高并发非常强悍,现在很多的企业级的项目都部署到 Linux/unix 服务器运行。
Linux 创始人-linux 林纳斯
Linux是一套免费试用和自由传播的类Unix操作系统。
1.3 Linux 与 Unix的那些事
1.4 不同时代不同选择
1.5 Linux 家族
各个Linux系统的主要区别
-
选择不同的内核版本
-
集成不同的应用程序
-
定制不同的图形界面
第2章 VM 与 Linux 的安装
2.1 从哪下载
-
网易镜像: http://mirrors.163.com/centos/7/isos/
-
搜狐镜像: http://mirrors.sohu.com/centos/7/isos/
2.2 BIOS中开启虚拟化设备支持
注意:先进行安装,如果出现虚拟化不支持的错误,再进入到BIOS进行设置,部分电脑默
认已经开启。
虚拟化设备支持未开启在安装是会出现如下错误:
2.3 安装虚拟机-组装电脑
在Windows上面安装在VM
2.4 安装Linux-装系统
在VM上安装CentOS7
2.5 xshell 和 xftp 工具的安装
-
xShell的作用: 远程命令行访问服务器端的Linux系统。
-
xftp的作用 :远程访问及传输文件
-
推荐安装 XManager 教程
-
扩展: 一个小型云服务网站架构
第3章 Linux文件与目录结构
3.1 Linux一切皆文件
3.2 目录结构
/bin (/usr/bin、/usr\local\bin) | 是Binary的缩写, 这个目录存放着最经常使用的命令 |
---|---|
/sbin(/usr/sbin 、/usr/local/sbin) | s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 |
/home | 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录。 |
/lib | 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件 |
/etc | 所有的系统管理所需要的配置文件和子目录 |
/usr | 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。 |
/boot | 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里 |
/proc | 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 |
/srv | service缩写,该目录存放一些服务启动之后需要提取的数据 |
/sys | 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs |
/tmp | 这个目录是用来存放一些临时文件的。 |
/dev | 类似于windows的设备管理器,把所有的硬件用文件的形式存储 |
/media(centos6) | linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 |
/run | 进程产生的临时文件,虚拟机加载光盘映像在:/run/media/root/ 目录下 |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。 |
/opt | 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 |
/usr/local | 这是另一个给主机额外安装软件所摆放的目录。一般是通过编译源码方式安装的程序。 |
/var | 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 |
第4章 VI、VIM 编辑器
4.1 VI、VIM是什么
VI、VIM是Linux系统命令行下的文本编辑器.
通过命令 vi 文件名 或者是 vim 文件名 来使用。
4.2 三种模式
- 一般模式(默认模式)
-
通过vi或者是vim打开文档后默认进入到一般模式,该模式下主要负责查看和一些基础的修剪工作
-
常用的操作
dd | 删除光标当前行 |
---|---|
dnd | 删除n行 |
u | 撤销上一步 |
x | 删除一个字母,类似于键盘上Delete功能 |
X | 删除一个字母,类似于键盘Backspace功能 |
yy | 复制光标当前行 |
p | 粘贴 |
dw | 删除一个词 |
yw | 复制一个词 |
Shift+g | 移动到页尾 |
1+Shift+g | 移动到目标行 |
N+shift+g | 移动到第N行 |
Shift+6 | 移动到行头 |
Shift+4 | 移动到行尾 |
- 编辑模式
-
在一般模式下通过字母 i 、a 、 o
进入到编辑模式,进入后左下角会有【插入】的字样.如想退出编辑模式,需要按下【ESC】按键 -
常用的操作
i | 当前光标前录入 |
---|---|
a | 当前光标后录入 |
o | 当前光标行的下一行录入 |
I | 行首录入 |
A | 行尾录入 |
O | 当前光标行的上一行录入 |
- 命令模式
-
在一般模式下输入 / 或者 : 进入命令模式,命令模式一般用于存盘、退出VIM
、显示行号、搜索、批量替换等操作. -
常用的操作
:w | 保存 |
---|---|
:q | 退出 |
:! | 强制执行 |
:%/s/old字符/new字符 | 批量替换 |
/要查找的词 | 搜索,n查找下一个,N查找上一个 |
:set nu | 显示行号 |
:set nonu | 关闭行号 |
noh | 取消高亮显示 |
4.3 三个模式之间的切换关系
4.4 VI、VIM键盘图
第5章 常用命令
==============
5.1 基本命令
man | 帮助手册 |
---|---|
–help | 帮助手册 |
date | 日期 |
cal | 日历 |
pwd | 显示当前所在目录 |
cd | 切换目录 |
ls | 显示当前目录下的内容 |
grep | 通过|管道符,配置grep进行过滤筛选 |
mkdir | 创建目录 -p :同时创建多级目录 |
Touch | 创建文件 |
rmdir | 删除一个空目录 |
rm | 删除文件或者目录 -rvf:递归删除所有目录内容,有提示 -rf:递归删除所有目录内容,无提示[慎用] |
cp | 复制 -r : 递归复制整个目录 -v:显示复制过程中文件的列表 \cp:强制覆盖不提示 |
mv | 重命名或者移动文件 mv oldFileName newFileName 重命名 mv /原目录/原文件 /新目录 移动文件 |
cat | 查看文件 cat 文件名 查看轻量级的文本文件 cat 文件1 文件2 连接显示多个文件 cat 文件1 > 文件2 合并为新文件 cat 文件1 >> 文件2 追加 |
more | 查看比较长的文件 空格键: 向下翻一页 回车键: 向下翻一行 q:代表立刻离开more ctrl+F 向下滚动一屏 ctrl+B 向上滚动一屏 |
less | 同more类似,比more功能更多 pageDown:向下滚动一页 pageUp:向上滚动一页 /字符串: 向下搜索指定字符串 ?字符串:向上搜索执行字符串 n:重复前一个搜索 N:反向重复前一个搜索 |
tail | 从尾部开始查看文件,比较适合看日志 -f:跟随查看 |
history | 查看历史命令 |
echo | 回显,输出 一般在shell脚本中使用较多 |
find | 查找文件,提供了丰富的模糊搜索及条件搜索 Find+搜索路径+参数+搜索关键字 按文件名: find /目录/… -name “*.txt” |
locate | 查找文件,基于索引,查询速度更快 通过updatedb来更新索引 |
ln | 软链接 Ln -s 原文件或者目录 软链接名 |
tar | 压缩文件 、解压缩文件 tar -zcvf xxx.tar.gz xxxx 压缩文件 tar -zxvf xxx.tar.gz 解压缩文件 -c:创建一个新归档 -x:从归档中解出文件 -v:显示详细信息 -f:指定压缩后的文件名 -z:通过gzip过滤归档 |
zip | 压缩文件 zip xxx.zip xxxx zip -r xxx.zip 目录/* |
unzip | 解压缩文件 upzip xxx.zip |
5.2 磁盘分区类命令
- Windows下的磁盘分区
- 常用的两种磁盘分区类型
- mbr
操作系统要安装在主分区
只支持4个主分区
扩展分区占一个主分区
- gpt(win7 64位以后)
无限主分区
支持超大硬盘 3T以上
- linux下查看所有设备挂在情况
lsblk 或者 lsblk -f
- 增加一块新硬盘,通过命令进行分区
- 虚拟机插入新硬盘
在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统
- 进行分区
通过 fdisk /dev/sdb 开始对 /sdb进行分区,
m 显示命令列表
p 显示磁盘
n 新增分区
d 删除分区
w 写入并退出分区
分区步骤如下: 开始分区后输入n,新增分区,然后选择p
,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
- 格式化磁盘
命令: mkfs -t ext4 /dev/sdb1
- 挂载
将一个分区与一个目录联系起来,
mount 设备名称 挂载目录
例如: mount /dev/sdb1 /newdisk
umount 设备名称 或者 挂载目录
例如: umount /dev/sdb1 或者 umount /newdisk
注意: 用命令行挂载重启后会失效
- 永久挂载
通过修改/etc/fstab实现挂载
添加完成后 执行mount –a 即刻生效
/etc/fatab文件参数介绍
第一列:磁盘设备文件或者该设备的Label或者UUID
第二列: 设备的挂载点,就是你要挂载到哪个目录下
第三列: 磁盘文件系统的格式,
包括ext2、ext3、reiserfs、nfs、vfat等
第四列: 文件系统的参数 ,defaults代表同时具有
rw,suid,dev,exec,auto,nouser,async等默认参数的设置
第五列: 能否被dump备份命令作用
0 代表不要做dump备份
1 代表要每天进行dump的操作
2 代表不定日期的进行dump操作
第六列: 是否检验扇区
0 不要检验
1 最早检验(一般根目录会选择)
2 1级别检验完成之后进行检验
5.3 磁盘情况查询
df -h 查询系统整体磁盘使用情况
du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
例: du -ach --max-depth=1 /opt
5.4 网络配置类
-
ifconfig 查看网络配置
-
如何修改ip
-
图形化操作
-
命令行方式 vi /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=eth0 #接口名(设备,网卡)
BOOTPROTO=none # IP的配置方法[none|static|bootp|dhcp](引导时不使用协
议|静态分配IP|BOOTP协议|DHCP 协议)
BROADCAST=192.168.1.255 #广播地址
HWADDR=00:0C:2x:6x:0x:xx #MAC地址
IPADDR=192.168.1.23 #IP地址
NETMASK=255.255.255.0 # 网络掩码
NETWORK=192.168.1.0 #网络地址
ONBOOT=yes #系统启动的时候网络接口是否有效(yes/no)
TYPE=Ethernet #网络类型(通常是Ethemet)
配置完了,立即生效 命令: network services restart
5.5 进程类
- ps(process)
- ps -aux
-a : 显示当前总段的所有进行信息
-u : 以用户的格式显示进程信息
-x : 显示后台进程运行的参数
- 详细内容解释
ps –aux|grep xxx
System V展示风格
USER:用户名称
PID:进程号
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TT:终端名称,缩写
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
- ps -ef
ps -ef是以全格式显示当前所有的进程
-e 显示所有进程。-f 全格式。
ps -ef|grep xxx
是BSD风格
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
- kill pid 杀死指定pid对应的进程.
-9: 强行杀死进程
5.6 服务类
- service(CentOS6)
-
注册在系统中的标准化程序
-
有方便统一的管理方式(常用的方法)
service 服务名 start
service 服务名 stop
service 服务名 restart
service 服务名 reload
service 服务名 status
-
查看服务的方法 /etc/init.d/服务名
-
通过chkconfig 命令设置自启动
查看服务 chkconfig --list|grep xxx
chkconfig --level 5 服务名 on
- 运行级别
查看默认级别: vi /etc/inittab
Linux系统有7种运行级别(runlevel):常用的是级别3和5
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
- systemctl(CentOS7)
-
注册在系统中的标准化程序
-
有方便统一的管理方式(常用的方法)
systemctl start 服务名(xxxx.service)
systemctl restart 服务名(xxxx.service)
systemctl stop 服务名(xxxx.service)
systemctl reload 服务名(xxxx.service)
systemctl status 服务名(xxxx.service)
-
查看服务的方法 /usr/lib/systemd/system
-
查看服务的命令
systemctl list-unit-files
systemctl --type service
- 通过systemctl 命令设置自启动
自启动 systemctl enable service_name
不自启动systemctl disable service_name
- 运行级别
查看默认级别: vim /etc/inittab
Centos7运行级别简化为:
multi-user.target 等价于原运行级别3(多用户有网,无图形界面)
multi-user.target 等价于原运行级别5(多用户有网,有图形界面)
5.7 netstat
查看系统的网络情况
-an 按一定顺序排列输出
-p 显示哪个进程在调用
netstat –anp|grep 8080 查看占用8080端口的进程
第6章 Linux 用户与权限管理
6.1 用户
-
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
-
对用户的操作
新增用户:useradd 新用户名
设置密码: passwd 用户名
用户是否存在:id 用户名
切换用户:su – 切换用户名
查看当前用户/登录用户:whoami/ who am I
删除用户:userdel
6.2 用户组
-
类似于角色,系统可以对有共性的多个用户进行统一的管理。
-
对用户组的操作
新增组:groupadd 组名
删除组:groupdel 组名
修改用户的组:usermod –g 用户组 用户名
增加用户时直接加上组:useradd –g 用户组 用户名
6.3 系统中用户和组的相关文件
- 用户(user)的配置文件: /etc/passwd
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
- 口令的配置文件: /etc/shadow
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时
间:不活动时间:失效时间:标志
- 组(group)的配置文件: /etc/group
每行含义:组名:口令:组标识号:组内用户列表
6.4 文件的权限管理
- 再说 ls -l
- 0-9位说明
第0位确定文件类型(d, - , l , c , b)
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
第7-9位确定其他用户拥有该文件的权限 —Other
- 作用到文件
[ r ]代表可读(read): 可以读取,查看
[ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件
是对该文件所在的目录有写权限,才能删除该文件.
[ x ]代表可执行(execute):可以被系统执行
- 作用到目录
[ r ]代表可读(read): 可以读取,ls查看目录内容
[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
[ x ]代表可执行(execute):可以进入该目录
- chmod
- 第一种方式:+ 、-、= 变更权限
u:所有者 g:所有组 o:其他人
a:所有人(u、g、o的总和)
chmod u=rwx,g=rx,o=x 文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名
- 第二种方式:通过数字变更权限
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名
- chown
chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录 则使其下所有子文件或目录递归生效
- chgrp
chgrp newgroup file 改变文件的所有组
第7章 rpm 与 yum
7.1 rpm
- RPM(RedHat Package
Manager),Rethat软件包管理工具,类似windows里面的setup.exe
是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通
用的。
-
查询已安装的rpm列表 rpm –qa|grep xx
-
rpm包的名称:firefox-52.5.0-1.el7.centos.x86_64
名称:firefox
版本号:52.6.0-1
适用操作系统: el7.centos.x86_64
表示centos7.x的64位系统。
- 安装rpm
rpm –ivh rpm包名
-i 安装 install
-v 查看信息
-h 查看进度条
- 卸载rpm
rpm -e RPM软件包
7.2 yum
-
类似于我们java开发中的maven工具,可以从镜像网站上下载应用程序,并直接安装
-
Yum 操作
yum list|grep xx 软件列表
yum install xxx 下载安装
第8章 搭建开发环境
8.1 安装JDK
-
将JDK解压缩到opt目录下
-
配置环境变量 , vim /etc/profile
JAVA_HOME=/opt/jdk1.8.0_152
PATH=/opt/jdk1.8.0_152/bin:\$PATH
export JAVA_HOME PATH
- 配置完成后执行如下操作
安装完成注销重新登录一下
source /etc/profile
重启系统[最靠谱]
8.2 安装Tomcat
-
解压缩到/opt
-
进入到Tomcat目录下的bin目录中,启动tomcat ./startup.sh
8.3 安装Eclipse、IDEA
8.4 安装MySQL
- 检查工作
- CentOS6
rpm -qa|grep mysql
如果存在mysql-libs的旧版本包如下:
请先执行卸载命令:rpm -e --nodeps mysql-libs
- CentOS7
rpm -qa|grep mariadb
如果存在如下:
请先执行卸载命令:rpm -e --nodeps mariadb-libs
- 检查/tmp文件夹权限
执行 :chmod -R 777 /tmp
- 安装MySQL
- 拷贝安装包到opt目录下
MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
- 执行如下命令进行安装
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
- 检查安装是否成功
- 安装完成后查看MySQL的版本
执行 mysqladmin –version,如果打印出消息,即为成功
或者通过rpm查询
rpm –qa|grep –i mysql(-i 表示忽略大小写)
- MySQL服务的启停
启动: service mysql start
停止: service mysql stop
- 设置root用户的密码
mysqladmin -u root password ‘123123’
- 登录MySQL
mysql -uroot -p123123
- 建库
create database 库名
- 建表
create table 表名 (字段名 字段类型(长度)约束 …)
- 字符集问题
-
查看字符集 show variables like 'character%’;
-
查看MySQL的安装位置.
- 修改字符集
将/usr/share/mysql/中的my-huge.cnf 拷贝到/etc/下,改名为my.cnf
tips: mysql启动时,会优先读取/etc/my.cnf文件。
在[client] [mysqld] [mysql]中添加相关的字符集设置
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
重启MySQL服务,查看字符集
service mysql restart
- 修改已有库表的字符集
修改库的字符集
alter database 库名 character set ‘utf8’;
修改表的字符集
alter table 表名 convert to character set ‘utf8’;
- 远程访问
-
MySQL默认的root用户只允许本机登录,远程通过SQLyog工具不能登录.
-
查看MySQL mysql库中的用户表
列显示: select * from user\G;
查询常用字段: select host,user,password,select_priv from mysql.user;
- 创建可以远程访问的root用户并授予所有权限
grant all privileges on *.* to root@’%’ identified by '123123‘;
- 修改用户的密码
修改当前用户的密码
set password =password('123456’)
修改某个用户的密码
update mysql.user set password=password(‘123456’) where user=‘li4’;
- 注意: 所有通过user表的修改,必须使用flush privileges 命令才能生效.
8.4.1 通过Docker安装MySQL
1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、查看运行中的容器
docker ps
5、 停止运行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps -a
7、启动容器
docker start 容器id
8、删除一个容器
docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
10、为了演示简单关闭了linux的防火墙
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container-name/container-id
通过docker容器来运行一个mysql的镜像
- docker search mysql
- docker pull mysql
- docker run (这个过程是需要注意的 端口映射,设置密码等。。。)
[root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad10e4bc5c6a mysql "docker-entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql02