Linux基础篇
学习流程
Linux 学习方法和建议
Linux介绍
- Linux是一款操作系统, 免费, 开源, 安全, 高效, 稳定, 处理高并发非常强悍, 现在很多的企业级的项目都部署到Linux或者Unix服务器上运行.
- 主要发行版本:
- 目前主要的操作系统有: Windows, Android, 车载系统, Linux
VM和Linux系统(CentOS)的安装
- 安装虚拟机软件
- 安装Linux(CentOS 6.8)
- 画图说明一下VM和CentOS的关系
- CentOS安装
- 创建虚拟机空间
- 开始安装系统
选择网络模式的区别
vmtools-- windows环境下更好的管理虚拟机的工具
安装步骤
Linux目录结构
Linux世界里, 一切皆文件, 无论是声卡,网卡都是文件
/: 根目录
/bin: 常用的指令
/dev: 硬件映射成文件管理的目录
/etc: 配置文件
/home: 家目录, 每一个用户, 就会在/home下创建对应的文件夹
/lib: 动态库
/media: 插入光驱或硬盘识别出来的文件
/mnt: 挂载的目录,可以识别别的文件系统. 例如Linux挂载Windows的文件夹
/opt: 要安装的软件目录
/proc: 内核的目录
/root: root的文件
/sbin: 高权限用户能够访问的文件夹
/selinux: Linux安全相关目录
/srv: 存放一些服务启动之后需要提取得数据
/sys: 系统
/tmp: 临时文件夹
/usr: 用户安装的文件和程序放在这里
/usr/local: 另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序
/var: 变量 将经常被修改的目录放在这个目录下, 包括各种日志文件
总结一下
- Linux的目录中有且只有一个根目录 /
- Linux的各个目录存放的内容是规划好的,不用乱放文件.
- Linux是以文件的形式管理设备的, 因此Linux系统, 一切皆为文件
- Linux 的各个文件目录下存放什么内容, 必须有一个认识.
- 学习后, 脑海中应该有一颗Linux目录树
Linux实操篇
vi/vim编辑器
正常模式
在正常模式下可以使用快捷键
dd
删除整行 5dd
删除当前行向下的5行
yy
拷贝整行 5yy
拷贝当前行向下的5行 按p粘贴
u
撤销上一次的动作
插入模式
在插入模式下, 程序员可以输入内容.
按下i进入编辑模式
按下Esc键可以从编辑模式回到正常模式
命令行模式
在这个模式中, 可以完成读取, 保存, 替换, 离开, 显示行号等操作
用:
进入命令行模式
wq
保存退出
q!
不保存退出
再文件中查找某个单词[命令行下 /关键字, 回车查找, 输入n就是查找下一个]
取消搜索的高亮显示:noh
设置文件的行号:set nu
取消行号:set nonu
如果强制退出的话, 可能会由于生成.xxxx.swp隐藏文件而导致要修改的文件变为只读状态,这时需要使用ll -a
显示出.xxx.swp隐藏文件然后用 rm -rf .xxxx.swp
删除该隐藏文件, 然后再用vi命令进入并编辑文件即可
开机, 重启和用户登录注销
关机和重启指令
shutdown -h now 立刻进行关机
shutdown -h 1 表示1分钟会关机
shutdown -r now 现在重启
halt 关机,作用和立刻关机一样
reboot 现在重启
sync 把内存的数据同步到磁盘
注意: 不管是重启系统还是关闭系统, 首先要运行sync命令, 把内存中的数据写到磁盘上
用户登录和注销
如果用普通成员身份登录, 没有文件的权限, 可以使用sudo vim xxx文件
暂时借用管理员权限
用户管理
Linux的用户需要至少要属于一个组
添加用户
useradd 用户名
当创建用户成功后, 会自动的创建和用户同名的家目录
也可以通过useradd -d 指定目录 新的用户名
给新创建的用户指定家目录
增加用户时直接加上组名
useradd -g 用户组 用户名
指定密码或修改密码
passwd 用户名
删除用户
userdel 用户名
- 删除用户xiaoming, 但是要保留家目录直接用userdel删除即可
- 删除用户以及用户主目录
userdel -r xh
查询用户信息
id 用户名
切换用户
su - 用户名
- 从权限高的用户切换到权限低的用户, 不需要输入密码, 反之需要
- 当需要返回原来的用户时, 使用exit指令
查看当前用户/登录用户
whoami
/who am I
用户组
用户组类似于角色, 系统可以对有共性的多个用户进行统一的管理
新增组 groupadd 组名
删除组 groupdel 组名
修改用户的组 usermod -g 新的用户组 用户名
用户和组的相关文件
- /etc/passwd用户配置文件
用户(user)的配置文件, 记录用户的各种信息
每行的含义: 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell - /etc/shadow用户密码文件
口令的配置文件
每行的含义: 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 - /etc/group组配置 文件
组(group)的配置文件, 记录Linux包含的组的信息
每行含义: 组名:口令:组标识号:组内用户列表 - /etc/gshadow组密码文件
实用指令
指定运行级别
面试题(找回丢失的root密码)
如何找回丢失的root密码: 如果我们不小心忘记了root密码, 怎么找回呢?
思路: 进入到 单用户模式, 然后修改root密码. 因为进入单用户模式, root不需要密码就可以登录.
总结:
开机-> 再引导时输入 回车键-> 看到一个界面输入e-> 看到一个新的界面, 选中第二行(编辑内核) 再输入e-> 在这行最后输入1, 再输入回车键-> 再次输入b, 这时就会进入单用户模式.
这时, 我们就进入到单用户模式, 使用passwd root指令来指定root密码
帮助指令
当我们对某个指令不熟悉时, 我们可以使用Linux提供的帮助指令来了解其使用方法.
man [命令或配置文件]
(功能描述: 获取帮助信息)
help 命令
文件目录类
pwd
显示当前工作目录的绝对路径
ls [选项] [目录或文件]
查看当前目录的所有内容信息
-a: 显示当前目录所有的文件和目录, 包括隐藏的
-l: 以列表的方式显示信息
cd [参数]
切换到指定目录
cd ~或者cd
回到自己的家目录
cd ..
回到当前目录的上一级目录
mkdir [选项]
要创建的目录创建目录
-p: 创建多级目录
rmdir [选项] 要删除的空目录
rmdir删除的是空目录, 如果目录下有内容时是无法删除的. 提示: 如果需要删除非空目录, 需要使用rm -rf 要删除的目录
touch 文件名称
创建一个空文件
touch test1.txt test2.txt
一次性创建两个文件
cp [选项] 源文件 目标目录
拷贝文件到指定目录
-r: 递归复制整个文件夹
强制覆盖不提示的方法: \cp -r test /usr/zwj
rm [选项] 要删除的文件或目录
移除文件或目录
-r: 递归删除整个文件夹
-f: 强制删除不提示
mv 移动文件或重命名
mv 旧文件名 新文件名
--重命名
mv 文件 目录
--移动文件
cat [选项] 要查看的文件
查看文件内容, 以只读的方式
-n: 显示行号
cat只能浏览文件, 而不能修改文件, 为了浏览方便, 一般会带上管道命令 | more
这样可以分页显示 例如: cat /etc/profile | more
按空格键查看下一页
more 要查看的文件
more指令是一个基于VI编辑器的文本过滤器, 它以全屏幕的方式按页显示文本文件的内容. more指令中内置了若干快捷键
空格, 向下翻页
回车, 向下翻一行
q, 立刻离开more, 不再显示该文件内容
Ctrl + F, 向下滚动一屏
Ctrl + B, 返回上一屏
=, 输出当前行的行号
:f, 输出文件名和当前行号
less 要查看的文件
分屏查看文件内容
功能与more类似, 但是比more更加强大, 支持各种显示终端. less指令在显示文件内容时, 并不是一次将整个文件加载之后才显示, 而是根据需要加载内容, 对于显示大型文件具有较高的效率
空格, 向下翻页
[pagedown], 向下翻页
[pageup], 向上翻页
/字符串, 向下搜寻功能, n: 向下查找. N: 向上查找
?字符串, 向上搜寻字符串. n: 向上查找. N: 向下查找
q离开less这个程序
输出重定向和>>追加
ls -l > 文件
列表的内容写入文件a.txt中(覆盖写,如果a.txt不存在就创建 )
ls -al >> 文件
列表的内容追加到文件aa.txt的末尾
cat 文件1 > 文件2
将文件1的内容覆盖到文件2
echo "内容" >> 文件
把内容追加进文件中
echo [选项] [输出内容]
输出内容到控制台
输出环境变量echo $PATH
head 文件
查看文件头10行内容 或者head -n 5 文件
查看文件头5行内容
tail 文件
查看文件后10行内容
tail -n 5 文件
查看文件后5行内容
tail -f 文件
实时追踪该文件的更新, Ctrl + C退出
ln -s [原文件或目录] [软链接名]
给原文件创建一个软链接,类似于windows里的快捷方式
细节: 当我们使用pwd指令查看目录时, 仍然看到的是软链接所在目录
删除软链接 rm -rf 软链接名
删除软链接文件时, 最后不要带斜杠, 否则提示资源忙
history
查看已经执行过的历史命令,也可以执行
history 10
显示执行过的最后10条指令
!178
执行历史第178条指令
时间日期类
date
显示当前时间
date +%Y
显示当前年份
date +%m
显示当前月份
date +%d
显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S"
显示年月日时分秒
date -s 字符串时间
设置日期 例如:date -s "2020-11-11 11:22:22"
cal [选项]
查看日历指令, 不加选项的话, 显示本月日历
cal 2020
显示2020年日历
搜索查找类
find [搜索范围] [选项]
find指令将从指定目录向下递归地便利其各个子目录, 将满足条件的文件或目录显示在终端
-name<查询方式> 查询的关键字
按照指定的文件名查找模式查找文件find / -name *.txt
-user<用户名> 查询的关键字
查找属于指定用户名所有文件
-size<文件大小> 查询的关键字
按照指定的文件大小查找文件(+n 大于 -n小于 n等于 M代表兆 k代表KB)
-mtime +10
查找修改时间为10天前的文件
-mtime -2
查找2天内修改的文件
-exec rm -rf {} \;
删除找到的所有文件 固定写法
按照时间查找
按照时间使用find查找
locate 搜索文件
locate指令可以快速定位文件路径
由于locate指令基于数据库进行查询, 所以第一次运行前, 必须使用updatedb指令创建locate数据库
grep [选项] 查找内容 源文件
-n
显示匹配行及行号
-i
忽略字母大小写
-A 数字
查询当前内容后n行的数据
-B 数字
查询当前内容前n行的数据
-C 数字
查询当前内容前后n行的数据
管道符|
表示将前一个命令的处理结果输出传递给后面的命令处理
-v xx
查看不包含xx的数据
压缩和解压缩类
gzip 文件
压缩描述, 只能将文件压缩为*.gz文件
gunzip 文件.gz
解压缩文件命令
当我们使用gzip对文件进行压缩后, 原文件就不存在了
zip [选项] XXX.zip 将要压缩的内容
压缩文件和目录的命令
-r
: 递归压缩(即压缩目录)zip -r myZip.zip /home/*
unzip [选项] XXX.zip
解压缩文件
-d 解压到的目录
指定解压后文件的存放目录unzip -d /opt/tmp/ myZip.zip
tar [选项] XXX.tar.gz 打包的内容
打包目录, 压缩后的文件格式为.tar.gz
-c
产生.tar打包文件
-v
显示详细信息
-f
指定压缩后的文件名
-z
打包同时压缩
-x
解包tar文件
把a1.txt和a2.txt共同压缩成a.tar.gztar -zcvf a.tar.gz a1.txt a2.txt
对/home下的所有文件进行打包tar -zcvf myhome.tar.gz /home/*
解压缩tar -zxvf a.tar.gz
解压同时指定路径tar -zxvf myhome.tar.gz -C /opt/
前提: 解压到的目录必须得有, 要是没有, 报错
组管理和权限管理
组的基本介绍
Linux中的每个用户必须属于一个组, 不能独立于组外. 在Linux中每个文件有所有者, 所在组, 其他组的概念
文件/目录所有者
一般为文件的创建者, 谁创建了该文件, 就自然的成为该文件的所有者
ls -ahl
查看文件的所有者
chown 用户名 文件名
修改文件所有者
组的创建
groupadd 组名
文件目录所在组
当某个用户创建了一个文件后, 默认这个文件的所在组就是该用户所在的组.
ls -ahl
查看文件目录所在组
chgrp 组名 文件名
修改文件所在的组
其他组
除文件的所有者和所在组的用户外, 系统的其他用户都是文件的其他组
改变用户所在组
用root的管理权限可以改变某个用户所在的组
usermod -g 组名 用户名
改变用户所在组
usermod -d 目录名 用户名
改变该用户登陆的初始目录
权限的基本介绍
ls -l显示的内容如下
第0位说明: d: 代表目录 -: 代表普通文件 l: 软连接 c: 字符设备(键盘, 鼠标) b: 块文件(硬盘)
r: 可读权限 w: 可写权限 e: 可执行权限
后面的1那个位置如果是文件, 表示硬链接的数, 如果是目录则表示该目录的子目录个数
后面那个6代表文件大小是6个字节 如果是目录 则显示4096
后面的时间表示文件最后的修改时间
rwx权限详解
rwx作用到文件
- r代表可读 可以读取 查看
- w代表可写, 可以修改, 但是不代表可以删除该文件, 删除一个文件的前提条件是对该文件所在的目录有写权限, 才能删除该文件
- x代表可执行 可以被执行
rwx作用到目录
- r代表可读 可以读取 ls查看目录内容
- w代表可写 可以修改, 目录内创建+ 删除+ 重命名目录
- x代表可执行, 可以进入该目录
修改权限chmod
基本说明
通过chmod指令, 可以修改文件或者目录的权限
第一种方式: + - =变更权限
u: 所有者 g:所有组 o:其他人 a: 所有人(u, g, o的总和)
chmod u=rwx,g=rx,o-x 文件目录名
为u g o三者赋予权限chmod o+w 文件目录名
为其他组用户添加写权限chmod a-x 文件目录名
为文件所有用户减少读权限
第二种方式: 通过数字变更权限
r=4 w=2 x=1 rwx=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于
chmod 751 文件目录名
修改文件所有者
基本介绍
chown newowner file
改变文件的所有者
chown newowner:newgroup file
改变文件的所有者和所有组
-R
如果是目录 则使其下所有子文件或目录递归生效
修改文件所在组
chgrp newgroup file
改变文件的所有组
-R
递归
定时任务调度
crond任务调度
使用crontab [选项]
进行定时任务的设置.
概述
任务调度: 是指系统在某个时间执行的特定的命令或程序.
任务调度分类:
- 系统工作: 有些重要的工作必须周而复始地执行. 如病毒扫描等
- 个别用户工作: 个别用户可能希望执行某些程序, 比如对mysql数据库的备份
常用选项
-e
编辑crontab定时任务
-l
查询crontab任务
-r
删除当前用户所有的crontab任务 service crond restart
重启任务调度(CentOS6)- 在CentOS7中使用
systemctl restart crond
快速入门
- 任务的调度文件是: /etc/crontab
- 设置个人任务调度. 执行crontab -e命令进入编辑器
- 接着输入任务到调度文件 如:
*/1 * * * * ls-l /etc/ > /tmp/to.txt
命令(在每一分钟都会自动调用一次),然后保存退出 - 如果想要使用脚本进行任务调度 ,先编写脚本比如/home/task1.sh,设置可执行权限,然后使用crontab -e进入编辑器 然后输入
cron表达式 /home/task1.sh
参数细节说明(5个占位符说明)
特殊符号的说明
特定时间执行任务案例
Linux磁盘分区, 挂载
分区基础知识
分区的方式
mbr分区
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB, 但拥有最好的兼容性
gpt分区
5. 支持无限多个主分区(但操作系统可能限制, 比如windows下最多128个分区)
6. 最大支持18EB的大容量(EB = 1024PB, PB=1024TB)
7. windows7 64位以后支持gpt
Linux分区
原理介绍
- Linux来说无论有几个分区, 分给哪一目录使用, 它归根结底就只有一个根目录, 一个独立且唯一的文件结构, Linux中每个分区都是用来组成整个文件系统的一部分
- Linux采用了一种叫"载入"的处理方法, 它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来. 这时要载入的一个分区将使它的存储空间在一个目录下获得
硬盘说明
- 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硬盘的表示方法一样.
lsblk
查看系统分区和挂载情况
使用lsblk -f
查看UUID号
挂载的经典案例
说明:
下面我们以增加一块硬盘位例来熟悉下磁盘的相关指令和深入理解磁盘分区, 挂载, 卸载的概念
如何增加一块硬盘
-
虚拟机添加硬盘
-
分区
fdisk /etc/sdb
-
格式化
mkfs -t ext4 /dev/sdb1
-
挂载 先创建一个 /home/newdisk目录 再使用
mount /dev/sdb1 /home/newdisk
命令挂载
-
设置可以自动挂载(永久挂载, 当你重启系统后, 仍然可以挂载到 /home/newdisk)编辑/etc/fstable文件
磁盘情况查询
查询系统整体磁盘使用情况df -lh
查询指定目录的磁盘占用情况du -h /目录
查询指定目录的磁盘占用情况, 默认为当前目录
-s 指定目录占用大小汇总
-h带计量单位
-a含文件
--max-depth=1
子目录深度
-c列出明细的同事, 增加汇总值
查看/home文件夹下的磁盘占用情况
du -ach --max-depth=1 /opt
du -h --max-depth=1 /root
列出root目录下面所有的一级目录文件大小;
查询内存使用情况free -m
磁盘情况-工作实用指令
- 统计/home文件夹下文件的个数
ls -l /home | grep "^-" | wc -l
查询以"-"(文件的权限以-开头)开头的(grep “^-”),再获取个数(wc -l命令) - 统计/home文件夹下目录的个数
ls -l /home | grep "^d" | wc -l
- 统计/home文件夹下文件的个数, 包括子文件夹例的
ls -lR /home | grep "^-" | wc -l
加上R参数表示递归查询子文件夹下的 - 统计文件夹下目录的个数, 包括子文件夹里的
ls -lR /home | grep "^d" | wc -l
- 以树状显示目录结构
tree
用yum install tree
安装tree指令
网络配置
Linux网络配置原理图(含虚拟机)
NAT模式原理
查看网络IP和网关
CentOS7 用ip addr
命令
查看虚拟网络编辑器
修改ip地址(修改虚拟网络的ip)
查看网关
查看windows中的VMnet8网络配置(ipconfig命令)
ping命令测试与目标主机的联通
ping www.baidu.com
Linux网络环境配置
第一种方法(自动获取), 登录后通过界面的设置来设置自动获取ip. 特点:linux启动后会自动获取IP, 缺点是每次自动获取的ip地址可能不一样.
第二种方法(指定固定ip)直接修改配置文件来指定IP, 并可以链接到外网(推荐); 编辑vi /etc/sysconfig/network-scripts/eth0
要求: 将ip地址设置成静态的
CentOS7中配置文件路径是/etc/sysconfig/network-scripts/ifcfg-ens33
该文件初始状态
修改后的状态
修改后一定要再重启服务service network restart
在CentOS7中使用systemctl restart network
进程管理
基本介绍
- 在Linux中, 每个执行的程序(代码) 都成为一个进程, 每一个进程都分配一个ID号.
- 每一个进程, 都会对应一个父进程, 而这个父进程可以复制多个子进程. 例如www服务器
- 每个进程都可能以两种方式存在的. 前台和后台, 所谓前台进程就是用户目前的屏幕上可以进程操作的. 后台进程则是实际在操作, 但由于屏幕上无法看到的进程, 通常使用后台方式执行.
- 一般系统的服务都是以后台进程的方式存在, 而且都会常驻在系统中. 知道关机才结束
ps命令
ps命令是用来查看目前系统中, 有哪些正在执行, 以及他们执行的状况. 可以不加任何参数
字段:
PID 进程识别号
TTY 终端机号
TIME 此进程所消CPU时间
CMD 正在执行的命令或进程名
ps -a
显示当前终端的所有进程信息
ps -u
以用户的格式显示进程信息
ps -x
显示后台进程运行的参数
ps -aux
后显示的数据
如果只关心某一个进程需要使用grep命令过滤
ps -aux|grep xxx(进程名)
如果还想查看父进程且展示全格式使用ps -ef | grep 进程名
来查看
ps -ef | grep 进程名 | grep -v grep
查看指定进程名的不包含grep的信息
终止进程kill和killall
介绍:
若是某个进程执行一半需要停止时, 或是已消了很大的系统资源时, 此时可以考虑停止该进程. 使用kill命令来完成此项任务
基本语法:
kill [选项] 进程号
(通过进程号杀死进程)
killall 进程名称
通过进程名称杀死进程, 也支持通配符, 这在系统因负载过大而变得很慢时很有用
常用选项
-9
表示强制进程立即停止
查看进程树
服务管理
服务(service)本质就是进程, 但是是运行在后台的, 通常都会监听某个端口, 等待其他程序的请求, 比如(mysql, sshd, 防火墙等), 因此我们又称为守护进程, 是Linux中非常重要的知识点
服务管理指令
service 服务名 [start | stop | restart | reload | status]
--CentOS6
systemctl [start | stop | restart | reload | status] 服务名
–CentOS7选项在前
如果有错误 可以使用命令journalctl -u mesos-slave -f -n 300
查看日志 其中mesos-slave可以替换为你想要查找的服务名
使用案例
- 查看当前防火墙状况
service iptables status
–CentOS6systemctl status firewalld
--CentOS7中使用firewalld来代替iptables - 关闭防火墙和重启防火墙
service iptables stop
–CentOS6systemctl stop firewalld
–CentOS7
service iptables restart
–CentOS6systemctl restart firewalld
–CentOS7
细节讨论
- 关闭或者启用防火墙后, 立即生效.(telnet测试某个端口即可)
- 这种方式只是临时生效, 当重启系统后, 还是回顾以前对服务的设置
- 如果希望设置某个服务自启动或关闭永久生效, 要使用chkconfig指令(CentOS6).在CentOS7中需要用
systemctl disable 服务名
来永久禁用
netstat -anp |grep 22
查看linux的某个端口是否在监听
telnet ip 端口号
查看该ip的该端口号是否正在监听,如果不是bash命令需要启动一下windows功能
查看服务名
方式1: 使用setup 回车 就可以看到(CentOS7中已经看不到服务名了)
方式2: ls -l /etc/init.d/
(CentOS6) ls-l /usr/lib/systemd/system/
(CentOS7)
方式3: CentOS7专用 systemctl list-unit-files
按空格进行翻页
服务的运行级别
查看或者修改默认级别: vi /etc/inittab
Linux系统有7种运行级别(runLevel):常用的是级别3和5
- 运行级别0: 系统停机状态, 系统默认运行级别不能设为0, 否则不能正常启动
- 运行级别1: 单用户工作状态, root权限, 用于系统维护, 禁止远程登录
- 运行级别2: 多用户状态(没有NFS), 不支持网络
- 运行级别3: 完全的多用户状态(有NFS), 登录后进入控制台命令行模式
- 运行级别4: 系统未使用, 保留
- 运行级别5: X11控制台, 登录后进入图形GUI模式
- 运行级别6: 系统长长关闭并重启, 默认运行级别不能设为6, 否则不能正常启动
chkconfig 给每个服务的各个运行级别设置自启动或关闭
查看服务chkconfig --list|grep xxx
chkconfig 服务名--list
chkconfig --level 5 服务名 on/off
设置5的运行级别是否自启动
CentOS7中
查看服务systemctl list-unit-files
设置自启动systemctl enable 服务名.service
例如systemctl enable sshd.service
设置不自启systemctl disable 服务名
例如systemctl disable sshd
如果想把安装的软件如nginx设置开机自启
参考nginx设置开机自启
动态监控进程top
top与ps命令很相似. 他们都用来显示正在执行的进程. top与ps最大的不同之处, 在于top在执行一段时间可以更新正在运行的进程
基本语法:top [选项]
-d 秒数
指定tio命令每隔几秒更新, 默认是3秒在top命令的交互模式当中可以指定的命令
-i
使top不再显示任何闲置或者僵死进程
-p
通过指定监控进程ID来仅仅监控某个进程的状态
交互操作说明
P : 以CPU使用率排序, 默认就是此项
M : 以内存的使用率排序
N : 以PID排序
u : 输入用户名 查找专用的用户名
k : 输入要结束的进程ID号,可以结束进程
q : 退出top
监控网络状态netstat
netstat [选项]
-an
按一定顺序排列输出
-p
显示哪一个进程在调用
例如netstat -anp | grep sshd
查询端口号是否被占用
netstat -anp | grep 22
查询所有正在监听的端口
netstat -lnpt
RPM包
一种用于互联网下载包的打包及安装工具, 它包含在某些Linux分发版中, 它生成具有.rpm扩展名的文件, 类似Windows的setup.exe, 这一文件格式名称虽然打上了RedHat的标志, 但理念是通用的.
Linux的分发版本都有采用(suse, redhat, centos等等), 可以算是公认的行业标准了.
rpm包的简单查询指令
查询已安装的rpm列表 rpm -qa|grep xx
rpm包名基本格式
一个rpm包名: firefox-45.0.1-1.el6.centos.x86_64.rpm
名称: firefox
版本号: 45.0.1-1
使用操作系统: el6.centos.x86_64
表示centos6.x的64位系统
如果是i686, i386表示32位操作系统, noarch表示通用
rpm包的其他查询指令
卸载rpm包
rpm -e RPM 包的名称
如果其他软件包依赖于想要卸载的软件包, 卸载时则会产生错误信息
如果我们就是要删除这个rpm包, 可以增加参数 --nodeps
, 就可以强制删除, 但是一般不推荐这样做, 因为依赖于该软件包的程序可能无法运行
安装rpm包
rpm -ivh RPM包全路径名称
-i
install安装
-v
verbose提示
-h
hash进度条
需要先找到firefox的安装包, 你需要挂载上我们安装centos的iso文件, 然后到/media/下去找rpm
YUM包
介绍:
Yum是一个Shell前端软件包管理器. 基于RPM包管理, 能够从指定的服务器自动下载RPM包并且安装, 可以自动处理依赖性关系, 并且一次安装所有依赖的软件包
yum基本指令, 使用yum的前提是需要联网
- 查询yum服务器是否有需要安装的软件
yun list|grep xx软件列表
- 安装指定的yum包
yum install xxx
下载安装
使用yum安装火狐, 先cd到要安装软件的目录下
3. 先查看一下firefox rpm在yum服务器有没有yum list | grep firefox
4. yum install firefox
如果加-y
参数 遇到需要按y时可以自动按
5. yum remove tomcat
yum 卸载 tomcat
6. yum deplist tomcat
列出软件包依赖
7. yum info tomcat
显示软件包的描述信息和概要信息
8. yum update
升级所有的软件包
9. yum update tomcat
升级tomcat软件包
10.yum check-update
检查可更新的程序
10. yum list installed
显示已经安装的软件包
Curl 在服务器上模拟请求
模拟post请求
curl -H "Content-Type:application/json" -X POST --data '{"grantType":"client_credentials","clientId":"easto","clientSecret":"secret"}' http://172.21.29.248:8989/api/auth/token
curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i “http://www.baidu.com” 显示全部信息
curl -l “http://www.baidu.com” 只显示头部信息
curl -v “http://www.baidu.com” 显示get请求全过程解析
JavaEE定制篇
安装JDK
centos7安装jdk
CentOS7自带了jdk,所以要安装我们的版本的话, 需要卸载之前的自带的jdk
rpm -qa | grep java
查看已安装的jdkrpm -e --nodeps java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
卸载这个rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
卸载这个
安装Tomcat
步骤
- 解压缩到/opt
- 启动tomcat ./startup.sh
- 开放端口 vim /etc/sysconfig/iptables
在CentOS6中开放端口
vim /etc/sysconfig/iptables
复制22端口哪一行, 改一下8080端口即可,修改完后重启防火墙服务
在CentOS7中开放端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
# 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent
#关闭5672端口
firewall-cmd --reload
# 配置立即生效
firewall-cmd --zone=public --list-ports
查看防火墙所有开放的端口
修改完后重启防火墙服务
测试
在Windows, Linux下访问http://linux的ip:8080
安装mysql和配置
1. 卸载旧版本
如果安装了旧版本的mysql需要先卸载
检查是否安装有MySql Server
rpm -qa|grep mysql
如果有的话, 通过下面的命令卸载掉
rpm -e mysql按一下tab看一下后面还有没有了
rpm -e --nodeps mysql...
如果上面的失败了, 提示有依赖的其他文件, 则使用这个命令来强制删除
2. 安装编译代码需要的包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
下载mysql 5.6.14(已经有了)
tar -zxvf mysql-5.6.14.tar.gz
cd mysql-5.6.14
编译安装(源码是c文件或者是c++文件, 所以需要编译)
先编译
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
然后再
make&&make install
即可
3. 配置mysql
设置权限
使用下面的命令查看是否有mysql用户及用户组
cat /etc/passwd
查看用户列表
cat /etc/group
查看用户组列表
如果没有就创建
groupadd mysql
useradd -g mysql mysql
修改/usr/local/mysql的权限
chown -R mysql:mysql /usr/local/mysql
初始化配置, 进入安装路径(再执行下面的指令), 执行初始化配置脚本, 创建系统自带的数据库和表
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
注: 在启动Mysql服务时, 会按照一定次序搜索my.cnf , 先在/etc目录下找, 找不到则会搜索"$basedir/my.cnf", 在本例中就是/usr/local/mysql/my.cnf, 这是新版MySql的配置文件的默认位置
注意: 在CentOS6.8版操作系统的最小安装完成后, 在/etc目录下回存在一个my.cnf, 需要将此文件更名为其他的名字, 如:/etc/my.cnf.bak, 否则, 该文件回干扰源码安装的MySQL的正确配置, 造成无法启动
修改名称, 防止干扰
mv /etc/my.cnf /etc/my.cnf.bak
4. 启动MySQL
添加服务, 拷贝服务脚本到init.d目录, 并设置开机启动
[注意在/usr/local/mysql下执行]
在CentOS6中执行以下操作
cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
– 设置开机自启
service mysql start
– 启动服务
在CentOS7中执行以下操作
先创建服务配置文件
vim /usr/lib/systemd/system/mysql.service
输入以下内容 把 ExecStart后的路径换成自己的mysql安装路径
[Unit]
Description=MySQL Server(8.0)
Documentation=main:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld
LimitNOFILE=5000
使用systemctl设置mysql服务开机启动
systemctl enable mysql
使用systemctl开启服务
systemctl start mysql
可能遇到的问题 服务启动失败
- 首先创建mkdir -p /var/lib/mysql 文件夹, 先cd…回到上一级 再chown -R mysql:mysql mysql 修改用户和组
- 在/usr/local/mysql目录下修改my.cnf文件如图所示
- 给/usr/local/mysql下的data目录(递归设置下面的所有文件和文件夹-R)指定用户和组 并且设置权限为755
chown -R mysql:mysql data
chmod -R 755 data
- 重启服务, 查看状态
systemctl restart mysql
systemctl status mysql
CentOS7yum方式安装mysql
5. 修改root密码
cd /usr/local/mysql/bin
./mysql -uroot
mysql> SET PASSWORD = PASSWORD('root');
quit
退出
./mysql -uroot -proot
用户名密码的方式进入
mysql > show databases;
查看数据库列表
mysql > create database atguiguDB;
创建数据库
mysql > create database atguiguDB;
创建数据库
mysql > use atguiguDB;
使用数据库
mysql > create table user(id int, name varchar(32));
建表
6.设置远程连接权限
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
mysql > flush privileges;
Shell编程
Shell是什么
Shell是一个命令行解释器, 它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序, 用户可以用Shell来启动, 挂起, 停止甚至是编写一些程序.
快速入门_执行脚本
脚本格式要求
-
脚本以#!/bin/bash开头
-
脚本需要有可执行权限
编写第一个Shell脚本, 创建一个Shell脚本, 输出hello world -
shell中的注释符
#
-
多行注释
:<<! 下一行要注释的内容...下一行...下一行...!
以:<<!开头 以!结尾
-
shell的
=
前后不能有空格
脚本的常用执行方式
- 方式1(输入脚本的绝对路径或相对路径)
首先要赋予helloworld.sh脚本的+x权限
执行脚本
./myshell.sh &
以后台的方式执行shell脚本
- 方式2(sh+脚本)
说明: 不用赋予脚本+x权限, 直接执行即可
Shell的变量
Shell的变量介绍
- Linux Shell 中的变量分为, 系统变量和用户自定义变量.
- 系统变量: $HOME, $PWD, $SHELL, U S E R 等 等 比 如 e c h o " u s e r = USER等等 比如 echo "user= USER等等比如echo"user=USER"
- 显示当前shell中所有变量: set
Shell变量的定义
基本语法
- 定义变量: 变量=值
A=100
在shell中使用echo "A=$A"来查看
- 撤销变量: unset 变量
unset A
- 声明静态变量: readonly 变量, 注意: 不能unset
readonly A=99
此时unset A后执行会报错 - 把变量提升为全局环境变量, 可供其他shell程序使用
export A=10
Shell的变量定义的规则
- 变量名称可以由字母, 数字, 下划线组成. 但是不能以数字开头.
- 等号两侧不能有空格
- 变量名称一般习惯为大写
将命令的返回值赋给变量
设置环境变量
基本语法
- export 变量名=变量值(将shell变量输出为环境变量)
- source 配置文件(让修改后的配置信息立即生效)
- echo $变量名 (查询环境变量的值)
快速入门
-
在/etc/profile文件中定义TOMCAT_HOME环境变量
-
source /etc/profile 让环境变量生效
-
查看环境变量TOMCAT_HOME的值
-
在另外一个shell程序中使用TOMCAT_HOME
位置参数变量
介绍
当我们执行一个shell脚本时, 如果希望获取到命令行的参数信息, 就可以使用到位置参数变量. 比如: ./myshell.sh 100 200 , 这个就是一个执行shell的命令行, 可以在myshell脚本中获取到参数信息
基本语法
$n
(n为数字, $0
代表命令本身,$1-$9
代表1-9个参数, 10以上的参数需要用大括号包含,比如${10}
)
$*
(这个变量代表命令行中所有的参数, $*
把所有的参数看成是一个整体)
$@
(这个变量也代表命令行中所有的参数, $@
把所有的参数区分对待)
$#
(这个变量代表命令行中所有参数的个数)
预定义变量
基本介绍
就是shell设计者事先已经定义好的变量, 可以直接在shell脚本中使用
基本语法
$$
(当前进程的进程号PID)
$!
(后台运行的最后一个进程的进程号PID)
$?
(最后一次执行的命令的返回状态. 如果这个变量的值为0, 证明上一个命令正确执行, 如果这个变量的值为非0 , 具体是哪个数, 由命令自己来决定,则证明上一个命令执行不正确)
运算符
基本语法
$((运算式))
或$[运算式]
推荐使用(注意 运算符前后不加空格)RESULT2=$[(2+3)*4]
- expr m + n 注意expr运算符间要有空格
- expr m - n
- expr \* / % 乘 除 取余
条件判断
基本语法
[ condition ]
(注意condition前后要有空格)非空返回true, 可使用$?验证 (0为true, >1为false)
三元运算符[ condition ] && echo ok || echo notok
可以单独这样写[ condition ] && echo ok
为false时什么也不做
前面加上!取反
[ ! condition ] && echo ok || echo notok
常用判断条件
- 两个整数的比较
=
字符串比较 两边加空格if [ "ok" = "ok" ]
-lt
小于 两边加空格
-le
小于等于 两边加空格
-gt
大于 两边加空格if [ 23 -gt 22 ]
-ge
大于等于 两边加空格
-ne
不等于 两边加空格 - 按照文件权限进行判断
-r
有读的权限
-w
有写的权限
-x
有执行的权限 - 按照文件类型进行判断
-f
文件存在并且是一个常规文件
-e
文件存在if [ -e /root/shell/aaa.txt ]
-d
文件存在并是一个目录
流程控制
if判断
基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
注意事项: 1) [ 条件判断式 ] ,中括号和条件判断式之间必须有空格, 2) 推荐使用第二种方式
case语句
基本语法
case $变量名 in
"值1")
如果变量的值等于值1, 则执行程序1
;;
"值2")
如果变量的值等于值2, 则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值, 则执行此程序
;;
esac
for循环
基本语法1
for 变量 in 值1 值2 值3...
do
程序
done
$*
把输入的参数看做是一个整体 $@
把输入的参数分开处理
基本语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
while循环
基本语法
while [ 条件判断式 ]
do
程序
done
读取控制台输入
基本语法
read [选项] [参数]
选项
-p
指定读取值时的提示符
-t
指定读取值时等待的时间(秒), 如果没有在指定的时间内输入, 就不再等待了
参数
变量: 指定读取值的变量名
函数
函数介绍
Shell编程和其他编程语言一样, 有系统函数, 也可以自定义函数, 系统函数中, 我们这里就介绍两个
系统函数
- basename 基本语法
功能: 返回完整路径最后/的部分, 常用语获取文件名
basename [pathname] [suffix]
basename [string] [suffix]
basename命令会删掉所有的前缀包括最后一个/字符, 然后将字符串显示出来
选项:
suffix为后缀, 如果suffix被指定了, basename会将pathname或string中的suffix去掉
2. dirname 基本语法
返回完整路径最后/的前面的部分, 常用于返回路径部分
dirname 文件的绝对路径
从给定的包含绝对路径的文件名中去除文件名(非目录的部分), 然后返回剩下的路径(目录的部分)
自定义函数
基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名: funname
Shell编程综合案例
查找10天前的文件
find /data/backup/db -mtime +10 -name "*.tar.gz -exec rm -rf {} \;"
mtime参数, 目前的天数减n天 -exec 找到后执行什么操作, rm -rf {} \ 是固定写法删除找到的文件
自己写的, 有点借鉴意义
#!/bin/bash
DATE=$(date +"%Y-%m-%d %H:%M:%S")
echo "开始备份数据库atguiguDB----date:$DATE"
DATE=$(date +"%Y-%m-%d_%H%M%S")
tar -zcvf $DATE.tar.gz /usr/local/mysql/data/atguiguDB
if [ ! -d /data/backup/db ]
then
mkdir -p /data/backup/db
fi
mv $DATE.tar.gz /data/backup/db
echo "tar包移动成功"
cd /data/backup/db
for i in `ls`
do
FILENAME=${i%%_*}
FILETIME=$(date -d $FILENAME +"%s")
DATE10DIFFTIME=$(date -d "10 days ago" +"%s")
if [ $FILETIME -lt $DATE10DIFFTIME ]
then
rm -rf $i
echo "删除文件$i"
fi
done
DATE=$(date +"%Y-%m-%d %H:%M:%S")
echo "备份数据库成功----date:$DATE"
CentOS修改主机名字
hostnamectl set-hostname xxx