文章目录
- Ubuntu
- apt
- ssh
- Linux目录结构
- 命令格式
- 常见文件类型
- 常用命令
- ls(查看文件列表)
- mkdir(创建目录)
- touch(创建文件)
- stat(查看文件的状态信息)
- 开机、重启和用户登录注销
- 关机&重启命令
- 用户登录和注销
- 用户管理
- 添加用户
- 指定/修改密码
- 删除用户
- 查询用户信息指令
- 切换用户
- 查看当前用户/登录用户
- 用户组
- 新增组
- 删除组
- 增加用户时直接加上组
- 修改用户的组
- 用户和组的相关文件
- /etc/passwd 文件
- /etc/shadow 文件
- /etc/group 文件
- 实用指令
- 指定运行级别
- 帮助指令
- 文件目录类
- pwd 指令
- ls指令
- cd 指令
- mkdir指令
- rmdir指令
- touch指令
- cp指令
- rm指令
- mv指令
- cat指令
- more指令
- less指令
- echo指令
- tail指令
- > 指令 和 >> 指令
- ln 指令
- history指令
- 时间日期类
- date指令-显示当前日期
- date指令-设置日期
- 搜索查找类
- find指令
- locate指令
- grep指令和 管道符号 |
- 压缩和解压类
- gzip/gunzip 指令
- zip/unzip 指令
- tar 指令
- 组管理和权限管理
- Vim使用
- vi和vim的基本介绍
- vi和vim常用的三种模式
- 一般模式
- 插入模式
- 命令行模式
- vi和vim模式的相互切换
- 一般模式→编辑模式
- 编辑模式→一般模式
- 一般模式→命令模式
- 命令模式→一般模式
- vi和vim快捷键
- 移动光标
- 移动一个字符或一行
- 行内移动
- 页内移动
- 页间移动
- 复制粘贴
- 撤销和重复
- 搜索匹配
- 替换和删除
- RPM与YUM
- 远程管理
- 网络配置
- IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
- 分区、挂载
- 定时任务
- 远程连接
- Shell编程
- 案例
- 分析系统资源性能瓶颈
Ubuntu
Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,
Ubuntu 是基于 GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团
队(Canonical Ltd)打造的。
Ubuntu 和 Centos 都是基于 GNU/Linux 内核的,因此基本使用和Centos是几乎一样的,它们的各种指令可以通用.
- 下载地址
- 设置Ubuntu支持中文
System Settings(系统设置)➡️ Language Support(语言支持)选项卡➡️Install / Remove Languages➡️Chinese(Simplified)➡️Apply Changes➡️鼠标单击“汉语(中国)”,当底色变化(表示选中了)后,按住鼠标左键不松手,向上拖动放置到第一位。
设置后不会即刻生效,需要下一次登录时才会生效。
- 给root用户设置密码并使用,
- 输入 sudo passwd 命令,输入一般用户密码并设定root用户密码。
- 设定root密码成功后,输入 su 命令,并输入刚才设定的root密码,就可以切换成
root了。提示符$代表一般用户,提示符#代表root用户。 - 输入 exit 命令,退出root并返回一般用户
apt
apt是Advanced Packaging Tool的简称,是一款安装包管理工具
sudo apt-get update
更新源
sudo apt-get install package
安装包
sudo apt-get remove package
删除包
sudo apt-cache search package
搜索软件包
sudo apt-cache show package
获取包的相关信息,如说明、大小、版本等
sudo apt-get install package --reinstall
重新安装包
sudo apt-get -f install
修复安装
sudo apt-get remove package --purge
删除包,包括配置文件等
sudo apt-get build-dep package
安装相关的编译环境
sudo apt-get upgrade
更新已安装的包
sudo apt-get dist-upgrade
升级系统
sudo apt-cache depends package
了解使用该包依赖那些包
sudo apt-cache rdepends package
查看该包被哪些包依赖
sudo apt-get source package
下载该包的源代码
ssh
SSH为Secure Shell的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;
SSH 为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。
- 安装SSH和启用
sudo apt-get install openssh-server
执行上面指令后,在当前这台Linux上就安装了SSH服务端和客户端。
service sshd restart
执行上面的指令,就启动了 sshd 服务。会监听端口22 - 使用ssh远程登录Ubuntu
- 登陆
ssh 用户名@IP
例如:ssh atguigu@192.168.188.130
使用ssh访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决- 登出
登出命令:exit或者logout
Linux目录结构
目录 | 说明 | 备注 |
---|---|---|
/root | 管理员root的加目录 | |
/home | 普通用户的默认家目录 | /home/bozai/home/heima |
/bin->/usr/bin | 普通用户的命令 | /usr/bin/date /usr/bin/ls |
/sbin—>/usr/sbin | 管理员使用的命令 | /usr/sbin/shutdown |
/usr/local | 第三方源码包默认安装目录 | 类似windows下 C:\Program Files |
/etc | 系统和服务相关配置文件 | /etc/passwd |
/var | 动态,可以变化的数据文件 | 日志文件(/var/log/xxx) |
/tmp | 临时文件存放目录 | 全局可写(系统或程序产生临时文件) |
/dev | 设备文件 | /dev/sda /dev/nvme0n1 |
/lib—>/usr/lib | 库文件 | 软连接文件 |
/proc | 虚拟的文件系统 | 反映出来的是内核,进程信息或实时状态 |
/boot | 系统内核,引导程序相关文件 | |
/media | 移动设备默认的挂载点 | |
/mnt | 手工挂载设备的挂载点 |
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
在Linux世界里,一切皆文件。
具体的目录结构:
/bin
(/usr/bin 、 /usr/local/bin)
• 是Binary的缩写, 这个目录存放着最经常使用的命令
/boot
存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储。
/etc
所有的系统管理所需要的配置文件和子目录 my.conf
/home
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib
系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。 d:/myshare
/opt
这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。
默认为空。
/root
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin
(/usr/sbin
、/usr/local/sbin
)
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux
[security-enhanced linux] 360
SELinux是一种安全子系统,它能控制程序只能访问特定文件。
/srv
service缩写,该目录存放一些服务启动之后需要提取的数据。
/sys
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs
/tmp
这个目录是用来存放一些临时文件的。
/usr
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
/usr/local
这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
/var
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。
包括各种日志文件。
命令格式
命令 | [选项] | 参数 |
---|---|---|
ls | -l | root |
常见文件类型
文件类型 | 描述 |
---|---|
字符设备(c) | 所有输入输出的设备,如:键盘、鼠标、显示器、打印机等 |
块设备(b) | 所有存储设备称之为块设备文件,如:软盘、磁盘、光盘、U盘、磁带、光驱等 |
软连接文件(l) | 类似于Windows下的快捷方式 |
目录文件(d) | 相当于Windows下的文件夹 |
普通文件(f或-) | 类似Windows下记事本、word等,可以使用相关命令进行编辑、查看文件内容 |
管道文件§ | 简单理解为程序或进程之间通讯的一种方式 |
套接字文件(s) | 简单理解为程序或进程之间通讯的一种方式 |
- file(判断文件类型)
file xxx
xxx:directory#目录:/root
xxx:ASCII text#普通的文本文件:/root/install.log
xxx:block special#块设备文件,存放数据:/dev/sda
xxx:character special#字符设备:/dev/tty1
xxx:symbolic link to bash#软连接文件:/bin/sh
常用命令
ls(查看文件列表)
ls -a # all,查看目录下的所有文件,包括隐藏文件
ls -l # 长列表显示
ls -h # human,以人性化方式显示出来
ls -d # 只列出目录名,不列出其他内容
ls -t # 按修改时间排序
ls -r # 逆序排列
ls -S # 按文件的大小排序
ls -i # 显示文件的inode号(索引号)
ls -R # 递归列出目录中的内容
ls -m # 用逗号分隔显示内容
mkdir(创建目录)
mkdir xxx;
mkdir -p xxx;# 级联创建
# 如果创建的目录的上一级目录不存在,就需要加-p参数;-p在前面和后面都可以
touch(创建文件)
touch xxx;#创建一个新的空文件(目标文件不存在)
touch xxx;#修改文件的时间(目标文件存在)# 注意:Linux下文件的命名规则
# 1. 文件名严格区分大小写 file FILE
# 2. 文件名不能包含特殊符号,如(/或*等)
# 3. 文件名最多可达255个字符
stat(查看文件的状态信息)
stat xxx;
[root@localhost ~]# stat anaconda-ks.cfg File: ‘anaconda-ks.cfg’Size: 5570 Blocks: 16 IO Block: 4096 regular file
Device: 801h/2049d Inode: 33554501 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-30 22:09:51.283000000 +0000
Modify: 2020-04-30 22:09:51.286000000 +0000
Change: 2020-04-30 22:09:51.286000000 +0000Birth: -# Access:文件的查看访问时间
# Modify:文件的修改时间
# Change:文件的属性时间,文件的大小、权限等信息发生改变时,该时间会变化
开机、重启和用户登录注销
关机&重启命令
shutdown –h now #立该进行关机
shudown -h 1 #"hello, 1 分钟后会关机了"
shutdown –r now #现在重新启动计算机
halt #关机,作用和上面一样.
reboot #现在重新启动计算机
sync #把内存的数据同步到磁盘.
注意细节:
不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
用户登录和注销
- 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用”su - 用户名’命令来切换成系统管理员身份.
- 在提示符下输入 logout 即可注销用户
使用细节: - logout 注销指令在图形运行级别无效,在运行级别 3下有效.
用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
添加用户
基本语法
useradd 用户名
应用案例
1)案例1:添加一个用户 xiaoming
细节说明
- 当创建用户成功后,会自动的创建和用户同名的家目录
- 也可以通过 useradd -d 指定目录 新的用户名,给新创建的用户指定家目录
指定/修改密码
passwd 用户名
应用案例
- 给xiaoming 指定密码
删除用户
基本语法
userdel 用户名
应用案例
- 删除用户xiaoming,但是要保留家目录
- 删除用户以及用户主目录
细节说明 - 是否保留家目录的讨论?
查询用户信息指令
基本语法
id 用户名
应用实例
案例1:请查询root 信息
细节说明
- 当用户不存在时,返回无此用户
切换用户
在操作Linux中,如果当前用户的权限不够,可以通过 su - 指令,切换到高权限用户,比如root
基本语法
su – 切换用户名
应用实例
- 创建一个用户zf, ,指定密码,然后切换到 zf.
细节说明 - 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
- 当需要返回到原来用户时,使用exit指令
查看当前用户/登录用户
基本语法
whoami/ who am I
用户组
类似于角色,系统可以对有共性的多个用户进行统一的管理。
新增组
• 指令
groupadd 组名
• 案例演示
删除组
• 指令(基本语法)
groupdel 组名
• 案例演示
增加用户时直接加上组
• 指令(基本语法)
useradd –g 用户组 用户名
增加一个用户 zwj, 直接将他指定到 wudang
修改用户的组
• 指令(基本语法)
usermod –g 用户组 用户名
• 案例演示
用户和组的相关文件
/etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow 文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group 文件
组(group)的配置文件,记录Linux包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
Linux基础篇
实用指令
指定运行级别
基本介绍:
运行级别说明:
0 :关机
1 :单用户【找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5 ,要修改默认的运行级别可改文件
/etc/inittab的id:5:initdefault:这一行中的数字
命令:init [012356]
应用实例:
案例1: 通过init 来切换不同的运行级别,比如动 5-3 , 然后关机。
指定运行级别
面试题:
如何找回root密码
课堂练习:
- 假设我们的root密码忘记了,请问如何找回密码
- 请设置我们的 运行级别,linux 运行后,直接进入到 命令行终端(3)
帮助指令
man 获得帮助信息
• 基本语法
man [命令或配置文件](功能描述:获得帮助信息)
• 应用实例
案例:查看ls命令的帮助信息
help指令
• 基本语法
help 命令 (功能描述:获得shell内置命令的帮助信息)
• 应用实例
案例:查看cd命令的帮助信息
百度帮助更直接
虽然上面两个都可以来获取指令帮助,但是需要英语功底,如果英语不太好的,我还是
推荐大家直接百度靠谱。
文件目录类
pwd 指令
• 基本语法
pwd (功能描述:显示当前工作目录的绝对路径)
• 应用实例
案例:显示当前工作目录的绝对路径
ls指令
• 基本语法
ls [选项] [目录或是文件]
• 常用选项
-a :显示当前目录所有的文件和目录,包括隐藏的。
-l :以列表的方式显示信息
• 应用实例
案例:查看当前目录的所有内容信息
cd 指令
• 基本语法
cd [参数] (功能描述:切换到指定目录)
• 常用参数
绝对路径和相对路径
cd ~ 或者cd :回到自己的家目录
cd … 回到当前目录的上一级目录
• 应用实例
案例1:使用绝对路径切换到root目录
案例2: 使用相对路径到/root 目录
案例3:表示回到当前目录的上一级目录
案例4:回到家目录
mkdir指令
mkdir指令用于创建目录
• 基本语法
mkdir [选项] 要创建的目录
• 常用选项
-p :创建多级目录
• 应用实例
案例1:创建一个目录 /home/dog
案例2:创建多级目录 /home/animal/tiger
rmdir指令
rmdir指令删除空目录
• 基本语法
rmdir [选项] 要删除的空目录
• 应用实例
案例1:删除一个目录 /home/dog
• 使用细节
rmdir 删除的是空目录,如果目录下有内容时无法删除的。
提示:如果需要删除非空目录,需要使用 rm -rf 要删除的目录
touch指令
touch指令创建空文件
• 基本语法
touch 文件名称
• 应用实例
案例1: 创建一个空文件 hello.txt
cp指令
cp 指令拷贝文件到指定目录
• 基本语法
cp [选项] source dest
• 常用选项
-r :递归复制整个文件夹
• 应用实例
案例1: 将 /home/aaa.txt 拷贝到 /home/bbb 目录下
案例2: 递归复制整个文件夹,举例
• 使用细节
强制覆盖不提示的方法:\cp
rm指令
rm 指令移除文件或目录
• 基本语法
rm [选项] 要删除的文件或目录
• 常用选项
-r :递归删除整个文件夹
-f : 强制删除不提示
• 应用实例
案例1: 将 /home/aaa.txt 删除
案例2: 递归删除整个文件夹 /home/bbb
• 使用细节
强制删除不提示的方法:带上 -f 参数即可
mv指令
mv 移动文件与目录或重命名
• 基本语法
mv oldNameFile newNameFile (功能描述:重命名)
mv /temp/movefile /targetFolder (功能描述:移动文件)
• 应用实例
案例1: 将 /home/aaa.txt 文件 重新命名为 pig.txt
案例2:将 /home/pig.txt 文件 移动到 /root 目录下
cat指令
cat 查看文件内容
• 基本语法
cat [选项] 要查看的文件
• 常用选项
-n :显示行号
• 应用实例
案例1: /ect/profile 文件内容,并显示行号
• 使用细节
cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more
more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
more指令中内置了若干快捷键,详见操作说明
• 基本语法
more 要查看的文件
• 操作说明
• 应用实例
案例: 采用more查看文件
/etc/profile
操作 功能说明
空白键 (space) 代表向下翻一页;
Enter 代表向下翻『一行』;
q 代表立刻离开 more ,不再显示该文件内容。
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
less指令
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支
持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是
根据显示需要加载内容,对于显示大型文件具有较高的效率。
• 基本语法
less 要查看的文件
• 操作说明
• 应用实例
案例: 采用less查看一个
大文件文件
/opt/金庸-射雕英雄传txt精校版.txt
操作 功能说明
空白键 向下翻动一页;
[pagedown] 向下翻动一页
[pageup] 向上翻动一页;
/字串 向下搜寻『字串』的功能;n:向下查找;N:向上查找;
?字串 向上搜寻『字串』的功能;n:向上查找;N:向下查找;
q 离开 less 这个程序;
echo指令
echo输出内容到控制台。
• 基本语法
echo [选项] [输出内容]
• 应用实例
案例: 使用echo 指令输出环境变量
案例: 使用echo 指令输出 hello,world!
head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
• 基本语法
head 文件 (功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)
• 应用实例
案例: 查看/etc/profile 的前面5行代码
tail指令
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。
• 基本语法
- tail 文件 (功能描述:查看文件头10行内容)
- tail -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)
- tail -f 文件 (功能描述:实时追踪该文档的所有更新)
• 应用实例
案例1: 查看/etc/profile 最后5行的代码
案例2: 实时监控 mydate.txt , 看看到文件有变化时,是否看到, 实时的追加日期
> 指令 和 >> 指令
> 输出重定向和 >> 追加
• 基本语法
- ls -l >文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
- ls -al >>文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
- cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)
- echo “内容”>> 文件
• 应用实例
案例1: 将 /home 目录下的文件列表 写入到 /home/info.txt 中
案例2: 将当前日历信息 追加到 /home/mycal 文件中
ln 指令
软链接也成为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
• 基本语法
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
• 应用实例
案例1: 在/home 目录下创建一个软连接 linkToRoot,连接到 /root 目录
案例2: 删除软连接 linkToRoot
• 细节说明
当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。
history指令
查看已经执行过历史命令,也可以执行历史指令
• 基本语法
history (功能描述:查看已经执行过历史命令)
• 应用实例
案例1: 显示所有的历史命令
案例2: 显示最近使用过的10个指令。
案例3:执行历史编号为5的指令
时间日期类
date指令-显示当前日期
• 基本语法
- date (功能描述:显示当前时间)
- date +%Y (功能描述:显示当前年份)
- date +%m (功能描述:显示当前月份)
- date +%d (功能描述:显示当前是哪一天)
- date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒)
• 应用实例
案例1: 显示当前时间信息
案例2: 显示当前时间年月日
案例3: 显示当前时间年月日时分秒
date指令-设置日期
• 基本语法
date -s 字符串时间
• 应用实例
案例1: 设置系统当前时间 , 比如设置成 2020-11-11 11:22:22
cal指令
查看日历指令
• 基本语法
cal [选项] (功能描述:不加选项,显示本月日历)
• 应用实例
案例1: 显示当前日历
案例2: 显示2020年日历
搜索查找类
find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终
端。
• 基本语法
find [搜索范围] [选项]
• 选项说明
• 应用实例
案例1: 按文件名:根据名称查找/home 目录下的hello.txt文件
案例2:按拥有者:查找/opt目录下,用户名称为 nobody的文件
案例3:查找整个linux系统下大于200m的文件(+n 大于 -n小于 n等于)
选项 功能
-name<查询方式> 按照指定的文件名查找模式查找文件
-user<用户名> 查找属于指定用户名所有文件
-size<文件大小> 按照指定的文件大小查找文件。
locate指令
locaate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径
的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。
为了保证查询结果的准确度,管理员必须定期更新locate时刻。
• 基本语法
locate 搜索文件
• 特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate
数据库。
• 应用实例
案例1: 请使用locate 指令快速定位 hello.txt 文件所在目录
grep指令和 管道符号 |
grep 过滤查找 , 管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
• 基本语法
grep [选项] 查找内容 源文件
• 常用选项
• 应用实例
案例1: 请在 hello.txt 文件中,查找 “yes” 所在行,并且显示行号
选项 功能
-n 显示匹配行及行号。
-i 忽略字母大小写
压缩和解压类
gzip/gunzip 指令
gzip 用于压缩文件, gunzip 用于解压的
• 基本语法
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
• 应用实例
案例1: gzip压缩, 将 /home下的 hello.txt文件进行压缩
案例2: gunzip压缩, 将 /home下的 hello.txt.gz 文件进行解压缩
zip/unzip 指令
zip 用于压缩文件, unzip 用于解压的,这个在项目打包发布中很有用的
• 基本语法
zip [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
• zip常用选项
-r:递归压缩,即压缩目录
• unzip的常用选项
-d<目录> :指定解压后文件的存放目录
• 应用实例
案例1: 将 /home下的 所有文件进行压缩成 mypackage.zip
案例2: 将 mypackge.zip 解压到 /opt/tmp 目录下
tar 指令
tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。
• 基本语法
tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
• 选项说明
• 应用实例
案例1: 压缩多个文件,将 /home/a1.txt 和 /home/a2.txt 压缩成 a.tar.gz
案例2: 将/home 的文件夹 压缩成 myhome.tar.gz
案例3: 将 a.tar.gz 解压到当前目录
选项 功能
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件
Linux实操篇
组管理和权限管理
Linux组基本介绍
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件
有所有者、所在组、其它组的概念。
- 所有者
- 所在组
- 其它组
- 改变用户所在的组
文件/目录 所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。
查看文件的所有者 - 指令:ls –ahl
- 应用实例
修改文件所有者
• 指令:chown 用户名 文件名
• 应用案例
要求:使用root 创建一个文件apple.txt ,然后将其所有者修改成 zhangfei
组的创建
基本指令
groupadd 组名
应用实例:
创建一个组, ,monster
创建一个用户 fox ,并放入到 monster组中
文件/目录 所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。
查看文件/目录所在组
• 基本指令
ls –ahl
• 应用实例
修改文件所在的组
• 基本指令
chgrp 组名 文件名
• 应用实例
使用root用户创建文件 orange.txt ,看看当前这个文件属于哪个组,然后将这个文
件所在组,修改到 fruit组。
其它组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某
个用户所在的组。
改变用户所在组 - usermod –g 组名 用户名
- usermod –d 目录名 用户名 改变该用户登陆的初始目录。
应用实例
将 zwj 这个用户从原来所在组,修改到 wudang 组。
权限的基本介绍
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
0-9位说明 - 第0位确定文件类型(d, - , l , c , b)
- 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
- 第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
- 第7-9位确定其他用户拥有该文件的权限 —Other
rwx权限详解
rwx作用到文件 - [ r ]代表可读(read): 可以读取,查看
- [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是
对该文件所在的目录有写权限,才能删除该文件. - [ x ]代表可执行(execute):可以被执行
rwx作用到目录 - [ r ]代表可读(read): 可以读取,ls查看目录内容
- [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
- [ x ]代表可执行(execute):可以进入该目录
文件及目录权限实际案例
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
10个字符确定不同用户能对文件干什么
第一个字符代表文件类型: 文件 (-),目录(d),链接(l)
其余字符每3个一组(rwx) 读® 写(w) 执行(x)
第一组rwx : 文件拥有者的权限是读、写和执行
第二组rw- : 与文件拥有者同一组的用户的权限是读、写但不能执行
第三组r-- : 不与文件拥有者同组的其他用户的权限是读不能写和执行
可用数字表示为: r=4,w=2,x=1 因此rwx=4+2+1=7
1 文件:硬连接数或 目录:子目录数
root 用户
root 组
1213 文件大小(字节),如果是文件夹,显示 4096字节
Feb 2 09:39 最后修改日期
abc 文件名
修改权限-chmod
基本说明:
通过chmod指令,可以修改文件或者目录的权限。
第一种方式:+ 、-、= 变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和) - chmod u=rwx,g=rx,o=x 文件目录名
- chmod o+w 文件目录名
- chmod a-x 文件目录名
• 案例演示 - 给abc文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。
- 给abc文件的所有者除去执行的权限,增加组写的权限
- 给abc文件的所有用户添加读的权限
修改权限-chmod
第二种方式:通过数字变更权限
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名
• 案例演示
要求:将 /home/abc.txt 文件的权限修改成 rwxr-xr-x, 使用给数字的方式实现:
修改文件所有者-chown
基本介绍
chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录 则使其下所有子文件或目录递归生效
案例演示: - 请将 /home/abc .txt 文件的所有者修改成 tom
- 请将 /home/kkk 目录下所有的文件和目录的所有者都修改成tom
修改文件所在组-chgrp
基本介绍
chgrp newgroup file 改变文件的所有组
案例演示: - 请将 /home/abc .txt 文件的所在组修改成 shaolin (少林)
- 请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 shaolin(少林)
最佳实践-警察和土匪游戏
police , bandit
jack, jerry: 警察
xh, xq: 土匪
(1) 创建组
(2) 创建用户
(3) jack 创建一个文件,自己可以读写,本组人可以读,其它组没人任何权限
(4) jack 修改该文件,让其它组人可以读, 本组人可以读写
(5) xh 投靠 警察,看看是否可以读写.
练习文件权限管理[课堂练习]
建立两个组(神仙,妖怪)
建立四个用户(唐僧,悟空,八戒,沙僧)
设置密码
把悟空,八戒放入妖怪 唐僧 沙僧 在神仙
用悟空建立一个文件 (monkey.java 该文件要输出 i am monkey)
给八戒一个可以r w 的权限
八戒修改monkey.java 加入一句话( i am pig)
唐僧 沙僧 对该文件没有权限
把 沙僧 放入妖怪组
让沙僧 修改 该文件 monkey, 加入一句话 (“我是沙僧,我是妖怪!”);
课后练习
1用root登录,建立用户mycentos,自己设定密码
2.用mycentos登录,在主目录下建立目录test/t11/t1
3.在t1中建立一个文本文件aa,用vi编辑其内容为ls –al
4.改变aa的权限为可执行文件[可以将当前日期追加到一个文件],运行该文件./aa
5.删除新建立的目录test/t11/t1
6.删除用户mycentos及其主目录中的内容
7.将linux设置成进入到图形界面的
- 重新启动linux或关机
Vim使用
vi和vim的基本介绍
所有的 Linux 系统都会内嵌vi文本编辑器。
vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
vi和vim常用的三种模式
一般模式
以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、贴上』来处理你的文件数据。
插入模式
按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按i即可.
命令行模式
在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!
vi和vim模式的相互切换
一般模式→编辑模式
i 在光标左侧插入正文
a 在光标右侧插入正文
I 在光标所在行的开头插入
A 在光标所在行的末尾插入
o 在光标所在行的下一行增添新行
O 在光标所在行的上一行增添新行
编辑模式→一般模式
Esc
一般模式→命令模式
:
命令模式→一般模式
Esc
vi和vim快捷键
移动光标
移动一个字符或一行
k ↑
j ↓
h ←
l →
行内移动
w 右移光标到下一个字的开头;
e 右移光标到一个字的末尾;
b 左移光标到前一个字的开头;
0 数字0,左移光标到本行的开始;
$ 右移光标,到本行的末尾;
^ 移动光标,到本行的第一个非空字符。
页内移动
H 将光标移到屏幕上的起始行(或最上行);
M 将光标移到屏幕中间;
L 将光标移到屏幕最后一行。
同样需要注意字母的大小写。H
和 L
命令还可以加数字。如 2H
表示将光标移到屏幕的第2行,3L
表示将光标移到屏幕的倒数第3行。
页间移动
ctrl+f 在文件中前移一页(相当于 page down);
ctrl+b 在文件中后移一页(相当于 page up);
更大范围的移动:
* 当光标停留在一个单词上,* 键会在文件内搜索该单词,并跳转到下一处;
# 当光标停留在一个单词上,# 在文件内搜索该单词,并跳转到上一处;
(/) 移动到 前/后 句 的开始;
{/} 跳转到 当前/下一个 段落 的开始。
g_ 到本行最后一个不是 blank 字符的位置。
fa 到下一个为 a 的字符处,你也可以fs到下一个为s的字符。
t, 到逗号前的第一个字符。逗号可以变成其它字符。
3fa 在当前行查找第三个出现的 a。
F/T 和 f 和 t 一样,只不过是相反方向;
gg 将光标定位到文件第一行起始位置;
G 将光标定位到文件最后一行起始位置;
NG或Ngg 将光标定位到第 N 行的起始位置。
复制粘贴
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可将其粘贴到正文中的指定位置。完成这一操作的命令是:
p 小写字母 p,将缓冲区的内容粘贴到光标的后面;
P 大写字母 P,将缓冲区的内容粘贴到光标的前面。
如果缓冲区的内容是字符或字,直接粘贴在光标的前面或后面;如果缓冲区的内容为整行正文,执行上述粘贴命令将会粘贴在当前光标所在行的上一行或下一行。
注意上述两个命令中字母的大小写。Vim 编辑器经常以一对大、小写字母(如 p
和 P
)来提供一对相似的功能。通常,小写命令在光标的后面进行操作,大写命令在光标的前面进行操作。
有时需要复制一段正文到新位置,同时保留原有位置的内容。这种情况下,首先应当把指定内容复制(而不是剪切)到内存缓冲区。完成这一操作的命令是:
yy 复制当前行到内存缓冲区;
nyy 复制 n 行内容到内存缓冲区;
5yy 复制 5 行内容到内存缓冲区;
“+y 复制 1 行到操作系统的粘贴板;
“+nyy 复制 n 行到操作系统的粘贴板。
撤销和重复
在编辑文档的过程中,为消除某个错误的编辑命令造成的后果,可以用撤消命令。另外,如果用户希望在新的光标位置重复前面执行过的编辑命令,可用重复命令。
u 撤消前一条命令的结果;
. 重复最后一条修改正文的命令。
搜索匹配
和许多先进的编辑器一样,Vim 提供了强大的字符串搜索功能。要查找文件中指定字或短语出现的位置,可以用Vim直接进行搜索,而不必以手工方式进行。搜索方法是:键入字符 /
,后面跟以要搜索的字符串,然后按回车键。编辑程序执行正向搜索(即朝文件末尾方向),并在找到指定字符串后,将光标停到该字符串的开头;键入 n
命令可以继续执行搜索,找出这一字符串下次出现的位置。用字符 ?
取代 /
,可以实现反向搜索(朝文件开头方向)。例如:
/str1 正向搜索字符串 str1;
n 继续搜索,找出 str1 字符串下次出现的位置;
N 继续搜索,找出 str1 字符串上一次出现的位置;
?str2 反向搜索字符串 str2 。
无论搜索方向如何,当到达文件末尾或开头时,搜索工作会循环到文件的另一端并继续执行。
Vim中执行搜索匹配最强大的地方是结合 正则表达式 来搜索,后续将会介绍。
替换和删除
Vim常规的删除命令是 d
、 x
(前者删除 行
,后者删除 字符
),结合Vim的其他特性可以实现基础的删除功能。将光标定位于文件内指定位置后,可以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多个字符或一行、多行。例如:
rc 用 c 替换光标所指向的当前字符;
nrc 用 c 替换光标所指向的前 n 个字符;
5rA 用 A 替换光标所指向的前 5 个字符;
x 删除光标所指向的当前字符;
nx 删除光标所指向的前 n 个字符;
3x 删除光标所指向的前 3 个字符;
dw 删除光标右侧的字;
ndw 删除光标右侧的 n 个字;
3dw 删除光标右侧的 3 个字;
db 删除光标左侧的字;
ndb 删除光标左侧的 n 个字;
5db 删除光标左侧的 5 个字;
dd 删除光标所在行,并去除空隙;
ndd 删除(剪切) n 行内容,并去除空隙;
3dd 删除(剪切) 3 行内容,并去除空隙;
其他常用的删除命令有:
d$ 从当前光标起删除字符直到行的结束;
d0 从当前光标起删除字符直到行的开始;
J 删除本行的回车符(CR),并和下一行合并。
Vim常规的替换命令有 c
和 s
,结合Vim的其他特性可以实现基础的替换功能,不过替换命令执行以后,通常会由 编辑模式 进入 插入模式 :
s 用输入的正文替换光标所指向的字符;
S 删除当前行,并进入编辑模式;
ns 用输入的正文替换光标右侧 n 个字符;
nS 删除当前行在内的 n 行,并进入编辑模式;
cw 用输入的正文替换光标右侧的字;
cW 用输入的正文替换从光标到行尾的所有字符(同 c$ );
ncw 用输入的正文替换光标右侧的 n 个字;
cb 用输入的正文替换光标左侧的字;
ncb 用输入的正文替换光标左侧的 n 个字;
cd 用输入的正文替换光标的所在行;
ncd 用输入的正文替换光标下面的 n 行;
c$ 用输入的正文替换从光标开始到本行末尾的所有字符;
c0 用输入的正文替换从本行开头到光标的所有字符。
RPM与YUM
rpm包的管理
介绍:
一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成
具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工
具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的
标志,但理念是通用的。
Linux的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标
准了。
rpm包的管理
rpm包的简单查询指令:
查询已安装的rpm列表 rpm –qa|grep xx
rpm包名基本格式:
一个rpm包名:firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用操作系统: el6.centos.x86_64
表示centos6.x的64位系统
如果是i686、i386表示32位系统,noarch表示通用。。
rpm包的管理
rpm包的其它查询指令:
rpm -qa :查询所安装的所有rpm软件包
rpm -qa | more
rpm -qa | grep X [rpm -qa | grep firefox ]
rpm -q 软件包名 :查询软件包是否安装
rpm -q firefox
rpm -qi 软件包名 :查询软件包信息
rpm -qi file
rpm -ql 软件包名 :查询软件包中的文件
rpm -ql firefox
rpm -qf 文件全路径名 查询文件所属的软件包
rpm -qf /etc/passwd
rpm -qf /root/install.log
rpm包的管理
卸载rpm包:
• 基本语法
rpm -e RPM包的名称
• 应用案例
- 删除firefox 软件包
• 细节讨论 - 如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
如: $ rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1 - 如果我们就是要删除 foo这个rpm 包,可以增加参数 --nodeps ,就可以强制删除,但是一
般不推荐这样做,因为依赖于该软件包的程序可能无法运行
如:$ rpm -e --nodeps foo
rpm包的管理
安装rpm包:
• 基本语法
rpm -ivh RPM包全路径名称
• 参数说明
i=install 安装
v=verbose 提示
h=hash 进度条
• 应用实例 - 演示卸载和安装firefox浏览器
yum
介绍:
Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定
的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并
且一次安装所有依赖的软件包。
yum的基本指令
• 查询yum服务器是否有需要安装的软件
yum list|grep xx软件列表
• 安装指定的yum包
yum install xxx 下载安装
yum应用实例:
案例:请使用yum的方式来安装firefox
远程管理
基本介绍
- 在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一
个ID号。 - 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例
如www服务器。 - 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目
前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法
看到的进程,通常使用后台方式执行。 - 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到
关机才才结束。
显示系统执行的进程
基本介绍
ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。
可以不加任何参数.
显示系统执行的进程
ps详解 - 指令:ps –aux|grep xxx ,比如我看看有没有sshd服务
- 指令说明
• System V展示风格
• USER:用户名称
• PID:进程号
• %CPU:进程占用CPU的百分比
• %MEM:进程占用物理内存的百分比
• VSZ:进程占用的虚拟内存大小(单位:KB)
• RSS:进程占用的物理内存大小(单位:KB)
• TT:终端名称,缩写 .
• STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通
优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
• STARTED:进程的启动时间
• TIME:CPU时间,即进程使用CPU的总时间
• COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
显示系统执行的进程
应用实例
要求:以全格式显示当前所有的进程,查看进程的父进程。
• ps -ef是以全格式显示当前所有的进程
• -e 显示所有进程。-f 全格式。
• ps -ef|grep xxx
• 是BSD风格
• UID:用户ID
• PID:进程ID
• PPID:父进程ID
• C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,
执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
• STIME:进程启动的时间
• TTY:完整的终端名称
• TIME:CPU时间
• CMD:启动进程所用的命令和参数
终止进程kill和killall
介绍:
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该
进程。使用kill命令来完成此项任务。
基本语法:
kill [选项] 进程号(功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负
载过大而变得很慢时很有用)
常用选项:
-9 :表示强迫进程立即停止
最佳实践:
案例1:踢掉某个非法登录用户
案例2: 终止远程登录服务sshd, 在适当时候再次重启sshd服务
案例3: 终止多个gedit 编辑器
案例4:强制杀掉一个终端
查看进程树pstree
基本语法:
pstree [选项] ,可以更加直观的来看进程信息
常用选项:
-p :显示进程的PID
-u :显示进程的所属用户
应用实例:
案例1:请你树状的形式显示进程的pid
案例2:请你树状的形式进程的用户id
服务(service)管理
介绍:
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程
序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是Linux中非常重要的
知识点。【原理图】
service管理指令:
service 服务名 [start | stop | restart | reload | status]
在CentOS7.0后 不再使用service ,而是 systemctl
使用案例: - 查看当前防火墙的状况,关闭防火墙和重启防火墙。
细节讨论: - 关闭或者启用防火墙后,立即生效。[telnet 测试 某个端口即可]
- 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
- 如果希望设置某个服务自启动或关闭永久生效,要使用chkconfig指令,马上讲。
服务(service)管理
查看服务名:
方式1:使用setup -> 系统服务 就可以看到。
方式2: /etc/init.d/服务名称
服务(service)管理
服务的运行级别(runlevel):
查看或者修改默认级别: vi /etc/inittab
Linux系统有7种运行级别(runlevel):常用的是级别3和5
• 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
• 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
• 运行级别2:多用户状态(没有NFS),不支持网络
• 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
• 运行级别4:系统未使用,保留
• 运行级别5:X11控制台,登陆后进入图形GUI模式
• 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
开机的流程说明:
开机 BIOS /boot init进程1 运行级别 运行级对应的服务
服务(service)管理
一个思考题
如果不小心将默认的运行级别设置成 0 或者 7 ,怎么处理?
进入单用户模式,修改成正常的即可。。。
服务(service)管理
chkconfig指令
• 介绍
通过chkconfig 命令可以给每个服务的各个运行级别设置自启动/关闭
• 基本语法 - 查看服务 chkconfig --list|grep xxx
- chkconfig 服务名 --list
- chkconfig --level 5 服务名 on/off
服务(service)管理
chkconfig指令
• 应用实例: - 案例1: 请显示当前系统所有服务的各个运行级别的运行状态
- 案例2 :请查看sshd服务的运行状态
- 案例3: 将sshd 服务在运行级别5下设置为不自动启动,看看有什么效果?
- 案例4: 当运行级别为5时,关闭防火墙。
- 案例5: 在所有运行级别下,关闭防火墙
- 案例6: 在所有运行级别下,开启防火墙
• 使用细节 - chkconfig重新设置服务后自启动或关闭,需要重启机器reboot才能生效.
动态监控进程
介绍:
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top
在执行一段时间可以更新正在运行的的进程。
基本语法:
top [选项]
选项说明:
选项 功能
-d 秒数 指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的
命令:
-i 使top不显示任何闲置或者僵死进程。
-p 通过指定监控进程ID来仅仅监控某个进程的状态。
动态监控进程
交互操作说明:
应用实例:
案例1.监视特定用户
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名,即可
案例2:终止指定的进程。
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程ID号
案例3:指定系统状态更新的时间(每隔10秒自动更新):
操作 功能
P 以CPU使用率排序,默认就是此项
M 以内存的使用率排序
N 以PID排序
q 退出top
监控网络状态
查看系统网络情况netstat
• 基本语法
netstat [选项]
• 选项说明
-an 按一定顺序排列输出
-p 显示哪个进程在调用
• 应用案例
请查看服务名为 sshd 的服务的信息。
检测主机连接命令ping:
是一种网络检测检测工具,它主要是用检测远程主机是否正常,或是两部主机间
的介质是否为断、网线是否脱落或网卡故障。
如: ping 对方ip地址
网络配置
Linux网络配置原理图
画出原理图,帮助理解
查看网络IP和网关
查看虚拟网络编辑器
查看网络IP和网关
修改ip地址
查看网络IP和网关
查看网关
查看网络IP和网关
查看windows环境的中VMnet8网络配置 (ipconfig指令)
ping 测试主机之间网络连通性
基本语法
ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)
应用实例
测试当前服务器是否可以连接百度
[root@hadoop100 桌面]# ping www.baidu.com
linux网络环境配置
第一种方法(自动获取):
说明:登陆后,通过界面的来设置自动获取ip
特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样。
linux网络环境配置
第二种方法(指定固定的ip)
• 说明
直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑 vi
/etc/sysconfig/network-scripts/ifcfg-eth0
要求:将ip地址配置的静态的,ip地址为192.168.184.130
linux网络环境配置
第二种方法(指定固定的ip):
• ifcfg-eth0文件说明
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.184.130
#网关
GATEWAY=192.168.184.2
#域名解析器
DNS1=192.168.184.2
• 重启网络服务或者重启系统生效
service network restart 、reboot
分区、挂载
分区基础知识
分区的方式:
- mbr分区:
1.最多支持四个主分区
2.系统只能安装在主分区
3.扩展分区要占一个主分区
4.MBR最大只支持2TB,但拥有最好的兼容性 - gtp分区:
1.支持无限多个主分区(但操作系统可能限制,比如 windows下最多128个分区)
2.最大支持18EB的大容量(1EB=1024 PB,1PB=1024 TB )
3.windows7 64位以后支持gtp
分区基础知识
windows下的磁盘分区
主分区
Primary
partition
逻辑分区
Logical
逻辑分区
Logical
扩展分区(extended partition)
Disk
逻辑分区
Logical
原理介绍 - Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独
立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分。 - Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目
录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一
个目录下获得。 - 示意图
Linux分区
硬盘说明 - Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
- 对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指
IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属
盘),“~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就
是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为
第二个IDE硬盘上的第二个主分区或扩展分区。 - 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余
则和IDE硬盘的表示方法一样。
Linux分区
查看所有设备挂载情况
命令 :lsblk 或者 lsblk -f
Linux分区
说明:
下面我们以增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂
载、卸载的概念。
如何增加一块硬盘 - 虚拟机添加硬盘
- 分区
- 格式化
- 挂载
- 设置可以自动挂载 。
挂载的经典案例
虚拟机增加硬盘步骤1
在【虚拟机】菜单中,选择【设
置】,然后设备列表里添加硬盘,
然后一路【下一步】,中间只有
选择磁盘大小的地方需要修改,
至到完成。然后重启系统(才能
识别)!
挂载的经典案例
虚拟机增加硬盘步骤2
分区命令 fdisk /dev/sdb
开始对/sdb分区
• m 显示命令列表
• p 显示磁盘分区 同 fdisk –l
• n 新增分区
• d 删除分区
• w 写入并退出
说明: 开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车默认剩
余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
挂载的经典案例
虚拟机增加硬盘步骤3
格式化磁盘
分区命令:mkfs -t ext4 /dev/sdb1
其中ext4是分区类型
挂载的经典案例
挂载的经典案例
虚拟机增加硬盘步骤4
挂载: 将一个分区与一个目录联系起来,
• mount 设备名称 挂载目录
• 例如: mount /dev/sdb1 /newdisk
• umount 设备名称 或者 挂载目录
• 例如: umount /dev/sdb1 或者 umount /newdisk
虚拟机增加硬盘步骤5
永久挂载: 通过修改/etc/fstab实现挂载
添加完成后 执行mount –a 即刻生效
• 用命令行挂载重启后会失效
磁盘情况查询
查询系统整体磁盘使用情况
• 基本语法
df -h
• 应用实例
查询系统整体磁盘使用情况
磁盘情况查询
查询指定目录的磁盘占用情况
• 基本语法
du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
• 应用实例
查询 /opt 目录的磁盘占用情况,深度为1
磁盘情况-工作实用指令 - 统计/home文件夹下文件的个数
- 统计/home文件夹下目录的个数
- 统计/home文件夹下文件的个数,包括子文件夹里的
- 统计文件夹下目录的个数,包括子文件夹里的
- 以树状显示目录结构
定时任务
crond 任务调度
crontab 进行 定时任务的设置,。
概述
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
基本语法
crontab [选项]
常用选项
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
crond 任务调度
快速入门
设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab –e命令。
接着输入任务到调度文件
如:/1 * * * * ls –l /etc/ > /tmp/to.txt
意思说每小时的每分钟执行ls –l /etc/ > /tmp/to.txt命令
参数细节说明
• 5个占位符的说明
项目 含义 范围
第一个“” 一小时当中的第几分钟 0-59
第二个“” 一天当中的第几小时 0-23
第三个“” 一个月当中的第几天 1-31
第四个“” 一年当中的第几月 1-12
第五个“” 一周当中的星期几 0-7(0和7都代表星期日)
crond 任务调度
参数细节说明
• 特殊符号的说明
特殊符号 含义
- 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一
次的意思。
, 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天
的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周
六的凌晨5点0分执行命令
/n 代表每隔多久执行一次。比如“/10 * * * * 命令”,代表每隔
10分钟就执行一遍命令
crond 任务调度
参数细节说明
• 特定时间执行任务案例
时间 含义
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分都会执行命令。注意:星期几和
几号最好不要同时出现,因为他们定义的都是天。非常容易让管
理员混乱。
crond 任务调度
应用实例
案例1:每隔1分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
案例2:每隔1分钟, 将当前日期和日历都追加到 /home/mycal 文件中
案例3: 每天凌晨2:00 将mysql数据库 testdb ,备份到文件中。
crond 相关指令:
- conrtab –r:终止任务调度。
- crontab –l:列出当前有那些任务调度
- service crond restart [重启任务调度]
远程连接
远程登录到Linux服务器
为什么需要远程登录Linux
说明: 公司开发时候, 具体的情况是这样的
- linux服务器是开发小组共享的.
- 正式上线的项目是运行在公网的.
- 因此程序员需要远程登录到centos进行项目管理或者开发.
- 画出简单的网络拓扑示意图(帮助理解)
- 远程登录客户端有 Xshell5, Xftp5 , 我们学习使用 Xshell5 和 Xftp , 其它的
远程工具大同小异.
远程登录Linux-Xshell5
介绍:
说明: Xshell 是目前最好的远程登录到Linux操作的软件,流畅的速度并且完
美解决了中文乱码的问题, 是目前程序员首选的软件。
Xshell [1] 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft
Windows 平台的TELNET 协议。
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好
的达到远程控制终端的目的。
远程登录Linux-Xshell5
安装配置和使用:
具体看老师的演示和操作!
远程上传下载文件Xftp5
介绍:
是一个基于 windows 平台的功能强大的SFTP、FTP 文件传输软件。使用了
Xftp 以后,windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文
件。(示意图)
远程登录Linux-Xftp
Xftp5安装配置和使用:
具体看老师的演示和操作!
细节讨论
如何处理Xftp中文乱码问题。
Xftp5和XShell5的使用
练习要求:
- 通过Xftp5软件可以连接到linux ,并传输一个文件 到 /root目录
- 使用xshell可以连接到linux ,并且可以重新启动一把 linux系统 【reboot】
Shell编程
为什么要学习Shell编程
- Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
- 对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本
进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。 - 对于大数据程序员来说,需要编写Shell程序来管理集群。
Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的
界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell脚本的执行方式
脚本格式要求 - 脚本以#!/bin/bash开头
- 脚本需要有可执行权限
编写第一个Shell脚本
• 需求说明
创建一个Shell脚本,输出hello world!
脚本的常用执行方式
• 方式1(输入脚本的绝对路径或相对路径)
1)首先要赋予helloworld.sh 脚本的+x权限
2)执行脚本
• 方式2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。
Shell的变量
Shell的变量的介绍
1)Linux Shell中的变量分为,系统变量和用户自定义变量。
2)系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等等
比如: echo $HOME 等等…
3)显示当前shell中所有变量:set
shell变量的定义
• 基本语法
1)定义变量:变量=值
2)撤销变量:unset 变量 - 声明静态变量:readonly变量,注意:不能unset
• 快速入门
案例1:定义变量A
案例2:撤销变量A
案例3:声明静态的变量B=2,不能unset
案例4:可把变量提升为全局环境变量,可供其他shell程序使用
Shell的变量
shell变量的定义
• 定义变量的规则 - 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
- 等号两侧不能有空格
- 变量名称一般习惯为大写
• 将命令的返回值赋给变量
1)A=ls -la
反引号,运行里面的命令,并把结果返回给变量A
2)A=$(ls -la) 等价于反引号
设置环境变量
基本语法 - export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
- source 配置文件 (功能描述:让修改后的配置信息立即生效)
- echo $变量名 (功能描述:查询环境变量的值)
快速入门 - 在/etc/profile文件中定义TOMCAT_HOME环境变量
- 查看环境变量TOMCAT_HOME的值
- 在另外一个shell程序中使用 TOMCAT_HOME
注意:在输出JAVA_HOME 环境变量前,需要让其生效
source /etc/profile
位置参数变量
介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如 : ./myshell.sh 100 200 , 这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
基本语法
$n (功能描述:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参 数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, ∗(功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @(功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
位置参数变量
• 应用实例
案例:编写一个shell脚本 positionPara.sh , 在脚本中获取到命令行的各个参数信息。
预定义变量
基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正
确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正
确了。)
应用实例
在一个shell脚本中简单使用一下预定义变量
运算符
基本介绍
学习如何在shell中进行各种运算操作。
基本语法 - “ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”
- expr m + n
注意expr运算符间要有空格 - expr m - n
- expr *, /, % 乘,除,取余
• 应用实例
案例1:计算(2+3)X4的值
案例2:请求出命令行的两个参数[整数]的和
条件判断
判断语句
• 基本语法
[ condition ](注意condition前后要有空格)
#非空返回true,可使用$?验证(0为true,>1为false)
• 应用实例
[ atguigu ] 返回true
[] 返回false
[condition] && echo OK || echo notok 条件满足,执行后面的语句
条件判断
判断语句
• 常用判断条件 - 两个整数的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于 - 按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录 - 应用实例
案例1:“ok"是否等于"ok”
判断语句:
案例2:23是否大于等于22
判断语句:
案例3:/root/shell/aaa.txt 目录中的文件是否存在
判断语句:
流程控制
if 判断
• 基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [条件判断式]
then
程序
fi
注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格 (2) 推荐使用第二种方式
• 应用实例
案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出 “及格了”,如果小于
60,则输出 “不及格”
流程控制
case语句
• 基本语法
case KaTeX parse error: Unexpected character: '' at position 165: …其它情况输出 "other" ̲ 流程控制 for循环 • 基…* 和 $@ 的区别]
流程控制
while循环
• 基本语法1
while [ 条件判断式 ]
do
程序
done
• 应用实例
案例1 :从命令行输入一个数n,统计从 1+…+ n 的值是多少?
read读取控制台输入
基本语法
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
参数
变量:指定读取值的变量名
应用实例
案例1:读取控制台输入一个num值
案例2:读取控制台输入一个num值,在10秒内输入。
函数
函数介绍
shell编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,
我们这里就介绍两个。
系统函数
• basename基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)
字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
• 应用实例
案例1:请返回 /home/aaa/test.txt 的 “test.txt” 部分
函数
系统函数
• dirname基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),
然后返回剩下的路径(目录的部分))
• 应用实例
案例1:请返回 /home/aaa/test.txt 的 /home/aaa
函数
自定义函数
• 基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]
• 应用实例
案例1:计算输入两个参数的和, getSum
Shell编程综合案例
需求分析 - 每天凌晨 2:10 备份 数据库 atguiguDB 到 /data/backup/db
- 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:
2018-03-12_230201.tar.gz - 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
案例
分析系统资源性能瓶颈
- 脚本功能
- 查看CPU利用率与负载(top,vmstat,sar)
- 查看磁盘,inode利用率与I/O负载(df, iostate,iotop,sar,dstat)
- 查看内存利用率(free,vmstat)
- 查看TCP连接状态(netstat,ss)
- 查看CPU与内存占用最高的10个进程(top,ps)
- 查看网络流量(ifconfig,iftop,iptraf)
- 思路
1. 判断命令执行系统,确定包下载工具
2. 确保用户正确,确保脚本中用到的命令存在
3. 循环中请求用户输入(打印菜单供用户选择)
4. 使用case判断用户输入切换到不同的功能
5.
- 实现
#!/bin/bash
# 修改输入提示符为Yource choice is:
PS3="Yource choice is: "# 检测脚本运行的系统,确定包下载工具
os_check()
{# 如果文件存在,表示是redhat系统if [ -e /etc/redhat-release ];thenREDHAT=`cat /etc/redhat-release| cut -d' ' -f1` # 一般用awk,awk '{print $1}'else # 否则就确定它是debian系统,像ubuntuDEBIAN=`cat /etc/issue|cut -d' ' -f1`fi# 如果是这两种系统,使用yum下载包,P_M:package_managerment包管理器if [ "$REDHAT" == "CentOS" -o "$REDHAT" == "Red" ];thenP_M=yum# 如果是这两种系统,使用apt-getelif [ "$DEBIAN" == "Ubuntu" -o "DEBIAN" == "ubuntu"];thenP_M=apt-getelseOS not supportexit 1fi
}
## $LOGNAME和$USER一样,如果登录的用户不是root
if [ $LOGNAME != root];thenecho "Please use root account"exit 1
fi# 判断vmstat命令存在,不存在则下载命令
if ! which vmstat &>/dev/null; thenecho "vmstat command not fount,now install"sleep 1os_check$P_M install procps -y
fiwhich iostat &>/dev/null
if [ $? -ne 0 ];thenecho "iostat command not fount,now install"sleep 1os_check$P_M install sysstat -y
fi# 这里加where是想每次执行后跳出select,然后再次打印菜单供用户选择,如果do和while在一行,就要用;分隔
while true
do# select 会打印一个菜单,供用户选择,使用break退出循环,用户只能输入数字选择# $PS1为当前提示符,$PS2为>,$PS3可以被重新赋值,赋值后就可以使用该提示符了# man bash 搜索PS1,PS2 ... PS4可以查看提示符 select input in cpu_load disk_load disk_use disk_inode mem_use tcp_status cpu_top10 mem_yop10 traffic quitdo# case以case开始,以esac结束case $input incpu_load)## CPU利用率与负载echo "--------------------------"i=1 while [[ $i -le 3 ]]doecho -e "\003[32m 参考值${i}\033[0m"# 查看CPU的利用率UTIL=`vmstat | awk '{if(NR==3) print 100-$15"%"}'` ##100-idle空闲的,NR==3处理第3行# 用户空间使用率USER=`vmstat |awk '{if(NR==3) print $13"%"}'`# 系统使用率SYS=`vmstat |awk '{if(NR==3) print $14"%"}'`# IO等待时间IOWAIT=`vmstat |awk '{if(NR==3) print $16"%"}'`echo "Utile: $UTIL"echo "User user:$USER"echo "System use: $SYS"echo "I/O wait: $IOWAIT"let i++sleep 1doneecho "--------------------------"break ##break是为了跳出select,重新显示菜单;;disk_load)#硬盘I/O负载echo "--------------------------"i=1while [[ $i -le 3 ]];doecho -e "\003[32m 参考值${i}\033[0m"UTIL=`iostat -x -k | awk '/^[v|s]/{OFS=": ";print $1,$NF"%"}'` ##OFS=": "表示以:或者空格分割READ=`iostat -x -k | awk '/^[v|s]/{OFS=": ";print $1,$6"KB"}'`WRITE=`iostat -x -k | awk '/^[v|s]/{OFS=": ";print $1,$7"KB"}'` IOWAIT=`vmstat |awk '{if(NR==3) print $16"%"}}'`echo -e "Util:"echo -e "${UTIL}"echo "I/O wait: $IOWAIT"echo -e "I/O Wait: $IOWAIT"echo -e "Read/s: \n$READ"echo -e "Write/s: \n$WRITE"i=$(($i+1))sleep 1doneecho "--------------------------"break ##break是为了跳出select,重新显示菜单;;disk_use)#硬盘利用率DISK_LOG=/tmp/disk_use.tmp ##&& 逻辑与DISK_TOTAL=`fdisk -l |awk '/^Disk.*bytes/ && /\/dev/{printf $2" ";printf "%d", $3;print "GB"}'`USE_RATE=`df -h | awk '/^\/dev/{print int($5)}'` ##awk内置函数:intfor i in $USE_RATE;doif [ $i -gt 90 ];thenPART=`df -h|awk '{if(int($5) === '''$i''') print $6}'` ###'''$i''':在单引号内部使用外部变量iecho "$PART = ${i}% >> $DISK_LOG"fidoneecho "--------------------------"echo -e "Dick toltal:\n${DISK_TOTAL}"if [ -f $DISK_LOG ];thenecho "--------------------------"cat $DISK_LOGecho "--------------------------"rm -f $DISK_LOGelseecho "--------------------------"echo "Disk use rate no than 90% of the partition"echo "--------------------------"fibreak;;disk_inode)#硬盘inode利用率INODE_LOG=/tmp/inode_use.tmpINODE_USE=`df -i | awk '/^\dev/{print int($5)}'`for i in $INODE_USE;doif [ $i -gt 90 ];thenPART=`df -h|awk '{if(int($5) == '''$i''') print $6}'` ###'''$i''':在单引号内部使用外部变量iecho "$PART = ${i}%" >> $INODE_LOGfidone if [ -f $INODE_LOG ];thenecho "--------------------------"cat $INODE_LOGecho "--------------------------"rm -f $INODE_LOGelseecho "--------------------------"echo "Disk use rate no than 90% of the partition"echo "--------------------------"fibreak;;mem_use)##内存利用率echo "--------------------------"MEM_TOTAL=`free -m|awk '{if(NR==2)printf "%.1f" ,$2/1024} END{print "G"}'` ##%.1保留小数点1位,f是浮点型USE=`free -m|awk '{if(NR==2)printf "%.1f" ,$3/1024} END{print "G"}'`FREE=`free -m|awk '{if(NR==2)printf "%.1f" ,$4/1024} END{print "G"}'`CACHE=`free -m|awk '{if(NR==2)printf "%.1f" ,$6/1024} END{print "G"}'`echo -e "Total: $MEM_TOTAL"echo -e "Use:$USE"echo -e "Free : $FREE"echo -e "Cache: $CACHE"echo "--------------------------"break;;tcp_status)##网络连接状态echo "--------------------------"COUNT=`ss -ant|awk '!/State/{status[$1]++}END{for(i in status) print i,status[i]}'`echo -e "TCP connection status:\n$COUNT"echo "--------------------------";;cpu_top10)##占用CPU高的前10个进程echo "--------------------------"CPU_LOG=/tmp/cpu_top.tmpi=1while [[ $i -le 3 ]];do##printf不带换行符,print会有换行符##sort -k2按照第2列排序 -nr表示逆序ps aux|awk '{if(($3>0.1)){{printf "PID:" $2 "CPU: " $3 "%--->"}for(i=11;i<=NF;i++)if((i==NF))printf $i"\n";else printf $i}}'|sort -k4 -nr|head -10 >$CPU_LOG##循环从11列(进程名)开始打印,如果i等于最后一行,就打印i的列并换行,否则就打印i的列##if((i==NF))printf $i"\n";else printf $i也可以写成:if((i==NF))printf{$i"\n"};else {printf $i'if [[ -n `cat $CPU_LOG` ]];then ##-n:字符串长度不是0的话echo -e "\003[32m 参考值${i}\033[0m"cat $CPU_LOG>$CPU_LOG ##将文件清空elseecho "No process using the CPU"break filet i++sleep 1doneecho "--------------------------"break;;mem_top10)#占用内存高的前10个进程echo "--------------------------"MEM_LOG=/tmp/mem_top.tmpi=1while [[ $i -le 3 ]];do##printf不带换行符,print会有换行符##sort -k2按照第2列排序 -nr表示逆序ps aux|awk '{if(($3>0.1)){{printf "PID:" $2 "MEM: " $4 "%--->"}for(i=11;i<=NF;i++)if((i==NF))printf $i"\n";else printf $i}}'|sort -k4 -nr|head -10 >$CPU_LOGif [[ -n `cat $MEM_LOG` ]];then ##-n:字符串长度不是0的话echo -e "\003[32m 参考值${i}\033[0m"cat $MEM_LOG>$MEM_LOG ##将文件清空elseecho "No process using the Memory"break filet i++sleep 1doneecho "--------------------------"break;;traffic)#查看网络流量while true;doread -p "Please enter the network card name(eth[0-9]) or em[0-9]: " ethif [ `ifoconfig`| grep -c "\<$eth\>" -eq 1 ];thenbreakelseecho "Input format error or Do not have the card name,please input again" fiecho "--------------------------"echo -e "In ------- Out"i=1while [[ $i -le 3 ]];do ##循环输出三次##Centos6的RX与TX行号等于8##Centos7的RX行号为5,TX行号等于7,,OLS_IN=`ifconfig $eth |awk -F'[: ]+' '{/bytes/if(NR==8) print $4;else if(NR==5)print $6}'` ##-F'[: ]+':表示一个或多个空格OLS_OUT=`ifconfig $eth |awk -F'[: ]+' '{/bytes/if(NR==8) print $9;else if(NR==7)print $6}'`sleep 1NEW_IN=`ifconfig $eth |awk -F'[: ]+' '{/bytes/if(NR==8) print $4;else if(NR==5)print $6}'`NEW_OUT=`ifconfig $eth |awk -F'[: ]+' '{/bytes/if(NR==8) print $9;else if(NR==7)print $6}'`IN=`awk 'BEGIN{printf "%.1f\n",'$((${NEW_IN}-${OLD_IN}))'/1024/128}'`##最后得到的单位是MbitOUT=`awk 'BEGIN{printf "%.1f\n",'$((${NEW_OUT}-${OLD_OUT}))'/1024/128}'`echo "${IN}MB/s ${OUT}MB/s"i=$(($i+1))sleep 1doneecho "--------------------------"break;;quit)exit 0;;*)echo "--------------------------"echo "Please enter the number"echo "--------------------------"break;;esac done
done