VMware虚拟机

Xshell+Xftp

1 介绍

  1. Linux 是一个开源、免费的操作系统,具有很强的稳定性、安全性、以及处理多并发的能力,目前大多数企业级应用甚至是集群项目都部署运行在 Linux 操作系统上,很多软件公司考虑到开发成本都首选Linux,Linux 在中国软件公司得到了广泛的使用。

  2. Linux 的主要发行版本有以下几种:
    Ubuntu(乌班图)RedHat(红帽)CentOS、Debain(蝶变)、Fedora、SuSE、OpenSUSE、红旗Linux(国产)。
    我们使用 CentOS 进行学习。

2 安装

  1. VMware12 虚拟机。
  2. CentOS 镜像系统。

3 Linux 的目录结构

在这里插入图片描述

  1. /:Linux 系统的根目录。
  2. root:该目录为系统管理员目录,root 是具有超级权限的用户。
  3. bin:存放常用的命令文件,如cd、ls等等。
  4. sbin:存放系统管理员使用的系统管理命令。
  5. home:用户的主目录,每创建一个用户都会生成一个该用户对应的家目录:/home/用户名/,一般该目录名以用户的账号命名,叫作用户的家(根)目录;用户登录以后,默认打开自己的家目录。
  6. lib:这个目录存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件,几乎所有的应用程序都需要用到这些共享库。
  7. etc:这个目录存放 Linux 系统的所有配置文件。
  8. usr:Linux 的系统资源目录,里面存放的是一些系统可执行文件或者系统的一些文件库。
  9. boot:这个目录存放启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  10. tmp:该目录用来存放临时文件。
  11. dev:dev是 Device(设备)的缩写,该目录下存放的是 Linux 的外部设备,Linux 中的设备也是以文件的形式存在。
  12. media:识别出的外设设备挂在在该目录下。
  13. mnt:系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容。
  14. opt:存放 Linux 中额外安装的软件的安装包
  15. /usr/local/:安装包安装成功之后解析出的所有程序文件所在的目录。
  16. var:存放在不断扩充的东西,例如将那些经常被修改的文件存放在该目录下,如运行的各种日志文件等。
  17. bin ->usr/bin:存放系统预装的可执行程序,这里存放的可执行文件可以在系统的任何目录下执行

4 远程操作工具

  1. Xshell:远程终端。
  2. Xftp:远程文件传输。

5 vi 和 vim 编辑器

vi 和 vim 是 Linux 提供的文本编辑器。

  1. 三种模式:
模式进入方法
正常模式vim 文件名,进入正常模式。若文件存在,则打开文件;若文件不存在,则新建并打开文件。正常模式下只能进行读操作。
编辑模式在正常模式下,按ai,进入编辑模式,按ESC,退出编辑模式。在编辑模式下可以进行读写操作。
命令模式在正常模式下,输入:,进入命令模式。
命令模式下,输入q:文件没有做任何修改时退出;
wq:保存并退出;
q!:不保存强制退出。
  1. 快捷键:
快捷键功能
yy复制光标所在行
nyy复制光标所在行向下 n 行(包括光标所在行)
p粘贴到光标所在行的下一行
dd删除光标所在行
ndd删除光标所在行向下 n 行(包括光标所在行)
u撤销上一次操作
gg跳转到首行
G跳转到尾行
/xxx搜索 xxx,在命令模式下使用
set nu显示行号,在命令模式下使用
set nonu关闭行号,在命令模式下使用
注意:前8个快捷键在正常模式下使用,后3个快捷键在命令模式下使用。
将光标移动到第n行:
	(1)set nu 显示行号
	(2)输入 n
	(3)按下 shift + g

6 用户管理

root 账户,具有 Linux 系统的最高权限,可以进行用户管理操作。

在 root 账户下,使用命令:

  1. useradd 用户名:添加用户。
    该命令执行后,会有三个操作:
    (1)创建用户
    (2)创建用户根目录 /home/用户名
    (3)创建主组,组名为用户名,并把该用户添加到该组中。
    也可以在创建用户时,指定用户根目录:useradd -d /home/目录名 用户名

  2. passwd 用户名:为用户设置密码。密码不能少于7位,不能过于简单,不能是单词的组合。

  3. userdel -r 用户名:删除用户以及用户根目录。userdel 用户名:只删除用户,不删除用户根目录。

  4. id 用户名:查看用户信息。主要用于查看用户的组信息。

  5. su 用户名:切换用户。从 root 切换到普通用户可以直接切换;从普通用户切换到 root 或者普通用户之间相互切换需要输入密码。

  6. logout:注销。只在使用 xshell 这种远程控制软件操作 linux 系统时生效,注销后会同时断开与服务器的远程连接;在 linux 系统本机上输入该命令时无效。

  7. whoami:查看当前用户。

  8. usermod -g 新组名 用户名:改变用户所在组。

  9. usermod -d 新家目录名 用户名:改变用户的家目录。

     注意:为防止使用root账户登录时权限过大,可以使用普通用户登录,
     在有需要使用更高权限时,使用su命令切换到管理员账户。
    

7 组

组是 Linux 中,进行权限管理的基本方式。可以将具有相同权限的用户放在同一个组中,便于管理。

  • groupadd 组名:新建组。
  • groupdel 组名:删除组。
  • gpasswd -a 用户名 组名:将用户添加到组中。
  • gpasswd -d 用户名 组名:将用户从组中删除。
  • useradd -g 组名 用户名:创建用户时指定用户所在组(此时不会创建默认组)。

8 用户和组相关的文件以及 linux 的运行级别

8.1 用户和组相关的文件

  1. /etc/passwd:用户配置文件(存储用户的相关信息),【文件中每行含义】用户名:密码(已加密):用户id:组id:家目录:shell
  2. /etc/group:组配置文件(存储组相关信息),【文件中每行含义】组名:密码(已加密):组id:组内用户列表(一般不显示)
  3. /etc/shadow:口令配置文件(存储口令相关信息,文件内容以加密形式存在)

8.2 linux 的运行级别

Linux 系统有7个运行级别:

级别含义
0关机
1单用户(找回密码或不小心设置成0或6级时可以使用)
2多用户无网络
3多用户有网络
4保留
5图形界面
6重启
  • /etc/inittab:该文件是系统运行级别的配置文件

  • init [012356]:修改运行级别,注意4为保留,不可用。

      root 密码丢失,如何找回密码?
      原理:单用户模式下,以root身份登录,不需要输入密码。
      步骤:开机时,在引导界面快速多次敲击enter键,进入新界面,按下e键之后,选择kernel行,
      再次按下e键,进入到配置文件界面,输入1(运行级别设置为1:单用户),回车,最后按下b键,
      系统重新启动,之后可以使用passwd命令修改root密码。详细步骤可以百度搜索。
      ------------------------------------------------------------------------------
      注意:上述方法仅限于能够直接操作linux服务器,远程控制软件不可以(因为忘记密码,连接不上服务器)。
      因为只有能够直接接触到linux本机的人员才可以使用上述方法修改密码,所有该人员一定是具备了很高的
      权限,所以对linux系统本身的安全性不会构成额外的威胁。
    

9 系统命令

  • shutdown now:立即关机,同halt

  • shutdown -h 时间:定时关机。时间可以为数字,单位为分钟;也可以为具体时间,如17:00。

  • shutdown -r now:立即重启。

  • shutdown -c:取消上一条 shutdown 命令。

  • reboot:立即重启。

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

      注意:关机或重启之前,建议先sync同步一下数据,以免数据丢失。
    

10 帮助命令

  • man 命令名:查看该命令的系统说明文档。分屏显示,Enter:下一行,空格:下一页,q:退出。
  • help 命令名:查看该命令的开发注释。

11 目录、文件操作

11.1 pwd、ls

  • pwd:查看当前所在目录的全路径。
  • ls [选项] [目录名]:查看指定目录下的所有目录和文件。
    • ls:查看当前目录。
    • ls /home:查看 home 目录。
    • ls -a /home:查看 home 目录下 (包括隐藏和虚拟的) 所有目录和文件。
    • ls -l /home:以列表形式展示 home 目录下的所有目录和文件。
    • ls -al /home:以列表形式展示 home 目录下(包括隐藏和虚拟的)所有目录和文件。

11.2 cd

  1. cd 目录名:切换目录。
  2. 绝对目录:从盘符根路径开始。Linux 只有一个根路径 /。如,cd /home/mcc:进入 mcc 目录。
  3. 相对目录:从当前目录开始。假设当前在 home 目录,cd mcc:进入 mcc 目录。
  4. ~:绝对目录,当前用户的根目录。~ = /home/用户名。cd ~:进入用户根目录。
  5. ..:相对目录,当前目录的上一级目录。cd ..:进入上一级目录。
  6. .:相对目录,当前目录。cd ./xxx = cd xxx:进入当前目录下的 xxx 目录。

11.3 mkdir、rmdir

  1. mkdir [选项] 目录名:创建单级目录。如,mkdir ./dir:在当前目录下创建 dir 目录。
  2. mkdir -p 目录名/目录名:创建多级目录。mkdir -p ./dir1/dir2:在当前目录下创建 dir1 和 dir2 目录(这两个目录之前都不存在)。
  3. rmdir 目录名:删除一个空目录,删除非空目录见11.6。

11.4 touch

  • touch 文件名列表(多个文件名用空格隔开):创建一个或多个空文件。如,touch text1.txt text2.txt。创建后,如果需要编写内容,可以用 vi 或 vim 打开。

vi 或 vim 创建的文件会默认直接打开。如果需要创建之后马上打开编辑,可以使用 vi 或 vim 创建;如果只需要创建,不需要打开,可以使用 touch 创建。

11.5 cp

  • cp [选项] sourceFile dest:将 sourceFile 复制到 dest (复制单个文件)。如,cp text.txt dir/textcp.txt:将 text.txt 复制到当前目录下 dir 文件夹下,文件名为 textcp.txt。
  • cp -r sourceDir dest:将 sourceDir 以及其中的文件,复制到 dest (复制目录和目录中的文件)。如,cp -r dir /home/mcc/,将 dir 目录和其中的文件,复制到 /home/mcc/ 下。

注意:使用 cp 复制文件(目录)时,若有同名文件(目录)会逐个提醒是否覆盖原文件(有几个重名就提醒几次),若不需要提示,全部覆盖原文件,可以使用命令\cp

11.6 rm

  • rm 文件名 文件名...:删除文件。会提示是否确认删除。
  • rm -f 文件名 文件名...:强制删除文件。不提示是否确认删除。
  • rm -r 目录名:删除目录以及目录中的文件。会提示是否确认删除。执行流程:先进入到目录中,删除目录中的全部文件,再删除该目录。
  • rm -rf 目录名:强制删除目录以及目录中的文件。不提示是否确认删除。

11.7 mv

命令结果
mv file dir(1)dir 存在,将 file 移动到 dir 下。
(2)dir 不存在,将 file 重命名为 dir。
mv dir1 dir2(1)dir2 存在,将 dir1,包括其中的子目录和文件,移动到 dir2 下。
(2)dir2 不存在,将 dir1 重命名为 dir2。
mv file1 file2将 file1 重命名为 file2,若 file2 已经存在,则会将 file2 覆盖。

11.8 cat

  • cat [选项] 文件名:以只读形式,查看文件内容。
  • cat -n 文件名:显示行号。

11.9 more

  • more 文件名:以只读、全屏方式,按页显示文件内容。 在这里插入图片描述

11.10 less

  • less 文件名:分屏查看文件内容,功能与 more 指令类似。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示加载内容,在显示大型文件时具有较高的效率。
    在这里插入图片描述

11.11 head

  • head 文件名:默认查看文件的前 10 行内容。
  • head -n num 文件名:查看文件的前 num 行内容。如,head -n 5 test.txt:查看 test.txt 的前 5 行内容。

11.12 tail

  • tail 文件名:默认查看文件的最后 10 行内容。
  • tail -n num 文件名:查看文件的最后 num 行内容。如,tail -n 5 test.txt:查看 test.txt 的最后 5 行内容。
  • tail -f 文件名:实时追踪该文件的所有更新。

11.13 echo

  • echo 输出内容:在控制台输出变量或常量的内容。其中,变量要用$变量名表示。如,echo $PATH:输出环境变量值;echo Hello, Linux:输出 Hello, Linux。

11.14 >、>>

  • 查看命令 > 文件:写入。将查看命令查出的结果保存到指定文件中。若文件不存在,则新建文件再保存;若文件存在,则直接保存。若两次操作指定的文件相同,则后一次查看的结果会覆盖前一次。如,ls > res.txt:将当前目录下的所有目录名和文件名,保存到 res.txt 中。如果再执行,ls test.txt > res.txt:则会覆盖文件中原有内容,将本次查看结果保存到 res.txt 中。
  • 查看命令 >> 文件:追加。与 > 类似,只不过新的查看结果会追加在文件的原有内容之后,不会覆盖。

12 日期与时间

日期与时间:

  • date:查看系统的日期与时间。
  • date +%Y:查看年份。
  • date +%m:查看月份。
  • date +%d:查看日期。
  • date '+%Y-%m-%d %H:%M:%S':以 年-月-日 时:分:秒 的格式查看系统日期和时间。
  • date -S '年-月-日 时:分:秒':设置系统日期和时间。

日历:

  • cal:查看当前月份的日历。
  • cal 年份:查看某一年的日历。

13 搜索目录与文件

find:

  • find [搜索范围] [搜索标准] 关键字:按条件搜索。
  • 搜索标准:-name:按名称查找,默认文件或目录所在的路径也在搜索范围之内-size:按大小查找。-user:按用户权限查找。
  • 举例:
    • 查找当前目录下名称中包含 a 的 txt 文件:find *a*.txt = find -name *a*.txt。其中,*是 Linux 系统中的通配符。
    • 查找当前目录下所有名称包含 d 的目录和文件:find *d*
    • 查找 etc 目录下所有 txt 文件:find /etc *.txt
    • 查找 etc 目录下文件大小小于 5M 的 txt 文件:find /etc -size -5M -name *.txt
    • 查找 etc 目录下,所有者是 mcc 的目录和文件:find /etc -user mcc

注意:+ 表示大于,- 表示小于,不写表示等于。

locate:

  • locate 关键字:在 Linux 系统的目录树中查找满足条件的目录和文件。
    因为新建的目录和文件不能及时同步到目录树中,因此使用该命令之前,需要先同步目录树:updatedb,再使用 locate 命令查找。

14 过滤查找

  • 查看或搜索命令 |grep [选项] 过滤条件:对查看或搜索的结果进行进一步过滤。
    选项:-n,显示匹配行的行号;-i,匹配时忽略大小写。
    注意:grep xxx是将所有名称包含xxx的记录都过滤出来。
  • |:管道符,表示将前一个命令的处理结果,传递给后面的命令处理。
  • 举例:
    find *.txt |grep a:查找名称包含 a 的 txt 文件。
    cat text.txt |grep -ni abc:查找 text.txt 中的 abc(忽略大小写),并显示 abc 所在行号。
    在这里插入图片描述

15 压缩

15.1 gzip、gunzip

  • gzip 被压缩文件名:压缩单个文件,后缀名为.gz,并删除被压缩的文件。
  • gunzip gz压缩包名:解压 gz 压缩包,解压完成后删除压缩包。

15.2 zip、unzip

  • zip 压缩包名 被压缩文件列表或目录列表:压缩单个或多个文件和目录,后缀名为.zip。不会删除被压缩的文件和目录。
  • unzip 压缩包名:将压缩包解压到当前目录下。原压缩包不会被删除。
  • unzip 压缩包名 -d 解压目录:将压缩包解压到指定目录下。

15.3 tar

  • tar -zcvf 压缩包名 被压缩文件列表或目录列表:压缩单个或多个文件和目录,后缀名为.tar.gz。不会删除被压缩的文件和目录。
  • tar -zxvf 压缩包名:将压缩包解压到当前目录下。原压缩包不会被删除。
  • tar -zxvf 压缩包名 -C 解压目录:将压缩包解压到指定目录下。
  • 选项说明:
    -c:压缩
    -x:解压
    -z:打包同时压缩
    -f:指定压缩后的文件名
    -v:显示详细信息
    -C:指定解压到哪个目录

16 文件、目录与组的关系

在 Linux 系统中,每个用户都有一个主组,主组时是创建用户时必须要指定的,并且不能修改。每个用户可以有多个额外组,这些额外组表示用户的其他权限。

对于文件和目录来说,每个文件和目录都有自己的所有者和组,只有所有者相同组的用户,才有操作权限。

使用命令ls -l查看文件和目录的所有者、所在组。
在这里插入图片描述

16.1 修改文件或目录的所有者

  • chown 新的所有者 文件或目录名:不会修改目录内的文件(目录)的所有者。
  • chown -R 新的所有者 文件或目录名:修改文件或目录的所有者,包括目录内的文件和目录。
  • chown [-R] 新的所有者:新的所在组 文件或目录名:同时修改所有者和所在组。

16.2 修改文件或目录的所在组

  • chgrp 新的所在组 文件或目录名:不会修改目录内的文件(目录)的所在组。
  • chown -R 新的所在组 文件或目录名:修改文件或目录的所在组,包括目录内的文件和目录。

17 权限管理

17.1 文件和目录的权限

对于用户来说,一个用户只有一个主组,但可以有多个副组
对于文件和目录来说,一个文件或目录只能有一个所有者,一个所在组

文件和目录的权限:

类型权限
文件(1)读 read:查看文件,如 cat、more、less、head、tail 等。
(2)写 write:编辑文件,如 vi、vim 等。
(3)执行 execute:运行可执行文件(.sh 文件)。
目录(1)读 read:查看目录内容,如 ls 等。
(2)写 write:在目录内创建、删除、重命名子目录或文件等。如 mkdir。
(3)执行 execute:进入该目录,如 cd 等。

17.2 查看权限

使用ls -l查看文件和目录的权限:
在这里插入图片描述

  • r:读权限。
  • w:写权限。
  • x:执行权限。

17.3 修改权限

如果要修改一个文件或目录的权限,那么该用户必须具有对这个文件或目录的w权限。
如果要删除一个文件或目录,那么该用户必须具有对这个文件或目录的上层目录的w权限。

修改权限:

  • chmod:修改文件或目录权限。
  • ugoa:分别对应所有者、同组用户、其他组用户、所有用户。
  • +-=:分别对应添加、删除、设置某个权限。
  • rwx:分别对应读、写、执行权限。
  • 举例:
    (1)删除 test.txt 同组用户的编辑权限:chmod g-w test.txt
    (2)删除 test.txt 同组用户的读取和编辑权限:chmod g-rw test.txt
    (3)为 test.txt 的同组用户添加执行权限,并删除其他用户的读取权限:chmod g+x,o-r test.txt

17.4 用数字的方式修改权限

rwx 权限可以用数字的和来表示:r-4, w-2, x-1
若权限为读和写,则可以使用 6,来代替 rw。
注意,如果使用数字设置权限,则必须将 u、g、o 的权限同时设置,也就是说必须三组数字一起使用。

举例:
将 test.txt 所有者权限设置为 rwx,同组用户为 rw,其他用户没有任何权限:chmod 760 test.txt

18 网络配置

  1. 获取 ip 地址,网关,DNS。如果是自己的电脑,按照下面的方法查看,如果是公司服务器,则公司会提供,只需设置进去就可以。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 网络的配置文件在 /etc/sysconfig/network-scripts 目录下:cd /etc/sysconfig/network-scripts
    在这里插入图片描述

  3. 使用 vi 或 vim 编辑器打开配置文件,进行配置。
    在这里插入图片描述

  4. 配置完成后,要重启 Linux 系统,才会生效:reboot

  5. 配置完成后,可以使用:ifconfig,查看 ip 地址。
    在这里插入图片描述

19 进程管理

  1. 查看进程:
    查看 Linux 系统正在运行的进程:ps -ef
    可以通过过滤功能,查看指定进程是否运行:ps -ef | grep xxx

  2. 关闭进程:
    使用命令:ps -ef,查看进程的 PID
    使用命令:kill -9 PID,关闭 PID 进程。
    killall 进程名:支持通配符,例如关闭所有名称以a开头的进程:killall a*

  3. 使用查看进程命令之后显示的信息及其含义:
    USER:用户名
    PID:进程号
    %CPU:占用CPU的百分比
    %MEM:占用内存的百分比
    VSI:占用虚拟内存的大小kb
    RSS:占用物理内存的大小kb
    TTY:使用的终端
    STAT:运行状态 S-sleep,R-run,Z-zoom僵死
    START:启动时间
    TIME:占用CPU时间

20 服务管理

systemctl [start|stop|restart|reload|status|enable] 服务名称

start:开启服务。
stop:停止服务。
restart:重启服务。
reload:重新加载数据、配置文件等。
status:查看服务状态。
enable:将服务设置为开机启动。

防火墙服务:firewalld

21 软件包管理

21.1 RPM 包

  • 查看当前系统中已经安装的 RPM 包:rpm -qa,查看是否安装 xxx 包:rpm -qa | grep xxx
  • 安装 RPM 包:rpm -ivh xxx.rpm
  • 卸载 RPM 软件:rpm -e 软件名称

21.2 YUM 包

YUM 包基于 RPM 包,类似于 Maven,不需要处理软件包之间的依赖关系,通过执行 YUM 命令,系统会自动去 YUM 服务器上下载所有依赖。不需要预先将软件包下载到本地。

  • 查看当前系统中已经安装的 RPM 包:yum list installed,查看是否安装 xxx 包:yum list installed | grep xxx
  • 安装 RPM 包:yum install 软件名称
  • 卸载 RPM 软件:yum remove 软件全名

22 搭建 JavaEE 开发环境

22.1 安装 jdk

  1. 使用 Xftp 软件,将 Linux 版本的 jdk 安装包传输到 /opt 目录下。
  2. 进入到 /opt 目录下,使用命令:tar -zxvf jdk压缩包名称 -C 解压路径,将 jdk 压缩包解压。
  3. 进入到 /etc 目录下,在profile文件中进行环境变量的配置。
  4. 配置环境变量:
    JAVA_HOME=jdk安装路径
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=$JAVA_HOME/lib:.
    export JAVA_HOME PATH CLASSPATH
    
  5. 重启 Linux 系统:reboot或重新加载 profile 配置文件:source profile
  6. 输入:java -version,查看 jdk 是否安装成功。

22.2 安装 tomcat

  1. 使用 Xftp 软件,将 Linux 版本的 tomcat 安装包传输到 /opt 目录下。
  2. 进入到 /opt 目录下,使用命令:tar -zxvf jdk压缩包名称 -C 解压路径,将 tomcat 压缩包解压。
  3. 进入到 tomcat 安装目录下的 bin 目录,执行 startup.sh文件,启动 tomcat 服务器。
  4. 使用:ps -ef | grep tomcat,查看是否存在 tomcat 进程,如果存在,则代表已经启动了 tomcat 服务器。也可以在浏览器中,输入 http://localhost:8080,看能否访问到页面。
  5. 如果要在外部浏览器访问 Linux 的 tomcat 服务器,如在 Windows 系统上访问,则需要关闭 Linux 的防火墙服务:systemctl stop firewalld,之后在 Windows 的浏览器中输入:http://Linux的ip地址:8080,就可以访问。

22.3 安装 MySQL

  1. 检查 Linux 中是否安装了 mariadb:yum list installed | grep mariadb,如果安装了,需要卸载:yum remove mariadb全称
    在这里插入图片描述
  2. 使用 Xftp 软件,将 Linux 版本的 mysql 安装包传输到 /opt 目录下。
  3. 进入到 /opt 目录下,使用命令:tar -zxvf mysql压缩包名称 -C 解压路径,将 mysql 压缩包解压。
  4. 由于 mysql 解压之后的目录名很长,不方便后续使用,所以重命名 mysql 目录名:mv 原目录名 新目录名,注意,新目录之前不能存在,否则会将原目录移动到新目录下,而不是重命名。这里假设重命名后的目录名为:mysqlDir。
  5. 在 mysqldir 下,创建存放数据的目录 data:mkdir data。该目录用来存放数据库文件,数据库的表等数据都放在 data 目录下。
  6. 创建用来执行mysqld命令的 Linux 用户:groupadd mysql useradd -g mysql mysql。该用户专门用来执行 mysql 的 mysqld 命令,此命令用来初始化 msyql 的基本信息
  7. 初始化 mysql,使用 mysqld 命令初始化数据库的基本信息。在 mysqlDir/bin 目录下,使用命令:./mysqld --initialize --user=mysql --datadir=/opt/mysqlDir/data --basedir=/opt/mysqlDir。该命令执行后,会生成一个临时的 mysql 数据库 root 用户的密码,先将改密码记录下来,后续第一次登录 mysql 时需要使用。
    在这里插入图片描述
  8. 开启 mysql 的安全功能。该功能将客户端和服务器之间传输的数据进行加密,通过证书提供了身份验证机制。在 mysqlDir/bin 目录下,使用命令:./mysql_ssl_rsa_setup --datadir=/opt/mysqlDir/data,开启该功能。
  9. 修改 mysql 安装目录的权限。由于安装 mysql 是在 root 账户下安装的,所以之前新建的,用于管理 mysql 的账户并不具有最高权限。因此,要修改 mysql 安装目录,即 mysqlDir 的所有者为 mysql,所在组为 mysql,并开放所有权限。在 mysqlDir 的上级目录下执行命令:chown -R mysql:mysql /opt/mysqlDir/chmod 777 /opt/mysqlDir/
  10. 启动 mysql。在 mysqlDir/bin 目录下,使用命令:./mysqld_safe &,启动 mysql 服务,其中 & 表示后台启动。使用:ps -ef | grep mysql,查看 mysql 服务是否启动成功。
  11. 登录 mysql。在 mysqlDir/bin 目录下,使用命令:./mysql -u用户名 -p,输入初始化密码,登录 mysql。其中,-u 表示使用哪个账户登录 mysql,-p 表示使用密码登录。
  12. 修改密码。登入 mysql 后,使用命令:show databases;,第一次使用时,会提示修改密码。使用命令:alter user '用户名'@'主机域名或ip' identified by '新密码';,如 alter user 'root'@'localhost' identified by 'mcc';,修改用户密码。
  13. 授权远程访问 mysql。在没有授权之前只能在本机访问 mysql,授权远程访问之后,就可以让其他计算机通过网络访问 Linux 上的 mysql。
    (1)登入 mysql 后,使用命令:grant all privileges on *.* to 用户名@'%' identified by '密码';,授权远程访问。其中*.* 的第一个*表示所有数据库,第二个*表示所有的数据表,% 表示 ip 地址,也可以指定具体的 ip 地址,如 root@localhost、root@192.168.235.130 等。
    (2)更新权限信息,使用命令:flush privileges;,刷新权限。
    (3)关闭防火墙:systemctl stop firewalld。可以使用:systemctl status firewalld,查看防火墙是否关闭成功(Active inactive(dead))。
    (4)远程连接 mysql。在其他计算机的数据库软件上,如 Windows 上的 SQLyog,输入 Linux 系统的 ip 地址,端口号:3306,授权了远程访问的用户名和密码,即可远程连接 Linux 上的 mysql。
  14. 关闭 mysql。在 mysqlDir/bin 目录下,使用命令:./mysqladmin -u用户名 -p shutdown,输入密码,关闭 mysql 服务。使用:ps -ef | grep mysql,查看 mysql 服务是否关闭成功。

23 shell 编程

23.1 格式要求

#!/bin/bash 开头,每一行不需要以分号结尾,且 shell 文件需要有可执行权限。
例如:编写一个 shell 程序,输出 Hello World!。


vim shell.sh

#!/bin/bash
echo "Hello World!"

赋予可执行权限:chmod +x shell.sh(每个用户都赋予了执行权限)
执行:./shell.sh(假设在当前目录下)
(以后台运行的方式执行脚本:./xxx.sh &)
输出:Hello World!


若不赋予 shell 文件可执行权限,需要使用sh + 脚本路径的方式执行。

23.2 变量

23.2.1

在引用变量时,需要使用$变量名
显示当前 shell 中的所有变量:set。set | more

  1. 系统变量/环境变量
    PATH、HOME、PWD、USER等。
    系统/环境变量所有的 shell 脚本都可以使用。
    例如:输出PATH的值,echo “PATH = $PATH”

  2. 用户变量
    (1)定义变量:变量=值
    注意:等号两侧不要写空格。
    用户变量只有当前的 shell 脚本可以使用。
    (2)撤销变量:unset 变量
    (3)声明静态变量:readonly 变量
    注意:静态变量不能撤销。

  3. 变量命名规则
    字母、数字、下划线组成;开头不能是数字;等号两侧不能有空格。
    习惯将变量名全大写。


将命令运行的结果赋值给变量:

A=`ls -l 目录`
A=$(ls -l 目录)
两种写法等价,例如:
将home目录下的所有文件的查看结果赋值给变量H
H=`ls -l /home` 或 H=$(ls -l /home)

  1. 将用户变量转换为系统/环境变量
    系统/环境变量是不能直接添加的,可以使用下面的步骤将用户变量转换为系统/环境变量:
export 变量=值 (将变量输出为系统/环境变量)
source 配置文件 (让修改后的配置信息生效) source /etc/profile
所有的系统/环境变量都存储/etc/profile 文件中,
export 的作用就是将变量写入到 profile 文件中,
source 的作用是重新加载 profile,使系统/环境变量生效。

23.2.2 位置参数变量和预定义变量

  1. 位置参数变量

shell 脚本能够获取到命令行中输入的参数信息,即:命令行输入的执行命令中带有一些参数,这些参数能够被 shell 脚本中的代码获取到。

代码作用
$nn = 0,1,2,…,其中 $0 代表命令本身,$1-$9 表示第一到第九个参数,
10以上(含10)的参数需要使用大括号 ${10}
$*命令行中的所有参数,看成一个整体,返回的参数个数为1
$@命令行中的所有参数,每个参数独立看待,返回的参数个数为n
$#命令行中所有参数的个数

在 for 循环时,遍历输出命令行中所有的参数,假设命令行命令为:./shell 13 27 36,如果使用 $*,则只会打印一行数据:13 27 36,如果使用 $@,则会打印三行数据:13 \n 27 \n 36。

在这里插入图片描述
例:编写一个 shell 脚本,在命令行中获取各个参数的信息

#!/bin/bash
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "$#"

执行:./shell.sh 30 60
结果:
./shell 30 60
30 60
30 60
2

  1. 预定义变量

shell 设计者预先定义的变量,可以直接在 shell 脚本中使用(类似环境变量)。

变量作用
$$当前进程的进程号
$!后台运行的最后一个进程的进程号
$?最后一次执行的命令的返回状态。
若 $?=0,表示上一个命令执行正确;若非0,表示执行不正确

23.3 运算符

格式:
(1)$((运算式))$[运算式]
(2)expr m + n+ 两侧要有空格
(3)expr 命令可以使用的运算符还有:减:-乘:\*除:/取余:%等。
推荐使用中括号形式。

例1:计算 (2+3)x4 的值。

#!/bin/bash
# 第一种方式$(())
RESULT1=$(((2+3)*4))
# 第二种方式
RESULT2=$[(2+3)*4]
# 第三种方式
TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP \* 4`
# 第三种方式使用了将命令运行的结果赋值给变量
# 也可以改写成 TEMP=$(expr 2 + 3) RESULT3=$(expr $TEMP \* 4)

例2:求命令行输入的两个参数的和。

#!/bin/bash
# 假设命令行输入的命令是:./shell.sh 12 15
SUM=$[$1+$2]

23.4 条件判断

  1. 语法:

[_条件判断语句_],注意,语句前后要有空格,这里用下划线表示空格。
当 [ ] 内不是具体的判断语句时,如 [1],那么只要 [ ] 内非空就返回 true,可以用 $? 验证,0 为 true,>1 为 false。
例如:

```powershell
[ abc ]   true 
[]   false
[ condition ] && echo "ok" || echo "no"
# 因为[]内有内容,所以返回true,整个语句最后的返回值由后面的部分决定。 
```
  1. 常用的判断条件:
数值类比较作用文件权限及
类型判断
作用
=比较两个字符串-r
-lt小于-w
-le小于等于-x执行
-eq等于-f文件存在并且
是一个普通文件
-gt大于-e文件存在
-ge大于等于-d目录存在
-ne不等于

例:

# “ok” 是否等于 “ok”
[ "ok"="ok" ]
# 23是否大于等于22
[ 23 -ge 22 ]
# /root/install.log 是否存在
[ -e /root/install.log ]

23.5 流程控制

23.5.1 if 判断

# 语法
if[_条件判断语句_]
then
	程序
elif[_条件判断语句_]
then
	程序
...
fi # 表示if判断结束

例:读取控制台输入的参数,若大于60,输出合格,否则输出不及格。

#!/bin/bash
if[ $1 -ge 60 ]
then
	echo "及格"
elif[ $1 -lt 60 ]
then
	echo "不及格"
fi

23.5.2 case 语句

# 语法
case $变量名 in
	"值1")
		程序1
	;;
	"值2")
		程序2
	;;
	...
	*)
		程序 # *代表如果不是以上几种情况的话,则执行本程序
	;;
esac

23.5.3 for 循环

# 语法1
for 变量 in "值1" "值2"... # 注意,这里的变量不需要使用 $ 引用
do
	程序
done
# 语法2
for(初始值;循环条件;变化量) # 注意,这种形式的for循环可以使用< > i++ i--等
do
	程序
done

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

#!/bin/bash
# 写法1
for i in "$*"
do
	echo "the number is: $i"
done
# 写法2
for j in "$@"
do
	echo "the number is: $j"
done

假设命令行输入:./xxx.sh 1 2 3
写法1输出:
the number is 1 2 3
写法2输出:
the number is 1
the number is 2
the number is 3

例2:计算1到100所有数字相加的和。

#!/bin/bash
RESULT=0
for(i=0;i<=100;i++) # 只有这种for循环可以使用<=,i++这种写法
do
	RESULT=$[$RESULT+$i] # 不是命令赋值给变量,是单纯的运算符运算
	# RESULT=$(expr $RESULT + $i)
done

23.5.4 while 循环

# 语法
while[_条件判断语句_]
do
	程序
done

例:从命令行输入一个数字n,计算1+…+n的和。

#!/bin/bash
SUM=0
i=0
while[ $i -le $1 ]
do
	i=$[$i+1]
	SUM=$[$SUM+$i]
done

23.6 read 读取控制台输入

read是指在脚本运行过程中与控制台互动,读取控制台输入的信息,类似于 C++ 的 cin,不是最开始输入命令行命令执行脚本时的那些参数。
参数:
-p:指定在控制台显示的提示信息。
-t:指定读取时等待的时间,单位秒。

例:
read -t 10 -p "请输入一个数:" num:在控制台上打印提示信息“请输入一个数”,用户在10s内输入数字,用 num 接收。

23.7 函数

函数分为系统函数和自定义函数

  1. 系统函数:
basename:返回完整路径最后 / 后面的部分(不包括/),常用来获取文件名。
basename [pathname] [suffix]
basename [string] [suffix]
basename 会删掉 pathname 或 string 中所有的前缀以及最后一个 /,然后将剩下的字符串返回。
若指定了 suffix,则 basename 还会将所有的 suffix 去除。
其中,suffix:是否保留拓展名。

例:返回 /home/aaa/text.txt 的文件名
basename /home/aaa/text.txt 返回:text.txt
basename /home/aaa/text.txt .txt 返回:text
dirname:与 basename 相反,返回完整路径最后 / 前面的部分(不包括/),常用于返回路径。
例:返回 /home/aaa/text.txt 的路径
dirname /home/aaa/text.txt 返回:/home/aaa
  1. 自定义函数
#!/bin/bash
# 语法
function funname() {
	语句;
	[return xxx;]
}
调用函数时,直接写函数名 + 要传入的参数即可。

例:编写一个函数,计控制台输入的两个参数的和。

#!/bin/bash
function getSum() {
	sum=$[$num1+$num2]; # 调用控制台传入的两个参数num1, num2
						# 因为shell函数没有形参,因此变量名必须一致
	echo "和为:$sum" 
	# return sum;
}

# 读取控制台输入
# 因为shell函数没有形参,因此变量名必须一致
read -p "清输入第一个数:" num1
read -p "清输入第二个数:" num2

# 调用getSum
getSum $num1 $num2
# sum=getSum $num1 $num2
#echo "$sum"

24 Ubuntu

  1. su 和 sudo 的区别:

su + 用户名:切换用户。
sudo + 命令:以超级管理员 root 身份执行命令。

使用 su 时,需要输入对方的密码才能成功切换,会造成安全隐患。如切换的用户是 root 用户时,会造成 root 用户密码的泄露,这种问题在有多个用户都需要使用 root 权限时更加明显,并且切换到 root 账户之后,会获得 root 账户的所有权限,危险很大。

使用 sudo 时,会提示输入本账户的密码,输入正确之后以 root 权限执行命令,并且 sudo 命令会生成记录日志,日志中记录了哪些用户使用 root 权限执行了哪些命令。此外,sudo 还可以在配置文件中配置哪些用户可以使用 sudo 命令获得 root 权限,保证了系统的安全性。

  1. apt:

apt(Advanced Packaging Tool,安装包管理工具),类似 CentOS 的 yum。

命令作用
sudo apt-get update更新源:修改 sources.list 文件内容之后,
使用该命令使新配置生效。
sudo apt-get install package安装包
sudo apt-get install package --reinstall重新安装包
sudo apt-get remove package删除包
sudo apt-get source package下载该包的源代码
sudo apt-get upgrade package更新已安装的包
sudo apt-cache show package获取包的相关信息,如说明、大小、版本等

由于 Ubuntu 服务器在国外,下载安装包时间很久,可以通过国内镜像的方式进行下载,下面是教程:
清华镜像源:http://mirrors.tuna.tsinghua.edu.cn/
因为 apt 命令在执行时会先去 /etc/apt/sources.list 文件中指定的服务器上搜索安装包链接,所以为了加速,只需要将服务器地址修改为清华镜像源即可。
使用命令:echo "" > sources.list,清空 sources.list 文件内容,之后将清华镜像源的配置命令全部粘贴到 sources.list 中即可。

小技巧:清空文件内容echo "" > 文件名

  1. 安装 ssh:

Ubuntu 默认没有安装 ssh 服务,可以通过下面步骤安装:
(1)安装:sudo apt-get install openssh-server,执行命令之后,会在系统上安装 ssh 的客户端和服务端。
(2)启动:service sshd restart,启动 sshd 服务,监听 22 号端口。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐