第一篇 : 大数据必须掌握的Linux以及Shell知识点

大数据技术之Linux基础(获取对应全套视频加Q1516699714)
一、Linux入门概述
1.1 概述
Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE
1.2 下载地址

centos下载地址:
网易镜像:http://mirrors.163.com/centos/6/isos/
搜狐镜像:http://mirrors.sohu.com/centos/6/isos/
1.3 Linux特点
Linux里面一切皆是文件
Linux里面没有后缀名这一说
1.4 Linux和Windows区别
目前国内Linux更多的是应用与服务器上,而桌面操作系统更多使用的是window。主要区别如下。
比较 Window Linux
界面 界面统一,外壳程序固定所有Windows程序菜单几乎一致,快捷键也几乎相同 圆形界面风格依发布版本不同而不同,可能互不兼容。GNU/Linux的终端机是从UNIX传承下来,基本命令和操作方法也几乎一致。
驱动程序 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时候很难支持。另外,有时硬件厂商未提供所需版本的Windows下的驱动,也会比较头痛。 由志愿者开发,由Linux核心开发小组发布,很多硬件厂商基于版本考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD等硬件厂商逐步不同程序支持开源驱动,问题正在得到缓解。
使用 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。
学习 系统构造复杂、变化频繁、且知识、技能淘汰快,深入学习困难 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易
软件 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权 大部分软件都可以自由获取,同样功能的软件选择较少。
二、VM安装相关
2.1 安装VMWare虚拟机

2.2 安装CentOS

2.3 安装VMTools工具

2.4 CentOS安装技术难点-网络配置三种方式理解
这里,在面试的时,有可能面试官问关于 桥连,nat模式和主机模式的含义和区别

虚拟机的三种网络配置方式的说明

2.5 Centos终端的使用和联网
centos终端的使用

在centos的ff可以联网,可以和外部的ip联通
这里,我们是简单的动态的分配的ip(后面我们要学习固定分配ip)

linux
2.6 虚拟机屏幕保护设置(可以设置也可以不设置)

2.7 IVT虚拟化支持
1)异常情况

2)宿主机BIOS设置中的硬件虚拟化被禁用了
需要打开笔记本BIOS中的IVT对虚拟化的支持

2.8问题:开启虚拟机时显示内部错误

1.上面这个问题我搞了两个多小时终于搞定了
①开始 - 运行(输入CMD)- 确定或者回车,打开管理员命令窗口;
②输入net start vmci
③输入net start vmx86
④ 依次输入
net start VMnetuserif
sc config vmci=auto
sc config vmx86=auto
sc config VMnetuserif=auto
有一个前提条件,你必须是管理员,而且这些dos命令还要真的执行了,有一条没有执行,你都是白干!!但是我的电脑当时打不开管理员命令窗口。
Windows系统从 Vista 版本开始加入了 UAC 机制,这导致没有足够权限的程序无法获取到一些关键资源。在 Linux 下我们可以使用 sudo 命令方便地提升当前程序的执行权限,但在 Windows 中却通常只能右键单击程序图标,再选择 “以管理员身份运行”。这种必须使用鼠标点击的方式很不方便,尤其在我们希望自动化执行一些任务时更是显得碍手碍脚。
我们可以自己写一个运行在 Windows 系统的 sudo 命令工具。

源码:

新建一个文本文件,将上面代码复制粘贴到文件中,并重命名文本文件为 sudo.vbs (注意后缀改成了 .vbs)。将 sudo.vbs 所在路径添加到环境变量 PATH 中,这样我们就可以在任意路径下使用 sudo 命令获取管理员权限了。
使用时我们可以在命令行输入
sudo net start vmci
sudo net start vmx86
sudo net start VMnetuserif
sudo sc config vmci=auto
sudo sc config vmx86=auto
sudo sc config VMnetuserif=auto
此时在打开虚拟机就可以运行啦,好开心。

妈的 今天又出现上面这个情况了,昨天的方法好像只能管一天。
今天2018/11/17又查到了一个方法轻松搞定,然后把启动类型都设置成自动希望明天没啥毛病。

三、Linux目录结构
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
深刻理解linux树状文件目录是非常重要的,这里我给大家说明一下。
记住一句经典的话:。在Linux世界里,一切皆文件(即使是一个硬件设备,也是使用文本来标志)

3.1 概览

3.2 树状目录结构

/bin:是Binary的缩写,这个目录存放着系统必备执行命令
/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里
/dev:Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:所有的系统管理所需要的配置文件和子目录。
/home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/misc: 该目录可以用来存放杂项文件或目录,即那些用途或含义不明确的文件或目录可以存放在该目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/net 存放着和网络相关的一些文件.
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙
/srv:service缩写,该目录存放一些服务启动之后需要提取的数据。
/sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
/tmp:这个目录是用来存放一些临时文件的。
/usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
对linux目录结构的小结
1)在linux中,目录结构 有一个 根目录 / ,其他的目录都是在 / 目录分支。
2)在linux中,有很多目录,是安装后,有自动有目录,每个目录都会存放相应的内容,不要去修改.
3)在linux中,所有的设备都可以通过文件来体现(字符设备文件[比如键盘,鼠标],块设备文件[硬盘])
4)在学习linux时,要尽快的在脑海中,形成一个 目录树
四、VI/VIM编辑器
4.1 概述
所有的 Unix 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。
Vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。连vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
vi 和 vim 三种模式的切换

4.2 测试数据准备

4.3 一般模式
以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
常用语法
1)yy (功能描述:复制光标当前一行)
y数字y (功能描述:复制一段(从第几行到第几行))
2)p (功能描述:箭头移动到目的行粘贴)
3)u (功能描述:撤销上一步)
4)dd (功能描述:删除光标当前行)
d数字d (功能描述:删除光标(含)后多少行)
5)x (功能描述:删除一个字母,相当于del)
X (功能描述:删除一个字母,相当于Backspace)
6)yw (功能描述:复制一个词)
7)dw (功能描述:删除一个词)
8)shift+^ (功能描述:移动到行头)
9)shift+$ (功能描述:移动到行尾)
10)1+shift+g (功能描述:移动到页头,数字)
11)shift+g (功能描述:移动到页尾)
12)数字N+shift+g (功能描述:移动到目标行)
4.4 编辑模式
在一般模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。
注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现『INSERT 或 REPLACE 』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
常用语法
1)进入编辑模式
(1)i 当前光标前
(2)a 当前光标后
(3)o 当前光标行的下一行
2)退出编辑模式
按『Esc』键
4.5 指令模式
在一般模式当中,输入『 : / ?』3个中的任何一个按钮,就可以将光标移动到最底下那一行。
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的!
常用语法
1)基本语法
(1): 选项
选项:
w 保存
q 退出
! 感叹号强制执行
(2)/ 查找,/被查找词,n是查找下一个,shift+n是往上查找
(3)? 查找,?被查找词,n是查找上一个,shift+n是往下查找
命令 功能
:w 保存
:q 退出
:! 强制执行
/要查找的词 n 查找下一个,N 往上查找
? 要查找的词 n是查找上一个,shift+n是往下查找
:set nu 显示行号
:set nonu 关闭行号

2)案例
:wq! 强制保存退出
4.6 模式间转换

四、系统管理操作

5.1 查看网络IP和网关
1)查看虚拟网络编辑器

2)修改ip地址

3)查看网关

查看windows环境的中VMnet8网络配置,如图1-98所示

第一种:自动获取IP地址

缺点:配置比较简单。每次启动linux后,分配的ip地址可能不一样。不适合做服务器.因为服务器的IP是固定的不能变。
5.2 第二种:配置网络ip地址
0)查看当前ip基本语法:
[root@hadoop102 /]# ifconfig
ping 测试主机之间网络连通性

  1. 基本语法
    ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)
  2. 案例实操
    (1)测试当前服务器是否可以连接百度
    [root@hadoop100 桌面]# ping www.baidu.com

1)在终端命令窗口中输入
[root@hadoop102 /]#vim /etc/udev/rules.d/70-persistent-net.rules
进入如下页面,删除eth0该行;将eth1修改为eth0,同时复制物理ip地址

2)修改IP地址
[root@hadoop102 /]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
需要修改的内容有5项:
IPADDR=192.168.11.106
GATEWAY=192.168.11.2
ONBOOT=yes
BOOTPROTO=static
DNS1=8.8.8.8
(1)修改前

(2)修改后

:wq 保存退出
3)执行service network restart

如果希望配置生效
1)reboot
2)service network restart // 重启网络服务
4)如果报错,reboot,重启虚拟机
5.3 配置主机名
0)查看主机名基本语法:
[root@hadoop102 /]#hostname
1)修改linux的hosts文件
(1)进入Linux系统查看本机的主机名。通过hostname命令查看
[root@hadoop ~]# hostname
hadoop1.atguigu.com
(2)如果感觉此主机名不合适,我们可以进行修改。通过编辑/etc/sysconfig/network文件
[root@hadoop102 /]# vi /etc/sysconfig/network

文件中内容
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME= hadoop102
注意:主机名称不要有“_”下划线
(3)打开此文件后,可以看到主机名。修改此主机名为我们想要修改的主机名hadoop102。
(4)保存退出。(Shift+:)输入wq
(5)打开/etc/hosts
[root@hadoop102 /]# vim /etc/hosts
添加如下内容
192.168.11.102 hadoop102
(6)并重启设备,重启后,查看主机名,已经修改成功
2)修改window7的hosts文件(linux与Windows要统一,所以需要配置)
(1)进入C:\Windows\System32\drivers\etc路径
(2)打开hosts文件并添加如下内容
192.168.11.101 hadoop101
192.168.11.102 hadoop102
192.168.11.103 hadoop103
192.168.11.104 hadoop104
192.168.11.105 hadoop105
192.168.11.106 hadoop106
192.168.11.107 hadoop107
192.168.11.108 hadoop108
5.4 防火墙
1)基本语法:
service iptables status (功能描述:查看防火墙状态)
chkconfig iptables –list (功能描述:查看防火墙开机启动状态)(双横线)
service iptables stop (功能描述:临时关闭防火墙)
chkconfig iptables off (功能描述:关闭防火墙开机启动)
chkconfig iptables on (功能描述:开启防火墙开机启动)
2)扩展
Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
5.5 关机、重启、注销
在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机 。
正确的关机流程为:sync > shutdown > reboot > halt
1)基本语法:
(1)sync (功能描述:将数据由内存同步到硬盘中)
(2)shutdown [选项] 时间
选项:
-h:关机 shutdown -h 1 表示一分钟后关机
-r:重启 shutdown -h 1 表示一分钟后关机
(3)halt (功能描述:关闭系统,等同于shutdown –h now 和 poweroff)
(4)reboot (功能描述:就是重启,等同于 shutdown –r now)
2)案例
(1)将数据由内存同步到硬盘中
[root@hadoop102 /]#sync
(2)计算机将在10分钟后关机,并且会显示在登录用户的当前屏幕中
[root@hadoop102 /]#shutdown –h 10 ‘This server will shutdown after 10 mins’
(3)立马关机
[root@hadoop102 /]# shutdown –h now
(4)系统立马重启
[root@hadoop102 /]# shutdown –r now
(5)重启(等同于 shutdown –r now)
[root@hadoop102 /]# reboot
(6)关机(等同于shutdown –h now 和 poweroff)
[root@hadoop102 /]#halt
注意:不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。
用户的登录和注销
基本介绍:
1)登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用”su - 用户名’命令来切换成系统管理员身份.
2)在提示符下输入 logout 即可注销用户【不同的shell 可能不同(logout exit)】

使用细节:
1)logout 注销指令在图形运行级别(简单提一下:0-6个级别)无效,在 运行级别 3下有效.
2)运行级别这个概念,后面给大家介绍

5.6 找回root密码(很麻烦,所以密码一定得记住)
重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可。
1)重启Linux,见到下图,在3秒钟之内按下回车

2)三秒之内要按一下回车,出现如下界面

3)按下e键就可以进入下图

4)移动到下一行,再次按e键

5)移动到下一行,进行修改

修改完成后回车键,然后按b键进行重新启动进入系统
6)移动到下一行,进行修改

最终修改完密码,reboot一下即可。
六、远程登录到linux服务器
为什么需要远程登录linux?

6.1 安装SecureCRT(负责远程登陆)
Linux远程登录及相关工具介绍
Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器。这时我们就需要远程登录到Linux服务器来管理维护系统。
Linux系统中是通过SSH服务实现的远程登录功能,默认ssh服务端口号为 22。Window系统上 Linux 远程登录客户端有SecureCRT, Putty, SSH Secure Shell,XShell等
1)安装步骤

2)操作
(1)鼠标选中即为复制
(2)鼠标右键即为粘贴

6.2 SecureCRT中文乱码解决方法
1)重新查看会话,是否中文显示正常
2)依然无法正常显示中文,可能是由于Linux系统中默认的字符编码非UTF8所致
用root用户登录。输入cat /etc/sysconfig/i18n
如果安装系统为中文系统,则修改【LANG=“zh_CN.UTF-8”】
如果安装系统为英文系统,则修改【LANG=“en_US.UTF-8”】
保存文件。 断开SSH,重新登录。就正常了
下面是修改后的查看
[root@hadoop100 ~]# cat /etc/sysconfig/i18n
LANG=“zh_CN.UTF-8”
3)调整设置CRT解决

6.3安装Linux-Xshell5(负责远程登陆,跟SecureCRT一样。)
介绍:
说明: Xshell 是目前最好的远程登录到Linux操作的软件,流畅的速度并且完美解决了中文乱码的问题, 是目前程序员首选的软件。
Xshell [1] 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
特别说明:若果希望安装Xshell5就可以远程访问Linux系统的话,需要有一个前提,就是Linux启用了sshd服务,该服务会监听22号端口。

安装配置和使用:
具体看老师的演示和操作!【看我的操作】
安装的过程就是直接下一步即可【傻瓜式的安装】

点开Xshell_5.0.1325,然后傻瓜式安装。

具体的连接步骤

6.4 远程上传下载文件Xftp5
基本的介绍
是一个基于 windows 平台的功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文件。(示意图)

安装和使用
看老师的演示:安装的步骤也是直接下一步即可,傻瓜式的安装。
使用的步骤

1.1.1对xftp的使用说明
当我们在实际工作中,如果需要部署一个项目,则应当向压缩后,再上传,上传后,使用linux的相关的解压缩命令,来解压[相关的命令后面会讲]

我的操作

七、常用基本命令
指定运行级别
基本介绍:
运行级别说明:
1)0 :关机
2)1 :单用户 [类似安全模式, 这个模式可以帮助找回root密码]
3)2:多用户状态没有网络服务
4)3:多用户状态有网络服务 [使用最多]
5)4:系统未使用保留给用户
6)5:图形界面 【】
7)6:系统重启
常用运行级别是3和5 ,要修改默认的运行级别可改文件
如果指定运行级别
/etc/inittab(运行级别的配置文件)的
输入命令 vim /etc/inittab 回车得到 id:5:initdefault:这一行中的数字说明是图形界面。
命令:init [012356] 例如 init 3 则切换到运行级别3 https协议
应用实例:
案例: 通过init 来切换不同的运行级别,比如从5切换到3,然后关机
init 5
init 3
init 0

指定运行级别
面试题:

如何找回root密码

课堂练习:

1)假设我们的root密码忘记了,请问如何找回密码【练习】

启动时->快速输入enter->输入e-> 进入到编辑界面-> 选择中间有kernel 项->输入e(edit)-> 在该行的最后写入 1 [表示修改内核,临时生效]-> 输入enter->
输入b [boot]-> 进入到单用模式 【这里就可以做补救工作】,使用passwd指令来修改root密码。

2)请设置我们的 运行级别,linux 运行后,直接进入到 命令行终端(3级别)
答案 输入命令 vim /etc/inittab 回车得到 id:5:initdefault 进入编辑模式将5改成3.然后wq保存,reboot一下。
7.1 帮助命令
7.1.1 man 获得帮助信息
1)基本语法:
man [命令或配置文件] (功能描述:获得帮助信息)
(1)显示说明

NAME 命令的名称和单行描述
SYNOPSIS 怎样使用命令
DESCRIPTION 命令功能的深入讨论
EXAMPLES 怎样使用命令的例子
SEE ALSO 相关主题(通常是手册页)
(2)数字说明
1.用户在shell环境中可以操作的命令或是可执行的文件
2.系统内核(kernel)可以调用的函数
3.常用的函数or函数库
4.设备配置文件
5.配置文件的格式
6.游戏相关
7.linux网络协议和文件系统
8.系统管理员可以用的命令
9.跟内核有关系的文件
2)案例
[root@hadoop106 home]# man ls
7.1.2 help 获得shell内置命令的帮助信息
1)基本语法:
help 命令 (功能描述:获得shell内置命令的帮助信息)
2)案例:
[root@hadoop101 bin]# help cd
7.1.3 常用快捷键
1)ctrl + c:停止进程
2)ctrl+l:清屏
3)ctrl + q:退出
4)善于用tab键(自动补全)
5)上下键:查找执行过的命令
6)ctrl +alt:linux和Windows之间切换
7.2 文件目录类
7.2.1 pwd 显示当前工作目录的绝对路径
1)基本语法:
pwd (功能描述:显示当前工作目录的绝对路径)
2)案例
[root@hadoop106 home]# pwd
/home
7.2.2 ls 列出目录的内容
1)基本语法:
ls [选项] [目录或是文件]
选项:
-a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-l :长数据串列出,包含文件的属性与权限等等数据;(常用)
-h : 显示文件大小时,以 k , m, G单位显示
每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小用byte来表示 建立或最近修改的时间 名字
2)案例
[atguigu@hadoop101 ~]$ ls -al
总用量 44
drwx------. 5 atguigu atguigu 4096 5月 27 15:15 .
drwxr-xr-x. 3 root root 4096 5月 27 14:03 …
drwxrwxrwx. 2 root root 4096 5月 27 14:14 hello
-rwxrw-r–. 1 atguigu atguigu 34 5月 27 14:20 test.txt
应用实例
案例:查看当前目录的所有内容信息
ls -alh //显示当前的目录内容
ls -alh 指定目录
比如:
ls -alh /root/
7.2.3 mkdir 创建一个新的目录
1)基本语法:
mkdir [-p] 要创建的目录
选项:
-p:创建多层目录
2)案例
[root@hadoop106 opt]# mkdir test
[root@hadoop106 opt]# mkdir -p user/atguigu
7.2.4 rmdir 删除一个空的目录
1)基本语法:
rmdir 要删除的空目录
2)案例
[root@hadoop106 opt]# mkdir test
[root@hadoop106 opt]# rmdir test
应用实例
案例1:删除一个目录 /home/dog
rmdir /home/dog [要求 /home/dog 空目录]
使用细节
rmdir 删除的是空目录,如果目录下有内容时无法删除的。
提示:如果需要删除非空目录,需要使用 rm -rf 要删除的目录
比如:
rm -rf /home/dog
r: 表示递归删除,就是将该目录下的文件和子目录全部删除
f: 表示强制删除,就是不需询问
7.2.5 touch 创建空文件
1)基本语法:
touch 文件名称
2)案例
[root@hadoop106 opt]# touch test.java
说明:如果文件存在,则表示刷新该文件的修改时间.
7.2.6 cd 切换目录 (相对 绝对路径)
1)基本语法:
(1)cd 绝对路径
(2)cd 相对路径
(3)cd ~或者cd (功能描述:回到自己的家目录)
(4)cd - (功能描述:回到上一次所在目录)
(5)cd … (功能描述:回到当前目录的上一级目录)
(6)cd -P (功能描述:跳转到实际物理路径,而非快捷方式路径)

2)案例
(1)使用 mkdir 命令创建atguigu目录
[root@www ~]# mkdir atguigu
(2)使用绝对路径切换到atguigu目录
[root@www ~]# cd /root/atguigu/
(3)使用相对路径切换到atguigu目录
[root@www ~]# cd ./atguigu/
(4)表示回到自己的家目录,亦即是 /root 这个目录
[root@www atguigu]# cd ~
(5)cd- 回到上一次所在目录
[root@www atguigu]# cd -
(6)表示回到当前目录的上一级目录,亦即是 /root 的上一级目录的意思;
[root@www ~]# cd …
7.2.7 cp 复制文件或目录
1)基本语法:
(1)cp source dest (功能描述:复制source文件到dest)
(2)cp -r sourceFolder targetFolder (功能描述:递归复制整个文件夹)
2)案例
(1)复制文件
[root@hadoop106 opt]# cp test.java test
(2)递归复制整个文件夹
[root@hadoop106 opt]# cp -r test test1
应用实例
案例1: 将 /home/aaa.txt 拷贝到 /home/bbb 目录下

   案例2: 递归复制整个文件夹,举例, 将 /home 整个目录拷贝 /opt

使用细节
强制覆盖不提示的方法:\cp
(因为加入A目录有一百个文件,B目录也有一百个文件,这样系统就会提示是否覆盖相同的文件,如果这一百个文件都相同那就提示一百次,很麻烦,所以使用该方法。)

7.2.8 rm 移除文件或目录
rm 指令移除文件或目录
基本语法
rm [选项] 要删除的文件或目录
常用选项
-r :递归删除整个文件夹
-f : 强制删除不提示
应用实例
案例1: 将 /home/aaa.txt 删除
rm /home/aaa.txt
案例2: 递归删除整个文件夹 /home/bbb
rm –r /home/bbb
使用细节
强制删除不提示的方法:带上 -f 参数即可
rm –rf /home/bbb
7.2.9 mv 移动文件与目录或重命名
1)基本语法:
(1)mv oldNameFile newNameFile (功能描述:重命名)
(2)mv /temp/movefile /targetFolder (功能描述:移动文件)
2)案例:
1)重命名
[root@hadoop106 opt]# mv test.java test1.java
2)移动文件
[root@hadoop106 opt]# mv test1.java test1
基本语法
mv oldNameFile newNameFile (功能描述:重命名)
mv /temp/movefile /targetFolder (功能描述:移动文件或目录)

应用实例
案例1: 将 /home/aaa.txt 文件 重新命名为 pig.txt
案例2:将 /home/pig.txt 文件 移动到 /root 目录下

7.2.10 cat 查看文件内容
查看文件内容,从第一行开始显示。
1)基本语法
cat [选项] 要查看的文件
选项:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字节 $ 显示出来;
-n :列出行号,连同空白行也会有行号,与 -b 的选项不同;
例如:cat xxx.txt | more说明:
如果需要一行行,输入 enter
如果需要翻页 ,输入空格键.
如果需要退出,输入 q
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
2)案例
[atguigu@hadoop101 ~]$ cat -A test.txt
hellda $
dasadf ^I$
daII^I$
das$
7.2.11 tac查看文件内容
查看文件内容,从最后一行开始显示,可以看出 tac 是 cat 的倒著写。
1)基本语法:
tac [选项参数] 要查看的文件
2)案例
[root@hadoop106 test1]# cat test1.java
hello
atguigu
atguigu1

[root@hadoop106 test1]# tac test1.java
atguigu1
atguigu
hello
7.2.12 more 查看文件内容
查看文件内容,一页一页的显示文件内容。
1)基本语法:
more 要查看的文件
2)功能使用说明
空白键 (space):代表向下翻一页;
Enter:代表向下翻『一行』;
q:代表立刻离开 more ,不再显示该文件内容。
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
3)案例
[root@hadoop106 test1]# more test1.java
7.2.13 less 查看文件内容
less 的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 允许使用[pageup] [pagedown]往回滚动。不会使整个文件加载才显示,而是根据显示需要加载内容,因此在读取大文件使具有很高的效率。
1)基本语法:
less 要查看的文件
2)功能使用说明
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;n:向下查找;N:向上查找;
?字串 :向上搜寻『字串』的功能;n:向上查找;N:向下查找;
q :离开 less 这个程序;
3)案例
[root@hadoop106 test1]# less test1.java
7.2.14 head查看文件内容
查看文件内容,只看头几行。
1)基本语法
head -n 10 文件 (功能描述:查看文件头10行内容,10可以是任意行数)
2)案例
[root@hadoop106 test1]# head -n 2 test1.java
hello
atguigu
7.2.15 tail 查看文件内容
查看文件内容,只看尾巴几行。跟head相反,默认显示文档后十行。
1)基本语法
(1)tail -n 10 文件 (功能描述:查看文件头10行内容,10可以是任意行数)
(2)tail –f 文件 (功能描述:实时追踪该文档的所有更新)
2)案例
(1)查看文件头1行内容
[root@hadoop106 test1]# tail -n 1 test1.java
Atguigu
(2)实时追踪该档的所有更新
[root@hadoop106 test1]# tail -f test1.java
hello
atguigu
atguigu
7.2.16 重定向命令

输出重定向和 >> 追加
基本语法
1) ls -l >文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
2) ls -al >>文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
3) cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)
4) echo “内容”>> 文件
应用实例
案例1: 将 /home 目录下的文件列表 写入到 /home/info.txt 中
ls –l /home/ > /home/info.txt [如果文件不存在,则会自动创建]
案例2: 将当前日历信息 追加到 /home/mycal 文件中
date >> /home/mycal

7.2.17 echo
1)基本语法:
(1)echo 要显示的内容 >> 存储内容的的文件 (功能描述:将要显示的内容,存储到文件中)
(2)echo 变量 (功能描述:显示变量的值)
2)案例
[root@hadoop106 test1]# echo $JAVA_HOME
/opt/module/jdk1.7.0_79
7.2.18 ln软链接
1)基本语法:
ln –s [原文件] [目标文件]
(功能描述:给原文件创建一个软链接(快捷方式),软链接存放在目标文件目录)
2)案例:
[root@hadoop101 module]# ln -s /opt/module/test.txt /opt/t.txt
[root@hadoop101 opt]# ll
lrwxrwxrwx. 1 root root 20 6月 17 12:56 t.txt -> /opt/module/test.txt

创建一个软链接
[atguigu@hadoop103 opt]$ ln -s /opt/module/hadoop-2.7.2/ /opt/software/hadoop
cd不加参数进入是软链接的地址
[atguigu@hadoop103 software]$ cd hadoop
[atguigu@hadoop103 hadoop]$ pwd
/opt/software/hadoop

cd加参数进入是实际的物理地址
[atguigu@hadoop103 software]$ cd -P hadoop
[atguigu@hadoop103 hadoop-2.7.2]$ pwd
/opt/module/hadoop-2.7.2
应用实例
案例1: 在/home 目录下创建一个软连接 linkToRoot,连接到 /root 目录
ln -s /root/ linkToRoot
案例2: 删除软连接 linkToRoot
rm –rf linkToRoot [在看]
细节说明
当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。
7.2.19 history查看所敲命令历史
查看已经执行过历史命令,也可以执行历史指令
基本语法
history (功能描述:查看已经执行过历史命令)
应用实例
案例1: 显示所有的历史命令
history
案例2: 显示最近使用过的10个指令。
history 10
案例3: 执行历史编号为5的指令 !5
!5
7.3 时间日期类
1)基本语法
date [OPTION]… [+FORMAT]
7.3.1 date显示当前时间
1)基本语法:
(1)date (功能描述:显示当前时间)
(2)date +%Y (功能描述:显示当前年份)
(3)date +%m (功能描述:显示当前月份)
(4)date +%d (功能描述:显示当前是哪一天)
(5)date +%Y%m%d date +%Y/%m/%d … (功能描述:显示当前年月日各种格式 )
(6)date “+%Y-%m-%d %H:%M:%S” (功能描述:显示年月日时分秒)
2)案例
[root@hadoop106 /]# date
2017年 06月 19日 星期一 20:53:30 CST
[root@hadoop106 /]# date +%Y%m%d
20170619
[root@hadoop106 /]# date “+%Y-%m-%d %H:%M:%S”
2017-06-19 20:54:58
7.3.2 date显示非当前时间
1)基本语法:
(1)date -d ‘1 days ago’ (功能描述:显示前一天日期)
(2)date -d yesterday +%Y%m%d (同上)
(3)date -d next-day +%Y%m%d (功能描述:显示明天日期)
(4)date -d ‘next monday’ (功能描述:显示下周一时间)

  1. date (功能描述:显示当前时间)
  2. date +%Y (功能描述:显示当前年份)
  3. date +%m (功能描述:显示当前月份)
  4. date +%d (功能描述:显示当前是哪一天)
  5. date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒)
    2)案例:
    [root@hadoop106 /]# date -d ‘1 days ago’
    2017年 06月 18日 星期日 21:07:22 CST
    [root@hadoop106 /]# date -d next-day +%Y%m%d
    20170620
    [root@hadoop106 /]# date -d ‘next monday’
    2017年 06月 26日 星期一 00:00:00 CST
    7.3.3 date设置系统时间
    1)基本语法:
    date -s 字符串时间
    2)案例
    [root@hadoop106 /]# date -s “2017-06-19 20:52:18”
    7.3.4 cal查看日历
    1)基本语法:
    cal [选项] (功能描述:不加选项,显示本月日历)
    选项:
    -3 ,显示系统前一个月,当前月,下一个月的日历
    具体某一年,显示这一年的日历。
    2)案例:
    [root@hadoop106 /]# cal
    [root@hadoop106 /]# cal -3
    [root@hadoop106 /]# cal 2016
    7.4 用户管理命令
    7.4.1 useradd 添加新用户
    对linux用户的示意图

基本介绍
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统

1)基本语法:
useradd 用户名 (功能描述:添加新用户)
案例演示
案例1:添加一个用户 xiaoming

使用细节
1)当创建用户成功后,会自动的创建和用户同名的家目录 【/home/xiaoming】
2)也可以通过 useradd -d 指定目录 新的用户名jack,给新创建的用户指定家目录
7.4.2 passwd 设置用户密码
1)基本语法:
passwd 用户名 (功能描述:设置用户密码)
2)案例
[root@hadoop101 opt]# passwd atguigu
7.4.3 id 判断用户是否存在(查询用户信息)
1)基本语法:
id 用户名
2)案例:
[root@hadoop101 opt]#id atguigu //当用户不存在时,返回无此用户
7.4.4 su 切换用户
1)基本语法:
su 用户名称 (功能描述:切换用户)
2)案例
[root@hadoop101 opt]#su atguigu
创建一个用户milan ,指定密码,然后切换到 milan.

细节说明
1)从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
2)当需要返回到原来用户时,使用exit指令
3)如果 su – 没有带用户名,则默认切换到root用户

7.4.5 userdel 删除用户
1)基本语法:
(1)userdel 用户名 (功能描述:删除用户但保存用户主目录)
(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)
2)案例:
(1)删除用户但保存用户主目录
[root@hadoop101 opt]#userdel atguigu
(2)删除用户和用户主目录,都删除
[root@hadoop101 opt]#userdel –r atguigu 【小心使用】
// 实际开发中不应该删除家目录,因为就算员工辞职了,删除用户也不应该删除家目录,因为员工可能还有一些代码什么的。
7.4.6 who 查看登录用户信息
1)基本语法
(1)whoami (功能描述:显示自身用户名称)
(2)who am i (功能描述:显示登录用户的用户名)
(3)who (功能描述:看当前有哪些用户登录到了本台机器上)
2)案例
[root@hadoop101 opt]# whoami
[root@hadoop101 opt]# who am i
[root@hadoop101 opt]# who
7.4.7 设置atguigu普通用户具有root权限
1)修改配置文件
修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:

Allow root to run any commands anywhere

root ALL=(ALL) ALL
atguigu ALL=(ALL) ALL
修改完毕,现在可以用atguigu帐号登录,然后用命令 su - ,即可获得root权限进行操作。
2)案例
[atguigu@hadoop101 opt]$ sudo mkdir module
[root@hadoop101 opt]# chown atguigu:atguigu module/
7.4.8 cat /etc/passwd 查看创建了哪些组
cat /etc/passwd
用户信息(用户配置文件)放在这里/etc/passwd

7.4.9 usermod修改用户
1)基本语法:
usermod -g 用户组 用户名
2)案例:
将用户atguigu加入dev用户组
[root@hadoop101 opt]#usermod –g dev atguigu
修改用户名(root权限下运行)
比如我要将我系统下的Python账户改名为geeklp,可以按照以下方法操作。
[root@Geeklp-Python ~]# usermod -l geeklp Python

7.5 用户组管理命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,
如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

7.5.1 groupadd 新增组
1)基本语法
groupadd 组名
2)案例:
添加一个atguigu组
[root@hadoop101 opt]#groupadd atguigu
增加用户时直接加上组
指令(基本语法)
useradd –g 用户组 用户名
增加一个用户 zwj, 直接将他指定到 wudang

7.5.2 groupdel删除组
1)基本语法:
groupdel 组名
2)案例
[root@hadoop101 opt]# groupdel atguigu
7.5.3 groupmod修改组
1)基本语法:
groupmod -n 新组名 老组名
2)案例
修改atguigu组名称为atguigu1
[root@hadoop101 atguigu]# groupmod –n atguigu1 atguigu
7.5.4 cat /etc/group 查看创建了哪些组
cat /etc/group
用户和组的相关文件

/etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell [图]

/etc/shadow 文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留 [图]

/etc/group 文件
组(group)的配置文件,记录Linux包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表

课堂练习

7.5.5 综合案例
[root@hadoop101 atguigu]# groupadd dev
[root@hadoop101 atguigu]# groupmod -n device dev
[root@hadoop101 atguigu]# usermod -g device atguigu
[root@hadoop101 atguigu]# su atguigu
[atguigu@hadoop101 ~]$ mkdir atguigu
[atguigu@hadoop101 ~]$ ls -l
drwxr-xr-x. 2 atguigu device 4096 5月 27 16:31 atguigu
[root@hadoop101 atguigu]# usermod -g atguigu atguigu
7.6 文件权限类
7.6.1 文件属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组。
1)从左到右的10个字符表示:
如果没有权限,就会出现减号[ - ]而已。从左至右用0-9这些数字来表示:
(1)0首位表示类型
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等

  • 代表文件
    d 代表目录
    c 字符流,装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
    s socket
    p 管道
    l 链接文档(link file);
    b 设备文件,装置文件里面的可供储存的接口设备(可随机存取装置)
    (2)第1-3位确定属主(该文件的所有者)拥有该文件的权限。—User
    (3)第4-6位确定属组(所有者的同组用户)拥有该文件的权限,—Group
    (4)第7-9位确定其他用户拥有该文件的权限 —Other
    文件类型 属主权限 属组权限 其他用户权限
    0 1 2 3 4 5 6 7 8 9
    d R w x R - x R - x
    目录文件 读 写 执行 读 写 执行 读 写 执行
    2)rxw作用文件和目录的不同解释
    (1)作用到文件:
    [ r ]代表可读(read): 可以读取,查看
    [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
    [ x ]代表可执行(execute):可以被系统执行
    (2)作用到目录:
    [ r ]代表可读(read): 可以读取,ls查看目录内容
    [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
    [ x ]代表可执行(execute):可以进入该目录
    3)案例
    [atguigu@hadoop101 ~]$ ls -l
    总用量 8
    drwxrwxr-x. 2 atguigu atguigu 4096 5月 27 14:14 hello
    -rw-rw-r–. 1 atguigu atguigu 34 5月 27 14:20 test.txt

7.6.2 chmod改变权限
1)基本语法:
chmod [{ugoa}{±=}{rwx}] [文件或目录]
2)功能描述
改变文件或者目录权限
文件: r-查看;w-修改;x-执行文件
目录: r-列出目录内容;w-在目录中创建和删除;x-进入目录
删除一个文件的前提条件:该文件所在的目录有写权限,你才能删除该文件。
3)案例
[root@hadoop106 test1]# chmod u+x test1.java
[root@hadoop106 test1]# chmod g+x test1.java
[root@hadoop106 test1]# chmod o+x test1.java
[root@hadoop106 test1]# chmod 777 test1.java
[root@hadoop106 test1]#chmod -R 777 testdir
7.6.4 chown改变所有者
1)基本语法:
chown [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)
2)案例
[root@hadoop106 test1]# chown atguigu test1.java
[root@hadoop106 test1]# ls –al
-rwxr-xr-x. 1 atguigu atguigu 551 5月 23 13:02 test1.java
7.6.3 chgrp改变所属组
1)基本语法:
chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)
2)案例
[root@hadoop106 test1]# chgrp atguigu test1.java

[root@hadoop106 test1]# ls -al
-rwxr-xr-x. 1 root atguigu 551 5月 23 13:02 test1.java
7.6.5 su 切换用户
1)基本语法:
su –username (功能描述:切换用户)
2)案例
[root@hadoop101 atguigu]# su atguigu
[atguigu@hadoop101 ~]$

[atguigu@hadoop101 ~]$ su root
密码:
[root@hadoop101 atguigu]#
7.7 磁盘分区类
分区的方式(知道即可):
mbr分区:
1.最多支持四个主分区
2.系统只能安装在主分区
3.扩展分区要占一个主分区
4.MBR最大只支持2TB,但拥有最好的兼容性
gtp分区(比mbr分区优越):
1.支持无限多个主分区(但操作系统可能限制,比如 windows下最多128个分区)
2.最大支持18EB的大容量(1EB=1024 PB,1PB=1024 TB )
3.windows7 64位以后支持gtp
windows下的磁盘分区

Linux分区原理介绍
1)Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分。
2)Linux采用了一种叫“载入(mount)”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
3)示意图【分区和文件目录】

硬盘说明
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硬盘的表示方法一样。sdb1 [表示第2块scsi 硬盘的第1个分区]
查看所有设备(光驱 /media,u盘, 硬盘)挂载情况
命令 :lsblk 或者 lsblk -f

挂载的经典案例
说明:
下面我们以增加一块硬盘1G 为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念

增加一块硬盘的步骤
看老师的演示:
1)增加一块硬盘 1G [到设置中添加一块硬盘即可]
2)重启一下服务器
lsblk

3)给sdb 硬盘分区

4)格式化 sdb1
mdfs -t ext4 /dev/sdb1 [把 /dev/sdb1 分区格式化]

5)挂载
mkdir /home/newdisk
mount /dev/sdb1 /home/newdisk [说明;挂载时,不要在 /home/newdisk ]

6)上面的方式,只是临时生效,当你重启系统,挂载的关系没有, 配置linux的分区表,实现启动时,自动挂载.
vim /etc/fstab

7)重启后,会自动挂载.
8)如果,我们希望卸载,指令
umount 设备名 | 挂载路径
umount /dev/sdb1
7.7.1 fdisk查看分区
1)基本语法:
fdisk –l (功能描述:查看磁盘分区详情)
注意:在root用户下才能使用
2)功能说明:
(1)Linux分区
这个硬盘是20G的,有255个磁面;63个扇区;2610个磁柱;每个 cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(约为)=8.225280M(约为);
Device Boot Start End Blocks Id System
分区序列 引导 从X磁柱开始 到Y磁柱结束 容量 分区类型ID 分区类型
(2)Win7分区

3)案例
[root@hadoop101 /]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005e654

Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1332 10485760 83 Linux
/dev/sda3 1332 1593 2097152 82 Linux swap / Solaris
7.7.2 df查看硬盘
1)基本语法:
df 参数 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型,连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
2)案例
[root@hadoop106 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.5G 11G 26% /
tmpfs 939M 224K 939M 1% /dev/shm
/dev/sda1 190M 39M 142M 22% /boot
查询指定目录的磁盘占用情况
基本语法
du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
应用实例
查询 /usr目录的磁盘占用情况,深度为1 du -ach --max-depth= 1 /usr

磁盘情况-工作实用指令
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)统计/home文件夹下目录的个数,包括子文件夹里的
ls –lR /home/ | grep “^d” | wc -l
以树状显示home目录结构 [没有tree指令咋办, 使用yum 来安装]
先安装
yum install tree

7.7.3 mount/umount挂载/卸载
对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构
Linux中每个分区都是用来组成整个文件系统的一部分,她在用一种叫做“挂载”的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,要载入的那个分区将使它的存储空间在这个目录下获得。
0)挂载前准备(必须要有光盘或者已经连接镜像文件)

1)挂载光盘语法:
mount [-t vfstype] [-o options] device dir
(1)-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。
常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
(2)-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
  ro:采用只读方式挂接设备
  rw:采用读写方式挂接设备
  iocharset:指定访问文件系统所用字符集
(3)device 要挂接(mount)的设备
(4)dir设备在系统上的挂接点(mount point)
2)案例
(1)光盘镜像文件的挂载
[root@localhost ~]# mkdir /mnt/cdrom/ 建立挂载点
[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/ 设备/dev/cdrom挂载到 挂载点 : /mnt/cdrom中
[root@hadoop101 ~]# ll /mnt/cdrom/
3)卸载光盘语法:
[root@localhost ~]# umount 设备文件名或挂载点
4)案例
[root@localhost ~]# umount /mnt/cdrom
5)开机自动挂载语法:
[root@hadoop101 ~]# vi /etc/fstab
添加红框中内容,保存退出。

7.8 搜索查找类
7.8.1 find 查找文件或者目录
1)基本语法:
find [搜索范围] [匹配条件]
2)案例
(1)按文件名:根据名称查找/目录下的filename.txt文件。
[root@hadoop106 ~]# find /opt/ -name *.txt
(2)按拥有者:查找/opt目录下,用户名称为-user的文件
[root@hadoop106 ~]# find /opt/ -user atguigu
(3)按文件大小:在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)
[root@hadoop106 ~]find /home –size +204800
7.8.2 grep 在文件内搜索字符串匹配的行并输出
1)基本语法
grep+参数+查找内容+源文件
参数:
-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
2)案例
[root@hadoop106 opt]# ls | grep -n test
4:test1
5:test2
7.8.3 which 文件搜索命令
1)基本语法:
which 命令 (功能描述:搜索命令所在目录及别名信息)
2)案例
[root@hadoop101 opt]# which ls
/bin/ls
7.8.4 locate指令
说明
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
基本语法
locate 搜索文件
特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
应用实例
案例1: 请使用locate 指令快速定位 hello.txt 文件所在目录

7.8.5 grep指令和 管道符号 |
说明
grep 过滤查找 , 管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
基本语法
grep [选项] 查找内容 源文件
常用选项

应用实例
案例1: 请在 /etc/profile 文件中,查找 “if” 所在行,并且显示行号
grep –n if /etc/profile [在/etc/profile 中查找 if ,并显示行,区别大小写]
grep –ni if /etc/profile [在/etc/profile 中查找 if ,并显示行,不区别大小写]
案例2: 配合 管道 | 使用案例, 查看当前服务器有没有 sshd 服务在监听.

7.9 进程线程类
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
基本介绍
1)在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器
3)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行[sshd , crond]。
4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

7.9.1 ps查看系统中所有进程
1)基本语法:
ps –aux (功能描述:查看系统中所有进程)
选项 功能
-a 选择所有进程
-u 显示所有用户的所有进程
-x 显示没有终端的进程
基本语法
ps -aux | grep xxx (功能描述:查看系统中部分进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)

2)功能说明
(1)ps aux显示信息说明
USER:该进程是由哪个用户产生的
PID:进程的ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ:该进程占用虚拟内存的大小,单位KB;
RSS:该进程占用实际物理内存的大小,单位KB;
TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。
STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名
案例
[root@hadoop101 datas]# ps -aux

图1-161 查看进程的CPU占用率和内存占用率

(2)ps -ef显示信息说明
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
案例实操
[root@hadoop101 datas]# ps -ef

如图1-162所示

图1-162 查看进程的父进程ID

经验技巧
如果想查看进程的CPU占用率和内存占用率,可以使用aux;
如果想查看进程的父进程ID可以使用ef;

7.9.2 top查看系统健康状态(动态监控进程)
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程(默认每3秒变化一次)。
1)基本命令
top [选项]
(1)选项:
-d 秒数:指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令:
-i:使top不显示任何闲置或者僵死进程。
-p:通过指定监控进程ID来仅仅监控某个进程的状态。
-s : 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

(2)操作选项:

P: 以CPU使用率排序,默认就是此项
M: 以内存的使用率排序
N: 以PID排序
q: 退出top
(3)查询结果字段解释
第一行信息为任务队列信息
内容 说明
12:26:46 系统当前时间
up 1 day, 13:32 系统的运行时间,本机已经运行1天
13小时32分钟
2 users 当前登录了两个用户
load average: 0.00, 0.00, 0.00 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。
第二行为进程信息
Tasks: 95 total 系统中的进程总数
1 running 正在运行的进程数
94 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程。如果不是0,需要手工检
查僵尸进程
第三行为CPU信息
Cpu(s): 0.1%us 用户模式占用的CPU百分比
0.1%sy 系统模式占用的CPU百分比
0.0%ni 改变过优先级的用户进程占用的CPU百分比
99.7%id 空闲CPU的CPU百分比
0.1%wa 等待输入/输出的进程的占用CPU百分比
0.0%hi 硬中断请求服务占用的CPU百分比
0.1%si 软中断请求服务占用的CPU百分比
0.0%st st(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。
第四行为物理内存信息
Mem: 625344k total 物理内存的总量,单位KB
571504k used 已经使用的物理内存数量
53840k free 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了628MB内存,所以只有53MB的空闲内存了
65800k buffers 作为缓冲的内存数量
第五行为交换分区(swap)信息
Swap: 524280k total 交换分区(虚拟内存)的总大小
0k used 已经使用的交互分区的大小
524280k free 空闲交换分区的大小
409280k cached 作为缓存的交互分区的大小
2)案例
[root@hadoop101 atguigu]# top –d 1
[root@hadoop101 atguigu]# top -i
[root@hadoop101 atguigu]# top –p 2575
[root@hadoop101 atguigu]# top –s

执行上述命令后,可以按P、M、N对查询出的进程结果进行排序。

7.9.3 pstree查看进程树
1)基本语法:
pstree [选项] //可以更加直观的来看进程信息
选项
-p: 显示进程的PID
-u: 显示进程的所属用户
2)案例:
[root@hadoop102 datas]# pstree -u
[root@hadoop102 datas]# pstree -p
7.9.4 kill终止进程
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。
1)基本语法:
kill [选项] 进程号(功能描述:通过进程号杀死进程 -9 强制终止)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
2) 案例1:踢掉某个非法登录用户【jack】
案例2: 终止远程登录服务sshd, 在适当时候再次重启sshd服务

案例3: 终止多个gedit 编辑器
killall gedit
案例4:强制杀掉一个终端 对于 bash
kill -9 对应的bash的进程号
7.9.5 netstat显示网络统计信息
1)基本语法:
netstat –anp
(功能描述:此命令用来显示整个系统目前的网络情况。例如目前的连接、数据包传递数据、或是路由表内容)
选项:
-an 按一定顺序排列输出
-p 表示显示哪个进程在调用
-nltp 查看tcp协议进程端口号
1.基本语法
netstat -anp |grep 进程号 (功能描述:查看该进程网络信息)
netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
2.选项说明
表1-45
选项 功能
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在listen(监听)的服务状态
-p 表示显示哪个进程在调用

2)案例
查看端口50070的使用情况
[root@hadoop106 hadoop-2.7.2]# netstat -anp | grep 50070
tcp 0 0 0.0.0.0:50070 0.0.0.0:* LISTEN 6816/java
端口号 进程号
7.10 压缩和解压类
7.10.1 gzip/gunzip压缩
基本语法
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
2)特点:
(1)只能压缩文件不能压缩目录
(2)不保留原来的文件
3)案例
(1)gzip压缩
[root@hadoop106 opt]# ls
test.java
[root@hadoop106 opt]# gzip test.java
[root@hadoop106 opt]# ls
test.java.gz
(2)gunzip解压缩文件
[root@hadoop106 opt]# gunzip test.java.gz
[root@hadoop106 opt]# ls
test.java
应用实例
案例1: gzip压缩, 将 /home下的 hello.txt文件进行压缩
案例2: gunzip压缩, 将 /home下的 hello.txt.gz 文件进行解压缩

7.10.2 zip/unzip压缩
1)基本语法:
zip + 参数 + XXX.zip + 将要压缩的内容
(功能描述:压缩文件和目录的命令,window/linux通用且可以压缩目录且保留源文件)
参数:
-r 递归压缩,压缩目录
-d 指定解压后文件的存放目录

2)案例:
(1)压缩 1.txt 和2.txt,压缩后的名称为mypackage.zip
[root@hadoop106 opt]# zip test.zip test1.java test.java
adding: test1.java (stored 0%)
adding: test.java (stored 0%)

[root@hadoop106 opt]# ls
test1.java test.java test.zip
(2)解压 mypackage.zip
[root@hadoop106 opt]# unzip test.zip
Archive: test.zip
extracting: test1.java
extracting: test.java

[root@hadoop106 opt]# ls
test1.java test.java test.zip

应用实例
案例1: 将 /home下的 所有文件进行压缩成 mypackage.zip [退出home]
zip -r mypackage.zip /home/
案例2: 将 mypackge.zip 解压到 /opt/tmp 目录下
unzip –d /opt/tmp mypackage.zip [如果/opt/tmp 不存在,会自动创建]

7.10.3 tar打包
1)基本语法:
tar + 参数 + XXX.tar.gz + 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
参数:
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件
2)案例
(1)压缩:tar -zcvf XXX.tar.gz n1.txt n2.txt
压缩多个文件
[root@hadoop106 opt]# tar -zcvf test.tar.gz test1.java test.java
test1.java
test.java
[root@hadoop106 opt]# ls
test1.java test.java test.tar.gz
压缩目录
[root@hadoop106 opt]# tar -zcvf test.java.tar.gz test1
test1/
test1/hello
test1/test1.java
test1/test/
test1/test/test.java
[root@hadoop106 opt]# ls
test1 test.java.tar.gz
(2)解压:tar -zxvf XXX.tar.gz
解压到当前目录
[root@hadoop106 opt]# tar -zxvf test.tar.gz
解压到/opt目录
[root@hadoop106 opt]# tar -zxvf test.tar.gz –C /opt
应用实例
1案例1: 压缩多个文件,将 /home/a1.txt 和 /home/a2.txt 压缩成 a.tar.gz 【zcvf】 zxvf
tar -zcvf a.tar.gz a1.txt a2.txt [注意,路径要写清楚]
2案例2: 将/home 的文件夹 压缩成 myhome.tar.gz
tar -zcvf myhome.tar.gz /home/ [注意,路径写清楚]
3案例3: 将 a.tar.gz 解压到当前目录
tar -zxvf a.tar.gz
4 案例4: 将myhome.tar.gz 解压到 /opt/tmp2目录下 【-C】
tar -zxvf myhome.tar.gz -C /opt/tmp2 [注意; /opt/tmp2 事先需要创建好,否则报错。]

7.11 后台服务管理类
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。【原理图】

7.11.1 service后台服务管理
1)service network status 查看指定服务的状态
2)service network stop 停止指定服务
3)service network start 启动指定服务
4)service network restart 重启指定服务
5)service --status-all 查看系统中所有的后台服务
service管理指令:
service 服务名 [start | stop | restart | reload | status]
在CentOS7.0后 不再使用service ,而是 systemctl
案例

  1. 查看当前防火墙的状况,关闭防火墙和重启防火墙。
    Service iptables status

细节讨论:
关闭或者启用防火墙后,立即生效。[telnet 测试 某个端口即可]
service iptables stop , service iptables start
这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效,要使用chkconfig指令。

7.11.2 chkconfig设置后台服务的自启配置
1)chkconfig 查看所有服务器自启配置
2)chkconfig iptables off 关掉指定服务的自动启动
3)chkconfig iptables on 开启指定服务的自动启动

7.12 crond系统定时任务
概述
任务调度: 是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
7.12.1 crond服务管理
[root@localhost ~]# service crond restart (重新启动服务)
7.12.2 crontab定时任务设置
1)基本语法
crontab [选项]
选项:
-e: 编辑crontab定时任务
-l: 查询crontab任务
-r: 删除当前用户所有的crontab任务
2)参数说明
[root@localhost ~]# crontab -e
(1)进入crontab编辑界面。会打开vim编辑你的工作。

          • 执行的任务
            项目 含义 范围
            第一个“” 一小时当中的第几分钟 0-59
            第二个“
            ” 一天当中的第几小时 0-23
            第三个“” 一个月当中的第几天 1-31
            第四个“
            ” 一年当中的第几月 1-12
            第五个“*” 一周当中的星期几 0-7(0和7都代表星期日)
            (2)特殊符号
            特殊符号 含义
  • 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
    , 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
  • 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令
    /n 代表每隔多久执行一次。比如“/10 * * * * 命令”,代表每隔10分钟就执行一遍命令
    (3)特定时间执行命令
    时间 含义
    45 22 * * * 命令 在22点45分执行命令
    0 17 * * 1 命令 每周1 的17点0分执行命令
    0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
    40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
    */10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
    0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。
    3)案例:
    */5 * * * * /bin/echo ”11” >> /tmp/test
    应用实例
    1)案例1:每隔1分钟,就将当前的日期信息,追加到 /tmp/mydate.log 文件中
    */1 * * * * date >> /tmp/mydate.log

案例2:每隔1分钟, 将当前日期和日历都追加到 /home/mycal.log 文件中

步骤
1 先编写一个文件 /home/mytask2.sh
date>> /temp/mycal
cal>> /temp/mycal
2 给mytask2.sh一个可以执行的权限
chmod 744 /home/mytask2.sh
3 crontab - e
4 */1 * * * * /home/mytask2.sh
5 成功

  案例3:    每天凌晨2:00 将mysql数据库 testdb ,备份到文件中。

步骤:1, 首先编写一个 脚本 backupdb.sh
#!/bin/bash
#备份路径
BACKUP=/data/backup/sql/dy
#当前时间
DATETIME= ( d a t e + e c h o " = = = 备 份 开 始 = = = " e c h o " 备 份 文 件 存 放 于 (date +%Y-%m-%d_%H%M%S) echo "===备份开始===" echo "备份文件存放于 (date+echo"======"echo"{BACKUP}/KaTeX parse error: Expected 'EOF', got '#' at position 18: …TETIME.tar.gz" #̲数据库地址 HOST=loca…{BACKUP}/KaTeX parse error: Expected 'EOF', got '&' at position 13: DATETIME" ] &̲& mkdir -p "{BACKUP}/$DATETIME"

#后台系统数据库
DATABASE=dy_backgroundms
mysqldump -u D B U S E R − p {DB_USER} -p DBUSERp{DB_PW} --host=$HOST -q -R --databases $DATABASE | gzip > B A C K U P / {BACKUP}/ BACKUP/DATETIME/$DATABASE.sql.gz

#投入品监管数据库
DATABASE=dy_firip
mysqldump -u D B U S E R − p {DB_USER} -p DBUSERp{DB_PW} --host=$HOST -q -R --databases $DATABASE | gzip > B A C K U P / {BACKUP}/ BACKUP/DATETIME/$DATABASE.sql.gz

#压缩成tar.gz包
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除备份目录
rm -rf B A C K U P / {BACKUP}/ BACKUP/DATETIME

#删除30天前备份的数据
find $BACKUP -mtime +30 -name “*.tar.gz” -exec rm -rf {} ;
echo “=备份成功=”

步骤2: 给 /home/backupdb.sh 一个可以执行的权限
chmod u+x backupdb.sh
步骤3: 将backupdb.sh 部署到crontab
crontab -e
增加

  • 2 * * * /home/backupdb.sh
    到此ok!

八、rpm
8.1 概述
RPM(RedHat Package Manager),Rethat软件包管理工具,类似windows里面的setup.exe
是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。
RPM包的名称格式
Apache-1.3.23-11.i386.rpm
-“apache” 软件名称
-“1.3.23-11”软件的版本号,主版本和此版本
-“i386”是软件所运行的硬件平台
-“rpm”文件扩展名,代表RPM包

8.2 常用命令
8.2.1 查询
1)基本语法:

2)案例
[root@hadoop100 Packages]# rpm -qa |grep firefox
firefox-45.0.1-1.el6.centos.x86_64
8.2.2 卸载
1)基本语法:
(1)rpm -e RPM软件包名称
例如:rpm -e firefox
或者(2) rpm -e --nodeps 软件包
–nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。

细节讨论

2)案例
[root@hadoop100 Packages]# rpm -e firefox
8.2.3 安装
1)基本语法:
rpm –ivh RPM包全名
-i=install,安装
-v=verbose,显示详细信息
-h=hash,进度条
–nodeps,不检测依赖进度
3)案例
演示卸载和安装firefox浏览器
提示:很多的rpm包,就在我们的centos安装的镜像文件中
第一步:首先卸载火狐,原位置图标会变黑。

第二部:挂载上安装光驱centos的ISO镜像文件,然后到media上去找RPM包。

ls 回车可以看到很多rpm 包

在Packages 目录下将火狐的软件包拷贝到 /opt/ 目录下 切换到opt目录下。然后用安装命令 rpm-ivh firefox… 然后回车 就行了等进度条完成就成功了

这个时候火狐的图标点一下就不再是灰色了。成功

九、shell编程
大数据程序员为什么要学习Shell呢?
1)需要看懂运维人员编写的Shell程序。
2)偶尔会编写一些简单Shell程序来管理集群、提高开发效率。
9.1 概述以及shell解析器
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell是解释执行的脚本语言,在Shell中可以调用Linux系统命令。
Shell解析器–了解即可
(1)Linux提供的Shell解析器有:
[atguigu@hadoop101 ~]$ sudo cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
(2)bash和sh的关系
[atguigu@hadoop101 bin]$ ll | grep bash
-rwxr-xr-x. 1 root root 941880 5月 11 2016 bash
lrwxrwxrwx. 1 root root 4 5月 27 2017 sh -> bash
(3)Centos默认的解析器是bash
[atguigu@hadoop102 bin]$ echo $SHELL
/bin/bash

9.2 shell脚本入门
1)echo输出命令
(1)基本语法:
echo [选项] [输出内容]
选项:
-e: 支持反斜线控制的字符转换
控制字符 作 用
\ 输出\本身
\a 输出警告音
\b 退格键,也就是向左删除键
\c 取消输出行末的换行符。和“-n”选项一致
\e ESCAPE键
\f 换页符
\n 换行符
\r 回车键
\t 制表符,也就是Tab键
\v 垂直制表符
\0nnn 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数
(2)案例
[atguigu@hadoop102 sbin]$ echo “helloworld”
helloworld
2.第一个Shell脚本
(1)需求:创建一个Shell脚本,输出helloworld
(2)实操:
[atguigu@hadoop102 datas]$ touch helloworld.sh
[atguigu@hadoop102 datas]$ vi helloworld.sh

在helloworld.sh中输入如下内容
#!/bin/bash
echo “helloworld”
(3)脚本的常用执行方式
第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
sh+脚本的相对路径
[atguigu@hadoop101 datas]$ sh helloworld.sh
Helloworld
sh+脚本的绝对路径
[atguigu@hadoop101 datas]$
sh /home/atguigu/datas/helloworld.sh
helloworld
bash+脚本的相对路径
[atguigu@hadoop101 datas]$ bash helloworld.sh
Helloworld
bash+脚本的绝对路径
[atguigu@hadoop101 datas]$
bash /home/atguigu/datas/helloworld.sh
Helloworld
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
(a)首先要赋予helloworld.sh 脚本的+x权限
[atguigu@hadoop101 datas]$ chmod 777 helloworld.sh
(b)执行脚本
相对路径
[atguigu@hadoop101 datas]$ ./helloworld.sh
Helloworld
绝对路径
[atguigu@hadoop101 datas]$ /home/atguigu/datas/helloworld.sh
Helloworld
注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
3.第二个Shell脚本:多命令处理
(1)需求:
在/home/atguigu/目录下创建一个banzhang.txt,在banzhang.txt文件中增加“I love cls”。
(2)案例实操:
[atguigu@hadoop101 datas]$ touch batch.sh
[atguigu@hadoop101 datas]$ vi batch.sh

在batch.sh中输入如下内容
#!/bin/bash

cd /home/atguigu
touch cls.txt
echo “I love cls” >>cls.txt

9.3 shell中的变量
1)Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看系统变量。
2)系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等等
3)显示当前shell中所有变量:set
案例实操
(1)查看系统变量的值
[atguigu@hadoop101 datas]$ echo H O M E / h o m e / a t g u i g u ( 2 ) 显 示 当 前 S h e l l 中 所 有 变 量 : s e t [ a t g u i g u @ h a d o o p 101 d a t a s ] HOME /home/atguigu (2)显示当前Shell中所有变量:set [atguigu@hadoop101 datas] HOME/home/atguigu2Shellset[atguigu@hadoop101datas] set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
9.3.1 定义变量
1)基本语法:
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
2)变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
(2)等号两侧不能有空格
(3)变量名称一般习惯为大写
(4)双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意。变量的值如果有空格,需要使用双引号或单引号括起来。
(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

3)案例
(1)定义变量A
[atguigu@hadoop101 datas]$ A=5
[atguigu@hadoop101 datas]$ echo A 5 ( 2 ) 给 变 量 A 重 新 赋 值 [ a t g u i g u @ h a d o o p 101 d a t a s ] A 5 (2)给变量A重新赋值 [atguigu@hadoop101 datas] A52A[atguigu@hadoop101datas] A=8
[atguigu@hadoop101 datas]$ echo A 8 ( 3 ) 撤 销 变 量 A [ a t g u i g u @ h a d o o p 101 d a t a s ] A 8 (3)撤销变量A [atguigu@hadoop101 datas] A83A[atguigu@hadoop101datas] unset A
[atguigu@hadoop101 datas]$ echo A ( 4 ) 声 明 静 态 的 变 量 B = 2 , 不 能 u n s e t [ a t g u i g u @ h a d o o p 101 d a t a s ] A (4)声明静态的变量B=2,不能unset [atguigu@hadoop101 datas] A4B=2unset[atguigu@hadoop101datas] readonly B=2
[atguigu@hadoop101 datas]$ echo B 2 [ a t g u i g u @ h a d o o p 101 d a t a s ] B 2 [atguigu@hadoop101 datas] B2[atguigu@hadoop101datas] B=9
-bash: B: readonly variable
(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
[atguigu@hadoop102 ~]$ C=1+2
[atguigu@hadoop102 ~]$ echo C 1 + 2 ( 6 ) 变 量 的 值 如 果 有 空 格 , 需 要 使 用 双 引 号 或 单 引 号 括 起 来 [ a t g u i g u @ h a d o o p 102   ] C 1+2 (6)变量的值如果有空格,需要使用双引号或单引号括起来 [atguigu@hadoop102 ~] C1+26使[atguigu@hadoop102 ] D=I love banzhang
-bash: world: command not found
[atguigu@hadoop102 ~]$ D=“I love banzhang”
[atguigu@hadoop102 ~]$ echo A I l o v e b a n z h a n g ( 7 ) 可 把 变 量 提 升 为 全 局 环 境 变 量 , 可 供 其 他 S h e l l 程 序 使 用 e x p o r t 变 量 名 [ a t g u i g u @ h a d o o p 101 d a t a s ] A I love banzhang (7)可把变量提升为全局环境变量,可供其他Shell程序使用 export 变量名 [atguigu@hadoop101 datas] AIlovebanzhang7Shell使export[atguigu@hadoop101datas] vim helloworld.sh

在helloworld.sh文件中增加echo $B
#!/bin/bash

echo “helloworld”
echo $B

[atguigu@hadoop101 datas]$ ./helloworld.sh
Helloworld
发现并没有打印输出变量B的值。
[atguigu@hadoop101 datas]$ export B
[atguigu@hadoop101 datas]$ ./helloworld.sh
helloworld
2

9.3.2 将命令的返回值赋给变量
A=ls -la 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号
9.3.3 设置环境变量
1)基本语法:
(1)export 变量名=变量值 (功能描述:设置环境变量的值)
(2)echo 变 量 名 ( 功 能 描 述 : 查 询 环 境 变 量 的 值 ) ( 3 ) s o u r c e 配 置 文 件 ( 功 能 描 述 : 让 修 改 后 的 配 置 信 息 立 即 生 效 ) 2 ) 案 例 : ( 1 ) 在 / e t c / p r o f i l e 文 件 中 定 义 J A V A H O M E 环 境 变 量 e x p o r t J A V A H O M E = / o p t / m o d u l e / j d k 1.7. 0 7 9 e x p o r t P A T H = 变量名 (功能描述:查询环境变量的值) (3)source 配置文件 (功能描述:让修改后的配置信息立即生效) 2)案例: (1)在/etc/profile文件中定义JAVA_HOME环境变量 export JAVA_HOME=/opt/module/jdk1.7.0_79 export PATH= 3source21/etc/profileJAVAHOMEexportJAVAHOME=/opt/module/jdk1.7.079exportPATH=PATH:$JAVA_HOME/bin

(2)查看环境变量JAVA_HOME的值
[atguigu@hadoop102 datas]$ echo $JAVA_HOME
/opt/module/jdk1.7.0_79
9.3.4 位置参数变量
1)基本语法
$n (功能描述:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9{10})
输出该脚本文件名称、输入参数1和输入参数2 的值
[atguigu@hadoop101 datas]$ touch parameter.sh
[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo “$0 $1 $2”

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls xz
./parameter.sh cls xz
∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, *把所有的参数看成一个整体)
@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (功能描述:这个变量也代表命令行中所有的参数,不过 @@把每个参数区分对待)
打印输入的所有参数
[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo “$0 $1 $2”
echo $#
echo $*
echo $@

[atguigu@hadoop101 datas]$ bash parameter.sh 1 2 3
parameter.sh 1 2
3
1 2 3
1 2 3

$#	(功能描述:这个变量代表命令行中所有参数的个数)

获取输入参数的个数
[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo “$0 $1 $2”
echo $#

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls xz
parameter.sh cls xz
2

2)案例
(1)计算输入的参数1和参数2的两个数的和,并输出到控制台
#!/bin/bash
num1=$1
num2= 2 s u m = 2 sum= 2sum=(( $num1 + $num2))
#变量sum的和是num1加num2
echo $sum
#打印变量sum的值
(2)打印输入的参数总数、所有参数
#!/bin/bash
echo "A total of KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ parameters" #…#代表所有参数的个数
echo "The parameters is: KaTeX parse error: Expected 'EOF', got '#' at position 5: *" #̲使用*代表所有的参数
echo "The parameters is: KaTeX parse error: Expected 'EOF', got '#' at position 5: @" #̲使用@也代表所有参数
(3) ∗ 与 *与 @的区别
#!/bin/bash
for i in "KaTeX parse error: Expected 'EOF', got '#' at position 5: *" #̲*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo “The parameters is: i " d o n e x = 1 f o r y i n " i" done x=1 for y in " i"donex=1foryin"@”
# @ 中 的 每 个 参 数 都 看 成 是 独 立 的 , 所 以 “ @中的每个参数都看成是独立的,所以“ @@”中有几个参数,就会循环几次
do
echo "The parameter$x is: y " x = y" x= y"x=(( x + 1 ) ) d o n e a ) x +1 )) done a) x+1))donea和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 2 … 2 … 2n的形式输出所有参数
b)当它们被双引号“”包含时,“$
”会将所有的参数作为一个整体,以“$1 2 … 2 … 2n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “ 2 ” … ” 2”…” 2n”的形式输出所有参数
9.3.5 预定义变量
1)基本语法:
? ( 功 能 描 述 : 最 后 一 次 执 行 的 命 令 的 返 回 状 态 。 如 果 这 个 变 量 的 值 为 0 , 证 明 上 一 个 命 令 正 确 执 行 ; 如 果 这 个 变 量 的 值 为 非 0 ( 具 体 是 哪 个 数 , 由 命 令 自 己 来 决 定 ) , 则 证 明 上 一 个 命 令 执 行 不 正 确 了 。 ) 判 断 h e l l o w o r l d . s h 脚 本 是 否 正 确 执 行 [ a t g u i g u @ h a d o o p 101 d a t a s ] ? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。) 判断helloworld.sh脚本是否正确执行 [atguigu@hadoop101 datas] 00helloworld.sh[atguigu@hadoop101datas] ./helloworld.sh
hello world
[atguigu@hadoop101 datas]$ echo $?
0
KaTeX parse error: Can't use function '$' in math mode at position 24: …当前进程的进程号(PID)) $̲! (功能描述:后台运行的最…"

#使用find命令在root目录下查找hello.sh文件,符号&的意思是把命令放入后台执行
find /root -name hello.sh &

echo “The last one Daemon process is $!”

echo " ? " 9.4 运 算 符 1 ) 基 本 语 法 : ( 1 ) “ ?" 9.4 运算符 1)基本语法: (1)“ ?"9.411((运算式))”或“KaTeX parse error: Expected 'EOF', got '\*' at position 25: …)expr + , - , \̲*̲, /, % 加,减… expr 2 + 3
5
(2)计算3-2的值
[atguigu@hadoop101 datas]$ expr 3 - 2
1
(3)计算(2+3)X4的值
(a)expr一步完成计算
[atguigu@hadoop101 datas]$ expr expr 2 + 3 * 4
20
(b)采用KaTeX parse error: Expected 'EOF', got '#' at position 34: …adoop101 datas]#̲ S=[(2+3)*4]
[atguigu@hadoop101 datas]# echo $S

9.5 条件判断
9.5.1 判断语句
1)基本语法:
[ condition ](注意condition前后要有空格)
#非空返回true。
条件对错可使用KaTeX parse error: Expected 'EOF', got '&' at position 72: …se [condition] &̲& echo OK || ec… [ 23 -ge 22 ]
[atguigu@hadoop101 datas]$ echo ? 0 ( 2 ) h e l l o w o r l d . s h 是 否 具 有 写 权 限 [ a t g u i g u @ h a d o o p 101 d a t a s ] ? 0 (2)helloworld.sh是否具有写权限 [atguigu@hadoop101 datas] ?02helloworld.sh[atguigu@hadoop101datas] [ -w helloworld.sh ]
[atguigu@hadoop101 datas]$ echo ? 0 ( 3 ) / h o m e / a t g u i g u / c l s . t x t 目 录 中 的 文 件 是 否 存 在 [ a t g u i g u @ h a d o o p 101 d a t a s ] ? 0 (3)/home/atguigu/cls.txt目录中的文件是否存在 [atguigu@hadoop101 datas] ?03/home/atguigu/cls.txt[atguigu@hadoop101datas] [ -e /home/atguigu/cls.txt ]
[atguigu@hadoop101 datas]$ echo KaTeX parse error: Expected 'EOF', got '&' at position 14: ? 1 (4)多条件判断(&̲& 表示前一条命令执行成功时,… [ condition ] && echo OK || echo notok
OK
[atguigu@hadoop101 datas]$ [ condition ] && [ ] || echo notok
notok

9.6 流程控制–重点
9.6.1 if判断
1)基本语法:
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
案例 1
(1)输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
[atguigu@hadoop101 datas]$ touch if.sh
[atguigu@hadoop101 datas]$ vim if.sh

#!/bin/bash

if [ $1 -eq “1” ]
then
echo “banzhang zhen shuai”
elif [ $1 -eq “2” ]
then
echo “cls zhen mei”
fi

[atguigu@hadoop101 datas]$ chmod 777 if.sh
[atguigu@hadoop101 datas]$ ./if.sh 1
banzhang zhen shuai
案列 2 不会
#!/bin/bash
read –p “please input your name:” NAME
#printf ‘%s\n’ $NAME
If [ $NAME = root ]
then
echo “hello ${NAME}, welcome !”
elif [ $NAME = atguigu]
then
echo “hello ${NAME}, welcome !”
else
echo “sorry ”
fi
9.6.2 case语句
1)基本语法:
case 变 量 名 i n " 值 1 " ) 如 果 变 量 的 值 等 于 值 1 , 则 执 行 程 序 1 ; ; " 值 2 " ) 如 果 变 量 的 值 等 于 值 2 , 则 执 行 程 序 2 ; ; … 省 略 其 他 分 支 … ∗ ) 如 果 变 量 的 值 都 不 是 以 上 的 值 , 则 执 行 此 程 序 ; ; E s a c 注 意 事 项 : 1 ) c a s e 行 尾 必 须 为 单 词 “ i n ” , 每 一 个 模 式 匹 配 必 须 以 右 括 号 “ ) ” 结 束 。 2 ) 双 分 号 “ ; ; ” 表 示 命 令 序 列 结 束 , 相 当 于 j a v a 中 的 b r e a k 。 3 ) 最 后 的 “ ∗ ) ” 表 示 默 认 模 式 , 相 当 于 j a v a 中 的 d e f a u l t 。 2 ) 案 例 案 例 实 操 ( 1 ) 输 入 一 个 数 字 , 如 果 是 1 , 则 输 出 b a n z h a n g , 如 果 是 2 , 则 输 出 c l s , 如 果 是 其 它 , 输 出 r e n y a o 。 [ a t g u i g u @ h a d o o p 101 d a t a s ] 变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; Esac 注意事项: 1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。 2)双分号“;;”表示命令序列结束,相当于java中的break。 3)最后的“*)”表示默认模式,相当于java中的default。 2)案例 案例实操 (1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。 [atguigu@hadoop101 datas] in"1"11;;"2"22;;;;Esac1)casein2);;javabreak3javadefault211banzhang2clsrenyao[atguigu@hadoop101datas] touch case.sh
[atguigu@hadoop101 datas]$ vim case.sh

!/bin/bash

case $1 in
“1”)
echo “banzhang”
;;

“2”)
echo “cls”
;;
*)
echo “renyao”
;;
esac

[atguigu@hadoop101 datas]$ chmod 777 case.sh
[atguigu@hadoop101 datas]$ ./case.sh 1
1
案例实操
(2)
case 1 i n s t a r t ) e c h o “ s t a r t i n g ” ; ; s t o p ) e c h o “ s t o p i n g ” ; ; ∗ ) e c h o “ U s a g e : s t a r t ∣ s t o p ” e s a c 9.6.3 f o r 循 环 1 ) 基 本 语 法 1 : f o r 变 量 i n 值 1 值 2 值 3 … d o 程 序 d o n e 3 ) 案 例 : ( 1 ) 打 印 所 有 输 入 参 数 [ a t g u i g u @ h a d o o p 101 d a t a s ] 1 in start) echo “starting” ;; stop) echo “stoping” ;; *) echo “Usage:{start|stop}” esac 9.6.3 for循环 1)基本语法1: for 变量 in 值1 值2 值3… do 程序 done 3)案例: (1)打印所有输入参数 [atguigu@hadoop101 datas] 1instart)echostarting;;stop)echostoping;;)echoUsage:startstopesac9.6.3for11forin123dodone31[atguigu@hadoop101datas] touch for2.sh
[atguigu@hadoop101 datas]$ vim for2.sh

#!/bin/bash
#打印数字

for i in $*
do
echo "ban zhang love $i "
done

[atguigu@hadoop101 datas]$ chmod 777 for2.sh
[atguigu@hadoop101 datas]$ bash for2.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
(2)打印时间
#!/bin/bash
#打印时间

for time in morning noon afternoon evening
do
echo "This time is t i m e ! " d o n e 3 ) 基 本 语 法 2 : f o r ( ( 初 始 值 ; 循 环 控 制 条 件 ; 变 量 变 化 ) ) d o 程 序 d o n e 4 ) 案 例 ( 1 ) 从 1 加 到 100 [ a t g u i g u @ h a d o o p 101 d a t a s ] time!" done 3)基本语法2: for (( 初始值;循环控制条件;变量变化 )) do 程序 done 4)案例 (1)从1加到100 [atguigu@hadoop101 datas] time!"done32for((;;))dodone411100[atguigu@hadoop101datas] touch for1.sh
[atguigu@hadoop101 datas]$ vim for1.sh

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
s= [ [ [s+$i]
done
echo $s

[atguigu@hadoop101 datas]$ chmod 777 for1.sh
[atguigu@hadoop101 datas]$ ./for1.sh
“5050”
#!/bin/bash
#从1加到100

s=0
for (( i=1;i<=100;i=i+1 ))
do
s=$(( s + s+ s+i ))
done
echo "The sum is : s " 比 较 s" 比较 s"*和 @ 区 别 ( a ) @区别 (a) @a*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 2 … 2 … 2n的形式输出所有参数。
[atguigu@hadoop101 datas]$ touch for.sh
[atguigu@hadoop101 datas]$ vim for.sh

#!/bin/bash

for i in $*
do
echo "ban zhang love $i "
done

for j in $@
do
echo “ban zhang love $j”
done

[atguigu@hadoop101 datas]$ bash for.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
(b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 2 … 2 … 2n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “ 2 ” … ” 2”…” 2n”的形式输出所有参数。
[atguigu@hadoop101 datas]$ vim for.sh

#!/bin/bash

for i in "KaTeX parse error: Expected 'EOF', got '#' at position 5: *" #̲*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo “ban zhang love $i”
done

for j in "KaTeX parse error: Expected 'EOF', got '#' at position 5: @" #̲@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo “ban zhang love $j”
done

[atguigu@hadoop101 datas]$ chmod 777 for.sh
[atguigu@hadoop101 datas]$ bash for.sh cls xz bd
ban zhang love cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd

9.6.4 while循环
1)基本语法:
while [ 条件判断式 ]
do
程序
done
2)案例
(1)从1加到100
从1加到100
[atguigu@hadoop101 datas]$ touch while.sh
[atguigu@hadoop101 datas]$ vim while.sh

#!/bin/bash
s=0
i=1
while [ i − l e 100 ] d o s = i -le 100 ] do s= ile100]dos=[ s + s+ s+i]
i= [ [ [i+1]
done

echo $s

[atguigu@hadoop101 datas]$ chmod 777 while.sh
[atguigu@hadoop101 datas]$ ./while.sh
5050

#!/bin/bash
#从1加到100

i=1
s=0
while [ KaTeX parse error: Expected 'EOF', got '#' at position 14: i -le 100 ] #̲如果变量i的值小于等于100,…(( s + s+ s+i ))
i=$(( $i+1 ))
done
echo "The sum is: s " 9.7 r e a d 读 取 控 制 台 输 入 1 ) 基 本 语 法 : r e a d ( 选 项 ) ( 参 数 ) 选 项 : − p : 指 定 读 取 值 时 的 提 示 符 ; − t : 指 定 读 取 值 时 等 待 的 时 间 ( 秒 ) 。 参 数 变 量 : 指 定 读 取 值 的 变 量 名 2 ) 案 例 提 示 7 秒 内 , 读 取 控 制 台 输 入 的 名 称 [ a t g u i g u @ h a d o o p 101 d a t a s ] s" 9.7 read读取控制台输入 1)基本语法: read(选项)(参数) 选项: -p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒)。 参数 变量:指定读取值的变量名 2)案例 提示7秒内,读取控制台输入的名称 [atguigu@hadoop101 datas] s"9.7read1read()()pt27[atguigu@hadoop101datas] touch read.sh
[atguigu@hadoop101 datas]$ vim read.sh

#!/bin/bash

read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

[atguigu@hadoop101 datas]$ ./read.sh
Enter your name in 7 seconds xiaoze
xiaoze

9.8 函数
9.8.1 系统函数
1)basename基本语法
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
2)案例
[atguigu@hadoop102 opt]$ basename /opt/test.txt
test.txt
[atguigu@hadoop102 opt]$ basename /opt/test.txt .txt
test
3)dirname基本语法
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
4)案例
[atguigu@hadoop102 opt]$ dirname /opt/test.txt
/opt
9.8.2 自定义函数
1)基本语法:
[ function ] funname[()]
{
Action;
[return int;]
}

function start() / function start / start()

注意:
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
2)案例
(1)打印出比你输入小的所有数(单参)
#!/bin/bash
function LoopPrint()
{
count=0;
while [ $count -lt $1 ] ;
do
echo $count;
expr ++count;
sleep 1;
done
return 0;
}
read -p "Please input the number: " n;
LoopPrint $n;
(2)多参
#!/bin/bash
function LoopPrint()
{
echo $2
count=0;
while [ $count -lt $1 ];
do
echo $count;
expr ++count;
sleep 1;
done
return 0;
}
read -p "Please input the num1: " n;
read -p "Please input the num2: " m;
LoopPrint $n m ; ( 3 ) 计 算 两 个 输 入 参 数 的 和 [ a t g u i g u @ h a d o o p 101 d a t a s ] m; (3)计算两个输入参数的和 [atguigu@hadoop101 datas] m;3[atguigu@hadoop101datas] touch fun.sh
[atguigu@hadoop101 datas]$ vim fun.sh

#!/bin/bash
function sum()
{
s=0
s=$[ $1 + 2 ] e c h o " 2 ] echo " 2]echo"s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

[atguigu@hadoop101 datas]$ chmod 777 fun.sh
[atguigu@hadoop101 datas]$ ./fun.sh
Please input the number1: 2
Please input the number2: 5
7

9.9 Shell 工具 (重点)

9.9.1 cut
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1.基本用法
cut [选项参数] filename
说明:默认分隔符是制表符
2.选项参数说明
表1-55
选项参数 功能
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列
3.案例实操
(0)数据准备
[atguigu@hadoop101 datas]$ touch cut.txt
[atguigu@hadoop101 datas]$ vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
(1)切割cut.txt第一列
[atguigu@hadoop101 datas]$ cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le
(2)切割cut.txt第二、三列
[atguigu@hadoop101 datas]$ cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le
(3)在cut.txt文件中切割出guan
[atguigu@hadoop101 datas]$ cat cut.txt | grep “guan” | cut -d " " -f 1
guan
(4)选取系统PATH变量值,第2个“:”开始后的所有路径:
[atguigu@hadoop101 datas]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/atguigu/bin

[atguigu@hadoop102 datas]$ echo P A T H ∣ c u t − d : − f 2 − / u s r / l o c a l / b i n : / b i n : / u s r / b i n : / u s r / l o c a l / s b i n : / u s r / s b i n : / s b i n : / h o m e / a t g u i g u / b i n ( 5 ) 切 割 i f c o n f i g 后 打 印 的 I P 地 址 [ a t g u i g u @ h a d o o p 101 d a t a s ] PATH | cut -d: -f 2- /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/atguigu/bin (5)切割ifconfig 后打印的IP地址 [atguigu@hadoop101 datas] PATHcutd:f2/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/atguigu/bin5ifconfigIP[atguigu@hadoop101datas] ifconfig eth0 | grep “inet addr” | cut -d: -f 2 | cut -d" " -f 1
192.168.1.102
9.9.2 sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
1.基本用法
sed [选项参数] ‘command’ filename
2.选项参数说明
表1-56
选项参数 功能
-e 直接在指令列模式上进行sed的动作编辑。
3.命令功能描述
表1-57
命令 功能描述
a 新增,a的后面可以接字串,在下一行出现
d 删除
s 查找并替换
4.案例实操
(0)数据准备
[atguigu@hadoop102 datas]$ touch sed.txt
[atguigu@hadoop102 datas]$ vim sed.txt
dong shen
guan zhen
wo wo
lai lai

le le
(1)将“mei nv”这个单词插入到sed.txt第二行下,打印。
[atguigu@hadoop102 datas]$ sed ‘2a mei nv’ sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai

le le
[atguigu@hadoop102 datas]$ cat sed.txt
dong shen
guan zhen
wo wo
lai lai

le le
注意:文件并没有改变
(2)删除sed.txt文件所有包含wo的行
[atguigu@hadoop102 datas]$ sed ‘/wo/d’ sed.txt
dong shen
guan zhen
lai lai

le le
(3)将sed.txt文件中wo替换为ni
[atguigu@hadoop102 datas]$ sed ‘s/wo/ni/g’ sed.txt
dong shen
guan zhen
ni ni
lai lai

le le
注意:‘g’表示global,全部替换,不加的话只会替换第一个,
(4)将sed.txt文件中的第二行删除并将wo替换为ni
[atguigu@hadoop102 datas]$ sed -e ‘2d’ -e ‘s/wo/ni/g’ sed.txt
dong shen
ni ni
lai lai

le le
9.9.3 awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
1.基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
2.选项参数说明
表1-55
选项参数 功能
-F 指定输入文件折分隔符
-v 赋值一个用户定义变量
3.案例实操
(0)数据准备
[atguigu@hadoop102 datas]$ sudo cp /etc/passwd ./
(1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
[atguigu@hadoop102 datas]$ awk -F : '/^root/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 7}̲' passwd /bin/… awk -F : '/^root/{print $1","KaTeX parse error: Expected 'EOF', got '}' at position 2: 7}̲' passwd root,… awk -F : 'BEGIN{print “user, shell”} {print $1","KaTeX parse error: Expected 'EOF', got '}' at position 2: 7}̲ END{print "dah… awk -v i=1 -F: '{print KaTeX parse error: Expected 'EOF', got '}' at position 4: 3+i}̲' passwd 1 2 3 … awk -F: ‘{print “filename:” FILENAME “, linenumber:” NR “,columns:” NF}’ passwd
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
(2)切割IP
[atguigu@hadoop102 datas]$ ifconfig eth0 | grep “inet addr” | awk -F: ‘{print $2}’ | awk -F " " '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' 192.168.1.10… awk '/^ / p r i n t N R ′ s e d . t x t 59.9.4 s o r t s o r t 命 令 是 在 L i n u x 里 非 常 有 用 , 它 将 文 件 进 行 排 序 , 并 将 排 序 结 果 标 准 输 出 。 1. 基 本 语 法 s o r t ( 选 项 ) ( 参 数 ) 表 1 − 57 选 项 说 明 − n 依 照 数 值 的 大 小 排 序 − r 以 相 反 的 顺 序 来 排 序 − t 设 置 排 序 时 所 用 的 分 隔 字 符 − k 指 定 需 要 排 序 的 列 参 数 : 指 定 待 排 序 的 文 件 列 表 2. 案 例 实 操 ( 0 ) 数 据 准 备 [ a t g u i g u @ h a d o o p 102 d a t a s ] /{print NR}' sed.txt 5 9.9.4 sort sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。 1.基本语法 sort(选项)(参数) 表1-57 选项 说明 -n 依照数值的大小排序 -r 以相反的顺序来排序 -t 设置排序时所用的分隔字符 -k 指定需要排序的列 参数:指定待排序的文件列表 2. 案例实操 (0)数据准备 [atguigu@hadoop102 datas] /printNRsed.txt59.9.4sortsortLinux1.sort()()157nrtk2.0[atguigu@hadoop102datas] touch sort.sh
[atguigu@hadoop102 datas]$ vim sort.sh
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
(1)按照“:”分割后的第三列倒序排序。
[atguigu@hadoop102 datas]$ sort -t : -nrk 3 sort.sh
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6
十、yum仓库配置
10.1 概述
YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
在Linux上使用源码的方式安装软件非常麻烦,使用yum可以简化安装的过程。

10.2 yum的常用命令
1)基本语法:
yum install -y httpd (功能描述:安装httpd并确认安装)
yum list (功能描述:列出所有可用的package和package组)
yum clean all (功能描述:清除所有缓冲数据)
yum deplist httpd (功能描述:列出一个包所有依赖的包)
yum remove httpd (功能描述:删除httpd)
1.基本语法
yum [选项] [参数]
2.选项说明
表1-52
选项 功能
-y 对所有提问都回答“yes”
3.参数说明
表1-53
参数 功能
install 安装rpm软件包
update 更新rpm软件包
check-update 检查是否有可用的更新rpm软件包
remove 删除指定的rpm软件包
list 显示软件包信息
clean 清理yum过期的缓存
deplist 显示yum软件包的所有依赖关系

2)案例实操
第一步 先卸载以前安装的火狐浏览器

第二步 联网使用YUM安装火狐

10.3 关联网络yum源
默认的系统YUM源,需要连接国外apache网站,网速比较慢,可以修改关联的网络YUM源为国内镜像的网站,比如网易163。

1)前期文件准备
(1)前提条件linux系统必须可以联网
(2)在Linux环境环境中访问该网络地址:http://mirrors.163.com/.help/centos.html,在使用说明中点击CentOS6->再点击保存

(3)查看文件保存的位置

在打开的终端中输入如下命令,就可以找到文件的保存位置。
[atguigu@hadoop101 下载]$ pwd
/home/atguigu/下载
2)替换本地yum文件
(1)把下载的文件移动到/etc/yum.repos.d/目录
[root@hadoop101 下载]# mv CentOS6-Base-163.repo /etc/yum.repos.d/
(2)进入到/etc/yum.repos.d/目录
[root@hadoop101 yum.repos.d]# pwd
/etc/yum.repos.d
(3)用CentOS6-Base-163.repo替换CentOS-Base.rep
[root@hadoop101 yum.repos.d]# mv CentOS6-Base-163.repo CentOS-Base.rep
3)安装命令
(1)[root@hadoop101 yum.repos.d]#yum clean all
(2)[root@hadoop101 yum.repos.d]#yum makecache
yum makecache就是把服务器的包信息下载到本地电脑缓存起来
4.测试
[root@hadoop101 yum.repos.d]#yum list | grep firefox
[root@hadoop101 ~]#yum -y install firefox.x86_64

10.4 制作本地yum源
1)为什么要制作本地YUM源
YUM源虽然可以简化我们在Linux上安装软件的过程,但是生成环境通常无法上网,不能连接外网的YUM源,说以接就无法使用yum命令安装软件了。为了在内网中也可以使用yum安装相关的软件,就要配置yum源。
YUM源其实就是一个保存了多个RPM包的服务器,可以通过http的方式来检索、下载并安装相关的RPM包

2)制作本地YUM源
(1)准备一台Linux服务器,版本CentOS-6.8-x86_64-bin-DVD1.iso
(2)配置好这台服务器的IP地址
(3)将CentOS-6.8-x86_64-bin-DVD1.iso镜像挂载到/mnt/cdrom目录
[root@hadoop101 /]# mkdir /mnt/cdrom
[root@hadoop101 /]# mount -t iso9660 /dev/cdrom /mnt/cdrom
(4)修改本机上的YUM源配置文件,将源指向自己
备份原有的YUM源的配置文件
[root@hadoop101 /]# cd /etc/yum.repos.d/
[root@hadoop101 yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.bak
编辑CentOS-Base.repo文件
[root@hadoop101 yum.repos.d]# vi CentOS-Base.repo
[base]
name=CentOS-Local
baseurl=file:///var/iso
gpgcheck=1
enabled=1 #增加改行,使能
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
添加上面内容保存退出
(6)清除YUM缓冲
[root@hadoop101 yum.repos.d]# yum clean all
(7)列出可用的YUM源
[root@hadoop101 yum.repos.d]# yum repolist
(8)安装相应的软件
[root@hadoop101 yum.repos.d]#yum install -y httpd
(9)开启httpd使用浏览器访问http://192.168.11.101:80(如果访问不通,检查防火墙是否开启了80端口或关闭防火墙)
[root@hadoop101 yum.repos.d]#service httpd start
(10)将YUM源配置到httpd(Apache Server)中,其他的服务器即可通过网络访问这个内网中的YUM源了
[root@hadoop101 yum.repos.d]#cp -r /mnt/cdrom/ /var/www/html/CentOS
(11)取消先前挂载的镜像
[root@hadoop101 yum.repos.d]#umount /mnt/cdrom
(12)在浏览器中访问http://192.168.11.101/CentOS/

(13)让其他需要安装RPM包的服务器指向这个YUM源,准备一台新的服务器,备份或删除原有的YUM源配置文件
备份原有的YUM源的配置文件
[root@hadoop102 /]#cd /etc/yum.repos.d/
[root@hadoop102 yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.bak
编辑CentOS-Base.repo文件
[root@hadoop102 yum.repos.d]# vi CentOS-Base.repo
[base]
name=CentOS-hadoop101
baseurl=http://192.168.11.101/CentOS
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
添加上面内容保存退出
(14)在这台新的服务器上执行YUM的命令
[root@hadoop102 yum.repos.d]# yum clean all
[root@hadoop102 yum.repos.d]# yum repolist

十一、其他资料

1、Linux的图解说明

2、Linux-韩顺平 (没用了,已经总结到文档里了)

3、Shell-大海哥

4、Linux作业

5、Linux企业真实面试题
百度&考满分
问题:Linux常用命令
参考答案:find、df、tar、ps、top、netstat等。(尽量说一些高级命令)
瓜子二手车
问题:Linux查看内存、磁盘存储、io 读写、端口占用、进程等命令
答案:
1、查看内存:top
2、查看磁盘存储情况:df -h
3、查看磁盘IO读写情况:iotop(需要安装一下:yum install iotop)、iotop -o(直接查看输出比较高的磁盘读写程序)
4、查看端口占用情况:netstat -tunlp | grep 端口号
5、查看进程:ps aux
6 shell企业面试题
京东
问题1:使用Linux命令查询file1中空行所在的行号
答案:
[atguigu@hadoop102 datas]$ awk '/^ / p r i n t N R ′ s e d . t x t 5 问 题 2 : 有 文 件 c h e n g j i . t x t 内 容 如 下 : 张 三 40 李 四 50 王 五 60 使 用 L i n u x 命 令 计 算 第 二 列 的 和 并 输 出 [ a t g u i g u @ h a d o o p 102 d a t a s ] /{print NR}' sed.txt 5 问题2:有文件chengji.txt内容如下: 张三 40 李四 50 王五 60 使用Linux命令计算第二列的和并输出 [atguigu@hadoop102 datas] /printNRsed.txt52chengji.txt:405060使Linux[atguigu@hadoop102datas] cat chengji.txt | awk -F " " ‘{sum+=$2} END{print sum}’
150
搜狐&和讯网
问题1:Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?
#!/bin/bash

if [ -f file.txt ]; then
echo “文件存在!”
else
echo “文件不存在!”
fi
新浪
问题1:用shell写一个脚本,对文本中无序的一列数字排序
[root@CentOS6-2 ~]# cat test.txt
9
8
7
6
5
4
3
2
10
1
[root@CentOS6-2 ~]# sort -n test.txt|awk '{a+=$0;print KaTeX parse error: Expected 'EOF', got '}' at position 2: 0}̲END{print "SUM=… grep -r “shen” /home | cut -d “:” -f 1
/home/atguigu/datas/sed.txt
/home/atguigu/datas/cut.txt

你可能感兴趣的:(大数据学习笔记)