什么是Linux?
Linux就是一个多用户的,多任务的操作系统。
任何一个应用软件都必须运行在操作系统之上。
Linux诞生于1991年10月份。至今,全世界80%的服务器都是Linux系统。
-
操作系统OS(Operation System):
是管理计算机软件资源和硬件资源的计算机程序,是运行在裸机上的最基本的软件。 -
多用户:
在一个操作系统中,可以创建多个用户,并且可以在同一时刻登录多个用户操作,目的是为了区分权限。 -
多任务:
在一个操作系统中,可以同时运行多个程序。
Linux与大数据的关系:
大数据可以看成是一个普通的应用软件,必须运行在操作系统之上。
- Linux的特点:
开源,免费
运行效率高
多用户(对于权限的控制非常好),多任务
对硬件的要求不高
一切皆文件
版本:
- 按使用的条件分为:
内核版:最原始的版本
发行版:
在内核版的基础上,添加一些新的功能,形成自己的一个系统,可以发行
Ubuntu:界面比较炫酷,基本上与windows差不多,多用于个人使用
RedHat:有部分的服务是收费的
CentOS:基本完全免费
Linux的安装:
-
虚拟化软件(VMware):
在一个真实的操作系统中,通过这个软件虚拟出来部分的硬件资源,
组成一个虚拟的机器。
虚拟网卡:由虚拟化软件为虚拟机联网和虚拟机与本机形成局域网而虚拟化出来的一个网卡。由于有不同的网络连接方式,所以有两个网卡。 -
安装后创建新的虚拟机的步骤:
文件 → 新建虚拟机 → 选择典型下一步 → 稍后安装操作系统下一步 → Linux CentOS 6 64位下一步 → 命名虚拟机名称选择位置下一步 → 默认磁盘大小20GB选择将虚拟磁盘拆分成多个文件下一步下一步完成
编辑 → 虚拟网络编辑器 → 选择VMnet8 → 查看子网子网掩码网关 -
删除虚拟机:
a.只移除虚拟机,需要的时候可以随时还原:
只要在虚拟机上右键点击移除就ok。
b.彻底删除虚拟机,不可以还原:
在a步骤基础上,找到虚拟机在磁盘中的位置,然后删除。 -
linux的操作系统:
使用CentOS6.5
安装过程:
把虚拟机的CD/DVD设置好给定的iso镜像文件(相当于光盘)
开启虚拟机,进入安装操作系统界面
install or upgrade an existing system → skip → ok → Next → Chinese(Simplified)中文简体 Next → 美国英语式下一步 → 基本存储设备下一步 → 是 忽略所有数据下一步 → 设置主机名 并配置网络(编辑System eth0 → 选择自动连接 → IPV4 手动 添加 → IP地址 子网掩码 网关 → DNS服务器8.8.8.8 → 应用 → 关闭)下一步 → 设置时区下一步 → 设置根密码并确认下一步 → 替换现有Linux系统下一步 → 将修改写入磁盘 → Desktop(桌面版) CentOS 或者可以现在自定义下一步 → 等待中 → 重新引导 → 前进 同意 前进 → 设置用户名 全名 密码 确认密码 前进 前进 → 确定 完成 → 进入虚拟机 → ctrl+alt+f2 可以进入全命令行模式 ctrl+alt+f1 切换回桌面版 -
界面版和最小安装版
界面版:相对占用空间较大,但是有界面更方便,命令更全面
最小安装:只有命令行形式,只有基本命令,额外的需要安装 -
远程连接工具(MobaXterm):
本地机器可以通过ip,端口,用户名,密码等信息远程连接服务器
可以远程操作服务器,方便程序员调试程序。
右键NewSession → SSH → IP地址 用户名 OK → 输入密码连接成功
虚拟机名:与是否联网,是否开机都无关,就是当前这个虚拟化实机的名字。
主机名:在局域网内部进行通信交互的时候需要用到的机器的名称。
用户名:在操作系统中使用当前系统的用户
[bduser@node000 ~]$ _
bduser:当前使用操作系统的用户
@node000:操作的主机名
linux的主机名在/etc/sysconfig/network修改
linux在/etc/hosts 文件做ip与主机名的映射关系
Windows在C:\windows\System32\drivers\etc\hosts映射
~ :当前路径,但不是绝对路径。~代表的当前的家目录
家目录:当前普通用户的根目录 /home/xxx root用户的根目录 /root
几个问题的处理:
a.如果安装VMware的时候提示错误(没有办法创建虚拟化的权限,BIOS)
解决方法:去百度。搜索你自己电脑具体型号怎么进入bios,开启虚拟化权限。
b.远程工具或者ping,无法与linux连通。
解决方法:a.确保linux和windows端的网络配置没有问题。
b.关闭linux和windows下的所有防火墙
关闭防火墙:
windows:win+R 输入control -- windows防火墙 -- 启动或关闭防火墙
linux:su -- service iptables stop -- chkconfig iptables off
常用的命令:
基本公式:命令 [选项 ] [参数]
别名:
alias:查看别名
alias xx='命令' :设置别名
unalias 别名 :取消别名
man ls 和 info ls 和 ls -help :查看ls命令的帮助信息
对目录或文件的增删改查
- 查看目录
ls :linux提供的基本命令
ll、 ls -a 、ls -h...
- 进入目录
cd 目录名: 进入这个目录
cd . . : 回到当前目录的上一级目录
cd - :从当前目录回退一步
cd 或 cd ~ :返回到家目录
pwd :查看当前目录下的绝对路径
- 创建目录
mkdir 已知路径 :创建目录
mkdir -p 未知路径 :级联创建
- 修改目录
mv 原目录/文件 新目录/文件:
如果新目录不存在,把当前目录名改成新目录名。
如果新目录存在,原目录移动到新目录中。
- 复制目录
cp 原目录 新目录: 复制内容
cp -r 原目录 新目录 :级联复制目录下的所有内容
- 删除目录:慎重使用,不可恢复
rm:删除文件内容
rm -rf :强制递归删除(删除目录)
rm -ri :级联删除之前询问是否删除
- 创建文件
touch 路径/文件名:
如果文件/目录存在,把当前文件/目录修改成当前时间
如果文件不存在,创建文件
vi命令:从另一个角度创建一个文件,也可以查看并编辑文件
vi / vim区别:
vim属于vi的升级版,vim是有颜色的
使用方式:
vi 路径/文件名:
如果文件存在,就进行编辑
如果文件不存在,新建文件(前提要进行保存)
两个状态:
编辑状态:可以对文件的内容进行编辑修改的状态
非编辑状态:vi进入后默认为非编辑状态
由非编辑状态进入编辑状态的方式:
a :在当前光标的后一位插入
A :在当前光标所在行的行末插入
i :在当前光标位置插入
I :在当前光标所在行的行首插入
o :在当前位置的下一行行首插入
O :在当前位置的上一行行首插入
由编辑状态退出到非编辑状态的方式:Esc
:q :直接退出, 一般没有对内容做任何修改的时候使用
:w :保存,只保存不退出
:wq :保存退出,既保存又退出
:q! :强制退出,修改了一些内容但是没有保存
:wq! :强制保存退出,某些时候在只读文件使用
在非编辑状态下,快速的操作文本内容的语句:
dd :直接删除当前行
ndd :直接删除光标行及以下的n行
u :撤销修改步骤,可以回退到最原始状态
nyy p :复制光标行开始向下n行并粘贴(nyy复制n行 p在光标位置粘贴)
:set number :设置行号,只对当次有效
:set nonumber :取消行号
:n : 直接把光标定位到第n行
/关键字 :搜索关键字并高亮显示,定位到第一个位置
- 查看文件内容的方式:
vi :通过编辑命令实现查看文件的功能
cat :查看文件的所有内容并直接退回到命令行模式,适合内容较少的文档
more :从第一行开始显示一页内容(空格翻页,回车翻行)显示完毕自动退回,适合内容较多的文档
head :只显示文件内容的前十行
tail :只显示文件内容的后十行
tail -f :动态显示文件内容的后十行
压缩和解压缩:
- gzip
压缩比相对高一些,但是时间相对较长;
压缩完毕之后原文件删除,以.gz结尾。
gzip -r 目录名 :级联压缩,对目录下的所有文件压缩。
gzip -d 文件名 :解压缩,原文件删除。
- bzip2
压缩比相对低一些,但是时间相对较短;
压缩完毕之后原文件删除,以.bz2结尾。
bzip2 -r 目录名 :级联压缩,对目录下的所有文件压缩。
bzip2 -d 文件名 :解压缩,原文件删除。
- tar
归档: 把目录下的很多内容放在一起,以一个文件的形式展示,不压缩
特点:原文件不删除,归档后的名字自定义
选项:
-c 创建归档
-x 解除归档
-v 显示过程
-f 文件名
-z 以gzip的形式压缩和解压缩
-j 以bzip2的形式压缩和解压缩
常用的命令:
tar -cvf 目标文件 :被归档文件只归档,不压缩
tar -czvf 目标文件 :被归档文件既归档,又压缩
tar -zxvf 目标文件 :被归档文件解压缩
用户和权限:
权限:对不同的人或角色有不同的控制方式
1、最高权限:root
2、普通权限:user
3、用户组权限:group
4、其他权限:other
例如:-rw-rw-r–权限 1链接数 bduser所属用户 bduser所属用户组 10240文件大小 7月 5 23:03最后修改时间
-文件的类型 rw- 文件的所属者的权限 rw- 与所属者同组用户的权限 r–其他用户权限
每组权限内的表现形式:
r 可读权限
w 可写权限
x 可执行权限
- 没有当前位置的权限
注意:rwx一定按照顺序书写,-可以在任何位置出现
对于不同权限的表示:
- 用数字表示权限:
r 100 4代表可读权限
w 010 2代表可写权限
x 001 1代表可执行权限
- 000 0代表没有任何权限
- 数字与权限的对应关系:
000 --- 0 没有任何权限
001 --x 1 不可读不可写可执行
010 -w- 2 不可读可写不可执行
011 -wx 3 不可读可写可执行
100 r-- 4 只读
101 r-x 5 可读可执行不可写
110 rw- 6 可读可写不可执行
111 rwx 7 可读可写可执行
用户:
root用户:最高权限,一般不用
系统用户:保障系统运行的用户
普通用户:可以赋予不同的权限
关于用户(组)的三个文件:
- /etc/passwd
存放用户的基本属性,从该文件可以查看linux 的所有用户。
格式为:
[用户名:密码:用户ID:用户主组ID:用户详细信息(如姓名,年龄,电话等):用户根目录:用户编程环境]
每个用户有1个主组(私有组),1个或者多个附加组。
关于UID:root 0、系统用户 0-499、普通用户 500+ - /etc/shadow
存放用户密码的一些策略
格式为:
[用户名:密码:最近更改密码的日期:密码不可更该的天数:密码需要重新更改的天数:密码更改前的警告期限:密码过期的宽限时间:帐号失效日期:保留] - /etc/group
存放组的基本信息。
格式为:[组名:组密码:组ID:用户列表]
添加用户:
useradd / adduser 用户名 :创建用户
passwd 用户名 : 给用户修改密码
注意:
1、创建用户的同时会创建出一个同名的用户组
2、创建用户的同时在/home/下会创建一个同名的家目录
3、创建之后无密码,需要通过passwd对用户设置密码
修改用户:
usermod -l 新用户名 旧用户名
注意:
1、修改的时候一定注意顺序,新的在前,旧的在后。
2、名字可以改,但是家目录依然是最原始创建的目录。
删除用户:
userdel 用户名
注意:
1、直接删除,会删除三个文件里的内容,当前用户不可使用。
2、直接删除的时候,被删除的用户的家目录还在。
3、如果当前被删除用户的状态已登录,不允许被删除的。
如果一定删除:
1、exit退出当前用户的所有登录状态
2、
userdel -r: 删除当前用户的所有相关文件
userdel -f: 强制删除(不管是否为登录状态,删除的时候会有提示)
userdel -rf: 强制级联删除
添加用户组:
groupadd 组名 :单纯的添加一个组,与用户无关
usermod -g 新组名 用户名 :把用户放在新的组中
修改用户组:
groupmod -n 新组名 旧组名
删除用户组:
groupdel 组名
su / sudo:
su:切换用户
su 用户: 直接切换到指定用户,除root切换其他用户以外,都需要密码。
su : 切换到root用户,相当于 su root
sudo:
1、给普通用户临时赋予root的权限
2、在root用户给普通用户可以使用root权限的前提下,每次可以有5分钟的时间随便使用,首次或五分钟之后重新输入密码
3、root给普通用户赋予sudo权限的步骤:
修改/etc/sudoers -> 找到root权限,把普通用户给定一样的权限
关于权限的三个命令:
1、chgrp 修改文件(夹)所属用户组
chgrp [-R] 用户组名 文件(夹)名
2、chown 修改文件(夹)所属用户名(和用户组名)
chown [-R] 用户名 文件(夹)名 :单独修改用户名,组名不变
chown [-R] 用户名:用户组名 文件(夹)名:用户名和组名同时修改
3、chmod 修改文件(夹)的权限
chmod [-R] 777 文件名
chmod [-R] u=r / g+wx / go-x 文件名
chmod [-R] a=rwx / a-x / a+wx 文件名
shell:
计算机软件和硬件之间的翻译官
查看本机可执行的shell版本: cat /etc/shells
echo hello world / echo “hello world” / echo 'hello world’完全等价
也可以写入文本,执行方式:
bash xxx 可以直接执行
./xxx 必须有可执行权限才可以执行
- 变量:
声明变量:变量名="内容"
1.等号两端不能有空格
2.变量名不能存在特殊字符,不能以数字开头
3.内容如果没有空格可以不加引号,反之必须加
读取变量:$变量名 / ${变量名}
如果没有{}可能会出错,有{}一定不会出错,建议加{}。
取消变量:unset 变量名
- 数组:
注意:元素之间使用空格连接
声明数组:数组名=(元素1 元素2 ...)
读取数组元素:
${数组名[n]} :读取第n+1个元素
${数组名} :读取第一个元素
${数组名[*]} :读取当前数组所有元素
${#数组名[*]}:读取数组长度
修改数组元素:
数组名[n]=xxx:直接对数组中第n+1个元素修改值
- read:从控制台中读取内容
read 变量名:把从控制台读取的内容赋给变量
read -p 'xxx提示语' 变量名 :增加提示语
read -p 'xxx提示语' -t N 变量名:增加超时时间,超过N秒会自动退出
- history:默认查看之前的1000条命令
history -> !n :直接执行第n个历史命令,不能修改后执行。
- 通配符:
* :0到多个任意字符
?:1个任意字符
[]:1个字符,在[]内给定的字符匹配。比如[asdfgh]
[-] :1个字符,在[]内给定范围字符匹配。比如[a-m]
[^] :1个字符,在[]内给定字符以外进行匹配。比如[^a-m]
- 管道符:
; :左右命令都执行
&& :左侧命令正确,执行右侧命令;左侧命令错误,不执行右侧命令。
|| :左侧命令正确,不执行右侧命令;左侧命令错误,执行右侧命令。
| :左侧命令的输出作为右侧命令的输入。例如 ls /etc | more
- 输出重定向:
把正常的输出位置进行重新定义
标准正确输出,语句错误不写入:
语句 [1]> 文件名 如果语句正确,以覆盖的形式写入到文件中
语句 [1]>> 文件名 如果语句正确,以追加的形式写入到文件中
标准错误输出,语句正确不写入:
语句 2> 文件名 如果语句错误,以覆盖的形式写入到文件中
语句 2>> 文件名 如果语句错误,以追加的形式写入到文件中
正确和错误输出写入同一个文件中:
语句 >> 文件名 2>&1 完全等价于 语句 &>> 文件名
把正确和错误执行分别写入到不同的文件中:
语句 >> 文件1(存放正确结果) 2>> 文件2(存放错误结果)
shellScript:
脚本。一段程序。
利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法与命令写在里面,搭配管道命令与数据重定向等功能,以达到我们所想要的处理目的。
优点:可以实现自动化处理
脚本里的第一行:#!/bin/bash
- 关于脚本内的运算
var=1
let "var+=1"
((var+=1))
- test命令
整数判断:
-eq 相等
-ne 不相等
-ge 大于等于
-gt 大于
-le 小于等于
-lt 小于
字符串判断:
== 等于
!= 不等于
- 控制语句注意:
1.注意空格
2.与或条件的时候要分别书写
3.一定要有结尾,一般式开头的反写 - 判断:
第一种:
if [ 判断式 ] 逻辑连接符 [ 判断式 ] ;then
执行语句
elif [ 判断式 ] 逻辑连接符 [ 判断式 ] ;then
执行语句
...
else
执行语句
fi
第二种:
case $变量名 in
"匹配的内容" )
执行语句
;;
"匹配的内容" )
执行语句
;;
...
*)
执行语句
;;
esac
- 循环
while循环 满足条件时执行
例:while [判断条件]
do
循环体
done
until循环 满足条件时终止
例:until [判断条件]
do
循环体
done
for固定循环
例:for 临时变量 in x x x xx ...
do
循环体
done
for不固定循环(写法基本上与java一致)
例:for ((i=1;i<=10;i++))
do
循环体
done
- 函数:
把一些公共的执行内容封装成一个函数,用的时候调用即可。
定义一个函数:
function 函数名(){
函数体
}
注意:
1.定义的时候没有形参,参数的个数不固定,根据调用时候确定
2.在函数体中用 $n 直接获取调用函数时传递的第n个参数
3.在函数体中使用echo作为函数的返回值
4.在函数体中 $# 代表一共传递过来的参数的个数 - 函数调用:
函数名 参数1 参数2 … 参数n
注意:
1.参数和参数之间用空格分隔
2.可以传无限多个参数
3.一定是先定义,后调用
接收函数的返回值
var=$(函数名 参数1 参数2 … 参数n)
例:随机数函数:
function rand(){
min=$1
max=$(($2-$min+1))
num=$(date+%s%N)
echo $(($num%$max+$min))
}
生成当前时间:
nowtime=$(date "+%Y-%m-%d %H:%M:%S")
linux的一些其他命令:
- 定时任务:计算机按照人为规定的时间点进行周期性的执行某些命令,实现自动化
crontab
-e 编辑定时任务
-l 查看定时任务列表
-r 删除定时任务
关于定时任务的服务:crond
sudo service crond status 查看定时任务状态
sudo service crond start 开启定时任务服务
sudo service crond stop 关闭定时任务服务
sudo service crond restart 重启定时任务服务
定时任务的语法:
* * * * * xxx(执行语句)
分钟 小时 日 月 星期
符号:
* 每个时间单位
, 列举
- 范围
/ 每隔多少时间单位
关于网络配置的文件:
1./etc/sysconfig/network-scripts/ifcfg-eth0 配置网络信息
2./etc/sysconfig/network 配置主机名/配置网关(可写在ifcfg-eth0中)
3./etc/resolv.conf 配置DNS(可写在ifcfg-eth0中)
注意:
1.网络配置完毕,必须重启网卡 sudo service network restart
2.三个关于网络的文件第一个是最重要的
3.network文件中如果修改主机名,需要重启服务器生效
4.使用界面版修改网络配置信息,最终也是修改这几个文件
主机名和ip映射的文件
可以把主机名和ip做映射 ip 主机名
可以用主机名代替ip使用
linux: /etc/hosts
windows:C:\Windows\System32\drivers\etc\hosts
scp远程复制(跨节点复制内容):
从本地复制内容到远程节点 :
scp 本地文件路径 远程用户名@远程主机名或ip:远程路径
从远程节点复制内容到本地:
scp 远程用户名@远程主机名或ip:远程路径 本地文件路径
注意:
1.远程复制第一次需要被询问是否确认连接,如果确认,当前ip会被记录下来,下次连接就不再询问。
2.因为涉及到不同节点之间的连接,所以每次连接都需要密码确认。
3.复制目录可以以 目录/* 的形式进行远程复制
ssh免密登录:
原理:
1.A生成公钥和私钥,私钥自己保留,公钥交给其他节点。
2.A向B发送链接请求包括A的一些节点信息。
3.B根据A的节点信息会找到A的公钥,对信息进行加密处理,并发送回A。
4.A接收到B的加密信息,使用自己的私钥解密,并再次发给B。
5.B再次接收到解密信息后与原始信息做对比,如果一致,将A加入白名单。
操作:
1.创建公钥和私钥
ssh-keygen -t rsa -P ‘’
设置钥匙所在路径,使用默认 ~/.ssh/
2.把公钥重定向到授权秘钥的文件(与默认一致,可以修改)
cat ~/.ssh/id_rsa.pub >> authorized_keys
3.修改权限
chmod 600 authorized_keys
4.修改配置文件,把ssh的权限打开
sudo vim /etc/ssh/sshd_config
搜索RSA 把第47 48 49行注释解开
5.重启服务
sudo service sshd restart
6.验证
ssh 主机名(一定要在/etc/hosts/文件中有映射)/ip
linux里安装tar包
1.解压缩
2.配置环境变量
对于全局:/etc/profile
对于用户:~/.bashrc
3.修改配置文件
4.启动相应服务
5.正常执行
安装jdk1.8的注意事项:
JAVA_HOME 路径千万不要错,建议复制粘贴
PATH一定要大写
PATH一定要使用冒号:把原PATH加上,否则命令都会失效
自定义的JAVA_HOME最好放在原PATH的前面,避免jdk冲突