Linux开发环境搭建

声明此文是小白本人学习Linux所写主要参考(搬运)了:

👏【运维】--Linux - 随笔分类 - 唐浩荣 - 博客园 (cnblogs.com)

以及:

感谢此文所引用的文章的作者提供的优质学习资源,如有侵犯,请原作者联系我删除

1、在VMware中安装CentOS7

image

准备工作:提前下载和安装好VMware。VMware的安装可以参考上一篇文章:VMware15的下载及安装教程

1.1 CentOS7的下载

官网下载地址:https://www.centos.org/download/。

进入CentOS下载官网,找到64位的CentOS7版本。

image

点进来后,发现它给我们列出了所在区域可用镜像源(可以说是非常的良心的),我们随便选择一个,这里以阿里云的为例:

image

选择标准的CentOS7映像下载。

image

下载之后会得到一个ISO文件。

image

1.2 CentOS7的配置

1、打开“VMware Workstation“软件,选择”创建新的虚拟机“。

image

2、选择“典型”选项,然后下一步。

image

3、选择“稍后安装操作系统”,点击下一步。

image

4、客户机操作选择“Linux”,版本选择“CentOS 7 64位”,点击下一步。

image

5、输入“虚拟机名称”,选择虚拟机文件保存的位置,点击下一步。

image

6、最大磁盘默认20G大小即可,然后选择“将虚拟机磁盘存储为单个文件”,下一步。

image

7、点击”自定义硬件配置“。

image

8、选中”新CD/DVD“,选择”使用ISO映像文件“,然后设置CentOS7的ISO映像路径,点击关闭。

image

网络适配器默认NAT就好。

9、点击完成,如下。

image

接下来我们安装CentOS7。

1.3 CentOS7的安装

1、选中刚刚配置的CentOS7,然后点击“开启此虚拟机”。

image

2、虚拟机启动之后会出现如下界面(白色表示选中),默认选中的是Test this media & install CentOS 7。

我们将鼠标移入到虚拟机中,并按下键盘中的“↑”键,选择Install CentOS 7,最后按下“Enter 键”。

界面说明:

Install CentOS 7 安装CentOS 7

Test this media & install CentOS 7 测试安装文件并安装CentOS 7

Troubleshooting 修复故障

image

注意: 在虚拟机中的操作,鼠标必须要移入到虚拟机中,否则虚拟机感应不到,无法对其进行操作。

​ 鼠标移动到虚拟机内部单击或者按下Ctrl + G,鼠标即可移入到虚拟机中。

​ 按下Ctrl + Alt,鼠标即可移出虚拟机。

3、按下Enter进行安装。

image

4、等待系统加载完成。

image

5、选择使用哪种语言,推荐使用英文。但如果是第一次安装,建议先安装中文版的熟悉一下,之后再选择英文的进行实践,这里就介绍中文的,下滑至底部选择中文。

image

6、【本地化】只配置日期和时间,键盘和语言支持没有特殊情况默认就好。

image

7、中国范围内都选择为上海(因为只有上海可选),并选择为24小时制,设置完成后单击完成按钮

image

8、【软件】中只配置软件选择,安装源系统会自动识别,所以不用管。

image

9、然后我们选择安装的系统是否含有界面,界面一般对于我们来说用处不大,而且CentOS的界面不好操作,所以这里选择最小安装。

image

10、【系统】中只配置安装位置,指的是系统如何分区,其它的都默认就好。

image

11、对分区不清楚的就选择自动配置分区,这里演示我要配置分区。

image

12、手动分区我们要选择标准分区,然后点击下面的“+”添加分区。

image

我们分别创建三个分区:/boot区、swap交换分区、根分区/

13、添加 /boot分区,用来放启动文件,大小300MB足矣,然后点击“添加挂载点”。

image

image

14、添加 swap分区,这个是交换分区,一般情况是物理内存的2倍大小,用于物理内存不足时使用,可能造成系统不稳定,

​ 所以看情况,可以设置小一点,甚至设置为0MB,这里我设置为512MB,然后点击”添加挂载点“。

image

image

15、增加根分区,表示所有空间大小,这里不填写大小,即默认剩余的空间都给根分区,然后点击”添加挂载点“。

image

image

16、点击”完成“。

image

17、点击”接受更改“。

image

18、回到界面,点击“开始安装“。

image

19、接下来配置用户设置。

(1)、设置管理员ROOT密码,这是最高权限root用户的密码(默认账号为root,密码为现在要设置的)。

​ 在实际中root密码越复杂越好,因为这里只是演示,所以密码就没有那么复杂了。

​ 提示:这个密码非常重要,请务必牢记!!!

image

image

(2)创建用户,这里就是普通的用户,权限比较低,这一步我们可以省略。

image

20、用户设置好了之后,等待CentOS安装完成,,然后点击“完成配置”。

image

21、等待配置全部完成后“点击重启”。

image

22、CentOS的启动之后的界面如下。

image

23、下面我们来登录CentOS,使用默认账号为root,密码为 你在前面安装时设置的root密码

注意:在输入密码时,linux为了安全起见,是看不到你输入的密码。*同时,如果是使用的是键盘右边的数字键盘输入密码的话,建议查看一下num lock键是否开启。*

image

24、使用普通用户登录,普通用户的权限较低,很多地方不能操作,所以使用较少。

image

至此,CentOS7的安装全部完成了。

说明:CentOS 7默认安装好之后是没有自动开启网络连接的!所以下面我们还要配置一下CentOS7的网络。

1.4 CentOS7的网络配置

因为前面在设置CentOS7的网络适配器的时候,设置是NAT模式。

所以这里有两种方法,一种是自动获取IP,另一种是固定获取IP

1.4.1 自动获取IP

①、首先要确保的是CentOS为NAT模式。

image

②、在VMware界面(管理员方式启动)点击“编辑”里面的“虚拟网络编辑器”,然后勾选DHCP服务将IP地址分配给虚拟机,并设置子网IP(默认就好)。

image

image

③、点击NAT模式旁边的“NAT设置”,然后修改与子网IP同网段下的网关IP,就是前三位必须相同,

​ 即192.168.30要相同,最后一位数不相同即可(其实已经自动设置好了,默认),最后点击“确认”保存设置。

image

④、然后启动虚拟机,进入网络配置文件目录:cd /etc/sysconfig/network-scripts/,并且用 ls 命令查看是否有ifcfg-xxx名称的配置文件(ifcfg-lo除外),如果没有则说明网卡没有被识别,这种只能重装或者换个CentOS的版本。

image

⑤、编辑ifcfg-ens33文件:vi ifcfg-ens33。按 i 进入insert编辑模式,

​ 将BOOTPROTO设为dhcp,将ONBOOT设为yes,

​ 按下Esc进入命令模式输入:wq保存并退出。

image

⑥、配置完成之后输入:service network restart,重启网卡让网卡设置生效,之后就可以上网了。

image

⑦、输入ip addr检查一下动态分配的IP,可以发现分配的动态IP为192.168.30.128。

image

⑧、最后验证是否可以访问外网。

image

发现是可以访问外网的。自动获取IP至此就介绍完了,下面介绍另一种方式。

1.4.2 固定获取IP (推荐)

①、点击“编辑”里面的“虚拟网络编辑器”,取消勾选DHCP服务将IP地址分配给虚拟机。

image

②、启动虚拟机,进入网络配置文件目录:cd /etc/sysconfig/network-scripts/,然后编辑ifcfg-ens33文件:vi ifcfg-ens33。按shift+i进入insert编辑模式,

修改以下内容:

  • BOOTPROTO=static 启用静态IP地址

  • ONBOOT=yes 开启自动启用网络连接

    添加以下内容:

  • IPADDR=192.168.30.100 设置IP地址

  • NETMASK=255.255.255.0 子网掩码

  • GATEWAY=192.168.30.2 设置网关

    注意:IPADDR不能和子网IP冲突(最后一位只要在0~255范围内随便取一个数字,这里选择100),GATEWAY即”NAT设置“里面的网关IP。

    最后按下Esc进入命令模式输入:wq保存并退出。

imageimage

修改和添加内容后如下图:

image

③、输入service network restart 重启网卡让网卡设置生效。

④、输入ip addr检查一下IP。

⑤、验证是否可以访问外网:ping www.baidu.com。

如果ping www.baidu.com不通,那么再测试一下百度的ip地址14.215.177.38能否ping通,如果ip能通而域名不通则说明DNS解析有误,需要设置DNS。

⑥、设置DNS(有两种方式)。

注意:DNS服务器可以只配一个,也可以配置多个,下面我用的是两个免费的DNS服务器,查看IP地址,测试联网。

----第一种是在 ifcfg-ens33 文件的后面进行添加DNS1=xxx.xxx.xxx.xxx。

image

注意改完后重启网卡才能生效。

----第二种方式是改vi /etc/resolv.conf或者直接echo -e "nameserver 114.114.114.114\nnameserver 223.5.5.5" >>/etc/resolv.conf。(\n是换行的意思)

使用vi命令添加的时候要注意格式:

  • nameserver xxx1.xxx1.xxx1.xxx1
  • nameserver xxx2.xxx2.xxx2.xxx2

使用echo命令则直接运行就可以了。

两种方式完成后的效果是一样的,如下图:

image
常用的免费DNS地址:

  • 国内移动、电信和联通通用的DNS:114.114.114.114。
  • 阿里:首选:223.5.5.5 备用:223.6.6.6
  • 百度 :180.76.76.76
  • 腾讯:首选:119.29.29.29,备用:119.28.28.28
  • 谷歌 8.8.8.8

详细可以参考:http://www.suozy.cn/post-21.html

网络配置完成我们就可以使用远程工具连接配置的IP访问该CentOS7服务器了,下面来介绍一下Xshell工具。

1.5 XShell连接CentOS7

我们实际在启动CentOS之后,通常都不会直接在VMware操作CentOS,而是使用工具,推荐使用Xshell。

Xshell下载地址:https://www.netsarang.com/zh/free-for-home-school/,一般都和Xftp一起下载。

image

到时候会发两条邮箱给你,下载之后就是傻瓜式安装。

XShell连接CentOS7的操作步骤:

①、仅仅安装了Xshell工具也还是不能连上CentOS7的,对电脑还需要一些配置(是不是非常麻烦,哈哈,程序员要有耐心,不然以后怎么找女朋友呀!)。

​ 我们在电脑上打开:控制面板—>网络和 Internet—>网络和共享中心—>更改适配器—>找到MVnet8—>右键属性—>双击Internet协议版本4。

image

在前面的设置中,我本机IP和网关的网段是在192.168.30.0~255之间的。CentOS7静态获取的地址是192.168.30.100,这个我记得很清楚。

所以我的配置如下,你自己根据你的网段来设置,但注意别和虚拟机的IP和网关相同就是了。

img

②、启动CentOS7,打开Xshell软件,点击“新建”。

image

③、填写虚拟机的IP地址,其它默认不管,然后点击“连接”。

image

④、之后会弹出登录的用户名和密码。

image

image

连接成功啦!

image

2、Linux的目录介绍和常用命令详解

2.1 Linux 系统目录结构

在我们平时生活中,操作系统用的最多的是Windows系统,如果你是土豪从小到大都是iPhone、Mac之类的电子产品,那你应该对Linux命令是非常熟悉的。在Windows系统下,系统的整个磁盘会被拆分为不同的磁盘分区,而且每个磁盘会分配一个不同的盘符,比如 C:\、D:\ 等等,每个磁盘分区都单独存放自己的文件,它们有自己的根目录,每个磁盘分区的起点就是它们的根目录,比如 C:\、D:\ 就相当于 C 盘和 D 盘的根目录了,如果想要找到一个文件,我们只要依次进入该文件所在的磁盘分区即可(这里假设是D盘),然后在进入该分区下的目录,最终找到这个文件。而Linux 操作系统也有目录的概念,只是Linux 和Windows 的磁盘管理有一点区别,Linux 是将整个磁盘进行统一的管理,不存在C:\、D:\ 等盘符,Linux整个系统只有一个根目录 "/",所有的文件和目录都是在这个根目录下,它表示 Linux 文件系统的起点,因为在Linux系统中一切都是文件,其中的目录、字符设备、光盘、打印机等都被抽象成了文件,所以平时和我们打交道的都是文件。

另外要注意一点,在Linux 中目录之间的间隔使用的是正斜线 (forward slash)"/",而 Windows中用的是反斜线 (back slash)""。

Linux系统在安装的时候系统会建立一些默认的目录,每个目录都有其特殊的功能,所以下面我们对 Linux 系统中的目录结构以及经常使用到的概念进行一个完整介绍。

image

下面来简单介绍一下这些目录的含义(红色标注为重点):

  • /:根目录,文件的最顶端,是整个 Linux 文件系统的起点。
  • /bin:bin是Binary的缩写, 用于存放系统中常用的命令,任何用户都有权限执行,例如:ls、mkdir、mv等等。
  • /boot: 用于存放Linux启动时的一些核心文件,包括一些连接文件以及镜像文件,其中Linux 的内核就存放在这个目录中。
  • /dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,例如:硬盘、光驱、鼠标等设备文件,在Linux中访问设备的方式和访问文件的方式是相同的。
  • /etc: 这个目录非常重要,用于存放系统和程序所需的配置文件,作用类似于 Windows 的注册表。
  • /home:普通用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,比如 user1 的home目录是 /home/user1。
  • /lib lib64:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。它们自己不能被执行,需要被其他的程序调用,几乎所有的应用程序都需要用到共享库。
  • /media:用于挂在设备,linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了,例如增加一块硬盘,需要手动挂载。
  • /opt:用于安装额外软件所用的目录,默认是空的。比如你安装一个Mysql数据库则就可以放到这个目录下。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /root:该目录为系统管理员,也就是超级权限者root用户的home目录。
  • /run:用于存放进程产生的临时文件。当系统重启时,这个目录下的文件应该被删掉或清除。
  • /sbin:s就是Super User的意思,存放的是系统管理员使用的系统管理程序。
  • /srv:存放一些服务启动之后需要提取的数据。
  • /sys:该目录下安装了内核中新出现的一个文件系统 sysfs,该文件系统是内核设备树的一个直观反映。
  • /tmp:用来存放一些临时文件的,所有用户都可执行写操作。
  • /usr:这是一个非常重要的目录,很多的应用程序和文件都默认放在这个目录下,类似于Windows下的Program Files目录。
  • /usr/bin: 系统用户使用的应用程序。
  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src: 内核源代码默认的放置目录。
  • /usr/local :该目录下一般是你安装软件的目录,也相当于在Windows下的Program Files这个目录。
  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志log文件。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

2.2 Linux的绝对路径与相对路径

文件的路径是用来帮助我们定位到某个文件的,一般文件的路径分为绝对路径和相对路径。

  • 绝对路径:指的是从根目录(/)开始写起的文件或目录路径,也就是将目录用完整的路径表示出来。
  • 相对路径:指的是相对于当前工作目录为起点来表示的文件路径。(注意:使用相对路径进入文件时最前面不加/)

简单举例:

①、绝对路径

例如我们进入:/usr/local/bin 目录下。

image

②、相对路径

我们首先回退到/usr/local目录,然后相对于这个目录进入/bin 目录。

image 或者 image 又或者直接使用绝对路径 image

两个特殊的目录:

  1. . :一个点代表当前的目录,也可以用 . / 来表示。
  2. . . :两个点代表上一层目录,也可以用 . . / 来表示。

注意:绝对路径和相对路径二者的使用完全看自己怎么选择,两者各有利弊,绝对路径可以在任何目录下进入其它任何目录中,可以保证他的路径是绝对正确的,但是如果目录文件很多则需敲一段很长的路径。而相对路径在有同名的目录下非常的方便,但是如果要在不同命的目录下进入到其它目录就很麻烦(不使用绝对路径的情况),首先得退到根目录,然后才能进入其它目录。

①、相对路径的用途:例如现在有三个目录分别为:

  • /usr/local/packages/etc
  • /usr/local/packages/bin

像这样的目录我们使用相对路径是非常方便的,如果我想从/usr/local/packages/etc目录进入到/usr/local/packages/bin目录,可以直接使用 cd ../bin ,这样非常的方便。

②、绝对路径的用途:绝对路径由于将路径全部完整的写出来了,所以是非常准确的。所以路径是写在 shell scripts 中的路径,那么最好使用绝对路径,虽然可能路径非常长,但是这种写法是绝对不会出错的。

2.3 Linux中的基本命令介绍

这里注意一点:系统bin目录下和sbin目录下是存放“指令”对应的可“执行程序文件”目录,其中bin目录是所有用户都可以使用里面的命令,而sbin目录文件对应指令都是"root"用户可以执行的指令,普通用户不能使用该目录里的命令,所以普通用户和和root用户的开头是有区别的:

  • root用户:用#开头
  • 普通用户:用$开头

下面来介绍Linux中的基本命令。

2.4 用户与用户组管理

用户、用户组和其他人的基本概念:

概念 描述
用户 表示能够使用系统的用户。root也是用户的一种,只是它有着最高的权限
用户组 表示用户的一个集合,不同组的用户对文件的权限是不一样的
其他人 顾名思义,它是能够使用系统的用户,但是没有加入任何用户组

下面是关于它们的一些基本命令和如何使用:

①、useradd:用于创建新的用户,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。。

语法格式为:useradd [选项] 用户名

常用选项:

  • -d 指定用户的家目录(默认为/home/username)
  • -e 账户的到期时间,格式为YYYY-MM-DD.
  • -u 指定该用户的默认UID
  • -g 指定一个初始的用户基本组(必须已存在),格式为:useradd –g 用户组 用户名
  • -G 指定一个或多个扩展用户组
  • -N 不创建与用户同名的基本用户组
  • -s 指定该用户的默认Shell解释器

简单举例:

image

在上面的命令中,表示创建一个普通用户并指定家目录的路径、用户的UID以及Shell解释器。这里注意/sbin/nologin,它是终端解释器中的一员,与Bash解释器有着天壤之别。一旦用户的解释器被设置为nologin,则代表该用户不能登录到系统中。

然后用id username命令来查看用户的信息:

image

②、passwd:用于修改用户密码、过期时间、认证信息等(root管理员在Linux系统中修改自己或他人的密码时不需要验证旧密码,这一点特别方便)。

语法格式为:passwd [选项] [用户名]

常用选项:

  • -l 锁定用户,禁止其登录
  • -u 解除锁定,允许用户登录
  • -d 使该用户可用空密码登录系统
  • -e 强制用户在下次登录时修改密码
  • -S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称

简单举例:

image

image

③、groupadd:命令用于创建用户组。

语法格式为:groupadd [选项] 群组名

常用选项:

  • -g 指定新用户组的组标识号(GID)。格式:groupadd -g 101 group
  • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

创建用户组的步骤非常简单,例如使用如下命令创建一个用户组linuxgroup,简单举例:

image

④、groupdel:用于删除创建的用户组。格式:groupdel 用户组名

⑤、groupmod:用于修改用户组。

语法格式为:groupadd [选项] 用户组名

常用选项:

  • -g GID 为用户组指定新的组标识号。
  • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n 新用户组 将用户组的名字改为新名字

简单实例(就不实际运行了):groupmod –g 10000 –n group3 group2

⑥、usermod:命令用于修改用户的属性。

语法格式为:usermod [选项] 用户名

常用选项:

  • -c 填写用户账户的备注信息
  • -d –m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
  • -e 账户的到期时间,格式为YYYY-MM-DD
  • -g 修改用户所属的用户组id,即gid
  • -G 修改用户所属的用户组,即把用户追加到某些组中
  • -L 锁定用户禁止其登录系统
  • -U 解锁用户,允许其登录系统
  • -s 变更默认终端
  • -u 修改用户的UID

简单举例:

--将用户zhangsan加入到root用户组中,这样扩展组列表中则会出现root用户组的字样,而基本组不会受到影响:

image

--修改用户zhangsan的用户UID值:

image

⑦、userdel:用于删除用户。

语法格式为:userdel [选项] 用户名

常用选项:

  • -f 强制删除用户
  • -r 同时删除用户及用户家目录

image

注意:一般在实际的删除用户时,都不会删除用户的home目录。

2.5 文件的基本属性和权限

在Linux系统中一切都是文件,但是每个文件的类型不尽相同,而且每个文件的访问权限也不相同,因此Linux系统使用了不同的字符来加以区分文件的类型访问权限,如下所示。

我们查看跟目录下的所有文件:

image

这里就以home目录为例,下面来简单分析一下。

image

其中最前面的一大块表示这个文件的类型与权限,第一个字符代表这个文件的类型(目录、文件或链接文件等):

类型 描述
- 普通文件,如hello.txt
d 目录文件
l 链接文件
b 块设备文件
c 字符设备文件
p 管道文件

后面的字符都为3个一组,第一组为"文件所有者的权限",即文件的所有者才能进行读写执行的操作。第二组为"用户组的权限",只要是在这个组的用户都权限。第三组为"其它非本用户组的权限"。

以下是更改文件属性的一些命令:

①、chgrp:更改文件所属用户组

语法格式为:chgrp [-R] 属组名 文件名

参数选项

  • -R:递归更改文件所属用户组,就是在更改某个目录文件的所属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

chown:更改文件所有者,也可以同时更改文件属组

语法格式为:chown [–R] 属主名 文件名 或者 chown [-R] 属主名:属组名 文件名

参数选项:

  • -R:递归更改文件所属用户组,就是在更改某个目录文件的所属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

chmod:更改文件的权限

语法格式为:chmod [选项] 文件名

文件权限的设置方法有两种,分别是使用数字和符号来进行权限更改,推荐使用数字,现在我们来学习:

(1)、数字类型改变文件权限

Linux 文件的基本权限有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。先复习一下刚刚上面提到的数据:文件的权限字符为:[-rwxrwxrwx] , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

权限 数字
r 4
w 2
x 1
- 0

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加来计算的,例如当权限为:[-rwxrwx---] 分数则是:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others= --- = 0+0+0 = 0

所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:

chmod [-R] xyz 文件或目录

选项与参数:

  • xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
  • -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

简单举例:

假如将文件权限改为:[-rwxr-x---],可以发现有些权限没有,那么权限的分数计算则为:[4+2+1][4+0+1][0+0+0]=750,所以执行:chmod 750 filename

(2)、字母类型改变文件权限

另外还有另一种改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:user:用户 ;group:组 ;others:其他。那么我们就可以使用 u, g, o 来代表三种身份的权限(为它们的首字母简写)。此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:

image

来实践一下:

  • 如果我们需要将文件权限设置为 [-rwxr-xr--] ,可以使用 chmod u=rwx,g=rx,o=r filename 来设定。
  • 如果我们需要将文件权限均设置为可写,可以使用 chmod a+w filename 来设定。
  • 如果我们需要将文件权限去掉而不更改其它的属性,可以使用 chmod a-x filename 来设定。

2.6 文件与目录管理(重要,常用)

①、cd:[change directory] 切换工作目录。语法格式为:cd [目录名]

cd ..     #进入上一层目录
cd ../..  #返回上两级目录 
cd /home  #进入home目录
cd /tmp   #进入tmp目录
cd        #进入个人的主目录 
cd ~      #进入当前用户的home目录
cd ~username  #进入到其它用户的home目录

②、pwd:[print working directory] 打印当前工作目录。语法格式为:pwd

只要输入pwd命令就可以打印当前目录,例如:

image

③、ls:[list] 打印当前所有目录和文件。语法格式为:ls [选项] [目录或文件名]

注意:如果ls 命令后边是目录,会显示目录下包含的文件信息,如果是文件名则会显示该文件的信息,如果没有跟任何参数则显示当前工作目录下包含的文件信息。

常用选项:

  • -a 显示所有文件,包括隐藏文件
  • -l 以长格式显示目录或文件的信息
  • -d 只显示目录本身的信息,不显示目录下包含的文件

简单举例:

image

④、mkdir:[make directory] 创建目录。语法格式为:mkdir [选项] 目录名

常用选项:

  • -p 可以用于创建嵌套的多级目录(重要!)

⑤、cp:[copy] 复制文件或目录。语法格式为:cp [选项] 源文件或目录 目标文件或目录

常用选项:

  • -a 相当于-pdr 连在一起使用
  • -p 连同文件的属性一起复制过去,而非使用默认的属性(备份常用)
  • -d 如果源文件为连接文件的属性,则复制连接文件属性而非文件本身
  • -r 递归复制,用于目录的复制
  • -i 如果目标文件已经存在,在覆盖是会先询问操作的进行。

⑥、mv:[move] 移动文件或目录。语法格式为:mv [选项] 源文件或目录 目标文件或目录

常用选项:

  • -f force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
  • -i 如果目标文件已经存在是,就会询问是否覆盖

⑦、rm:[remove] 删除文件或目录。语法格式为:rm [选项] 文件或目录

常用选项:

  • -r 如果删除的是一个目录,则必须使用这个选项
  • -f 强制删除,无须用户确认
  • 一般删除目录时,两个选项会同时使用 -rf,但是建议删除前先用 mv 命令将待删除的目录移动到一个指定的回收目录中去,等过一段时间确认不再需要这些文件和目录,再使用 rm 命令将其删除。
  • -i 在生成前会询问用户是否操作

⑧、touch:用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

语法格式为:touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

  • -a 改变档案的读取时间记录。
  • -m 改变档案的修改时间记录。
  • -c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
  • -f 不使用,是为了与其他 unix 系统的相容性而保留。
  • -r 使用参考档的时间记录,与 --file 的效果一样。
  • -d 设定时间与日期,可以使用各种不同的格式。
  • -t 设定档案的时间记录,格式与 date 指令相同。

2.7 查看文件的内容

①、cat:从第一行开始显示文本内容(适用于内容较少的文件,因为cat命令会将文件的内容从头读到尾,直到读完为止,当内容很多时,等内容读完则又要翻到上面去看前面的内容)。

②、tac:从最后一行开始显示,是 cat 的逆顺序。

#格式为:cat [参数选项] [文件]
cat filename  #从第一个字节开始正向查看文件的内容 
cat -n filename  #标示文件的行数 
tac filename  #从最后一行开始反向查看一个文件的内容 

③、more:一页一页的显示文本内容(适用于内容较多的),可以使用空格键或者回车键往下翻页查看后面的内容。

#格式为:more [参数选项] [文件]
more filename  #查看一个长文件的内容 

image

④、less:也适用于查看内容较多的文件,与 more 类似,但是比 less 比more更为灵活,less可以往上、往下翻页!按下键盘上空格键读一行,按下PgUp键可以往上翻页,按下PgDn可以往下翻页。但是less命令不会实时显示当前阅读的百分比。

#格式为:less [参数选项] [文件]
less filename  #查看一个长文件的内容 

⑤、head:用于只查看文件的前n行。

head -n 2 filename  #查看一个文件的前两行 
head -n 20 /etc/profile

⑥、tail:tail命令与head命令相反,tail命令用于查看文件后n行内容。

tail -n 2 filename  #查看一个文件的最后两行 
tail -n +1000 filename   #从1000行开始显示,显示1000行以后的

⑦、nl:nl命令可以显示内容的同时显示行号,与 cat -n 命令的作用差不多。

简单综合使用(没有任何实际意义):

#注:| 表示管道,表示上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
cat filename | head -n 3000 | tail -n +1000  #显示1000行到3000行
cat filename | tail -n +3000 | head -n 1000  #从第3000行开始,显示1000(即显示3000~3999行)

⑧、wc:用来查看查看文件的内容有多少个字符,多少行,多少个字节。

#语法格式:wc [选项] [文件]
参数:
  -l:显示行数
  -w:只显示单词数
  -c:只显示字节数

image

2.8 文件的查找命令

Linux中的查找命令有5个,分别如下:

  • which:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果,主要用来搜索命令所在的目录及别名信息,也可以验证命令是否存在。
  • whereis:搜索命令所在的目录及帮助文档路径,只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s);
  • locate:locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内查找合乎范本样式条件的文档或目录,所以速度比较快。(注意:CentOS7默认没有安装该命令
  • type:用于区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。type命令其实不能算查找命令;
  • find:最强大的查找命令,可以用它找到任何想找的文件,因为是在硬盘中查询,所以相对来说会慢一点。

注意:通常先不会使用 find 命令进行查找,因为速度慢!而都是先使用 whereis 或者 locate 来检查,当真的找不到了,才用 find 查找。是因为 whereis 与 locate是利用数据库来查找数据,所以相当快速,而且没有实际查询硬盘,比较节省时间。

whereis 和 locate 寻找的数据是由已创建的数据 /var/lib/ 中查找。但是数据库的更新默认是每天更新一次(不同系统可能会有差异),所以当新建文件或删除文件后去查找该文件, whereis 和 locate 会告诉你文件“not found”,因为必须更新数据库了。要手动更新数据库的方法也很简单,直接输入 updatedb 即可。 updatedb 命令会去读取/etc/updatedb.conf中的配置,然后去硬盘里面进行查找文件名操作,最后更新整个数据库文件。

①、which:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果,主要用来搜索命令所在的目录及别名信息,也可以验证命令是否存在。

#语法格式:which [-a] command  # -a:将所有由PATH目录中可以找到的命令均列出来,而不是只列出第一个被找到的命令。
which pwd  #搜索pwd命令所在的目录
which cd  #搜索cd命令所在的目录
which ls  #搜索ls命令所在的目录
which which  #搜索which命令所在的目录

②、whereis:用于搜索命令所在的目录及帮助文档路径,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。

whereis命令的参数如下:

  • -b 只查找二进制格式的文件
  • -m 只查找在说明文件man路径下的文件
  • -s 只查source源文件
  • -u 查找不在上述三个选项当中的其他特殊文件
#whereis [命令]
whereis ls  #显示一个二进制文件、源码或man的位置 
whereis grep

③、locate:在文件资料数据库中查找文件,所以速度非常快。

注意:CentOS7默认没有安装该命令,下面先来安装该命令:

yum install mlocate
#提示:Is this ok [y/d/N],这里执行y,再次出现是否继续也是执行y
#mlocate安装完成。接下来需更新后台数据库,输入命令:
updatedb
locate inittab

注意:大家经常拿locate和find命令进行比较,它两的区别是:find是从磁盘全盘检索,而locate 是在文件资料库中进行搜索。所以locate命令的执行要比find命令执行速度快很多。但是文件资料库是需要不断更新的。如果我们新创建的文件不更新文件资料库,那么使用 locate 命令是查找不到的。我们可以使用 updatedb 手动更新资料库(默认明天更新一次),但是对于/tmp目录下的新建文件,是更新不到文件资料库的,因为/tmp目录不属于文件资料库的收录范围。

locate的用法,简单举例:

#语法格式:locate[文件名]
locate命令的参数如下:
   #-i:忽略大小写差异;
   #-r:后面可接正则表达式的实现方式。
locate passwd  #搜索包含passwd的文件路径
locate /etc/sh  #搜索etc目录下所有以sh开头的文件。
locate ~/m  #搜索用户主目录下,所有以m开头的文件。
locate -i ~/m  #搜索用户主目录下,所有以m开头的文件,并且忽略大小写。

④、type:它是用来判断某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的,type命令其实不能算查找命令。

type命令的参数有:

  • -t:判断给定的指令为"外部指令","命令别名"或者"内部指令";
  • -p:如果给出的指令为外部指令,则显示其绝对路径,相当于which命令。;
  • -a:在环境变量"PATH"指定的路径中,显示给定指令的信息,包括命令别名。

命令的类型可能有如下几种:

  • alias: 别名;
  • keyword: 关键字,Shell保留字;
  • function: 函数,Shell函数;
  • builtin: 内建命令,Shell内建命令;
  • file: 文件,磁盘文件,外部命令;
  • unfound: 没有找到。
#命令格式:type [option] [commond]
type cd  #系统输出:cd 是 shell 内嵌(builtin)
type if  #系统输出:if 是 shell 关键字(keyword)
type mysql  #系统输出:未找到
type -t ls #系统输出:alias
type -t if #系统输出:keyword
type -p locate #系统输出:/usr/bin/locate

⑤、find:最强大的查找命令,可以用它找到任何想找的文件,因为是在硬盘中查询,所以相对来说会慢一点。

find命令的格式:find path -option [-print] [-exec -ok |xargs |grep] [command {} ; ]

1)path:要查找的目录路径。

  1. ~ 表示$HOME目录
  2. . 表示当前目录
  3. / 表示根目录

2)print:表示将结果输出到标准输出。

3)exec:对匹配的文件执行该参数所给出的shell命令。 形式为command {} ;,注意{}与;之间有空格

4)ok:与exec作用相同,区别在于,在执行命令之前,都会给出提示,让用户确认是否执行

5)| xargs 与exec作用相同 ,起承接作用,区别在于 |xargs 主要用于承接删除操作 ,而 -exec 都可用 如复制、移动、重命名等

6)options :表示查找方式,下面来介绍option中的一下选项。

(1) find参数:基于文件名的搜索:

与文件名有关的参数如下:

  • -name filename:查找文件名为filename的文件。filename可使用正则表达式表示。
  • -iname filename:会忽略大小写。

简单举例:

find / -name filename  #从根目录('/')开始根据filename的名字搜索相对应的文件和目录
find / -name passwd
find /usr/lib -name passwd
find /etc -name *init  #模糊搜索,以 init 结尾的文件或目录名
find /etc -name init???  #模糊搜索,?表示单个字符,即搜索到init_

(2) find参数:基于文件类型的搜索

与文件类型有关的参数如下:

  • -type TYPE:查找文件的类型为TYPE的文件。

上面TYPE的参数列表有:

f:普通文件;l:符号连接;d:目录;c:字符设备;b:块设备;s:(socket)套接字;p:FIFO。

简单举例:

find /home -type d  #查找/home目录下文件类型是目录的
find /var -type s  #查找/var目录下所有类型为socket的文件。

(3) find参数:基于文件大小的搜索:

与文件大小有关的参数如下:

  • -size SIZE:查找文件大小刚好等于SIZE的文件;
  • -size -SIZE:查找文件大小大于SIZE的文件;
  • -size +SIZE:查找文件大小小于SIZE的文件。

其中,SIZE的单位有:

  • c —— byte,字节;
  • w —— 字(2字节);
  • b —— bit,块(512字节);
  • k —— 千字节;
  • M —— 兆字节;
  • G —— 吉字节。

简单举例:

find . -size 6c -print  #查找等于6字节的文件 
find . -size -32k #查找小于32k的文件 
find / -size 10M -type f  #查询超过10M的文件

(4) find参数:基于时间属性进行搜索

与时间有关的参数共有这几种:-amin、-cmin、-mmin;-atime、-ctime、-mtime;

注意:a前缀表示文件最后一次被读取的时间,c前缀表示文件状态的最后一次改变的时间(写入文件、更改所有者、权限等),m前缀表示文件内容最后一次改变的时间,min后缀表示分钟,time后缀表示天数。

  • -atime n : 在过去的n天被读取过的文件
  • -ctime n : 在过去的n天属性被修改过的文件
  • -mtime n : 在过去的n天内容被修改过的文件

下面以 -mtime 说明时间:(+n,-n,n分别表示超过n天,n天以内和n天)

  • -mtime n: n为数字,列出n天之前的“一天之内”被更改过内容的文件;
  • -mtime +n:列出在n天之前(不含第n天本身)被更改过的文件名;
  • -mtime -n:列出在n天之内(不含第n天本身)被更改过的文件名;

image

由这个时光轴我们可以知道,最右边为当前时,+5 代表大于等于 6 天前的档案名, -5 代表小于等于 5 天内的档案名,5 则是代表 5-6 那一天的档案名。

下面简单举例:

find /etc -mmin -5  #在/etc目录下查找5分钟内内容被修改过的文件和目录
find /etc -mtime +5  #在/etc目录下查找5天之前内容被修改过的文件和目录

(5) find参数:基于用户或用户组名进行搜索

与用户或用户组名有关的参数如下:

  • -user name:name为用户账号名称;
  • -group name:name为用户组名;

简单举例:

find /home -user root  #在home目录下查询所有者为root的文件
find /home -group root  #在home目录下查询所属组为root的文件

(6) find参数:基于文件权限进行搜索

与文件权限有关的参数如下:

  • -perm mode:查找文件权限刚好等于mode的文件;
  • -perm +mode:查找文件权限“包含任一mode的权限”的文件;
  • -perm -mode:查找文件权限“必须要全部包括mode的权限”的文件。

下面简单举例:

#在当前目录及子目录中,查找属主具有读写执行,其他具有读执行权限的文件   
find . -perm 755
#查找用户有写权限或者组用户有写权限的文件或目录
find ./ -perm /220
find ./ -perm /u+w,g+w
find ./ -perm /u=w,g=w

(7) find后面执行命令  

#1、查找 del.txt 并删除,删除前提示确认 
find . -name 'del.txt' -ok rm {} \; 
#2、查找 aa.txt 并备份为aa.txt.bak 
find . -name 'aa.txt' -exec cp {} {}.bak \;
#3、查当前目录下的所有普通文件
find . -type f -exec ls -l {} \; 
#4、在 /logs 目录中查找更改时间在5日以前的文件并删除它们
find logs -type f -mtime +5 -exec -ok rm {} \;
#5、查询当天修改过的文件
find ./ -mtime -1 -type f -exec ls -l {} \;

(8) 组合条件搜索  

这里有两个参数:

  • -a:表示两个条件同时满足(and)
  • -o:表示两个条件满足任意一个即可(or)
#查找/etc目录下大于8MB同时小于20MB的文件
find /etc -size +8M -a -size -20M

find命令参考的链接:链接1 | 链接2

2.9 字符串匹配(grep)(常用)

grep:用来在文件中搜寻字符串匹配的行并输出,或者对目标文件逐行进行匹配检查,打印匹配到的行。

#查找 /etc/profile文件中包含 JAVA 字符串的行,并输出
grep JAVA /etc/profile

上面的输出结果:

image

#查找线程中包含 mysql的字符串的行,并且输出
ps aux | grep mysql

注:grep还可以使用正则表达式进行匹配

更详细的使用可以参考:linux中grep命令的用法

2.10 进程相关的命令(常用)

①、jps :显示当前系统的Java进程情况,及其id号。jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。

②、ps:(process status之意) 用于将当前时间点的进程运行情况选取下来并输出。格式为:ps [选项]

下面对命令选项进行说明:

  • -A :所有的进程均显示出来。
  • -e:显示所有进程,此参数的效果和指定"A"参数相同。
  • -f:显示详细信息,全格式。
  • -h 不显示标题。
  • -l :较长,较详细地将PID的信息列出。
  • a :显示终端上的所有进程,包括其他用户的进程。
  • u :列出有效用户的相关进程。
  • x :显示所有程序,不以终端机来区分,一般与a参数一起使用。
  • r:只显示正在运行的进程。

常用的组合命令:

ps aux  #(推荐)查看系统所有的进程数据
ps -ef  #查看系统所有的进程数据
ps aux | grep mysql #查看mysql的进程
ps -ef | grep mysql #查看mysql的进程

在Linux下显示系统进程的命令是ps,最常用的组合是ps -efps aux,二者的区别:ps -efps aux的查询目的是一样的, 就是显示所有在运行的进程, 只是二者的输出格式不同,ps -ef是用System V的格式输出,ps aux是用BSD格式输出;如果COMMADN列过长,aux会截断显示,而ef不会。

  • System V格式: UID , PID , PPID , C , STIME , TTY , TIME , CMD
  • BSD格式: USER , PID , %CPU , %MEM , VSZ , RSS , TTY , STAT , START , TIME , COMMAND

ps -ef 是用System V的格式来显示,其输示出的结果如下:

image

每个列的含义:

  1. UID:用户ID
  2. PID:进程ID
  3. PPID:父进程ID
  4. C:CPU占用率
  5. STIME:开始时间
  6. TTY:开始此进程的TTY----终端设备
  7. TIME:此进程运行的总时间
  8. CMD:命令名

ps aux是用BSD的格式来显示,其输出格式如下:

image

ps aux 与 ps -ef 不同的有列有:

  1. USER:用户名
  2. %CPU:进程占用的CPU百分比
  3. %MEM:占用内存的百分比
  4. VSZ:该进程使用的虚拟內存量(KB)
  5. RSS:该进程占用的固定內存量(KB)(驻留中页的数量)
  6. STAT:进程的状态
  7. START:该进程被触发启动时间
  8. TIME:该进程实际使用CPU运行的时间
其中STAT状态位常见的状态字符有
D   //无法中断的休眠状态(通常 IO 的进程);
R   //正在运行可中在队列中可过行的;
S   //处于休眠状态;
T   //停止或被追踪;
W   //进入内存交换 (从内核2.6开始无效);
X   //死掉的进程 (基本很少见);
Z   //僵尸进程;
<   //优先级高的进程
N   //优先级较低的进程
L   //有些页被锁进内存;
s   //进程的领导者(在它之下有子进程);
l   //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
+   //位于后台的进程组;

综上所述,如果想查看进程的CPU占用率和内存占用率,可以使用aux ,如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef。

③、kill / killall:kill命令用于根据进程id删除执行中的程序或工作,一般配合ps -ef或者ps aux使用。killall 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程。

最常用的信号是:

  • 1 (HUP):重新加载进程。
  • 9 (KILL):杀死一个进程。
  • 15 (TERM):正常停止一个进程。

如何杀死进程:

图形化界面的方式
kill pid(进程id)
kill -9 pid  #(-9表示强制关闭)
killall -9 程序的名字
pkill 程序的名字

④、top 是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

2.11 打包与压缩文件

①、tar:对文件进行打包,压缩和解压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压。

  • -z:通过gzip的支持进行压缩/解压缩
  • -j:通过bzip2的支持进行压缩/解压缩
  • -J (大写):通过xz的支持进行压缩/解压缩
  • -c :新建打包文件,也就是压缩文件
  • -t :查看打包文件的内容含有哪些文件名
  • -x :解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
  • -C dir :指定压缩/解压缩的目录dir
  • -v :在压缩/解压缩过程中,将正在处理的文件名显示出来
  • -f filename :filename为压缩后的文件名字 (只要用到tar命令,-f选项是必须要用的)

命令格式:tar [参数] [压缩后的文件名] [被压缩的文件(可以为多个文件,空格隔开)]

下面重点介绍一下-z -j -J这三个参数:

参数 作用 建议后缀命名
-z 用于gzip压缩/解压方式 文件名.tar.gz
-j 用于bzip2压缩/解压方式 文件名.tar.bz2
-J (大写) 用于xz压缩/解压方式 文件名.tar.xz
  • gzip:是公认的压缩这速度最快,压缩大文件的时候与其他的压缩方式相比更加明显,历史最久,应用最广泛的压缩方式
  • bzip2:压缩形成的文件小,但是可用性不如gzip
  • xz:是最新的压缩方式,可以自动提供最佳的压缩率

压缩速度:gzip > bzip2 > xz;压缩率:xz > bzip2 > gzip

(1) tar的简单压缩和解压

#压缩文件
tar -cvf test.tar test.txt #将test.txt压缩为test.tar
#查看压缩文件的内容
tar -tvf test.tar
#解压文件
tar -xvf test.tar  #解压至当前路径
tar -xvf test.tar -C /home/  #解压到指定路径

(2) tar使用gzip进行压缩和解压缩(最常用)。

#压缩文件
tar -zcvf filename.tar.gz file #将file压缩为filename.tar.gz格式(如果file是路径,则表示将该路径下的所有文件压缩)
tar -zcvf filename.tar.gz file1 file2 file3 ... #将多个file压缩为filename.tar.gz格式
#查看压缩文件的内容
tar -ztvf filename.tar.gz
#解压
tar -zxvf filename.tar.gz
tar -zxvf filename.tar.gz -C path

(3) tar使用bzip2进行压缩和解压缩。

#压缩文件
tar -jcvf filename.tar.bz2 file
#查看压缩文件的内容
tar -jtvf filename.tar.bz2
#解压
tar -jxvf filename.tar.bz2
tar -jxvf filename.tar.bz2 -C path

(4) tar使用xz进行压缩和解压缩。

#压缩文件
tar -Jcvf filename.tar.xz file
#查看压缩文件的内容
tar -Jtvf filename.tar.xz
#解压
tar -Jxvf filename.tar.xz
tar -Jxvf filename.tar.xz -C path

②、其它压缩/解压缩命令:

注意:下面的解压命令不是系统自带的,所以需要自行下载

bzip2 file1 #压缩一个叫做 'file1' 的文件 
bunzip2 file1.bz2 #解压一个叫做 'file1.bz2'的文件 


gzip file1 #压缩一个叫做 'file1'的文件 
gzip -9 file1 #最大程度压缩 
gunzip file1.gz #解压一个叫做 'file1.gz'的文件 

rar a file1.rar test_file #创建一个叫做 'file1.rar' 的包 
rar a file1.rar file1 file2 dir1 #同时压缩 'file1', 'file2' 以及目录 'dir1' 
rar x file1.rar #解压rar包 

#zip与unzip
zip file1.zip file1  #创建一个zip格式的压缩包 
zip -r file1.zip file1 file2 dir1  #将几个文件和目录同时压缩成一个zip格式的压缩包 
unzip file1.zip  #解压一个zip格式压缩包 

关于压缩与解压更详细可以参考:参考链接1 | 参考链接2

2.12 关机、重启与sync

关机、重启的命令有:shutdown、reboot、halt、poweroff。其中关机命令用的最多的是shutdown,重启用reboot,所以我们通常只用记住shutdown和reboot这两个目录即可。因为Linux系统的关机、重启是比较重要的操作,所以只有root权限才能操作shutdown、reboot等命令。

①、shutdown:将系统关机或者重启。语法格式为:shutdown [选项] 时间 警告

常用选项:

  • -h 将系统的服务停掉后,立即关机。
  • -r 将系统的服务停掉后就重启。
  • -t sec sec表示秒,即系统过多少秒后关机。
  • -c 取消已经在进行的shutdown命令内容。

常用命令的简单举例:

shutdown -t 30  #表示30秒之后自动关机。
shutdown -h now  #(常用)表示立刻关机。
shutdown -h 20:15  #表示在具体的20:15分会关机,如果在21:15才设置该命令,则隔天才关机。
shutdown -h +10  #表示10分钟后自动关机。
shutdown -r now  #表示立刻重启。
shutdown -r +30 'The system wil reboot after 30 minute'  #表示30分钟后系统会重启,并且后面的警告信息会给所有在线的用户。

②、reboot:将系统重启,等同于 shutdown –r now

③、halt:将系统关机,等同于shutdown –h now 和 poweroff

④、sync:将数据由内存同步到硬盘中。目前shutdown、reboot、halt等命令在关机是都会调用sync这个工具,但是你如果不放心也可以自己多次执行这个目录。

⑤、logout:注销

2.13 Linux补充知识点(必须会使用)

①、echo:用于输出字符串内容(echo后面默认定义的类型为字符串)。

#格式:echo [选项] [字符串]
echo hello echo #输出字符串
echo "\"hello echo\""  #输出转义字符

#输出变量
x=10
echo The value of variable x = $x 

#输出显示换行
echo -e "OK! \n"  #-e表示开启转义

②、&和&&

  • & 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
  • && 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1' && echo '2'

③、| 和 ||

  • | 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
  • || 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"

④、重定向 (>) 与追加(>>)

linux中经常会用到将内容输出到某文件当中,只需要在执行命令后面加上>或者>>号即可进入操作。

  • >:表示将一条命令执行的结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向到其它输出设备(文件,打开文件操作符,或打印机等等),重定向文件时,覆盖文件原有内容(文件的日期也会自动更新)
  • >> :将一条命令执行的结果追加到其它输出设备(会另起一行,文件的日期也会自动更新)。

注意:这两个语法在Shell编程中非常有用,所有必须要理解。下面简单举例:

https://img2020.cnblogs.com/blog/1745215/202012/1745215-20201217230357026-111495247.png

更多的Linux命令学习可以参考:https://www.runoob.com/linux/linux-command-manual.html

3、CentOS7开放指定端口与开关防火墙]

3.1 开放指定端口

[1]、查看已经开放的端口

firewall-cmd --list-ports
##空代表没有开放任何端口

[2]、开启指定端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
success

[3]、重启防火墙

firewall-cmd --reload
success

[4]、查看3306端口是否开放

firewall-cmd --list-ports
3306/tcp

[5]、关闭端口命令

firewall-cmd --zone=public --remove-port=3306/tcp --permanent

[6]、批量添加区间端口

firewall-cmd --zone=public --add-port=4400-4600/tcp --permanent

3.2 开关防火墙

[1]、查看防火墙状态

systemctl status firewalld.service

如果出现绿色的active (running)表示防火墙正在开启。

[2]、开启防火墙

systemctl start firewalld

[3]、关闭防火墙

systemctl stop firewalld.service

[4]、关闭防火墙

systemctl stop firewalld.service

查看防火墙状态为:inactive (dead) 表示防火墙已经关闭。但是这种方式下次开机又会自动开启防火墙,所以需要永久关闭它。

[5]、开机启动防火墙

systemctl enable firewalld.service

[6]、永久关闭防火墙

systemctl disable firewalld.service

执行之后会输出如下两段数据:

image

4、在CentOS7上配置JDK、Tomcat和MySQL5.7数据库

本小节转载自:

①、JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

image

由于JDK下载现在要登录账户了,这里提供一下:账号:liwei@xiaostudy.com密码:OracleTest1234 或者这个链接:http://bugmenot.com/view/oracle.com

注:请不要改密码,大家共同使用!!!

②、Tomcat下载地址:https://tomcat.apache.org/download-80.cgi

image

下载之后,用Xftp将文件上传到CentOS的 usr/local/ 目录下。

image

可以发现已经上传进来了。

image

下面我们进行配置。

4.2 配置JDK

①、首先我们要进入到usr/local目录下:cd /usr/local。然后进行解压:

tar -zxvf jdk-8u251-linux-x64.tar.gz

解压完成后:

image

②、进行环境变量的配置

vi /etc/profile

在profile文件最下面添加如下内容(这里根据你自己的路径和名称添加,不一定和我一样):

JAVA_HOME=/usr/local/jdk1.8.0_251
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

注意: 在上述添加过程中,等号两侧不要加入空格,不然会出现“不是有效的标识符”,因为

​ 后面在 source /etc/profile 时不能识别多余的空格,会理解为是路径一部分。

进入编辑模式按键盘“↓”至底部,然后按 i 进入添加模式,添加完后按 esc 再按 :wq 完成:

image

③、配置完成之后必须要刷新配置文件:

source /etc/profile

④、之后输入以下命令验证JDK是否安装成功:

java
javacjava -version

image

这样就大功告成了,下面我们来配置Tomcat。

4.3 配置Tomcat

①、同样先解压

cd /usr/local
tar -zxvf apache-tomcat-8.5.56.tar.gz

②、启动Tomcat

cd apache-tomcat-8.5.56/bin/
#执行启动命令
./startup.sh

启动之后就可以在浏览器访问了。如果浏览器访问 http://ip:8080/ 访问不了,我们查看防火墙开放的端口:

firewall-cmd --zone=public --list-ports

image

可以发现什么端口都没有,而Tomcat的默认端口是8080,所以我们要添加开放8080端口。

③、配置开放端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent

因为centos7 已经更改了防火墙策略,所以使用这种方式来打开端口,介绍一下这些参数:

  • zone #作用域
  • add-port=8080/tcp #添加端口,格式为:端口/通讯协议
  • permanent #永久生效,没有此参数重启后失效

④、重启防火墙

firewall-cmd --reload

⑤、测试tomcat

我虚拟机的IP地址为192.168.30.101,所以在同网段机器的浏览器上输入:http://192.168.30.101:8080/。结果为如下图:

image

成功访问!!!

image

CentOS7中把之前默认的数据库MySQL替换成了Mariadb,而Mariadb仅仅是MySQL的一个分支,但对于需要使用MySQL的开发人员来说,这是时就需要在系统中安装MySQL数据库,话不多说,直接开整。

4.4 MySQL5.7的安装与配置

4.4.1 MySQL的下载

[1]、先查看是否已经安装了MySQL

rpm -qa|grep mysql #无输出说明没有安装

[2]、先下载MySQL源安装包(Yum Repository)

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

如果出现 -bash: wget: 未找到命令。表示系统没有安装wget,如果安装过了,忽略这一步。

yum -y install wget

下载完wget后再执行之前的命令,这里下载很快。

[3]、然后就是安装MySQL源:

yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

[4]、之后在线安装MySQL服务器:这里下载东西有点多,可能会下载很久(我网速快一下子就下载好了),耐心等待,安装完成后就会覆盖掉之前的mariadb。

yum -y install mysql-community-server

image

注意:执行完 yum -y install mysql-community-server 命令可能会出现这个问题:

源 "MySQL 5.7 Community Server" 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

一句话的解决代码,执行下面的命令,:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

随后在执行上一部命令 yum -y install mysql-community-server 即可成功

至此MySQL就安装好了。

4.4.2 MySQL服务的启动

[1]、启动MySQL服务

systemctl start mysqld

[2]、查看MySQL运行状态,运行状态如图:

systemctl status mysqld.service

image

此时MySQL已经开始正常运行。

[3]、设置开机启动(可以省略,因为MySQL默认自启)

systemctl enable mysqld
systemctl daemon-reload

4.4.3 修改ROOT登录密码

[1]、找到MySQL初始化密码。

MySQL安装完成之后,第一次启动后会创建超级管理员账号root@localhost,在/var/log/mysqld.log文件中给root生成了一个临时的默认密码。我们可以使用如下命令查找:

grep 'temporary password' /var/log/mysqld.log

image

也可以直接打开mysqld.log文件查看。

vi /var/log/mysqld.log

image

这里的临时密码 /DdvL=Qg9Gtb 暂时记住这个密码(你的可能不同),按 esc 再按 :q 退出。

[2]、然后进入MySQL:

mysql -u root -p

输入临时密码 进入MySQL命令行;(注意:输入密码时时看不见的!)

image

此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:

image

注意:MySQL5.7默认密码策略要求密码必须是大小写字母数字特殊字母的组合,至少8位。后面会改较弱的策略,让其支持普通的值。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'TangHaoRong20200703.';

注意:其中 TangHaoRong20200703. 是你自己设置的登录密码。

image

成功配置,我们就可以操作数据库了。

image

续,补充:如果你觉得上面这种密码策略太麻烦了,我们可以给它改简单一点,因为就自己使用,又不是公司里面。

首先查看验证密码规则的相关信息:

show variables like 'validate_password%';

image

介绍一下红色框中各个参数的含义:

  • validate_password_check_user_name:是否检验用户名。
  • validate_password_dictionary_file:密码策略文件,策略为STRONG才需要。
  • validate_password_length:密码最少长度,默认8个。
  • validate_password_mixed_case_count:大小写字符长度,至少1个。
  • validate_password_number_count :数字至少1个。
  • validate_password_policy:密码策略,默认为MEDIUM策略。
  • validate_password_special_char_count:特殊字符至少1个。

其中validate_password_policy密码策略的验证规则如下:

  • 0(LOW):只检查长度。
  • 1(MEDIUM):必须包含 长度、数字、小写、大写和特殊字符。
  • 2(STRONG):必须包含 长度、数字、小写、大写、特殊字和字典文件。

下面我们给它改成 0(LOW)等级的密码策略:

修改密码策略,在/etc/my.cnf文件添加如下内容:

#密码策略为LOW
validate_password_policy=0
#密码长度为6
validate_password_length=6

如果你不需要密码策略,直接在my.cnf文件中添加如下配置禁用即可:

validate_password = off

然后再进入数据库查看验证密码规则:

#重启数据库
systemctl restart mysqld
#进入数据库
mysql -u root -p
mysql -u root -p123456  #带密码登录(注意-p后面不要空格),这里密码还没有设置完成
#查看策略信息
show variables like 'validate_password%';

更改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

然后我们就可以使用123456登录本地MySQL了。

4.4.4配置默认编码为UTF8

我们知道MySQL数据库的默认编码为latin1,但是我们需要的是utf-8,所以需要改一下。

[1]、修改/etc/my.cnf配置文件,在[mysqld]的最下面添加编码配置,如下所示:

character_set_server=utf8
init_connect='SET NAMES utf8'

输入vi命令:

vi /etc/my.cnf

按 i 进入编辑模式,加入后按 esc 和 :wq 保存退出。

image

[2]、然后重启mysql服务;

systemctl restart mysqld

[3]、进入数据库,查看下编码。

mysql -u root –p
show variables like '%character%';

image

至此MySQL的所有配置全部完成 !!!

4.4.5 设置允许远程登录

MySQL默认只允许本地用户登录,不允许远程登录,那么想要在其它机器上连接MySQL,就必须修改ROOT允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户:

[1]、首先进入mysql,并且为root设置远程登录密码

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

注意:这里123456是你远程登录的密码,不是本地登录密码。比如你将远程登录密码设置为ABcd1234!,但是你的Linux本地的密码还是123456。

image

然后退出mysql> exit。

[2]、防火墙开放3306端口,如果没有开启3306端口,开启一下:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

[3]、再重新载入

#重启防火墙
firewall-cmd --reload
#查看开放端口
firewall-cmd --zone=public --list-ports

4.4.6 测试远程登录

测试远程连接,下图表示成功连接,我们就可以在其它机器上操作mysql了。

image

5、MySQL8.0.26的安装与配置(版本一)

基于 Linux 的 CentOS 7 安装 MySQL 8,包含以下内容

  1. 安装工作:卸载 MariaDB、下载资源包、检查旧版本 MySQL、解压安装。
  2. 配置工作:基本设置、创建用户组和用户、数据目录。
  3. 初始化 MySQL:配置文件、初始化。
  4. 启动 MySQL:启动服务、登录、修改密码、创建远程连接用户、退出和关闭。

5.1 安装工作

5.1.1 卸载 MariaDB

MariaDB

MySQL 的一个分支,主要由开源社区维护。

  • CentOS 7+ 版本不再默认使用 MySQL 数据库,而是 MariaDB 数据库。
  • 若直接安装 MySQL 会与 MariaDB 的文件冲突。
  • 安装 MySQL 之前,需要先卸载自带的 MariaDB。

卸载

步骤

  1. 查看版本

    rpm -qa|grep mariadb
    
  2. 卸载:文件名复制即可。

    rpm -e --nodeps 文件名
    
  3. 检查是否卸载干净

    rpm -qa|grep mariadb
    

图示

image-20211124173745968

5.1.2 下载资源包

注:将 MySQL 资源包放在 /usr/local/

2 种下载方式

方式一:官网下载

  1. 官网下载Linux - Generic (glibc 2.12) (x86, 64-bit)

    image-20211125000605202

  2. Xftp 上传到服务器的 /usr/local/

    image-20220510102127136

方式二:wget 下载

  • /usr/local/ 下输入 wget 指令,下载资源包。

    # 格式:wget 资源地址
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
    
  • image-20211125002148348

5.1.3 检查旧版本 MySQL

rpm -qa|grep mysql
  • 若没有输出:说明当前系统没有安装 MySQL,开始安装。

  • 若有输出:显示的 MySQL 不是想要的版本,则卸载

    rpm -e --nodeps mysql文件名
    

5.1.4 解压安装

tar 指令

  • .tar.gz 后缀

    tar -zxvf 文件名
    
  • .tar.xz 后缀

    tar -Jxvf 文件名
    

安装

  1. 根据压缩包的后缀,输入相应 tar 指令。

    image-20211125002431822

  2. 解压完成后,/usr/local/ 下会生成 MySQL 文件夹。

    image-20220510102743817

注:将 MySQL 安装在 /usr/local/

若没有安装在该目录下,通过 mv 指令移动到该目录。

5.2 配置工作

5.2.1 基本设置

安装完成后的基本设置。

【1】文件夹重命名

  • MySQL 文件夹重命名(或创建软链接

  • 通常命名为 mysql版本号

    # 重命名(也可通过Xftp修改)
    mv 原文件夹名 mysql8
    # 软链接
    ln -s 文件夹名 mysql8
    

【2】PATH 变量

添加 PATH 变量后,可在全局使用 MySQL

添加方式

  1. 临时生效:export 命令(连接会话关闭后失效,通常用于测试环境)
  2. 永久生效:修改配置文件。

【3】确认安装

  1. 添加 PATH 变量:以 export 为例

    export PATH=$PATH:/usr/local/mysql8/bin
    
  2. 查看版本

    • mysql --version
      
    • image-20211124211338766

  3. 确定 MySQL 安装成功后,可删除压缩包。

    rm -rf 压缩包名
    

5.2.2 创建用户组、用户

注:需要进入 /usr/local

  • 创建用户组groupadd

  • 创建用户useradd-r 创建系统用户,-g 指定用户组)

    groupadd mysql
    useradd -r -g mysql mysql
    

5.2.3 数据目录

  1. 创建目录

    mkdir -p /data/mysql8_data
    
  2. 赋予权限

    # 更改属主和数组
    chown -R mysql:mysql /data/mysql8_data
    # 更改模式
    chmod -R 750 /data/mysql8_data
    

5.3 初始化 & 启动

5.3.1、配置文件

/usr/local/etc/ 下创建 my.cnf 配置文件

用于初始化 MySQL 数据库

【1】配置方式

注:部分配置涉及 MySQL 文件夹名称,若文件夹名不是 mysql8 则需修改。

  1. 在本地创建后,通过 Xftp 上传

  2. 使用 Vim 编辑器 进行编辑

    • 进入 Vim 编辑器

      vim /usr/local/etc/my.cnf
      
    • i 进入输入模式,粘贴以下配置

    • ESC 退出编辑模式,按 :wq 保存并退出

【2】配置内容

[mysql]
# 默认字符集
default-character-set=utf8mb4
[client]
port       = 3306
socket     = /tmp/mysql.sock
[mysqld]
port       = 3306
server-id  = 3306
user       = mysql
socket     = /tmp/mysql.sock
# 安装目录
basedir    = /usr/local/mysql8
# 数据存放目录
datadir    = /data/mysql8_data/mysql
log-bin    = /data/mysql8_data/mysql/mysql-bin
innodb_data_home_dir      =/data/mysql8_data/mysql
innodb_log_group_home_dir =/data/mysql8_data/mysql
# 日志及进程数据的存放目录
log-error =/data/mysql8_data/mysql/mysql.log
pid-file  =/data/mysql8_data/mysql/mysql.pid
# 服务端字符集
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
##### 以上涉及文件夹明,注意修改
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128
#query_cache_size = 128M
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
binlog_format=mixed
binlog_expire_logs_seconds =864000
# 创建表时使用的默认存储引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
折叠 

5.3.2 初始化

注:需要进入 /usr/local/mysql/bin,若添加了 PATH 变量可忽略。

初始化命令(涉及文件夹名称,注意)

mysqld --defaults-file=/usr/local/etc/my.cnf --basedir=/usr/local/mysql8 --datadir=/data/mysql8_data/mysql --user=mysql --initialize-insecure

参数(重要)

  • --defaults-file:指定配置文件(要放在--initialize 前面)
  • --user: 指定用户
  • --basedir:指定安装目录
  • --datadir:指定初始化数据目录
  • --intialize-insecure:初始化无密码(否则生成随机密码)

5.3.3 启动 MySQL

查看 MySQL 的 /bin 下是否包含 mysqld_safe

用于后台安全启动 MySQL

image-20211125013704323

【1】启动服务

  1. 安全后台启动 MySQL

    • # 完整命令
      /usr/local/mysql8/bin/mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
      # 若添加了PATH变量,可省略如下
      mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
      
    • /usr/local/mysql-8.0.26/bin/mysqld_safe --defaults-file=/usr/local/etc/my.cnf &

    • image-20211125014023161

  2. 确认启动:第二条即 MySQL 服务。

    • ps -ef|grep mysql
      
    • image-20211125014115675

【2】登录

  • 无密码:若以 --initialize-insecure 初始化,首次登录时跳过密码。

    mysql -u root --skip-password
    
  • 有密码:若初始化时设置了随机密码,在 /data/mysql8_data/mysql/mysql.log 查看

    mysql -u root -p
    

说明

  • 登录后进入 MySQL 命令行

    image-20211125014331798

  • 以下报错,说明 MySQL 服务没开启

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

5.3.4 修改密码

【1】首次修改

MySQL 初始化后的 root 用户、新创建的用户,都需要设置第一次密码。

建议通过本地密码插件 mysql_native_password 方式修改。

# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 刷新权限
FLUSH PRIVILEGES;

【2】平时修改

可在 Linux 或 MySQL 中修改。

  1. Linux 命令行

    mysqladmin -u用户名 -p旧密码 password 新密码
    
  2. MySQL 命令行

    # 设置密码
    SET PASSWORD FOR '用户名'@'主机' = PASSWORD(‘密码');
    # 刷新权限
    FLUSH PRIVILEGES;
    

5.3.5 退出、关闭服务

在 MySQL 命令行中执行

若在 Linux 命令行中,会退出/关闭 Linux 服务器。

  • 退出 MySQL(命令行)

    quit;
    exit;
    
  • 关闭 MySQL 服务

    shutdown;
    

5.4 远程连接 MySQL

5.4.1创建远程连接用户

  1. 选择 mysql 数据库,查看当前用户

    USE mysql;
    SELECT user,host,plugin,authentication_string FROM user;
    
  2. host 字段 表示可访问当前数据库的主机,目前仅本地可访问。

    image-20211125020858741

  3. 创建用户,任意远程访问

    CREATE user 'root'@'%';
    # 设置密码
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
    # 授权用户所有权限,刷新权限
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    FLUSH PRIVILEGES;
    
  4. 再次查看用户,已创建一个可被任意远程主机访问的 root 用户。

    image-20211125021328155

5.4.2 远程连接 MySQL

以 Navicat 可视化工具为例

  1. 启动 MySQL 服务(本文 4.1.1)

    image-20220510132315846

  2. 远程连接:默认端口号 3306,注意关闭防火墙。

    image-20211125125925196

  3. 成功连接后可操作数据库
    (相比本地 MySQL 数据库,操作上基本相同,只是需要联网)

完结撒花 🌹

Linux 中还可以设置 MySQL 开机自启,本文不做介绍。

6、MySQL8.0.26的安装与配置(版本二)

6.1 准备工作

  1. 下载安装包 下载地址

  2. 查看系统⾃带的 MARIADB

    rpm -qa|grep mariadb
    
  3. 卸载系统⾃带的 MARIADB(如果有),remove后面加 rpm -qa|grep mariadb 查询出来的路径

    yum -y remove
    

6.2 解压

  1. mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz 安装包上传到 /usr/local/ 目录下

  2. 安装包解压,并重命名为mysql

    xz -d mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
    tar -xvf mysql-8.0.26-linux-glibc2.12-x86_64.tar 
    mv mysql-8.0.26-linux-glibc2.12-x86_64 mysql
    
  3. 创建MYSQL⽤户和⽤户组

    groupadd mysql
    useradd -g mysql mysql
    
  4. 修改MYSQL⽬录的归属⽤户

    chown -R mysql:mysql ./
    
  5. 准备MYSQL的配置⽂件,编辑 vim /etc/my.conf

    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8
    socket=/var/lib/mysql/mysql.sock
    [mysqld]
    skip-name-resolve
    #设置3306端⼝
    port = 3306
    socket=/var/lib/mysql/mysql.sock
    # 设置mysql的安装⽬录
    basedir=/usr/local/mysql
    # 设置mysql数据库的数据的存放⽬录
    datadir=/usr/local/mysql/data
    # 允许最⼤连接数
    max_connections=200
    # 服务端使⽤的字符集默认为8⽐特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使⽤的默认存储引擎
    default-storage-engine=INNODB
    lower_case_table_names=1
    max_allowed_packet=16M
    # binglog配置
    server-id = 1
    log-bin = mysql-bin
    log_bin_index = binlog.index
    binlog_format = ROW
    # binlog过期清理时间;
    expire_logs_days= 7
    # binlog每个日志文件大小;
    max_binlog_size = 1024m
    # binlog缓存大小;
    binlog_cache_size = 128m
    # 最大binlog缓存大小。
    max_binlog_cache_size = 1024m
    

    并且修改权限

    mkdir /var/lib/mysql 
    chmod 777 /var/lib/mysql
    

6.3 安装MySQL

  1. 进入cd /usr/local/mysql 目录 进行初始化

    ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    
  2. 执行初始化后,控制台会返回临时密码, 记录临时密码 ,后面会用到
    例如:像我的例子在最后一行 A temporary password is generated for root@localhost:kvct:yIy8_qk
    我的临时密码就是这个: kvct:yIy8_qk

    例子:
    2021-09-14T01:30:19.227943Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.26) initializing of server in progress as process 1808
    2021-09-14T01:30:19.250431Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
    2021-09-14T01:30:20.184005Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
    2021-09-14T01:30:21.140583Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
    2021-09-14T01:30:21.141148Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
    2021-09-14T01:30:21.341903Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: kvct:yIy8_qk
    
  3. 复制启动脚本到资源目录

    cp ./support-files/mysql.server /etc/init.d/mysqld
    
  4. 编辑vim /etc/init.d/mysqld ,修改 basedirdatadir ,为其实际对应的目录

    basedir=/usr/local/mysql 
    datadir=/usr/local/mysql/data
    

6.4 设置MYSQL服务开机自启

  1. 增加 mysqld 服务控制脚本执⾏权限

    chmod +x /etc/init.d/mysqld
    
  2. 将 mysqld 服务加⼊到系统服务

    chkconfig --add mysqld
    
  3. 检查 mysqld 服务是否已经⽣效即可
    mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关

    chkconfig --list mysqld
    
  4. 启动 mysql 服务, 返回 SUCCESS!

    service mysqld start
    

    如何停止 mysql 服务

     service mysqld stop
    

6.5 配置环境变量

  1. 编辑 vim ~/.bash_profile,在文件末尾添加下面信息

    export PATH=$PATH:/usr/local/mysql/bin
    
  2. 执行下面命令,使环境变量生效

    source ~/.bash_profile
    

6.6 登录MySQL,并修改密码

  1. 以 root 账户登录 mysql

    mysql -u root -p
    
  2. 输入刚才记录的 临时密码

  3. 修改 Root 账户密码,并刷新权限

    alter user user() identified by "root";
    flush privileges;
    
  4. 设置远程主机登录

    use mysql;
    update user set user.Host='%' where user.User='root';
    flush privileges;
    

6.7 检查防火墙

  1. 做完上面步骤,肯能还是远程连接不上,开放端口或者关闭防火墙

  2. 查看防火墙状态

    systemctl status firewalld
    
  3. 查看开机是否启动防火墙服务

    systemctl is-enabled firewalld
    
  4. 关闭防火墙

    systemctl stop firewalld
    
  5. 禁用防火墙(系统启动时不启动防火墙服务)

    systemctl disable firewalld
    systemctl is-enabled firewalld
    
  6. 开放端口

    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload   # 配置立即生效 
    
  7. 关闭端口

    firewall-cmd --zone=public --remove-port=3306/tcp --permanent
    firewall-cmd --reload   # 配置立即生效
    
  8. 查看防火墙所有开放的端口

    firewall-cmd --zone=public --list-ports
    
  9. 查看监听的端口
    centos7默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools

    netstat -lnpt
    
  10. 检查端口被哪个进程占用

    netstat -lnpt |grep 3306
    
  11. 查看进程的详细信息

    ps 6832
    
  12. 查看包含 mysql 的所有进程

    ps -ef | grep mysql
    
  13. 中止进程

    kill -9 6832
    

6.8 忘记 mysql密码, 找回密码

  1. 停止 mysql 服务

     service mysqld stop
    
  2. 修改 mysql 的配置文件 my.cnf
    my.cnf 配置文件的位置,一般在 /etc/my.cnf ,有些版本在 /etc/mysql/my.cnf
    在配置文件中添加下面代码, 安全模式启动

    [mysqld]
    skip-grant-tables
    
  3. 启动 mysql 服务

    service mysqld start
    
  4. 进入 mysql, 这样可以不用输入密码进入 mysql

    mysql -u root 
    

    修改密码, 并刷新权限;

    mysql> use mysql;
    Database changed
    mysql> update user set authentication_string="123456" where user="root";
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 1  Changed: 0  Warnings: 0
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
  5. 将刚才新添加的配置文件 my.cnf 删除这两行

    [mysqld]
    skip-grant-tables
    
  6. 重新启动 mysql 服务

    service mysqld start
    

    MYSQL 8.0 默认user表

    mysql> select host, user, authentication_string, plugin from user;
    +-----------+------------------+------------------------------------------------------------------------+-----------------------+
    | host      | user             | authentication_string                                                  | plugin                |
    +-----------+------------------+------------------------------------------------------------------------+-----------------------+
    | %         | root             | $A$005$_N6
    HbERn<n&lg8k*XmaW25XLFVs8MDOgM1K18egNm1p87ttKMQ9Awcf0/rUA  | caching_sha2_password |
    | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
    | localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
    | localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
    +-----------+------------------+------------------------------------------------------------------------+-----------------------+
    

6.9 Access denied for user 'root'@'localhost' (using password: YES)

  1. 安全模式启动 mysql服务,先将密码设置为空

    use mysql;
    update user set authentication_string='' where user='root';
    
  2. 在重新设置密码, 刷新权限

    use mysql;
    alter user user() identified by "root";
    flush privileges;
    

7、安装Redis

本文主要介绍如果在Centos7下安装Redis。

7.1 安装依赖

redis是由C语言开发,因此安装之前必须要确保服务器已经安装了gcc,可以通过如下命令查看机器是否安装:

gcc -v

如果没有安装则通过以下命令安装:

yum install -y gcc

7.2 下载redis安装包并解压

# 下载,我是在root下执行的下载,所以我的下载目录为:/root/redis-6.2.6,这里按照自己的实际情况调整
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
# 解压
tar -zxvf redis-6.2.6.tar.gz

7. 3进入解压目录并编译

# 进入解压目录
cd redis-6.2.6
# 编译
make

7.4 指定安装目录并进行安装

make install PREFIX=/usr/local/redis

7.5 启动redis服务

7.5.1 直接启动(不建议使用)

# 进入redis安装目录
cd /usr/local/redis/bin/
# 启动服务
./redis-server
①前台启动 redis-server
②后台启动 redis-server &
③根据配置文件启动 启动命令 配置文件 &  

7.5.2 通过守护进程方式启动

# 第一步:从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录
cp /root/redis-6.2.6/redis.conf /usr/local/redis/bin/
# 第二步:修改redis.conf配置文件
cd /usr/local/redis/bin/
vi redis.conf
# 修改内容如下:
#daemonize 的值从 no 修改成 yes
# 第三步:启动服务
./redis-server redis.conf
# 第四步:查看进程来确定redis是否启动成功,非必须
ps -ef |grep redis
# bind 127.0.0.1
bind 0.0.0.0   # 允许外部链接
# protected-mode yes
protected-mode no   # 关闭保护模式,是为了远程连接
# daemonize no
daemonize yes      # 守护模式, 为了能让服务后台运行

备注:如果想要设置指定IP连接redis,只需要修改redis.conf文件中bind配置项即可。如果不限IP,将127.0.0.1修改成0.0.0.0即可
在这里插入图片描述
修改端口号
修改端口号
设置密码
设置密码
在这里插入图片描述

image-20220804161349270

扩展:

转载自: redis配置文件daemonize、protected-mode_jin_tk的博客-CSDN博客

1、protected-model

protected-mode yes

是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码 和bind,可以开启。否 则最好关闭,设置为no。

2、daemonize

redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。

但是会有个问题,当远程连接redis服务器时,在守护进程模式下,当需要指定配置文件的开启服务时如: ./redis-server …/redis.conf,这时就会提示端口被占用

2556:C 21 Jun 2019 00:51:06.780 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2556:C 21 Jun 2019 00:51:06.780 # Redis version=5.0.4,bits=64,commit=00000000,
modified=0,pid=2556, just started 2556:C 21 Jun 2019 00:51:06.780 # Configuration loaded

解决办法是现将redis.conf中daemonize设置为no再进行如下操作。

#找到该进程号,强制杀死
ps -ef | grep -i redis
kill -9 2557

在这里插入图片描述

7.5.3 初学者推荐启动方式&配置

# bind 127.0.0.1
bind 0.0.0.0   # 允许外部链接
# protected-mode yes
protected-mode no   # 关闭保护模式,是为了远程连接
daemonize no #保持默认设置,不开启守护模式, 采用后台方式启动,让服务后台运行
根据配置文件启动 启动命令 配置文件 &   
redis-server redisconf &

7.5.4 启动报错

报错:

-bash: redis-server: command not found

说明redis-server不是全局命令,那么假如到全局即可:

假如我的redis安装路径是:/home/prod/redis/redis-4.0.8

ln -s /home/prod/redis/redis-4.0.8/src/redis-server /usr/bin/redis-server

7.6 设置开机自动启动

切换到/lib/systemd/system/目录,创建redis.service文件。命令如下:

cd /lib/systemd/system/
vim redis.service

文件内容如下:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
# ExecStart需要按照实际情况修改成自己的地址
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

设置开启自动启动

# 开机自动启动
systemctl enable redis.service
# 启动redis服务
systemctl start redis.service
# 查看服务状态
systemctl status redis.service
# 停止服务
systemctl stop redis.service
# 取消开机自动启动(卸载服务)
systemctl disabled redis.service

7.7 开启密码验证:

修改redis.conf文件,找到如下,把想要的密码替换foobared,然后放开注释。

#requirepass foobared

8、安装Zookeeper

1.安装JDK

2.将zookeeper安装包拷贝至/opt

3.进入opt,解压zookeeper

tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz 

4.进入 zookeeper-3.4.6 目录,创建 data 文件夹

 mkdir data
 mkdir logs

5.进入conf目录 ,把 zoo_sample.cfg 改名为 zoo.cfg

cd conf
mv zoo_sample.cfg zoo.cfg

6.打开zoo.cfg , 修改 data 属性

dataDir=/opt/zookeeper-3.4.6/data
dataLogDir=/opt/zookeeper-3.4.6/logs
admin.serverPort=8888

7.进入bin目录启动服务

 ./zkServer.sh start

8.查看服务状态

 ./zkServer.sh status  

9.关闭服务

 ./zkServer.sh stop

9、Nginx添加fastdfs-nginx-module模块

本小节转载自:Nginx添加fastdfs-nginx-module模块 - 建国同志好样的 - 博客园 (cnblogs.com)

fastdfs-安装fastdfs-nginx-module和配置使用 - &大飞 - 博客园 (cnblogs.com)

系统:Ubuntu 20.04

Nginx版本:1.18.0

要添加的模块:fastdfs-nginx-module

思路:configure参数下包括Nginx已安装的模块信息,*通过编辑**configure参数添加你要****新加入的模块的信息,然后重新编译并替换之前Nginx启动文件即可。***

**正文:****

1、首先查看自己的Nginx编译信息,进入到Nginx安装目录下的sbin目录下,通过:./nginx -V 命令查看(注意是大写V)

   img

2、根据步骤1查询到的Nginx版本号下载相同版本的Nginx源码(如果之前的包还在就不用下载了)

3、下载fastdfs-nginx-module模块(此步骤Ubuntu需要安装Git,命令:sudo apt-get install git)

  • 执行命令:git clone https://github.com/happyfish100/fastdfs-nginx-module.git
  • 下载后拷贝到Nginx安装目录下(个人习惯,感觉比较整洁,可以自定义下载目录)
  • 进入下载好的文件,此文件夹下有一个src文件夹,拷贝src文件夹的路径待用(具体操作看下图)
  • img

4、准备工作已就绪,正式安装

  • 步骤1复制的信息现在派上用场了,先来看下:

  configure arguments: --prefix=/usr/local/nginx ...

  可以看到:

    --prefix=/usr/local/nginx 此信息是你的nginx的安装路径

    ... 此信息是你的nginx之前安装过的其它模块的信息(我的这个什么都没装所以只有路径,你的可能还有其它已安装模块的信息)

    我们现在要做的就是把fastdfs-nginx-module模块的信息添加到后边

  • 进入步骤2解压好的新下载的Nginx源码文件夹下执行如下./configure命令:

    ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx/fastdfs-nginx-module/src

  可以看到:

    --prefix=/usr/local/nginx 此信息是你的nginx的安装路径即步骤1中复制的信息(还是一样,我的没有模块信息,你的如果安装过其它模块还应该有模块信息,总之就是步骤1中复制的全部信息)

    --add-module=/usr/local/nginx/fastdfs-nginx-module/src 此信息是我们新加的,--add-module= 后边跟的就是步骤3中复制的****fastdfs-nginx-modulesrc模块下的src文件夹的路径

  • 执行make编译命令(* 注意是 make 命令不是 make install)
  • 编译完成后进入到编译过的Nginx源码文件夹下的objs文件夹下,其中有一个nginx执行文件,将它拷贝到之前的Nginx安装目录下的sbin文件夹下,替换之前的Nginx执行文件

  img

5、大功告成,按步骤1的方式测试一下

  img

posted @ 2022-09-04 14:47  Angelzheng  阅读(1226)  评论(0编辑  收藏  举报