Linux笔记(包含shell编程)

文章目录

    • 一、Linux简介
    • 二、VMware的安装
    • 三、Centos7的安装
      • (1)vmtools 的安装和使用
    • 四、Linux 的三种网络模式
      • (1)桥接模式
      • (2)nat模式(常用)
      • (3)仅主机模式
    • 五、Linux的远程登录
      • 1、为什么需要远程连接?
      • 2、远程登录Linux-Xshell6
      • 3、安装并使用Xshell6
      • 4、安装并使用Xftp6
    • 六、开机、重启和用户的登录与注销
      • 1、关机和重启
      • 2、登录和注销
    • 七、Linux的文件目录
    • 八、Linux的常用命令
        • 1、指定运行级别
        • 2、切换到指定运行级别的指令
        • 3、帮助类命令
        • 4、文件目录类命令
        • 5、日期类命令
        • 6、搜索查找类命令
        • 7、压缩和解压类
        • 8、磁盘分区、挂载
        • 9、磁盘情况查询
        • 10、网络配置
        • 11、进程
          • (1)ps(process)
          • (2)ps -aux
          • (3)ps -ef
          • (4)kill
          • (5)pstree 进程树
        • 12、服务
          • (1)service(CentOS6)
          • (2)systemctl(CentOS7)
        • 13、netstat
    • 九、vi和vim 编辑器的使用
        • 1、vi和vim的基本介绍
        • 2、vi和vim的三种模式
          • (1)正常模式(默认模式)
          • (2)编辑模式
          • (3)命令模式
      • 十、用户管理-用户组管理-文件权限管理
        • 1、用户管理
        • 2、用户组管理
        • 3、文件权限管理
        • 4、系统中用户和组的相关文件
      • 十一、任务调度
        • 1、原理示意图
        • 2、概述
        • 3、基本语法
        • 4、快速使用
          • 4.1 任务的要求
          • 4.2 步骤如下
          • 4.3 参数细节说明
        • 5、crond相关指令
        • 6、案例
      • 十二、shell编程
        • 1、为什么要学习shell编程
        • shell是什么?
        • 2、shell编程快速入门-shell脚本的执行方式
        • 3、shell变量
          • 3.1 shell变量的介绍
          • 3.2 shell变量的定义
          • 3.3 定义变量的规则
          • 3.2 将命令的返回值返回给变量(重点)
        • 4、设置环境变量
          • 基本语法
        • 5、位置参数变量
          • 5.1 介绍
          • 5.2 基本语法
        • 6、预定义变量
          • 6.1 基本介绍
          • 6.2 基本语法
          • 6.3 应用实例
        • 7、运算符
          • 7.1 基本介绍
          • 7.2 基本语法
        • 8、条件判断
          • 8.1 基本语法
          • 8.2 应用实例
          • 8.3 常用的判断条件
        • 9、流程控制
          • 9.1 if 判断
            • (1)基本语法
          • 9.2 case 语句
            • (1)基本语法
          • 9.3 for循环
            • (1)基本语法
          • 9.4 while 循环
            • (1)基本语法
        • 10、read读取控制台输入
          • 10.1 基本语法
          • 10.2 应用实例
        • 10、函数
          • 10.1 函数介绍
          • 10.2 系统函数
          • 10.3 自定义函数
            • (1)基本语法
            • (2)应用实例
        • 11、shell编程综合案例
      • 十三、rpm和yum
        • 1、 rpm
        • 2、 yum
      • 十四、javaEE开发的环境设置
        • 8.1 安装JDK
        • 8.2 安装Tomcat
        • 8.4 安装MySQL
          • (1)检查工作
          • (2)安装MySQL
          • (3)检查安装是否成功
          • (4)MySQL服务的启停
          • (5)设置root用户的密码
          • (6)登录MySQL
          • (7)建库
          • (8)建表
          • (9)字符集问题
          • (10)远程访问

学习Linux的阶段划分

(1)第 1 阶段

​ linux 环境下的基本操作命令,包括 文件操作命令(rm mkdir chmod, chown) 编辑工具 使用(vi vim) linux 用户管理(useradd userdel usermod)等

(2)第 2 阶段

​ linux 的各种配置(环境变量配置,网络配置,服务配置)

(3)第 3 阶段

​ linux 下如何搭建对应语言的开发环境(大数据,JavaEE, Python 等)

(4) 第 4 阶段

​ 能编写 shell 脚本,对 Linux 服务器进行维护。

(5)第 5 阶段

​ 能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优。

(6)第 6 阶段

​ 深入理解 Linux 系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各 个环节的部署和维 护方法。

一、Linux简介

(1)Linux 是一款操作系统,免费,开源, 安全,高效,稳定, 处理高并发非常强悍,现在很多 的企业级 的项目都部署到 Linux/unix 服务器运行。

(2)Linux创始人

​ Linux 林纳斯(linux Torvalds)

(3)图标(吉祥物)——企鹅

(4)发行版本

二、VMware的安装

找到安装包根据引导即可安装

三、Centos7的安装

自行安装Centos7

(1)vmtools 的安装和使用

安装之后可以进行像windows一样粘贴复制

1.进入 centos

2.点击 vm 菜单的->install vmware tools

3.centos 会出现一个 vm 的安装包

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

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

6.安装 ./vmware-install.pl

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

8.需要 reboot 重新启动即可生效

四、Linux 的三种网络模式

(1)桥接模式

可以上网,理解为局域网中的一台电脑

(2)nat模式(常用)

可以上网,理解为网络中的一台计算机

(3)仅主机模式

外界不能ping通,只有宿主机可以连接

五、Linux的远程登录

1、为什么需要远程连接?

(1) linux 服务器是开发小组共享的.(因此需要)

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

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

(4)远程登录客户端有 Xshell5, Xftp5 , 我们学习使用 Xshell5 和 Xftp , 其它的远程工具大同小异.

2、远程登录Linux-Xshell6

如果希望安装好 XShell 5 就可以远程访问 Linux 系统的话,需要有一个前提,就是Linux 启用了 SSHD 服务,该服务会监听 22 号端口。

3、安装并使用Xshell6

作用:

​ 用于与服务器进行交互(和虚拟机上的终端一样)

根据提示进行安装

4、安装并使用Xftp6

作用:

​ 用于向服务器进行资源传输

根据提示进行安装

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

1、关机和重启

  • shutdown

    shutdown -h now : 表示立即关机

​ shutdown -h 1 : 表示 1 分钟后关机

​ shutdown -r now: 立即重启

  • halt

​ 就是直接使用,效果等价于关机

  • reboot

​ 就是重启系统。

  • syn : 把内存的数据同步到磁盘

注意点

当我们关机或者重启时,都应该先执行以下 sync 指令,把内存的数据写入磁盘,防止数据丢失。

2、登录和注销

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

(2)在提示符下输入 logout 即可注销用户

注意点

logout 注销指令在图形运行级别无效,在 运行级别 3 下有效.

七、Linux的文件目录

在 Linux 中,一切皆文件

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

Linux笔记(包含shell编程)_第1张图片

/bin (/usr/bin、/usr\local\bin) 是Binary的缩写, 这个目录存放着最经常使用的命令
**/sbin(/usr/sbin 、/usr/local/sbin) ** s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/root 该目录为系统管理员,也称作超级权限者的用户主目录。
/lib 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
/etc 所有的系统管理所需要的配置文件和子目录
/usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
/boot 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里
/proc 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/srv service缩写,该目录存放一些服务启动之后需要提取的数据
/sys 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs
/tmp 这个目录是用来存放一些临时文件的。
/dev 类似于windows的设备管理器,把所有的硬件用文件的形式存储
**/media(centos6) ** linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/run 进程产生的临时文件,虚拟机加载光盘映像在:/run/media/root/ 目录下
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。
/opt 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/usr/local 这是另一个给主机额外安装软件所摆放的目录。一般是通过编译源码方式安装的程序。
/var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

八、Linux的常用命令

1、指定运行级别

运行级别说明:

0 :关机

1 :单用户【找回丢失密码】

2 :多用户状态没有网络服务

3 :多用户状态有网络服务

4:系统未使用保留给用户

5:图形界面

6:系统重启

常用运行级别是 3 和 5 ,要修改默认的运行级别可改文件

/etc/inittab 的 id:5:initdefault:这一行中的数字

运行级别示意图:

Linux笔记(包含shell编程)_第2张图片

2、切换到指定运行级别的指令

基本语法:init [0,1,2,3,4,5,6]

如何找回密码

开机->在引导时输入 回车键-> 看到一个界面输入 e -> 看到一个新的界面,选中第二行(编辑 内核)在输入 e-> 在这行最后输入 1 ,再输入 回车键->再次输入 b ,这时就会进入到单用户模式。

这时,我们就进入到单用户模式,使用 passwd 指令来修改 root 密码。

3、帮助类命令

man [命令或配置文件](功能描述:获得帮助信息)

help命令 (功能描述:获得 shell 内置命令的帮助信息)

特别提示:

如果看不懂英文,不如直接百度来的快!

4、文件目录类命令

  • pwd (功能描述:显示当前工作目录的绝对路径)

  • ls [选项] [目录或是文件]

    ​ 常用选项

    ​ -a :显示当前目录所有的文件和目录,包括隐藏的。

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

  • cd [参数] (功能描述:切换到指定目录)

    ​ 注意相对路径绝对路径

    ​ cd ~ 或者 cd :回到自己的家目录

    ​ cd … 回到当前目录的上一级目录

  • mkdir 指令用于创建目录(make directory)

    mkdir [选项] 要创建的目录

    -p :创建多级目录

  • rmdir 指令删除空目录

    rmdir [选项] 要删除的空目录

    注意:

    ​ rmdir 删除的是空目录,如果目录下有内容时无法删除的。

    提示:

    ​ 如果需要删除非空目录,需要使用 rm -rf 要删除的目录

  • touch 指令创建空文件

    touch 文件名称

  • cp 指令拷贝文件到指定目录

    cp [选项] 源文件 目标文件

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

    使用细节

    强制覆盖不提示的方法:\cp

    小技巧:

    ​ 可以通过 上下箭头的键,调出原来使用过的指令。

  • rm 指令移除【删除】文件或目录

    rm [选项] 要删除的文件或目录

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

    -f : 强制删除不提示

    使用细节:

    强制删除不提示的方法:带上 -f 参数即可

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

    mv 原来名称 新的名称

  • cat 查看文件内容,是以只读的方式打开。

    cat [选项] 要查看的文件

    -n :显示行号

    使用细节:

    cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more

    cat 文件名 | more [分页浏览]

  • more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键,详见操作说明

    more 文件名

Linux笔记(包含shell编程)_第3张图片

  • less指令

    作用:

    ​ 用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持 各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示
    需要加载内容,对于显示大型文件具有较高的效率

  • ">"指令 和 “>>” 指令

    > 指令 和 >> 指令

    > 输出重定向 : 会将原来的文件的内容覆盖

    >> 追加: 不会覆盖原来文件的内容,而是追加到文件的尾部。

    (1)ls -l > 文件 (功能描述:列表的内容写入文件 a.txt 中(覆盖写))

    (2)ls -al >>文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)

    (3)cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件

    (4)echo “内容” >>文件

  • echo 输出内容到控制台

    echo [选项] [输出内容]

  • head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容

    head 文件 (功能描述:查看文件头 10 行内容)

    head -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)

  • tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。

    (1) tail 文件 功能描述:查看文件后 10 行内容

    (2) tail -n 5 文件 功能描述:查看文件后 5 行内容,5 可以是任意行数

    (3) tail -f 文件 功能描述:实时追踪该文档的所有更新

  • ln 软连接命令

    ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

    小细节:

    当我们使用 pwd 指令查看目录时,仍然看到的是软链接所在目录。

  • history 命令 查看历史命令

    history (功能描述:查看已经执行过历史命令)

5、日期类命令

  • date 指令-显示当前日期

    (1)date (功能描述:显示当前时间)

    (2)date +%Y (功能描述:显示当前年份)

    (3) date +%m (功能描述:显示当前月份)

    (4)date +%d (功能描述:显示当前是哪一天)

    (5)date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒)

  • date 指令-设置日期

    date -s 字符串时间

  • cal 日历命令

    cal [选项] (功能描述:不加选项,显示本月日历)

6、搜索查找类命令

  • find 命令

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

    find [搜索范围] [选项]

Linux笔记(包含shell编程)_第4张图片

  • locate 命令

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

    locate 搜索文件

    特别说明

    ​ 由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。

    直接输入 updatedb即可,数据库就创建成功了

  • grep 指令和 管道符号 |

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

grep [选项] 查找内容 源文件

-n:显示匹配行和行号

-i:忽略字母大小写

7、压缩和解压类

  • gzip/gunzip 指令

    gzip 用于压缩文件, gunzip 用于解压的

    gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)

    gunzip 文件.gz (功能描述:解压缩文件命令)

    细节说明:

    当我们使用 gzip 对文件进行压缩后,不会保留原来的文件

  • zip/unzip 指令

    zip 用于压缩文件, unzip 用于解压的,这个在项目打包发布中很有用的

    zip [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)

    unzip [选项] XXX.zip (功能描述:解压缩文件)

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

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

  • tar 指令最常用的命令

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

    tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

    选项说明

    Linux笔记(包含shell编程)_第5张图片

小细节:

​ ①指定解压到的那个目录,事先要存在才能成功,否则会报错。

​ ②- C :指定要解压的目录

8、磁盘分区、挂载

  • linux下查看所有设备挂在情况

    lsblk 或者 lsblk -f

  • 进行分区

    通过 fdisk /dev/sdb 开始对 /sdb进行分区,

    m 显示命令列表

    p 显示磁盘

    n 新增分区

    d 删除分区

    w 写入并退出分区

    分区步骤如下: 开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。

  • 格式化磁盘

    命令: mkfs -t ext4 /dev/sd"n"(磁盘名)

  • 磁盘的挂载(关机失效)

    mount 设备名称 挂载目录

  • 磁盘的卸载

    umount 设备名称 或者 挂载目录

  • 永久挂载

    通过修改/etc/fstab实现挂载

    添加完成后 执行mount –a 即刻生效

    /etc/fatab文件参数介绍

    第一列:磁盘设备文件或者该设备的Label或者UUID

    第二列: 设备的挂载点,就是你要挂载到哪个目录下

    第三列: 磁盘文件系统的格式,

    ​ 包括ext2、ext3、reiserfs、nfs、vfat等

    第四列: 文件系统的参数 ,defaults代表同时具有

    ​ rw,suid,dev,exec,auto,nouser,async等默认参数的设置

    第五列: 能否被dump备份命令作用

    ​ 0 代表不要做dump备份

    ​ 1 代表要每天进行dump的操作

    ​ 2 代表不定日期的进行dump操作

    第六列: 是否检验扇区

    ​ 0 不要检验

    ​ 1 最早检验(一般根目录会选择)

    ​ 2 1级别检验完成之后进行检验

9、磁盘情况查询

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

du -h /目录

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

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

​ -h 带计量单位

​ -a 含文件

​ --max-depth=1 子目录深度

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

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

10、网络配置

  • ifconfig 查看网络配置

  • 如何修改ip

    (1)第一种方法:图形化操作

    (2)第二种方法:命令行方式 vi /etc/sysconfig/network-scripts/ifcfg-ens33

Linux笔记(包含shell编程)_第6张图片

​ DEVICE=eth0 #接口名(设备,网卡)

BOOTPROTO=none

​ # IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP 协议

​ BROADCAST=192.168.1.255 #广播地址

​ HWADDR=00:0C:2x:6x:0x:xx #MAC地址

IPADDR=192.168.1.23 #IP地址

NETMASK=255.255.255.0 # 网络掩码

NETWORK=192.168.1.0 #网络地址

ONBOOT=yes #系统启动的时候网络接口是否有效(yes/no)

​ TYPE=Ethernet #网络类型(通常是Ethemet)

修改后一定要重启服务:

service/systemctl network restart

11、进程

(1)ps(process)

Linux笔记(包含shell编程)_第7张图片

Linux笔记(包含shell编程)_第8张图片

Linux笔记(包含shell编程)_第9张图片

(2)ps -aux

​ -a : 显示当前总段的所有进行信息

​ -u : 以用户的格式显示进程信息

​ -x : 显示后台进程运行的参数

  • 详细内容解释

    ps –aux|grep xxx

    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:启动进程所用的命令和参数,如果过长会被截断显示

(3)ps -ef
  • 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:启动进程所用的命令和参数

(4)kill

​ kill pid 杀死指定pid对应的进程.

​ killall 杀死所有的进程

​ -9: 强行杀死进程

(5)pstree 进程树

​ pstree [选项] ,可以更加直观的来看进程信息

​ 常用选项:

​ -p :显示进程的 PID

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

12、服务

(1)service(CentOS6)
  • 注册在系统中的标准化程序

  • 有方便统一的管理方式(常用的方法)

​ service 服务名 start

​ service 服务名 stop

​ service 服务名 restart

​ service 服务名 reload

​ service 服务名 status

  • 查看服务的方法 /etc/init.d/服务名

  • 通过chkconfig 命令设置自启动

​ 查看服务 chkconfig --list|grep xxx

​ chkconfig --level 5 服务名 on

  • 运行级别

在这里插入图片描述

​ 查看默认级别: vi /etc/inittab

​ Linux系统有7种运行级别(runlevel):常用的是级别3和5

​ 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

​ 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

​ 运行级别2:多用户状态(没有NFS),不支持网络

​ 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式

​ 运行级别4:系统未使用,保留

​ 运行级别5:X11控制台,登陆后进入图形GUI模式

​ 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

(2)systemctl(CentOS7)
  • 注册在系统中的标准化程序

  • 有方便统一的管理方式(常用的方法)

​ systemctl start 服务名(xxxx.service)

​ systemctl restart 服务名(xxxx.service)

​ systemctl stop 服务名(xxxx.service)

​ systemctl reload 服务名(xxxx.service)

​ systemctl status 服务名(xxxx.service)

  • 查看服务的方法 /usr/lib/systemd/system

  • 查看服务的命令

​ systemctl list-unit-files

​ systemctl --type service

  • 通过systemctl 命令设置自启动

​ 自启动 systemctl enable service_name

​ 不自启动systemctl disable service_name

  • 运行级别

在这里插入图片描述

查看默认级别: vim /etc/inittab

Centos7运行级别简化为:

​ multi-user.target 等价于原运行级别3(多用户有网,无图形界面)

​ multi-user.target 等价于原运行级别5(多用户有网,有图形界面)

13、netstat

​ 查看系统的网络情况

​ -an 按一定顺序排列输出

​ -p 显示哪个进程在调用

​ netstat –anp|grep 8080 查看占用8080端口的进程

同上:最常用

​ netstat –nltp|grep 8080

九、vi和vim 编辑器的使用

1、vi和vim的基本介绍

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

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

2、vi和vim的三种模式

(1)正常模式(默认模式)

(1)通过vi或者是vim打开文档后默认进入到一般模式,该模式下主要负责查看和一些基础的修剪工作

(2)常用的操作

dd 删除光标当前行
dnd / ndd 删除n行
u 撤销上一步
x 删除一个字母,类似于键盘上Delete功能
X 删除一个字母,类似于键盘Backspace功能
yy 复制光标当前行
p 粘贴
dw 删除一个词
yw 复制一个词
Shift+g 移动到页尾
1+Shift+g 移动到目标行
N+shift+g 移动到第N行
Shift+6 移动到行头
Shift+4 移动到行尾
(2)编辑模式

​ 在模式下,程序员可以输入内容。

​ 按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可

​ 如想退出编辑模式,需要按下【ESC】按键

i 当前光标前录入
a 当前光标后录入
o 当前光标行的下一行录入
I 行首录入
A 行尾录入
O 当前光标行的上一行录入
(3)命令模式

(1)在一般模式下输入 / 或者 : 进入命令模式,命令模式一般用于存盘、退出VIM 、显示行号、搜索、批量替换等操作.

(2)常用的操作

:w 保存
:q 退出
:! 强制执行
:%/s/old字符/new字符 批量替换
/要查找的词 搜索,n查找下一个,N查找上一个
:set nu 显示行号
:set nonu 关闭行号
noh 取消高亮显示

十、用户管理-用户组管理-文件权限管理

1、用户管理

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

(2)对用户的操作

​ 新增用户:useradd 新用户名

​ 设置密码: passwd 用户名

​ 用户是否存在:id 用户名

​ 切换用户:su – 切换用户名

​ 查看当前用户/登录用户:whoami/ who am I

​ 删除用户:userdel

2、用户组管理

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

(2)对用户组的操作

​ 新增组:groupadd 组名

​ 删除组:groupdel 组名

​ 修改用户的组:usermod –g 用户组 用户名

​ 增加用户时直接加上组:useradd –g 用户组 用户名

3、文件权限管理

(1)再说 ls -l

Linux笔记(包含shell编程)_第10张图片

  • 0-9位说明

    第0位确定文件类型(d, - , l , c , b)

    第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User

    第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group

    第7-9位确定其他用户拥有该文件的权限 —Other

  • 作用到文件

​ [ r ]代表可读(read): 可以读取,查看

​ [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件 是对该文件所在的目录有写权限,才能删除该文件.

​ [ x ]代表可执行(execute):可以被系统执行

  • 作用到目录

​ [ r ]代表可读(read): 可以读取,ls查看目录内容

​ [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录

​ [ x ]代表可执行(execute):可以进入该目录

(2)chmod

Linux笔记(包含shell编程)_第11张图片

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

​ u:所有者 g:所有组 o:其他人

​ a:所有人(u、g、o的总和)

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

​ chmod o+w 文件目录名

​ chmod a-x 文件目录名

  • 第二种方式:通过数字变更权限

​ r=4 w=2 x=1 rwx=4+2+1=7

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

​ 相当于 chmod 751 文件目录名

(3)chown

​ chown newowner file 改变文件的所有者

​ chown newowner:newgroup file 改变用户的所有者和所有组

​ -R 如果是目录 则使其下所有子文件或目录递归生效

(4)chgrp

​ chgrp newgroup file 改变文件的所有组

4、系统中用户和组的相关文件

(1)用户(user)的配置文件: /etc/passwd

​ 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

(2)口令的配置文件: /etc/shadow

​ 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时 间:不活动时间:失效时间:标志

(3)组(group)的配置文件: /etc/group

​ 每行含义:组名:口令:组标识号:组内用户列表

十一、任务调度

1、原理示意图

Linux笔记(包含shell编程)_第12张图片

crontab 进行 定时任务的设置

2、概述

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

任务调度分类:

​ 1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等

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

3、基本语法

crontab [选项]

常用选项:

Linux笔记(包含shell编程)_第13张图片

4、快速使用

4.1 任务的要求

​ 设置任务调度文件:/etc/crontab 设置个人任务调度。执行 crontab –e 命令。

​ 接着输入任务到调度文件

​ 如:*/1 * * * * ls –l /etc/ > /tmp/to.txt

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

4.2 步骤如下

(1)cron -e

(2) */ 1 * * * * ls -l /etc >> /tmp/to.txt

(3) 当保存退出后就程序。

(4) 在每一分钟都会自动的调用 ls -l /etc >> /tmp/to.txt

4.3 参数细节说明

(1)5个占位符说明

Linux笔记(包含shell编程)_第14张图片

(2)特殊符号说明

Linux笔记(包含shell编程)_第15张图片
(3)特定时间执行任务案例

Linux笔记(包含shell编程)_第16张图片

5、crond相关指令

(1)conrtab –r:终止任务调度。

(2) crontab –l:列出当前有那些任务调度

(3)service crond restart [重启任务调度]

6、案例

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

(1)先编写一个文件 /home/mytask1.sh date >> /tmp/mydate

(2)给 mytask1.sh 一个可以执行权限

​ chmod 744 /home/mytask1.sh

(3)crontab -e

(4)*/1 * * * * /home/mytask1.sh

(5)成功

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

(1) 先编写一个文件 /home/mytask2.sh date >> /tmp/mycal

​ cal >> /tmp/mycal

(2) 给 mytask1.sh 一个可以执行权限

​ chmod 744 /home/mytask2.sh

(3)crontab -e

(4) */1 * * * * /home/mytask2.sh 5) 成功

案例 3: 每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件中

mydb.bak。

(1)先编写一个文件 /home/mytask3.sh

​ /usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak

(2) 给 mytask3.sh 一个可以执行权限

​ chmod 744 /home/mytask3.sh

(3) crontab -e

(4) 0 2 * * * /home/mytask3.sh 5) 成功

十二、shell编程

1、为什么要学习shell编程

(1)Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理。

(2)对于 JavaEE 和 Python 程序员来说,工作的需要,你的老大会要求你编写一些 Shell 脚本进行程 序或者 是服务器的维护,比如编写一个定时备份数据库的脚本。

(3)对于大数据程序员来说,需要编写 Shell 程序来管理集群。

shell是什么?

Linux笔记(包含shell编程)_第17张图片

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

2、shell编程快速入门-shell脚本的执行方式

2.1 脚本格式要求

(1) 脚本以#!/bin/bash 开头

(2) 脚本需要有可执行权限

2.2 编写第一个shell编程

#!/bin/bash
echo "hello world"

2.3 脚本的常用执行方式

方式 1:(输入脚本的绝对路径相对路径)

(1)首先要赋予 helloworld.sh 脚本的+x 权限

(2)执行脚本

$chmod 777 myshell.sh
$./myshell.sh #相对路径
$/root/myshell.sh #绝对路径

方式 2: (sh+脚本),不推荐

说明:不用赋予脚本+x 权限,直接执行即可

sh ./myshell.sh

这样可以不用给执行权限,但是不推荐

3、shell变量

3.1 shell变量的介绍

(1)Linux Shell 中的变量分为,系统变量用户自定义变量

(2)系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER 等等

​ 比如: echo $HOME 等等…

#!/bin/bash/
echo "PATH=$PATH"
echo "user=$USER"

(3)显示当前 shell 中所有变量:set

3.2 shell变量的定义
  • 基本语法

(1)定义变量:变量=值

(2)撤销变量:unset 变量

(3)声明静态变量:readonly 变量,注意:不能 unset

  • 快速入门

案例 1:定义变量 A

案例 2:撤销变量 A

#!/bin/bash
A=100
echo "A=$A"
unset A
echo "A=$A"

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

#! /bin/bash
readonly A=99
echo "A=$A"   #定义和使用静态变量
unset A   #这个是失效的,不能取消
echo "A=$A"
 
3.3 定义变量的规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。

(2)等号两侧不能有空格

(3) 变量名称一般习惯为大写

3.2 将命令的返回值返回给变量(重点)

(1)A=’ ls -la ’ 反引号(就是tab上面那个),运行里面的命令,并把结果返回给变量 A

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

4、设置环境变量

基本语法

(1)export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量)

(2) source 配置文件 (功能描述:让修改后的配置信息立即生效)

(3) echo $变量名 (功能描述:查询环境变量的值)

Linux笔记(包含shell编程)_第18张图片

5、位置参数变量

5.1 介绍

当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变 量,

比如: ./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到 参数信息

5.2 基本语法

$n (功能描述:n 为数字,$0 代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9{10})

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

@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @(功能描述:这个变量也代表命令行中所有的参数,不过 @@把每个参数区分对待)

$#(功能描述:这个变量代表命令行中所有参数的个数)

Linux笔记(包含shell编程)_第19张图片

6、预定义变量

6.1 基本介绍

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

6.2 基本语法

​ $$ (功能描述:当前进程的进程号(PID))

​ $! (功能描述:后台运行的最后一个进程的进程号(PID))

​ $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令

​ 正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令

​ 执行不正确了。)

6.3 应用实例

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

#!/bin/bash
echo "当前的进程号=$$"
#后台的方式运行 myShell.sh
./myShell.sh &
echo "最后的进程的号=$!"
echo "执行的值=$?"

7、运算符

7.1 基本介绍

​ 学习如何在 shell 中进行各种运算操作。

7.2 基本语法

(1) “$((运算式))”或“$[运算式]”

(2) expr m + n

注意 expr 运算符间要有空格

(3) expr m - n

(4) expr \*, /, % 乘,除,取余

应用实例

案例 1:计算(2+3)X4 的值

(1) $((运算式))

#!/bin/bash
#第一方式$()
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"

(2)$[运算式]

#第二种方式[]
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"

(3)expr

#使用expr
TEMP=`expr 2 + 3`
RESULT3 = `expr $TEMP \* 4`
echo "result3=$RESULT3"

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

#求出两个参数的和
SUM=$[$1+$2]
echo "SUM=$SUM"

8、条件判断

8.1 基本语法

[ condition ](注意 condition 前后要有空格)

#非空返回 true,可使用$?验证(0 为 true,>1 为 false)

8.2 应用实例

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

8.3 常用的判断条件

(1)两个整数的比较

​ = 字符串比较

​ -lt 小于

​ -le 小于等于

​ -eq 等于

​ -gt 大于

​ -ge 大于等于

​ -ne 不等于

(2) 按照文件权限进行判断

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

​ -w 有写的权限

​ -x 有执行的权限

(3)按照文件类型进行判断

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

​ -e 文件存在

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

9、流程控制

9.1 if 判断
(1)基本语法
if [  条件判断式 ];then

	程序

fi

或者

if [ 条件判断式 ] then

	程序

elif [条件判断式] 

	then

		程序

fi

注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格 (2) 推荐使用第二种方式

•应用实例

案例:请编写一个 shell 程序,如果输入的参数,大于等于 60,则输出 “及格了”,如果小于 60,

则输出 “不及格”

9.2 case 语句
(1)基本语法
case $变量名 in
"值 1")
	如果变量的值等于值 1,则执行程序 1
	;;
"值 2")
	如果变量的值等于值 2,则执行程序 2
	;;
	…省略其他分支…
*)
	如果变量的值都不是以上的值,则执行此程序
;;
esac

应用实例

案例 1 :当命令行参数是 1 时,输出 “周一”, 是 2 时,就输出"周二", 其它情况输出 “other”

#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
9.3 for循环
(1)基本语法

基本语法一:

for 变量 in 值 1 值 2 值 3…
    do 
        程序
    done

基本语法二:

for (( 初始值;循环控制条件;变量变化 )) 
    do
        程序
    done
9.4 while 循环
(1)基本语法
while [ 条件判断式 ] 
do
	程序
done

10、read读取控制台输入

10.1 基本语法

read(选项)(参数)

选项:

​ -p:指定读取值时的提示符;

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

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

10.2 应用实例

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

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

#!/:in/bash
#案例1:
read -p "请输入一个数num1=" NUM1
echo "你输入的值是num1=$NUM1"
#案例2
read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"

10、函数

10.1 函数介绍

shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。

10.2 系统函数
  • basename 基本语法

功能:返回完整路径最后 / 的部分,常用于获取文件名

basename [pathname] [suffix]

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

选项:

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

  • dirname 基本语法

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

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

10.3 自定义函数
(1)基本语法

[ function ] funname[()]

{

​ Action; [return int;]

}

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

(2)应用实例

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

#!/bin/bash
function getSum(){
	SUM=$[$n1+$n2]
	echo "和是=$SUM"
}
read -p "请输入第一个数n1" n1
read -p "请输入第二个数n2" n2
#调用函数
getSum $n1 $n2

11、shell编程综合案例

需求分析

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

(2)备份开始和备份结束能够给出相应的提示信息

(3)备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:

2019-09-25_230201.tar.gz

(4) 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。

编写一个shell 脚本。

思路分析:
Linux笔记(包含shell编程)_第20张图片

代码实现:

Linux笔记(包含shell编程)_第21张图片

在这里插入图片描述

Linux笔记(包含shell编程)_第22张图片

十三、rpm和yum

1、 rpm

(1)RPM(RedHat Package Manager),Rethat软件包管理工具,类似windows里面的setup.exe

是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通

用的。

(2) 查询已安装的rpm列表 rpm –qa|grep xx

(3)rpm包的名称:firefox-52.5.0-1.el7.centos.x86_64

​ 名称:firefox

​ 版本号:52.6.0-1

​ 适用操作系统: el7.centos.x86_64

​ 表示centos7.x的64位系统。

(4)安装rpm

​ rpm –ivh rpm包名

​ -i 安装 install

​ -v 查看信息

​ -h 查看进度条

(5)卸载rpm

​ rpm -e RPM软件包

2、 yum

(1) 类似于我们java开发中的maven工具,可以从镜像网站上下载应用程序,并直接安装

(2) yum 操作

​ yum list|grep xx软件列表

​ yum install xxx 下载安装

十四、javaEE开发的环境设置

8.1 安装JDK

(1)将JDK解压缩到opt目录下

(2) 配置环境变量 , vim /etc/profile

​ JAVA_HOME=/opt/jdk1.8.0_152

​ PATH=/opt/jdk1.8.0_152/bin:$PATH

​ export JAVA_HOME PATH

(3)配置完成后执行如下操作

​ 安装完成注销重新登录一下

​ source /etc/profile

​ 重启系统[最靠谱]

8.2 安装Tomcat

(1)解压缩到/opt

(2)进入到Tomcat目录下的bin目录中,启动tomcat ./startup.sh

8.4 安装MySQL

(1)检查工作
  • CentOS6

    rpm -qa|grep mysql

    如果存在mysql-libs的旧版本包如下:

在这里插入图片描述

​ 请先执行卸载命令:rpm -e --nodeps mysql-libs

  • CentOS7

    rpm -qa|grep mariadb

    如果存在如下:

在这里插入图片描述

​ 请先执行卸载命令:rpm -e --nodeps mariadb-libs

  • 检查/tmp文件夹权限

​ 执行 :chmod -R 777 /tmp

(2)安装MySQL
  • 拷贝安装包到opt目录下

    MySQL-client-5.5.54-1.linux2.6.x86_64.rpm

    MySQL-server-5.5.54-1.linux2.6.x86_64.rpm

  • 执行如下命令进行安装

    rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm

    rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm

(3)检查安装是否成功
  • 安装完成后查看MySQL的版本

执行 mysqladmin --version,如果打印出消息,即为成功
在这里插入图片描述

​ 或者通过rpm查询

​ rpm –qa|grep –i mysql(-i 表示忽略大小写)

(4)MySQL服务的启停

​ 启动: service mysql start

	停止: service mysql stop
(5)设置root用户的密码

​ mysqladmin -u root password ‘123123’

(6)登录MySQL
	mysql  -uroot  -p123123
(7)建库

​ create database 库名

(8)建表

​ create table 表名 (字段名 字段类型(长度)约束 …)

(9)字符集问题
  • 查看字符集 show variables like 'character%’;

  • 查看MySQL的安装位置.

Linux笔记(包含shell编程)_第23张图片

  • 修改字符集

    将/usr/share/mysql/中的my-huge.cnf 拷贝到/etc/下,改名为my.cnf

    tips:

    ​ mysql启动时,会优先读取/etc/my.cnf文件。

在[client] [mysqld] [mysql]中添加相关的字符集设置

[client]

default-character-set=utf8

[mysqld]

character_set_server=utf8

character_set_client=utf8

collation-server=utf8_general_ci

[mysql]

default-character-set=utf8

重启MySQL服务,查看字符集

service mysql restart

  • 修改已有库表的字符集

​ 修改库的字符集

​ alter database 库名 character set ‘utf8’;

​ 修改表的字符集

​ alter table 表名 convert to character set ‘utf8’;

(10)远程访问
  • MySQL默认的root用户只允许本机登录,远程通过SQLyog工具不能登录.

  • 查看MySQL mysql库中的用户表

​ 列显示: select * from user\G;

​ 查询常用字段: select host,user,password,select_priv from mysql.user;

  • 创建可以远程访问的root用户并授予所有权限

​ grant all privileges on . to root@’%’ identified by '123123‘;

  • 修改用户的密码

    修改当前用户的密码

    set password =password('123456’)
    

    修改某个用户的密码

​ update mysql.user set password=password(‘123456’) where user=‘li4’;

  • 注意: 所有通过user表的修改,必须使用flush privileges 命令才能生效.

你可能感兴趣的:(Linux)