Linux学习笔记(一)

前言:

      安装软件过程中的一些教程放到此网盘:https://pan.quark.cn/s/eee7ced07573

一、Linux介绍

       Linux 是一个开放源代码的类 Unix 操作系统内核,是基于 POSIX(可移植操作系统接口)标准的。它最初由芬兰计算机科学家 Linus Torvalds 在1991年创建,并迅速发展成为一个强大、灵活且广泛使用的操作系统。以下是关于 Linux 的一些主要特点和信息:
       1. 开放源代码和自由软件
       2. 多样的发行版(Distribution)
       3. 多用户、多任务和多平台支持
       4. 强大的安全性和稳定性
       5. 命令行界面和图形用户界面(GUI)
       6. 广泛的应用领域
       总体来说,Linux 的成功归因于其开放源代码、稳定性、安全性、灵活性和高度可定制性。它不仅是技术爱好者和开发者的首选,也是众多大型组织和企业的基础设施重要组成部分。

二、Vm+Centos安装

1、下载Vmware 

https://link.zhihu.com/?target=https%3A//www.vmware.com/

2、下载Centos镜像

下载地址:https://mirrors.aliyun.com/centos/7/isos/x86_64/

下载DVD 4.4G标准版本的,然后根据安装指导就安装成功

三、配置静态IP

       在Linux命令行输入以下命令:

ifconfig

ip addr


        找到ens33里面此电脑的ip地址  ,然后复制

然后进入文件夹:

cd /etc/sysconfig/network-scripts/

通过vim编辑下面内容:

vim ifcfg-ens33

然后把 BOOTPROTO设置为静态,ONBOOT设置为yes,后面加上

IPADDER = "刚才复制的电脑ip"

GATEWAR="电脑ip后三位改为.2"

DNS1="电脑ip后三位改为.2" 

然后  :wq 退出vim

四、安装Xshell、Xftp、nodepad++这三个软件

 安装效果如图所示:

然后,通过Xshell软件连接到Linux虚拟机终端就能在Xshell软件中开始练习Linux了!

五、Linux系统介绍以及常用的指令

Linux 目录结构:

1./bin:存放系统的基本命令(二进制可执行文件)。
2./boot:存放启动 Linux 操作系统所需的文件,如内核文件和引导加载程序配置。
3./dev:存放设备文件,Linux 中所有设备都被视为文件。
4./etc:存放系统配置文件。
5./home:普通用户的家目录。
6./lib:存放系统运行时需要的共享库文件。
7./media:挂载可移动介质的挂载点。
8./mnt:临时挂载其他文件系统的挂载点。
9./opt:可选的软件包安装目录。
10./proc:虚拟文件系统,提供有关系统和进程的信息。
11./root:系统管理员(root 用户)的家目录。
12./sbin:存放系统管理员使用的系统管理命令。
13./srv:存放特定服务提供的数据或文件。
14./tmp:存放临时文件的目录。
15./usr:存放用户安装的应用程序和文件。
16./var:存放经常变化的文件,如日志、数据库等。

Linux 中常用的指令:

1.ls:列出目录内容。
2.cd:切换目录。
3.pwd:显示当前工作目录。
4.mkdir:创建新目录。
5.rm:删除文件或目录。
6.cp:复制文件或目录。
7.mv:移动文件或目录。
8.touch:创建空文件或更新文件时间戳。
9.cat:连接文件并打印到标准输出设备上。
10.grep:在文件中搜索指定的模式。
11.echo:显示文本或将文本输出到文件。
12.chmod:修改文件或目录的权限。
13.chown:修改文件或目录的所有者。
14.sudo:以超级用户身份执行命令。
15.apt-get/yum:包管理器,用于安装、更新和管理软件包。

六、用户

1、查看用户信息的三条指令

查看全部:
cat /etc/passwd 

查看文件最后数字行信息:
tail -n 数字 /etc/passwd 

查看文件开头数字行信息:
head -n 数字 /etc/passwd 

2、用户七个字段信息含义

在Linux系统中,通常使用冒号(:)分隔的七个字段来表示一个用户的详细信息,例如:
user1:x:1001:1001::/home/user1:/bin/bash

这七个字段的含义依次是:

1.用户名(user1):这是用户的登录名称。
2.密码占位符(x):在传统的 /etc/passwd 文件中,此位置通常显示为 x,实际的加密密码保存在 /etc/shadow 文件中,以提高安全性。
3.用户ID(UID,1001):每个用户在系统中都有一个唯一的数字ID,称为用户ID(UID)。
4.组ID(GID,1001):表示用户所属的主要用户组ID。用户组是一组用户的集合,可以让用户共享文件和资源。
5.用户信息(空白,通常是注释字段):通常在这里可以添加用户的详细信息,如全名、电话等,但这个字段不是必须的。
6.用户主目录(/home/user1):用户登录后默认所在的目录,也称为家目录。
7.默认shell(/bin/bash):用户登录后默认使用的shell程序。shell是用户与操作系统交互的界面。

 3、用户操作


1.新建用户:useradd newuser
2.删除用户:userdel username
3.修改用户:usermod -l newname oldname (修改用户名)或 usermod -d /new/home/dir username (修改用户家目录)
4.查看用户密码:cat /etc/shadow
5.修改用户密码:passwd username
6.用户切换指令:su:su - username

4、用户组操作


1.新建用户组:groupadd groupname
2.删除用户组:groupdel groupname
3.将用户加入用户组:usermod -aG groupname username
4.查看用户所属的用户组:groups username
5.修改文件或目录的所属用户组:chown :groupname filename_or_directory
6.修改用户组的主组:usermod -g groupname username
 

5、相关权限问题


文件权限:

每个文件或目录有三组权限:用户(文件所有者)、用户组和其他用户。
权限分为读(r)、写(w)和执行(x),分别用数字或符号表示。
数字表示法:r=4,w=2,x=1。例如,读写执行权限表示为 7,只读权限表示为 4。


用户组权限:

每个文件或目录可以属于一个用户组,用户组可以有特定的权限。
用户组权限可以让同一组的多个用户共享对文件和目录的访问权限。


常用命令和操作:
查看文件权限:ls -l filename,显示文件的详细权限。
修改文件权限:chmod 命令可以修改文件或目录的权限。
例如,chmod 755 filename 将文件设置为所有者具有读写执行权限,用户组和其他用户具有读和执行权限。
修改文件所属用户或用户组:chown 命令可以修改文件或目录的所有者和/或用户组。
例如,chown username:groupname filename 将文件的所有者改为 username,用户组改为 groupname。


权限相关文件:
/etc/passwd:包含系统上的每个用户账号的信息。
/etc/group:包含系统上的每个用户组的信息。
/etc/shadow:包含用户密码的加密形式,只有root用户可以读取。

七、Shell编程 

1、概述

Linux Shell编程是在Linux或Unix系统下使用Shell(命令行解释器)编写脚本的过程,用于自动化任务和管理系统。

2、shell脚本格式

Shell脚本是文本文件,可以用文本编辑器(如vim、nano等)编写。它的基本格式包括:

1.Shebang行:通常在脚本文件的第一行指定解释器路径,告诉系统使用哪种Shell来执行脚本。

   #!/bin/bash

2.注释:以 # 开头的行是注释,用于解释和描述脚本的目的、作者、修改记录等信息。

   # This is a sample shell script
   # Author: jn
3.命令:Shell脚本由一系列命令组成,每个命令占据一行或多行。

   echo "Hello, World!"
4.变量:用于存储数据和临时结果。在Bash中,变量名通常是大写的。

   NAME="Jn"
   AGE=18
5.控制结构:包括条件语句(if-else)、循环结构(for、while)、case语句等,用于控制脚本的执行流程。

   if [ "$AGE" -gt 18 ]; then
       echo "$NAME is an adult."
   else
       echo "$NAME is a minor."
   fi
6.函数:用于封装一组命令,可重复使用。

   function greet {
       echo "Hello, $1!"
   }
   greet "Alice"
7.输入输出:可以通过读取标准输入(键盘)、输出到标准输出(屏幕)、重定向文件等实现输入输出操作。

   echo "Enter your name:"
   read NAME
   echo "Hello, $NAME!"
8.退出状态:脚本执行完毕后,通过 exit 命令可以返回一个退出状态码,通常0表示成功,非零值表示失败。

   exit 0

3、运行方式

Shell脚本可以通过多种方式来运行,主要取决于脚本的执行权限以及在哪里调用它。以下是几种常见的运行方式:

1.直接执行:

   chmod +x myscript.sh   # 赋予执行权限
   ./myscript.sh           # 直接执行脚本

2.使用Shell解释器执行:
bash myscript.sh       # 使用bash解释器执行脚本
sh myscript.sh         # 使用sh
 

4、数组

在Shell脚本中,数组是一种特殊的变量类型,用于存储多个值。Shell中支持的数组主要包括索引数组和关联数组两种类型。

访问数组元素:

# 访问单个元素
echo ${my_array[0]}   # 输出:value1

# 输出整个数组
echo ${my_array[@]}   # 输出:value1 value2 value3

# 获取数组长度
echo ${#my_array[@]}  # 输出:3

遍历数组:

# 使用for循环遍历
for item in "${my_array[@]}"; do
    echo $item
done

关联数组
关联数组(associative arrays)使用字符串作为索引而不是数字。
声明和初始化关联数组:

# 声明关联数组
declare -A my_assoc_array

# 初始化元素
my_assoc_array[key1]=value1
my_assoc_array[key2]=value2
my_assoc_array[key3]=value3

访问关联数组元素:

# 访问单个元素
echo ${my_assoc_array[key1]}   # 输出:value1

# 输出整个数组
echo "${my_assoc_array[@]}"    # 输出:value1 value2 value3

遍历关联数组:

# 使用for循环遍历
for key in "${!my_assoc_array[@]}"; do
    echo "Key: $key, Value: ${my_assoc_array[$key]}"
done

5、for循环

1.数字序列的for循环:

for (( i=1; i<=5; i++ )); do
       echo "Number: $i"
   done

2.遍历数组元素的for循环:

 my_array=(apple banana cherry)
   for item in "${my_array[@]}"; do
       echo "Fruit: $item"
   done


3.使用seq生成序列的for循环:

for i in $(seq 1 5); do
       echo "Number: $i"
   done


4.嵌套for循环:

for (( i=1; i<=3; i++ )); do
       echo "Outer loop iteration: $i"
       for (( j=1; j<=2; j++ )); do
           echo "    Inner loop iteration: $j"
       done
   done

6、if分支语句

当需要根据条件执行不同的命令或代码块时,可以使用Shell脚本中的if分支语句。简单回答如下:
 

if [ condition ]; then
    # Commands to execute if condition is true
fi

其中,condition 是一个逻辑表达式,如果评估为true,则执行then块中的命令。可以通过以下方式对条件进行比较:

1.字符串比较:[ "$var" == "value" ]
2.数字比较:[ "$num" -gt 10 ]
3.文件或目录检查:[ -f "$file" ] 或 [ -d "$dir" ]
4.多个条件组合:使用逻辑运算符 && 和 ||

例如:

if [ "$num" -gt 10 ]; then
    echo "$num is greater than 10"
fi

这段代码会检查变量 num 是否大于10,如果是,则输出相应的消息。

7、case语句 

格式如下:

case 值 in
比较值1)
等于比较值1时候执行的代码
;;
比较值2)
等于比较值2时候执行的代码
;;
 ....
 esac

案例:

#!/bin/bash
 case $1 in
 a)
  echo "第一个选项"
 ;;
 b)
  echo "第二个选项"
 ;;
 c)
  echo "第三个选项"
 ;;
 esac

在你运行次脚本的时候,如果你输入sh 脚本名.后缀 a,就会在终端输出显示 第一个选项

八、Docker 

1、docker概念以及特点

概念:

        Docker是一种容器化技术,利用Linux操作系统的虚拟化功能,在单个主机上创建和管理轻量级的应用容器。每个容器包含应用程序及其依赖项,提供隔离、快速部署和跨环境的可移植性。   

特点:

轻量级: Docker容器比传统虚拟机更轻量,因为它们共享主机操作系统内核。
快速部署: 容器可以快速启动,避免了传统虚拟机启动操作系统的开销。
可移植性: Docker容器在不同环境中可以一致运行,简化了应用程序的部署和维护。
隔离性: 每个容器有独立的文件系统和进程空间,与其他容器及主机隔离开来。
版本控制: Docker镜像可以通过版本控制管理,方便复用和分享。

2、安装docker

1、关闭防火墙,并设置开机不启动

systemctl disable --now filewalld

2、yum 包更新到最新 

yum update

3、安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2


4、 设置yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


5、 安装docker,出现输入的界面都按 y 

yum install -y docker-ce


6、 查看docker版本,验证是否安装成功

docker -v

3、容器相关命令

1、查看容器

#查看正在运行的容器:
docker ps

#查看所有容器
docker ps -a

 2、创建并启动容器:

docker run 参数

 #创建守护式容器
docker run -id --name=c2 centos:7

3、 进入容器

docker exec -it c2 /bin/bash #进入容器

4、停止、启动、删除、查看信息、退出容器

#停止容器
docker stop 容器名称

#启动容器
docker start 容器名称

#删除容器
docker rm 容器名称
docker rm -f 容器名称   #强制删除容器

#查看容器信息
docker inspect 容器名称

#退出容器
exit

5、卸载docker

查看yum安装的docker文件包

yum list installed |grep docker

查看docker相关的rpm源文件

rpm -qa |grep docker

删除相关服务

yum -y remove xxx ##上述步骤得到的安装包以及相关服务代替xxx进行删除,直到查看不到就卸载了docker

九、Docker应用部署 

1、MySql部署

a.搜索MySQL镜像:

docker search docker

b.拉取mysql镜像:

docker pull mysql:5.7

c.创建容器,设置端口映射、目录映射

docker run -d --name=c_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=dn  mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 d.开启mysql容器

docker exec -it c_mysql/bin/bash

e.登录mysql

mysql -u root -p123456

 f.退出mysql

quit

2、部署tomcat

a.查看tomcat镜像

docker search tomcat

b.拉取tomcat镜像

docker pull tomcat

c.创建容器,设置端口映射、目录映射

mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat2 \
-p 8082:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

 

十、数据卷 

1、数据卷的概念和作用

概念:数据卷是宿主机中的一个文件或目录

作用:数据持久化、数据可被多个容器使用和查看、外部机器和容器之间的间接通信

2、配置数据卷

#在/root目录下创建mysql目录用于存储mysql数据信息
#每行指令后面"\"表示换行
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 33306:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v ~/conf1:/etc/mysql/conf2 \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

十一、DockerFile

1、docker镜像的本质

        Docker镜像本质上是一个只读的模板,包含了用于运行应用程序的文件系统和相关配置。镜像中包含了应用程序的依赖、库文件、运行时环境以及启动指令等。 

2、思考

Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?

        Docker的centos镜像只包含了运行基本centos系统所需的最小化文件系统和工具。通常这些镜像是经过优化的,只包含了运行容器所需的核心文件和工具,不包括GUI或其他不必要的组件。因此,它们相对较小,大约在几百MB左右。

        传统的centos操作系统的ISO安装文件是一个完整的操作系统镜像,包含了GUI、开发工具、服务、文档等大量的软件包和组件。这些ISO文件通常几个GB,因为它们预装了大量的软件和库文件,适用于多种用途的服务器和桌面环境。

Docker 中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB? 

        Docker的tomcat镜像不仅包含了Tomcat服务器本身,还可能包含了一些基础操作系统的依赖和一些配置文件。此外,为了方便使用和部署,镜像可能还包含了一些额外的工具或文件,如启动脚本、日志设置等。这些附加内容会增加镜像的大小。

        传统的tomcat安装包仅包含了Tomcat服务器本身及其最基本的配置文件。它是为了在单独的操作系统上安装和运行Tomcat而设计的,不包含任何额外的依赖或工具。因此,其大小通常只有几十MB左右。

3、镜像转容器

#创建tomcat容器
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

# 进入tomcat容器
docker exec -it c_tomcat /bin/bash

#创建a.txt b.txt 在webapps/test下面创建一个文件夹
cd ~
touch a.txt b.txt

#容器转镜像
docker commit 容器ID sj_tomcat:1.0

#压缩镜像
docker save -o sj_tomcat.tar sj_tomcat:1.0

#删除原来镜像
docker rmi sj_tomcat:1.0

#从压缩文件加载镜像
docker load -i sj_tomcat.tar
 
#创建容器
docker run -it --name=new_tomcat sj_tomcat:1.0 /bin/bash

#进入容器查看内容
docker exec -it new_tomcat /bin/bash

4、dockerfile

        Dockerfile是一个文本文件,用于定义和配置Docker镜像的内容和行为。它包含了一系列的指令和命令,这些指令告诉Docker引擎如何构建自动化镜像。Dockerfile的设计目的是简化Docker镜像的构建过程,使得用户可以通过一个脚本文件来自动化地创建镜像,而不需要手动执行一系列繁琐的步骤。

Dockerfile的基本结构和使用例子:
一个简单的Dockerfile通常包含以下几个基本部分:

# 指定基础镜像
FROM ubuntu:20.04

# 设置镜像的作者
LABEL maintainer="your_email@example.com"

# 执行一些操作,比如更新APT包管理工具
RUN apt-get update && apt-get install -y \
    package1 \
    package2 \
    && rm -rf /var/lib/apt/lists/*

# 设置环境变量
ENV ENV_VAR_NAME=value

# 暴露容器端口
EXPOSE 8080

# 定义容器启动时执行的命令
CMD ["executable","param1","param2"]

在上述例子中:

FROM 指令指定了基础镜像,这里使用了Ubuntu 20.04作为基础。
LABEL 指令设置了镜像的作者信息。
RUN 指令在镜像构建过程中执行了一些命令,例如更新APT包管理工具并安装软件包。
ENV 指令设置了环境变量。
EXPOSE 指令声明了容器运行时所监听的端口。
CMD 指令定义了容器启动时要执行的默认命令。

通过这些指令,用户可以灵活地定制和配置自己的Docker镜像,以满足特定的应用需求和运行环境。

案例部署 一

#在主目录下新建一个文件dockerfiles
mkdir ~/dockerfiles

#打开dockerfiles
 cd ~/dockerfiles

#使用vim编译器新建一个centos_dockerfile并编辑
 vim centos_dockerfile

在vim输入以下指令,:wq 保存退出

FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo  https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum update -y
RUN yum install -y vim
WORKDIR /root

 然后新建一个镜像:

 docker build -f ./centos_dockerfile -t sj_centos:1 .

进入镜像,查看效果:

docker run -it --name=c2 sj_centos:1

进入镜像后,发现vim编辑器可正常使用,案例一部署完成 

案例部署 二 

1、通过xftp软件把springboot.jar文件拉入到/dockerfiles文件里面

2、

#进入dockerfiles
cd ~/dockerfiles

#vim新建一个springboot_dockerfile并编辑
vim springboot_dockerfile

3.在vim编辑器输入以下命令

FROM java:8
 MAINTAINER sj <sj@163.com>
 ADD springboot.jar app.jar
CMD ["java","-jar","app.jar"]

4.新建一个镜像 

 docker build -f ./springboot_dockerfile -t app .

5.创建启动容器 

docker run -id -p 9000:8080 app

效果展示 

 

持续更新中...... 感谢大家的观看

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值