一、学习流程:
1、文件操作命令(rm mkdir chmod chown) 编辑工具(vi vim ) linux 用户管理(useradd userdel usermod)等
2、各种配置(环境配置,网络配置,服务配置)
3、linux下搭建对应语言的开发环境(大数据,javaee,python)
4、能编写shell脚本,对linux服务器进行维护
5、能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优
6、深入理解linux系统,熟练掌握大型网站应用架构组成,并熟悉各个环节的部署和维护方法
二、linux基础篇
1、虚拟机VM和linux系统(CentOs)的安装
关系:在windows上安装VM软件,虚拟出一个操作空间,在操作空间中安装 CentOs(可以看成文件夹)。并且该CentOs可以在任何一台VM中打开。
安装步骤
1、安装VM
(5条消息) 最新超详细VMware虚拟机下载与安装(一篇足以带你上高速,附钥)_Slcp的博客-优快云博客_vmware虚拟机百度云下载
注意要进入BIOS 将系统虚拟化 [enable]。不同系统进入BIOS方法不同。
这些过程会有多次的重启。
2、创建一个虚拟空间/centos的安装
(5条消息) Linux之CentOS下载与安装教程【图文详解】_花伤情犹在的博客-优快云博客_centos linux下载
注意虚拟机三种网络连接模式:
- 桥接模式:A系统中的linux的ip地址与母机的ip一致,可以与其他系统网络通信。但是会造成同一个网络环境中ip地址不够用,冲突。
- NAT模式:A系统中的linux的ip不会与母机ip一致,不占用A系统的网络环境ip。linux可以访问外网,不会造成ip冲突。(推荐模式)
- 仅主机模式:linux是一个独立的主机,不能访问外网。
3、centos的终端打开与联网使用
- 桌面右键选择--打开终端
- 联网使用--用火狐浏览器
4、安装vmtool
- 将Windows内容复制粘贴到linux中
- 共享文件
5、目录结构
- 只有一个根目录:/
- 各个目录存放的内容是预先规划好的,不要乱放文件,类似 树 结构
- 在linux世界里,一切皆文件
- linux各个目录下,存放什么内容,必须有一个认识
-
/bin 用于存放经常使用的命令
-
/sbin 用于存放的是系统管理员使用的系统管理程序
-
/home 存放普通用户的主文件,在Linux中每个用户都有一个自己的目录,一般改目录是以用户的账号命名的
-
/root 系统管理员,超级权限者的用户主目录
-
/lib 类似于Windows里的DLL
-
/etc 所有系统管理所需要的配置文件和子目录
-
/user 类似windows下的 program file目录(重要)
-
/boot 启动linux时使用的一些核心文件,包括一些链接文件以及镜像文件
-
/media 系统会自动识别一些设备,例如U盘,光驱
-
/mnt 让用户临时挂载在别的文件系统
-
/user/local 给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序
-
/var 存放在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下
三、linux实战篇
1、为什么要远程登录linux
linux服务器是开发小组共享的,正式上线的项目实在公网上运行的,因此程序员需要远程登录到centos进行项目管理或者开发。
xshell:用于远程登录linux的软件
xftp:mysql的安装文件上传到linux上,或者将文件从linux下载到Windows
(5条消息) XShell免费版的安装配置教程以及使用教程(超级详细、保姆级)_SoloVersion的博客-优快云博客_xshell安装步骤
特别说明:如果希望安装好xshell就可以远程访问linux系统的话,需要linux启动linux 启动了SSHD服务,开启22端口
(5条消息) Xshell连接虚拟机详细教程_为你关月亮的博客-优快云博客_xshell连接虚拟机
2、vi 和 vim编辑器
所有linux系统都会内建vi编辑器。vim具有程序编辑的能力,可以看成是VI的增强版本。
三种常用模式
- 正常模式:可以使用快捷键 上下左右 删除字符 删除行 复制、粘贴
- 插入模式/编辑模式: i I o O a A r R
- 命令行模式:读取 存盘 替换 离开 :wq :q! :q
案例:用vim开发hello.java程序
三种模式相互切换
快捷键
- 拷贝当前行 【yy】 拷贝当前行向下的5行 【5yy】 并粘贴 【p】
- 删除当前行 【dd】 删除当前行向下的5行 【5dd】
- 在文件中查找某个单词【命令行下/关键字 ,回车 查找 ,输入n就是查找下一个】
- 设置文件的行号【:set nu】,取消文件的行号【:set nonu】
- 底文档的最末行 【G】和最首行【gg】
- 撤销【u】
- 光标移动到 20 行 【20 shift+g】
键盘图
3、关机和重启
shutdown
- shutdown -h now :表示立即关机
- shutdown -h 1:表示1分钟后关机
- shutdown -r now: 立即重启
halt :效果等价于关机
reboot :重启
sync : 把内存数据同步到磁盘 。在关机或者重启之前进行执行,以保存文档,防止数据丢失。
4、用户的登录和注销
- 登录时尽量少用root账号登录,因为它是系统管理员,最大的权限,避免操作失误,可以利用普通用户登录,登录后在 【su-用户名】 命令切换成系统管理员身份
- 【logout 】退出远程登录,注销,运行级别3下有效
5、用户管理
用户 组 家目录
- linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先想系统管理员申请一个账号,然后以这个账号的身份进入系统。
- linux的用户需要至少要属于一个组。
添加用户 :useradd [选项] 用户名
- 当创建用户成功后,会自动的创建和用户同名的家目录
- 也可以通过指定目录 【useradd -d /目录 用户名】例如:useradd -d /home/hello1/ xiaoming
- 使用 【passwd 用户名 】设置密码
删除用户:userdel 用户名
- 删除用户小明,但是要保留家目录 【userdel xiaoming】
- 删除用户小明以及用户组 【userdel -r xiaoming】
- 细节:一般情况下 保留家目录
查询用户: id 用户名
切换用户: su - 用户名
【exit】 回到原来的用户
查看当前用户: whoami
用户组:类似于角色,系统对有共性的多个用户进行统一的管理
- 新增组:groupadd 组名
- 删除组:groupdel 组名
- 增加用户时直接加上组:useradd -g 用户组 用户名
- 修改用户的组: usermod -g 用户组 用户名
用户和组的相关文件
- 用户配置文件 /etc/passwd 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
- 组配置文件(组信息)/etc/group 登录名:加密口号:最后一次修改的时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- 口令配置文件(密码和登录信息)/etc/shadow 组名:口令:组标识号:组内用户列表
增加用户后以上三个文件都会产生相应变化
6、实用指令
指定运行级别
- 0:关机
- 1:单用户(找回丢失密码)
- 2:多用户无网络服务
- 3:多用户有网络服务 (常用)
- 4:保留
- 5:图形界面 (常用)
- 6:重启
系统的运行级别配置文件 /etc/inittab
切换到制定运行级别的指令 init 级别 (每次切换,都需要输入root密码)
面试题:如何找回丢失的root密码
思路:进入到单一用户 ,然后修改密码
开机-》在引导时输入 回车键-》看到一个界面输入 e->看到一个新的界面,选中第二行(编辑内核)在输入 e-》在这行最后输入 1,在输入 回车键 -》再次输入b, 这时就会进入单用户模式,使用passwd修改root密码。
设置运行级别,linux运行后,直接进入到命令行界面,即进入3运行级别
- vim /etc/inittab
- 将 id:5:initdefault: 这一行中的数字,5这个数字改成对应的运行级别
帮助指令
man【命令或配置文件】(功能描述,获得帮助信息)
help 命令 (功能描述,获得shell内置命令)
文件目录类
pwd (显示当前工作目录的绝对路径)
ls 【选项】【目录或者文件】
- -a 显示当前目录所有的文件和目录 ,包括隐藏的
- -l 以列表形式
- -al
cd 【参数】
- cd .. 回到当前目录的上一级目录 cd ../../ 返回两级
- cd ~ /cd : 回到自己的家目录
- cd 【绝对路径和相对路径】
mkdir 【要创建的目录】
- -p 创建多级目录
rmdir 【要删除的目录】
- 注意,删除的是空目录,如果目录下有内容时无法删除,要用 rm -f 删除
touch 【要创建的空文件】
cp 【要拷贝的文件】【要拷贝的路径/】
- -r 递归复制整个文件夹 cp -r
rm 【要删除的文件或目录】
- -r 递归删除整个文件夹
- -f 强制删除不提示
mv 移动文件与目录或者重命名
- mv【old文件名】【new文件名】
cat 【要查看的文件】| more
- -n 显示行号
more 基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容
- 空白键 代表向下翻一页
- enter 代表向下翻一行
- q 代表立即离开more 不再显示该文件内容
- ctrl+f 向下滚动一屏
- ctrl+b 返回上一屏
- = 输出当前行号
- :f 输出文件名和当前行号
less 指令 分屏查看,并不是一次将一整个文件加载之后才显示,而是根据现实需要家在内容,对于大型文件具有较高的效率
> 输出重定向
- ls -l >文件 列表的的内容写入文件中(覆盖)
- cat 文件1>文件2 将文件1的内容覆盖到文件2
>> 追加
- ls -al >>文件 列表的的内容追加到文件末尾
- echo "内容">>文件 将内容写入文件
- 将日历信息追加 cal >> /路径
echo 【选项】【输出内容】
- 输出当前环境路径 echo $PATH
- 输出文本
head 用于显示文件的开头部分,默认情况下显示10行
- head -n 5 文件 查看文件头5行内容
tail 用于输出文件中尾部的内容,默认情况下tai 指令显示文件的后10行
- tail -n 5 文件 查看文件后5行内容
- tail -f 文件 实时追踪该文档的所有更新 ctrl+c退出
ln 软连接指令,类似于windows里的快捷方式
- ln -s 【原文件或目录】【软链接名】 给原文件创建一个软链接
- 删除软链接 rm -rf 软链接 (不能在软链接后加 / ,否则提示资源忙)
history 查看已经执行过历史命令,也可以执行历史命令
执行历史编号为195的指令 !195
时间日期类
date 显示当前日期和时间
- date +%Y 年
- date +%m 月
- date +%d 日
- date ''+%Y-%m-%d%H:%M:%s''
- date -s 字符串时间
cal 查看日历
- cal 2020 显示2020一整年日历
搜索查找类
find 【搜索范围】【选项】
- -name<查询方式> 按指定的文件名查找模式 查找文件
- find /home -name *.txt
- -user<用户名> 查找属于指定用户名所有文件 find /opt -user nobody
- -size<文件大小> 按照指定的文件大小查找文件 大于20兆 find / -size +20M 小于20兆 find / -size -20M
- ls -lh
locate 指令
可以快速定位文件路径。locate 指令利用实现建立的系统中所有文件名称以及路径的locate数据库实现快速定位给定的文件。locate指令需要遍历整个文件系统,查询速度比较快。
由于locate 指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
grep指令和管道符号
grep过滤查找,管道符,''|'' 表示将前一个命令的处理结果输出传递给后面的命令处理。
cat pigs.txt | grep -ni look
grep 【选项】查找内容 源文件
- -n 显示匹配行及行号
- -i 忽略字母大小写
压缩和解压缩
gzip 文件 用于压缩 ,只能将文件压缩为*.gz文件 且不会保留源文件
gunzip 文件 用于解压缩
zip 用于压缩
-r 递归压缩,即压缩目录
unzip 用于解压缩
tar 指令
压缩 tar -zcvf 【a.tar.gz 】【a1.txt a2.txt】
压缩目录下所有 tar -zcvf 【a.tar.gz 】【/home/】
- -c 产生.tar打包文件
- -v 显示详细信息
- -f 指定压缩后的文件名
- -z 打包同时压缩
- -x 解包.tar文件
解压到当前 tar -zxvf 【a.tar.gz 】
解压到目录 tar -zxvf 【a.tar.gz 】-C 【hello1/】 要求指定的解压目录存在
7、组管理和权限管理 重难点
组
linux的每个用户必须属于一个组,不能独立于组外,在Linux中,每个文件有所有者、所在组、其他组的概念。
所有者 文件的所有者,一般是文件的创建者
- 查看所有者 ls -ahl
- 修改文件所有者 chown 用户名 文件(不改变组)
所在组
- 改变文件所在的组 chgrp 组名 文件名
- 将所有的文件和目录所在组都修改 chgrp -R 组名 目录/文件
其他组
- 改变用户所在组 usermod -g 组名 用户名
- 改变用登录的初始目录 usermod -d 目录名 用户名
ls -l 权限的基本介绍 重要
- - 普通文件
- d 目录
- l 软链接
- c 字符设备 键盘 鼠标
- b 块文件 硬盘
上图为文件所有者的权限 r 读权限 w 写权限
上图为 文件所在组的用户的权限 r--表示只有读的权限
上图为 文件的其他组的用户的权限 r-- 表示只有读的权限
如果是文件 ,表示 硬链接的数,
如果是目录, 表示该目录的子目录个数
- 106 是指文件大小; 还包括一个隐藏字符
- 如果是目录,则该数字为4096;
rwx 权限
作用到文件
- r:读取和查看 4
- w:可以修改,但不代表可以删除文件。除非对该文件所在的目录有写权限,才能删除该文件 2
- x:可以被执行 1
作用到目录
- r: 代表可以读取,ls 查看目录内容 4
- w: 可以修改 目录创建+删除+重命名 2
- x:可以进入改目录 1
. 代表当前目录 .. 代表上一个目录 一般被隐藏
时间 代表 最后修改时间
修改权限 chmod
- U:所有者 g:所有组 o:其他人 a:所有人(u\g\o的总和)
- chmod u=rwx,g=rx,o=x 文件目录名
- chomd o+w 文件目录名 给o增加一个w权限
- chomd a-x 文件目录名 给所有用户减少一个x权限
用数字的方式实现 rwxr-xr-x
- rwx=4+2+1=7
- r-x=4+1=5
- chmod 755 文件
-R 如果是目录,则使其下所有子文件或目录递归生效
将目录下的所有文件和目录的所有者都改成tom chowm -R tom kkk/
8、定时任务调度
crontab 任务调度 任务调度是指系统在某个时间执行的特定的命令或程序
任务调度分类:
- 系统工作 有些重要的工作必须周而复始地执行
- 个别用户工作 个别用户可能希望执行某些程序,比如mysql数据库库的备份
- -e 编辑crontab 定时任务
- -l 查询crontab 任务
- -r 删除当前用户所有的crontab 任务
如果只是简单的任务,可以不写crontab脚本,直接在crontab中加入任务即可
对于比较复杂的任务,需要写shell
5个占位符的说明
- 第一个 * 一小时当中的第几分钟 0-59
- 第二个* 一天当中的第几小时 0-23
- 第三个* 一个月当中的第几天 1-31
- 第四个* 一年当中的第几个月 1-12
- 第5个* 一周当中的星期几 0-7(0和7都代表星期日)
- * 代表任何时间
- , 代表不连续的时间,比如“0 8,12,16 * * *”命令代表每天8点、12点、16点都执行一次命令
- - 代表连续的时间范围,比如“0 5 * * 1-6”命令,代表在周一到周六的凌晨5点0分执行命令
- */n 代表没个多久执行一次。 比如“*/10 * * * *”命令,代表每隔10分钟执行一次
- service crond restart 重启任务调度
9、磁盘分区,挂载
分区方法:
mbr分区
- 最多只能支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- 最大只支持2TB,但拥有最好的兼容性
gtp分区
- 支持无限多个主分区 但操作系统可能限制,比如windows下最多128分区
- 最大支持18EB的容量,1EB=1024PB 1PB=1024TB
- windows7 64位以后支持gtp
linux来说无论有几个分区,分给哪一目录使用。它归根结底就只有一个根目录,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部分
linux采用了一种叫载入的处理方法,它的整个文件系统中包含了一整套的文件和,兖,且将一个分区和一个目录联系起来。这时就要载入的一个分区将使他的存储空间在一个目录下获得。
- 对于IDE硬盘,''hdx'hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区
- hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区
- a表示基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘
- 对于sici硬盘,‘sdx’
lsblk -f 查看系统的分区和挂载情况
UUID 是唯一标识分区40位不重复字符串
mountpoint 挂载点
linux桌面电脑终端上进行磁盘查看
给虚拟机增加硬盘2g,挂载到/home/newdisk:
- 虚拟机添加硬盘,重启
- 分区 fdisk /dev/sdb n(add a new partition type) p (partition number) w(写入并保存) q(不保存退出)
- 格式化 mkfs - t ext4 /dev/sdb1
- 挂载 先创建一个 /home/newdisk ,挂载 mount /dev/sdb1 /home/newdisk
- 设置可以自动挂载 (永久挂载) vim /etc/fstab
- 断挂载 回到home后 umount /dev/sdb1 或者 umount /home/newdisk
磁盘情况查询 df -h
查询指定目录的磁盘占用情况
du -h /目录
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- --max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
磁盘工作使用情况
1)统计 home 下文件数目 ls -l /home | grep "^-" | wc -l
2)统计home下目录个数 ls -l /home | grep "^d" | wc -l
3)统计home文件夹下文件个数,包括子文件夹里的 ls -lR /home | grep "^-" | wc -l
4)统计文件夹下目录的个数,包括文件夹里面得 ls -lR /home | grep "^d" | wc -l
5)以树状显示目录结构 tree 如果未找到该目录用 yum install tree 进行安装
10、网络配置
目前采用的网络配置是nat模式
- 查看虚拟网络编辑器 编辑--虚拟网络编辑器
- 修改ip地址(修改虚拟网卡的ip)
- 查看网关 选中网络--NAT设置--网关IP
使用ipconfig查看
ping测试主机之间网络联通行 ping www.baidu.com
自动配置 :linux启动后会自动获取IP,缺点是每次自动获取ip地址可能不一样,这个不适用于服务器,因为我们的服务器的ip需要固定。
固定配置:直接修改文件配置以指定ip,并可以连接到外网
CentOS 7教程(二)-网络设置 - 知乎 (zhihu.com)
编辑 vi etc/sysconfig/network-scripts/ifcfg- ens33
要求将ip地址配置的静态的,地址为 192.168.184.130
上图是修改ip之前的
网关和域名保持一致
需要重启网络 systemctl restart network
11、进程管理
- 在linux中,每个执行的程序(代码)都称为一个进程,每一个进程都分配一个ID号
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如wwww服务器
- 每个进程都可能以两种方式存在:前台和后台。前台进程:用户目前的屏幕上可以进行操作的。后台:实际在操作,由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台的方式存在,而且都会在常驻在系统中,直到关机才结束。
ps 命令是用来查看目前系统中,有哪些正在执行,以及它们执行的情况
ps -aux | more
指令 ps -aux | grep xxx 比如查看sshd ps -aux | grep sshd
- -a 显示当前终端的所有进程信息
- -u 以用户的格式显示进程信息
- -x 显示后台进程运行的参数
STAT:进程状态
- S-睡眠
- s-该进程是会话的先导进程
- N-拥有比普通优先级更低的优先级
- R-正在运行
- D-短期等待
- Z-僵死进程
- T-被跟踪或者被停止等等
查看父进程 ps -ef | more 只查看sshd进程的父进程号 ps -ef | grep sshd
终止进程kill 和 killall
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很有用)
-9 表示强迫进程立即停止
终止多个编辑器
查看进程树 pstree
-p 显示进程的PID
-u 显示用户ID
服务管理(service)
本质就是进程,但是运行在后台,通常都会监听某个端口,等待其他程序的请求,因此我们又称为守护进程,是linux中非常重要的知识点。
systemctl 服务名 【start | stop | restart | reload | status】
查看当前防火墙状况,关闭防火墙和重启防火墙
(6条消息) LINUX 开启防火墙_chl6021的博客-优快云博客_linux开启防火墙
1.systemctl start firewalld.service(开启防火墙)
2.systemctl stop firewalld.service(关闭防火墙)
3.service firewalld restart(重启防火墙)
查看服务名 ls -l /etc/init.d/
运行级别 runlevel
开机的流程:开机 -》BIOS-》/boot-》init进程-》运行级别-》运行级别对应的服务
chkconfig指令 可以给每个服务的各个运行级别设置自启动/关闭
- 查看服务 systemctl list-unit-files
- 查看某个服务名 systemctl list-unit-files | grep firewalld
- systemctl distable sshd.sevice
动态监控进程
top 与 ps 命令很相似,他们都是用来显示正在执行的进程。
Top 与ps最大的不同之处,top在执行一段时间可以更新正在运行的进程
- -d 秒数
- -i
- -p
交互操作
- P 以CPU使用率排序,默认就是此项
- M 以内存的使用率排序
- N 以PID排序
- q 退出top
监控网络状态 netstat
-an 按一定顺序排序输出
-p 显示哪个进程在调用
查看系统的所有网络服务 netstat -anp
查看某一指定 netstat -anp | grep sshd
12 、RPM YUM
RPM 一种用于互联网下载包的打包以及安装工具,它包含在某些linux分发版中,它生成具有.RPM扩展名的文件。RPM (RedHal Package Manager)
查询已安装的rpm列表 rpm -qa | grep XX
rpm -qi firework 查询详细信息
卸载RPM包
rpm - e prm包的名称
强制删除 rmp -e -nodeps foo
i 安装
v 提示
h 进度条
步骤先找到firefox的安装rpm 包 ,需要挂载上我们安装centos的iso文件,然后/media/下去 找rpm
yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定服务器自动下载RPM包并安装,可以自动处理依赖性关系,并且一次安装所有的软件包
yum的基本指令 yum list | grep xx
安装指定的yum包 yum install xxx