Linux教程

Linux系统指南

本文主要是介绍Linux系统指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Linux从安装到卸载

---------------jiuanc---------------

在线手册:http://man.linuxde.net/

本节是基于CentOS进行学习

本书目录:

文章目录

  • Linux从安装到卸载
    • 一:Linux简介篇
        • 1:Linux
        • 2:Linux应用领域
        • 3:学习阶段
    • 二:Linux基础篇
        • 1:Linux介绍
        • 2:Linux和Unix的关系
        • 3:Linux和Windows比较
        • 4:VMware的安装
        • 5:CentOS安装
        • 6:终端使用和联网
        • 7:vmtools的安装和使用
        • 8:文件目录结构
    • 三:Linux实操篇
        • 1:下载使用远程登录XShell5
        • 2:下载和使用远程上传和下载Xftp
        • 3:vi和vim编辑器的使用
        • 4:关机重启注销
    • 四:实操篇-用户管理
        • 1:创建、删除用户
        • 2:查询用户信息
        • 3:用户组
        • 4:用户和组相关的文件
    • 五:实操篇-实用指令
        • 1:运行级别和找回root密码
            • 1.1:指定运行级别
            • 1.2:切换到指定运行级别
            • 1.3:如何找回root密码
            • 1.4:更改Linux其的运行级别
        • 2:帮助指令man和help
            • 2.1:man获得帮助信息
            • 2.2:help获得shell内置命令的帮助信息
        • 3:文件目录类pwd ls cd
            • 3.1:pwd 显示当前工作目录的绝对路径
            • 3.2:ls 查看当前目录的内容信息
            • 3.3:cd 路径切换
        • 4:文件目录类mkdir rmdir
            • 4.1:mkdir 用于创建目录
            • 4.2:rmdir 删除空目录
        • 5:文件目录类 touch cp
            • 5.1:touch 创建空文件
            • 5.2:cp 拷贝文件到指定目录
        • 6:文件目录类rm mv
            • 6.1:rm 删除文件或者目录
            • 6.2:mv 移动文件与目录或重命名
        • 7:文件目录类cat more less
            • 7.1:cat 查看文件内容,只读
            • 7.2:more 以全屏幕的方式按页显示文本文件的内容
            • 7.3:less 分屏查看,但功能比more强大
        • 8:文件目录类 > (覆盖)和 >>(追加)
        • 9:文件目录类 echo head tail
            • 9.1:echo 输出内容到控制台
            • 9.2:head显示文件的开头部分内容
            • 9.3:tail输出文件尾部的内容
        • 10:文件目录类 ln history
            • 10.1:ln 给原文件创建一个软链接
            • 10.2:history查看已经执行过的历史命令,也可以执行历史指令
        • 11:时间日期类 date cal
            • 11.1:date显示当前日期
            • 11.2:date 设置日期
            • 11.3:cal 查看日期
        • 12:搜索查找类 find locate grep 管道符号|
            • 12.1:find 搜索查找
            • 12.2:locate 快速定位文件路径
            • 12.3:grep 和管道符号|
        • 13:压缩和解压缩指令
            • 13.1:gzip和gunzip
            • 13.2:zip压缩和unzip解压
            • 13.3:tar 打包指令,最后打包后的文件是.tar.gz的文件
    • 六:实操篇-组管理
        • 1:组管理概念
        • 2:文件目录所有者
            • 2.1:查看文件的所有者
            • 2.2:修改文件所有者
            • 2.3:组的创建
            • 2.4:查看文件/目录所在组
            • 2.5:修改文件所在组
            • 2.6:改变用户所在组
    • 七:实操篇-权限管理
        • 1:权限介绍
        • 2:权限介绍
            • 2.1:修改权限-chmod
            • 2.2:修改文件所有者-chown
            • 2.3:修改文件的所在组-chgrp
    • 八:实操篇-任务调度
        • 1:crontab任务调度
        • 2:任务调度应用实例
        • 3:conrtab相关指令
    • 九:实操篇-磁盘分区、挂载
        • 1:磁盘分区介绍
        • 2:Linux分区
        • 3:查看分区和挂载:lsblk -f
        • 4:挂载的经典案例
        • 5:磁盘查询实用指令
            • 5.1:df -h 查询系统整体磁盘使用情况
            • 5.2:du -h查询指定目录的磁盘占用情况
        • 6:常用磁盘查询案例
    • 十:实操篇-网络配置
        • 1:NAT模式(网络环境)
        • 2:查看网络IP和网关
            • 2.1:查看虚拟网络编辑器
            • 2.2:修改IP
            • 2.3:查看网关
            • 2.4:查看Windows环境的中VMnet8网络配置
            • 2.5:通过Ping可测试主机之间网络连通性
        • 3:Linux网络环境配置
            • 3.1:自动获取IP
            • 3.2:指定固定的IP地址
    • 十一:实操篇-进程
        • 1:进程基本介绍
            • 1.1:ps -aux显示系统执行的进程
            • 1.2:ps -ef查询所含父进程的
        • 2:kill和killall终止进程
            • 2.1:pstree查看进程树
        • 3:service服务管理
            • 3.1:关闭打开防火墙(iptables)
            • 3.2:telnet测试端口是否在用
            • 3.3:chkconfig设置查看服务自启动
            • 3.4:查看服务名
            • 3.5:例
        • 4:监控服务
            • 4.1:top动态监控
            • 4.2:实例(存在语法)
            • 4.3:动态监控的互动指令
            • 4.4:netstat监控网络状态
    • 十二:实操篇-RPM与YUM
        • 1:RPM
        • 2:rpm包的简单查询指令
        • 3:rpm包的查询指令
        • 4:rpm包的卸载安装
            • 4.1:卸载
            • 4.2:安装
        • 5:Yum
            • 5.1:查询yum服务器是否有需要安装的软件
            • 5.2:安装指定的yum包
    • 十三:JavaEE定制篇
        • 1:JDK安装和配置
        • 2:tomcat安装
        • 3:MySQL安装
        • 4:redis安装,所有安装均可采用
    • 十四:大数据定制篇
        • 1:简介
            • 1.1:脚本格式要求
            • 1.2:创建一个Shell脚本
        • 2:变量
            • 2.1:输出系统变量
            • 2.2:set显示当前Shell中所有的变量
            • 2.3:Shell变量的定义
            • 2.4:变量定义规则
            • 2.5:将命令返回值赋值给变量
        • 3:环境变量
        • 4:位置参数变量,$n $* $@ $#获取命令行的参数
        • 5:预定义变量
        • 6:运算符
        • 7:条件判断
            • 7.1:两个整数的比较
            • 7.2:按照文件权限进行判断
            • 7.3:按照文件类型进行判断
        • 8:流程控制
            • 8.1:if
            • 8.2:case语句
            • 8.3:for循环
            • 8.4:while循环
        • 9:read读取控制台输入
        • 9:函数
            • 9.1:函数简介
            • 9.2:basename dirname系统函数
            • 9.3:自定义函数
        • 10:shell综合案例
    • 十五:make
        • 9:read读取控制台输入
        • 9:函数
            • 9.1:函数简介
            • 9.2:basename dirname系统函数
            • 9.3:自定义函数
        • 10:shell综合案例
    • 十五:make

一:Linux简介篇

1:Linux

Linux搭建JavaEE环境

  • JDK 安装
  • IDEA 或Eclipse安装
  • Tomcat安装
  • 数据库安装

Linux之大数据定制篇

  • 概述
  • Shell脚本执行方式
  • Shell变量
  • 运算符
  • 条件判断
  • 流程控制
  • 函数
  • 定时维护MySQL

Linux之Python定制篇

  • Python专业开发平台-Ubuntu
  • Ubuntu下开发Python开发环境
  • APT软件管理和远程登录

2:Linux应用领域

  • 个人桌面
  • 服务器领域:最强的
  • 嵌入式领域

3:学习阶段

本人介于软件开发,故而本篇只会接触少量内核

  • 第一阶段:Linux环境下的基本操作命令,包括文件操作命令(rm mkdir chmod, chown) 编辑工具使用(vi vim) Linux用户管理(useradd userdel usermod)等
  • 第二阶段:Linux的各种配置(环境变量配置,网络配置,服务配置)
  • 第三阶段:Linux下如何搭建对应语言的开发环境(大数据,Java EE,Python等)
  • 第四阶段:能编写shell脚本,对Linux服务器进行维护
  • 第五阶段:能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优
  • 第六阶段:深入理解Linux系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各个环节的部署和维护方法

二:Linux基础篇

1:Linux介绍

免费、开源、安全、高效、稳定、处理高并发非常强悍的操作系统,现在很多的企业级的项目都部署到其上。

发行版本:CentOSE、Redhat、Ubuntu、Suse、红旗Linux

目前主要操作系统:

  • Windows
  • Android
  • 车载系统
  • Linux

2:Linux和Unix的关系

最早是Unix,开发厂商进行对其改装,但由于成本太高,大多数人用不起。故而,有了Linux(GNU计划的一个部分)

3:Linux和Windows比较

免费与收费、软件与支持、安全性、使用习惯、可执行性

Linux都好于Windows

应用场景:Windows:桌面

​ Linux:服务器

4:VMware的安装

学习Linux需要一个环境,需先创建一个虚拟机,然后在虚拟机上安装一个CentOS系统

1:去BIOS里修改设置开启虚拟化设备支持(开机时f2),将其设置为Enzble

​ 进入BIOS后,找到Configuration选项,选择Intel Virtual Technolog并回车,将光标移至Enable,回车。f10保存并退出。

2:安装虚拟机软件

5:CentOS安装

网易镜像:http://mirrors.163.com/centos/6/isos/

一:创建虚拟机空间

1:创建创建,选择推荐(典型)的那个

2:选择稍后安装操作系统

3:选择Linux,选择CentOS 64位

4:起名,选择位置

5:分配内存空间(20G差不多了)

6:完成

7:编辑虚拟机设置

8:内存调成2G差不多

9:处理器根据电脑硬件设置数量,本机上的在任务管理器中显示

10:网络配置问题,

​ 虚拟机的网络连接三种形式的说明:

  • 桥连接:假如在教室这个网络下,有张三(Windows系统,192.168.0.20),也有李四(Windows系统,192.168.0.10)。那么,给张三装上一个Linux系统(192.168.0.30),选择桥连接,那么虚拟机就会和张三的本机的网段将会相同。也就是说,李四可以找到张三的Windows系统,同样也可以找到Linux系统。(最好自己根据这个画图理解)

​ 优点:通讯方便

​ 缺点:假如教室很多人都装了这个,那就会造成Ip地址冲突

  • NAT模式(网络地址转换方式):在前面基础上,有一个王五(Windows,192.168.0.40),他也装了个Linux系统(192.168.0.30)。选择NAT模式。那么,母机上就会出现两个IP地址(192.168.0.40和192.168.100.200)且Linux会变为(192.168.100.50),这两个点100就会形成一个网络环境,其余点0的是一个网络环境。也就是说,李四将不会找到王五的Linux系统,但王五的Linux系统可以找到李四(通过代理)。

    优点:Linux可以访问外网,不会造成IP冲突。

  • 仅主机模式:独立的IP,不和外网发生联系

二:开始安装系统(CentOS)

1:点最上方:虚拟机-设置

2:点:CD/DVD,选择使用ISO映像文件,并将其挂上,确定

3:开启此虚拟机.选SkIP(光标进入其界面后,按Tab键即可)。一路next。选择中文简体。选择美式英语。选择基本存储系统。选择:是,忽略所有数据。取一个主机名(如:Hadoop)。设置时区,默认上海。设置密码(如:123456,在实际开发中设置强度很高的密码,可用密码生成器)。

选择创建自定义布局:

  • 创建–标准分区–挂载点选择:/boot(Linux启动会有引导文件,就在这)–大小200
  • 点空闲–创建–标准分区–挂载点无,文件类型选择swap(当系统内存不够时,使用其,进行替代)–大小2048
  • 点空闲–创建–标准分区–挂载点:/–选择使用全部空间

下一步–格式化–下一步–选择现在自定义(基本系统:留下兼容程序库和基本。桌面都保留)–下一步–重新引导–前进–同意–前进–创建用户(可以不用,因为已经有了root用户,注:root用户权限很高,不建议使用)–一路前进–kdump(当系统意外崩溃的时候,保留下点东西,用于分析)–点是

点其他–输入用户名,密码–完成!

6:终端使用和联网

在其页面,右键–使用终端打开----即可使用

配置网络:右上角的那个两个电脑图标–System eth0

7:vmtools的安装和使用

作用:可以直接粘贴命令在Windows和CentOS系统之间。可以设置Windows和CentOS的共享文件夹。

1:进入centOS

2:点击VM中的虚拟机----安装VMware Tools

3:centOS会出现一个vm的安装包 (将其移动到文件系统的opt中)

4:点击右键解压,得到一个安装文件

5:进入该Vm解压的目录,该文件在/root/桌面/vmware-tools-distrib/下

6:安装./vmware-install.pl(也可使用命令进行安装)

7:全部使用默认设置即可

8:需要reboot(在终端输入的指令)重新启动即可生效

设置共享文件夹:

注:一般开发都是用远程

在Windows下,设置个文件夹,作为共享的

在CentOS中,虚拟机–选项–共享文件夹–总是启用–然后选中刚才的那个文件夹–注:只读如果标上就修改不了–确定

在CentOS中,文件系统–mnt–hgfs–即找到

即成功!

8:文件目录结构

只有一个根目录,其余全在这里面(类似一个树)

Linux:一切皆文件

  • /bin:这个目录存放着经常使用的命令
  • /sbin:存放着系统管理员使用的系统管理程序
  • /home:存放普通用户的主目录
  • /root:该目录为系统管理员的用户主目录
  • /lib:系统开机所需要最基本的动态连接共享库。几乎所有的应用程序都需要使用到这些共享库。
  • /lost+found:该目录一般为空,当遭遇非法关机后,这里就存放了一些文件
  • /etc:所有的系统管理所需要的配置文件和子目录,my.conf
  • /usr:用户的很多应用程序和文件都存放在这个目录下
  • /boot:存放的是启动Linux时使用的一些核心文件,包括一些链接文件和镜像文件
  • /proc:(内核相关)虚拟的目录,他是系统内存的映射,访问这个目录来获取系统信息。
  • /srv:(内核相关)存放一些服务启动之后需要提取的数据
  • /sys:(内核相关)这是Linux2.6内核的一个变化。新出现的文件系统
  • /tmp:存放一些临时文件
  • dev:把所有的硬件用文件的形式存储
  • media:Linux会自动识别一些设备,例如u盘、光驱,识别后,Linux会把识别的设备挂载到这个目录下
  • mnt:时为了让用户临时挂载别的文件系统的,可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了
  • /opt:这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就是放在这个目录下。
  • /usr/local:这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
  • /var:存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
  • /selinux:这是一种安全子系统,他能控制程序只能访问特定文件。当黑客入侵后,就会触发,管理员可以看哪里出了问题。

故:1:Linux只有一个根目录

2:Linux的各个目录存放的内容是规划好的,不用乱放文件

3:Linux是以文件的形式管理我们的设备,因此Linux系统,一切皆为文件

三:Linux实操篇

1:下载使用远程登录XShell5

  • 为什么需要远程登录Linux?

sshd:远程用户

1:开发时,Linux服务器是开发小组共享的

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

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

4:远程登录客户端有Xshell(远程登录且操作)、Xftp(远程上传和下载)

  • Xshell

1:是目前最好的远程登录到Linux操作系统的软件,速度快,无乱码问题

2:是一个强大的安全终端模拟软件,支持SSH1,SSH2,Microsoft Windows平台的TELNET协议

3:可在Windows界面下用来访问远端不同系统下的服务器

  • 安装Xshell5

1:注:需要Linux开启一个sshd服务(该服务会监听22端口)(在终端setup----系统服务—标了#就是打开的)

2:傻瓜式安装

3:打开–左上角第二行–打开(新建一个会话)–名称(Linux的ip地址,ip地址查询:在终端ifconfig)–协议是SSH–主机(和上面IP一样)–端口号(22)–完成

连接下他–接受并保存–输入Linux的用户名和密码----出现[root@hadoop ~]# 即成功

接下来,就可操作

2:下载和使用远程上传和下载Xftp

假如那个电脑没mysql,你需要将mysql传上去,就需要到这个了。

是一个基于Windows平台的功能强大的SFTP、FTP文件传输软件。使用了Sftp以后,Windows用户能安全地在UNIX、Linux和Windows PC之间传输文件。

  • Fxtp安装配置以及使用

1:傻瓜式安装

2:新建一个会话–名称(可以随意,也可Linux的ip地址,ip地址查询:在终端ifconfig)–主机(和上面IP一样)–协议是SFTP(另一个21号端口未开)–端口号(22)–用户–完成

连接–输入密码–当然,因为是root用户,故而对应的是root文件–想要传输,右键传输就行

解决乱码:点击左边那个图标的下面有一个小齿轮的,选择UTF-8

3:vi和vim编辑器的使用

  • 基本介绍

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

vim具有程序编程的能力,可以看作vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计,代码补完、编译及错误跳转等方便编程的功能特别丰富

  • vi和vim常用的三种模式

正常模式:打开一个文档就可进入了,在这可使用快捷键

插入/编辑模式:在这模式下,程序员可以输入内容。按下i,I,o,O,a,A,r,R都可进入这个模式

命令行模式:在这个模式中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作是在此模式中完成的。

  • 入门案例

使用vim开发一个Hello.java程序,保存

在XShell连接后,先输入:ll(显示当前目录:所有文件)----再输入:vim Hello.java(创建了文件,打开了正常模式)----输入:i(打开编辑模式)----输入一个hello word的代码----在插入模式写完后,就需要回到一般模式(输入ESC)----输入::(接下来就可输入命令)wq(保存)----成功—查询:vim Hello.java----输入::(到命令行模式)q(退出)

  • vi和vim的相互转换

模式的相互转换,在前提到,在命令行下输入:vim xxx,进入一般模式。输入:i,进入编辑模式。输入ESC,回到一般模式。在一般模式,输入::或者/,即可到命令模式。命令模式到一般模式还是输入ESC。

命令行的一些::wq(保存退出),:q(退出),:q!(修改后不保存,强制退出)

  • vi和vim常用快捷键

1:在一般模式,拷贝当前行:yy(鼠标光标所在位置),拷贝当前行向下的5行:5yy,并粘贴(p)

2:在一般模式,删除当前行:dd,删除当前行向下的5行:5dd

3:在文件中查找某个单词:/关键字,回车,即可出来,输入n就是查找下一个。如查找hello,那就再一般模式输入:/hello,即可成功。/代表进入命令行

4:设置文件的行号,取消文件的行号::set nu和:set nonu

5:编辑/etc/profile文件(vim /etc/profile),使用快捷键到底文档的最末行:G和最首行:gg。(这是在正常模式下执行)

6:在一个文件中输入:hello,然后又想撤销,就在正常模式下输入: u

7:编辑/etc/profile文件,并将光标移动到20行 :shift+g

步骤:显示行号::set nu----输入20这个数字----输入shift+g

其余百度即可!

4:关机重启注销

  • 关机重启指令

shutdown

​ shutdown -h now:立即关机

​ shutdown -h 1:一分钟后关机

​ shutdown -r now:立即重启

halt:关机

reboot:重启系统

syn:把内存的数据同步到磁盘,建议每次结束后都使用一次

  • 用户登录

尽量少使用root登录,可用普通用户登录,再用:su-用户名。来切换成系统管理员身份

  • 用户注销

在提示符下输入logout(远程登录时有效)即可退出连接Linux,即不再占有其

四:实操篇-用户管理

1:创建、删除用户

组的概念:比如root用户就可在root组,建一个xm用户,可将其放在组1,也可放在组2…

家目录的概念:根目录下有一个:/home/,在这下面就有各个创建的用户对应的家的目录,当用户登录时,会自动进入到自己的家目录。 例如:/home/xm(xm的家目录)

Linux系统是一个多用户任务的操作系统,任何一个要使用系统资源的人,都需要向管理员申请一个账号。

  • 添加用户

useradd [可选] 用户名

useradd -g 指定目录 用户名

注:如果没有指定组,那么其默认会创建一个和用户名字一样的组,并将用户存在其中

例如:创建一个用户useradd xm,也会自己创建一个组,也有了家目录

  • 设置用户密码

passwd 用户----然后输入设置的密码即可

  • 删除用户

userdel 用户名

删除用户xm,但要保存家目录:userdel xm

删除用户xm,且不保存家目录:userdel -r xm

2:查询用户信息

  • 查询

id 用户名

  • 切换用户

当用户权限不足时,可以通过su-来切换到高权限用户。注:权限高的用户切换到权限低的用户,不需要密码,反之需要

su - 切换用户名

  • 当需要返回原来的用户时

exit

例:切换到zf:su - zf

​ 返回到原来的:exit

  • 查看当前用户

whoami或者who am i

3:用户组

类似于角色,系统可以对有共性的多个用户进行统一的管理

  • 增加组

groupadd 组名

例:groupadd dw(创建dw组)

  • 删除组

groupdel 组名

例:groupdel dw(删除dw组)

  • 创建一个用户,给其指定一个组(接着创建用户那块)

创建一个用户zwj,给其指定一个组wd

先创建一个组:groupadd wd----再创建:useradd -g wd zwj

  • 修改用户组

usermod -g 用户组 用户名

例:将zwj又换到sl组

接着上一个----先创建一个组:groupadd sl----再进行改组:usermod -g sl zwj

4:用户和组相关的文件

  • /etc/passwd文件

用户的配置文件,用于记录用户的各种配置信息

vim /etc/passwd执行后,每行的含义(当然值得是用户,就类似于前面所创建的zwj,他的信息):用户名;密码(口令);用户id(用户标识符);组id(组标识符);注释性描述;主目录(家目录);shell

  • /etc/shadow文件

口令配置文件(用户的密码就是存在这,这是加密文件)

vim /etc/shadow执行后,每行的含义(当然,这都是加密的。根本看不出来):登录名;加密口令;最后一次修改时间;最小时间间隔;最大时间间隔;警告时间;不活动时间;失效时间;标志

  • /etc/group文件

组的配置文件,记录Linux包含的组的信息

每行的含义:组名;口令(密码);组标识符;组内用户列表(看不到)

五:实操篇-实用指令

1:运行级别和找回root密码

1.1:指定运行级别

系统的运行级别配置文件:/etc/inittab

0:关机

1:单用户(找回丢失密码)

2:多用户无网络服务

3:多用户有网络服务

4:保留

5:图形界面

6:重启(设置为这,则其就会一直处于重启状态)

1.2:切换到指定运行级别

init 运行级别

例:切换5–>3,然后关机

init 3----init 0

1.3:如何找回root密码

思路:进入到单用户模式(不需要密码),然后修改root密码

在开机页面按Enter----输入:e----把光标高亮到第二行(编辑内核)----在输入一个:e----空格+1(进入到单用户模式)----Enter----输入:b(进入到root)----使用:passwd root修改密码

1.4:更改Linux其的运行级别

vim /etc/inittab----id:所要改的级别:initdefault:

2:帮助指令man和help

当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解这个指令的使用方法

2.1:man获得帮助信息

man 命令或配置文件

例:查看ls命令的帮助信息

​ man ls

2.2:help获得shell内置命令的帮助信息

help 命令

例:查看cd命令的帮助信息

​ help cd

3:文件目录类pwd ls cd

3.1:pwd 显示当前工作目录的绝对路径

语法:pwd

例:显示当前工作目录的绝对路径

​ pwd

3.2:ls 查看当前目录的内容信息

语法:ls 选项

常用的选项:-a:显示当前目录所有的文件和目录,包括隐藏的

​ -l:以列表的方式显示信息

例:查看当前目录的所有内容信息,以列表形式

​ ls -al

3.3:cd 路径切换

语法:cd 参数

常用参数(cd后面跟着的):cd ~或者cd :回到自己家目录

​ cd (空格) …:回到当前目录的上一级目录

例:使用绝对路径切换到root目录

​ cd /root

​ 使用相对路径到/root目录

​ 注:这个是根据当前目录写 假如在/usr/lib

​ cd …/…/root

​ 表示回到当前目录的上一级目录

​ cd …

​ 回到家目录

​ cd或者cd ~

4:文件目录类mkdir rmdir

4.1:mkdir 用于创建目录

语法:mkdir 选项 要创建的目录

选项:-p:创建多级目录

例:创建一个目录:/home/dog

​ mkdir /home/dog

​ 创建多级目录:/home/animal/tiger

​ mkdir -p /home/animal/tiger

4.2:rmdir 删除空目录

非空用:rm -rf

语法:rmdir 选项 要删除的空目录

例:删除一个空目录/home/dog

​ rmdir /home/dog

5:文件目录类 touch cp

5.1:touch 创建空文件

语法:touch 文件名称

例:创建一个空文件hello.txt

​ touch hello.txt

例:创建多个

​ touch h.txt u.txt

5.2:cp 拷贝文件到指定目录

语法:cp 选项 source dest

选项:-r:递归复制整个文件夹

例:将/home/aaa.txt文件拷贝到/home/bbb目录下

​ cd /home ----cp aaa.txt bbb/

​ 递归复制整个文件夹,将/home/test 下面的所有拷贝到/home/zwj

​ cd /home----cp -r test/ zwj/

注:当目标目录下有相同文件,会提示你是否覆盖。用:\cp -r test/ zwj/就不会提示,直接进行覆盖!

6:文件目录类rm mv

6.1:rm 删除文件或者目录

语法:rm 选项 要删除的文件或者目录

选项:-r:递归删除整个文件夹

​ -f:强制删除而不提示

例:将/home/aaa.txt删除

cd /home----rm aaa.txt

例:强制递归删除整个文件夹/home/bbb

cd /home----rm -rf bbb/

6.2:mv 移动文件与目录或重命名

语法:mv 旧文件名 新文件名(功能描述:重命名)

语法:mv /temp/movefile/targetFolder(功能描述:移动文件)

例:将/home/aaa.txt 文件 重新命名为pig.txt

​ cd /home----mv aaa.txt pig.txt

例:将/home/pig.txt文件移动到/root目录下

​ cd /home----mv pig.txt /root/

7:文件目录类cat more less

7.1:cat 查看文件内容,只读

语法:cat 选项 要查看的文件

选项:-n:显示行号

例:/etc/profile文件内容,并显示行号

​ cat /etc/profile

注:cat一般带着一个:| more显示,可以分页

例 : cat /etc/profile | more

7.2:more 以全屏幕的方式按页显示文本文件的内容

注:其指令有若干的快捷键

语法:more 要查看的文件

快捷:空白键:翻向下一页

​ Enter:向下翻一行

​ q:立即离开more,不再显示该文件内容

​ Ctrl+F:向下滚动一屏

​ Ctrl+B:返回上一屏

​ =:输出当前的行号

​ :f:输出文件名和当前的行号

例:采用more查看文件/etc/profile

​ more /etc/profile

7.3:less 分屏查看,但功能比more强大

支持各种终端显示。less是根据显示需要来加载内容,效率高

语法:less 要查看的文件

快捷:空白键:向下翻动一页

​ [pagedown]:向下翻动一页

​ [pageup]:向上翻动一页

​ /字串:向下搜寻[字串]的功能:n:向下查找,N:向上查找

​ ?字串:向下搜寻[字串]的功能:n:向上查找,N:向下查找

​ q:离开这个less程序

例:采用less查看一个文件/opt/金庸.txt

​ cd /opt----less 金庸.txt

8:文件目录类 > (覆盖)和 >>(追加)

覆盖:覆盖掉原先的内容

追加:是把文件追加到一个文件的尾部

1:语法:ls -l > 文件 (列表的内容写入文件中(覆盖写))

​ 例:ls -l > add.txt(把ls -l查询到的列表写入到add.txt,如果不存在就创建,有则直接覆盖)

2:语法:ls -l >> 文件 (列表的内容追加到文件的末尾)

​ 例:ls -l >> b.txt

3:语法:cat 文件1 > 文件2 (将文件一的内容覆盖到文件2)

4:语法:echo “内容” >> 文件 (将这个内容写入到文件,如果是>就是覆盖)

例:将/home目录下的文件列表写入到/home/info.txt中

​ ls -l /home/ > /home/info.txt

​ 将当前日历信息追加到/home/mycal文件中【cal:显示当前日历】

​ cal >> /home/mycal

9:文件目录类 echo head tail

9.1:echo 输出内容到控制台

语法:echo 选项 输出内容

例:使用echo指令输出环境变量

​ echo $PATH

​ 使用echo指令输出hello,world

​ echo “hello,world”

9.2:head显示文件的开头部分内容

语法:head 文件 (默认前10行)

​ head -n 5 文件 (查看前5行,5可以是任意行数)

例:查看/etc/profile的前5行内容

​ cd /etc----head -n 5 /profile

​ 也可head -n 5 /etc/profile

9.3:tail输出文件尾部的内容

语法:tail 文件 (默认10行)

​ tail -n 5 文件 (查看后5行,5可以是任意数字)

​ tail -f 文件 (实时追踪该文档的所有更新)

例:查看/etc/profile最后5行代码

​ tail -n 5 /etc/profile

​ 实时监控mydate.txt,看看到文件有变化时,是否看到,实时的追加日期

​ tail -f mydate.txt

10:文件目录类 ln history

10.1:ln 给原文件创建一个软链接

软链接也叫符号链接,类似于Windows里的快捷方式,存放了链接其他文件的路径

语法:ln -s 原目录 软链接明

例:在/home目录下创建一个软链接linkToRoot,连接到/root目录

​ cd /home ----ln -s /root linkToRoot

​ 删除软链接linkToRoot

​ rm -rf linkToRoot

注:删除软链接不用带/

10.2:history查看已经执行过的历史命令,也可以执行历史指令

语法:history

例:1:显示所有的历史命令

​ history

​ 2:显示最近使用过的10十个指令

​ history 10

​ 3:执行历史编号为5的指令

​ 查询之后----!5即可执行

11:时间日期类 date cal

11.1:date显示当前日期

语法:date 显示当前时间

​ date +%Y 显示当前年份

​ date +%m 显示当前月份

​ date +%d 显示当前哪一天

​ date “+%Y-%m-%d %H:%M:%S” 显示年月日时分秒

11.2:date 设置日期

语法:date -s (字符串时间)

例:设置当前系统时间,设置为:2020-11-11 11:22:22

​ date -s “2020-11-11 11:22:22”

11.3:cal 查看日期

语法:cal 选项 (不加选项,显示本月日历)

例:显示当前日历

​ cal

​ 显示2020年日历

​ cal 2020

12:搜索查找类 find locate grep 管道符号|

12.1:find 搜索查找

将从指令目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端

语法:find 搜索范围 选项 文件名

选项:-name :按照指定的文件名查找模式查找文件

​ -user :查找属于指定用户名所有文件

​ -size :按照指定的文件大小查找文件

例:1:按文件名:根据名称查找/home目录下的hello.txt文件

​ find /home -name hello.txt

​ 2:按拥有者:查找/opt目录下,用户名称为nobody的文件

​ find /opt -user nobody

​ 3:查找整个linux系统下大于20m的文件(+n大于 -n小于 n等于)

​ find / -size +20M

​ 小于20m:find / -size -20M

​ 等于20m:find / -size 20M

​ 4:查找/下所有的.txt文件

​ find / -name *.txt

12.2:locate 快速定位文件路径

利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。但为了保证查询的准确性,管理员必须定期更新locate时刻

语法:locate 搜索文件

注:由于其是基于数据库查询,所以第一次运行前,必须使用updatedb指令创建locate数据库

例:请使用locate指令快速定位hello.txt文件所在目录

​ updatedb----locate hello.txt

12.3:grep 和管道符号|

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

grep:过滤查找

管道符 | :表示将前一个命令的处理结果输出传递给后面的命令处理

语法:grep 选项 查找内容

选项:-n:显示匹配行及行号

​ -i: 忽略字母大小写

例:请在hello.txt文件中,查找"yes"所在行,并显示行号

​ cat hello.java | grep -n yes

13:压缩和解压缩指令

13.1:gzip和gunzip

语法:gzip 文件 (将文件压缩为*.gz文件)

​ gunzip 文件.gz

例:1:gzip压缩,将/home下的hello.txt文件进行压缩

​ cd /home ----gzip hello.txt

​ 2:gunzip解压缩,将/home下的hello.txt.gz文件进行解压缩

​ cd /home----gunzip hello.txt.gz

13.2:zip压缩和unzip解压

语法:zip 选项 XXX.zip 将要压缩的内容

​ unzip 选项 XXX.zip

zip选项:-r:递归压缩,即压缩目录

unzip选项:-d<目录>:指定解压后文件的存放目录

例:将/home下的所有文件进行压缩成mypackage.zip

​ zip -r mypackage.zip /home

​ 将mypackage.zip解压到/opt/tmp目录下

​ unzip -d /opt/tmp mypackage.zip

13.3:tar 打包指令,最后打包后的文件是.tar.gz的文件

语法:tar 选项 XXX.tar.gz 打包的内容

选项:-c:产生.tar打包的文件

​ -v:显示详细信息

​ -f:指定压缩后的文件名

​ -z:打包同时压缩

​ -x:解压.tar文件

例:1:压缩多个文件,将/home/a1.txt和/home/a2.txt压缩成a.tar.gz

​ cd /home----tar -zcvf a.tar.gz a1.txt a2.txt

​ 2:将/home的文件夹压缩成myhome.tar.gz

​ tar -zcvf myhome.tar.gz /home

​ 3:将a.tar.gz解压到当前目录

​ tar -zxvf a.tar.gz

​ 4:将myhome.tar.gz解压到/opt/tmp2目录下

​ tar -zxvf myhome.tar.gz -C /opt/tmp2

​ 注:要有-C

六:实操篇-组管理

1:组管理概念

在Linux的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其他组的概念

1:所有组

2:所在组

3:其他组

4:改变用户所在的组

2:文件目录所有者

一般来说为文件的创建者,即为所有者

2.1:查看文件的所有者

语法:ls -ahl

例:创建一个组police,在创建一个用户tom,将tom放在police组,然后使用tom来创建一个文件ok.txt,查看情况

​ groupadd police----useradd -g police tom----指定密码,登录tom----touch ok.txt----ls -ahl即可查看文件所有者

2.2:修改文件所有者

语法:chown 用户名 文件名

例:使用root创建一个文件apple.txt,然后将其所有者修改成tom

​ touch apple.txt----chown tom apple.txt

2.3:组的创建

这玩意前面有

2.4:查看文件/目录所在组

语法:ls -ahl

2.5:修改文件所在组

语法:chgrp 组名 文件名

例:使用root用户创建文件orange.txt,看看当前文件属于哪个组,然后将这个文件所在组修改到police组

touch orange.txt----ls -ahl----chgrp police orange.txt

其他组:

除文件的所有组的用户外,系统的其他用户都是文件的其他组

2.6:改变用户所在组

语法:usermod -g 组名 用户名

语法:usermod -d 目录名 用户名 改变该用户登录的初始目录

例:创建一个bandit组,将tom这个用户从原来的police组,修改到这

​ groupadd bandit----usermod -g bandit tom

七:实操篇-权限管理

1:权限介绍

基于文件和目录的权限

首先创建一个用户:tom(useradd tom),在此用户下创建一个组:police(groupadd police),在此目录下创建一个文件:ok.txt(touch ok.txt),后查询此(ls -l):- rw - r - - r - - . 1 tom police 6 3月 18 19:24 ok.txt

对其解释:

第一个符号:他是代表这是什么东西

​ -:普通文件

​ d:目录

​ l:软链接

​ c:字符设备( 鼠标、键盘)

​ b:块文件(硬盘)

三个一组,"rw -"这是一组:表示文件所有者权限

​ r:读的权限

​ w:写的权限(文件:写的权限不代表他可删除,当对于文件的目录有写权限,才可删除)

​ -:没有权限

​ x:代表可执行(文件),可进入目录(目录)

"r - -"是一组:文件所在组的用户拥有的权限

​ 此为:只有读的权限

"r - -"是一组:文件其他组用户拥有的权限

那个"1"所处的位置:如果最后是文件,则其代表他的硬链接的数

​ 如果是目录,则代表其子目录个数

tom:文件所有者

police:文件所在组

"6"所处的位置:代表文件的大小(6个字节)

​ 如果是后面是目录,其为:4096

“3月 18 19:24”:代表问价最后的修改时间

2:权限介绍

2.1:修改权限-chmod

通过chmod指令,可以修改文件或者目录的权限

  • 第一种方式:+、-、=变更权限

u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)

语法:1:chmod u=rwx,g=rx,o=x 文件目录名

语法:2:chmod 0+w 文件目录名 (代表给其他人增家一个写的权限)

语法:3:chmod a-x 文件目录名 (代表给所有人减少一个可 执行/进入 的权限)

例:1:给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限

​ chmod u=rwx,g=rx,o=rw zbc

​ 2:给abc文件的所有者除去执行的权限,增加组写的权限

​ chmod u-x,g+w abc

​ 3:给abc文件的所有用户添加读的权限

​ chmod a+w abc

  • 通过数字变更权限

规则:r=4 w=2 x=1 rwx=7

​ chmod u=rwx,g=rx,o=x 文件目录名

​ 相当于:chmod 751 文件目录名

例:将/home/abc.txt文件的权限修改成rwxr-xr-x,使用数字的方式实现

​ chmod 755 /home/abc.txt

2.2:修改文件所有者-chown

前面依然有,在6.2.2,此为深入

语法:chown 用户名 文件名 (改变文件的所有者)

语法:chown 用户名:所有组 文件名 (改变文件的所有者和所有组)

-R:如果是目录,加上这个就是修改旗下所有的

例:1:将/home/abc.txt问价的所有者修改成tom

​ chown tom /home/abc.txt

​ 2:将/home/kkk目录下所有文件和目录的所有者都修改成tom

​ chown -R tom /home/kkk

2.3:修改文件的所在组-chgrp

语法:chgrp 所在组 文件

例:将/home/abc.txt文件的所有组修改成shaolin

​ chgrp shaolin /home/abc.txt

​ 将/home/kkk目录下所有文件和目录的所在组都修改成shaolin

​ chgrp -R shaolin /home/kkk

八:实操篇-任务调度

1:crontab任务调度

注:简单了(就如下面的那个)就不用写脚本,复杂了就需要写shell脚本

任务调度:是指系统在某个时间执行的特定的命令或程序

任务调度分类:1:系统工作:有些重要的工作必须周而复始的执行。如:病毒扫描

​ 2:个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份

语法:crontab 选项

选项:-e:编辑crontab定时任务

​ -l:查询crontab任务

​ -r:删除当前用户所有的crontab任务

例:设置任务调度文件:/etc/crontzb

​ 设置个人任务调度。执行crontab -e命令

​ 接着输入任务到调度文件,如:*/1 * * * * ls -l /etc/>/tmp/to.txt

​ 意思说每小时的每分钟执行ls -l/etc/>/tmp/to.txt命令

细节说明:

第一个"*":一小时当中的第几分钟 0-59

第二个"*":一天当中的第几小时 0-23

第三个"*":一月当中的第几天 1-31

第四个"*":一年当中的第几月 1-12

第五个"*":一周当中的星期几 0-7(0\7都为周日)

特殊符号说明:
*:代表任何时间

,:代表不连续的时间 如:“0 8,12 * * *”,就代表8点0分,12带你0分

-:代表连续的时间范围

*/n:代表每隔多久执行一次

2:任务调度应用实例

例:1:每隔一分钟,就将当前的日期信息,追加到/tmp/mydate文件中

​ 写一个shell脚本/home/mytask1.sh:date>>/tmp/mydate----给mytask1.sh一个可执行权限----crontab -e----*/1 * * * * /home/mytask1.sh

​ 具体步骤:在/home下:vim mytask1.sh ,输入date >> /tmp/mydate

​ 给其权限:chmod 744 /home/mytask1.sh

​ crontab -e ,输入:*/1 * * * * /home/mytask1.sh

​ 2:每隔一分钟,将当前日期和日历都追加到/home/mycal文件中

​ 具体步骤:在/home下:vim mytask2.sh ,输入date >> /tmp/mycal和cal >> /tmp/mycal

​ 给其权限:chmod 744 /home/mytask2.sh

​ crontab -e ,输入:*/1 * * * * /home/mytask2.sh

​ 3:每天凌晨2:00将mysql数据库testdb,备份到文件mydb.bak

​ 具体步骤:在/home下:vim mytask3.sh,输入:/usr/local/mysql/bin//mysqldump -u root -proot testdb > /tmp/mydb.bak

​ 给其权限:chmod 744 /home/mytask3.sh

​ crontab -e ,输入:0 2 * * * /home/mytask2.sh

3:conrtab相关指令

1:conrtab -r :终止任务调度

2:conrtab -l:列出当前有哪些任务调度

3:service crond restart 重启任务调度

九:实操篇-磁盘分区、挂载

1:磁盘分区介绍

  • mbr分区

1:最多支持四个主分区

2:系统只能安装在主分区

3:扩展分区要占一个主分区

4:mrb最大只支持2TB,但拥有最好的兼容性

  • gtp分区:

1:支持无限多个 主分区(但操作系统可能限制,比如windows下最多128个分区)

2:最大支持18EB的大容量(EB=1024PB,PB=1024TB)

3:Windows7 64位以后支持gtp

2:Linux分区

无论有几个分区,归根结底只有一个根目录

硬盘下的分区----挂载----Linux中的文件

查看分区和挂载:lsblk -f

  • 硬盘

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硬盘的表示方法一样

3:查看分区和挂载:lsblk -f

如果想看大小:lsblk

如:|-sdal ext4 b3ece1-f1-9547-4352-b6f5-a36486d09853 /boot

|-sdal:分区情况

ext4:分区类型

b3ece1-f1-9547-4352-b6f5-a36486d09853:唯一标识符的40位不重复的字符串

/boot:挂载点

4:挂载的经典案例

需求是给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk

  • 步骤

1:给虚拟机添加硬盘

​ 虚拟机----设置----硬盘----添加----硬盘----选中SCSI,下一步----创建新的虚拟磁盘----分配空间,选中将虚拟磁盘拆分成多个文件,下一步----完成 重启即可查看到sdb分区

2:分区

​ fdisk /dev/sdb----n----w 分区即分好

​ 开始对/sdb分区:

​ m:显示命令列表

​ p:显示磁盘分区 同 fdisk -1

​ n:新增分区

​ d:刷新分区

​ w:写入并退出

3:格式化

​ mkfs -t ext4 /dev/sdb1 其意思:把我们的/dev/sdb1格式化成ext4(分区类型)

4:挂载

​ 先创建一个目录:mkdir /home/newdisk----挂载:mount /dev/sdb1 /home/newdisk

​ 取消挂载:进入那个目录(home)----umount /dev/sdb1

5:设置可以自动挂载(永久挂载)

​ vim /etc/fstab----在其内那些分区的第一行添加:

​ /dev/sdb1 /home/newdisk ext4 defaults 0 0-----退出去后:mount -a—完成

5:磁盘查询实用指令

5.1:df -h 查询系统整体磁盘使用情况

语法:df -h

例:查询系统整体磁盘使用情况

​ df -lh:以列表的方式显示信息

5.2:du -h查询指定目录的磁盘占用情况

语法:du -h /目录

查询指定目录的磁盘占用情况,默认为当前目录

-s:指定目录占用大小汇总

-h:带计量单位

-a:含文件

–max-depth=1:子目录深度

-c:列出明细的同时,增加汇总值

例:查询/opt目录的磁盘占用情况,深度为1

​ du --ach --max-depth=1 /opt

6:常用磁盘查询案例

1:统计/home文件夹下文件的个数

​ ls -l /home | grep “^-” | wc -l

​ 解释:grep “^-”:过滤查找以-打头的 ^:定位符

​ wc -l:wc就是统计

2:统计/home文件夹下目录的个数

​ ls -l /home | grep “^d” | wc -l

3:统计/home文件夹下文件的个数,包括子文件夹里的

​ ls -lR /home | grep “^-” | wc -l

​ 解释:R:是递归的意思,可统计包括子文件下的

4:统计文件夹下目录的个数,包括子文件夹里的

​ ls -lR /home | grep “^d” | wc -l

5:以树状显示目录结构

​ 如果没有tree----就安装:yum install tree----一路:y

​ tree

十:实操篇-网络配置

1:NAT模式(网络环境)

Linux的:会有一个ip(192.168.184.125),用来连接Windows

Windows:一:VM虚拟网卡(192.168.184.1),用以和Linux连接

​ 二:真实网卡(192.168.2.125),用以和外界联络

2:查看网络IP和网关

2.1:查看虚拟网络编辑器

编辑----虚拟网络编辑器(N)

2.2:修改IP

直接在虚拟网络编辑器中修改

2.3:查看网关

因为要出去,故而要和Windows的网关保持一致

编辑----虚拟网络编辑器(N)----选中最上面的那个要查看的名称----点击NAT设施(S)----即可发现

2.4:查看Windows环境的中VMnet8网络配置

在Windows中通过指令(ipconfig)查看

2.5:通过Ping可测试主机之间网络连通性

指令:ping 目的主机 功能描述

例:ping www.souhu.com

3:Linux网络环境配置

3.1:自动获取IP

登陆后,通过界面的来设置自动获取IP

系统----首选项----网络连接----点那个System eth0----编辑----选上自动连接

缺点:Linux启动后会自动获取IP,但每次IP可能不一样。不适用于做服务器,因为服务器的IP是固定的,不能变。

3.2:指定固定的IP地址

直接修改配置文件来指定IP,并可以连接到外网

vim /etc/sysconfig/network-scipts/ifcfg-eth0

ifcfg-eth0:IP存放地

要求:将IP地址配置成静态的,IP地址为192.168.184.130

​ 执行:vim /etc/sysconfig/network-scipts/ifcfg-eth0

注:这几个信息是必须有的,如果没有就加上。

​ IPADDR=192.168.184.125

​ GATEWAY=192.168.184.2 (网关)

​ DNS1=192.168.184.2 (域名,和网关保持一致)

开始修改:IPADDR=192.168.184.130 (指定IP)

​ BOOTPROTO=static (以静态方式获取IP)

​ ONBOOT=yes (启用)

保存退出----重启网络服务(service network restart)

十一:实操篇-进程

1:进程基本介绍

1:在Linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号

2:每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器

3:每个进程都可能以两种方式存在的:前台和后台

​ 所谓前台进程就是用户目前的屏幕上可以进行操作的。

​ 后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。

4:一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。

1.1:ps -aux显示系统执行的进程

语法:ps -a :显示当前终端的所有进程信息

语法:ps -u :以用户的格式显示进程信息

语法:ps -x :显示后台进程运行的参数

例:使用ps -aux | more

ps显示的信息选项:

USER 用户

PID 进程识别号

%CPU 占用的CPU

%MEM 占用内存

VSZ 使用虚拟的内存

RSS 使用物理内存情况

TTY 终端机号

STAT 当前进程的状态(S:休眠 R:运行 N:表示进程拥有比普通优先级更低的优先级 D:短期等 待 Z:僵死进程 T:被跟踪或者被停止)

START 启动时间

TIME 此进程所消耗CPU时间

COMMAND 进程执行时的命令行

1.2:ps -ef查询所含父进程的

语法:ps -ef :以全格式显示当前所有的进程

​ -e:显示所有进程

​ -f:全格式

PPID 父进程

UID 用户ID

CMD 启动进程所用的命令和参数

C CPU用于计算执行优先级的因子。数值越大,越表明是CPU密集型运算

例:使用ps -ef | grep sshd

​ 查询sshd的父进程

2:kill和killall终止进程

若某个进程执行一半需要停止,或是已消了很大的系统资源时,此时可以考虑停止该进程

语法:kill 选项 进程号 (通过进程号杀死进程)

语法:killall 进程名称 (通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

选项:-9:表示强迫进程立即停止

例:1:踢掉某个非法登录用户jack

​ 先查询有哪些远程登录,和进程号:ps -aux | grep sshd----kill 4010

​ 注:sshd时远程登录

​ 2:终止远程登录服务sshd,在适当时候再次重启sshd服务

​ 先查询有哪些远程登录,和进程号:ps -aux | grep sshd----kill 3908 (直接弄掉所有远程登录)----

​ 3:终止多个gedit编辑器

​ killall gedit

​ 4:强制杀掉一个终端(终端的名称:bash)

​ 先查询终端进程:ps -aux | grep bash----只要有(/bin/bash)的,就代表其是一个终端

​ kill -9 4119

2.1:pstree查看进程树

语法:pstree 选项

选项:-p:显示进程的PID

​ -u:显示进程的所属用户

例:1:请你树状的形状显示进程的pid

​ pstree -p

​ 2:请你树状的形式进程的用户id

​ pstree -u

3:service服务管理

服务本质就是进程,但是是运行在后台的,通常都会监听某个窗口,等待其他程序的请求,比如(mysql、sshd),因此我们又称为守护进程

语法:service 服务名

服务名:start:启动一个服务

​ stop:停止一个服务

​ restart:重启

​ reload:重载

​ status:状态

注:在CentOS7.0以后,不再是service,而是systemctl

3.1:关闭打开防火墙(iptables)

例:查看当前防火墙的状况,关闭防火墙和重启防火墙

​ 查看状况:service iptables status----关闭service iptables stop----重启service iptables restart

细节讨论:

1:关闭或者启用防火墙后,立即生效

2:这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置

3:如果希望设置某个服务自启动或者关闭永久生效,要使用chkconfig指令

3.2:telnet测试端口是否在用

telnet ip 端口

3.3:chkconfig设置查看服务自启动

注:需重启

语法:查看服务:chkconfig --list | grep xxx

​ 要是查看所有的:chkconfig --list

语法:和上一个一样:chkconfig 服务名 --list

语法:设置:chkconfig --level 5 服务名 on/off

​ 例:设置sshd,5自启动

​ chkconfig --level 5 sshd on

3.4:查看服务名

1:使用setup -> 系统服务

2:ls -l /etc/init.d/服务名称

3.5:例

1:将sshd服务在运行级别5下设置为不自动启动

​ chkconfig --level 5 sshd off

2:当运行级别为5时关闭防火墙
chkconfig --level 5 iptables off

3:在所有运行级别下关闭防火墙

​ chkconfig iptables off

4:监控服务

4.1:top动态监控

top在执行一短时间可以更新正在运行的进程

语法:top 选项

选项:-d 秒数:指定top命令每隔几秒更新,默认值三秒在top交互模式当中可以执行的命令

​ -i:使top不显示任何闲置或者僵死进程

​ -p:通过指定监控进程ID来仅仅监控某个进程的状态

注:使用top查询后

​ top 20:52:22 up 3:32, 3 users, load average: 0.35, 0.24, 0.30

​ 20:52:22:当前时间

​ 3:32:运行时间

​ 3 users:当前登录用户数

​ load average: 0.35, 0.24, 0.30:负载均衡

注:Mem是内存使用情况

​ 按“q”退出

4.2:实例(存在语法)

1:监视特定用户

​ top:输入此命令,回车,查看执行的进程

​ u:然后输入“u”回车,再输入用户名

2:终止指定的过程

​ top:输入此命令,回车,查看执行的进程

​ k:然后输入“k”回车,再输入要结束的进程ID号

3:指定系统状态更新的时间(每隔10秒自动更新)

​ top -d 10

4.3:动态监控的互动指令

P:以CPU使用率排序,默认就是此项

M:以内存的使用率排序

N:以PID(进程号)排序

q:退出top

4.4:netstat监控网络状态

语法:netstat 选项

选项:-an:按一定顺序排列输出

​ -p:显示哪个进程载调用

例:请查看sshd的服务的信息

​ netstat -anp sshd

​ 查看所有的网络服务

​ netstat -anp | more

十二:实操篇-RPM与YUM

1:RPM

一种用于互联网下载包的打包及安装工具

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表示通用

2:rpm包的简单查询指令

查询已经安装的rpm列表:rpm -qa | grep xx

3:rpm包的查询指令

rpm -qa:查询所安装的所有rpm软件包

​ 例:rpm -qa | more

rpm -q 软件包名:查询该软件是否安装

rpm -qi 软件包名:查询软件包信息

rpm -ql 软件包名:查询软件包中的文件

rpm -qf 文件全路径名:查询文件所属的软件包

4:rpm包的卸载安装

4.1:卸载

语法:rpm -e RPM包的名称

注:强制删除增加 --nodeps即可,不建议这样做

例:删除firefox软件包

​ rpm -e firefox

注:删除一个包时,但另一个正在使用,两个选择,放弃或者强制

4.2:安装

语法:rpm -ivh RPM包全路径名称

参数说明:i=install 安装

​ v=verbose 提示

​ h=hash 进度条

实例:先找到firefox的安装rpm包,你需要挂载上我们安装centos的iso文件,然后到/media下去找rpm包

挂载:虚拟机----设置—CD/DVD----使用ISO映像文件

注:切换到/opt安装

5:Yum

yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包

5.1:查询yum服务器是否有需要安装的软件

语法:yum list | grep xx

5.2:安装指定的yum包

语法:yum install xxx

例:请使用yum的方式来安装firefox

​ 先查看firefox这个rpm包再yum服务器有没有yum list | grep firefox

​ 安装:yum install firefox

十三:JavaEE定制篇

接下来进入傻瓜式操作系列

1:JDK安装和配置

先将软件通过xftp5上传到/opt----解压缩到/opt----配置环境变量的配置文件vim /etc/profile:

写到末尾

JAVA_HOME=/opt/jdk的版本号

PATH=/opt/jdk的版本号/bin;$PATH

export JAVA_HOME PATH

注:需要注销用户,环境变量才能生效:logout

注:写一个hello.java文件,用java hello运行

2:tomcat安装

解压到/opt----启动tomcat 输入 ./startup.sh----开放端口vim /etc/sysconfig/iptables

开放端口:输入后会出来的有一个这个:

​ -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

将22改成8080

重启防火墙:service iptables restart

完成!

3:MySQL安装

先进入/opt目录

执行:yum -y install make gcc-c++ cmake bison-devel ncurses-devel

执行:tar xvf mysql-5.6.14.tar.gz

进入:cd mysql-5.6.14

编译:cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

编译安装:make && make install

查看是否有mysql用户及用户组:cat /etc/passwd 查看用户列表

​ cat /etc/group 查看用户组列表

如果没有就创建:groupadd mysql

​ useradd -g mysql mysql

修改/usr/local/mysql权限:chown -R mysql:mysql /usr/local/mysql

初始化配置,进入安装路径(在执行下面的指令),执行初始化配置脚本,创建系统自带的数据库和表:

进入 cd /usr/local/mysql

初始化 scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

注:在CentOS 6.8版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。修改名称,防止干扰:mv /etc/my.cnf /etc/my.cnf.bak

并设置开机自启动

[注意在 /usr/local/mysql 下执行]

先执行:cp support-files/mysql.server /etc/init.d/mysql

后执行:chkconfig mysql on

service mysql start --启动MySQL

修改密码:

先进入:cd /usr/local/mysql/bin

后:./mysql -u root -p

后:mysql> SET PASSWORD = PASSWORD(‘12345’); 12345就是写密码的地方

quit退出

4:redis安装,所有安装均可采用

步骤:1:下载获得redis-3.0.4.tar.gz后将它放入我们Linux目录/opt

​ 2:解压命令:tar -zxvf redis-3.0.4.tar.gz

​ 3:解压完成后进入目录:cd redis-3.0.4

​ 4:执行:make (这玩意是用来编译的,大多数的源代码包都经过这一步进行编译)。会显示gcc命令未找到,cc命令未找到。其是由C语言写的。其需要编译安装。所以需要下载gcc和gcc-c++

​ 5:yum install gcc

​ yum install gcc-c++

​ 检测是否安装成功:gcc -v

​ 6:再在redis-3.2.5目录下再次执行make

​ 会报错

​ 解决方案:运行make distclean (清除残余文件) 之后再make

​ 7:执行:make install (安装的意思)

十四:大数据定制篇

1:简介

需要编写Shell程序来管理集群

也就是说:Shell驱动内核

Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以通过Shell来启动、挂起、停止甚至编写一些程序

1.1:脚本格式要求

1:脚本以#!/bin/bash开头

2:脚本需要有可执行权限

1.2:创建一个Shell脚本

例:创建一个Shell,输出hello,word

先创建一个目录:mkdir shell,再进入其内

创建一个文件:vim myShell.sh

给其写入:#!/bin/bash

​ echo “hello,wordd!”

执行:分配权限

​ chmod 744 myShell.sh:给所有者一个可执行的权限

​ 执行:./myShell.sh :相对路径

​ /root/shell/myShell.sh :绝对路径

2:变量

Shell变量分为:系统变量和用户自定义变量

系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等等

​ 比如:echo $HOME

2.1:输出系统变量

先创建一个目录:mkdir shell,再进入其内

创建一个文件:vim myShell.sh

给其写入:#!/bin/bash

​ echo “echo $HOME”

再给其所有者可执行的权限即可

2.2:set显示当前Shell中所有的变量
2.3:Shell变量的定义

基本语法:定义变量:变量=值

​ 撤销变量:unset 变量

​ 声明静态变量:readonly 变量 注:不能unset,会报错

例:全都进入权限已经配置好的文件

​ 1:定义变量A

​ A=100 //定义

​ echo "A= A " / / 引 用 和 输 出 的 时 候 需 要 写 A" //引用和输出的时候需要写 A"//引用和输出的时候需要写

​ 2:撤销变量A

​ unset

​ echo “A=$A”

​ 3:声明静态的变量B=2,不能unset

​ readonly B=2

​ echo “B=$B”

​ 4:可把变量提升为全局环境变量,可提供其他shell程序使用

2.4:变量定义规则

不能以数字开头

符号两侧不能有空格

变量名称一般习惯大写

2.5:将命令返回值赋值给变量

1:A='ls -la’反引号(左上角,esc下面)运行里面的命令,并把结果返回给变量A

​ 例:RESULT=‘ls -la /home’ 将ls -la /home的结果返回到RESULT

​ echo $RESULT

2:A=$(ls -la)等价于反引号

​ 例:MY_DATA=$(data)

​ echo “data=$MY_DATA” 比上一个的echo有点变化

3:环境变量

语法:export 变量名=变量值 (将shell变量输出为环境变量)

​ source 配置文件 (让修改后的配置信息立即生效)

​ echo $变量名 (查询环境变量的值)

例:1:在/etc/profile文件中定义TOMCAT_HOME环境变量

​ vim /etc/profile—输入:TOMCAT_HOME=/opt/tomcat----再输入:export TOMCAT_HOME(export导入)----:wd保存退出----source /etc/profile

​ 即可在外面查询

​ 2:查看环境变量TOMCAT_HOME的值

​ echo $TOMCATA_HOME

​ 3:在另外一个shell程序中使用TOMCAT_HOME

​ echo “tomcathome=$TOMCAT_HOME”

注:在使用环境变量之前,需要让其生效

​ source /etc/profile

4:位置参数变量,$n $* $@ $#获取命令行的参数

通过这个可以获取在命令行中设置的参数

语法:$n (n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 抱 起 来 , 如 : 9代表第一到第九个参数,十以上的参数需要用大括号抱起来,如: 9代表第一到第九个参数,十以上的参数需要用大括号抱起来,如:{11})

​ ∗ ( 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (这个变量代表命令行中所有的参数, ∗(这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)

​ @ ( 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (这个变量也代表命令行中所有的参数,不过 @(这个变量也代表命令行中所有的参数,不过@把所有的参数区分对待)

​ $# (这个变量代表命令行中所有参数的个数)

例:编写一个Shell脚本positionPara.sh,在脚本中命令行的各个参数信息

​ 前面的省略,直接进入到shell里面:#!/bin/bash

​ echo “$0 $1 $2”

​ echo “ ∗ " − − − − e c h o " *"----echo " ∗"−−−−echo"@”

​ echo “参数个数=¥#”

5:预定义变量

就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

语法:$$ (当前进程的进程号(PID))

​ $! (后台运行的最后一个进程的进程号(PID))

​ $? (最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果非0(自己设置是谁),则证明上一个命令执行不正确了)

例:在一个shell脚本中简单使用下预定义变量

​ 弄两个文件:myShell.sh(当作后台执行)和perVar.sh 。也就是说,在perVar.sh中执行myShell.sh,最后弄完后,按ctrl+c退出

​ 在perVar.sh中写:

​ #!/bin/bash

​ echo “当前的进程号=$$”

​ #后台的运行方式

​ ./myShell.sh & (要写这玩意,才能查了)

​ echo “最后的进程的号=$!”

​ echo “执行的值=$?”

6:运算符

基本语法:“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”

基本语法:expr m+n 注:expr运算符之间要有空格

基本语法:expr m-n

基本语法:expr *,/,% 乘,除,取余

例:计算(2+3)*4的值

​ 进入shell后:#!/bin/bash

​ RESULT1=$(((2+3)*4))

​ echo “result1=$RESULT1”

​ 给权限,执行结果为:result1=20

例:$[运算式]

​ #!/bin/bash

​ RESULT2=$[(2+3)*4]

​ echo “result2=$RESULT2”

​ 结果一样

例:expr

​ TEMP=expr 2+3 注:那个字体变小的是用esc下面那个`包含注了

​ RESULT3=expr $TEMP \* 4

​ echo “result3=$RESULT3”

例:请求输出命令行的两个参数[整数]的和

​ #!/bin/bash

​ SUM=$[$1+$2]

​ echo “SUM=$SUM”

注:执行:./hello.sh 10 8 (即10+8)

7:条件判断

语法:[ 条件] (注意:条件前后有空格)

​ 非空返回true,可使用$?验证

例:[ atguigu ] 返回true

​ [] 返回false

​ [ condition ] && echo OK || echo notok 条件满足,执行后面的语句

常用判断条件:

7.1:两个整数的比较

​ =:字符串比较

​ -lt:小于

​ -le:小于等于

​ -eq:等于

​ -gt:大于

​ -ge:大于等于

​ -ne:不等于

7.2:按照文件权限进行判断

​ -r:有读的权限 [ -r 文件]

​ -w:有写的权限

​ -x:有执行的权限

7.3:按照文件类型进行判断

​ -f:文件存在并且是一个常规的文件

​ -e:文件存在

​ -d:文件存在并且是一个目录

例:1:“ok100"是否等于"ok”

​ 进入shell----#!/bin/bash

​ if [ “ok100” = “ok” ]

​ then

​ echo “equal”

​ fi

​ 2:23是否大于32

​ 进入shell----#!/bin/bash

​ if [ 23 -gt 22 ]

​ then

​ echo “大于”

​ fi

​ 3:/root/install.log 目录中的文件是否存在

​ 进入shell----#!/bin/bash

​ if [ -e /root/install.log ]

​ then

​ echo “存在”

​ fi

8:流程控制

8.1:if

语法:if [ 条件判断式 ];then

​ 程序

​ fi

或者:if [ 条件判断式 ]

​ then

​ 程序

​ elif[ 条件判断式 ]

​ then

​ 程序

​ fi

例:编写一个shell程序,如果输入的参数,大于等于60,则输出"及格了",反之,输出"不及格"

​ #!/bin/bash

​ if [ $1 -ge 60]

​ then

​ echo “及格了”

​ elif [ $1 -lt 60 ]

​ then

​ echo “不及格”

​ fi

8.2:case语句

语法:case $变量名 in

​ “值1”)

​ 如果等于值1,则执行程序1

​ ;;

​ “值2”)

​ 如果等于值2,则执行程序2

​ ;;

​ …

​ *)

​ 如果变量都不是以上的值,则执行此程序

​ ;;

​ esac

例:当命令行参数是1时,输出"周一",是2时,输出"周二",其他情况输出"other"

​ #!/bin/bash

​ case $1 in

​ “1”)

​ echo “周一”

​ ;;

​ “2”)

​ echo “周二”

​ ;;

​ *)

​ echo “other”

​ ;;

esac

8.3:for循环

语法:for 变量 in 值1 值2 值3…

​ do

​ 程序

​ done

例:打印命令行输入的参数

​ #!/bin/bash

​ for i in “$*”

​ do

​ echo “the num is $i”

​ done

​ echo “===================”

语法:for (( 初始值;循环控制条件;变量变化 ))

​ do

​ 程序

​ done

例:从1加到100的值输出显示

​ #!/bin/bash

​ SUM=0

​ for((i=1;i<=100;i++))

​ do

​ SUM= [ [ [SUM+$i]

​ done

​ echo “sum=$SUM”

8.4:while循环

语法:while [ 条件判断式 ]

​ do

​ 程序

​ done

例:从命令行输入一个数n,统计从1+…+n的值是多少个

​ #!/bin/bash

​ SUM=0

​ i=0

​ while [ $i -le $1]

​ do

​ SUM= [ [ [SUM+$i]

​ done

​ echo “sum=$SUM”

9:read读取控制台输入

语法:read(选项)(参数)

选项:-p:指定读取值时的提示符

​ -t:指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

参数:指定读取值的变量名

例:1:读取控制台输入一个num值

​ #!/bin/bash

​ read -p “请输入一个数num1=” NUM1

​ echo “你输入的值是num1=$NUM1”

​ 2:读取控制台输入一个num值,在10秒内输入

​ #!/bin/bash

​ read -t 10 -p “请输入一个数num2=” NUM2

​ echo “你输入的值是num2=$NUM2”

9:函数

9.1:函数简介

shell编程和其它编程语言一样,有系统函数,也可以自定义函数

9.2:basename dirname系统函数
  • basename:返回完整路径最后 / 的部分,常用于获取文件名

语法:basename [pathname] [suffix]

语法:basename [string] [suffix] (basename命令会删除所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来)

选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

  • dirname:返回完整路径最后 / 的前面的部分,常用于返回路径部分

dirname 文件绝对路径 (从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径(目录的部分))

例:1:请返回/home/aaa/test.txt的"test.txt"部分

​ basename /home/aaa/test.txt

​ 2:请返回/home/aaa/test.txt的"/home/aaa"部分

​ dirname /home/aaa/test.txt

9.3:自定义函数

语法: function 函数名()

​ {

​ Action;

​ [return int];

​ }

调用直接写函数名:函数名 [值]

例:计算输入两个参数的和(read),getSum

​ #!/bin/bash

​ function getSum(){

​ SUM=$[ n 1 + n1+ n1+n2 ]

​ echo “和是=¥SUM”

​ }

read -p “请输入第一个数n1” n1

read -p “请输入第二个数n2” n2

#调用getSUM

getSUM $n1 $n2

10:shell综合案例

需求分析

1:每天凌晨2:10分备份数据库atguiguDB 到 /data/backup/db

2:备份开始和备份结束都能给出相应的提示信息

3:备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2020-03-12_230201.tar.gz

4:备份的同时,检查是否有10前备份的数据库文件,如果有进行删除

开始编写:vim /usr/sbin/mysql_db_backup.sh

#!/bin/bash
echo "==========开始备份=========="
echo "==========备份的路径是 $BACKUP/$DATETIME.tar.gz"
#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行MySQL的备份数据库指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATATIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "==========备份文件成功=========="

十五:make

这玩意我是真的找不到一个好的了,心累

要是有找到的Q我,嘿嘿

 while  [  $i  -le  $1]

​ do

​ SUM= [ [ [SUM+$i]

​ done

​ echo “sum=$SUM”

9:read读取控制台输入

语法:read(选项)(参数)

选项:-p:指定读取值时的提示符

​ -t:指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

参数:指定读取值的变量名

例:1:读取控制台输入一个num值

​ #!/bin/bash

​ read -p “请输入一个数num1=” NUM1

​ echo “你输入的值是num1=$NUM1”

​ 2:读取控制台输入一个num值,在10秒内输入

​ #!/bin/bash

​ read -t 10 -p “请输入一个数num2=” NUM2

​ echo “你输入的值是num2=$NUM2”

9:函数

9.1:函数简介

shell编程和其它编程语言一样,有系统函数,也可以自定义函数

9.2:basename dirname系统函数
  • basename:返回完整路径最后 / 的部分,常用于获取文件名

语法:basename [pathname] [suffix]

语法:basename [string] [suffix] (basename命令会删除所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来)

选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

  • dirname:返回完整路径最后 / 的前面的部分,常用于返回路径部分

dirname 文件绝对路径 (从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径(目录的部分))

例:1:请返回/home/aaa/test.txt的"test.txt"部分

​ basename /home/aaa/test.txt

​ 2:请返回/home/aaa/test.txt的"/home/aaa"部分

​ dirname /home/aaa/test.txt

9.3:自定义函数

语法: function 函数名()

​ {

​ Action;

​ [return int];

​ }

调用直接写函数名:函数名 [值]

例:计算输入两个参数的和(read),getSum

​ #!/bin/bash

​ function getSum(){

​ SUM=$[ n 1 + n1+ n1+n2 ]

​ echo “和是=¥SUM”

​ }

read -p “请输入第一个数n1” n1

read -p “请输入第二个数n2” n2

#调用getSUM

getSUM $n1 $n2

10:shell综合案例

需求分析

1:每天凌晨2:10分备份数据库atguiguDB 到 /data/backup/db

2:备份开始和备份结束都能给出相应的提示信息

3:备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2020-03-12_230201.tar.gz

4:备份的同时,检查是否有10前备份的数据库文件,如果有进行删除

开始编写:vim /usr/sbin/mysql_db_backup.sh

#!/bin/bash
echo "==========开始备份=========="
echo "==========备份的路径是 $BACKUP/$DATETIME.tar.gz"
#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行MySQL的备份数据库指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATATIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "==========备份文件成功=========="

十五:make

这玩意我是真的找不到一个好的了,心累

要是有找到的Q我,嘿嘿

这篇关于Linux系统指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!