Linux笔记

Linux笔记_第1张图片

别向这个世界认输,因为你还有牛逼的梦想。

一、Linux概述


Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:Unix操作系统、Minix操作系统、GNU计划、POSIX标准和Internet网络。

UNIX

1973年,C语言之父 Dennis M. Ritchie 了解到 UNICS 系统并对其非常看好,但汇编语言有致命的缺点(需要针对每一台不同架构的服务器重新编写汇编语言代码,才能使其使用 UNICS 系统内核)。这样不仅麻烦而且使用门槛极高。于是 Dennis M. Ritchie 便决定使用C语言重新编写一遍UNICS系统,让其具备更好的跨平台性,更适合被广泛普及。于是开源且免费的UNIX系统由此诞生。

Linux笔记_第2张图片

但是在1979年,贝尔实验室的上级公司 AT&T 看到了 UNIX 系统的商业价值和潜力,不顾贝尔实验室的反对声音,依然坚决做出了对其商业化的决定,并在随后收回了版权,逐步限制UNIX系统源代码的自由传播,渴望将其转化成专利产品而大赚一笔。崇尚自由分享的黑客面对冷酷无情的资本力量心灰意冷,开源社区的技术分享热潮一度跌入谷底。此时,人们也不能再自由地享受科技成果了,一切都以商业为重。


Minix

Linux笔记_第3张图片

20世纪80年代,由于 AT&T 所有的UNIX版权的限制(闭源收费),荷兰的一位大学教授 Andrew S. Tanenbaum(历史中被遗忘的大神)为了能给学生上课,仿照UNIX系统编写出了一款名为 Minix 的操作系统。但当时他只是用于课堂教学,根本没有大规模商业化的打算,所以实际使用Minix操作系统的人数其实并不算多,但好在它是开源的。(后来这位鲍姆教授跟我们Linux之父因理念不同相爱相杀许久)


GNU/Linux

GNU本来有一个官方的内核,称为GNU Hurd,遗憾的是GNU Hurd还没有准备好可以作为产品使用。幸运的是,另一个内核已经可以取得。在1991年,Linus Torvalds开发了一个与Unix兼容的内核并称之为Linux。大约在1992年,将Linux与不是非常完整的GNU系统相结合产生了一个完整的自由软件操作系统,我们今天因此可以实际运行一个GNU系统的版本,称之GNU/Linux。
Linux笔记_第4张图片

  • 自由软件之父-Richard Stallman。(理查德·马修·斯托曼)
  • 1983年发起自由软件运动/GNU项目。(全称:GNU’s Not Unix,也叫革奴计划)
  • 1985年创立了自由软件基金会FSF。
  • GPL协议。

Linux

林纳斯·托瓦兹(Linus)在赫尔辛基大学上学时,对操作系统很好奇。在吸收了MINIX精华的基础上,Linus于1991年写出了属于自己的Linux操作系统,版本为Linux0.01,是Linux时代开始的标志。他利用Unix的核心,去除繁杂的核心程序,改写成适用于一般计算机的x86系统,并放在网络上供大家下载,1994年推出完整的核心Version1.0,至此,Linux逐渐成为功能完善、稳定的操作系统,并被广泛使用。

Linux笔记_第5张图片


Linux内核

Linux内核:https://www.kernel.org/

Linux笔记_第6张图片


我们所说的Linux指的是内核(kernel),而只有内核它并不是一个完整的操作系统,还需要很多能够解决各种需求的应用程序。

Linux笔记_第7张图片


Linux系统的组成及特点

Linux系统的组成:

  • Linux系统=Linux内核+GNU组件(比如 GCC编译器、Emcas编译器、glibc库、Shell等)+各种应用程序;

  • 内核主要实现硬件驱动管理、软件程序管理、文件系统管理、进程管理;

  • 应用程序:

    • 不同风格的图形化界面程序(例如 GNOME、KDE、XFace等)
    • 运行在桌面端的应用程序(例如 IntelliJ IDEA、Chrome/Firefox等)
    • 运行在服务端的应用程序(JDK、MySQL、Tomcat、Nginx等)

Linux系统的特点:

  • 开放源代码、自由传播的类Unix。

  • 支持Intel X86系列的CPU 。 (x86指的是CPU架构)

  • 支持多任务、多线程、多CPU、多用户。

  • 完善的图形化界面:GNOME、KDE、XFace。

  • 完善的开发平台:Java\Python\Go\C/C++。

  • 支持主流的数据库:MySQL、Oracle、PostgreSQL。

  • 强大的网络功能:TCP/IPv4、TCP/IPv6、HTTP、WWW、SFTP、DNS、SSH等。


Linux系统的发行版(基于内核版进行升级改造)

Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

在这里插入图片描述

Linux笔记_第8张图片

  • Ubuntu,以桌面应用为主。
  • CentOS,RedHat的社区版、免费。(好像有的版本也要停止维护了)
  • 红旗Linux,北京中科红旗软件技术有限公司开发。
  • RedHat(红帽),应用最广泛、收费。
  • openSUSE,对个人完全免费、图形界面华丽多彩。
  • Fedora,功能完备、快速更新、免费。

  • CentOS是基于RHEL源码编译而来的,仅仅去掉了RHEL源码的商标以及非自由软件的部分。
  • Fedora就是RHEL测试版,包含了最新的特性,待稳定以后就会集成到RHEL中。

Linux系统的应用场景

  • 服务器领域
  • 桌面系统领域(Ubuntu)
  • 嵌入式设备(手机、平板、工业机器人、汽车电子、航空航天、家用电器等)
  • 嵌入式操作系统(Android、HarmonyOS)
  • 超级计算机(神威天湖之光、天河二号、IBM Sequoia)
  • 云计算领域
  • 大数据领域

Linux笔记_第9张图片

扩展:大数据杀熟。


二、Linux安装


基于VMware虚拟机安装CentOS7.9

1. VMware下载


VMware Workstation Pro下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html

Linux笔记_第10张图片

vm16安装成功后检查一下的网卡,看看是否存在vm1与vm8这两张网卡,缺少这两张网卡任意一张以后要不就是不能够与windows通讯,要不就是不能够上外网 。(解决办法: 卸载重装vm,如果还不行,换vm的版本)

Linux笔记_第11张图片


2. CentOS7.9下载


CentOS官网地址:http://www.centos.org

Linux笔记_第12张图片


CentOS7.9阿里云镜像的下载地址:http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/

Linux笔记_第13张图片

  • CentOS-7-x86_64-Minimal-2009.iso 最小安装版(建议有经验的人用,比如 Linux运维)
  • CentOS-7-x86_64-Everything-2009.iso 完整版(建议没有经验的人使用)
  • CentOS-7-x86_64-DVD-2009.iso 标准版光盘安装 (推荐使用)

3. 使用VMWare创建虚拟机


1、创建新的虚拟机

Linux笔记_第14张图片


2、选择配置类型

Linux笔记_第15张图片


3、安装客户机操作系统

Linux笔记_第16张图片


4、选择客户机操作系统

Linux笔记_第17张图片


5、设置虚拟机名称和安装路径

Linux笔记_第18张图片


6、指定磁盘容量

Linux笔记_第19张图片


7、自定义硬件

Linux笔记_第20张图片


8、指定系统安装的镜像

Linux笔记_第21张图片


9、完成虚拟机的创建

Linux笔记_第22张图片

Linux笔记_第23张图片


4. 安装CentOS7.9


1、启动虚拟机

Linux笔记_第24张图片


2、安装CentOS7

Linux笔记_第25张图片


3、选择安装系统的语言

Linux笔记_第26张图片


4、设置日期和时间

Linux笔记_第27张图片
Linux笔记_第28张图片


5、选择自动配置分区

Linux笔记_第29张图片

Linux笔记_第30张图片


6、 软件选择"基本网页服务器",(因为也不需要用桌面,基于SSH客户端连接)

Linux笔记_第31张图片


7、配置网卡

Linux笔记_第32张图片

Linux笔记_第33张图片

Linux笔记_第34张图片


8、点击开始安装

Linux笔记_第35张图片


9、设置Root(超级用户)密码

Linux笔记_第36张图片

Linux笔记_第37张图片


10、等待系统组件安装完成以后点击重启

Linux笔记_第38张图片


5. VMWare快照和克隆的使用


5.1 VMWare快照的使用


Linux笔记_第39张图片

Linux笔记_第40张图片

拍照以后关机,然后VMware会自动保存快照,之后如果系统崩了可以通过节点来恢复系统。

Linux笔记_第41张图片

Linux笔记_第42张图片


5.2 VMWare克隆虚拟机


注意:关机状态下才能克隆

Linux笔记_第43张图片

Linux笔记_第44张图片

克隆方式:完整克隆和链接克隆都可以,看个人喜好,如果想给别人用或搭集群创建完整克隆即可。

Linux笔记_第45张图片

Linux笔记_第46张图片

Linux笔记_第47张图片


5.3 SSH远程登录


如果是运维人员不能整天都在听服务器睡觉,我们可以通过SSH远程访问虚拟机(端口号:22)。

常用的SSH客户端工具如下:

  • Xshell
  • SecureCRT(挺古老的SSH客户端软件)
  • MobaXterm
  • FindShell

我们这里以MobaXterm为例远程访问虚拟机:

Linux笔记_第48张图片

Linux笔记_第49张图片
Linux笔记_第50张图片
Linux笔记_第51张图片
Linux笔记_第52张图片


5.4 配置静态ip地址


我们安装的操作系统一般默认都是动态获取ip地址(dhcp), 这样ip地址会经常发生变化 , 如果我们在这台电脑上安装了MySQL数据库,那岂不是每次启动后都得去查看它的ip地址然后再去连接 ,这样就有点麻烦, 所以我们希望他的ip是不变的 ,这时候就需要看看如何去配置静态ip地址(ip地址是固定)。

DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围(3~254),客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。

操作步骤如下:

1、查看当前虚拟机网段或者网关(记住这个网关,后面使用)

Linux笔记_第53张图片

子网ip:192.168.203.0(特殊的ip有: .0、.1、.255,我们给虚拟机分配ip时避免使用这些ip)
子网掩码:255.255.255.0

2、使用 ip addr 或者 ifconfig 查看要修改的网卡:

Linux笔记_第54张图片

ip地址:192.168.203.128

3、使用Xshell通过ip远程连接虚拟机。

ssh 192.168.203.128

--- 输入用户名、密码即可。


4、使用find命令查找ens33网卡文件位置。

find / -name *ens33*  #全盘查找

Linux笔记_第55张图片

/etc/sysconfig/network-scripts/ifcfg-ens33

5、使用vim/vi编辑器,修改ens33网卡配置。(BOOTPROTO改成静态获取,配置静态ip、子网掩码、网关、dns服务器)

vim  /etc/sysconfig/network-scripts/ifcfg-ens33

Linux笔记_第56张图片

按 i 从命名模式进入插入模式,修改及添加信息如下:

Linux笔记_第57张图片

BOOTPROTO=static

IPADDR=192.168.xxx.123    # 静态ip地址
GATEWAY=192.168.xxx.2    # 网关
NETMASK=255.255.255.0    #子网掩码
DNS1=8.8.8.8             #dns服务器
DNS2=114.114.114.114     #dns服务器

编辑完成后,按esc键,从插入模式退回命令模式,然后shift+zz 保存退出即可。(或者:wq)

扩展内容:

  • IPADDR:配置你想用的静态ip,只要这个ip在某区段中的没有被占用就能使用,我们的ip地址只修改最后两位即可。
    • 最后一位取值范围为:3~254。(xxx.1或xxx.2给网关用)。
    • 倒数第二位是网段地址,需要自己查看电脑在那个网段中,修改这个网段即可。
  • NETMASK:子网掩码一般使用255.255.255.0。
  • GATEWAY:网关,如192.168.203.2。(桥接、NAT)
  • DNS服务器:作用是将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
    • Google:8.8.8.8、8.8.4.4。
    • 阿里:223.5.5.5、223.6.6.6。
    • 老牌的114DNS,全国三网通用高速,纯净无劫持:114.114.114.144、114.114.115.115。

6、重启网卡服务

systemctl restart network

重启网卡服务后Xshell就断开连接了,然后我们在虚拟机上查看ip地址,看看是否修改成功。

Linux笔记_第58张图片


7、查看是否能访问外网

ping www.baidu.com

Linux笔记_第59张图片


扩展:ipv4地址没有显示的解决方案

  • 方案1:进入虚拟机之后,依次执行如下三条命令

    • systemctl stop NetworkManager

    • systemctl disable NetworkManager

    • systemctl start network

  • 方案2:打开vmware的虚拟网络编辑器,选中vmnet8网卡,还原默认设置,就能够显示了。

Linux笔记_第60张图片


三、Linux目录结构


在Linux系统中,也是存在目录的概念的,但是Linux的目录结构和Windows的目录结构是存在比较多的差异的 在Windows目录下,是一个一个的盘符(如 C盘、D盘、E盘等),目录是归属于某一个盘符的。Linux系统中的目录有以下特点:

  • / 是所有目录的顶点。(根目录)
  • 目录结构像一颗倒挂的树。

Linux和Windows的目录结构对比:

Linux笔记_第61张图片


Linux的目录结构:

Linux笔记_第62张图片


根目录下各个目录的作用及含义说明:

目录 含义
/bin 存放二进制可执行文件
/boot 存放系统引导时使用的各种文件
/dev 存放设备文件
/etc 存放系统配置文件, 比如:安装完毕jdk,安装maven、配置环境变量
/home 用户的主目录,存放用户的个人资料的。比如:linux是一个多用户的操作系统,创建了zhangsan用户,那么在home目录里面有zhangsan文件夹。
/lib 存放程序运行所需的共享库和内核模块
/opt 额外安装的可选应用程序包所放置的位置
/root 超级管理员的主目录
/sbin 存放二进制可执行文件,只有root用户才能访问
/tmp 存放临时文件
/usr 以后我们安装软件都存储在该目录中
/var 存放运行时需要改变数据的文件,例如日志文件

常用目录:

  • etc,存放系统的配置文件,比如:安装jdk、maven都需要配置系统的环境变量。
  • home,用户的主目录, 比如:每创建一个用户,都会在该目录有对应的用户的文件夹。
  • root,超级管理员的用户主目录。
  • usr,以后我们安装软件都存储在该目录中。

四、Linux目录管理


目录通俗来讲就是文件夹的意思;

Linux系统的哲学思想:一切皆文件,目录也是文件,即目录文件;

1. pwd命令


pwd命令是显示当前目录的绝对路径。

[root@baidou987 ~]# pwd      #查看root用户登录之后的家目录
/root

[baidou@baidou987 ~]$ pwd    #查看普通用户登录之后的家目录
/home/baidou
  • [baidou@baidou987 ~]$ 表示命令提示符,$表示普通用户 ,#表示管理员

  • baidou表示用户

  • baidou987 表示主机名

家目录概述:

  • 家目录就是用户登录之后所在的目录;
  • 例如 root用户登录之后的家目录就是 /root
  • 普通用户登录之后的家目录是 /home/{username},如 /home/baidou;

2. cd命令


Linux系统的目录结构是单根结构,使用/表示根目录,没有C盘、D盘的概念。

cd命令用来切换目录:

  • cd … 返回上一级目录
  • cd xxx 切换到xxx目录里
  • cd / 切换到根目录
  • cd - 切换到上一个目录
  • cd ~ 切换到家目录
  • cd /xxx 切换到/xxx目录

3. ls命令


ls命令列出目录,用来显示当前目录下载的内容(文件和目录),而且该命令可以结合选项和参数使用,实现以不同的方式显示目录内容。

语法格式如下:

  • ls [选项] [文件] #[] 表示可选项

常用参数如下:

参数 描述
-a 显示所有文件及目录 (包括以"."开头的隐藏文件)
-l 使用长格式列出文件及目录信息
-r 将文件以相反次序显示(默认依英文字母次序)
-t 根据最后的修改时间排序
-A 同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录)
-S 根据文件大小排序
-R 递归列出所有子目录
-h 带单位显示文件大小

[root@baidou987 ~]# ls #查看root用户的家目录下文件列表(不包含隐藏文件)
anaconda-ks.cfg       公共  视频  文档  音乐
initial-setup-ks.cfg  模板  图片  下载  桌面

在Linux中以.开头的文件表示隐藏文件,例如 .bash_profile ,它等价于Windows中的环境变量配置。

[root@baidou987 ~]# ls -a  #查看root用户的家目录下文件列表(包含隐藏文件)
.   .bash_history  .bash_profile  .cache   .cshrc    .mongorc.js  .tcshrc
..  .bash_logout   .bashrc        .config  .dbshell  .ssh         .viminfo

Linux系统文件详细信息说明:

Linux笔记_第63张图片

第一个字符表示文件类型:

  • [d]:目录
  • [-]:普通文件
  • [l]:连接档
  • [b]:设备文件中可供存储的接口设备
  • [c]:设备文件中串行接口设备

后九个字符每三个为一组:

  • 第一组:文件所有人的权限;
  • 第二组:同组群对此文件的权限;
  • 第三组:其他用户对此文件的权限;
[root@baidou987 ~]# ls -l  #查看root用户的家目录下文件列表的详细信息,文件大小以字节显示
总用量 8
-rw-------. 1 root root 1849 425 19:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 1897 426 07:23 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 426 08:35 公共
drwxr-xr-x. 2 root root    6 426 08:35 模板
drwxr-xr-x. 2 root root    6 426 08:35 视频
drwxr-xr-x. 2 root root    6 426 08:35 图片
drwxr-xr-x. 2 root root    6 426 08:35 文档
drwxr-xr-x. 2 root root    6 426 08:35 下载
drwxr-xr-x. 2 root root    6 426 08:35 音乐
drwxr-xr-x. 2 root root    6 426 08:35 桌面

[root@baidou987 ~]# ls -lh  #查看root用户的家目录下文件列表的详细信息,友好的方式显示文件大小
总用量 8.0K
-rw-------. 1 root root 1.9K 425 19:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 1.9K 426 07:23 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 426 08:35 公共
drwxr-xr-x. 2 root root    6 426 08:35 模板
drwxr-xr-x. 2 root root    6 426 08:35 视频
drwxr-xr-x. 2 root root    6 426 08:35 图片
drwxr-xr-x. 2 root root    6 426 08:35 文档
drwxr-xr-x. 2 root root    6 426 08:35 下载
drwxr-xr-x. 2 root root    6 426 08:35 音乐
drwxr-xr-x. 2 root root    6 426 08:35 桌面

[root@baidou987 ~]# ll  #等价与1s -l
总用量 8
-rw-------. 1 root root 1849 425 19:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 1897 426 07:23 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 426 08:35 公共
drwxr-xr-x. 2 root root    6 426 08:35 模板
drwxr-xr-x. 2 root root    6 426 08:35 视频
drwxr-xr-x. 2 root root    6 426 08:35 图片
drwxr-xr-x. 2 root root    6 426 08:35 文档
drwxr-xr-x. 2 root root    6 426 08:35 下载
drwxr-xr-x. 2 root root    6 426 08:35 音乐
drwxr-xr-x. 2 root root    6 426 08:35 桌面

[root@baidou987 ~]# ls -la   #显示root用户的家目录下文件列表的详细信息(包含隐藏文件) #简便写法ll -a
总用量 52
dr-xr-x---. 14 root root 4096 428 14:02 .
dr-xr-xr-x. 17 root root  224 425 19:50 ..
-rw-------.  1 root root 1849 425 19:51 anaconda-ks.cfg
-rw-------.  1 root root   33 426 08:39 .bash_history
-rw-r--r--.  1 root root   18 1229 2013 .bash_logout
-rw-r--r--.  1 root root  176 1229 2013 .bash_profile
-rw-r--r--.  1 root root  176 1229 2013 .bashrc
drwx------. 13 root root  277 426 08:36 .cache
drwxr-xr-x. 14 root root 4096 426 08:36 .config
-rw-r--r--.  1 root root  100 1229 2013 .cshrc
drwx------.  3 root root   25 425 20:12 .dbus
-rw-------.  1 root root   16 426 08:35 .esd_auth
-rw-------.  1 root root  310 426 08:35 .ICEauthority
-rw-r--r--.  1 root root 1897 426 07:23 initial-setup-ks.cfg
drwx------.  3 root root   19 426 08:35 .local
-rw-r--r--.  1 root root  129 1229 2013 .tcshrc
-rw-------.  1 root root   55 428 14:02 .Xauthority
drwxr-xr-x.  2 root root    6 426 08:35 公共
drwxr-xr-x.  2 root root    6 426 08:35 模板
drwxr-xr-x.  2 root root    6 426 08:35 视频
drwxr-xr-x.  2 root root    6 426 08:35 图片
drwxr-xr-x.  2 root root    6 426 08:35 文档
drwxr-xr-x.  2 root root    6 426 08:35 下载
drwxr-xr-x.  2 root root    6 426 08:35 音乐
drwxr-xr-x.  2 root root    6 426 08:35 桌面


[root@baidou987 ~]# ls -lah  #显示root用户的家目录下文件列表的详细信息,文件大小以单位展示 #简便写法 ll-ah
总用量 52K
dr-xr-x---. 14 root root 4.0K 428 14:02 .
dr-xr-xr-x. 17 root root  224 425 19:50 ..
-rw-------.  1 root root 1.9K 425 19:51 anaconda-ks.cfg
-rw-------.  1 root root   33 426 08:39 .bash_history
-rw-r--r--.  1 root root   18 1229 2013 .bash_logout
-rw-r--r--.  1 root root  176 1229 2013 .bash_profile
-rw-r--r--.  1 root root  176 1229 2013 .bashrc
drwx------. 13 root root  277 426 08:36 .cache
drwxr-xr-x. 14 root root 4.0K 426 08:36 .config
-rw-r--r--.  1 root root  100 1229 2013 .cshrc
drwx------.  3 root root   25 425 20:12 .dbus
-rw-------.  1 root root   16 426 08:35 .esd_auth
-rw-------.  1 root root  310 426 08:35 .ICEauthority
-rw-r--r--.  1 root root 1.9K 426 07:23 initial-setup-ks.cfg
drwx------.  3 root root   19 426 08:35 .local
-rw-r--r--.  1 root root  129 1229 2013 .tcshrc
-rw-------.  1 root root   55 428 14:02 .Xauthority
drwxr-xr-x.  2 root root    6 426 08:35 公共
drwxr-xr-x.  2 root root    6 426 08:35 模板
drwxr-xr-x.  2 root root    6 426 08:35 视频
drwxr-xr-x.  2 root root    6 426 08:35 图片
drwxr-xr-x.  2 root root    6 426 08:35 文档
drwxr-xr-x.  2 root root    6 426 08:35 下载
drwxr-xr-x.  2 root root    6 426 08:35 音乐
drwxr-xr-x.  2 root root    6 426 08:35 桌面

[root@baidou987 ~]# ls /   #查看根目录下的文件列表
bin   data  etc   lib    log         media  opt   qcloud_init  run   srv  tmp  var
boot  dev   home  lib64  lost+found  mnt    proc  root         sbin  sys  usr

[root@baidou987 ~]# ls -ltr s*   #查看当前工作目录下所有名称是 “s” 开头的文件 

[root@baidou987 ~]# ls -lR /bin   #查看/bin 目录下文件列表的详细信息 
lrwxrwxrwx. 1 root root 7 425 19:34 /bin -> usr/bin

[root@baidou987 ~]# ls -AS       #查看当前工作目录下文件列表并以文件的大小进行排序 

4. mkdir和rmdir命令


mkdir命令

mkdir用于创建目录的:

  • mkdir aaa ,在当前目录下创建aaa目录。
  • mkdir -p /aa/bb,在aa目录下创bb目录 。(创建多级目录)
[root@baidou987 ~]# mkdir java   # 在当前目录下创建一个java目录
[root@baidou987 ~]# ls
anaconda-ks.cfg       java  模板  图片  下载  桌面
initial-setup-ks.cfg  公共  视频  文档  音乐

[root@baidou987 ~]# mkdir -p java/java8 java/java11 # 在java下创建多级子目录
[root@baidou987 ~]# ls
anaconda-ks.cfg       java  模板  图片  下载  桌面
initial-setup-ks.cfg  公共  视频  文档  音乐
[root@baidou987 ~]# ls java #查看java目录下的文件
java11  java8

rmdir命令

rmdir用来删除空目录:

用法:rmdir 目录名,删除空目录。

  • rmdir test,删除test空目录。
  • rmdir *java : 删除当前目录下以java开头的目录。
  • rmdir java* : 删除当前目录下以java结尾的目录。

5. du : 查看文件或目录的大小


  • du -sh

五、Linux文件管理


每天一个linux命令目录(博客园):https://www.cnblogs.com/peida/archive/2012/12/05/2803591.html

1. touch命令


touch命令用来创建文件的。(空文件)

用法1: 创建一个文件

[root@baidou987 /]# mkdir data
[root@baidou987 /]# cd /data
[root@baidou987 data]# touch java.txt
[root@baidou987 data]# ll
总用量 0
-rw-r--r--. 1 root root 0 428 15:19 java.txt

用法2: 创建多个文件 (文件名与文件名用空格隔开)

[root@baidou987 data]# touch c.txt py.txt html.txt
[root@baidou987 data]# ll
总用量 0
-rw-r--r--. 1 root root 0 428 15:22 c.txt
-rw-r--r--. 1 root root 0 428 15:22 html.txt
-rw-r--r--. 1 root root 0 428 15:19 java.txt
-rw-r--r--. 1 root root 0 428 15:22 py.txt

另外一种创建文件的方式:

[root@baidou987 data]# >js.txt
[root@baidou987 data]# ll
总用量 0
-rw-r--r--. 1 root root 0 428 15:22 c.txt
-rw-r--r--. 1 root root 0 428 15:22 html.txt
-rw-r--r--. 1 root root 0 428 15:19 java.txt
-rw-r--r--. 1 root root 0 428 15:25 js.txt
-rw-r--r--. 1 root root 0 428 15:22 py.txt

2. mv命令


mv命令用于移动文件(相当于Windows剪切操作)或改名操作。

常用参数:

-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
-b 当文件存在时,覆盖前为其创建一个备份
-u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

mv命令的几种应用场景:

  • mv 文件 目录 ,将文件移动到指定目录中。
  • mv 文件 目录/文件名 ,将文件移动到指定目录中并且重命名。
  • mv 文件 文件名,将文件重命名。
  • mv 目录 指定目录,将目录移动到指定的目录(前提是被指定目录已存在,若不存在则把当前目录改名)。

3. cp命令


cp命令用于复制文件或目录。(通常是为了文件备份)

语法格式:cp [参数] [文件]

常用参数:

参数 描述
-f 若目标文件已存在,则会直接覆盖原文件
-i 若目标文件已存在,则会询问是否覆盖
-p 保留源文件或目录的所有属性
-r 递归复制文件和目录 (常用),例如 cp -r jdk8/ /root
-d 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l 对源文件建立硬连接,而非复制文件
-s 对源文件建立符号连接,而非复制文件
-b 覆盖已存在的文件目标前将目标文件备份
-v 详细显示cp命令执行的操作过程
-a 等价于 “dpr” 选项

示例:

cp *.txt  /temp             # 将以txt为后缀名的文件 拷贝到temp目录中

cp Hello.java  Hello1.java   # 拷贝Hello.java文件并重名为Hello1.java

cp -r java8/ /root           # 以递归的方式把java8目录复制到root用户的家目录中

4. cat、more、less、tail命令


cat、more、less、tail这四个命令都是用于查看文件内容的,虽然都是查看文件内容但是细节方面上不太一样。


cat命令

cat 命令适合查看内容较少的、纯文本的文件。

用法:cat [参数] 文件

常用参数:

-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-b 显示行数(空行不编号)
-E 每行结束处显示$符号
-T 将TAB字符显示为 ^I符号
-v 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e 等价于”-vE”组合
-t 等价于”-vT”组合
-A 等价于 -vET组合
–help 显示帮助信息
–version 显示版本信息

示例:使用cat命令查看密码文件

[root@baidou987 ~]# cat /etc/shadow # 使用cat命令查看密码文件的内容
root:$6$xsggXrTV8yfNXDd.$C2a4ydqD2GxI5LerXmyIuuYCQzIJP3QUSrEPqROdcg7eioNqiFKfTcIVHmRa1HFEMzD3qQRcRWzC0xTLnNcEy/::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
operator:*:18353:0:99999:7:::
games:*:18353:0:99999:7:::
ftp:*:18353:0:99999:7:::
nobody:*:18353:0:99999:7:::
systemd-network:!!:19107::::::
dbus:!!:19107::::::
polkitd:!!:19107::::::
libstoragemgmt:!!:19107::::::
colord:!!:19107::::::
rpc:!!:19107:0:99999:7:::
saned:!!:19107::::::
gluster:!!:19107::::::
saslauth:!!:19107::::::
abrt:!!:19107::::::
setroubleshoot:!!:19107::::::
rtkit:!!:19107::::::
pulse:!!:19107::::::
radvd:!!:19107::::::
chrony:!!:19107::::::
unbound:!!:19107::::::
qemu:!!:19107::::::
tss:!!:19107::::::
sssd:!!:19107::::::
usbmuxd:!!:19107::::::
geoclue:!!:19107::::::
ntp:!!:19107::::::
gdm:!!:19107::::::
rpcuser:!!:19107::::::
nfsnobody:!!:19107::::::
gnome-initial-setup:!!:19107::::::
sshd:!!:19107::::::
avahi:!!:19107::::::
postfix:!!:19107::::::
tcpdump:!!:19107::::::
baidou:$6$z/jsYKOWQSq..nxH$UEJozjLbpCax3bl/jStYfg1AtU5noM5Sesy6yq0NIJ49Q21J/ELNUVNXtCiABv7jg5K/jDJlcCpC1c7G2uA7t.::0:99999:7:::

示例:使用cat命令查看密码文件并显示行数

[root@baidou987 ~]# cat -n /etc/shadow
1 root:$6$xsggXrTV8yfNXDd.$C2a4ydqD2GxI5LerXmyIuuYCQzIJP3QUSrEPqROdcg7eioNqiFKfTcIVHmRa1HFEMzD3qQRcRWzC0xTLnNcEy/::0:99999:7:::
2  bin:*:18353:0:99999:7:::
3  daemon:*:18353:0:99999:7:::
4  adm:*:18353:0:99999:7:::
5  lp:*:18353:0:99999:7:::
6  sync:*:18353:0:99999:7:::
7  shutdown:*:18353:0:99999:7:::
8  halt:*:18353:0:99999:7:::
9  mail:*:18353:0:99999:7:::
10  operator:*:18353:0:99999:7:::
11  games:*:18353:0:99999:7:::
12  ftp:*:18353:0:99999:7:::
13  nobody:*:18353:0:99999:7:::
14  systemd-network:!!:19107::::::
15  dbus:!!:19107::::::
16  polkitd:!!:19107::::::
17  libstoragemgmt:!!:19107::::::
18  colord:!!:19107::::::
19  rpc:!!:19107:0:99999:7:::
20  saned:!!:19107::::::
21  gluster:!!:19107::::::
22  saslauth:!!:19107::::::
23  abrt:!!:19107::::::
24  setroubleshoot:!!:19107::::::
25  rtkit:!!:19107::::::
26  pulse:!!:19107::::::
27  radvd:!!:19107::::::
28  chrony:!!:19107::::::
29  unbound:!!:19107::::::
30  qemu:!!:19107::::::
31  tss:!!:19107::::::
32  sssd:!!:19107::::::
33  usbmuxd:!!:19107::::::
34  geoclue:!!:19107::::::
35  ntp:!!:19107::::::
36  gdm:!!:19107::::::
37  rpcuser:!!:19107::::::
38  nfsnobody:!!:19107::::::
39  gnome-initial-setup:!!:19107::::::
40  sshd:!!:19107::::::
41  avahi:!!:19107::::::
42  postfix:!!:19107::::::
43  tcpdump:!!:19107::::::
44 baidou:$6$z/jsYKOWQSq..nxH$UEJozjLbpCax3bl/jStYfg1AtU5noM5Sesy6yq0NIJ49Q21J/ELNUVNXtCiABv7jg5K/jDJlcCpC1c7G2uA7t.::0:99999:7:::

more命令

more 命令用于查看大文件,当查看大文件的时候可以分页显示,能查看文件的百分比,并且支持在显示时定位关键字。

用法:more [参数] [文件]

常用参数:

-num 指定每屏显示的行数
-l more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性
-f 计算实际的行数,而非自动换行的行数
-p 先清除屏幕再显示文本文件的剩余内容
-c 与-p相似,不滚屏,先显示内容再清除旧内容
-s 多个空行压缩成一行显示
-u 禁止下划线
+/pattern 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示

more常用按键:

  • 回车键(Enter):向下n行,需要定义,默认向下滚动一行。
  • 空格键:向下滚动一屏。
  • b键:返回上一屏。
  • Ctrl+C 或 q键:退出more命令。
  • 斜线符\:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
  • h键:显示帮助屏。
  • = : 输出当前的行号。
  • :f :输出文件名和当前的行号。
  • v:调用vi编辑器。
  • !:调用Shell,并执行命令。

Linux笔记_第64张图片


less命令

用less命令显示文件时,PageUp键向上翻页,PageDown键向下翻页,要退出less程序,应按Q键或Ctrl+C即可。

less的作用与more十分相似,不同点为less命令允许用户向前或向后浏览文件,而more命令只能向前浏览 。

用法: less [参数] [文件]

常用参数:

-b 置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 在单行显示较长的内容,而不换行显示
-x 将TAB字符显示为指定个数的空格字符

less常用按键:

  • b 向后翻一页
  • d 向后翻半页
  • h 显示帮助界面
  • Q 退出less 命令
  • u 向前滚动半页
  • y 向前滚动一行
  • 空格键 滚动一页
  • 回车键 滚动一行

Linux笔记_第65张图片

tail命令 (重点)

tail 命令用于从文件尾部查看文件内容,默认显示后10行;

tail -f filename 会把filename里最尾部的内容显示在屏幕上,并且不断刷新,用于查看系统日志。

语法格式:tail [参数] 文件

常用参数:

  • -n 输出文件的尾部n行内容。
  • -f 持续显示文件最新追加的内容。

示例:循环查看文件内容

# 生成动态日志文件(会话窗口1)
[root@baidou987 test]# ping baidu.com > info.txt

# 实时查看日志信息(会话窗口2)
[root@baidou987 ~]# tail -f /test/info.txt 

Linux笔记_第66张图片


示例:查看指定文件的后20行内容

[root@baidou987 ~]# tail -n 20 /test/User.java

5. rm命令


rm 命令用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。

但是删除操作需要谨慎(生产环境和测试环境建议备份防止误删)。

用法:rm [参数] [文件]

常用参数:

-f 强制删除(不询问)
-i 删除前会询问用户是否操作,y同意删除、n取消删除
-r 递归删除
-v 显示指令的详细执行过程

示例:删库跑路

rm -rf *  # 清空当前目录下的所有的文件

rm -rf /*  # 清空系统中所有的文件

rm和rmdir的区别:rmdir只能删除空目录,rm功能更加强大。


6. find、grep命令


find、grep都是查找命令,find用于查找指定文件、grep用户查找指定文件的内容。


find命令

find命令 在指定目录下查找文件。(支持正则)

语法格式:find 路径 -option 查找的文件。

  • -name,按照名字查找。

示例:在当前目录及其子目录下查找以.java结尾的文件。

 find  .  –name *.java

示例:查找/etc目录下的ens33网卡文件

find  /etc  -name  *ens33*

在这里插入图片描述


示例:从根目下查找profile文件 (全盘搜索)

find /  -name profile

Linux笔记_第67张图片


grep

grep命令 从指定文件中查找指定的文本内容。

语法格式:grep 待查找内容 fileName。

  • -n,显示内容出现的行数。
  • -i,忽略大小写。(ignore)

示例:在ifcfg-ens33文件中查找dhcp

[root@localhost network-scripts]# grep dhcp ifcfg-ens33
BOOTPROTO=dhcp

在这里插入图片描述


六、Linux文件编辑和打包压缩


1. Linux文件编辑


vi编辑器是Linux系统字符界面下最常用的文本编辑器(类似window中的记事本),vim是vi的增强版(vim支持颜色显示)。


vim安装:(我们系统自带vim编辑器,别的发行版有的需要手动安装)

yum install vim

---安装过程会提示是否继续,输入y然后回车即可。

vi/vim编辑器有3种工作模式:命令模式、插入模式、末行模式。

Linux笔记_第68张图片

命令模式常用操作:(命令模式,不可编辑内容,可以对行(line)进行操作)

  • nk ,使光标向上移动n行
  • nj ,使光标向下移动n行
  • H ,使光标移动到屏幕的顶部
  • M , 使光标移动到屏幕的中间
  • L ,使光标移动到屏幕的底部
  • $ , 使光标移动到光标所在的行尾
  • 0 , 使光标移动到光标所在的行首
  • ctrl+b ,使光标向上移动一页
  • ctrl+f ,使光标向下移动一页
  • dd ,删除光标所在行
  • ndd,删除当前光标所在行及之后的n行数据。(n代表数字)
  • d$ ,删除光标到行尾的内容(包含光标所在处的字符)
  • yy , 复制当前行
  • p , 粘贴
  • u , 撤销上一个操作
  • U , 取消所有操作
  • ctrl + g ,列出光标所在行号。
  • shift+zz , 保存并退出。
  • gg,定位到文本内容的第一行。
  • G,定位到文本内容的最后一行。

进入插入模式的命令:

命令 功能
i 从光标当前所在位置之前开始插入
a 从光标当前所在位置之后开始插入
I 在光标当前所行的行首插入
A 在光标当前所行的行尾插入
o 在光标所在行的下面新开一行插入
O 在光标所在行的上面新开一行插入
s 删除光标位置的一个字符,然后进入插入模式
S 删除光标所在行,然后进入插入模式

末行模式常用命令:

  • :/str/ 查找字符
  • :!command 运行shell
  • :w 保存文件
  • :wq 保存退出
  • :q 退出
  • :q!强制退出
  • :set number (简写set nu) , 显示行号 (只对本次有效,)
  • set nonumber (简写 set nonu),取消行号
  • :set readonly 设置文件只读状态

VIM键盘图:


2. Linux文件打包和解包


为什么要文件打包?

在日常办公中我们通常会把许多文件放到一个文件夹(目录)中,弊端就是不利于文件的传输和复制。

我们可以将多个文件打成一个文件,即tar包,此时虽然是一个文件,但是文件的体积没有压缩,因此文件的体积不会发生变化。

文件压缩也是将多个文件压缩成一个文件,即gz包,此时文件的体积会变小,因为会对多个文件进行处理。

Linux系统文件打包解包和压缩解压缩都是使用tar命令来搞定的。


tar命令的打包解包

打包命令:tar -cvf 文件/目录

  • -c 创建新文件 (必选)
  • -v 显示操作过程 (可选)
  • -f 文件名由命令行设置(必选)

示例:将/tmp目录下以*.log为后缀名的文件进行打包(包名为test.tar),并移动到/test目录中

[root@baidou987 tmp]# tar -cvf test.tar *.log  # 将日志文件打成一个tar包
anaconda.log
ifcfg.log
packaging.log
program.log
sensitive-info.log
storage.log
yum.log

[root@baidou987 tmp]# mkdir /test  # 创建目录
[root@baidou987 tmp]# mv test.tar /test  # 移动文件

在这里插入图片描述


解包命令:tar -xvf 文件

  • -x 取出文件内容 (必选)
  • -v 显示操作过程 (可选)
  • -f 文件名由命令行设置(必选)

示例:将/test目录中的test.tar解包

[root@baidou987 test]# tar -xvf test.tar 
anaconda.log
ifcfg.log
packaging.log
program.log
sensitive-info.log
storage.log
yum.log
[root@baidou987 test]# ls -lh
总用量 20K
-rw-r--r--. 1 root root 1.2K 426 07:23 anaconda.log
-rw-r--r--. 1 root root  415 426 07:21 ifcfg.log
-rw-r--r--. 1 root root    0 425 20:12 packaging.log
-rw-r--r--. 1 root root    0 425 20:12 program.log
-rw-r--r--. 1 root root    0 425 20:12 sensitive-info.log
-rw-r--r--. 1 root root    0 425 20:12 storage.log
-rw-r--r--. 1 root root  10K 54 10:23 test.tar
-rw-------. 1 root root    0 425 19:33 yum.log

3. Linux文件压缩和解压缩


压缩:tar -zcvf 文件 /目录

  • -z 加上了就会压缩,没有就是打包
  • -x 取出文件内容 (必选)
  • -v 显示操作过程 (可选)
  • -f 文件名由命令行设置(必选)

解压缩:tar -zxvf 文件

  • -z 加上了就会解压缩,没有就是解包
  • -x 取出文件内容 (必选)
  • -v 显示操作过程 (可选)
  • -f 文件名由命令行设置(必选)
  • -C 解压到指定目录

tar命令常用参数如下:

-A 新增文件到以存在的备份文件
-B 设置区块大小
-c 建立新的备份文件
-C <目录> 仅压缩指定目录里的内容或解压缩到指定目录
-d 记录文件的差别
-x 从归档文件中提取文件
-t 列出备份文件的内容
-z 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-Z 通过compress指令处理备份文件
-f<备份文件> 指定备份文件
-v 显示指令执行过程
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-j 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v 显示操作过程
-l 文件系统边界设置
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-w 确认压缩文件的正确性
-p 保留原来的文件权限与属性
-P 使用文件名的绝对路径,不移除文件名称前的“/”号
-N <日期格式> 只将较指定日期更新的文件保存到备份文件里
– -exclude=<范本样式> 排除符合范本样式的文件
– -remove-files 归档/压缩之后删除源文件

七、Linux进程管理


Linux是一个多任务的操作系统,系统上可以同时运行多个进程,正在执行的一个或多个相关的进程称为一个作业,用户可以同时运行多个作业,并在需要时可以在作业之间进行切换。

在Linux系统中进程有:交互式进程、批处理进程、守护进程。

  • 交互式进程:是一个由shell启动并控制的进程,交互式进程即可以在前台,也可以在后台运行。
  • 批处理进程:与终端无关,安排在指定时刻完成的一系列进程。
  • 守护进程:在引导系统时启动,以执行即时的操作系统任务,比如 crond、rsyslogd、named等等。

1. 查看系统进程信息


ps命令(或者top命令)

ps  -ef             #系统的所有的进程都展示出来
ps  -aux            # 显示不带控制台终端的进程

ps命名参数:

  • a:显示当前终端的所有进程信息。
  • u:以用户的形式显示进程信息 。
  • x:显示后台进程运行的参数。
  • e: 显示所有进程。
  • f :全格式。

Linux笔记_第69张图片

  • UID:用户ID。
  • PID:进程ID。

2. 杀死线程


如果要关闭某个应用程序可以通过杀死线程的方式实现。

kill命令:

  • 语法格式:kill 选项 进程号
  • kill -9 进程号 (强制杀死)
  • kill -2 进程号 (温和杀死)

示例:杀死编辑stu.txt文件的vim进程

kill -9 40003

Linux笔记_第70张图片


查看进程树pstree

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

常用的选项:

  • p :显示进程的PID 。

  • u :显示进程的所属用户。

# 安装psmisc
yum -y install psmisc

--------------------------------------

pstree  -pu

3. 管道符号


管道符的作用: 把上一个命令的结果提供给下一个命令去使用。

例如:查看vim进程,ps -ef | grep vim。

在这里插入图片描述


八、Linux防火墙配置


Linux系统为了安全考虑,防火墙默认是开启的,这就导致所有的端口对外都是不可访问的(远程连接SSH端口22除外)。

那么我们如何在Windows访问虚拟机Linux上的MySQL、Tomcat软件呢?

  • 第一种方式:直接关闭防火墙,释放所有的端口,允许外界去访问全部的端口 , 方便省心,弊端不安全。
  • 第二种方式:在防火墙上开放指定端口。(例如:tomcat8080、mysql3306)

防火墙类似于一个关卡检查人员,当你访问其他人的电脑,或者其他人访问你的电脑,都要进行拦截并进行处理,有的阻止,有的放行,有的转发。默认情况下防火墙在开机以后就自动启动了。

开发中,防火墙是必须有的,由运维人员维护的,运维人员一般不用系统自带的防火墙,都会使用专门的防火墙(配置策略)。


1. 防火墙服务相关命令 (firewalld)


操作防火墙服务相关命令如下:

  • 开启防护墙:systemctl start firewalld
  • 关闭防护墙:systemctl stop firewalld
  • 开机自启动(默认状态):systemctl enable firewalld
  • 关闭开机自启:systemctl disable firewalld
  • 查看防火墙状态:systemctl status firewalld

centos7上对系统服务的操作命令如下:

  • systemctl [start|stop|status|enable|disable|restart] 服务名称
  • 例如 开启mysql服务器 systemctl start mysqld

示例:查看防火墙状态

systemctl status firewalld

Linux笔记_第71张图片


示例:关闭防火墙状态

systemctl stop firewalld

在这里插入图片描述


示例:开启防火墙状态

systemctl start firewalld

Linux笔记_第72张图片


2. 端口配置 (firewall-cmd)


centos7中默认使用的防火墙是firewalld,centos5和centos6中默认使用防火墙是iptables。

如果外网或内网的小伙伴要连接当前系统内的程序进行操作,需要在Linux系统开放指定程序端口号,否则无法访问。

防火墙端口管理操作命令:

  • 开放xxx端口 :firewall-cmd --zone=public --add-port=xxx/tcp --permanent

  • 更新(重载)防火墙规则:firewall-cmd --reload

  • 查看开放端口:

    • firewall-cmd --zone=public --query-port=xxx/tcp
    • firewall-cmd --zone=public --list-ports
    • firewall-cmd --list-all
  • 删除开放端口:firewall-cmd --zone=public --remove-port=xxx/tcp --permanent


常用端口号:8080 tomcat、80 http协议、443 https协议、22 ssh远程连接(默认开启)、3306 mysql、6379 redis、27017 mongodb。


firewall-cmd命令参数详解:

  • --zone=public:开放哪个网络,默认是public。
    • public,类似window中的公用网络。
    • internal,类似window中的家庭网络。
  • --add-port=端口/tcp:将指定端口号添加到防火墙中,对外是开放的。
  • --remove-port=端口/tcp:从防火墙的规则中删除端口号。
  • --permanent:永久添加规则。
  • --list-all:显示现有的规则,展示所有开放端口。
  • --reload:重新加载规则,让新加的端口号起作用,重启防火墙的服务 systemctl restart firewalld。

示例:开放8080端口

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

在这里插入图片描述


示例:更新防火墙规则,让开放的8080端口生效。

firewall-cmd --reload

在这里插入图片描述


示例:查看8080端口是否生效

firewall-cmd --zone=public --query-port=8080/tcp 

Linux笔记_第73张图片


示例:删除8080端口

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

Linux笔记_第74张图片

日常开发中,要么把防火墙关掉,要么为指定软件开放端口号。


九、Linux权限控制


linux系统是一个多用户的操作系统,并且针对每一个用户,Linux会严格的控制操作权限。接下来,我们就需要介绍一下Linux系统的权限控制。

  • chmod(change mode,更改模式),chmod命令是控制用户对文件或者目录的权限的命令。

  • Linux中的权限分为三类 :读®、写(w)、执行(x)。

  • Linux文件权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

  • 只有文件的所有者和超级用户可以修改文件或目录的权限。

  • 要执行Shell脚本需要有对此脚本文件的执行权限(x),如果没有则不能执行。

Linux系统中权限描述如下:

Linux笔记_第75张图片

示例:

Linux笔记_第76张图片

chmod命令可以使用八进制数来指定权限(0 - 代表无 , 1 - 执行x , 2 - 写w , 4 - 读r):

权限 rwx
7 读 + 写 + 执行 rwx
6 读 + 写 rw-
5 读 + 执行 r-x
4 只读 r–
3 写 + 执行 -wx
2 只写 -w-
1 只执行 –x
0

示例:

# 为所有用户授予读、写、执行权限
chmod 777 bootStart.sh 

# 为文件拥有者授予读、写、执行权限,同组用户和其他用户授予读、执行权限
chmod 755 bootStart.sh   

#  为文件拥有者授予写权限,同组用户授予执行权限,其他用户没有任何权限
chmod 210 bootStart.sh  
  • 三个数字分别代表不同用户的权限:(以755为例)

    • 第1位表示文件拥有者的权限。(拥有者7,可读可写可执行)
    • 第2位表示同组用户的权限。 (同组用户5,可读可执行)
    • 第3位表示其他用户的权限。 (其他用户5,可读可执行)

也可以使用符号来设定权限:

语法格式: chmod [ugoa] [+-=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限
# 示例:为.bashrc文件的所有用户添加写权限。
chmod a+w .bashr

十、Linux软件安装


1. 软件安装方式


在Linux系统中,软件安装主要有四种安装方式:

  • 二进制发布包安装:软件已经针对具体平台编译打包发布,只要解压,修改配置即可 。(如 JDK、Tomcat、Maven等)
  • rpm安装:软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题
  • yum安装:种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题(安装过程需要联网)。
  • 源码编译安装:软件以源码工程的形式发布,需要自己编译打包。(如 Nginx、Redis等)

在Linux中可以使用wget命令下载网上的软件:(wget是Linux的下载工具)

wget url

# 示例 使用wget下载linux版本的jdk
wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz

# 如果显示找不到这个wget命令,使用yum下载wget工具即可
yum -y install wget

2. 安装JDK


1、在根目录下创建一个soft目录,然后切换到这个soft目录。

mkdir /soft
cd /soft

2、使用wget命令,将jdk下载到soft目录。(当然用ftp工具上传到Linux也是可以的,哈哈我就偷懒啦)

wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz

Linux笔记_第77张图片


3、将jdk压缩包解压到/usr/local目录下:(/usr/local用于存放安装的软件)

tar -xvf jdk-8u202-linux-x64.tar.gz -C /usr/local/

Linux笔记_第78张图片


4、查看/usr/local下是否有jdk的解压目录

ll  /usr/local

Linux笔记_第79张图片


5、配置环境变量

[root@localhost ~]# vim /etc/profile  # /etc/profile针对所有用户, ~/.bashrc针对当前用户的

# 将光标移动到底部G,然后按o另起一行,复制以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH

# 最后按键进入末行模式,输入:wq 保存退出(或者shift+zz保存退出)

Linux笔记_第80张图片


6、将配置文件立即生效

source /etc/profile

在这里插入图片描述


7、验证JDK是否配置成功

java -version
javac -version
jps    # 显示所有正在运行的java进程  (前面的数字数进程id)

Linux笔记_第81张图片


3. 安装小猫咪Tomcat


Apache Tomcat 官网地址:https://tomcat.apache.org/

Apache Tomcat 下载地址:https://archive.apache.org/dist/tomcat/

Apache Tomcat 国内镜像下载地址:https://mirrors.cnnic.cn/apache/tomcat/

1、去官网找小猫 ,文件是tar.gz包,然后下载到/soft目录

Linux笔记_第82张图片

wget --no-check-certificate https://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.5.84/bin/apache-tomcat-8.5.84.tar.gz

Linux笔记_第83张图片


2、小猫解压到指定目录/usr/local下

tar -xvf apache-tomcat-8.5.84.tar.gz -C /usr/local/

Linux笔记_第84张图片


3、进入/usr/local/apache-tomcat-8.5.84/bin目录,启动Tomcat:

启动方式1:		./startup.sh
启动方式2:      sh startup.sh

Linux笔记_第85张图片


4、将防火墙关掉(或者开放8080端口)

systemctl stop firewalld      # 停止防火墙服务
systemctl disable firewalld   # 不让他开机启动

5、在Windows上打开浏览器访问Linux的8080端口(http://ip:端口号)

Linux笔记_第86张图片


6、停止tomcat

# 第一种方式: 在tomcat的bin目录下执行
sh shutdown.sh
./shutdown.sh

# 第二种方式: 查看tomcat进程id,然后kill -9 强制杀掉进程 

Linux笔记_第87张图片

注意:虽然上面两种方式都可以停止Tomcat服务,但是推荐使用第一种方式(./shutdown.sh或sh shutdown.sh)执行脚本来关闭tomcat服务,如果通过第一种方式停止不了tomcat了,我们就可以考虑使用第二种方式强制杀死进程。


4. 安装MySQL


RPM方式安装MySQL

**RPM:**全称为 Red-Hat Package Manager,RPM软件包管理器(相当于windows的软件管家),是红帽Linux用于管理和安装软件的工具。

rpm常用命令:

  • rpm -qa 查询

  • rpm -e --nodeps 卸载

  • rpm -ivh 安装

  • rpm -U 更新



1、卸载系统自带的mariadb数据库(MySQL的分支版本)

# 查询当前系统是否安装mariadb
rpm -qa | grep mariadb	

# 卸载mariadb数据库
rpm -e --nodeps 

在这里插入图片描述

如果不把它卸载掉,后面的rpm包是安装不成功的。


2、去官网下载 Linux版的MySQL5.7.25,下载到 /soft目录(下载地址:https://downloads.mysql.com/archives/community/)

Linux笔记_第88张图片

cd /soft
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar

Linux笔记_第89张图片


3、解压mysql到指定目录

mkdir mysql
tar -xvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar -C ./mysql
cd mysql

Linux笔记_第90张图片


4、安装这6个rpm包

按照依赖顺序依次安装rpm包,依赖关系为common->libs->devel->libs-compat->client->server

rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

Linux笔记_第91张图片

注意:因为rpm安装方式,是不会自动处理依赖关系的,需要我们自己处理,所以对于上面的rpm包的安装顺序不能随意修改。

  • 若安装过程中提示缺少net-tools依赖,使用yum安装下(yum install net-tools)

5、启动mysql服务

# 启动MySQL服务
systemctl start mysqld  # 扩展命令 service mysqld start

# 查看MySQL服务状态
systemctl status mysqld  # 扩展命令 service mysqld status

Linux笔记_第92张图片


6、查看mysql默认生成的初始密码

对于rpm安装的mysql,在mysql第一次启动时,会自动帮我们生成root用户的访问密码,并且输出在mysql的日志文件 /var/log/mysqld.log中。

cat /var/log/mysqld.log | grep password

在这里插入图片描述


7、用这个临时密码登录MySQL服务器

mysql -uroot -pte.NkShFC2fq

Linux笔记_第93张图片


8、修改root用户密码(设置最低位数、将密码安全等级调低)

# 在mysql命令窗口执行
# 1.设置密码长度最低位数
set global validate_password_length=4;

# 2.将密码安全等级调低
set global validate_password_policy=LOW;	

# 3. 将root用户的密码设置为123456
set password = password('123456');

Linux笔记_第94张图片


9、用修改后的密码登录MySQL服务器

mysql -uroot -p123456

Linux笔记_第95张图片

ok,密码已经修改成功了。


10、设置root账户允许远程登录访问(在mysql命令窗口执行)

Linux笔记_第96张图片

# 设置root账户允许远程登录访问
grant all on *.* to 'root'@'%' identified by '123456';

# 刷新权限
flush privileges;
  • 在mysql上设置用户,且允许指定电脑使用此用户名密码(%表示任意电脑访问),且给用户设置所有操作指定数据库表的权限。
  • grant all on 数据库名.表名 to ‘用户名’@‘主机名或ip’ identified by ‘密码’;

Linux笔记_第97张图片

ok,已经可以远程访问linux上mysql啦。


解决:远程连接还是无法访问题(关闭防火墙或者开放3306端口)

  • 方式一:开放3306端口,操作步骤如下:
    • 开放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
    • 更新防火规则:firewall-cmd --reload
  • 方式二:关闭防火墙,操作步骤如下:
    • 关闭防火墙:systemctl stop firewalld
    • 设置开机禁用防火墙:systemctl disable firewalld
    • 查看防火墙状态:systemctl status firewalld

5. 安装Maven


1、下载maven到本地(https://dlcdn.apache.org/maven/maven-3/3.5.4/binaries/)

Linux笔记_第98张图片

在这里插入图片描述


2、将maven压缩包上传到Linux服务器上的/soft目录

Linux笔记_第99张图片


3、将maven压缩包解压到/usr/local目录下。

tar -xvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/

在这里插入图片描述


4、把maven添加到环境变量中:

vim /etc/profile

# Maven环境
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$MAVEN_HOME/bin:$PATH

# 让配置的环境变量立即生效
source /etc/profile

Linux笔记_第100张图片


5、验证maven是否配置成功

mvn -v

Linux笔记_第101张图片


6、修改maven的settings.xml配置文件(设置阿里云镜像和本地仓库)

cd /usr/local/apache-maven-3.5.4/conf

vim settings.xml

配置本地仓库:

<localRepository>/usr/local/repolocalRepository>

Linux笔记_第102张图片

配置阿里云镜像:

<mirror> 
    <id>alimavenid> 
    <mirrorOf>centralmirrorOf> 
    <name>aliyun mavenname> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/url>
mirror> 

Linux笔记_第103张图片

:wq保存退出。


6. 安装Git


通过yum命令在线安装Git:

yum list git			#列出git安装包

yum install git			#使用yum在线安装git

git --version           #查看本地git的版本

windows中git用户名密码处理

控制面板- - -用户帐户- - -凭据管理器- - -windows凭证:

Linux笔记_第104张图片

linux中git用户名密码处理

1、清除保存的用户名和密码:git config --global --unset credential.helper

2、保存用户名和密码:git config --global credential.helper store


十一、Linux项目部署


1. 手动部署项目


1、将springboot项目打jar包


<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.4.5version>
    <relativePath/> 
parent>


<dependencies>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
dependencies>

<build>
    
    <finalName>helloworldfinalName>
    <plugins>
        
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
        plugin>

        
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-surefire-pluginartifactId>
            <configuration>
                <skipTests>trueskipTests>
            configuration>
        plugin>
    plugins>
build>

2、将jar包丢到我们的Linux上

Linux笔记_第105张图片


3、启动SpringBoot程序

java -jar helloworld.jar

注意:如果端口被占用的话,SpringBoot程序是不能启动的,把之前的tomcat服务关掉即可。

Linux笔记_第106张图片


4、测试访问: http://192.168.203.103:8080/hello

Linux笔记_第107张图片


5、停止SpringBoot项目

我们可以通过ps或者jps指令,查看到系统的进程,然后强制杀掉即可。

Linux笔记_第108张图片


扩展:后台运行项目

当前这个demo工程我们已经部署成功了,并且我们也可以访问项目了。但是这个工程目前是存在问题的,就是当前我们项目启动的这个窗口被霸屏占用了(前台运行),如果我们把这个窗口关闭掉(或ctrl+c),当前服务也就访问不到了

Linux笔记_第109张图片

Linux笔记_第110张图片


要想让我们部署的项目进行后台运行,我们需要使用到Linux中的 nohup 命令(nohup :no hang up,不挂断),它可以不挂断地运行指定命令,退出终端不会影响程序的运行。

nohup命令语法格式:nohup Command [ Arg … ] [&]

  • 参数说明:

    • Command:要执行的命令。

      • Arg:一些参数,可以指定输出文件。

      • &:让命令在后台执行,终端退出后命令仍旧执行。


示例:后台运行 java -jar 命令,并将日志输出到helloworld.log文件

nohup java -jar helloworld.jar &> helloworld.log &

如果直接使用 nohup java -jar helloworld.jar & 命令,他会自动生成hub.log,并将日志输出到该文件中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4zCxEeT-1673334997558)(Linux.assets/image-20230108203844703.png)]

如果是这样日志表示我们的项目就已经启动成功了。

  • 上面那个命令简写:nohup java -jar helloworld.jar > helloworld.log &
  • 一个重定向符号>表示覆盖,如果>每次启动会先把原来的日志清空。
  • 两个>号,即>>表示追加,例如:nohup java -jar helloworld.jar >> helloworld.log &

2. 基于Shell脚本自动部署


前面介绍的项目部署是手动部署,也就是部署过程中的每一步操作都需要我们手动操作。接下来,我们再介绍一下项目的自动部署,来简化项目部署的操作。

在这里插入图片描述

操作步骤如下:

  1. 在Gitee上创建远程仓库,并将本地的项目代码推送到远程仓库中。
  2. 在Linux中安装Git,克隆代码。
  3. 在Linux中安装maven。
  4. 编写Shell脚本(拉取代码、编译、打包、启动)。
  5. 为用户授予执行Shell脚本的权限。
  6. 执行Shell脚本。

1、在Gitee上创建远程仓库、并将本地的项目代码推送到远程仓库中。(别忘忽略文件.gitignore)

### Example user template template
### Example user template

# IntelliJ project files
.idea
*.iml
out
gen

target

开启版本控制:(然后将项目添加到暂存区、然后commit)

Linux笔记_第111张图片

Linux笔记_第112张图片

推送到远端:

Linux笔记_第113张图片

Linux笔记_第114张图片

Linux笔记_第115张图片

Linux笔记_第116张图片


2、在Linux中安装Git(Linux上自带Git),在/usr/local目录下使用Git克隆代码:

# 通过yum命令在线安装Git(忽略此处)
yum list git			列出git安装包
yum install git			在线安装git

在这里插入图片描述

# 克隆代码
git clone https://gitee.com/aopmin/helloworld.git

Linux笔记_第117张图片

因为是私有库,所以克隆或拉取的时候都需要输入用户名和密码,这样操作比较麻烦,我们可以这样做:

  • 方案1: 将远程仓库改成公共的库。
  • 方案2: 保存用户名和密码,git config --global credential.helper store。

3、在Linux中安装maven。

4、编写Shell脚本:

Shell脚本(shell script),是一种Linux系统中的脚本程序。使用Shell脚本编程跟 JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

在/usr/local/目录下创建一个sh目录,并创建一个shell脚本。

mkdir -p /usr/local/sh
cd /usr/local/sh
vim bootStart.sh

bootStart.sh脚本内容:

#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================

echo 停止原来运行中的工程
APP_NAME=helloworld

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

echo 准备从Git仓库拉取最新代码
cd /usr/local/helloworld

echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`

cd target

echo 启动项目
nohup java -jar helloworld.jar &> helloworld.log &
echo 项目启动完成

在这里插入图片描述


5、为shell脚本授权(权限全开)

chmod 777 bootStart.sh

Linux笔记_第118张图片


6、执行脚本

sh bootStart.sh  

Linux笔记_第119张图片

注意: 在执行maven指令进行打包时,第一次执行可能会耗时比较长,因为在进行maven工程的打包时,需要到中央仓库下载工程依赖的jar包和插件(可以在settings.xml中配置阿里云私服加速下载)。


启动完成之后, 我们可以查看java进程:

jps -l

Linux笔记_第120张图片


测试访问:

Linux笔记_第121张图片


十二、数据库备份还原


可以使用命令方式备份还原,也可以通过一些客户端进行备份还原。

备份命令: (在cmd窗口中运行命令)

mysqldump -u用户名 -p密码 需要备份的数据库名称>本地磁盘sql文件的路径

示例: 备份(客户端里叫转存sql文件)

mysqldump -uroot -p1234 ssm_db>e:/backup.sql

还原命令: (先登陆目标数据库,若不存在,需要手动创建下,然后再去执行命令)

source 本地磁盘sql文件的路径

示例:还原(创建ssm_db数据库,将数据还原这个数据库中)

mysql -h192.168.203.103 -P3306 -uroot -p123456

>create database ssm_db default charset utf8mb4;
>use ssm_db
>source e:/backup.sql

你可能感兴趣的:(Linux,linux,unix,服务器)