大数据学习笔记——Linux基本知识及指令(理论部分)

时间:2021-12-28 20:39:02

Linux学习笔记整理

上一篇博客中,我们详细地整理了如何从0部署一套Linux操作系统,那么这一篇就承接上篇文章,我们仔细地把Linux的一些基础知识以及常用指令(包括一小部分高级命令)做一个梳理,好了,现在开始吧!

1. Linux介绍

在介绍Linux之前,先要介绍一下Unix操作系统,说到两者之间的关系,"Unix是Linux的父亲"这个说法更为恰当,Unix是作为一款商业软件而存在的,主要运行在大型服务器和小型机上,不开源,不免费,大多与硬件配套,也就是说,大多数 UNIX 系统如 AIX、HP-UX 等是无法安装在 x86 服务器和个人计算机上的;后来Linux就出来了,Linux内核最初是由李纳斯•托瓦兹(Linus Torvalds)在赫尔辛基大学读书时出于个人爱好而编写的,当时他觉得教学用的迷你版 UNIX 操作系统 Minix 太难用了,于是决定自己开发一个操作系统,相比Unix来说,Linux的最大特点是开放源代码,开源软件是不同于商业软件的一种模式,它的好处是大家不用担心什么猫腻,可以*地学习,研究,自然也就带来了技术的进步!Linux有很多的发行版本,主打免费,主流的有红帽操作系统(RedHat),Centos等等,其中也有付费版,主要提供售后服务以及技术支持,企业使用较多的是Centos,而Ubuntu则是在教学活动中使用较多,接下去,我们简单总结一下Linux操作系统的四大优点:

1. 免费:开源免费应该说是Linux操作系统最大的一个优点了,正因如此,它才得到了众多企业的青睐以及支持

2. 运行速度快:不同于Windows的图形化页面(需要占用很多内存),Linux是完全使用命令行进行操作的,所以它的速度非常快

3. 占用资源小:也正是因为上述原因,Linux系统也非常地不吃资源,即使在内存或CPU资源已经非常少的情况下,也能正常地运行

4. 安全可靠:Linux有很多的定制版本,病毒很有可能根本运行不起来,同时,Linux一般是由专业人士进行操作的,病毒也很容易查杀

宿主机和虚拟机的概念:

由于后续在学习大数据框架的时候会涉及到VMware这款软件,因此需要简单说明了一下宿主机和虚拟机的概念:为了使用方便,我们并没有做一个双系统,那么做成本较高,也并不方便,而VMware这款软件很好地解决了这个问题,如果原本的环境是Windows操作系统,那么我们就称Windows是宿主机,而VMware这款软件在宿主机上又新开辟了一块空间,在这块空间上运行Linux操作系统,那么我们就称Linux是客户机,而VMware是虚拟机,需要注意的是,虽说有所谓的"虚拟"二字,它也是要占用计算机的各种资源的,在安装时务必结合计算机的各项性能进行资源的合理分配以保证系统的流畅运行!!!

大数据学习笔记——Linux基本知识及指令(理论部分)

2. Linux基本指令

命令提示符

[root@s100 ~]#:其中,root是用户名,root是最高权限,s100是主机名,如果是最原始的状态,这里默认是叫localhost或者bogon,~表示当前当前路径,#代表本用户是超级用户

[centos@s100 root]$:其中centos是一个普通用户,root表示现在是在/root这个目录下,而最后的$代表改用户是普通用户

修改命令提示符

既然命令提示符的作用是能够让使用者清楚地知道各种关键信息,那么我们当然可以对它进行定制,使其更加人性化,可读性更高,步骤如下:

1. 修改配置文件:nano /etc/profile

2. 在文件末尾添加一句指令:export PS1='[\u@\h \w]\$ '

3. 保存修改使其永久有效:source /etc/profile

命令提示符说明

\u   //用户名
\h //主机名
\W //当前所在的目录 \d //日期
\t //系统时间
\w //当前所在的完整路径
\H //主机名

注意:建议在修改中这三个信息务必添加上:\u \h \w

Linux中不像Windows有盘符的概念,是以 / 作为根目录的,可以理解为整个文件系统就是一个树形结构

路径相关基本命令

pwd        //查看当前路径   
pwd -P //查看当前路径的真实路径
ls //列出当前路径下的文件或文件夹
ls / //列出根目录下的文件或文件夹
ls -al //列出当前目录下的文件或文件夹及其详细信息,并展示隐藏文件或文件夹
ls -h    //表示将文件或文件夹的大小显示表示成为可读的形式
ls -l //等于ll cd / //切换到根目录
cd .. //切换到上级目录
cd . //切换到当前目录
cd - //切换到上个目录
.. //上级目录
. //当前目录

用户相关基本命令

su centos            //su表示switch user,切换用户到centos
//切换到超级用户的四种方式
su //第一种
su - //第二种
su root //第三种
su - root //第四种
exit //退出
useradd centos2 //添加centos2用户,必须要在root权限下进行
passwd centos2 //修改centos2的密码
userdel -r centos2 //删除centos2用户

文件/文件夹相关基本指令

//文件增删改查
touch 1.txt //创建一个文件
rm 1.txt //删除一个文件
echo helloworld > 1.txt //覆盖模式将内容重定向到1.txt中去
echo helloworld >> 1.txt //追加模式将内容重定向到1.txt中去
cat 1.txt //查看文件内容
///文件夹增删改查
mkdir aaa //创建一个文件夹
mkdir -p aaa/bbb/ccc //创建多级目录
rm -r aaa //递归地删除文件夹及文件夹下的所有内容
rm -rf aaa //强制并且递归地删除文件夹及文件夹下的所有内容
//复制
cp 1.txt 2.txt //将1.txt复制到2.txt
cp -r aaa aaa1 //将aaa文件夹复制到aaa1文件夹
//剪切
mv 1.txt aaa //将1.txt文件移动到aaa文件夹下,如果aaa文件夹不存在则表示重命名
mv aaa1 aaa2 //将aaa1文件夹剪切到aaa2 

目录以及文件类型

目录:

/                 //根目录
/home //家目录
/home/centos //centos的家目录
/home/centos2 //centos2的家目录
/root //root用户的家目录
/usr //Unix System Resource 系统资源目录,安装软件会安装在此目录下
/etc //系统配置文件目录
/bin //二进制文件目录,该目录下的文件都是可以被执行的
/lib //系统的函数库
/tmp //临时文件目录,任何用户都可以额访问

文件类型:

普通文件:-
文件夹 :d
符号链接: l link,相当于快捷方式 字符设备文件:c char
套接字文件 :s socket
块设备文件: b block

权限相关知识

从范围上来说:权限包括用户权限:u = user,用户组权限:g = group以及其他权限:o = others

从职能或是功能上来说:权限包括读权限:r = read,写权限:w = write以及执行权限:x = execute

权限修改的指令是chmod:change mode

一共有两种修改权限的方式

第一种方式:

chmod u+x 1.txt        //给当前用户的1.txt文件增添执行权限
chmod o+w 2.txt //给其他用户的2.txt文件增添写权限
chmod a+x 3.txt //给所有用户的3.txt文件添加执行权限
chmod u-w+r 4.txt //给当前用户去除写权限并增添读权限

第二种方式:将读写执行三种权限用二进制的方式表示出来,r => 4,w => 2,x => 1

chmod 755 1.txt        //对应的权限就是rwxr-xr-x

文件夹的三种权限说明:

读权限  //是否可读,即是否可以使用ls命令查看文件或是文件夹

写权限  //指定目录的结构或者说名字空间(namespace)是否发生改变

执行   //读写均不可用

Yum相关知识和基本指令

Yum是Linux自带的一款下载升级工具,它的全称叫做Yellowdog Updater Modified——黄狗修改版升级器,必须使用root权限使用该工具,它就好比是APP Store,所有的软件都是统一在官方的服务器上管理和更新,我们每个服务器就像客户端一样,需要安装新的软件的话就可以用yum去访问官方服务器并下载需要的软件

sudo yum install xxx      //安装
sudo yum install -y xxx //安装询问确认时省去输入y的步骤
sudo yum update xxx //更新
sudo yum remove xxx //卸载
sudo yum install --downloadonly --downloaddir . xxx //将xxx软件仅下载到当前目录下去
sudo yum localinstall -y xxx.rpm //本地安装(无需网络连接)xxx软件,注意这里使用的就必须是之前下载下来的rpm文件了
yum search ifconfig //通过命令搜索实际的安装包名

VMWare网络连接的三种模式详解

我们在做前一篇实操部分的博客时用到过一个叫做NAT的模式,那么在这篇理论部分就来详细讲解一下不同的网络连接模式

桥接模式:有网络连接

相当于和PC平行的另一台主机,和PC有相同的ip段192.168.153.xxx,如果pc无法联网,客户机也无法连网,且客户机之间无法互通

NAT模式:Network Address Translation,网络地址转换模式,有网络连接

相当于V8网卡分配的多个子客户机,客户机ip频段由V8网卡分配,和pc的ip段不同,即使pc无法联网,客户机也无法连外网,客户机之间也是可以联通的,查看VMnet8的方法:Windows下打开cmd命令窗口,输入ipconfig

大数据学习笔记——Linux基本知识及指令(理论部分)

查看文件夹大小指令

du -h /home        //查看home目录以及home目录下所有子文件以及文件夹的大小,采用的人性化可读模式
du -sh /home //仅显示home目录的大小,而不包含home的子目录

Linux变量

Linux中变量是弱类型的,也就是说声明变量的时候无需指定它的数据类型,而引用变量的时候有三种方式:

name=tom

$name  //可以引用变量但是不会限制范围,也就是说系统不知道应该把$后面多少字符看成是一个引用

${name}  //可以引用变量同时也会限制范围,系统知道应该要把${name}看成一个整体作为引用

"$name"    //作用同上

'$name'   //没有引用作用,只表示$name这个字符串

归档和压缩基本指令

归档:将一个或多个文件或文件夹整合成一个文件

压缩:使用某种压缩算法将指定文件紧凑化

tar -cf archive.tar 1.txt 2.txt        //将1.txt和2.txt归档成一个文件archive.tar
tar -tvf archive.tar //列出tar文件的内容的详细信息
tar -xf archive.tar //抽取tar文件中的所有文件
gzip 1.txt //对1.txt文件压缩,1.txt会直接变成1.txt.gz文件
gunzip 1.txt.gz //对1.txt.gz文件解压缩
tar -czvf aaa.tar.gz aaa //使用一句话命令直接对aaa文件夹完成归档加压缩操作,aaa文件夹会变成aaa.tar.gz文件
tar -xzvf aaa.tar.gz //使用一句话命令对aaa.tar.gz文件解压缩
tar -xzvf aaa.tar.gz -C xxx //使用一句话命令对aaa.tar.gz文件解压缩并把解压缩后的文件夹放在xxx目录下

链接基本知识

使用ll查看基本信息时最前面的l就是链接(这里仅指符号链接,或称软链接)

1. 硬链接:不能对文件夹创建硬链接,相当于是把原文件又复制出来了一份,删除硬链接原文件不会受到影响

ln aaa a1,表示将原文件aaa创建了一个叫做a1的硬链接

2. 软链接:又称符号链接,并不能充当原始文件,就只是一个快捷方式而已,原文件删除,链接也随之失效

ln -s aaa a1

3. 删除软链接:rm -rf a1即可

3. Shell脚本语言

脚本语言的特点是,所见即所得,其他常见的脚本语言有python,js,perl等等

Shell编写流程及规范:

1. 编写头部,声明解释器:#!/bin/bash

2. 编写正文

3. 添加执行权限:chmod a+x xxx.sh

4. 执行:如果要在当前目录下执行,./xxx.sh,如果要在任何目录下都能执行该脚本,则需要将该文件放到/usr/local/bin下去

if语句示例

#!/bin/bash
if [ $# -ne 1 ] ; then echo 参数个数必须为1 ; exit ; fi
if [ $1 -le 20 ] ; then echo young ; elif [ $1 -le 40 ] ; then echo middle ; else echo old ; f

for语句示例

#!/bin/bash
for (( i = 1 ; i < 10 ; i++ )) ; do
tput setaf $i
for (( j = 1 ; j <= $i ; j++ )) ; do
echo -ne "$j"x"$i"=$(($i*$j))"\t"
done
echo
done

while语句示例

#!/bin/bash
i=1
while ((i < 10)) ; do
j=1
while ((j <= i)) ; do
echo -ne ${i}x${j}=$((i*j))"\t"
j=$((j+1))
done
echo
i=$((i+1))
done

同步脚本编写

由于之后在使用大数据框架的时候需要经常同步多台虚拟机的配置文件,因此需要写一个同步的脚本以方便之后使用,同步脚本名称:xsync.sh

#!/bin/bash
if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi
p=$1
#echo p=$p
dir=`dirname $p`
#echo dir=$dir
filename=`basename $p`
#echo filename=$filename
cd $dir
fullpath=`pwd -P`
#echo fullpath=$fullpath
user=`whoami`
for (( i = 202 ; i <= 205 ; i = $i + 1 )) ; do
echo =================s$i==============
scp -r $filename ${user}@s$i:$fullpath
done ;

同时在多台主机上使用同一指令(如查看进程的jps),脚本名称:xcall.sh

#!/bin/bash
if [ $# -lt 1 ] ; then echo 需要参数 ; exit ; fi
for (( i = 201 ; i <= 205 ; i = $i + 1 )) ; do
tput setaf 2
echo =================s$i==============
tput setaf 9
ssh s$i "source /etc/profile ; $@"
done ;

4. Linux高级命令

head 1.txt        //默认显示1.txt的前面十行文本
head -5 1.txt //显示1.txt的前面5行文本
tail 1.txt //默认显示1.txt的后10行文本
tail -5 1.txt //显示1.txt的后5行文本
| //管道符,用于分隔两个命令,其中前一个命令的输出作为后一个命令的输入
ll | head -5 //将ll的输出结果作为head -5 的输入
find xxx //递归显示指定文件夹下的所有文件及文件夹
grep //抓取文本
grep 'tom' bbb //从bbb文本文件中抓取含有tom的所有行
grep -i //忽略大小写
grep -r hello . //递归地寻找当前路径下所有包含hello的文件及其行
grep -rl hello . //仅递归地寻找当前路径下包含hello的文件
find / | grep nano-2.3.1-10.el7.x86_64.rpm //从根目录下寻找指定文件所在的路径

5. Linux系统命令以及网络命令

ping www.xxx.com            //测试某网站的联通情况
ifconfig //查看网卡和ip请况
netstat -anop //查看网络进程信息
netstat -anop | grep xxx //查看某网络进程的信息,包含WebUI等信息
kill xxx //杀死某个进程
kill -9 xxx //彻底杀死某个进程
free -h //查看内存剩余空间
ps -Af //查看所有的进程