linux
历史
创始人
- 1991年:芬兰大学大三学生Linus Torvalds(林纳斯•托瓦兹)公开内核:kernel
组成
- Minix的编程思想
- GNU组件
- kernel内核
特点
开源 开源可以不断完善代码功能,并提高系统性能和安全性
免费 可以扩大操作系统的影响力
安全 Linux有严格的权限管理
稳定 Linux开发时吸取了Unix多年的经验,以及开源能使更多人参与漏洞的处理
多用户 一个Linux系统可以同时被多个不同用户使用,每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响
多任务 同时执行多个程序,而各个程序的运行互相独立
支持多线程 提高任务的并发度
一切皆文件 普通文件、目录、设备等在Linux都被当做文件来对待,只是这些文件的类型不同而已
没有后缀名 Linux的一个文件是否能被执行或一个文件属于哪种类型,和后缀名没有太大的关系,主要和文件的属性有关
发行版本
红帽 、红旗、中标麒麟、debain、suse、opensuse、centos
目录结构
/bin
- 系统必备执行命令
/boot
- 核心文件:连接文件以及镜像文件
/dev
- 外部设备
/etc
- 配置文件和子目录:网络配置
/home
- 普通用户的主目录
/lib
-
动态连接共享库
- 类似于Windows里的DLL文件
/lib64
- 动态链接库64位
/media
- 自动挂载的文件目录
/mnt
- 临时挂载
/opt
- 安装软件的目录
/proc
-
虚拟的目录
- 访问这个目录来获取系统信息
/root
- 用户主目录
/run
- 运行时的信息目录
/sbin
- 系统管理程序
/srv
- 服务的数据
/sys
- 该目录下安装了2.6内核中新出现的一个文件系统 sysfs
/tmp
-
临时文件
- 似于Windows的回收站,里面的内容会定期删除
/usr
- 应用程序和文件
/var
- 经常被修改的目录文件:日志文件
命令
命令的必要性
- 运行稳定,干扰性能项相对较少、操作也比较快捷方便
分类
- 内部命令
- 外部命令
命令的格式和语法
-
命令+空格+选项+空格+参数
- 命令:指单词或者词组的全称或者简写
- 选项:选项是包括一个或多个字母的代码,前面有一个“-”连字符,主要用于扩展基础命令
- 参数:命令操作的对象
基础命令
显示自身whoami
显示登录用户名字时间ip——who am i
当前有谁在登录who
pwd
- 当前工作目录的绝对路径
家目录 ——cd或者cd~
回到上一次所在目录
- cd -
回到当前目录的上一级目录
- cd 空格…
切换到指定路径
-
相对
- cd home/
-
绝对
- cd /home/
网络配置信息——ifconfig
历史命令——history
帮助类命令
看一个命令是什么功能
- whatis + 命令
命令的使用手册
- man + 命令
内部命令的使用帮助
- help + 内部命令
外部命令的使用帮助
- 外部命令 + --help
文本编辑命令
对文件内容进行编辑
- vi/vim + 文件
三种模式
-
一般
- 复制第一行 yy
- 粘贴到下一行 p
- 撤销 u
- 删除当前行 dd
- 删除当前行开始共n行 d+数字n+d
- 移动到文件第一行 gg
- 移动到文件末尾行G
-
编辑
- 当前位置处开始 i
- 当前行的下一行o
- 当前行的上一行 O
- 当前行的末尾 A
-
指令
-
进入方式:或/或?
-
保存 :w
-
退出:q
-
强制执行是:!
-
快捷保存退出shift zz
-
显示行号 :set nu
-
查询关键字
-
向上查询
- ? 关键字 回车 在按n
-
向下查询
- / 关键字 回车再按n
-
-
文件目录类命令
显示指定目录下的所有子目录和文件 ls
- -i 显示node号
- -l 显示文件属性权限等
- -a 显示隐藏文件
创建新的空文件
- touch + 文件名称
创建新的目录
-
创建一个
- mkdir 目录名
-
创建多个
- mkdir -p d1/d2/d3
将内容输出显示
-
内容追加
- echo + 输出内容 >> 文件
-
覆盖文件
- echo + 输出内容 > 文件
-
输出内容
- echo+内容
-
将数据指定格式进行输出
- printf + 格式 + 参数
对文件进行重命名
- mv + 原文件名 + 新文件名
将文件目录移动到指定路径下
-
mv test1.txt /opt/
- mv + 文件/目录 + 路径
复制文件
-
复制到指定文件中
- cp 原文件 目标文件
-
复制到指定路径
- cp 原文件 指定路径
-
将目录下所有文件一起复制
- cp -r 原目录 目标位置
给文件创建链接
-
硬链接
- ln 文件1 文件2
-
软链接
- ln -s 文件1 路径 文件2
查看文件内容
-
从头开始看
-
cat 文件
- -n 列出行号包括空白
- -b :列出行号不包括空白
- -v :列出一些看不出来的特殊字符
- -T :将 TAB 字符显示为 ^I
-
默认显示前n行
- head -n 文件
-
-
倒着看
-
tac 文件
-
tail 文件
- -c : 倒序按字节显示的字节数
- -n : 倒序按行显示的行数
- -f : 实时追踪文档的更新内容
- -F : 根据文件名字进行实时追踪,当文件改名或删除文件后,保持重试,当有新的文件和它同名时,继续追踪
-
tailf 文件
- 几乎等同于tail -f, 当文件改名之后它也能继续跟踪。与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件
-
-
一页一页的看
- more + 文件——有进度条
- less + 文件——无进度条
-
找指定的字符串
- egrep + 字符串规则 + 文件或目录
比较给定的两个文件的不同
-
diff 文件1 文件2
- -i :不检查大小写的不同
- -y :并列的显示文件的异同之处
删除文件或目录
-
rm 文件或目录
- -r :删除目录以及其下的所有文件
- -f :省略“是否删除”的确认询问
-
rmdir + 要删除的空目录
时间日期类命令
显示当前日期
-
date“+”格式化字符串
+号必须有
date +"%Y-%m-%d %H:%M:%S"
查看近3月的日历
- cal -3
查看硬件时间
- hwclock
设置系统时间
- date -s + 时间格式字符串
显示非当前日期
- date -d + 参数 + [格式化字符串]
同步网络时间
- ntpdate -u + 远程时间服务器地址
用户管理命令
添加新用户
- useradd 用户名
设置用户密码
- passwd 用户名
判断用户是否存在
- id 用户名
切换用户
-
不获取变量
- su 用户名
-
获取权限和变量
- su - 用户名
修改用户权限
- visudo
设置普通用户以root用户权限执行命令
- sudo + 命令
删除用户
-
userdel + 用户名
- 不删文件
-
userdel -r + 用户名
- 删除所有
用户组管理命令
查看已建用户组
- cat /etc/group
创建用户组
- groupadd 组名
修改用户组名
- groupmod -n 新用户组名 旧名
删除组
- groupdel 组名
文件权限类命令
第0位表示类型
-
- 代表文件
- d 代表目录
- c 字符流,串行端口设备,例如键盘、鼠标(一次性读取装置)
- s socket 套接字
- p 管道
- l 链接文档(link file)
- b 设备文件,可供储存的接口设备(可随机存取装置)
第1-3位确定属主(该文件的所有者)拥有该文件的权限。—User
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,—Group
第7-9位确定其他用户拥有该文件的权限 —Other
变更文件或目录的权限
-
chmod + {ugoa}{±=}{rwx} + 文件或目录
u:所属主 g:所属组 o:其它用户 a:(all)代表ugo
+:增加权限 -:去掉权限 =:仅有某些权限
文件: r查看;w修改;x执行文件
目录: r列出目录内容;w在目录中创建和删除;x进入目录
变更文件或目录的所有者
- chown + 用户名 + 文件或目录
递归变更目录的所有者
- chown -R + 用户名 + 目录
递归变更目录的所有者及所属组
- chown -R + 用户名:用户组 + 目录
改变文件或目录的所属组
- chgrp + 用户组 + 文件或目录
系统监控类
列出文件系统的整体磁盘使用情况
-
df
- -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;另外还有kmT
显示目录或文件的大小
-
du 文件或目录
- -h :以K,M,G为单位,提高信息的可读性
监控磁盘IO及CPU的负载情况
-
iostat
解析:
结果分为两部分:cpu统计信息、设备统计信息。
%user:用户模式下所花费CPU时间的百分比,合理值为<60%
%nice:用户进程改变过优先级的进程占用CPU时间的百分比
%system:内核进程所花费的CPU时间的百分比,合理值为%user+%system <80%
%iowait:IO等待所占用的CPU时间的百分比(重要),合理值为<30%(不同功能的服务器不同,比如邮件服务器会比该值要大)
%steal:丢失时间占用CPU时间的百分比
一般来说%idle持续游走在20%以下,说明CPU繁忙,空闲太少,瓶颈出现在CPU的性能层面。%iowait高而%idle 在70%以上,说明cpu不忙,但是数据还在等待读写,瓶颈出现在IO设备层面,也就是磁盘有问题。
Device:设备名称,这里还有个dm,它是disk mapper的缩写,可以在/dev/mapper下查对应关系,或者使用iostat -N 直接显示出磁盘分区对应关系。
tps:设备每秒接受的I/O传输请求tps = transfers per second
kB_read/s设备每秒读取的数据量(KB),参数-m可以换成MB
kB_wrtnls设备每秒写入的数据量(KB),参数-m可以换成MB
kB_read设备读取的总数据量
kB_wrtn设备写入的总数据量
- -d :只显示磁盘使用情况;
- -c :只显示CPU使用情况;
- -k :以 KB 为单位显示
- -m :以 MB 为单位显示
- -t :显示统计的时间
- -x :显示详细信息;
- -N :显示磁盘名称;
- -p :显示每个磁盘的详细信息,比如sda这个磁盘分了两个区,都要让它显示出来
- 数字n1 + 数字n2 :每隔n1秒统计一次,共统计n2次
内存的使用情况
-
free
解析:
Mem 行(第二行)是物理内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列:显示系统总的可用物理内存和交换空间大小。
used 列:显示已经被使用的物理内存和交换空间。
free 列:显示还有多少物理内存和交换空间可用使用。
shared 列:显示被共享使用的物理内存大小,在linux里面有很多共享内存,比如一个libc库,很多程序调用,但实际只存一份。
buff/cache 列:显示被 buffer 和 cache 使用的物理内存大小,即buff/cache的意思是 buffer 和 cache之和。
available 列:显示还可以被应用程序使用的物理内存大小。关系:total = used + free + buff/cache
- -b :以字节为存储单位对当前的内存使用情况输出
- -k :以KB为存储单位对当前的内存使用情况输出
- -m :以MB为存储单位对当前的内存使用情况输出
- -g :以GB为存储单位对当前的内存使用情况输出
- -h :以人类可读的方式输出
- -s :指定以秒为时间单位,持续输出当前系统内存的使用状况,直到按下ctrl+c停止输出。
- -t :输出物理内存加上虚拟内存的总和
查看磁盘分区详情
-
fdisk
- -l :列出分区表;
挂载
- mount -t 文件类型 -o 连接方式 设备名称 挂载路径
卸载已经加载的文件系统
- umount 路径
创建Linux文件系统
- mkfs + 选项 + 参数
搜索查找类命令
在指定目录下查找文件
-
find
- -name + filename :查找名为filename的文件
- -user + username :按文件属主来查找
- -group + groupname :按组来查找
- -type b/d/c/p/l/f :查是块设备、目录、字符设备、管道、链接、普通文件
- -size + n[c] :查长度为n块[或n字节]的文件
从Linux自带的数据库中查找文件
-
locate + 文件名称
- updatedb
配合管道符一块使用的强大查询
-
grep
- -c :显示有多少行被匹配到
- -n :显示行号
- -i :忽略大小写
- -v :反向搜索,即不显示要搜索的东西
查找命令是否存在
- which + 命令
差文件的路径
- whereis
进程线程类命令
查看当前系统的进程状态
-
ps
- -a :显示现行终端机下的所有程序,包括其他用户的程序。
- -u :以用户为主的格式来显示程序状况。
- -x :显示所有程序,不以终端机来区分
树状图的方式
-
pstree
- -p :显示进程的PID
- -u :显示进程的所属用户
实时动态地查看系统的整体运行情况
-
top
- -d + 秒数 :指定top命令每隔几秒更新。默认是3秒。
- -i :使top不显示任何闲置或者僵死进程。
- -p :通过指定监控进程ID来仅仅监控某个进程的状态。
- 按键操作:
- P :以CPU使用率排序,默认就是此项
- M :以内存的使用率排序
- N :以PID排序
- q :退出top
- R :按某列颠倒顺序排序
Linux中网络系统的状态信息
-
netstat
- -a :显示所有通信状态的进程
- -n :以数字化的方式显示
- -p :显示pid
- -t :显示tcp协议通信的进程
- -l :显示listen状态的进程
kill -9 11
压缩和解压类命令
(1)gzip/gunzip压缩
- 特点:,原来文件消失
- (1)只能压缩文件不能压缩目录
- (2)不保留原来的文件
(2)zip/unzip
- 特点:,会保留原来的文件
(3)tar
-
tar + 选项 + 参数
- -c :产生.tar打包文件 create
- -v :显示详细信息 verbose
- -f :指定压缩后的文件名 filename
- -z :打包同时压缩
- -x :解包.tar文件
后台服务管理类命令 systemctl
开启服务
- start
关闭服务
- stop
重启服务
- restart
开机启动服务
- enable
开机关闭服务
- disable
查看服务状态
- status
查看正在运行的服务
- –type service
查看所有服务器自启配置
- list-unit-files
将程序放在后台执行,不会因为终端关闭而结束
-
nohup
- 将日志重定向
系统定时任务
crontab
- -e :编辑crontab定时任务
- -l :查询crontab任务
- -r :删除当前用户所有的crontab任务
crontab表达式
-
第一个“*” 一小时当中的第几分钟 0-59
-
第二个“*” 一天当中的第几小时 0-23
-
第三个“*” 一个月当中的第几天 1-31
-
第四个“*” 一年当中的第几月 1-12
-
第五个“*” 一周当中的星期几 0-7(0和7都代表星期日)
-
特殊符号
-
- 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
- , 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
-
- 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令
- /n 代表每隔多久执行一次。比如“/10 * * * * 命令”,代表每隔10分钟就执行一遍命令
-
上传下载类
下载
-
wget
- 格式:wget+选项+参数
- -c -o 断点续传
上传
-
工具直接拖拽方式
-
sftp
-
crt 快捷键alt+p
-
lls 本地的目录
-
lcd 本地目录地址
-
选则好地址put上传
- get下载
-
-
lrzsz
- rz
- rs
软件安装卸载类命令
查询所有rpm安装包
- rpm -qa
卸载rpm包
- 格式:rpm -e rpm软件包
- 格式:rpm -e --nodeps rpm软件包,如果要卸载的某个rpm包被其它rpm包依赖,可以通过加–nodeps参数强制卸载。
安装rpm包
- 格式:rpm -ivh 软件包文件
软件在线安装yum
格式:yum+选项+参数
-
清理所有缓冲数据
- yum clean all
-
-y:对所有提问都回答“yes”
-
删除指定的rpm软件包
- yum remove firefox
-
安装
- install
-
更新
- update
关联网络yum源
本地yum源
准备好镜像文件
-
配置服务地址
-
- 复制本地配置文件 cp media.repo
-
修改配置
-
1 修改名字
- hostnamectl set-hostname 名字
-
删除无用的路径
- dd ///
-
重写本地配置地址
- ///mnt/my
-
配置优先级
- priority=2
-
-
在mnt目录创建新文件,挂载镜像文件
- makdir 新文件
- mount -o loop /dev/sr0 /mnt/新文件
复制文件避免重启
-
cp -r
- 配置好新的地址
逻辑删除其他配置
清理缓存
- yum clean all
yum repolist
- 查看yum源状态
执行创建yum仓库命令 createrepo 路径
测试安装相应文件
网络yum源
下载配置文件
- wget -c -O 163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
移动到指定目录替换本地yum文件
- mv CentOS7-Base-163.repo
/etc/yum.repos.d/
/etc/yum.repos.d/目录
- 备份CentOS-Base.repo 文件
clean
-
yum clean all
-
yum makecache
- 下载服务器的包保存到本地
ssh
ssh root@id
查看是否安装ssh服务和客户端
- yum list installed | grep openssh-server
查看服务端
- netstat -anp|grep 22
查看客户端命令
- which ssh
ssh免密登录
生成公钥和私钥
- ssh-keygen -t rsa
将公钥拷贝到要免密登录的目标机器上
- ssh-copy-id 服务器id
公钥和私钥地址
httpd登录
安装相应的软件
- yum install -y httpd
启动httpd服务
- systemctl start httpd
关闭防火墙
- systemctl stop firewalld
查看防火墙服务状态
- systemctl status firewalld
浏览器输入地址
jdk环境搭建
jdk安装
- 下载jar包
修改权限
-
visudo
- 只能root用户
-
用户权限
- offcn ALL=(ALL) NOPASSWD:ALL
-
group 权限
- %offcn ALL=(ALL) NOPASSWD:ALL
offcn 用户目录下创建文件目录
- mkdir bin apps data logs software
- 定时器 、日志 、 软件
文件传入到software目录
解压jdk到/home/offcn/apps
-
tar -zxvf jdk-8u144-linux-x64.tar.gz -C/home/offcn/apps
- 必须在本目录下执行明
环境搭建
-
sudo vim /etc/profile
-
shift GG直接到文本末
-
编辑内容
-
export JAVA_HOME=/home/offcn/apps/jdk1.8.0_144
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin- 保存退出
-
-
让修改后的文件生效
- source /etc/profile
测试jdk是否安装成功
- java -version
发送同步文件
- scp -r 路径 node-1:$pwd
克隆
yum源
jdk
hddp协议
关闭防火墙
删除网卡uuid
修改主机名
修改网关
- vim /etc/sysconfig/network-scripts/ifcfg-ens33
免密
- ssh-keygen
- rm -rf .ssh
- ssh-copy-id node-a-1
- scp authorized_keys node-a-5:$PWD
修改用户权限
集群搭建
安装jdk
- 同上
时钟同步
-
(1)时间服务器配置(必须root用户)
-
检查ntp是否安装,若没有安装则使用yum install -y ntp进行安装
- rpm -qa|grep ntp
-
-
修改ntp配置文件
-
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
- 添加
-
#server 0.centos.pool.ntp.org iburst
-
#server 1.centos.pool.ntp.org iburst
-
#server 2.centos.pool.ntp.org iburst
-
#server 3.centos.pool.ntp.org iburst
-
server 127.127.1.0
-
fudge 127.127.1.0 stratum 10
-
修改/etc/sysconfig/ntpd文件
- sudo vim /etc/sysconfig/ntpd
-
-
重新启动ntpd
-
查询状态
- systemctl status ntpd
-
重启
- sudo systemctl start ntpd
-
开机启动
- sudo systemctl enable ntpd
-
-
编写脚本
-
crontab -e
- */1 * * * * sudo /usr/sbin/ntpdate ntp.aliyun.com
-
crontab -e
- */1 * * * * sudo /usr/sbin/ntpdate ntp.aliyun.com
-
crontab -e
- */1 * * * * sudo /usr/sbin/ntpdate ntp.aliyun.com
-
-
其他机器配置
-
将其它机器的ntp服务停掉并关闭开机启动
-
检查是否安装,没有同上
-
停止ntpd服务
- sudo systemctl stop ntpd
-
关闭开机启动
- sudo systemctl disable ntpd
-
-
在其他机器配置1分钟与时间服务器同步一次
-
crontab -e
-
编写脚本
- */1 * * * * sudo /usr/sbin/ntpdate bd-offcn-01
-
-
-
-
修改任意机器时间
- sudo date -s “2017-9-11 11:11:11”
-
十分钟后查看机器是否与时间服务器同步
- date
安装hadoop
-
配置
-
修改配置 1 Java环境变量以及日志存储路径
- cd $HADOOP_HOME/etc/hadoop
- /home/offcn/apps/hadoop-3.2.1/etc/hadoop
- vim hadoop-env.sh
export JAVA_HOME=/home/offcn/apps/jdk1.8.0_144 export HADOOP_LOG_DIR=/home/offcn/logs/hadoop-3.2.1 export HDFS_NAMENODE_USER=offcn export HDFS_DATANODE_USER=offcn export HDFS_SECONDARYNAMENODE_USER=offcn export YARN_RESOURCEMANAGER_USER=offcn export YARN_NODEMANAGER_USER=offcn
-
配置2 核心配置文件core-site.xml
-
vim core-site.xml
fs.defaultFS hdfs://192.168.179.101:8020 hadoop.data.dir /home/offcn/data/hadoop-3.2.1 hadoop.proxyuser.offcn.hosts * hadoop.proxyuser.offcn.groups *
-
-
配置3 配置hdfs-site.xml
- vim hdfs-site.xml
-
配置4 配置yarn-site.xml
-
vim yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>192.168.179.102</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
-
-
配置5 配置mapred-site.xml
-
vim mapred-site.xml
mapreduce.framework.name yarn
-
-
配置6 配置works
- vim workers
-
配置7 集群上分发配置好的Hadoop配置文件
- scp -r /home/offcn/apps/hadoop-3.2.1 bd-offcn-02:$PWD
- 验证
-
集群启停及测试
-
格式化NameNode 格式化只进行一次!!!
- hadoop namenode -format
-
启动NameNod
- hdfs --daemon start namenode
-
启动Datanode
-
启动secondarynamenode
-
群起启动
- sbin/start-dfs.sh
-
启动YARN
- sbin/start-yarn.sh
查看Web界面
- hdfs地址:9870/
- Yarn地址:8088/