admin管理员组文章数量:1604330
文章目录
- Linux 入门
- 概述
- Linux 的版本
- Linux 与 Windows 的区别
- VM和Linux的安装
- Centos下载地址
- 安装
- Liunx系统的目录结构
- 具体的目录结构
- Vi和Vim编辑器
- vi和vim的基本介绍
- vi和vim快捷键
- 开机、重启和用户登录注销
- 关机,重启命令
- 用户登录与注销
- 配置主机名称
- 配置网卡信息
- 用户管理
- 基本介绍
- 用户相关操作
- 用户组
- 文件管理
- 文件权限
- Shell 脚本
- 编写简单脚本
- 接收用户参数
- 判断用户的参数
- 流程控制语句
- if条件语句
- for 条件循环语句
- while 条件循环语句
- case 条件测试语句
- 批量判断网络
- ping
- telnet
- 使用指令
- yum 配置
- 指定运行级别
- 帮助指令
- 文件管理
- 时间日期类
- 搜索查找
- 文件系统操作与磁盘管理
- 文件压缩
- 文件解压(unzip)
- 系统进程
- 系统状态检测
- 环境变量
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/download/
阿里云站点:http://mirrors.aliyun/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
说明: 公司开发时候, 具体的情况是这样的
-
linux服务器是开发小组共享的.
-
正式上线的项目是运行在公网的.
-
因此程序员需要远程登录到centos进行项目管理或者开发.
-
远程登录客户端有 Xshell6,Xftp6 secureCRT
secureCRT安装
安装好之后 按照注册步骤自行注册 注册之后 打开crt 配置连接信息
注册FX 用来传递文件的
必须将注册机复制到安装目录下 才可以注册成功。
获取虚拟机中 ip 地址: ip addr
在 SecureCRT 中更改ip地址:
连接成功后:
Vi和Vim编辑器
vi和vim的基本介绍
所有的 Linux 系统都会内建 vi 文本编辑器。
Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
- 在线安装 vim
[root@localhost tmp]# yum -y install vim*
- 进入到 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快捷键
- 拷贝当前行 yy , 拷贝当前行向下的5行 5yy,并粘贴 p。【快捷键在正常模式下使用】
- 删除当前行 dd , 删除当前行向下的5行 5dd
- 在文件中查找某个单词 [命令模式下 /关键字 , 回车 查找 , 输入 n 就是查找下一个 ]
- 设置文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu]
- 编辑 /etc/profile 文件,使用快捷键到底文档的最末行[G]和最首行[gg] 【正常模式下】
- 在一个文件中输入 “hello” ,然后又撤销这个动作 u 【正常模式下】
- 编辑 /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命令,把内存中的数据写到磁盘中
用户登录与注销
基本介绍
-
登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用”su - 用户名命令来切换成系统管理员身份.
-
在提示符下输入 logout 即可注销用户【不同的shell 可能不同(logout exit)】
使用细节
logout 注销指令在图形**运行级别(简单提一下:0-6个级别)**无效,在 运行级别 3下有效.
配置主机名称
修改文件: vim /etc/hostname
重启主机后才能更新: shutdown -r now
配置网卡信息
vim /etc/sysconfig/network-scripts/ifcfg-ens33
文件名ifcfg-ens后的数字可能会不同,若要将文件名改为以 eth0 结尾的
- 全路径为 /etc/sysconfig/network-scripts/ifcfg-eth0
- 编辑/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 新的组名 用户名 |
删除组的时候,如果组中有用户,则不允许删除组
- 用户和组的相关文件:
-
/etc/passwd 文件
该文件不是可执行文件,而是系统密码文件,是用户(user)的配置文件,记录用户的各种信息,每行的含义为:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 -
/etc/shadow 文件
每行含义:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留 -
/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 | 打印死掉的进程 |
-m | 同am i ,mom 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权限 |
- 0 位:确定文件类型
- 普通文件
- d:目录
- I:连接文件
- c:字符设备文件(键盘,鼠标)
- b:块设备文件(硬盘)
- 1~3 位:文件的所有者拥有该文件的权限(r:可读,w:可写,x:可执行)
- 4~6 位:所属组(同用户组的)拥有该文件的权限
- 7~9 位:其他用户拥有该文件的权限
- 1 :如果是文件,表示硬链接的数目,如果是目录,则表示有多少个子目录
- 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
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
判断用户的参数
语句格式(注意 [] 中前后各有一个空格):
[ 条件表达式 ]
条件测试语句分类:
- 文件测试语句
- 逻辑测试语句
- 整数值比较语句
- 字符串比较语句
- 文件测试:使用指定条件判断文件是否存在或权限是否满足
示例:
判断是否为目录类型的文件以及一般文件(是 返回 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
- 可用的整数比较运算符:
比较运算符的使用:
[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"
- 常用的字符串比较运算符
通过判断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 |
---|---|
0 | shutdown.target |
1 | emergency.target |
2 | rescure.target |
3 | multi-user.target |
4 | 无 |
5 | graphical.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 | 系统管理命令和守护进程 |
文件管理
- 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
文件后缀名 | 说明 | 命令 |
---|---|---|
*.zip | zip 程序打包压缩的文件 | gzip |
*.rar | rar 程序压缩的文件 | |
*.7z | 7zip 程序压缩的文件 | |
*.tar | tar 程序打包,未压缩的文件 | |
*.gz | gzip 程序(GNU zip)压缩的文件 | gzip |
*.xz | xz 程序压缩的文件 | |
*.bz2 | bzip2 程序压缩的文件 | bzip2 |
*.tar.gz | tar 打包,gzip 程序压缩的文件 | |
*.tar.xz | tar 打包,xz 程序压缩的文件 | |
*tar.bz2 | tar 打包,bzip2 程序压缩的文件 | |
*.tar.7z | tar 打包,7z 程序压缩的文件 |
gzip, zcat/zmore/zless/zgrep
命令 | 可解压文件 | 命令 | 备注 |
---|---|---|---|
gzip | compress、zip、gzip | gzip [-cdtv#] 文件名 (附1) | 压缩后原始文件不存在 |
zcat | gz | zcat 文件名.gz | 读取压缩文件 |
zmore | gz | zmore文件名.gz | 读取压缩文件 |
zless | gz | zless文件名.gz | 读取压缩文件 |
zgrep | gz | zgrep -n ‘http’ services.gz | 查找压缩关键字 |
egrep | 文字压缩文件中搜寻关键字 |
附1
-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
bzip2, bzcat/bzmore/bzless/bzgrep
命令 | 可解压文件 | 命令 | 备注 |
---|---|---|---|
bzip | bzip2 [-cdkzv#] 文件名 (附1) | 压缩后原始文件不存在 | |
zcat | gz | zcat 文件名.gz | 读取压缩文件 |
zmore | gz | zmore文件名.gz | 读取压缩文件 |
zless | gz | zless文件名.gz | 读取压缩文件 |
zgrep | gz | zgrep -n ‘http’ services.gz | 查找压缩关键字 |
egrep | 文字压缩文件中搜寻关键字 |
附2
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
- 使用 zip 打包文件夹:
zip -r -q -o a.zip /文件存放路径
说明:
-r 表示递归打包包含目录的文件内容
-q 表示安静模式,不向屏幕输出信息
-o 表示输出文件,其后紧跟文件名
tar -zcvf 打包压缩后的文件名 要打包压缩的文件
z:调用 gzip 压缩命令进行压缩
c:打包文件
v:显示运行过程
f:指定文件名
- 查看打包的文件:
du -h a.zip
du : 查看打包后文件大小
- 设置压缩级别
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 : 查看文件的深度,其后紧跟的数字表示深度
- 创建加密压缩 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 文件 |
系统进程
ps
命令用于查看系统中的进程状态,格式为“ps [参数]”。
ps 命令常用参数
常用进程状态
- R(运行):进程正在运行或在运行队列中等待。
- S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
- D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
- Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
- T(停止):进程收到停止信号后停止运行。
ps aux 命令结果说明(ps允许参数不加“-”号):
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 - 进程启动的启动命令名称
-
pidof 命令用于查询某个指定服务进程的 PID 值,格式为“pidof [参数] [服务名称]”。
pidof sshd
每个进程的 PID 值是唯一的
-
kill 命令用于终止某个指定 PID 的服务进程,格式为“kill [参数] [进程 PID]”
kill 2156
-
killall 命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [进
程名称]”。
命令后面加&,则命令所在后台执行
系统状态检测
-
ifconfog 获取网卡配置与网络状态
-
uname 查看内核与系统版本等信息
在使用 uname 命令时,一般会固定搭配上-a 参数来完整地查看当前系统的内核名称、主
机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统
名称等信息。
uname -a
如果要查看当前系统版本的详细信息,则需要查看 redhat-release 文件
cat /etc/redhat-release
-
uptime 查看系统的负载信息
以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要超过 5。
-
free 显示当前内存的使用量信息
使用 free -h 可以人性化的输出
- 查看当前主机的用户终端信息
- last 查看所有系统的登录记录
- history 显示历史执行的命令
执行 history 命令能显示出当前用户在本地计算机
中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,还可以自定义/etc/profile 文件中的
HISTSIZE 变量值。在使用 history 命令时,如果使用-c 参数则会清空所有的命令历史记录。
清空历史记录信息
history -c
- sosreport 用于收集系统配置及架构信息并输出判断文档,格式为 sosreport
环境变量
查看环境变量:
# 列出当前的环境变量值
export -p
# 输出当前的PATH环境变量的值
echo $PATH
# 输出当前的HOME环境变量的值
echo $HOME
修改环境变量:
# 仅对当前 shell 终端生效,关闭 shell 终端就会失效
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
# 永久有效
vim ~/.bash_profile
版权声明:本文标题:四十三、Linux 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728452386a1158588.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论