Linux的目录结构
- /bin:[重要]是Binary的缩写,存放经常使用的命令(/usr/bin、/usr/local/bin)
- /sbin:s就是超级用户的意思,存放系统管理员使用的系统管理程序
- /home:[重要]存放普通用户的主目录
- /root:[重要]该目录为系统管理员,也称作超级权限者的用户主目录
- /lib:系统开机所需要的最基本的动态链接共享库
- /lost+found:此目录一般情况下是空的,当系统非法关机后,这里存放一些文件
- /etc:[重要]所有系统管理所需要的配置文件和子目录
- /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下
- /boot:[重要]存放启动linux时使用的一些核心文件,包括一些链接文件和以及镜像文件
- /proc:这个目录是虚拟目录,是系统内存的映射,访问这个目录来获取系统信息
- /srv:service缩写,该目录存放一些服务启动之后需要提取的数据
- /sys:该目录下安装了linux内核中新出现的一个文件系统
- /tmp:这个目录用来存放一些临时文件
- /dev:设备管理器,把所有的硬件用文件的形式存储
- /media:[重要]系统会自动识别一些设备,将识别的设备挂载到这个目录下
- /mnt:[重要]系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将外部的存储挂载在/mnt/上
- /opt: 给主机安装软件所摆放的目录
- /usr/local:[重要]这是另一个给主机安装软件所安装的目录
- /var:[重要]存放不断扩充着的东西,习惯将经常被修改的目录放在这个目录下
- /selinux:SELlinux是一种安全子系统,它能控制程序只能访问特定文件
远程登录linux系统
Xshell:远程登录到Linux服务器
XFtp:上传和下载文件
vi和vim编辑器
所有vi和vim都内建vi文本编辑器
三种常见模式
- 正常模式
- 插入模式
- 命令行模式
(1) 拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy,粘贴(p)
(2) 删除当前行 dd , 删除当前行向下的 5 行 5dd
(3) 查找某个单词,用/关键字
(4)设置行号set nu,取消行号set nonu
(5)最末行(G),首行(gg)
(6)撤销动作,在正常模式下输入 u
开机、重启和用户登录注销
关机&重启命令
shutdown -h now(1)
:立即关机/一分钟后关机
shutdown -r now
:立即重启
halt
:效果等价于 关机
reboot
:重启系统
syn
:把内存的数据同步到磁盘
关机前先执行sync,把内存写入磁盘
用户登录和注销
- 登录时尽量少用root账号登录,因为它是系统管理员
可以利用普通用户登录,再用“su- 用户名” 命令来切换成系统管理员身份
- logout即可注销用户
用户管理
Linux是一个多用户多任务的操作系统,任何想使用资源的用户,都必须先向管理员申请一个账号,然后以此账号进入系统
Linux的用户至少属于一个组
添加用户
useradd [选项] 用户名
当创建完用户,会自动创建和用户同名的home目录
useradd -d 指定家目录 新用户名
:给创建的用户指定家目录
给用户指定或修改密码
passwd 用户名
:给用户指定或修改密码
删除用户
userdel 用户名
:删除用户,保留家目录
usrdel -r 用户名
:删除用户以及用户主目录
查询用户信息
id 用户名
uid: 用户id gid: 组id 组名
切换用户
su - 用户名
从高权限的用户切换到低权限用户,无需密码;反之,则需要密码
当需要返回到原来用户,使用exit
用户组
- 增加组
groupadd 组名
- 删除组
groupdel 组名
增加用户时直接加上组
useradd -g 用户组 用户名
修改用户组
usermod -g 用户组 用户名
/etc/passwd文件
用户的配置文件,记录用户的各种信息
每行的含义
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group文件
组的配置文件
每行含义:组名:口令:组标识号:组内用户列表
实用指令
指定运行级别
0 :关机
1 :单用户[找回丢失密码]
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5,修改默认的运行级别可改文件
/etc/inittab的id:5:initdefault这一行的数字,默认运行级别
切换到指定运行级别
init 运行级别
面试题
如何找回丢失的root密码
进入单用户模式修改密码,因为进入单用户模式,root不需要密码,即可登录
开机->在引导时输入 回车键-> 看到一个界面输入 e -> 看到一个新的界面,选中第二行(编辑 内核)在输入 e-> 在这行最后输入 1 ,再输入 回车键->再次输入 b ,这时就会进入到单用户模式。
这时,我们就进入到单用户模式,使用 passwd 指令来修改 root 密码。
帮助指令
man [命令或配置文件]
help 命令
文件目录类
-
pwd
:显示当前工作目录的绝对路径 -
ls [选项] [目录或是文件]
:
-a 显示当前目录的所有文件和目录
-l 以列表的方式显示信息
cd[参数]
绝对路径:从根目录开始定位
相对路径:从当前工作目录开始定位
cd ..
:回到当前目录的上一级
cd ~
:回到当前目录的上一级目录
mkdir [选项]
:用于创建目录
-p:创建多级目录
-
rmdir [选项]
:删除空目录-rf 删除非空目录
-
touch
创建空文件 -
cp [选项] source dest
-r 递归复制整个文件夹
-
rm [选项] 要删除的文件或目录
-r:递归删除整个文件夹
-f:强制删除不提示
-
mv
mv oldFileName newFileName
重命名mv source desc
移动文件 -
cat [选项] 要查看的文件
-n:显示行号
只能以只读模式打开
cat 文件名 |more[分页浏览]
-
more 要查看的文件
空格:翻页
enter:下一行
ctrl+B:返回上一页
-
less 要查看的文件
在显示文件内容的时候,不一次将整个文件加载后才显示,而是根据需要加载内容,对大文件具有较高的效率
pagedown
pageup
/字串 向下搜索字串
?字串 向上搜索字串
-
>指令和>>指令
>输出重定向:会将原来的文件覆盖
>>追加:不会覆盖原来的文件的内容,而是追加到文件的尾部
ls -l > 文件
:列表的覆盖写入到文件ls -al >> 文件
:列表内容追加写入到文件cat 文件1 > 文件2
:把文件1内容覆盖写入文件2echo "内容" >> 文件
: -
echo [选项] [输出内容]
输出内容到控制台
echo $PATH
echo 文件
-
head指令
head 文件
显示文件的开头部分,默认显示前10行head -n 5 文件
:查看文件头5行内容 -
tail指令
tail 文件
:查看文件后10行tail -n 5 文件
:查看文件后5行tail -f 文件
:实时追踪该文档的所有更新 -
ln指令
ln -s [原文件或目录] [软链接名]
类似于windows的快捷方式,主要存放链接其他文件的路径
-
history指令
查看已经执行过的历史命令
-
date
显示日期时间date+%Y
显示当前年份date+%m
显示当前月份date+%d
显示当前是哪一天date -s 字符串日期时间
设置系统当前时间cal [选项]
查看日历指令
搜索查找类
-
find指令
find [搜索范围] [选项]
从指定目录向下递归遍历各个子目录,将满足条件的文件或目录显示在终端find -name 文件名
:根据名称查找find 目录 -user 文件名
:按拥有者查找find 目录 -size +/-/
:文件大小 -
locate指令
locate 搜索文件
:可以快速定位文件路径,利用事先建立的系统中所有文件名及路径的locate数据库实现快速 定位给定的文件locate指令基于数据库,所以运行前,必须先使用updatedb创建locate数据库
-
grep [选项] 查找内容 源文件
grep过滤查找,管道符"|",表示将一个命令的处理结果输出传递给后面的命令进行处理
-n显示匹配行及行号
-i忽略字母大小写
例:
cat hello.txt |grep -n yes
压缩和解压类
-
gzip用于压缩文件,gunzip用于解压文件
使用gzip压缩后,不会保留原来的文件
-
zip用于压缩文件,unzip用于解压文件
-r:递归压缩,压缩目录
-d<目录>:指定解压后文件的存放目录
zip -r name.zip 目录
unzip -d /opt/tmp/ name.zip
-
tar指令
tar [选项] name.tar.gz
组管理和权限管理
Linux组基本介绍
在linux中的每一个用户必须属于一个组,不能独立于组外,在linux中每个文件所有者、所在组、其他组的概念
文件/目录 所有者
一般谁创建了文件,就是该文件的所有者
-
查看文件的所有者
ls -l
-
修改文件所有者
chown 用户名 文件名
组的创建
groupadd 组名
文件/目录所在组
-
查看文件/目录所在组
ls -l
-
修改文件所在组
chgrp 组名 文件名
其他组
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
改变用户所在组
user mod -g 组名 用户名
usermod -d 目录名 用户名
:改变该用户登录的初始目录
权限的基本介绍
-
第0位确定文件类型
- 普通文件
d 目录
1 软链接
c 字符设备
b 块文件
-
第1-3位表示所有者拥有该文件的权限
-
第4-6位确定所属组拥有该文件的权限
-
第7-9位表示其他组拥有该文件的权限
-
.空格后面的数字,如果是文件,表示硬链接数,如果是目录,表示该目录的子目录数
-
拥有者
-
所属组
-
表示文件大小,如果是目录,就是4096
-
文件最后修改的时间
rwx权限详解
-
作用于文件
r:可以读取,查看
w:表示可写,可以修改,但不一定能删除,除非对文件所在目录具有写权限
x:代表可执行
-
作用于目录
r:可读,ls查看目录内容
w:可以修改,在目录内创建、删除、重命名
x:可执行,可以进入该目录
修改权限-chmod
-
+、-、=变更权限
u:所有者 g:所有组 o:其他人 a:所有人
chmod u=rwx,g=rx,o=x 文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名
-
通过数字变更权限
规则r=4 w=2 x=1
chmod u=rwx,g=rx,o=x 文件目录名
相当于
chmod 751 文件目录名
修改文件所有者
chown newowner file
改变文件的所有者
chown newowner:newgroup file
改变用户的所有者和所在组
修改文件的所在组
chgrp new group file
改变文件的所有组
定时任务调度
概述
任务调度:是指系统在某个时间执行的特定的命令或程序
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
基本语法
crontab [选项]
-e:编辑crontab定时任务
-b:查询crontab任务
-r:删除当前用户所有的crontab任务
快速入门案例
如果是简单的任务,可以不写脚本,直接在crontab中加入任务即可
对于比较复杂的任务,需要编写脚本(Shell编程)
1、crontab -e
2、编写指令
3、保存并退出
-
五个占位符的说明
项目 含义 范围 第一个"*" 一小时的第几分钟 0-59 第二个"*" 一天中第几个小时 0-23 第三个"*" 一个月中第几天 1-31 第四个"*" 一年中第几月 1-12 第五个"*" 一周中星期几 0-7 -
特殊符号说明
特殊符号 说明 * 代表任何时间,比如第一个"*"表示一小时中每分钟都执行一次 , 代表不连续时间,比如"0 8,12,16 * * *"表示每天的8点0分、12点0分、16点0分都执行一次 - 代表连续的时间范围,比如"0 5 * * 1-6"表示周一到周六的凌晨5点0分执行命令 */n 代表每隔多久执行一次,比如"*/10 * * * *",命令,代表每隔10分钟执行一次命令
Linux磁盘分区、挂载
分区基础知识
1、分区的方式
-
mbr分区
最多支持4个主分区
系统只能在主分区上
扩展分区要占一个主分区
MBR最大只支持2TB,但拥有最好的兼容性
-
gtp分区
支持无限多个主分区,但操作系统会限制,比如windows下最多128个分区
最大支持18EB的大容量
Win7 64后支持gtb
Linux分区
-
原理介绍
-
Linux无论有几个分区,分给哪个目录,归根结底只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
-
Linux采用了一种叫”载入“的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入的一个分区将它的存储空间在一个目录下获得
-
-
硬盘说明
Linux硬盘分IDE硬盘和SCSI硬盘,目前基本是SCSI硬盘
-
lsblk指令查看当前系统的分区情况
[外链图片转存失败(img-y7hfeusd-1567988550345)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908105049400.png)]
磁盘情况查询
-
df -h
查询系统整体磁盘的使用情况 -
du -h /目录
查询指定目录的磁盘占用情况,默认是当前目录-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
网络配置
Linux网络配置原理图
[外链图片转存失败(img-EIjyOaPn-1567988550346)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908110656422.png)]
ping测试主机间网络连通
ping 目的主机
linux网络环境配置
-
自动获取的ip地址每次都不一样,不适用于做服务器
-
指定固定的ip
直接修改配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
[外链图片转存失败(img-yibZNNXp-1567988550346)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908132123712.png)]
进程管理
进程的基本介绍
- 在Linux中,每个执行的程序都称为一个进程,每个进程都分配一个ID号
- 每个进程都对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器
- 每个进程都可能以两种方式存在。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束
显示系统执行的进程
-
ps
ps -aux
字段 说明 PID 进程识别号 TTY 终端机号 TIME 此进程所消CPU时间 CMD 正在执行的命令或进程名 ps -a
:显示当前终端所有进程信息ps -u
:以用户的格式显示进程信息ps -x
:显示后台进程运行的参数
[外链图片转存失败(img-FHkKFmm3-1567988550347)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908133344202.png)]
ps指令详情
System V 展示风格
USER 用户名称
PID 进程号
%CPU 进程占用CPU的百分比
%MEM 进程占用物理内存的百分比
VSZ 进程占用虚拟内存大小
RSS 进程占用物理内存大小
TT 终端名称,缩写
STAT 进程状态,S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等待等等
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会截断显示
终止进程kill和killall
-
kill [选项] [进程号]
-
killall 进程名称
-9:表示强迫进程立即停止
不带-9表示正常终止进程
查看进程树
pstree [选项]
-p:显示进程的PID
-u:显示进程所属用户
服务管理
- 介绍
服务本质就是进程,但是运行在后头,通常会监听某个端口,等待其它程序的请求,比如(mysql,sshd 防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点
-
service管理指令
service 服务名 [start|stop|restart|reload|status]
在CentOS7.0后,不再使用service,而是systemctl
systemctl [start|stop|restart|reload|status] 服务名
-
细节讨论
关闭或启用防火墙,立即生效[telnet测试某个端口]
这种只是临时生效,当重启系统后,还是回归以前对服务的设置
如果希望某个服务永久生效,要使用chkconfig指令
-
查看服务名
steup ->系统服务
/etc/init.d/服务名称
-
服务运行级别
vi /etc/init.d
-
开机的流程说明
开机->BIOS->/boot->init进程1->运行级别->运行级对应服务
-
chkconfig指令
通过chkconfig可以给每个服务的各个运行级别设置自启动/关闭
chkconfig --list|grep 服务名
查看服务chkconfig 服务名 --list
和上面功能一样chkconfig --level 5 服务名 on/off
动态监控进程
-
介绍
top和ps命令很相似,它们都用来显示正在执行的进程,top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程
-
top [选项]
选项 功能 -d 秒数 指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令 -i 使top不显示任何闲置或者僵死进程 -p 通过指定监控进程ID来仅仅监控某个进程的状态 操作 功能 p 以CPU的使用率排序 M 以内存的使用率排序 N 以PID排序 q 退出top [外链图片转存失败(img-DGT3njWy-1567988550347)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908143751037.png)]
-
查看系统网络情况
netstat [选项]
netstat -anp
-an 按一定顺序排列输出
-p 显示哪个进程在调用
RPM和YUM
rpm包的管理
-
介绍
一种用于互联网下载包的打包及安装工具,它包含在Linux分发版中。它生成,RPM扩展名的文件,RPM是RedHat Package Manager的缩写,类似于windows的setup.exe
-
rpm包的简单查询指令
rpm -qa | grep firefox
-
rpm包名基本格式
firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用操作系统:el6.centos.x86_64
-
rpm包的其他查询指令
rpm -qa
:查询所安装的所有rpm软件包rpm -qa|more[分页显示]
rpm -q 软件包名
查询软件是否安装rpm -qi 软件包名
查询软件包中的信息rpm -ql 软件包名
查询软件包中的文件rpm -qf 文件全路径名
:查询文件所属的软件包 -
卸载rpm包
rpm -e RPM包的名称
rpm -e --nodeps foo
–nodeps强制删除
-
安装rpm包
rpm -ivh RPM包全路径名称
i=install安装
v=verbose提示
h=hash进度条
yum
-
介绍
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用yum的前提是可以联网
-
yum的基本指令
yum list|grep 软件包列表
yum install 软件包
下载安装
大数据定制篇Shell编程
为什么要学习Shell编程
- Linux运维工程师在进行服务器集群管理时,需要写Shell程序来进程服务器管理
- 对于JavaEE和Python程序员,需要编写一些Shell脚本进行程序或者服务器维护
- 对于大数据程序员,需要编写Shell来管理集群
Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序
[外链图片转存失败(img-ReJrWT23-1567988550347)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908151511226.png)]
Shell编程快速入门-Shell脚本的执行方式
- 脚本格式要求
- 脚本以
#!bin/bash
开头 - 脚本需要可执行权限
- 脚本的常用执行方式
- 相对路径执行
./myShell.sh
- 绝对路径
/home/shell/myShell.sh
- 相对路径执行
shell变量
-
Linux中的变量分为系统变量和用户自定义变量
系统变量:$HOME、$PWD 、$SHELL、$USER等等
显示当前所有变量:set
-
shell变量的定义
-
定义变量:
变量=值
-
撤销变量:
unset 变量
-
声明静态变量:readonly变量,不能unset
-
-
定义变量的规则
变量由字母数字下划线,不能以数字开头
等号两侧不能有空格
变量名称一般习惯为大写
-
将命令的返回值赋给变量
A=`ls -la`反引号,运行里面的命令,并把结果返回给A
A=$(ls -la)等价于反引号
设置环境变量
- 基本语法
- export 变量名=变量值
- source配置文件
- echo $变量名
位置参数变量
-
介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如
./myShell.sh 100 200
这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息 -
基本语法
$n
n代表第n个参数$*
命令行中所有参数$@
也代表所有参数,但区分对待$#
代表参数个数
预定义变量
-
就是shell设计者事先定义好的变量,可以直接在shell脚本中使用
-
基本语法
$$
当前进程的进程号$!
后台运行的最后一个进程的进程号$?
最后一次执行命令的返回状态,若为0,则上一个指令执行正确,否则,表示上一个命令执行不正确
运算符
-
$((运算式))
或$[运算式]
-
expr m+n
-
expr m-n
-
expr \*,/,%
乘、除、余
条件判断
-
[ condition ]
注意condition前后要有空格 -
非空返回true,可用$?验证
-
常用判断条件
-
两个整数比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
-
安装文件权限进行判断
-r 有读权限
-w 有写权限
-x 有执行权限
-
按照文件类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在并是一个目录
-
流程控制
- if判断
if [条件判断式]
then
程序
elif [条件判断式]
then
程序
fi
- case语句
case $变量名 in
"1")
程序1
;;
"2")
程序2
;;
esac
- for循环
for 变量 in 值1 值2 值3
do
程序
done
for((初始值;循环控制条件;变量变化))
do
程序
done
- while循环
while [ 条件判断式 ]
do
程序
done
read读取控制台输入
read(选项)(参数)
-p指定读取值时的提示符
-t指定读取值时等待的时间
read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的数是num1=¥NUM1"
函数
-
系统函数
-
basename
返回完整路径最后/的部分,常用于获取文件名basename [pathname] [suffix]
basename [string] [suffix]
suffix为后缀,如果被指定了,basename会将pathname或string中的suffix去掉
-
dirname
返回完整路径最后/的前面部分,常用于返回路径部分
-
-
自定义函数
[ function ]funname[()] { Action; [return int;] }
例子:
function getSum(){ SUM=$[$n1+$n2] echo "和是=$SUM" } read -p "请输入第一个数n1" n1 read -p "请输入第一个数n2" n2 getSum $n1 $n2
apt软件管理
apt介绍
apt是Advanced Packaging Tool的简称,是一款安装包管理工具
Ubuntu软件操作的相关命令
sudo apt-get update
更新源
sudo apt-get install package
安装包
sudo apt-get remove package
删除包
sudo apt-cache search package
搜索软件包
sudo apt-cache show 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
查看该包被哪些包依赖
sudo apt-get source package
下载该包的源代码