Spring
MyBatis
Tomcat
MySQL
JDK
……
Linux是一款类Unix操作系统,它的出现离不开GNU自由软件运动中诞生的开发环境和编译器,又反过来极大的推动了GNU自由软件运动,让崇尚自由软件精神的先驱们不必继续局限在Unix系统上进行开发。Linux出现后,sendmail, wu-ftp, apache等团队纷纷启动了基于Linux系统的开发计划。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R3Ikflss-1599651340393)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml22700\wps1.jpg)]
虚拟团队
参与开发、维护的团队成员不必身在同一个办公室,在世界任何一个角落都可以通过互联网对开源产品进行改进。
量身定制
自由软件允许使用者对软件产品进行修改,便于使用者最大限度满足自身需要。
广泛受益
让更多的人能够享受到开源软件提供的服务。
稳定高效
由于开源软件产品吸纳了全世界所有相关领域的最顶尖程序员一起来进行维护和排错,所以开源软件漏洞更少,效率更高。
开源不等于免费
开源指的是开放源代码,但编译得到的二进制可执行程序可能是收费的;或者产品免费,服务收费;再或者开发定制功能收费。所以,开源项目并不影响商业运作。
硬件相关
早期的Unix系统都是针对专门的硬件系统开发的,不同厂商都是为自己的服务器开发专门的Unix操作系统。
版权受限
出于商业等方面因素的考虑,AT&T在1979年发行第七版Unix系统时收回了Unix的版权。
在Unix收回版权的背景下,出于学院教学的需要,荷兰阿姆斯特丹的Vrije大学计算机科学系的Andrew S. Tanenbaum教授开发了一个“类Unix”系统:Minix。之所以称为类Unix,是由于Tanenbaum教授为了避免版权纠纷在开发过程中刻意完全不看Unix本身代码,但同时要做到在使用时让用户的操作方式和使用Unix时一样。
Minix最有名的学生用户是Linus Torvalds,他在芬兰的赫尔辛基大学用Minix操作平台建立了一个新的操作系统的内核,他把它叫做Linux。
Linux是 Linus Torvalds受到Minix的影响而开发的(Linus Torvalds不喜欢他的386电脑上的MS-DOS操作系统,安装了Minix,并以它为样本开发了原始的Linux内核)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOJmn0pi-1599651340398)(img\wps2.jpg)]
“Talk is cheap,show me the code!”
Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pfnxiP7O-1599651340400)(img\wps3.jpg)]
Linux系统的优势主要体现在服务器端应用方面,在PC端还是Windows系统对用户操作体验和应用程序的支持更好。具体体现是:
性能强劲,安全稳定
Linux本来就是基于Unix概念而发展出来的操作系统,当然也继承了Unix稳定高效的特点。使用Linux系统的主机连续工作1年以上不死机、不重启是非常常见的。所以很多电影、动画中的特效制作这样需要强大运算能力的工作都是运行在Linux系统之上。
可定制
如果你对Linux足够了解,完全可以使用Linux内核搭配需要的组件构成一个定制版系统,甚至你可以修改Linux源码进行深度定制
免费或少许费用
学习Linux可以免费使用Linux的各种发行版,在商业用途中往往也只是支付很少的费用即可
硬件配置要求低
Linux内核只有几KB大小,仅运行内核的话需要的系统开销很小,以命令行方式操作Linux也一样。以图形化界面方式运行Linux需要的资源也比Windows更少。
嵌入移动设备
由于Linux只需要很少的资源就能够驱动所有硬件设备工作,所以非常适合嵌入到手机等移动设备中,例如现在我们使用的Android系统就是以Linux为核心的。
Torvalds和他的虚拟团队的工作仅仅是开发了Linux内核以及附带的一些工具,尚不能作为一个完整的可以交给终端用户使用的操作系统。为了方便用户使用,很多的商业公司或非营利团体,就将Linux 内核(包括工具)与可运行的软件整合起来,再加上系统的安装工具。这个『内核+软件+工具』的完全可安装的整体,我们称之为Linux distribution,这就是Linux的发行版,港台腔叫发行套件。这是Linux这样的开放式系统和Windows、Mac等这些封闭式系统的一个显著差别。
初学Linux通常会选择CentOS,这其实是RedHat收费后去掉收费功能而发布的一个免费的社区版。
主要的Linux发行版有:
●Red Hat: http://www.redhat.com
●Fedora: http://fedoraproject.org/
●Debian: http://www.debian.org/
●Ubuntu: http://www.ubuntu.com/
●CentOS: http://www.centos.org/
我们可以从网易开源镜像站获取CentOS系统的镜像文件
http://mirrors.163.com/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcEJxQKo-1599651340403)(img\wps4.jpg)]
两个概念: 物理机和虚拟机。
创建虚拟机需要一台支持虚拟化的物理机、虚拟化软件(VMWare)。步骤大体分两步,第一步使用虚拟化软件(VMWara)虚拟出一台虚拟机,然后再为这台虚拟机安装操作系统!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YQp4vwmb-1599651340404)(img\wps5.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Mqo5U2D-1599651340406)(img/image-20200905203308171.png)]
远程连接工具通常基于SSH协议,SSH(Secure Shell)协议是一种基于密钥的安全性很好的协议,将发送的数据加密。因此虚拟机需要开启SSH协议的服务,即sshd服务。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opOGLfyR-1599651340407)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml22700\wps8.jpg)]
如果没有运行,则执行service sshd start,开启服务即可!
Linux系统中一切皆文件。
在Linux系统中任何东西都是以文件形式来存储的。这其中不仅包括我们熟知的文本文件、可执行文件等等,还包括硬件设备、虚拟设备、网络连接等等,甚至连目录其实都是一种特殊的文件。
在Windows中,每一个盘符下是一个独立的文件系统,硬盘有多少个分区就有多少个文件系统。而在Linux系统中不管创建了多少个硬盘分区都只有一个文件系统。整个文件系统的根目录是“/”,从“/”根目录出发理论上可以找到Linux系统中的所有目录和文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fyQvbQMd-1599651340408)(img/image-20200905203456261.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-higGhL3a-1599651340409)(img/image-20200905203555663.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3vgay4A-1599651340410)(img/image-20200905203648215.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0eeik0i-1599651340411)(img/image-20200905203759406.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5di2b2PJ-1599651340412)(img/image-20200905203915715.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HLpEkVJT-1599651340413)(img/image-20200905204009357.png)]
u 绝对路径:从“/”根目录开始逐层查找文件和目录。
/etc/sysconfig/network-scripts
/tmp/vmware-root/vmware-db.pl.2267
u 相对路径:以当前目录或上一级目录为基准逐层查找文件和目录
当前目录:“./”
当前目录的上一级目录:“…/”
①作用:Linux系统为每一个用户提供了一个专属的目录用来存放它自己的文件内容,在Linux中使用“~”代表用户的家目录
②root用户:家目录是/root目录。
③普通用户:在创建后会在/home目录下创建与用户名同名的目录。例如:用户tom的家目录是/home/tom
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSraf6Ko-1599651340414)(img\wps11.jpg)]
Linux系统环境下的一款非常重要的文本编辑工具,我们在Linux环境下几乎所有的文本文件编辑工作都是靠它。
可能你还听说过VI,嗯,VIM是VI的升级版。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oBGUXN7F-1599651340415)(img/image-20200905204404437.png)]
以vi打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
按键 | 功能描述 |
---|---|
yy | 复制光标当前一行 |
y数字y | 复制一段(从当前行复制n行) |
p | 箭头移动到目的行粘贴 |
u | 撤销上一步 |
dd | 删除光标当前行 |
d数字d | 删除光标(含)后多少行 |
x | 删除一个字母,相当于del |
X | 删除一个字母,相当于Backspace |
yw | 复制一个词 |
dw | 删除一个词 |
shift+^ | 移动到行头 |
shift+$ | 移动到行尾 |
1+shift+g | 移动到页头,数字 |
shift+g | 移动到页尾 |
数字N+shift+g | 移动到目标行 |
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。
注意了!通常在Linux中,按下这些按键时,在画面的左下方会出现『INSERT或 REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
按键 | 功能 |
---|---|
i | 当前光标前 |
a | 当前光标后 |
o | 当前光标行的下一行 |
I | 光标所在行最前 |
A | 光标所在行最后 |
O | 当前光标行的上一行 |
s | 删除当前字符并进入编辑 |
S | 删除整行并进入编辑 |
在一般模式当中,输入『 : / ?』3个中的任何一个按钮,就可以将光标移动到最底下那一行。
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的!
命令 | 功能 |
---|---|
:w | 保存 |
:q | 退出 |
:! | 强制执行 |
/要查找的词 | n 查找下一个,N 往上查找 |
? 要查找的词 | n是查找上一个,N是往下查找 |
:set nu | 显示行号 |
:set nonu | 关闭行号 |
:%s/str1/str2/g | 将str1批量替换为str2 |
注意:
①其实强制保存时,还要看是否具备权限,如果没有权限加了强制也不一定能保存进去
②如果有未保存的修改则无法退出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pzJ8WtNB-1599651340416)(img\wps12.jpg)]
1)查看虚拟网络编辑器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6d94vsK-1599651340417)(img\wps13.jpg)]
2)修改ip地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Xpe3Zie-1599651340418)(img\wps14.jpg)]
3)查看网关
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZkHk3Zd-1599651340419)(img\wps15.jpg)]
4)查看windows环境的中VMnet8网络配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KwaQbfKs-1599651340420)(img\wps16.jpg)]
ifconfig :network interfaces configuring网络接口配置
1)基本语法:
ifconfig (功能描述:显示所有网络接口的配置信息)
2)案例实操:
(1)查看当前网络ip
[root@hadoop100 桌面]# ifconfig
1)基本语法:
ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)
2)案例实操:
(1)测试当前服务器是否可以连接百度
[root@hadoop100 桌面]# ping www.baidu.com
1)修改IP地址
[root@hadoop100 桌面]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cE05k2VA-1599651340421)(img\wps17.jpg)]
以下标红的项必须修改,有值的按照下面的值修改,没有该项的要增加。
DEVICE=eth0 #接口名(设备,网卡)HWADDR=00:0C:2x:6x:0x:xx #MAC地址 TYPE=Ethernet #网络类型(通常是Ethemet)UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44 #随机id#系统启动的时候网络接口是否有效(yes/no)ONBOOT=yes # IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)BOOTPROTO=static #IP地址IPADDR=192.168.1.101 #网关 GATEWAY=192.168.1.2 #域名解析器DNS1=192.168.1.2
修改后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-el7oFUop-1599651340422)(img\wps18.jpg)]
:wq 保存退出
2)执行service network restart
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eEm9YCTJ-1599651340422)(img\wps19.jpg)]
3)如果报错,reboot,重启虚拟机
1)基本语法:
hostname (功能描述:查看当前服务器的主机名称)
2)案例实操:
(1)查看当前服务器主机名称
[root@hadoop100 桌面]# hostname
1)修改linux的主机映射文件(hosts文件)
(1)进入Linux系统查看本机的主机名。通过hostname命令查看
[root@hadoop100 桌面]# hostname
hadoop100
(2)如果感觉此主机名不合适,我们可以进行修改。通过编辑/etc/sysconfig/network文件
[root@hadoop100 桌面]# vi /etc/sysconfig/network
文件中内容
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME= hadoop100
注意:主机名称不要有“_”下划线
(3)打开此文件后,可以看到主机名。修改此主机名为我们想要修改的主机名hadoop100。
(4)保存退出。
(5)打开/etc/hosts
[root@hadoop100 桌面]# vim /etc/hosts
添加如下内容
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108
(6)并重启设备,重启后,查看主机名,已经修改成功
2)修改window7的主机映射文件(hosts文件)
(1)进入C:\Windows\System32\drivers\etc路径
(2)打开hosts文件并添加如下内容
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108
1)基本语法:
service 服务名 start (功能描述:开启服务)
service 服务名 stop (功能描述:关闭服务)
service 服务名 restart (功能描述:重新启动服务)
service 服务名 status (功能描述:查看服务状态)
2)经验技巧
查看服务的方法:/etc/init.d/服务名
[root@hadoop100 init.d]# pwd
/etc/init.d
[root@hadoop100 init.d]# ls -al
3)案例实操
(1)查看网络服务的状态
[root@hadoop100 桌面]#service network status
(2)停止网络服务
[root@hadoop100 桌面]#service network stop
(3)启动网络服务
[root@hadoop100 桌面]#service network start
(4)重启网络服务
[root@hadoop100 桌面]#service network restart
(5)查看系统中所有的后台服务
[root@hadoop100 桌面]#service --status-all
1)基本语法:
chkconfig (功能描述:查看所有服务器自启配置)
chkconfig 服务名 off (功能描述:关掉指定服务的自动启动)
chkconfig 服务名 on (功能描述:开启指定服务的自动启动)
chkconfig 服务名 --list (功能描述:查看服务开机启动状态)
2)案例实操
(1)关闭iptables服务的自动启动
[root@hadoop100 桌面]#chkconfig iptables off
(2)开启iptables服务的自动启动
[root@hadoop100 桌面]#chkconfig iptables on
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I9r3WQzh-1599651340423)(img/image-20200905204528905.png)]
1)临时关闭防火墙:
(1)查看防火墙状态
[root@hadoop100桌面]# service iptables status
(2)临时关闭防火墙
[root@hadoop100桌面]# service iptables stop
2)开机启动时关闭防火墙
(1)查看防火墙开机启动状态
[root@hadoop100桌面]#chkconfig iptables --list
(2)设置开机时关闭防火墙
[root@hadoop100桌面]#chkconfig iptables off
在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
正确的关机流程为:sync > shutdown > reboot > halt
1)基本语法:
(1)sync (功能描述:将数据由内存同步到硬盘中)
(2)halt (功能描述:关闭系统,等同于shutdown -h now 和 poweroff)
(3)reboot (功能描述:就是重启,等同于 shutdown -r now)
(4)shutdown [选项] 时间
选项 | 功能 |
---|---|
*-h* | -h=halt关机 |
-r | -r=reboot重启 |
参数 | 功能 |
---|---|
now | 立刻关机 |
时间 | 等待多久后关机(时间单位是分钟)。 |
2)经验技巧:
Linux系统中为了提高磁盘的读写效率,对磁盘采取了 “预读迟写”操作方式。当用户保存文件时,Linux核心并不一定立即将保存数据写入物理磁盘中,而是将数据保存在缓冲区中,等缓冲区满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率。但是,也带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导致数据丢失。使用sync指令可以立即将缓冲区的数据写入磁盘。
3)案例实操:
(1)将数据由内存同步到硬盘中
[root@hadoop100桌面]#sync
(2)重启
[root@hadoop100桌面]# reboot
(3)关机
[root@hadoop100桌面]#halt
(4)计算机将在1分钟后关机,并且会显示在登录用户的当前屏幕中
[root@hadoop100桌面]#shutdown -h 1 ‘This server will shutdown after 1 mins’
(5)立马关机(等同于 halt)
[root@hadoop100桌面]# shutdown -h now
(6)系统立马重启(等同于 reboot)
[root@hadoop100桌面]# shutdown -r now
①关闭要被克隆的虚拟机
②找到克隆选项
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yj10mFCK-1599651340424)(img\wps21.jpg)]
③欢迎页面点击下一步
④克隆虚拟机,克隆自虚拟机的当前状态后,点击下一步
⑤设置创建完整克隆
⑥设置克隆的虚拟机名称和存储位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OROnEP7P-1599651340425)(img\wps22.jpg)]
⑦等待正在克隆
⑧点击关闭,完成克隆
①修改克隆后虚拟机的ip
[root@hadoop101 /]#vim /etc/udev/rules.d/70-persistent-net.rules
进入如下页面,删除eth0该行;将eth1修改为eth0,同时复制物理ip地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GAwnlLIo-1599651340425)(img\wps23.jpg)]
10)修改IP地址
[root@hadoop101 /]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0文件说明:
DEVICE=eth0 #接口名(设备,网卡)
BOOTPROTO=none
# IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
BROADCAST=192.168.1.255 #广播地址
HWADDR=00:0C:2x:6x:0x:xx #MAC地址
IPADDR=192.168.1.23 #IP地址
NETMASK=255.255.255.0 # 网络掩码
NETWORK=192.168.1.0 #网络地址
ONBOOT=yes #系统启动的时候网络接口是否有效(yes/no)
TYPE=Ethernet #网络类型(通常是Ethemet)
(1)把复制的物理ip地址更新
HWADDR=00:0C:2x:6x:0x:xx #MAC地址
(2)修改成你想要的ip
IPADDR=192.168.1.101 #IP地址
11)修改主机名称
详见5.3。
12)重新启动服务器
1)基本语法:
man [命令或配置文件] (功能描述:获得帮助信息)
2)显示说明
信息 | 功能 |
---|---|
NAME | 命令的名称和单行描述 |
SYNOPSIS | 怎样使用命令 |
DESCRIPTION | 命令功能的深入讨论 |
EXAMPLES | 怎样使用命令的例子 |
SEE ALSO | 相关主题(通常是手册页) |
3)案例实操
(1)查看ls命令的帮助信息
[root@hadoop101 ~]# man ls
1)基本语法:
help 命令 (功能描述:获得shell内置命令的帮助信息)
2)案例实操:
(1)查看cd命令的帮助信息
[root@hadoop101 ~]# help cd
常用快捷键 | 功能 |
---|---|
ctrl + c | 停止进程 |
ctrl+l | 清屏;彻底清屏是:reset |
q | 退出 |
善于用tab键 | 提示(更重要的是可以防止敲错) |
上下键 | 查找执行过的命令 |
ctrl +alt | linux和Windows之间切换 |
pwd:print working directory 打印工作目录
1)基本语法:
pwd (功能描述:显示当前工作目录的绝对路径)
2)案例实操
(1)显示当前工作目录的绝对路径
[root@hadoop101 ~]# pwd
/root
ls:list 列出目录内容
1)基本语法:
ls [选项] [目录或是文件]
2)选项说明:
选项 | 功能 |
---|---|
-a | 全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用) |
-l | 长数据串列出,包含文件的属性与权限等等数据;(常用) |
3)显示说明:
每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小用byte来表示 建立或最近修改的时间 名字
4)案例实操
(1)查看当前目录的所有内容信息
[qs@hadoop101 ~]$ ls -al
总用量 44
drwx------. 5 qs qs 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 qs qs 34 5月 27 14:20 test.txt
cd:Change Directory切换路径
1)基本语法:
cd [参数]
2)参数说明
参数 | 功能 |
---|---|
cd 绝对路径 | 切换路径 |
cd相对路径 | 切换路径 |
cd ~或者cd | 回到自己的家目录 |
cd - | 回到上一次所在目录 |
cd … | 回到当前目录的上一级目录 |
cd -P | 跳转到实际物理路径,而非快捷方式路径 |
3)案例实操
(1)使用绝对路径切换到root目录
[root@hadoop101 ~]# cd /root/
(2)使用相对路径切换到“公共的”目录
[root@hadoop101 ~]# cd 公共的/
(3)表示回到自己的家目录,亦即是 /root 这个目录
[root@hadoop101 公共的]# cd ~
(4)cd- 回到上一次所在目录
[root@hadoop101 ~]# cd -
(5)表示回到当前目录的上一级目录,亦即是 “/root/公共的”的上一级目录的意思;
[root@hadoop101 公共的]# cd …
mkdir:Make directory 建立目录
1)基本语法:
mkdir [选项] 要创建的目录
2)选项说明:
选项 | 功能 |
---|---|
-p | 创建多层目录 |
3)案例实操
(1)创建一个目录
[root@hadoop101 ~]# mkdir xiyou
[root@hadoop101 ~]# mkdir xiyou/mingjie
(2)创建一个多级目录
[root@hadoop101 ~]# mkdir -p xiyou/dssz/meihouwang
rmdir:Remove directory 移动目录
1)基本语法:
rmdir 要删除的空目ll录
2)案例实操
(1)删除一个空的文件夹
[root@hadoop101 ~]# rmdir xiyou/dssz/meihouwang
1)基本语法:
touch 文件名称
2)案例实操
[root@hadoop101 ~]# touch xiyou/dssz/sunwukong.txt
1)基本语法:
cp [选项] source dest (功能描述:复制source文件到dest)
2)选项说明
选项 | 功能 |
---|---|
-r | 递归复制整个文件夹 |
3)参数说明
参数 | 功能 |
---|---|
source | 源文件 |
dest | 目标文件 |
4)经验技巧
强制覆盖不提示的方法:\cp
5)案例实操
(1)复制文件
[root@hadoop101 ~]# cp xiyou/dssz/suwukong.txt xiyou/mingjie/
(2)递归复制整个文件夹
[root@hadoop101 ~]# cp -r xiyou/dssz/ ./
1)基本语法
rm [选项] deleteFile (功能描述:递归删除目录中所有内容)
2)选项说明foumo
选项 | 功能 |
---|---|
-r | 递归删除目录中所有内容 |
-f | 强制执行删除操作,而不提示用于进行确认。 |
-v | 显示指令的详细执行过程 |
3)案例实操
(1)删除目录中的内容
[root@hadoop101 ~]# rm xiyou/mingjie/sunwukong.txt
(1)递归删除目录中所有内容
[root@hadoop101 ~]# rm -rf dssz/
1)基本语法:
(1)mv oldNameFile newNameFile (功能描述:重命名)
(2)mv /temp/movefile /targetFolder (功能描述:移动文件)
2)案例实操:
(1)重命名
[root@hadoop101 ~]# mv xiyou/dssz/suwukong.txt xiyou/dssz/houge.txt
(2)移动文件
[root@hadoop101 ~]# mv xiyou/dssz/houge.txt ./
查看文件内容,从第一行开始显示。
1)基本语法
cat [选项] 要查看的文件
2)选项说明
选项 | 功能描述 |
---|---|
-n | 显示所有行的行号,包括空行。 |
3)经验技巧:
一般查看比较小的文件,一屏幕能显示全的。
4)案例实操
(1)查看文件内容并显示行号
[qs@hadoop101 ~]$ cat -n houge.txt
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明。
1)基本语法:
more 要查看的文件
2)操作说明
操作 | 功能说明 |
---|---|
空白键 (space) | 代表向下翻一页; |
Enter | 代表向下翻『一行』; |
q | 代表立刻离开 more ,不再显示该文件内容。 |
Ctrl+f | 向下滚动一屏 |
Ctrl+b | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
3)案例实操
(1)采用more查看文件
[root@hadoop101 ~]# more smartd.conf
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
1)基本语法:
less 要查看的文件
2)操作说明
操作 | 功能说明 |
---|---|
空白键 | 向下翻动一页; |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页; |
/字串 | 向下搜寻『字串』的功能;n:向下查找;N:向上查找; |
?字串 | 向上搜寻『字串』的功能;n:向上查找;N:向下查找; |
q | 离开 less 这个程序; |
3)经验技巧
用SecureCRT时[pagedown]和[pageup]可能会出现无法识别的问题。
4)案例实操
(1)采用less查看文件
[root@hadoop101 ~]# less smartd.conf
1)echo输出内容到控制台
(1)基本语法:
echo [选项] [输出内容]
选项:
-e: 支持反斜线控制的字符转换
控制字符 | 作 用 |
---|---|
\ | 输出\本身 |
\n | 换行符 |
\t | 制表符,也就是Tab键 |
(2)案例实操
[qs@hadoop101 ~]$ echo “hello\tworld”
hello\tworld
[qs@hadoop101 ~]$ echo -e “hello\tworld”
hello world
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容。
1)基本语法
head 文件 (功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)
2)选项说明
选项 | 功能 |
---|---|
-n<行数> | 指定显示头部内容的行数 |
3)案例实操
(1)查看文件的头2行
[root@hadoop101 ~]# head -n 2 smartd.conf
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容。
1)基本语法tai
(1)tail 文件 (功能描述:查看文件头10行内容)
(2)tail -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)
(3)tail -f 文件 (功能描述:实时追踪该文档的所有更新)
2)选项说明
选项 | 功能 |
---|---|
-n<行数> | 输出文件尾部n行内容 |
-f | 显示文件最新追加的内容,监视文件变化 |
3)案例实操
(1)查看文件头1行内容
[root@hadoop101 ~]# tail -n 1 smartd.conf
(2)实时追踪该档的所有更新
[root@hadoop101 ~]# tail -f houge.txt
1)基本语法:ll
(1)ls -l >文件 (功能描述:列表的内容写入文件a.txt中(****覆盖写****))
(2)ls -al >>文件 (功能描述:列表的内容****追加****到文件aa.txt的末尾)
(3)cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)
(4)echo “内容” >> 文件
2)案例实操
(1)将ls查看信息写入到文件中
[root@hadoop101 ~]# ls -l>houge.txt
(2)将ls查看信息追加到文件中
[root@hadoop101 ~]# ls -l>>houge.txt
(3)采用echo将hello单词追加到文件中
[root@hadoop101 ~]# echo hello>>houge.txt
软链接也成为符号链接,类似于windows里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。
1)基本语法:
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
2)经验技巧
删除软链接: rm -rf 软链接名,而不是rm -rf 软链接名/
查询:通过ll就可以查看,列表属性第1位是l,尾部会有位置指向。
3)案例实操:
(1)创建软连接
[root@hadoop101 ~]# mv houge.txt xiyou/dssz/
[root@hadoop101 ~]# ln -s xiyou/dssz/houge.txt ./houzi
[root@hadoop101 ~]# ll
lrwxrwxrwx. 1 root root 20 6月 17 12:56 houzi -> xiyou/dssz/houge.txt
(2)删除软连接
[root@hadoop101 ~]# rm -rf houzi
(3)进入软连接实际物理路径
[root@hadoop101 ~]# ln -s xiyou/dssz/ ./dssz
[root@hadoop101 ~]# cd -P dssz/
1)基本语法:
history (功能描述:查看已经执行过历史命令)
2)案例实操
(1)查看已经执行过的历史命令
[root@hadoop101 test1]# history
1)基本语法
date [OPTION]… [+FORMAT]
2)选项说明
选项 | 功能 |
---|---|
-d<时间字符串> | 显示指定的“时间字符串”表示的时间,而非当前时间 |
-s<日期时间> | 设置系统日期时间 |
3)参数说明
参数 | 功能 |
---|---|
<+日期时间格式> | 指定显示时使用的日期时间格式 |
1)基本语法:
(1)date (功能描述:显示当前时间)
(2)date +%Y (功能描述:显示当前年份)
(3)date +%m (功能描述:显示当前月份)
(4)date +%d (功能描述:显示当前是哪一天)
(5)date “+%Y-%m-%d %H:%M:%S” (功能描述:显示年月日时分秒)
2)案例实操
(1)显示当前时间信息
[root@hadoop101 ~]# date
2017年 06月 19日 星期一 20:53:30 CST
(2)显示当前时间年月日
[root@hadoop101 ~]# date +%Y%m%d
20170619
(3)显示当前时间年月日时分秒
[root@hadoop101 ~]# date “+%Y-%m-%d %H:%M:%S”
2017-06-19 20:54:58
1)基本语法:
(1)date -d ‘1 days ago’ (功能描述:显示前一天时间)
(2)date -d ‘-1 days ago’ (功能描述:显示明天时间)
2)案例实操:
(1)显示前一天
[root@hadoop101 ~]# date -d ‘1 days ago’
2017年 06月 18日 星期日 21:07:22 CST
(2)显示明天时间
[root@hadoop101 ~]#date -d ‘-1 days ago’
2017年 06月 20日 星期日 21:07:22 CST
1)基本语法:
date -s 字符串时间
2)案例实操
(1)设置系统当前时间
[root@hadoop101 ~]# date -s “2017-06-19 20:52:18”
1)基本语法:
cal [选项] (功能描述:不加选项,显示本月日历)
2)选项说明
选项 | 功能 |
---|---|
具体某一年 | 显示这一年的日历 |
3)案例实操:
(1)查看当前月的日历
[root@hadoop101 ~]# cal
(2)查看2017年的日历
[root@hadoop101 ~]# cal 2017
1)基本语法:
useradd 用户名 (功能描述:添加新用户)
useradd -g 组名 用户名 (功能描述:添加新用户到某个组)
2)案例实操:
(1)添加一个用户
[root@hadoop101 ~]# useradd tangseng
[root@hadoop101 ~]#ll /home/
1)基本语法:
passwd 用户名 (功能描述:设置用户密码)
2)案例实操
(1)设置用户的密码
[root@hadoop101 ~]# passwd tangseng
1)基本语法:
id 用户名
2)案例实操:
(1)查看用户是否存在
[root@hadoop101 ~]#id tangseng
1)基本语法:
[root@hadoop101 ~]# cat /etc/passwd
su: swith user 切换用户
1)基本语法:
su 用户名称 (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)
2)案例实操
(1)切换用户
[root@hadoop101 ~]#su tangseng
[root@hadoop101 ~]#echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@hadoop101 ~]#exit
[root@hadoop101 ~]#su - tangseng
[root@hadoop101 ~]#echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tangseng/bin
1)基本语法:
(1)userdel 用户名 (功能描述:删除用户但保存用户主目录)
(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)
2)选项说明
选项 | 功能 |
---|---|
-r | 删除用户的同时,删除与用户相关的所有文件。 |
3)案例实操:
(1)删除用户但保存用户主目录
[root@hadoop101 ~]#userdel tangseng
[root@hadoop101 ~]#ll /home/
(2)删除用户和用户主目录,都删除
[root@hadoop101 ~]#useradd zhubajie
[root@hadoop101 ~]#ll /home/
[root@hadoop101 ~]#userdel -r zhubajie
[root@hadoop101 ~]#ll /home/
who:查看当前登录的主机的用户,su切换的不算。
1)基本语法
(1)whoami (功能描述:显示自身用户名称)
(2)who am i (功能描述:显示登录用户的用户名)
2)案例实操
(1)显示自身用户名称(我现在是谁)
[root@hadoop101 opt]# whoami
(2)显示登录用户的用户名(我从哪来)
[root@hadoop101 opt]# who am i
1)添加qs用户,并对其设置密码。
[root@hadoop101 ~]#useradd qs
[root@hadoop101 ~]#passwd qs
2)修改配置文件
[root@hadoop101 ~]#vi /etc/sudoers
修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下所示:
Allow root to run any commands anywhereroot ALL=(ALL) ALLqs ALL=(ALL) ALL
或者配置成采用sudo命令时,不需要输入密码
Allow root to run any commands anywhereroot ALL=(ALL) ALLqs ALL=(ALL) NOPASSWD:ALL
修改完毕,现在可以用qs帐号登录,然后用命令 sudo ,即可获得root权限进行操作。
3)案例实操
(1)用普通用户在/opt目录下创建一个文件夹
[qs@hadoop101 opt]$ sudo mkdir module
[root@hadoop101 opt]# chown qs:qs module/
1)基本语法:
usermod -g 用户组 用户名
2)选项说明
选项 | 功能 |
---|---|
-g | 修改用户的初始登录组,给定的组必须存在。默认组id是1。 |
3)案例实操:
(1)将用户加入到用户组
[root@hadoop101 opt]#usermod -g root zhubajie
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,
如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
1)基本语法
groupadd 组名
2)案例实操:
(1)添加一个xitianqujing组
[root@hadoop101 opt]#groupadd xitianqujing
1)基本语法:
groupdel 组名
2)案例实操
(1)删除xitianqujing组
[root@hadoop101 opt]# groupdel xitianqujing
1)基本语法:
groupmod -n 新组名 老组名
2)选项说明
选项 | 功能描述 |
---|---|
-n<新组名> | 指定工作组的新组名 |
3)案例实操
(1)修改qs组名称为qs1
[root@hadoop101 ~]#groupadd xitianqujing
[root@hadoop101 ~]# groupmod -n xitian xitianqujing
1)基本操作
[root@hadoop101 qs]# cat /etc/group
Linux需要对登录用户读写执行文件、进入目录、查看增删目录内容等操作进行控制,不能任由用户随意执行所有操作。Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
Linux的权限控制基于RBAC(Role based Authentication Control)模型
RBAC模型:基于角色的权限控制。
l 资源:权限控制系统要保护的对象,在linux中就是文件和目录;
l 权限:对资源的操作,包括读和写
l 角色:对用户的分组。将同一类的用户划分到同一个用户组中,让他们具备相同的权限。
l 用户:登录系统时使用的账号
总结:简而言之,就是根据用户的角色判断用户是否具备操作某个资源的权限。
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用户和组。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2Oh0dAQ-1599651340426)(img\wps24.jpg)]
1)权限信息从左到右的10个字符表示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0yWqsZ5-1599651340427)(img\wps25.jpg)]
如果没有权限,就会出现减号[ - ]而已。从左至右用0-9这些数字来表示:
(1)0首位表示类型
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等
- 代表文件
d 代表目录
l 链接文档(link file);
(2)第1-3位确定属主(该文件的所有者)拥有该文件的权限。—User
(3)第4-6位确定属组(所有者的同组用户)拥有该文件的权限,—Group
(4)第7-9位确定其他用户拥有该文件的权限 —Other
2)rxw作用文件和目录的不同解释
字符 | 目录 | 文件 |
---|---|---|
r(读) | 可以查看目录内容,即ls | 读取,查看内容 |
w(写) | 重命名、删除目录中的内容(不是目录本身)、在目录内创建内容。如果想删除当前目录,必须对当前目录的父目录有写权限 | 修改,但是不能删除。只有对该文件的目录有写权限,才能删除! |
x(执行) | 进入目录 | 可以被系统执行 |
3)案例实操
[root@hadoop101 ~]# ll
总用量 104
-rw-------. 1 root root 1248 1月 8 17:36 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 1月 12 14:02 dssz
lrwxrwxrwx. 1 root root 20 1月 12 14:32 houzi -> xiyou/dssz/houge.txt[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0isgC12N-1599651340428)(img\wps26.jpg)]
(1)如果查看到是文件:链接数指的是硬链接个数。创建硬链接方法
ln [原文件] [目标文件]
[root@hadoop101 ~]# ln xiyou/dssz/houge.txt ./hg.txt
(2)如果查看的是文件夹:链接数指的是子文件夹个数。
[root@hadoop101 ~]# ls -al xiyou/
总用量 16
drwxr-xr-x. 4 root root 4096 1月 12 14:00 .
dr-xr-x—. 29 root root 4096 1月 12 14:32 …
drwxr-xr-x. 2 root root 4096 1月 12 14:30 dssz
drwxr-xr-x. 2 root root 4096 1月 12 14:04 mingjie
1)基本语法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nc366RvP-1599651340429)(img\wps27.jpg)]
第一种方式变更权限
chmod [{ugoa}{±=}{rwx}] 文件或目录
第二种方式变更权限
chmod [mode=421 ] [文件或目录]
2)经验技巧
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
r=4 w=2 x=1 rwx=4+2+1=7
3)案例实操
(1)修改文件使其所属主用户具有执行权限
[root@hadoop101 ~]# cp xiyou/dssz/houge.txt ./
[root@hadoop101 ~]# chmod u+x houge.txt
(2)修改文件使其所属组用户具有执行权限
[root@hadoop101 ~]# chmod g+x houge.txt
(3)修改文件所属主用户执行权限,并使其他用户具有执行权限
[root@hadoop101 ~]# chmod u-x,o+x houge.txt
(4)采用数字的方式,设置文件所有者、所属组、其他用户都具有可读可写可执行权限。
[root@hadoop101 ~]# chmod 777 houge.txt
(5)修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限。
[root@hadoop101 ~]# chmod -R 777 xiyou/
1)基本语法:
chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)
2)选项说明
选项 | 功能 |
---|---|
-R | 递归操作 |
3)案例实操
(1)修改文件所有者
[root@hadoop101 ~]# chown qs houge.txt
[root@hadoop101 ~]# ls -al
-rwxrwxrwx. 1 qs root 551 5月 23 13:02 houge.txt
(2)递归改变文件所有者和所有组
[root@hadoop101 xiyou]# ll
drwxrwxrwx. 2 root root 4096 9月 3 21:20 xiyou
[root@hadoop101 xiyou]# chown -R qs:qs xiyou/
[root@hadoop101 xiyou]# ll
drwxrwxrwx. 2 qs qs 4096 9月 3 21:20 xiyou
1)基本语法:
chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)
2)案例实操
(1)修改文件的所属组
[root@hadoop101 ~]# chgrp root houge.txt
[root@hadoop101 ~]# ls -al
-rwxrwxrwx. 1 qs root 551 5月 23 13:02 houge.txt
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。
1)基本语法:
find [搜索范围] [选项]
2)选项说明
选项 | 功能 |
---|---|
-name<查询方式> | 按照指定的文件名查找模式查找文件 |
-user<用户名> | 查找属于指定用户名所有文件 |
-size<文件大小> | 按照指定的文件大小查找文件。 |
单位 | 描述 |
---|---|
c | 字节 |
b(默认) | 块,一块为512字节 |
w | words为单位,一个words是2个字节 |
k | 1024字节 |
M | MB |
G | GB |
4)案例实操
(1)按文件名:根据名称查找/目录下的filename.txt文件。
[root@hadoop101 ~]# find xiyou/ -name *.txt
(2)按拥有者:查找/opt目录下,用户名称为-user的文件
[root@hadoop101 ~]# find xiyou/ -user qs
(3)按文件大小:在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)
[root@hadoop101 ~]find /home -size +200M
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
1)基本语法
locate 搜索文件
2)经验技巧
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
3)案例实操
(1)查询文件夹
[root@hadoop101 ~]# updatedb
[root@hadoop101 ~]#locate tmp
0)管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理
1)基本语法
grep 选项 查找内容 源文件
2)选项说明
选项 | 功能 |
---|---|
-n | 显示匹配行及行号。 |
3)案例实操
(1)查找某文件在第几行
[root@hadoop101 ~]# ls | grep -n test
1)基本语法:
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
2)经验技巧:
(1)只能压缩文件不能压缩目录
(2)不保留原来的文件
3)案例实操
(1)gzip压缩
[root@hadoop101 ~]# ls
test.java
[root@hadoop101 ~]# gzip houge.txt
[root@hadoop101 ~]# ls
houge.txt.gz
(2)gunzip解压缩文件
[root@hadoop101 ~]# gunzip houge.txt.gz
[root@hadoop101 ~]# ls
houge.txt
1)基本语法:
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
2)选项说明
zip选项 | 功能 |
---|---|
-r | 压缩目录 |
unzip选项 | 功能 |
---|---|
-d<目录> | 指定解压后文件的存放目录 |
3)经验技巧
zip 压缩命令在window/linux都通用,可以压缩目录且保留源文件。
4)案例实操:
(1)压缩 1.txt 和2.txt,压缩后的名称为mypackage.zip
[root@hadoop101 opt]# touch bailongma.txt
[root@hadoop101 ~]# zip houma.zip houge.txt bailongma.txt
adding: houge.txt (stored 0%)
adding: bailongma.txt (stored 0%)
[root@hadoop101 opt]# ls
houge.txt bailongma.txt houma.zip
(2)解压 mypackage.zip
[root@hadoop101 ~]# unzip houma.zip
Archive: houma.zip
extracting: houge.txt
extracting: bailongma.txt
[root@hadoop101 ~]# ls
houge.txt bailongma.txt houma.zip
(3)解压mypackage.zip到指定目录-d
[root@hadoop101 ~]# unzip houma.zip -d /opt
[root@hadoop101 ~]# ls /opt/
1)基本语法:
tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
2)选项说明
选项 | 功能 |
---|---|
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar文件 |
3)案例实操
(1)压缩多个文件
[root@hadoop101 opt]# tar -zcvf houma.tar.gz houge.txt bailongma.txt
houge.txt
bailongma.txt
[root@hadoop101 opt]# ls
houma.tar.gz houge.txt bailongma.txt
(2)压缩目录
[root@hadoop101 ~]# tar -zcvf xiyou.tar.gz xiyou/
xiyou/
xiyou/mingjie/
xiyou/dssz/
xiyou/dssz/houge.txt
(3)解压到当前目录
[root@hadoop101 ~]# tar -zxvf houma.tar.gz
(4)解压到指定目录
[root@hadoop101 ~]# tar -zxvf xiyou.tar.gz -C /opt
[root@hadoop101 ~]# ll /opt/
df: disk free 空余硬盘
1)基本语法:
df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
2)选项说明
选项 | 功能 |
---|---|
-h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
3)案例实操
(1)查看磁盘使用情况
[root@hadoop101 ~]# 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
1)基本语法:
fdisk -l (功能描述:查看磁盘分区详情)
2)选项说明
选项 | 功能 |
---|---|
-l | 显示所有硬盘的分区列表 |
3)经验技巧:
该命令必须在root用户下才能使用
4)功能说明:
(1)Linux分区
Device:分区序列
Boot:引导
Start:从X磁柱开始
End:到Y磁柱结束
Blocks:容量
Id:分区类型ID
System:分区类型
(2)Win7分区
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D537sb6S-1599651340430)(img\wps28.jpg)]
5)案例实操
(1)查看系统分区情况
[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
对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构。
Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做“挂载”的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,要载入的那个分区将使它的存储空间在这个目录下获得。
0)挂载前准备(必须要有光盘或者已经连接镜像文件)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3OGFTJEo-1599651340431)(img\wps29.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aEdRKTdr-1599651340432)(img\wps30.jpg)]
1)基本语法:
mount [-t vfstype] [-o options] device dir (功能描述:挂载设备)
umount 设备文件名或挂载点 (功能描述:卸载设备)
2)参数说明
参数 | 功能 |
---|---|
-t vfstype | 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:光盘或光盘镜像:iso9660DOS fat16文件系统:msdosWindows 9x fat32文件系统:vfatWindows NT ntfs文件系统:ntfsMount Windows文件网络共享:smbfsUNIX(LINUX) 文件网络共享:nfs |
-o options | 主要用来描述设备或档案的挂接方式。常用的参数有:loop:用来把一个文件当成硬盘分区挂接上系统ro:采用只读方式挂接设备rw:采用读写方式挂接设备 iocharset:指定访问文件系统所用字符集 |
device | 要挂接(mount)的设备 |
dir | 设备在系统上的挂接点(mount point) |
2)案例实操
(1)挂载光盘镜像文件
[root@hadoop101 ~]# mkdir /mnt/cdrom/ 建立挂载点
[root@hadoop101 ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/ 设备/dev/cdrom挂载到 挂载点 : /mnt/cdrom中
[root@hadoop101 ~]# ll /mnt/cdrom/
(2)卸载光盘镜像文件
[root@hadoop101 ~]# umount /mnt/cdrom
3)设置开机自动挂载:
[root@hadoop101 ~]# vi /etc/fstab
添加红框中内容,保存退出。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3aED7yz-1599651340433)(img\wps31.jpg)]
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
ps:process status 进程状态
1)基本语法:
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
2)选项说明
选项 | 功能 |
---|---|
-a | 选择所有进程 |
-u | 显示所有用户的所有进程 |
-x | 显示没有终端的进程 |
3)功能说明
(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:产生此进程的命令名
(2)ps -ef显示信息说明
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
4)经验技巧:
如果想查看进程的CPU占用率和内存占用率,可以使用aux;
如果想查看进程的父进程ID可以使用ef;
5)案例实操
[root@hadoop101 datas]# ps aux
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5rRwbqP-1599651340434)(img\wps32.jpg)]
[root@hadoop101 datas]# ps -ef
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IG9nNoaK-1599651340435)(img\wps33.jpg)]
1)基本语法:
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
2)选项说明
选项 | 功能 |
---|---|
-9 | 表示强迫进程立即停止 |
3)案例实操:
(1)杀死浏览器进程
[root@hadoop101 桌面]# kill -9 5102
(2)通过进程名称杀死进程
[root@hadoop101 桌面]# killall firefox
1)基本语法:
pstree [选项]
2)选项说明
选项 | 功能 |
---|---|
-p | 显示进程的PID |
-u | 显示进程的所属用户 |
3)案例实操:
(1)显示进程pid
[root@hadoop101 datas]# pstree -p
(2)显示进程所属用户
[root@hadoop101 datas]# pstree -u
1)基本命令
top [选项]
2)选项说明
选项 | 功能 |
---|---|
-d 秒数 | 指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令: |
-i | 使top不显示任何闲置或者僵死进程。 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态。 |
3)操作说明:
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以PID排序 |
q | 退出top |
4)查询结果字段解释
第一行信息为任务队列信息
内容 | 说明 |
---|---|
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 | 作为缓存的交互分区的大小 |
5)案例实操
[root@hadoop101 qs]# top -d 1
[root@hadoop101 qs]# top -i
[root@hadoop101 qs]# top -p 2575
执行上述命令后,可以按P、M、N对查询出的进程结果进行排序。
1)基本语法:
netstat -anp (功能描述:此命令用来显示整个系统目前的网络情况。例如目前的连接、数据包传递数据、或是路由表内容)
2)选项说明
选项 | 功能 |
---|---|
-an | 按一定顺序排列输出 |
-p | 表示显示哪个进程在调用 |
3)案例实操
(1)通过进程号查看该进程的网络信息
[root@hadoop101 hadoop-2.7.2]# netstat -anp | grep 火狐浏览器进程号
udp 0 0 192.168.1.101:33893 192.168.1.2:53 ESTABLISHED 4043/firefox
udp 0 0 192.168.1.101:47416 192.168.1.2:53 ESTABLISHED 4043/firefox
unix 2 [ ACC ] STREAM LISTENING 28916 4043/firefox /tmp/orbit-qs/linc-fcb-0-382f8b667a38a
unix 3 [ ] STREAM CONNECTED 28919 4043/firefox /tmp/orbit-qs/linc-fcb-0-382f8b667a38a
1)重新启动crond服务
[root@hadoop101 ~]# service crond restart
1)基本语法
crontab [选项]
2)选项说明
选项 | 功能 |
---|---|
-e | 编辑crontab定时任务 |
-l | 查询crontab任务 |
-r | 删除当前用户所有的crontab任务 |
3)参数说明
[root@hadoop101 ~]# 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分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。 |
4)案例实操:
(1)每隔1分钟,向/root/bailongma.txt文件中添加一个11的数字
*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPmbMNCA-1599651340436)(img\wps34.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Is78qIe6-1599651340437)(img\wps35.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4o6NcA7Z-1599651340437)(img\wps36.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNP8nagb-1599651340438)(img\wps37.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a9awEs80-1599651340439)(img\wps38.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-We87AM1R-1599651340439)(img\wps39.jpg)]
使用fdisk-l,查看磁盘状态。新添加的硬盘,需要重启后,才可以看到。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0zvfyAfQ-1599651340440)(img\wps40.jpg)]
分区命令: fdisk /dev/sdb
l m 显示命令列表
l p 显示磁盘分区,同fdisk –l
l n 新增分区
l d 删除分区
l w 写入并退出
步骤:执行fdisk /dev/sdb命令后,输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,如果不保存退出就输入q。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a9g2onsY-1599651340441)(img\wps41.jpg)]
命令: mkfs –t ext4 /dev/sdb1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GdQEIA9X-1599651340443)(img\wps42.jpg)]
注意:扩展分区不格式化,要格式化的是逻辑分区
查看当前分区的挂载情况: df –h
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EkcnlmeO-1599651340444)(img\wps43.jpg)]
临时挂载: mount [设备名] [指定目录]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmCu0e3D-1599651340444)(img\wps44.jpg)]
系统reboot后会丢失,还需要重新挂载。
永久挂载:编辑/etc/fstab文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3gX8XGw4-1599651340445)(img\wps45.jpg)]
文件说明:
第一列:通过blkid命令查看UUID值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-phZ4K6Ry-1599651340446)(img\wps46.jpg)]
第二列:挂载目录
第三列:文件系统类型
第四列:参数
第五列:是否备份,0表示不备份
第六列:加载顺序,只有引导分区可以设置为1,其他分区选择0或2。
编辑完成后,执行mount –a 立即生效!
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包
1)基本语法:
rpm -qa (功能描述:查询所安装的所有rpm软件包)
2)经验技巧:
由于软件包比较多,一般都会采取过滤。rpm -qa | grep rpm软件包
3)案例实操
(1)查询firefox软件安装情况
[root@hadoop101 Packages]# rpm -qa |grep firefox
firefox-45.0.1-1.el6.centos.x86_64
1)基本语法:
(1)rpm -e RPM软件包
(2) rpm -e --nodeps 软件包
2)选项说明
选项 | 功能 |
---|---|
-e | 卸载软件包 |
–nodeps | 卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了。 |
3)案例实操
(1)卸载firefox软件
[root@hadoop101 Packages]# rpm -e firefox
1)基本语法:
rpm -ivh RPM包全名
2)选项说明
选项 | 功能 |
---|---|
-i | -i=install,安装 |
-v | -v=verbose,显示详细信息 |
-h | -h=hash,进度条 |
–nodeps | –nodeps,不检测依赖进度 |
3)案例实操
(1)安装firefox软件
[root@hadoop101 Packages]# pwd
/media/CentOS_6.8_Final/Packages
[root@hadoop101 Packages]# rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm
warning: firefox-45.0.1-1.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing… ########################################### [100%]
1:firefox ########################################### [100%]
YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-De2kkKDj-1599651340447)(img/wps47.png)]
1)基本语法:
yum [选项] [参数]
2)选项说明
选项 | 功能 |
---|---|
-y | 对所有提问都回答“yes” |
3)参数说明
参数 | 功能 |
---|---|
install | 安装rpm软件包 |
update | 更新rpm软件包 |
check-update | 检查是否有可用的更新rpm软件包 |
remove | 删除指定的rpm软件包 |
list | 显示软件包信息 |
clean | 清理yum过期的缓存 |
deplist | 显示yum软件包的所有依赖关系 |
4)案例实操实操
(1)采用yum方式安装tree软件
[root@hadoop101 ~]#yum -y install tree
默认的系统YUM源,需要连接国外apache网站,网速比较慢,可以修改关联的网络YUM源为国内镜像的网站,比如网易163。
1)前期文件准备
(1)前提条件linux系统必须可以联网
(2)在Linux环境中访问该网络地址:http://mirrors.163.com/.help/centos.html,在使用说明中点击CentOS6->再点击保存
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIyWW9ND-1599651340448)(img\wps48.jpg)]
(3)查看文件保存的位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdHNIhYs-1599651340449)(img\wps49.jpg)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qb9Op9V5-1599651340450)(img\wps50.jpg)]
在打开的终端中输入如下命令,就可以找到文件的保存位置。
[qs@hadoop101 下载]$ pwd
/home/qs/下载
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
(3)[root@hadoop101 yum.repos.d]# yum -y install createrepo
4)测试
[root@hadoop101 yum.repos.d]#yum -y install httpd
①上传tar包到服务器
②解压tar包到指定目录/opt
③配置环境变量vim /etc/profile
JAVA_HOME=/opt/jdk1.7.0_79
PATH=/opt/jdk1.7.0_79/bin:$PATH
export JAVA_HOME PATH
④使新的配置文件生效:source /etc/profile
说明:
“:”是多个值之间的分隔符;
“ ” 用 来 引 用 环 境 变 量 。 “ : ”用来引用环境变量。“: ”用来引用环境变量。“:PATH”表示把系统原有的PATH环境变量的值追加进来以免我们设置的值覆盖系统默认值;
“export”表示发布新配置的环境变量;
①上传并解压缩到/opt
②启动tomcat ./startup.sh
问题:
在Windows系统中通过浏览器访问Linux系统上的Tomcat会发现无法访问。但在Linux系统内部明明是可以访问的,原因就是Linux系统自带的防火墙没有开放8080端口的访问权限。
解决:
①查看防火墙配置文件:/etc/sysconfig/iptables
②开放8080端口:复制第10行,把22修改为8080,保存退出
③重启防火墙服务:service iptables restart
或者,一劳永逸第关闭防火墙!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wb7HDIFU-1599651340451)(img/wps51.png)]
Linux系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时为应用程序分配硬件, 并根据需要执行程序中的代码。
内核主要负责以下四种功能:
l 系统内存管理
l 软件程序管理
l 硬件设备管理
l 文件系统管理
简单来说Shell是一种特殊的交互式工具,核心是命令提示符,允许输入文本命令,解释命令,并在内核中执行命令。
(1)Linux提供的Shell解析器有:
[qs@hadoop101 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
不同的shell解析器,功能不同,比如csh,符合c语言风格的shell解析器。Centos默认使用的是/bin/sh 和 /bin/bash作为shell解析器
(2)bash和sh的关系
[qs@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
[qs@hadoop102 bin]$ echo $SHELL
/bin/bash
1.脚本格式
脚本以#!/bin/bash开头(指定解析器)
2.第一个Shell脚本:helloworld
(1)需求:创建一个Shell脚本,输出helloworld
(2)案例实操:
[qs@hadoop101 datas]$ touch helloworld.sh
[qs@hadoop101 datas]$ vi helloworld.sh
在helloworld.sh中输入如下内容
#!/bin/bash
echo “helloworld”
(3)脚本的常用执行方式
第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
sh+脚本的相对路径
[qs@hadoop101 datas]$ sh helloworld.sh
Helloworld
sh+脚本的绝对路径
[qs@hadoop101 datas]$ sh /home/qs/datas/helloworld.sh
helloworld
bash+脚本的相对路径
[qs@hadoop101 datas]$ bash helloworld.sh
Helloworld
bash+脚本的绝对路径
[qs@hadoop101 datas]$ bash /home/qs/datas/helloworld.sh
Helloworld
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
(a)首先要赋予helloworld.sh 脚本的+x权限
[qs@hadoop101 datas]$ chmod 777 helloworld.sh
(b)执行脚本
相对路径
[qs@hadoop101 datas]$ ./helloworld.sh
Helloworld
绝对路径
[qs@hadoop101 datas]$ /home/qs/datas/helloworld.sh
Helloworld
注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
第三种:在脚本的路径前加上“.”
(a)有以下脚本
[root@0725pc shells]# cat test1.sh
#! /bin/bash
A=“hello”
(b) 分别使用sh,bash,./ 和 . 的方式来执行,结果如下:
[root@0725pc shells]# bash test1.sh
[root@0725pc shells]# echo $A
[root@0725pc shells]# sh test1.sh
[root@0725pc shells]# echo $A
[root@0725pc shells]# ./test1.sh
[root@0725pc shells]# echo $A
[root@0725pc shells]# . test1.sh
[root@0725pc shells]# echo $A
hello
原因:
前三种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。
第四种,也就是使用在脚本路径前加.的方式,可以使脚本内容在当前shell里执行,而无需打开子shell!
开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,不做特殊通道处理的话,父shell是不可见的。
3.第二个Shell脚本:多命令处理
(1)需求:
在用户家目录下创建一个banzhang.txt,在banzhang.txt文件中增加“I love cls”。
(2)案例实操:
[qs@hadoop101 datas]$ touch batch.sh
[qs@hadoop101 datas]$ vi batch.sh
在helloworld.sh中输入如下内容
#!/bin/bash
cd /home/qs
touch cls.txt
echo “I love cls” >>cls.txt
\1. 常用系统变量
H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等
2.案例实操
(1)查看系统变量的值
[qs@hadoop101 datas]$ echo $HOME
/home/qs
(2)显示当前Shell中所有变量:set
[qs@hadoop101 datas]$ set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
1.基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
(5)使用双引号,可以识别空格之外的其他变量,使用单引号则会只会忽略空格!
(6)使用反引号,可以将语句运行的结果作为值赋值给变量!
3.案例实操
(1)定义变量A
[qs@hadoop101 datas]$ A=5
[qs@hadoop101 datas]$ echo $A
5
(2)给变量A重新赋值
[qs@hadoop101 datas]$ A=8
[qs@hadoop101 datas]$ echo $A
8
(3)撤销变量A
[qs@hadoop101 datas]$ unset A
[qs@hadoop101 datas]$ echo $A
(4)声明静态的变量B=2,不能unset
[qs@hadoop101 datas]$ readonly B=2
[qs@hadoop101 datas]$ echo $B
2
[qs@hadoop101 datas]$ B=9
-bash: B: readonly variable
(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
[qs@hadoop102 ~]$ C=1+2
[qs@hadoop102 ~]$ echo $C
1+2
(6)变量的值如果有空格,需要使用双引号或单引号括起来,无需注意数据的类型
[qs@hadoop102 ~]$ D=I love banzhang
-bash: world: command not found
[qs@hadoop102 ~]$ D=“I love banzhang”
[qs@hadoop102 ~]$ echo $A
I love banzhang
(7)使用双引号可以识别变量
[root@0725pc shells]# echo $A
hello
[root@0725pc shells]# B=“hello $A”
[root@0725pc shells]# echo $B
hello hello
[root@0725pc shells]# C=‘hello $A’
[root@0725pc shells]# echo $C
hello $A
(8)使用反引号,将命令运行的结果赋值给参数,即A=ll
等同于 A=$(ll)
[root@0725pc shells]# D=ll
[root@0725pc shells]# echo $D
总用量 4 -rwxr–r--. 1 root root 23 10月 8 21:36 test1.sh
[root@0725pc shells]# E=$(ll)
[root@0725pc shells]# echo $E
总用量 4 -rwxr–r--. 1 root root 23 10月 8 21:36 test1.sh
(9)可把变量提升为全局环境变量,可供其他Shell程序使用
export 变量名
[qs@hadoop101 datas]$ vim helloworld.sh
在helloworld.sh文件中增加echo $B
#!/bin/bash
echo “helloworld”
echo $B
[qs@hadoop101 datas]$ ./helloworld.sh
Helloworld
发现并没有打印输出变量B的值。
[qs@hadoop101 datas]$ export B
[qs@hadoop101 datas]$ ./helloworld.sh
helloworld
每次修改 /etc/profile时,我们会执行source /etc/profile,source的作用就是执行文件中所有的export命令!
1.基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
2.案例实操
(1)输出该脚本文件名称、输入参数1和输入参数2 的值
[qs@hadoop101 datas]$ touch parameter.sh
[qs@hadoop101 datas]$ vim parameter.sh
#!/bin/bash
echo “$0 $1 $2”
[qs@hadoop101 datas]$ chmod 777 parameter.sh
[qs@hadoop101 datas]$ ./parameter.sh cls xz
./parameter.sh cls xz
1.基本语法
$# (功能描述:获取所有输入参数个数,常用于循环)。
2.案例实操
(1)获取输入参数的个数
[qs@hadoop101 datas]$ vim parameter.sh
#!/bin/bash
echo “$0 $1 $2”
echo $#
[qs@hadoop101 datas]$ chmod 777 parameter.sh
[qs@hadoop101 datas]$ ./parameter.sh cls xz
parameter.sh cls xz
2
1.基本语法
∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, ∗(功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
2.案例实操
(1)打印输入的所有参数
[qs@hadoop101 datas]$ vim parameter.sh
#!/bin/bash
echo “$0 $1 $2”
echo $#
echo $*
echo $@
[qs@hadoop101 datas]$ bash parameter.sh 1 2 3
parameter.sh 1 2
3
1 2 3
1 2 3
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
2.案例实操
(1)判断helloworld.sh脚本是否正确执行
[qs@hadoop101 datas]$ ./helloworld.sh
hello world
[qs@hadoop101 datas]$ echo $?
0
1.基本语法
(1)“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”
(2)expr + , - , *, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格;
*号需要转义为*,否则会被视为通配符;
运算指的都是整数的运算,浮点运算需要借助其他的命令!
2.案例实操:
(1)计算3+2的值
[qs@hadoop101 datas]$ expr 2 + 3
5
(2)计算3-2的值
[qs@hadoop101 datas]$ expr 3 - 2
1
(3)计算(2+3)X4的值
(a)expr一步完成计算
[qs@hadoop101 datas]$ expr expr 2 + 3
* 4
20
(b)采用$[运算式]方式
[qs@hadoop101 datas]# S=$[(2+3)*4]
[qs@hadoop101 datas]# echo $S
1.基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ qs ]返回true,[] 返回false。
\2. 常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
-s 文件存在且不为空 -L 文件存在且是一个链接(link)
3.案例实操
(1)23是否大于等于22
[qs@hadoop101 datas]$ [ 23 -ge 22 ]
[qs@hadoop101 datas]$ echo $?
0
(2)helloworld.sh是否具有写权限
[qs@hadoop101 datas]$ [ -w helloworld.sh ]
[qs@hadoop101 datas]$ echo $?
0
(3)/home/qs/cls.txt目录中的文件是否存在
[qs@hadoop101 datas]$ [ -e /home/qs/cls.txt ]
[qs@hadoop101 datas]$ echo $?
1
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
[qs@hadoop101 ~]$ [ condition ] && echo OK || echo notok
OK
[qs@hadoop101 datas]$ [ condition ] && [ ] || echo notok
notok
1.基本语法
if [ 条件判断式 ]
then
程序
elif 条件判断式
then 程序…
else 程序…
fi
或
if [ 条件判断式 ] ; then
程序…
elif [条件判断式] ; then
程序…
else 程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
2.案例实操
(1)如果输入的数字是1,2,3则输出你输入的数字是xx,否则输出,你输入的数字不是1,2,3
[root@0725pc shells]# cat test3.sh
#! /bin/bash
if [ $1 -eq 1 ]
then
echo “你输入的是1啊!”
elif [ $1 -eq 2 ]
then
echo “你输入的是2啊!”
elif [ $1 -eq 3 ]
then
echo “你输入的是3啊!”
else echo “你输入的不是1,2,3啊!”
fi
[root@0725pc shells]# bash test3.sh 3
你输入的是3啊!
[root@0725pc shells]# bash test3.sh 2
你输入的是2啊!
[root@0725pc shells]# bash test3.sh 1
你输入的是1啊!
[root@0725pc shells]# bash test3.sh 4
你输入的不是1,2,3啊!
1.基本语法
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
双分号“****;;****”表示命令序列结束,相当于java中的break。
最后的“*)”表示默认模式,相当于java中的default。
2.案例实操
(1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。
[qs@hadoop101 datas]$ touch case.sh
[qs@hadoop101 datas]$ vim case.sh
!/bin/bash
case $1 in
“1”)
echo “banzhang”
;;
“2”)
echo “cls”
;;
*)
echo “renyao”
;;
esac
[qs@hadoop101 datas]$ chmod 777 case.sh
[qs@hadoop101 datas]$ ./case.sh 1
1
1.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
或
for (( 初始值;循环控制条件;变量变化 )); do 程序; done
2.案例实操
(1)从1加到100
[qs@hadoop101 datas]$ touch for1.sh
[qs@hadoop101 datas]$ vim for1.sh
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s= [ [ [s+$i]
done
echo $s
[qs@hadoop101 datas]$ chmod 777 for1.sh
[qs@hadoop101 datas]$ ./for1.sh
“5050”
[root@0725pc shells]# tail -n 4 test1.sh
SUM2=0
for((i=0;i<=10;i++));do SUM2= ( ( (( ((SUM2+$i)); done
echo “从1加到100的值是:$SUM2”
[root@0725pc shells]# ./test1.sh
从1加到100的值是:55
3.基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
或
for 变量 in 1 2 3; do 程序; done
或
for 变量 in {1…3}; do 程序; done
4.案例实操
(1)打印所有输入参数
[qs@hadoop101 datas]$ touch for2.sh
[qs@hadoop101 datas]$ vim for2.sh
#!/bin/bash
#打印数字
for i in $*
do
echo "ban zhang love $i "
done
[qs@hadoop101 datas]$ chmod 777 for2.sh
[qs@hadoop101 datas]$ bash for2.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
(2)多种写法
[root@0725pc shells]# cat test2.sh
#! /bin/bash
for i in 1 2 3
do
echo $i
done
echo “--------------------”
for i in 1 2 3 ;do echo $i;done
echo “--------------------”
for i in {1…3};do echo $i;done
[root@0725pc shells]# ./test2.sh
1
2
3
--------------------
1
2
3
--------------------
1
2
3
(3)比较 ∗ 和 *和 ∗和@区别
(a) ∗ 和 *和 ∗和@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 2 … 2 … 2…n的形式输出所有参数。
[qs@hadoop101 datas]$ touch for.sh[qs@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 " d o n e [ q s @ h a d o o p 101 d a t a s ] j"done [qs@hadoop101 datas] j"done[qs@hadoop101datas] bash for.sh cls xz bdban zhang love cls ban zhang love xz ban zhang love bd ban zhang love clsban zhang love xzban zhang love bd
(b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 2 … 2 … 2…n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “ 2 ” … ” 2”…” 2”…”n”的形式输出所有参数。
[qs@hadoop101 datas]$ vim for.sh
#!/bin/bash
for i in “$*”
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo “ban zhang love $i”
done
for j in “$@”
# @ 中 的 每 个 参 数 都 看 成 是 独 立 的 , 所 以 “ @中的每个参数都看成是独立的,所以“ @中的每个参数都看成是独立的,所以“@”中有几个参数,就会循环几次
do
echo “ban zhang love $j”
done
[qs@hadoop101 datas]$ chmod 777 for.sh
[qs@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
1.基本语法
while [ 条件判断式 ]
do
程序
done
或
while((表达式))
do
程序
done
2.案例实操
(1)从1加到100
[qs@hadoop101 datas]$ touch while.sh
[qs@hadoop101 datas]$ vim while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s= [ [ [s+$i]
i= [ [ [i+1]
done
echo $s
[qs@hadoop101 datas]$ chmod 777 while.sh
[qs@hadoop101 datas]$ ./while.sh
5050
(2)从0开始,累加加11次
[root@0725pc shells]# bash test3.sh
11
[root@0725pc shells]# cat test3.sh
#! /bin/bash
NUM=0
while((NUM<=10));do let NUM++; done
echo $NUM
1.基本语法
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名
2.案例实操
(1)提示7秒内,读取控制台输入的名称
[qs@hadoop101 datas]$ touch read.sh
[qs@hadoop101 datas]$ vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME
[qs@hadoop101 datas]$ ./read.sh
Enter your name in 7 seconds xiaoze
xiaoze
1.basename基本语法
basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
2.案例实操
(1)截取该/home/qs/banzhang.txt路径的文件名称
[qs@hadoop101 datas]$ basename /home/qs/banzhang.txt
banzhang.txt
[qs@hadoop101 datas]$ basename /home/qs/banzhang.txt .txt
banzhang
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
4.案例实操
(1)获取banzhang.txt文件的路径
[qs@hadoop101 ~]$ dirname /home/qs/banzhang.txt
/home/qs
1.基本语法
function funname[()]
{
Action;
[return int;]
}
funname
2.经验技巧
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
3.案例实操
(1)计算两个输入参数的和
[qs@hadoop101 datas]$ touch fun.sh
[qs@hadoop101 datas]$ vim fun.sh
#!/bin/bash
function sum()
{
s=0
s=$[ $1 + $2 ]
echo “$s”
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;
[qs@hadoop101 datas]$ chmod 777 fun.sh
[qs@hadoop101 datas]$ ./fun.sh
Please input the number1: 2
Please input the number2: 5
7
wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
1. 基本用法
wc [选项参数] filename
2. 参数说明
选项参数 | 功能 |
---|---|
-l | 统计文件行数 |
-w | 统计文件的单词数 |
-m | 统计文件的字符数 |
-c | 统计文件的字节数 |
3. 案例实操
统计redis_6379.conf文件的行数、单词数、字节数!
[root@0725pc myredis]# ll | grep redis_6379.conf
-rw-r–r--. 1 root root 188 10月 9 15:33 redis_6379.conf
[root@0725pc myredis]# cat -n redis_6379.conf
1 include /root/myredis/redis.conf
2 pidfile “/var/run/redis_6379.pid”
3 port 6379
4 dbfilename “dump_6379.rdb”
5 cluster-enabled yes
6 cluster-config-file nodes-6379.conf
7 cluster-node-timeout 15000
8
[root@0725pc myredis]# wc -w redis_6379.conf
14 redis_6379.conf
[root@0725pc myredis]# wc -l redis_6379.conf
8 redis_6379.conf
[root@0725pc myredis]# wc -m redis_6379.conf
188 redis_6379.conf
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1.基本用法
cut [选项参数] filename
说明:默认分隔符是制表符
2.选项参数说明
表1-55
选项参数 | 功能 |
---|---|
-f | f为fileds,列号,提取第几列 |
-d | d为Descriptor分隔符,按照指定分隔符分割列 |
3.案例实操
(0)以:为间隔,切割PATH环境变量的第一列
[root@0725pc ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/jdk1.8.0_121/bin:/root/bin
[root@0725pc ~]# echo $PATH | cut -d ‘:’ -f 1
/usr/lib64/qt-3.3/bin
(2)以:为间隔,切割PATH环境变量的第二、三列
[root@0725pc ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/jdk1.8.0_121/bin:/root/bin
[root@0725pc ~]# echo $PATH | cut -d ‘:’ -f 2,3
/usr/local/sbin:/usr/local/bin
(3)选取系统PATH变量值,第2个“:”开始后的所有路径:
[qs@hadoop101 datas]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/qs/bin
[qs@hadoop102 datas]$ echo $PATH | cut -d: -f 3-
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/qs/bin
(4)以:为间隔,切割PATH环境变量的第一到三列,和第五列
[root@0725pc ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/jdk1.8.0_121/bin:/root/bin
[root@0725pc ~]# echo $PATH | cut -d ‘:’ -f 1-3,5
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/bin
(5)切割ifconfig 后打印的IP地址
[qs@hadoop101 datas]$ ifconfig eth0 | grep “inet addr” | cut -d: -f 2 | cut -d" " -f1
192.168.1.102
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
\1. 基本用法
sed [选项参数] ‘command’ filename
\2. 选项参数说明
表1-56
选项参数 | 功能 |
---|---|
-e | 直接在指令列模式上进行sed的动作编辑。 |
\3. 命令功能描述
表1-57
命令 | 功能描述 |
---|---|
a | 新增,a的后面可以接字串,在下一行出现 |
d | 删除 |
s | 查找并替换 |
\4. 案例实操
(0)数据准备
[qs@hadoop102 datas]$ touch sed.txt
[qs@hadoop102 datas]$ vim sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
(1)将“mei nv”这个单词插入到sed.txt第二行下,打印。
[qs@hadoop102 datas]$ sed ‘2a mei nv’ sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai
le le
[qs@hadoop102 datas]$ cat sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
注意:文件并没有改变
(2)删除sed.txt文件所有包含wo的行
[qs@hadoop102 datas]$ sed ‘/wo/d’ sed.txt
dong shen
guan zhen
lai lai
le le
(3)删除sed.txt文件第二行
[root@0725pc ~]# cat sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
[root@0725pc ~]# sed ‘2d’ sed.txt
dong shen
wo wo
lai lai
le le
(4)删除sed.txt文件最后一行
[root@0725pc ~]# sed ‘$d’ sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
(5)删除sed.txt文件第二行至最后一行
[root@0725pc ~]# sed ‘2,$d’ sed.txt
dong shen
(6)将sed.txt文件中wo替换为ni
[qs@hadoop102 datas]$ sed ‘s/wo/ni/g’ sed.txt
dong shen
guan zhen
ni ni
lai lai
le le
注意:‘g’表示global,全部替换,不加g只会替换第一个匹配到的字符。
(4)将sed.txt文件中的第二行删除并将wo替换为ni,
[qs@hadoop102 datas]$ sed -e ‘2d’ -e ‘s/wo/ni/g’ sed.txt
dong shen
ni ni
lai lai
le le
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
\1. 基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
\2. 选项参数说明
表1-55
选项参数 | 功能 |
---|---|
-F | 指定输入文件折分隔符 |
-v | 赋值一个用户定义变量 |
\3. 案例实操
(0)数据准备
[qs@hadoop102 datas]$ sudo cp /etc/passwd ./
(1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
[qs@hadoop102 datas]$ awk -F: ‘/^root/{print $7}’ passwd
/bin/bash
(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。
[qs@hadoop102 datas]$ awk -F: ‘/^root/{print $1","$7}’ passwd
root,/bin/bash
注意:只有匹配了patter的行才会执行action
(3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
[qs@hadoop102 datas]$ awk -F : ‘BEGIN{print “user, shell”} {print $1","$7} END{print “dahaige,/bin/zuishuai”}’ passwd
user, shell
root,/bin/bash
bin,/sbin/nologin
。。。
qs,/bin/bash
dahaige,/bin/zuishuai
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。
(4)将passwd文件中的用户id增加数值1并输出
[qs@hadoop102 datas]$ awk -v i=1 -F: ‘{print $3+i}’ passwd
1
2
3
4
\4. awk的内置变量
表1-56
变量 | 说明 |
---|---|
FILENAME | 文件名 |
NR | 已读的记录数(行号) |
NF | 浏览记录的域的个数(切割后列的个数) |
\5. 案例实操
(1)统计passwd文件名,每行的行号,每行的列数
[qs@hadoop102 datas]$ 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
[qs@hadoop102 datas]$ ifconfig eth0 | grep “inet addr” | awk -F: ‘{print $2}’ | awk -F " " ‘{print $1}’
192.168.1.102
(3)查询sed.txt中空行所在的行号
[qs@hadoop102 datas]$ awk ‘/^$/{print NR}’ sed.txt
5
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。默认情况以第一个字符串的字典顺序来排序!
\1. 基本语法
sort(选项)(参数)
表1-57
选项 | 说明 |
---|---|
-n | 依照数值的大小排序 |
-r | 以相反的顺序来排序 |
-t | 设置排序时所用的分隔字符,默认使用TAB |
-k | 指定需要排序的列 |
-u | u为unique的缩写,即如果出现相同的数据,只出现一行 |
参数:指定待排序的文件列表
\2. 案例实操
(0)数据准备
[qs@hadoop102 datas]$ touch sort.sh
[qs@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)按照“:”分割后的第三列倒序排序。
[qs@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
\1. 虚拟化支持异常情况如下几种情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uTsu6978-1599651340453)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml22700\wps57.jpg)]
图1-168
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTCmqV5x-1599651340454)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml22700\wps58.jpg)]
图1-169
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9BbbvXw-1599651340455)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml22700\wps59.jpg)]
图1-170
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4EotJ2H-1599651340456)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml22700\wps60.jpg)]
图1-171
问题原因:宿主机BIOS设置中的硬件虚拟化被禁用了
解决办法:需要打开笔记本BIOS中的IVT对虚拟化的支持
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DApvqq39-1599651340456)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml22700\wps61.jpg)]
图1-172
问题: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
问题1:使用Linux命令查询file1中空行所在的行号
答案:
[qs@hadoop102 datas]$ awk ‘/^$/{print NR}’ sed.txt
5
问题2:有文件chengji.txt内容如下:
张三 40
李四 50
王五 60
使用Linux命令计算第二列的和并输出
[qs@hadoop102 datas]$ 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 $0}END{print "SUM="a}’
1
2
3
4
5
6
7
8
9
10
SUM=55
问题1:请用shell脚本写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符”shen”的文件名称
[qs@hadoop102 datas]$ grep -r “shen” /home | cut -d “:” -f 1
/home/qs/datas/sed.txt
guan zhen
ni ni
lai lai
le le
注意:‘g’表示global,全部替换,不加g只会替换第一个匹配到的字符。
(4)将sed.txt文件中的第二行删除并将wo替换为ni,
[qs@hadoop102 datas]$ sed -e ‘2d’ -e ‘s/wo/ni/g’ sed.txt
dong shen
ni ni
lai lai
le le
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
\1. 基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
\2. 选项参数说明
表1-55
选项参数 | 功能 |
---|---|
-F | 指定输入文件折分隔符 |
-v | 赋值一个用户定义变量 |
\3. 案例实操
(0)数据准备
[qs@hadoop102 datas]$ sudo cp /etc/passwd ./
(1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
[qs@hadoop102 datas]$ awk -F: ‘/^root/{print $7}’ passwd
/bin/bash
(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。
[qs@hadoop102 datas]$ awk -F: ‘/^root/{print $1","$7}’ passwd
root,/bin/bash
注意:只有匹配了patter的行才会执行action
(3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
[qs@hadoop102 datas]$ awk -F : ‘BEGIN{print “user, shell”} {print $1","$7} END{print “dahaige,/bin/zuishuai”}’ passwd
user, shell
root,/bin/bash
bin,/sbin/nologin
。。。
qs,/bin/bash
dahaige,/bin/zuishuai
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。
(4)将passwd文件中的用户id增加数值1并输出
[qs@hadoop102 datas]$ awk -v i=1 -F: ‘{print $3+i}’ passwd
1
2
3
4
\4. awk的内置变量
表1-56
变量 | 说明 |
---|---|
FILENAME | 文件名 |
NR | 已读的记录数(行号) |
NF | 浏览记录的域的个数(切割后列的个数) |
\5. 案例实操
(1)统计passwd文件名,每行的行号,每行的列数
[qs@hadoop102 datas]$ 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
[qs@hadoop102 datas]$ ifconfig eth0 | grep “inet addr” | awk -F: ‘{print $2}’ | awk -F " " ‘{print $1}’
192.168.1.102
(3)查询sed.txt中空行所在的行号
[qs@hadoop102 datas]$ awk ‘/^$/{print NR}’ sed.txt
5
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。默认情况以第一个字符串的字典顺序来排序!
\1. 基本语法
sort(选项)(参数)
表1-57
选项 | 说明 |
---|---|
-n | 依照数值的大小排序 |
-r | 以相反的顺序来排序 |
-t | 设置排序时所用的分隔字符,默认使用TAB |
-k | 指定需要排序的列 |
-u | u为unique的缩写,即如果出现相同的数据,只出现一行 |
参数:指定待排序的文件列表
\2. 案例实操
(0)数据准备
[qs@hadoop102 datas]$ touch sort.sh
[qs@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)按照“:”分割后的第三列倒序排序。
[qs@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
\1. 虚拟化支持异常情况如下几种情况
[外链图片转存中…(img-uTsu6978-1599651340453)]
图1-168
[外链图片转存中…(img-jTCmqV5x-1599651340454)]
图1-169
[外链图片转存中…(img-Q9BbbvXw-1599651340455)]
图1-170
[外链图片转存中…(img-q4EotJ2H-1599651340456)]
图1-171
问题原因:宿主机BIOS设置中的硬件虚拟化被禁用了
解决办法:需要打开笔记本BIOS中的IVT对虚拟化的支持
[外链图片转存中…(img-DApvqq39-1599651340456)]
图1-172
问题: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
问题1:使用Linux命令查询file1中空行所在的行号
答案:
[qs@hadoop102 datas]$ awk ‘/^$/{print NR}’ sed.txt
5
问题2:有文件chengji.txt内容如下:
张三 40
李四 50
王五 60
使用Linux命令计算第二列的和并输出
[qs@hadoop102 datas]$ 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 $0}END{print "SUM="a}’
1
2
3
4
5
6
7
8
9
10
SUM=55
问题1:请用shell脚本写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符”shen”的文件名称
[qs@hadoop102 datas]$ grep -r “shen” /home | cut -d “:” -f 1
/home/qs/datas/sed.txt
/home/qs/datas/cut.txt
[此文转载于老师发布的个人学习文档]