四十三、Linux

Linux 入门

概述

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统

Linux 的版本

Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。

在这里插入图片描述
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。

Linux 应用领域:
常用的IT服务器有Linux、Unix和Windows操作系统,其中Linux因其稳定、开源、免费、安全、高效的特点,发展迅猛,在服务器市场占有率超过80%,随着云计算的发展,Linux在未来服务器领域仍是大势所趋!

Linux操作系统主要有以下三大应用领域:

  • Linux作为企业级服务器的应用
    Linux系统可以为企业架构WWW服务器、数据库服务器、负载均衡服务器、邮件服务器、DNS服务器、代理服务器、路由器等,不但使企业降低了运营成本,同时还获得了Linux系统带来的高稳定性和高可靠性,且无须考虑商业软件的版权问题。

  • 嵌入式Linux系统应用领域
    由于Linux系统开放源代码,功能强大、可靠、稳定性强、灵活而且具有极大的伸缩性,再加上它广泛支持大量的微处理体系结构、硬件设备、图形支持和通信协议,因此,在嵌入式应用的领域里,从因特网设备(路由器、交换机、防火墙,负载均衡器)到专用的控制系统(自动售货机,手机,PDA,各种家用电器),LINUX操作系统都有很广阔的应用市场。特别是经过这几年的发展,它已经成功地跻身于主流嵌入式开发平台。

  • 个人桌面Linux应用领域
    所谓个人桌面系统,其实就是我们在办公室使用的个人计算机系统,例如:Windows xp、windows 7、Mac等。Linux系统在这方面的支持也已经非常好了,完全可以满足日常的办公及家长需求。

随着Linux在服务器领域的广泛应用,近几年来,该系统已经参透到电信、金融、政府、教育、银行、石油等各个行业,同时各大硬件厂商也相继支持Linux操作系统;同时,大型、超大型互联网企业都在使用Linux系统作为其服务器端的程序运行平台,全球及国内排名前十的网站使用的几乎都是Linux系统,Linux已经逐步渗透到了各个领域。这一切表明,Linux在服务器市场前景光明。

Linux 与 Windows 的区别

在这里插入图片描述

VM和Linux的安装

Centos下载地址

官网下载最新版本:https://www.centos.org/download/

阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/。

各个版本的ISO镜像文件说明:

  • CentOS-7-x86_64-DVD-1708.iso 标准安装版(推荐)
  • CentOS-7-x86_64-Everything-1708.iso 完整版,集成所有软件(以用来补充系统的软件或者填充本地镜像)
  • CentOS-7-x86_64-LiveGNOME-1708.iso GNOME桌面版
  • CentOS-7-x86_64-LiveKDE-1708.iso KDE桌面版
  • CentOS-7-x86_64-Minimal-1708.iso 精简版,自带的软件最少
  • CentOS-7-x86_64-NetInstall-1708.iso 网络安装版(从网络安装或者救援系统)

安装

创建一个虚拟机

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1)创建虚拟机

创建虚拟机技术难点-网络配置三种方式理解:

  • NAT网络模式,选择此网络模式之后,只要本地电脑可以访问网络,那么虚拟机centos系统默认也可以访问网络,并且在路由器上并不会额外分配一个IP,给虚拟主机,这是最简单的配置方式的,但是,按照日常使用习惯,我们安装完成一台centos虚拟机之后,还需要通过Xshell等此类ssh软件连接进行管理,这就需要给centos系统分配一个静态的独立IP,并且在路由器上是可查询的。
  • 桥接网卡模式,选择此网络模式之后,只要本地电脑可以访问网络,那么虚拟机默认也可以访问网络,并且会在路由器上额外分配一个IP给虚拟主机,但是默认是动态IP,我们还需要额外配置centos7的网卡配置文件,给虚拟机分配一个静态IP,以便于我们使用Xsheel软件进行管理,并且此IP在路由器上可查询
  • 仅主机(Host-Only)网络模式,在安装VM的时候,默认会安装一张虚拟网卡,windows下可通过控制面板—网络和Internet—网络和共享中心—更改适配器设置中查看此虚拟网卡,选择此模式之后,虚拟主机将无法连接互联网,但是可以与本地电脑通信

虚拟机创建完成

开始安装之前
在这里插入图片描述

开启虚拟机

安装Cetenos7

语言环境的设置

在这里插入图片描述

开启网络

在这里插入图片描述

在这里插入图片描述

设置管理员账号
在这里插入图片描述

在这里插入图片描述

重启之后进入系统
在这里插入图片描述

Liunx系统的目录结构

linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。

深刻理解linux树状文件目录是非常重要的,这里我给大家说明一下。

记住一句经典的话:在Linux世界里,一切皆文件。

在这里插入图片描述

具体的目录结构

在这里插入图片描述

  • /
    这就是根目录。对你的电脑来说,有且只有一个根目录。

  • /bin [重点] (/usr/bin 、 /usr/local/bin)
    是Binary的缩写, 这个目存放着最经常使用的命令

  • /sbin (/usr/sbin 、 /usr/local/sbin)
    s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

  • /home [重点]
    存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

  • /root [重点]
    该目录为系统管理员,也称作超级权限者的用户主目录。

  • /lib
    系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /etc [重点]
    所有的系统管理所需要的配置文件和子目录 my.conf

  • /usr [重点]
    这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。

  • /boot [重点]
    存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

  • /proc
    这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。

  • /srv
    service缩写,该目录存放一些服务启动之后需要提取的数据。

  • /sys
    这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。

  • /tmp
    这个目录是用来存放一些临时文件的。

  • /dev
    类似于windows的设备管理器,把所有的硬件用文件的形式存储。

  • /media [重点]
    linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

  • /mnt [重点]
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。 d:/myshare

  • /opt
    这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。默认为空。所以工作时,我们尽量将安装软件放到这个统一的目录下

  • /usr/local [重点]
    这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。

  • /var [重点]
    这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。

为什么需要远程登录Linux

说明: 公司开发时候, 具体的情况是这样的

  1. linux服务器是开发小组共享的.

  2. 正式上线的项目是运行在公网的.

  3. 因此程序员需要远程登录到centos进行项目管理或者开发.

  4. 远程登录客户端有 Xshell6,Xftp6 secureCRT

secureCRT安装

在这里插入图片描述

安装好之后 按照注册步骤自行注册 注册之后 打开crt 配置连接信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注册FX 用来传递文件的

必须将注册机复制到安装目录下 才可以注册成功。

获取虚拟机中 ip 地址: ip addr
在这里插入图片描述

在 SecureCRT 中更改ip地址:
在这里插入图片描述

在这里插入图片描述

连接成功后:

在这里插入图片描述

Vi和Vim编辑器

vi和vim的基本介绍

所有的 Linux 系统都会内建 vi 文本编辑器。

Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

  1. 在线安装 vim
[root@localhost tmp]# yum -y install vim*

在这里插入图片描述

  1. 进入到 usr/tmp 创建一个hello.txt文档
vi hello.txt

vim hello.txt

Linux 的使用:

  • 输入上述后,进入 vim 文件编辑(默认模式,正常模式),在该模式中,可以使用上下左右键来移动光标,可使用删除键,也可使用复制粘贴,可使用快捷键。
  • 按下 i 等任意一个字母后,会进入编辑模式。在Linux 中,按下 i 等字母时,画面的左下角会出现 INSERT或REPLACE 的字样,才可以进行编辑。回到一般模式,需要按下 Esc 才可以退出编辑模式。

命令行模式(退出编辑模式后使用):

命令功能
:w保存
:q退出
:!强制执行
/要查找的词n 查找下一个,N 往上查找
? 要查找的词n是查找上一个,shift+n是往下查找
:set nu显示行号
:set nonu关闭行号

一般组合使用 :wq 保存退出
在这里插入图片描述

vi和vim快捷键

  1. 拷贝当前行 yy , 拷贝当前行向下的5行 5yy,并粘贴 p。【快捷键在正常模式下使用】
  2. 删除当前行 dd , 删除当前行向下的5行 5dd
  3. 在文件中查找某个单词 [命令模式下 /关键字 , 回车 查找 , 输入 n 就是查找下一个 ]
  4. 设置文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu]
  5. 编辑 /etc/profile 文件,使用快捷键到底文档的最末行[G]和最首行[gg] 【正常模式下】
  6. 在一个文件中输入 “hello” ,然后又撤销这个动作 u 【正常模式下】
  7. 编辑 /etc/profile 文件,并将光标移动到 20行 shift+g
语法功能描述
yy复制光标当前一行
y数字y复制一段(从第几行到第几行)
p箭头移动到目的行粘贴
u撤销上一步
dd删除光标当前行
d数字d删除光标(含)后多少行
x删除一个字母,相当于del
X删除一个字母,相当于Backspace
yw复制一个词
dw删除一个词
shift+^移动到行头
shift+$移动到行尾
1+shift+g移动到页头,数字
shift+g移动到页尾
数字N+shift+g移动到目标行

末行位置
在这里插入图片描述

在这里插入图片描述

开机、重启和用户登录注销

关机,重启命令

基本介绍

命令说明
shutdown –h now立该进行关机 【halt】
shudown -h 1“hello,关机" “hello, 1 分钟后会关机了”
shutdown –r now现在重新启动计算机 [reboot]
halt关机,作用和上面一样.
reboot现在重新启动计算机(root管理员)
sync把内存的数据同步到磁盘.
poweroff关闭系统(root管理员)

注意细节

不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中

用户登录与注销

基本介绍

  1. 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用”su - 用户名命令来切换成系统管理员身份.

  2. 在提示符下输入 logout 即可注销用户【不同的shell 可能不同(logout exit)】

使用细节

logout 注销指令在图形**运行级别(简单提一下:0-6个级别)**无效,在 运行级别 3下有效.

配置主机名称

修改文件: vim /etc/hostname

重启主机后才能更新: shutdown -r now

配置网卡信息

vim /etc/sysconfig/network-scripts/ifcfg-ens33

文件名ifcfg-ens后的数字可能会不同,若要将文件名改为以 eth0 结尾的

  1. 全路径为 /etc/sysconfig/network-scripts/ifcfg-eth0
  2. 编辑/etc/sysconfig/grub文件
    vim /etc/sysconfig/grub
    在GRUB_CMDLINE_LINUX后的双引号内添加
    net.ifnames=0 biosdevname=0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="99fa20ee-5c7a-4e29-94a5-fd36b1901d9c"
DEVICE="ens33"
ONBOOT="yes"

说明:

设备类型:TYPE=Ethernet 
地址分配模式:BOOTPROTO=static 
网卡名称:NAME=eno16777736 
是否启动:ONBOOT=yes 
IP 地址:IPADDR=192.168.10.10 
子网掩码:NETMASK=255.255.255.0 
网关地址:GATEWAY=192.168.10.1 
DNS 地址:DNS1=192.168.10.1
TYPE=Ethernet 
BOOTPROTO=static 
NAME=eno16777736 
ONBOOT=yes 
IPADDR=192.168.10.10 
NETMASK=255.255.255.0 
GATEWAY=192.168.10.1 
DNS1=192.168.10.1 

ip 地址为要设置的 ip
子网掩码、网关地址、DNS地址来源:
编辑 -> 虚拟网络编辑器

在这里插入图片描述
在这里插入图片描述

用户管理

基本介绍

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

在 Linux 中,root账户拥有系统极其高的权力,可以新建、添加用户
在这里插入图片描述

用户相关操作

用户操作(home 文件中):

命令说明
su < user>切换用户,执行时需要输入密码
adduser新建用户 sudo adduser lilei
useradd只新建用户,不会创建用户密码和工作目录,创建完成后需要使用 passwd 去设置密码
deluser删除用户
exit退出

用户组

命令说明
groups查看属于哪个用户组 groups lilei
groupdel删除用户组 groupdel 用户组
usermod修改用户的组 usermod -g 新的组名 用户名

删除组的时候,如果组中有用户,则不允许删除组

  • 用户和组的相关文件:
  1. /etc/passwd 文件
    在这里插入图片描述
    该文件不是可执行文件,而是系统密码文件,是用户(user)的配置文件,记录用户的各种信息,每行的含义为:
    用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录

  2. /etc/shadow 文件
    在这里插入图片描述
    每行含义:
    登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留

  3. /etc/group 文件
    组(group)的配置文件,记录 Linux 包含的组的信息
    在这里插入图片描述

每行含义:

组名:口令:组标识号:组内用户列表

文件管理

命令说明
cat读取指定文件中的内容并打印到终端输出 cat /etc/group
命令说明
touch创建文件 touch file 创建一个文件
touch text{1…10}_linux.txt 创建十个文件
cd进入一个目录 cd /etc/ 以 / 开头的路径为绝对路径
paw查看当前目录
who am i当前用户信息
whoami当前用户名

who 命令常用参数

参数说明
-a打印能打印的全部
-d打印死掉的进程
-mam imom likes
-q打印当前登录用户数及用户名
-u打印当前登录用户登录信息
-r打印运行等级
按键介绍
Tab命令补全
Ctrl + c终止当前程序
Ctrl+d键盘输入结束或退出终端
Ctrl+s暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a将光标移至输入行头,相当于Home
Ctrl+e将光标移至输入行末,相当于End
Ctrl+k删除从光标所在位置到行末
Alt+Backspace向前删除一个单词
Shift+PgUp将终端显示向上滚动
Shift+PgDn将终端显示向下滚动
恢复之前输入的命令
通配符说明
*匹配 0 或多个字符
?匹配任意一个字符
[list]匹配 list 中的任意单一字符
[^list]匹配 除 list 中的任意单一字符以外的字符
[c1-c2]匹配 c1-c2 中的任意单一字符 如:[0-9][a-z]
{string1,string2,...}匹配 string1 或 string2 (或更多)其一字符串
{c1..c2}匹配 c1-c2 中全部字符 如{1…10}

文件权限

命令说明
vimdiff比较几个文件内容 vimdiff a.txt b.txt c.txt
chown改变文件所有者 ,chown 所有者 要更改的文件名
chown 所有者:所属群组 文件名
chgrp改变文件所属群组
chmod修改文件权限 chmod 600 文件名
chmod o+w 文件、目录 给其他用户增加w的权限
chmod a-x 文件、目录 给所有用户去掉 x权限

在这里插入图片描述
在这里插入图片描述

  1. 0 位:确定文件类型
    • 普通文件
    • d:目录
    • I:连接文件
    • c:字符设备文件(键盘,鼠标)
    • b:块设备文件(硬盘)
  2. 1~3 位:文件的所有者拥有该文件的权限(r:可读,w:可写,x:可执行)
  3. 4~6 位:所属组(同用户组的)拥有该文件的权限
  4. 7~9 位:其他用户拥有该文件的权限
  5. 1 :如果是文件,表示硬链接的数目,如果是目录,则表示有多少个子目录
  6. 1213 :表示文件大小,如果是目录,则统一位 4096

rwx 作用到文件

  • r 表示可读(可以读取,查看)
  • w 表示可写(可以修改,但是不代表可以删除该文件,删除文件需有写权限
  • x 代表可执行

rwx 作用到目录

  • r 表示可读:可用 ls 查看目录内容
  • w 表示可写:可以修改目录,创建、删除、重命名目录
  • x 可执行,表示可以进入该目录

Shell 脚本

工作方式:

  • 交互式:用户每输入一条命令就立即执行
  • 批处理:一次性执行多个命令

Shell 脚本文件的名称可以任意,但建议加 .sh 后缀,表示脚本文件

查看当前系统使用命令行终端解释器:

[root@hadoop /]# echo $SHELL
/bin/bash

编写简单脚本

编写脚本:

[root@hadoop bin]# vim example.sh 
#!/bin/bash 
#For Example BY linuxprobe.com 
pwd 
ls -al 

第一行的脚本声明(#!)用来告诉系统使用哪种 Shell 解释器来执行该脚本;
第二行的注释信息(#)是对脚本功能和某些命令的介绍信息

运行脚本(直接运行 bash 文件名):

[root@hadoop bin]# bash example.sh
/usr/flink/flink-1.10.1/bin
总用量 620
drwxr-xr-x.  2 root root   4096 9月   2 22:11 .
drwxr-xr-x. 10 root root    156 5月   7 2020 ..
-rw-r--r--.  1 root root 501600 5月   7 2020 bash-java-utils.jar
-rwxr-xr-x.  1 root root  21960 5月   7 2020 config.sh

文件全路径运行:

更改文件权限
chmod u+x example.sh

运行脚本文件
./文件路径

接收用户参数

运行方法:

./脚本路径 参数(参数之间用空格隔开)

从 第0 ~ n 哥参数,分别对应脚本文件中 $0 ~ $n

echo:在显示器上显示文字

编写脚本文件:

[root@hadoop bin]# vim example1.sh
#!/bin/bash
echo "当前脚本名称:$0"
echo "共有$1个参数,分别为$*"
echo "第一个参数为$1,第四个参数为$4"

运行脚本文件:

[root@hadoop bin]# sh example1.sh 1 2 3 4 5 6
当前脚本名称:example1.sh
共有1个参数,分别为1 2 3 4 5 6
第一个参数为1,第四个参数为4

判断用户的参数

语句格式(注意 [] 中前后各有一个空格):

[ 条件表达式 ]

条件测试语句分类:

  • 文件测试语句
  • 逻辑测试语句
  • 整数值比较语句
  • 字符串比较语句
  1. 文件测试:使用指定条件判断文件是否存在或权限是否满足
    文件测试所用参数

示例:
判断是否为目录类型的文件以及一般文件(是 返回 0,否返回不为 0 的数)

#判断是否为目录类型文件
[root@hadoop /]# [ -d /bin ]
[root@hadoop /]# echo $?
0

# 判断是否为一般文件
[root@hadoop /]# [ -f /bin ]
[root@hadoop /]# echo $?
1

“&&” 与 “||” 与"!"的使用:

# 判断文件是否存在
[root@hadoop conf]# [ -e slaves ] && echo "该文件存在" 
该文件存在
[root@hadoop conf]# [ -e slave ] || echo "该文件不存在" 
该文件不存在

# && 与 || 同时使用
[root@hadoop conf]# [ -e slaves ] && echo "exit" || echo "not exit"
exit
  1. 可用的整数比较运算符:
    在这里插入图片描述

比较运算符的使用:

[root@hadoop conf]# [ 10 -eq 10 ]
[root@hadoop conf]# echo $?
0
[root@hadoop conf]# [ 10 -lt 8 ]
[root@hadoop conf]# echo $?
1
# 输出 Mem 的第四列
[root@hadoop conf]# free | grep Mem:| awk '{print $4}'
1380568
# 将上述值赋给 FreeMem
[root@hadoop conf]# FreeMem=`free | grep Mem:| awk '{print $4}'`
[root@hadoop conf]# echo $FreeMem
1380488
## 判断内存大小是否小于1024
[root@hadoop conf]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
  1. 常用的字符串比较运算符
    在这里插入图片描述

通过判断String是否存在,判断是否存在该值

[ "abc" != "abc" ] && echo "not equal" || echo "equal"

流程控制语句

if、for、while、case

if条件语句

  • 单分支结构
if
	···
then
	···
fi

判断文件夹是否存在,若不存在,则创建

[root@hadoop test]# vim mkderom.sh 
# !/bin/bash
DIR=$1
if [ ! -e $DIR ]
then
mkdir -p $DIR
echo "mkdir sucess"
fi

# 执行脚本
[root@hadoop test]# bash mkderom.sh test1
mkdir sucess
[root@hadoop test]# ls
mkderom.sh  test1
  • 双分支结构
if
	···
then
	···
else
	···
fi

$? 表示上一次命令的执行返回值

验证主机是否在线:

说明:
-c:尝试次数
-i:发送间隔
-W:等待超时时间

[root@hadoop test]# vim chkhost.sh 
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi

# 执行脚本
[root@hadoop test]# bash chkhost.sh  192.168.110.75
Host 192.168.110.75 is On-line.
  • 多分支结构
if
	···
then
	···
elif
	···
else
	···
fi

示例:

注:if 与 elif 后面均有 then,else 后面没有then

[root@hadoop test]# vim scoreSystem.sh 
#!/bin/bash
score=$1
if [ $score -ge 90 ] && [ $score -le 100 ]
then
echo "Great!"
elif [ $score -ge 70 ] && [ $score -lt 90 ]
then
echo "Good!"
else
echo "Bad!!!"
fi


# 执行
[root@hadoop test]# bash scoreSystem.sh  100
Great!
[root@hadoop test]# bash scoreSystem.sh  20
Bad!!!

for 条件循环语句

for 变量名 in 变量列表
do
	命令语句
done

示例1:输出一个文件中的信息

[root@hadoop test]# vim user.txt
A
B
C
D
E
F


# 编写脚本
[root@hadoop test]# vim forEach.sh 
for a in `cat user.txt`
do
echo $a
done

# 执行脚本
[root@hadoop test]# bash forEach.sh 

示例2:测试主机是否在线

# 新建txt文件
[root@hadoop test]# vim ipadds.txt
192.168.218.156
192.168.218.152
192.168.218.153

# 编写脚本
[root@hadoop test]# vim chkhost.sh 
#!/bin/bash
HLIST=$(cat ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi
done


# 执行脚本
[root@hadoop test]# bash chkhost.sh 
Host  is Off-line.
Host  is Off-line.
Host  is Off-line.
Host  is Off-line.

while 条件循环语句

while 条件测试操作
do
	命令序列
done

示例(猜价格):

[root@hadoop test]# vim Guess.sh 
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品价格在0~999之间,请猜一猜"
while true
do
read -p "请输入价格:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "答对了,实际价格 $PRICE"
echo "共猜 $TIMES 次"
elif [ $INT -gt $PRICE ] ; then
echo "太高了"
else
echo "太低了"
fi
done

case 条件测试语句

注:范围后要加右括号

case 变量值 in
范围1)
	命令序列1
;;
范围2)
	命令序列2
;;
*)
	命令序列3
esac

read 后面加 -p,默认不支持 “ \n ” 换行

示例:

# 编写脚本
[root@hadoop test]# vim GuessCase.sh
#!/bin/bash
read -p "请输入:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "$KEY为字母"
;;
[0-9])
echo "$KEY为数字"
;;
*)
echo "$KEY为其他字符"
esac

# 执行脚本
[root@hadoop test]# bash GuessCase.sh 
请输入:1
1为数字
[root@hadoop test]# bash GuessCase.sh 
请输入:a
a为字母
[root@hadoop test]# bash GuessCase.sh 
为其他字符[A

批量判断网络

ping

文件路径(脚本文件与地址文件放于同一目录下):
在这里插入图片描述
脚本文件:start_ping.sh

#!/bin/bash
HLIST=$(cat ping_list.txt)
echo "Wait a moment!!!"
let count=1
successArray=()
failArray=()
for IP in $HLIST
do
count=$(($count+1))
#p = ping -c 3 -i 0.2 -W 3 $1 &>
p=`ping -c 3 $IP|grep loss|awk '{print $6}'|awk -F "%" '{print $1}'`
if [ $p -eq 0 ]
then
        #echo "$IP SUCCESS"
        successArray[$count]=$IP
else
        #echo "$IP FAIL"
        failArray[$count]=$IP
fi
done

echo "--------------SUCCESS--------------"
for success in ${successArray[*]}
do
        echo "$success"
done

echo "---------------FAIL----------------"
for fail in ${failArray[*]}
do
        echo "$fail"
done
echo "----------------END----------------"

地址文件:ping_list.txt

127.0.0.1
128.0.0.2

telnet

文件路径:
在这里插入图片描述

脚本文件:start_telnet.sh

#P:PORT列表文件:telnet_list.txt(文件名可以自定义,但是只能跟脚本放在同一目录)
#使用方法: telnet.sh telnet_list.txt ;或者后台执行: sh telnet.sh telnet_list.txt >tellog.log 2>&1 &
#输出2个文件到result目录中: telnet_alive.txt 为端口通的;telnet_die.txt为端口不通的情况。
#文件内容格式如下,文件中每一行第一个字符#开头的行为注释行,不进行处理:
#127.0.0.1:631
echo "--------------------telnet is run start!----------------------------"
echo "telnet sucess file is : result/telnet_alive.txt  "
echo "telnet fail file is : result/telnet_die.txt "

#获取当前目录
BASEDIR=`dirname $0`
BASEDIR=`cd $BASEDIR;pwd`

#设置输出数据目录。
mkdir -p $BASEDIR/result
result_dir=$BASEDIR/result

#设置输入的IP和端口 文件名
telnet_list=$1
#如果输入参数为空,默认list文件为当前目录下的telnet_list.txt
#-z表示长度为0则为真
if [[ -z $telnet_list ]];
then
    telnet_list=telnet_list.txt
fi

echo "telnet test file is :  $telnet_list"

#重置上次执行的文件结果
mv $result_dir/telnet_alive.txt $result_dir/telnet_alive.txt.bak
mv $result_dir/telnet_die.txt $result_dir/telnet_die.txt.bak
mv $result_dir/telnet_result.txt $result_dir/telnet_result.txt.bak

#进行telnet并输出到响应文件
for line in `cat $BASEDIR/$telnet_list |grep -v ^# |grep -v ^$ `
do
        #获取测试IP
        ip=`echo $line | awk 'BEGIN{FS=":"} {print $1}'`
        #获取测试端口
        port=`echo $line | awk 'BEGIN{FS=":"} {print $2}'`
        #telnent一次并暂停1秒输出到result/telnet_result.txt 文件中,文件数据每一次循环会重置。
        echo "(sleep 1;) | telnet $ip $port"
        (sleep 1;) | telnet $ip $port > $result_dir/telnet_result.txt
        #查找成功响应的数据并输出到到result/telnet_alive.txt 文件中。
        successIp=`cat $result_dir/telnet_result.txt | grep -B 1 \] | grep [0-9] | awk '{print $3}' | cut -d '.' -f 1,2,3,4`
        if [ -n "$successIp" ]; then
                echo "$successIp:$port" >> $result_dir/telnet_alive.txt
        fi
done
#查找失败数据并输出到result/telnet_die.txt文件内。
cat $BASEDIR/$telnet_list $result_dir/telnet_alive.txt | sort | uniq -u |grep -v ^# > $result_dir/telnet_die.txt

echo "----------------------------SUCCESS-------------------------------"
#输出成功ip
for success in `cat $result_dir/telnet_alive.txt`
do
	echo "$success"
done

echo "-----------------------------FAIL---------------------------------"
#输出失败ip
for fail in `cat $result_dir/telnet_die.txt`
do
	echo "$fail"
done

echo "----------------------telnet is run over!-------------------------"

地址与端口文件(IP与端口号使用英文冒号隔开):telnet_list.txt

127.0.0.1:6379
128.0.0.2:6379

使用指令

yum 配置

/etc/yum.repos.d 路径下新建配置文件(后缀为 .repo)

配置文件:

[rhel7] 
name=rhel7 
baseurl=file:///media/cdrom 
enabled=1 
gpgcheck=0

文件说明:

[rhel-media] :Yum 软件仓库唯一标识符,避免与其他仓库冲突。
name=linuxprobe:Yum 软件仓库的名称描述,易于识别仓库用处。
baseurl=file:///media/cdrom:提供的方式包括 FTP(ftp://..)、HTTP(http://..)、本地
(file:///..)。
enabled=1:设置此源是否可用;1 为可用,0 为禁用。
gpgcheck=1:设置此源是否校验文件;1 为校验,0 为不校验。
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。

指定运行级别

Linux分为7个启动级别

  • 0 - 系统停机状态 halt
  • 1 - 单用户工作状态 Single user mode
  • 2 - 多用户状态(没有NFS) Multiuser, without NFS (The same as 3, if you do not have networking)
  • 3 - 多用户状态(有NFS) Full multiuser mode
  • 4 - 系统未使用,留给用户 unused
  • 5 - 图形界面 X11
  • 6 - 系统正常关闭并重新启动 reboot (Do NOT set initdefault to this)
    centos6及之前的版本中,系统运行级别通过/etc/inittab文件进行设置和控制,但在centos7中,对这个文件的设置将不会对系统运行级别产生影响,这也是centos7中变化比较大的一部分特性。

centos7运行级别对应表

init级别systemctl target
0shutdown.target
1emergency.target
2rescure.target
3multi-user.target
4
5graphical.target
6

获取当前运行级别:

systemctl get-default

在这里插入图片描述
默认级别为 3

设置应用级别:

init 级别对应的数字

帮助指令

man:获取帮助信息

help 指令

man 命令查看中常用按键与命令
在这里插入图片描述

man 命令结构
在这里插入图片描述

man手册进行了分册处理,分为8个区段,可直接使用对应字段的数字查看

man 1 li
区段说明
1一般命令
2系统调用
3库函数,涵盖了 C 标准函数库
4特殊文件(通常是/dev 中的设备)和驱动程序
5文件格式和约定
6游戏和屏保
7杂项
8系统管理命令和守护进程

文件管理

  1. Linux 中 . 表示当前目录, … 表示上一级目录 ,以 . 开头的文件为隐藏文件
命令说明
cd . .进入上一级目录
cd ~进入 home 目录
pwd获取当前目录
/usr/local绝对路径
usr/local相对路径,以当前目录为起点
. . /表示上一级目录
mkdir新建目录 mkdir aaa
mkdir -p新建多级目录 mkdir -p father/son
touch更改已有文件的时间戳 touch text
cp复制文件到新的路径 cp 文件 新的路径
复制一个目录 cp -r 要复制的目录 新的目录 -r表示递归
rm删除文件 rm 要删除的文件
强制删除 rm -f test
删除目录 rm -r family
强制删除目录 rm -rf family
mv移动文件(剪切) mv 源目录文件 新的目录
重命名文件 mv 旧的文件名 新得文件名
rename批量重命名

查看文件:

命令说明
cat打印内容到标准输出,正序显示 cat -n passwd(-n表示行号)
tac打印内容到标准输出,倒序显示
nl添加行号并打印,比 cat -n 更专业的行号打印命令
more分页查看文件,只能向一个方向滚动
less分屏查看文件,基于more与vi
打开后默认只显示一屏内容,终端底部显示当前阅读的进度。可以使用 Enter 键向下滚动一行,使用 Space 键向下滚动一屏,按下 h 显示帮助,q 退出。
head查看一个文件的前几行(默认10)
查看文件前一行 head -n 1 passwd
tail查看一个文件的末几行
tail 中的 -f 参数可以不停的读取某个文件的内容并显示
file查看文件类型
echo在终端输出字符串或变量提取后的值 输出当前环境路径 echo $PATH
history显示已经执行过的命令

使用 more 查看文件的参数:

操作说明
空白键(space)向下翻一页
Enter向下翻一行
q立即离开 more 不再显示文件内容
Ctrl+F向下滚动一屏
Ctrl+B返回上一屏
=输出当前行的行号
:f输出文件名与当前行的行号

使用 less 查看文件的参数:

命令说明
空白键向下翻动一页
pagedown向下翻动一页
pageup向上翻动一页
/ 字符向下搜寻功能 n:向下查找 N:向上查找
?字符向上搜寻功能 n:向上查找 N:向下查找
q离开less这个程序

nl 常用的参数:

  • -b : 指定添加行号的方式,主要有两种:
    • -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
    • -b t:只列出非空行的编号并列出(默认为这种方式)
  • -n : 设置行号的样式,主要有三种:
    • -n ln:在行号字段最左端显示
    • -n rn:在行号字段最右边显示,且不加 0
    • -n rz:在行号字段最右边显示,且加 0
      -w : 行号字段占用的位数(默认为 6 位)

查找文件按文件从大到小排序:

sudo du -s /var/ * | sort -nr

du   -s :仅显示目录或文件的总计数值
sort  -n:依照数值大小排序
sort  -r : 按照倒序排序
/var/ :指要查找的目录

wget 命令:用于在终端中下载网络文件,格式为“wget [参数] 下载地址”

wget 命令使用参数:
在这里插入图片描述

时间日期类

(因为Markdown原因,双引号上传有误,使用时将双引号换为英文格式下的双引号)

命令说明
date显示当前时间
date +%Y显示当前年份
date +%m显示当前月份
date +%d显示当前是哪一天
date “+%Y-%m-%d %H:%M:%S”显示年月日时分秒
date -s 字符串时间设置日期
date -s “20170901 8:30:00”设置当前时间

搜索查找

locate:可以快速定位文件路径,查询速度较快,基于数据库进行搜索

在第一次运行前,必须使用 updatedb 创建 locate 数据库

updatedb
locate hello.txt

grep管道符号 | :grep 过滤查找,表示将前一个命令的处理结果输出传递给后面的命令处理

grep 选项  查找内容 源文件

其中选项: -n:显示匹配行

文件系统操作与磁盘管理

命令说明
df查看磁盘容量
df -h容量显示单位转换为M

在这里插入图片描述

在这里插入图片描述

文件压缩

Windows 中:*.zip *.7z

Linux中:.rar,.gz,.xz,.bz2,.tar,.tar.gz,.tar.xz,*.tar.bz2

文件后缀名说明命令
*.zipzip 程序打包压缩的文件gzip
*.rarrar 程序压缩的文件
*.7z7zip 程序压缩的文件
*.tartar 程序打包,未压缩的文件
*.gzgzip 程序(GNU zip)压缩的文件gzip
*.xzxz 程序压缩的文件
*.bz2bzip2 程序压缩的文件bzip2
*.tar.gztar 打包,gzip 程序压缩的文件
*.tar.xztar 打包,xz 程序压缩的文件
*tar.bz2tar 打包,bzip2 程序压缩的文件
*.tar.7ztar 打包,7z 程序压缩的文件

gzip, zcat/zmore/zless/zgrep

命令可解压文件命令备注
gzipcompress、zip、gzipgzip [-cdtv#] 文件名 (附1)压缩后原始文件不存在
zcatgzzcat 文件名.gz读取压缩文件
zmoregzzmore文件名.gz读取压缩文件
zlessgzzless文件名.gz读取压缩文件
zgrepgzzgrep -n ‘http’ services.gz查找压缩关键字
egrep文字压缩文件中搜寻关键字

附1
-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6

bzip2, bzcat/bzmore/bzless/bzgrep

命令可解压文件命令备注
bzipbzip2 [-cdkzv#] 文件名 (附1)压缩后原始文件不存在
zcatgzzcat 文件名.gz读取压缩文件
zmoregzzmore文件名.gz读取压缩文件
zlessgzzless文件名.gz读取压缩文件
zgrepgzzgrep -n ‘http’ services.gz查找压缩关键字
egrep文字压缩文件中搜寻关键字

附2
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

  1. 使用 zip 打包文件夹:
zip -r -q -o a.zip /文件存放路径

说明:
-r 表示递归打包包含目录的文件内容
-q 表示安静模式,不向屏幕输出信息
-o 表示输出文件,其后紧跟文件名
tar -zcvf 打包压缩后的文件名 要打包压缩的文件

z:调用 gzip 压缩命令进行压缩
c:打包文件
v:显示运行过程
f:指定文件名
  1. 查看打包的文件:
du -h a.zip

du : 查看打包后文件大小
  1. 设置压缩级别
zip -r -9 -q -o a_9.zip /home -x ~/*.zip

添加了一个参数 : -(1~9) 用来设置压缩级别,1表示最快压缩,但体积大;9表示体积最小但耗时最久

-x :排除上次创建的 zip 文件

查看默认压缩级别

du -h -d 0 *.zip ~ | sort

-h : 有单位
-d : 查看文件的深度,其后紧跟的数字表示深度
  1. 创建加密压缩 zip 包
zip -r -l -e -o a_psw.zip /文件位置

-l : 换行效果

文件解压(unzip)

使用安静模式(-q),将文件解压到指定目录:

unzip -q a.zip -d 解压目录

若目录不存在,会自动创建
tar [-xvf] 压缩文件 -C 目录

-x 解压
-C 解压到指定位置

查看压缩文件中的内容(-l):

unzip -l a.zip

解压时指定编码类型:

unzip -0 GBK 压缩文件名称

tar:打包指令,打包的文件为 .tar.gz 文件

tar 选项  xxx.tar.gz  打包的内容/目录

选项内容:

选项功能
-c产生 .tar 打包文件
-v显示详细信息
-f指定压缩后的文件名
-z打包同时压缩
-x解包 .tar 文件

系统进程

  1. ps 命令用于查看系统中的进程状态,格式为“ps [参数]”。

ps 命令常用参数
在这里插入图片描述

常用进程状态

  • R(运行):进程正在运行或在运行队列中等待。
  • S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
  • D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
  • Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
  • T(停止):进程收到停止信号后停止运行。

ps aux 命令结果说明(ps允许参数不加“-”号):
在这里插入图片描述

  1. top 命令用于动态监控进程活动与系统负载等信息

top 命令相当强大,能够动态地查看系统运维状态,完全将它看作 Linux 中的“强化版的
Windows 任务管理器”。

数据说明:

  • 第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5分钟、15 分钟内的平均值,数值越小意味着负载越低)。
  • 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
  • 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
    第 3 行中的数据均为 CPU 数据并以百分比格式显示,例如“97.1 id”意味着有 97.1%的 CPU 处理器资源处于空闲。
  • 第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
  • 第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
    在这里插入图片描述
PID - 进程标示号
USER - 进程所有者
PR - 进程优先级
NI - 进程优先级别数值
VIRT - 进程占用的虚拟内存值
RES - 进程占用的物理内存值
SHR - 进程使用的共享内存值
S - 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死
%CPU - 进程占用的CPU使用率
%MEM - 进程占用的物理内存百分比
TIME- 进程启动后占用的总的CPU时间
Command - 进程启动的启动命令名称
  1. pidof 命令用于查询某个指定服务进程的 PID 值,格式为“pidof [参数] [服务名称]”。

    pidof sshd

    每个进程的 PID 值是唯一的

  2. kill 命令用于终止某个指定 PID 的服务进程,格式为“kill [参数] [进程 PID]”

    kill 2156

  3. killall 命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [进
    程名称]”。

命令后面加&,则命令所在后台执行

系统状态检测

  1. ifconfog 获取网卡配置与网络状态
    在这里插入图片描述

  2. uname 查看内核与系统版本等信息

在使用 uname 命令时,一般会固定搭配上-a 参数来完整地查看当前系统的内核名称、主
机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统
名称等信息。

uname -a

如果要查看当前系统版本的详细信息,则需要查看 redhat-release 文件

cat /etc/redhat-release
  1. uptime 查看系统的负载信息
    以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。

    平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要超过 5。

  2. free 显示当前内存的使用量信息

使用 free -h 可以人性化的输出
在这里插入图片描述

在这里插入图片描述

  1. 查看当前主机的用户终端信息

在这里插入图片描述

  1. last 查看所有系统的登录记录
  2. history 显示历史执行的命令
    执行 history 命令能显示出当前用户在本地计算机
    中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,还可以自定义/etc/profile 文件中的
    HISTSIZE 变量值。在使用 history 命令时,如果使用-c 参数则会清空所有的命令历史记录。
清空历史记录信息
history -c
  1. sosreport 用于收集系统配置及架构信息并输出判断文档,格式为 sosreport

环境变量

查看环境变量:

# 列出当前的环境变量值
export -p

# 输出当前的PATH环境变量的值
echo $PATH
# 输出当前的HOME环境变量的值
echo $HOME

修改环境变量:

# 仅对当前 shell 终端生效,关闭 shell 终端就会失效
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

# 永久有效
vim ~/.bash_profile
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BORN(^-^)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值