首页
友情链接
关于
Search
1
Docker 拉取镜像报错 “missing signature key” 解决办法
1,418 阅读
2
如何在CentOS 7中升级Linux内核
533 阅读
3
docker 常用命令
229 阅读
4
k8s 常用命令
217 阅读
5
docker 拉去镜像失败Retrying in 1 second
190 阅读
默认分类
Liinux系统管理
容器
云计算
虚拟化
编程语言
数据库
AI
登录
/
注册
Search
标签搜索
Docker
shell脚本
Linux 系统管理
k8s
LVM
KVM
网络服务
Nginx
Ubuntu
内核升级
Linux用户管理
系统管理
MySQL
共享存储
Abbott
累计撰写
37
篇文章
累计收到
2
条评论
首页
栏目
默认分类
Liinux系统管理
容器
云计算
虚拟化
编程语言
数据库
AI
页面
友情链接
关于
搜索到
37
篇与
的结果
2024-03-08
docker 常用命令
docker 基础命令语法2.1 docker 用法docker {子命令} [OPTIONS] COMMAND2. 关于镜像的命令2.2.1 垃取镜像命令:pull语法: docker pull [镜像]示例:centosdocker pull centos2.2.2 查找可用的镜像[root@ansible-controller ~]# docker search ubuntu2.2.3 列出本地镜像[root@ansible-controller ~]# docker image list REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 9 months ago 13.3kB centos latest 5d0da3dc9764 2 years ago 231MB [root@ansible-controller ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 9 months ago 13.3kB centos latest 5d0da3dc9764 2 years ago 231MB2.2.4 删除本地镜像rmi --rm image[root@ansible-controller ~]# docker rmi 5d0da3dc9764 Untagged: centos:latest Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6 Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b593. 创建/管理container3.1 创建一个container语法:Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] [root@ansible-controller ~]# docker create --name web-nginx nginx:latest dd8560bc86b20e4ac032dacf0a14ec01597336e86990979d3395b01b3993b8f7\ [options] --name #容器的名称3.2 运行一个container语法:Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]示例:[root@ansible-controller ~]# docker run e4720093a3c1 [root@ansible-controller ~]# docker run -P nginx:latest [root@ansible-controller ~]# docker run -p 80:80 e4720093a3c1 [root@ansible-controller ~]# docker run --name nginx_test -p 80:80 -d nginx:latest [root@ansible-controller ~]# docker run -it --name my_cnetos --rm 5d0da3dc9764 #测试使用,及时销毁 选项:--name -p -P -d #在后台运行容器并打印容器 ID -i #即使未连接,也要保持 STDIN 打开 -t TTY #分配一个伪6终端3.3 停止一个container[root@ansible-controller ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11064c8e0064 5d0da3dc9764 "/bin/bash" 11 minutes ago Up 11 minutes my-centos 9a23b9ebcb9e nginx:latest "/docker-entrypoint.…" 33 minutes ago Up 33 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx_test [root@ansible-controller ~]# docker stop nginx_test nginx_test [root@ansible-controller ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11064c8e0064 5d0da3dc9764 "/bin/bash" 14 minutes ago Up 14 minutes my-centos3.4 重启一个container[root@ansible-controller ~]# docker restart nginx_test nginx_test3.5 列出容器# 只列出正在运行container [root@ansible-controller ~]# docker container list CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #列出所有的container (正在运行、以退出) [root@ansible-controller ~]# docker container list --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd8560bc86b2 nginx:latest "/docker-entrypoint.…" 2 minutes ago Created web-nginx 568d91fc0590 hello-world "/hello" 30 minutes ago Exited (0) 30 minutes ago goofy_ritchie [root@ansible-controller ~]# [root@ansible-controller ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@ansible-controller ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd8560bc86b2 nginx:latest "/docker-entrypoint.…" 4 minutes ago Created web-nginx 568d91fc0590 hello-world "/hello" 33 minutes ago Exited (0) 33 minutes ago goofy_ritchie [root@ansible-controller ~]# 3.6 获取容器详细信息用法:docker inspect {容器名称/容器的ID}[root@ansible-controller ~]# docker inspect 10e8bfa05b003.7 进入容器[root@ansible-controller ~]# docker exec -it 9a23b9ebcb9e /bin/bash3.8 删除container[root@ansible-controller ~]# docker rm web-nginx web-nginx3.9 获取容器日志[root@ansible-controller ~]# docker logs -f nginx_test3.10 拷贝语法:docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH示例1:[root@ansible-controller docker_nginx]# docker cp af8d6a0271fe:/etc/nginx .八、数据持久化 volume保证数据安全数据一致性修改配置文件[root@ansible-controller html]# docker run --name nginx_volume -itd -p 81:80 -v /opt/docker_nginx/html/:/usr/share/nginx/html/ -4720093a3c1 [root@ansible-controller docker_nginx]# docker run -itd -P --name nginx_test_v1 -v /opt/docker_nginx/nginx:/etc/nginx/ -v /opt/docker_nginx/html/:/usr/share/nginx/ nginx:latest
2024年03月08日
229 阅读
0 评论
0 点赞
2024-03-08
install docker
Ubuntu更新包管理器的软件源:sudo apt update安装依赖包以允许apt通过HTTPS使用仓库:sudo apt install -y apt-transport-https ca-certificates curl software-properties-common添加Docker的官方GPG密钥:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg添加Docker的稳定版本仓库:echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null安装Docker引擎:sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io验证安装是否成功:sudo docker run hello-worldCentOS操作系统:安装所需的软件包:sudo yum install -y yum-utils设置Docker的稳定版本仓库:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装Docker引擎:sudo yum install -y docker-ce docker-ce-cli containerd.io启动Docker服务:sudo systemctl start docker验证安装是否成功:sudo docker run hello-worldmacOS操作系统:下载Docker Desktop for Mac,并安装它:https://www.docker.com/products/docker-desktopWindows操作系统:下载Docker Desktop for Windows,并安装它:https://www.docker.com/products/docker-desktop这些是在常见操作系统上安装Docker的基本步骤。请注意,具体的步骤可能因操作系统版本或Docker版本而有所变化。建议查阅Docker官方文档以获取更详细和特定于操作系统版本的安装指南。
2024年03月08日
36 阅读
0 评论
0 点赞
2024-03-08
Docker的意义和优势
Docker 的意义Docker在软件开发和运维领域具有重要的意义,以下是几个方面的解释:简化应用程序交付和部署:Docker提供了一种标准化的打包和分发机制,即Docker镜像。开发人员可以将应用程序及其依赖项打包到一个独立的、可移植的容器中,然后在任何支持Docker的环境中运行,无需担心环境差异和依赖关系的问题。这极大地简化了应用程序的交付和部署过程,使得应用程序能够更快速、可靠地运行在不同的环境中。提高开发效率:Docker的容器化能力使得开发人员可以在本地开发环境中创建与生产环境一致的容器,消除了由于环境差异引起的问题。开发人员可以更快速地构建和测试应用程序,同时能够更好地隔离不同的组件和服务,提高开发效率和代码质量。加速持续集成和持续部署(CI/CD):Docker的容器化技术与持续集成和持续部署流程紧密结合,可以提供可重复、一致和可靠的构建和部署环境。通过使用Docker容器,开发团队可以快速部署和测试应用程序,同时能够更轻松地进行扩展和回滚操作。资源利用率和弹性扩展:Docker的容器化技术可以实现更高的资源利用率。多个容器可以在同一台物理机器上运行,共享主机操作系统,避免了虚拟机的资源浪费。此外,Docker还支持弹性扩展,可以根据负载情况自动调整容器的数量,以适应不同的工作负载需求。环境一致性和隔离性:Docker的容器提供了一致的运行环境,使得应用程序可以在不同的环境中具有相同的行为。容器之间相互隔离,每个容器拥有自己的文件系统、网络和运行空间,互不干扰。这使得应用程序更加可靠和安全,同时也方便了应用程序的管理和维护。总的来说,Docker的意义在于提供了一种简单、轻量级和可移植的容器化解决方案,改善了应用程序的开发、交付和部署过程。它提供了标准化的环境和工具,使得应用程序能够更高效地运行和扩展,同时提供了更好的资源利用率和隔离性。Docker的出现推动了容器化技术的普及和发展,改变了软件开发和运维的方式。Docker 优势Docker具有多个优势,使其成为广泛应用于软件开发和运维领域的容器化平台。以下是一些主要的优势:轻量级和高性能:Docker容器相比于传统的虚拟机具有更小的资源消耗和更快的启动时间。容器共享主机操作系统,避免了额外的操作系统开销,因此能够更高效地利用系统资源和提供更好的性能。环境一致性和可移植性:Docker的容器化技术提供了一致的运行环境,使得应用程序可以在不同的环境中具有相同的行为。无论是开发、测试还是生产环境,应用程序在容器中运行时都可以保持一致。同时,Docker容器可以在不同的主机和云平台上轻松移植和部署。快速部署和扩展:Docker容器可以快速部署和启动,无需进行复杂的操作系统安装和配置。容器化应用程序可以通过简单的命令或自动化工具进行部署,大大减少了部署时间。此外,Docker提供了弹性扩展的能力,可以根据负载情况自动调整容器的数量,以满足不同的需求。持续集成和持续部署(CI/CD)集成:Docker与持续集成和持续部署流程(CI/CD)紧密结合,提供了可重复、一致和可靠的构建和部署环境。开发团队可以使用Docker容器快速构建、测试和部署应用程序,同时能够更轻松地进行版本控制和回滚操作。简化开发环境配置和依赖管理:Docker容器可以打包应用程序及其依赖项,创建一个独立、隔离的运行环境。开发人员可以在本地使用相同的容器来配置开发环境,消除了由于环境差异导致的问题。同时,Docker容器能够更好地管理应用程序的依赖项,确保环境的一致性和可重复性。系统隔离和安全性:Docker的容器提供了隔离的运行环境,每个容器拥有自己的文件系统、网络和进程空间,互不干扰。这提供了更高的安全性,应用程序之间不会相互影响,同时也减少了对主机系统的潜在风险。总的来说,Docker的优势在于提供了轻量级、可移植、一致性的容器化解决方案,使得应用程序的开发、交付和部署过程更加高效、可靠和可重复。它改善了开发人员和运维人员的工作流程,降低了系统资源消耗,提供了更好的应用程序性能和安全性。
2024年03月08日
71 阅读
0 评论
0 点赞
2024-03-08
docker 概念
Docker是一种开源的容器化平台,它提供了一种轻量级的虚拟化解决方案,使开发人员能够以一种可移植的方式打包、分发和运行应用程序。以下是Docker的几个核心概念:镜像(Image):Docker镜像是应用程序及其依赖项的只读模板。镜像包含了运行应用程序所需的文件系统、库、工具和设置等。可以将镜像看作是一个应用程序的打包版本,它可以在任何支持Docker的环境中使用。容器(Container):容器是从Docker镜像创建的运行实例。容器是可执行的,它包含了运行应用程序所需的所有内容,包括文件系统、环境变量、库和进程。容器可以被启动、停止、删除,并且可以在不同的主机上迁移和复制。Docker引擎(Docker Engine):Docker引擎是Docker的核心组件,它负责构建、运行和管理容器。它包括Docker守护进程(Docker daemon)和与之交互的命令行工具(Docker CLI)。Docker引擎可以在主机上运行,负责管理容器的生命周期、镜像的存储和网络的设置等。仓库(Repository):Docker仓库是用于存储和分享Docker镜像的地方。公共的Docker仓库称为Docker Hub,它包含了大量的官方和社区维护的镜像供用户使用。此外,您还可以搭建私有的仓库来存储自己的镜像。Dockerfile:Dockerfile是一个文本文件,用于定义Docker镜像的构建过程。它包含了一系列的指令和参数,用于描述如何构建镜像、配置环境和运行应用程序。通过编写Dockerfile,您可以定制自己的镜像,并将其用作容器的基础。通过使用Docker,开发人员可以将应用程序及其依赖项打包到一个独立的、可移植的容器中,然后在任何支持Docker的环境中运行,而无需担心环境差异和依赖关系的问题。这使得应用程序的部署、扩展和管理变得更加简单和高效。
2024年03月08日
39 阅读
0 评论
0 点赞
2024-03-08
容器概念
Docker的背景可以追溯到Linux容器技术的发展。Linux容器是一种轻量级的虚拟化技术,它通过使用Linux内核的命名空间和控制组特性,实现了对进程和资源的隔离。在传统的虚拟化环境中,每个虚拟机(VM)都运行一个完整的操作系统实例,这导致了较高的资源消耗和启动时间。为了解决这个问题,Linux容器技术应运而生。Linux容器不需要独立的操作系统实例,而是共享主机操作系统,因此具有更低的资源消耗和更快的启动时间。Docker的创始人Solomon Hykes于2013年发布了Docker开源项目,将Linux容器技术进行了封装和扩展,使得容器的使用更加简单和便捷。Docker在容器化领域的创新之处在于引入了一种便捷的打包和分发机制,即Docker镜像,以及一个集中的镜像仓库,即Docker Hub。通过使用Docker,开发人员可以使用Dockerfile定义应用程序的构建过程,将其打包为一个可移植的Docker镜像。这个镜像可以在任何支持Docker的环境中运行,无论是开发人员的本地机器、测试环境还是生产环境,都能提供一致的运行环境和行为。Docker的出现极大地简化了应用程序的部署和运维流程,推动了容器化技术的普及和发展。它提供了一个统一的容器管理平台,使得开发人员和运维人员能够更轻松地构建、交付和管理应用程序。Docker的快速发展也促使了生态系统的形成,许多开发者和公司都贡献了大量的Docker镜像和工具,使得使用Docker变得更加便捷和灵活。
2024年03月08日
62 阅读
0 评论
1 点赞
2024-03-08
Linux 软件包管理
Linux安装及管理软件 本章主要简介Linux下软件安装方式,Linux安装软件也有自己的一套方式,最常见的有源码安装方式,RPM安装方式、YUM安装方式和二进制安装方式。用户可以根据自己的需要和获得软件包的不同,选择不自己喜欢的安装方式。1、源码安装方式由于Linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如Apache、Tomcat、PHP等软件,开源软件基本都是提供源码下载、源码安装的方式;源码安装的好处是用户可以定制软件功能,安装需要的模块,不需要的功能可以不用安装,此外用户还可以自己选择安装路径,方便管理,卸载软件也很方便,只需要删除对应的安装目录即可。源码安装软件一般有以下几个步骤:下载解压源码、分析安装平台环境(configure)、编译安装软件(make、make install) 2、下载、解压源码Linux下软件的源码一般都是C或者C++语言编写的,并且都会在软件的官网上提供源码包下载,我们可以从官网下载源码文件,然后再传到所在的Linux系统下,如果你的Linux系统处于联网状态下,也可以直接在系统内通过wget之类的下载命令将源码包直接下载到Linux系统下。下载完成,把相应的软件包解压即可,针对下载的软件包的不同,使用不同方法进行解压,解压完成后进入解压生成的目录中。在这个目录下,一般都在一个REDAME文件。这个文件非常重要,它详细介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装方式等。3、分析安装平台环境在软件包解压完成之后,源码目录中,一般都会存在configure和README这两个文件,Linux下软件的安装受到操作系统安装环境的影响,比如某些软件在安装或者运行过程中需要调用操作系统本省的库文件,或者需要运行系统的摸个工具等。4、编译、安装软件在验证软件安装环境后正式进入软件的编译步骤,在进行编译前,首先了解下关于编译的一些基础知识. 在Linux系统下,make是经常用到的编译命令,无论是安装软件还是项目开发,都会经常用到编译、安装命令,也就是make和make install。对于一个包含很多源文件的应用程序,使用make和Makefile工具可以简单快速地解决各个源文件之间复杂的依赖关系,同时,make工具可以自动完成所有源码文件的编译工作,并且可以只对上次编译后修改过的文件进行增量编译,因此,熟练掌握了make和Makefile工具之后,源码安装软件就变得像Windows下安装软件一样简单。 1、makefile 文件 make工具最主要的功能就是通过makefile文件来实现的,makefile文件时按照某种语法来进行编写的,文件中定义了各个源文件之间的依赖关系,说明了如果编译源文件并生成可执行文件,它通过描述各个源程序之间的关系make工具自动完成编译工具, 2、make与make install 在了解Makefile文件结构,我们就可以控制编译的选项,定制自己所需的软件功能,接下来,我嗯只须在命令行输入make命令,即可进入编译阶段,根据软件源程序的大小和系统的硬件配置,编译时间不定,编译完成,会在当前目录以及子目录下生成相应的可执行文件,之后就可以进入安装软件,在命令行输入make install命令,在开始安装软件,安装进程会首先创建安装目录,如果没有指定安装目录安装程序默认会在系统的/usr/local目录下创建安装目录,然后将相应的文件和可执行程序从源码目录复制到安装目录下,这样安装就完成了。RPM包安装RPM介绍RPM是Red Hat Package Manager的缩写,本意是Red Hat软件包管理,是最先由Redhat公司开发出来的Linux下软件包管理工具,由于这种软件管理非常方便,逐渐被其他Linux发行商所借用,现在已经成为Linux平台下通用的软件包安装方式。RPM包管理方式的优点是:安装简单、方便,因为软件已经编译完成且打包完成,安装只是个验证环境和解压的过程,此外通过RPM方式安装的软件RPM工具都会记录软件的安装信息,这样方便了软件日后的查询、升级和卸载。RPM包管理方式的缺点是对操作系统环境的依赖很大,它要求RPM包的那幢环境必须与PRM包封装时的环境和一致或相当,还需啊满足安装时与系统某些软件包的依赖关系。RPM包的种类和组成RPM包的封装格式一般有两种,分别是RPM和SRPM,SRPM包也是一种RPM,但是它包含了编译时的源文件和一些编译指定的参数文件,因而在使用的时候需要重新进行编译,通常SRPM对应的RPM文件类似于“xxx.src.rpm”格式。RPM工具描述:RPM工具的使用分为安装、查询、验证、更新、删除等操作。安装软件包:语法格式:rpm [选项...]常用选项:安装/升级/擦除选项: --allfiles 安装全部文件,包含配置文件,否则配置文件会被跳过。 --allmatches 移除所有符合 <package> 的软件包(如果 <package> 被指定未多个软件包,常常会导致错误出现) --badreloc 对不可重定位的软件包重新分配文件位置 -e, --erase=<package>+ 清除 (卸载) 软件包 --excludedocs 不安装程序文档 --excludepath=<path> 略过以 <path> 开头的文件 --force --replacepkgs --replacefiles 的缩写 -F, --freshen=<packagefile>+ 如果软件包已经安装,升级软件包 -h, --hash 软件包安装的时候列出哈希标记 (和 -v 一起使用效果更好) --ignorearch 不验证软件包架构 --ignoreos 不验证软件包操作系统 --ignoresize 在安装前不检查磁盘空间 -i, --install 安装软件包 --justdb 更新数据库,但不修改文件系统 --nodeps 不验证软件包依赖 --nofiledigest 不验证文件摘要 --nocontexts 不安装文件的安全上下文 --noorder 不对软件包安装重新排序以满足依赖关系 --noscripts 不执行软件包脚本 --notriggers 不执行本软件包触发的任何脚本 --nocollections 请不要执行任何动作集 --oldpackage 更新到软件包的旧版本(带 --force 自动完成这一功能) --percent 安装软件包时打印百分比 --prefix=<dir> 如果可重定位,便把软件包重定位到 <dir> --relocate=<old>=<new> 将文件从 <old> 重定位到 <new> --replacefiles 忽略软件包之间的冲突的文件 --replacepkgs 如果软件包已经有了,重新安装软件包 --test 不真正安装,只是判断下是否能安装 -U, --upgrade=<packagefile>+ 升级软件包 --reinstall=<packagefile>+ reinstall package(syum安装方式yum是yellowdog update modified 的缩写,yellow dog(黄狗)也是Linux的一个发行版本,只不过Red Hat公司是将这种升级技术利用到自己的发行版上就形成了现在的yum,yum是进行Linux系统下软件安装和升级常用的一个工具,通过Linux工具配合互联网即可实现软件的便捷安装和自动升级。yum 安装及配置yum的安装以CentOS 7 为例,要检查yum是否已经安装,基本系统默认会自动安装yum工具[root@localhost ~]# rpm -qa |grep yumyum的配置yum的配置文件有主要配置文件/etc/yum.conf,资源库配置目录/etc/yum.repos.d。 yum 安装后,默认的一些资源库配置可能无法使用,因此需要进行修改,修改配置文件为:/etc/yum.repos.d/[cr] name=CentOS-$releasever - cr baseurl=http://mirror.centos.org/centos/$releasever/cr/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=0yum的特点与基本用法yum的特点安装方便,自动解决添加或删除RPM包时遇到的依赖性问题。可以同时配置多个资源库(Repository)配置文件简单明了(/etc/yum.conf, /etc/yum.repos.d/)保持与RPM数据库的一致性yum的基本用法如果安装或者删除RPM包[root@localhost ~]# yum -y install *.rpm [root@localhost ~]# yum -y remove *.rpm检查yum工具更新软件包[root@localhost ~]# yum check-update更新所有的RPM软件包[root@localhost ~]# yum update -y 通过yum查询RPM包信息[root@localhost ~]# yum info
2024年03月08日
114 阅读
0 评论
0 点赞
2024-01-25
第二章节 Shell脚本基本结构
## 第二章节 Shell脚本基本结构2.1 脚本开头的Shebang(#!)行2.2 变量定义与使用变量是为其赋值的字符串。分配的值可以是数字、文本、文件名、设备或任何其他类型的数据。变量不过是指向实际数据的指针。shell 可以让你创建、分配和删除变量变量名称变量名只能包含字母(a 至 z 或 A 至 Z)、数字(0 至 9)或下划线字符 ( _)。按照惯例,Unix shell 变量的名称使用大写字母。以下示例是有效的变量名_ALI TOKEN_A VAR_1 VAR_2 AbbottSun以下是无效的变量名称2_VAR -VARIABLE VAR1-VAR2 VAR_A!之所以不能使用 !、* 或 - 等其他字符,是因为这些字符对 shell 有特殊含义。定义变量变量定义如下variable_name=variable_value例如:NAME="Zhang San"上例定义了变量 NAME,并为其赋值 "Zhang San"。这种类型的变量称为标量变量。标量变量一次只能保存一个值。shell 允许你在变量中存储任何你想要的值。例如:VAR1="Zara Ali" VAR2=100访问值要访问变量中存储的值,请在变量名前加上美元符号 ($) 。例如,下面的脚本将访问已定义变量 NAME 的值,并将其打印出#!/bin/sh NAME="Zhang San" echo $NAME上述脚本将产生以下值:Zhang San只读变量Shell 提供了一种使用只读命令将变量标记为只读的方法。变量被标记为只读后,其值将无法更改。例如,下面的脚本在试图更改 NAME - 的值时会产生错误。示例:#!/bin/bash NAME="Zara Ali" readonly NAME NAME="Qadiri"输出结果:read-Only-var.sh:行4: NAME: 只读变量取消设置变量取消设置或删除变量会指示 shell 从其跟踪的变量列表中删除该变量。一旦取消设置变量,就无法访问变量中存储的值。使用 unset 命令取消已定义变量的语法如下unset variable_name上述命令将取消已定义变量的值。下面是一个简单的示例,演示该命令如何运行#!/bin/sh NAME="Zara Ali" unset NAME echo $NAME上述示例不会打印任何内容。不能使用 unset 命令取消设置标记为只读的变量。变量类型shell 运行时,主要有三种变量类型局部变量 - 局部变量是存在于 shell 当前实例中的变量。shell 启动的程序无法使用它。它们是在命令提示符下设置的。环境变量 - shell 的任何子进程都可以使用环境变量。有些程序需要环境变量才能正常运行。通常,shell 脚本只定义其运行的程序所需的环境变量。shell 变量 - shell 变量是由 shell 设置的特殊变量,shell 需要它才能正常运行。其中一些变量是环境变量,而另一些则是本地变量。特殊变量在本章中,我们将详细讨论 Unix 中的特殊变量。在前面的一章中,我们了解了在变量名称中使用某些非字母数字字符时如何小心。这是因为这些字符被用在特殊 Unix 变量的名称中。这些变量是为特定功能保留的。例如,$字符代表当前 shell 的进程 ID 号或 PID -$echo $$上面的命令写入当前 shell 的 PID -29949下表显示了您可以在 shell 脚本中使用的一些特殊变量 -Number变量和描述1$0当前脚本的文件名。2**$n**这些变量对应于调用脚本时使用的参数。这里**n**是一个正十进制数,对应于参数的位置(第一个参数是 $1,第二个参数是 $2,依此类推)。3$#提供给脚本的参数数量。4*$\***所有参数都用双引号引起来。如果脚本接收两个参数,$ 相当于 $1 $2。5**$@**所有参数都单独用双引号引起来。如果脚本接收两个参数,$@ 相当于 $1 $2。6$?最后执行的命令的退出状态。7$$当前 shell 的进程号。对于 shell 脚本,这是执行它们的进程 ID。8$!最后一个后台命令的进程号。命令行参数命令行参数 $1、$2、$3、...$9 是位置参数,$0 指向实际的命令、程序、shell 脚本或函数,$1、$2、$3、...$9 作为参数命令。以下脚本使用与命令行相关的各种特殊变量 -#!/bin/sh echo "File Name: $0" echo "First Parameter : $1" echo "Second Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#"这是上述脚本的运行示例 -$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2特殊参数 $* 和 $@有一些特殊参数允许一次访问所有命令行参数。$\***和**$@ 的作用相同,除非它们用双引号""括起来。这两个参数都指定命令行参数。然而,“$*”特殊参数将整个列表作为一个参数,中间有空格,而“$@”特殊参数则将整个列表分为单独的参数。我们可以编写如下所示的 shell 脚本来使用 $* 或 $@ 特殊参数处理未知数量的命令行参数 -#!/bin/sh for TOKEN in $* do echo $TOKEN done这是上述脚本的运行示例 -$./test.sh Zara Ali 10 Years Old Zara Ali 10 Years Old注意- 这里do...done是一种循环,将在后续教程中介绍。退出状态美元?变量表示前一个命令的退出状态。退出状态是每个命令完成后返回的数值。通常,大多数命令如果成功则返回退出状态 0,如果不成功则返回 1。某些命令会出于特定原因返回其他退出状态。例如,某些命令区分不同类型的错误,并根据具体的故障类型返回各种退出值。以下是成功命令的示例 -$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $2.3 基本的输入输出(读取用户输入、输出结果等)在Shell编程中,你可以使用以下方式进行基本的输入和输出操作:读取用户输入:可以使用 read 命令来读取用户的输入,并将输入保存到一个变量中。例如:read -p "请输入你的名字: " name echo "你好,$name!"上述代码将提示用户输入名字,并将输入保存到 name 变量中,然后通过 echo 命令输出一条问候语。输出结果:可以使用 echo 命令来输出文本或变量的值。例如:name="John" echo "你好,$name!"上述代码将输出一条问候语,其中包含了变量 name 的值。示例1、多重输出(number.sh)#!/bin/bash read -p "Enter number one : " n1 read -p "Enter number two : " n2 read -p "Enter number three : " n3 echo "Number1 - $n1" echo "Number2 - $n2" echo "Number3 - $n3"2、 显示域名所有者信息显示互联网域名所有者信息的 shell 脚本 (domain.sh):#!/bin/bash read -t 10 -p "Enter the Internet domain name(sunshijz.cn) : " domain_name whois $domain_name输出结果:Enter the Internet domain name(sunshijz.cn) : sunshijz.cn Domain Name: sunshijz.cn ROID: 20201130s10001s33110320-cn Domain Status: ok Registrant: 孙晓波 Registrant Contact Email:
[email protected]
Sponsoring Registrar: 阿里巴巴云计算(北京)有限公司 Name Server: dns9.hichina.com Name Server: dns10.hichina.com Registration Time: 2020-11-30 16:48:57 Expiration Time: 2023-11-30 16:48:57 DNSSEC: unsigned3、超时输入使用 -t 选项可以使 read 命令超时。如果在 TIMEOUT 秒内没有读取完整的输入行,它将导致读取超时并返回失败。例如,如果在 10 秒内没有输入,程序将被中止(domain2.sh):#!/bin/bash read -t 10 -p "Enter the Internet domain name (sunshijz.cn) : " domain_name whois $domain_name4、隐藏密码-s选项会导致来自终端的输入不显示在屏幕上。这对处理密码(readpass.sh)非常有用:#!/bin/bash read -s -p "Enter Password : " my_password echo echo "Your password - $my_password"处理多个值示例1read -p "Enter directory to delete : " dirname echo "$dirname"输出结果Enter directory to delete : test bing /opt/test test bing /opt/test 用户提供了三个值,而不是一个。现在字符串由三个不同的字段组成。所有三个字都将使用 $IFS 内部字段分隔符分配给 dirname。$IFS 决定了 shell 识别字段的方式。$IFS要显示 $IFS 的默认值,请输入echo "$IFS"您将看到一个空格,其中只有空格、制表符和换行符(默认值)[root@bogon opt]# cat -etv <<<"$IFS" ^I$ $$ - 行尾,即换行符^I$ -制表符和换行符但如何同时使用 $IFS 和 read 命令呢?创建一个名为 nameservers 的变量,并赋予它以下 3 个值(注意所有值之间用空格隔开):[root@bogon opt]# nameservers="ns1.nixcraft.net ns2.nixcraft.net ns3.nixcraft.net"使用echo命令或printf命令显示变量nameservers的值:[root@bogon opt]# echo "$nameservers"or[root@bogon opt]# printf "%s" $nameservers现在,只需使用读取命令拆分 $nameservers [root@bogon opt]# read -r ns1 ns2 ns3 <<< "$nameservers"读取命令从 $nameservers 变量中读取输入值。$IFS 的默认值用于为三个独立变量赋值。使用 $IFS 将输入内容分割成令牌,并分配给三个变量。换句话说,IFS 变量起着标记分隔符或分隔线的作用。第一个标记(ns1.nixcraft.net)保存为第一个变量的值($ns1)第二个标记(ns2.nixcraft.net)保存为第二个变量的值($ns2)。第三个标记(ns3.nixcraft.net)保存为第三个变量的值($ns3)。要显示每个变量的值,请使用 echo 命令或 printf 命令,如下所示:[root@bogon opt]# echo "dns sever1 $ns1" dns sever1 ns1.nixcraft.net [root@bogon opt]# echo "dns sever1 $ns2" dns sever1 ns2.nixcraft.net [root@bogon opt]# echo "dns sever1 $ns3" dns sever1 ns3.nixcraft.netor[root@bogon opt]# printf "DNS Server #1 %s\n #2 %s\n #3 %s\n" $ns1 $ns2 $ns3 DNS Server #1 ns1.nixcraft.net #2 ns2.nixcraft.net #3 ns3.nixcraft.net如何更改 IFS 分隔符值?示例:gitevivek:x:1002:1002::/home/gitevivek:/bin/sh将上面一行内容赋值给一个名为 pwd 的变量:pwd="gitevivek:x:1002:1002::/home/gitevivek:/bin/sh"读取 $pwd,使用 $IFS 生成令牌并将其存储到相应字段:read -r login password uid gid info home shell <<< "$pwd" printf "Your login name is %s, uid %d, gid %d, home dir set to %s with %s as login shell\n" $login $uid $gid $home $shell重定向输出:使用 > 符号可以将命令的输出重定向到文件中,而不是终端。例如:echo "Hello, World!" > output.txt上述代码将输出文本 "Hello, World!" 并将其写入到 output.txt 文件中。读取文件内容:使用 cat 命令可以读取文件的内容,并将其输出到终端。例如:cat file.txt上述代码将读取 file.txt 文件的内容,并将其显示在终端上。2.4 算术运算您可以对 Bash shell 变量执行数学运算。Bash shell 有内置的算术选项。您也可以使用外部命令,如 expr 和 bc 计算器。Bash Shell中的算术扩展通过使用以下格式来放置整数表达式来进行算术扩展和计算:$((expression)) $(( n1+n2 )) $(( n1/n2 )) $(( n1-n2 ))示例:使用 echo 命令将两个数字相加:[root@bogon opt]# echo $(( 10 + 5 )) 15使用 x 和 y 变量将两个数字相加。使用文本编辑器创建名为 add.sh 的 shell 程序:#!/bin/bash x=5 y=10 ans=$(( x + y )) echo "$x + $y = $ans"保存并关闭文件。按以下步骤运行:chmod +x add.sh ./add.sh输出结果5 + 10 = 15示例2:使用 read 命令创建名为 add1.sh 的交互式程序:#!/bin/bash read -p "Enter two numbers : " x y ans=$(( x + y )) echo "$x + $y = $ans"输出结果:Enter two numbers : 20 30 20 + 30 = 50带整数的数学运算符运算符描述示例求值结果+加法echo $(( 20 + 5 ))25-减法echo $(( 20 - 5 ))15/除法echo $(( 20 / 5 ))4*乘法echo $(( 20 * 5 ))100%取模echo $(( 20 % 3 ))2++自增x=5 echo $(( x++ )) echo $(( x++ ))5 6--自减x=5 echo $(( x-- ))4**幂运算x=2 y=3 echo $(( x ** y ))8优先级顺序 运算符按照优先级顺序进行评估。这些级别按照优先级递减的顺序列出(引用自bash手册页面)
2024年01月25日
77 阅读
0 评论
0 点赞
2024-01-25
第一章节 理解Shell基础
## 第一章节 理解Shell基础 1.1 介绍Shell是什么以及为什么使用ShellShell 为你提供了一个连接 Unix 系统的界面。它收集输入,并根据输入执行程序。程序执行完毕后,它会显示该程序的输出结果。shell 是我们运行命令、程序和 shell 脚本的环境。Shell 有不同的类型,就像操作系统有不同的类型一样。每种 shell 都有自己的一套公认的命令和功能。shell 提示符提示符 $ 称为命令提示符,由 shell 发出。当提示符显示时,您可以键入命令。按 Enter 键后,Shell 会读取你的输入。它通过查看输入的第一个单词来确定您要执行的命令。单词是一组不间断的字符。空格和制表符分隔单词。下面是一个日期命令的简单示例,该命令显示当前日期和时间[root@y36-server ~]# date 2023年 09月 19日 星期二 22:08:05 CST 1.2 Shell的种类:Bash、sh、zsh等在 Unix 中,主要有两种 shellBourne shell − If you are using a Bourne-type shell, the $ character is the default prompt.C shell − If you are using a C-type shell, the % character is the default prompt.Bourne Shell 有以下子类别Bourne shell (sh)Korn shell (ksh)Bourne Again shell (bash)POSIX shell (sh)不同的 C 型外壳如下C shell (csh)TENEX/TOPS C shell (tcsh)最初的 Unix shell 是由 Stephen R. Bourne 于 20 世纪 70 年代中期在新泽西州 AT&T 贝尔实验室工作时编写的。伯恩 shell 是 Unix 系统上出现的第一个 shell,因此被称为 "shell"。在大多数 Unix 版本中,Bourne shell 通常安装为 /bin/sh。因此,它是编写可用于不同版本 Unix 的脚本的首选 shell。1.3 执行Shell脚本的方法./ sh bash
2024年01月25日
80 阅读
0 评论
0 点赞
2024-01-24
shell 编程语言
# Shell 编程语言一、 什么是shellUnix shell是一种命令行解释器或shell,为类Unix操作系统提供命令行用户界面。shell既是交互式命令语言,也是脚本语言,操作系统使用shell脚本控制系统的执行。Shell 为你提供了一个连接 Unix 系统的界面。它收集输入,并根据输入执行程序。程序执行完毕后,它会显示该程序的输出结果。shell 是我们运行命令、程序和 shell 脚本的环境。Shell 有不同的类型,就像操作系统有不同的类型一样。每种 shell 都有自己的一套公认的命令和功能。shell 提示符提示符 $ 称为命令提示符,由 shell 发出。当提示符显示时,您可以键入命令。按 Enter 键后,Shell 会读取你的输入。它通过查看输入的第一个单词来确定您要执行的命令。单词是一组不间断的字符。空格和制表符分隔单词。下面是一个日期命令的简单示例,该命令显示当前日期和时间[root@y36-server ~]# date 2023年 09月 19日 星期二 22:08:05 CST1.2 Shell的种类:Bash、sh、zsh等在 Unix 中,主要有两种 shellBourne shell − If you are using a Bourne-type shell, the $ character is the default prompt.C shell − If you are using a C-type shell, the % character is the default prompt.Bourne Shell 有以下子类别Bourne shell (sh)Korn shell (ksh)Bourne Again shell (bash)POSIX shell (sh)不同的 C 型外壳如下C shell (csh)TENEX/TOPS C shell (tcsh)最初的 Unix shell 是由 Stephen R. Bourne 于 20 世纪 70 年代中期在新泽西州 AT&T 贝尔实验室工作时编写的。伯恩 shell 是 Unix 系统上出现的第一个 shell,因此被称为 "shell"。在大多数 Unix 版本中,Bourne shell 通常安装为 /bin/sh。因此,它是编写可用于不同版本 Unix 的脚本的首选 shell。二、编译语言编程语言的分类:低级开发语言机器语言汇编语言高级开发语言Clinux CC#C++Java 语言Python 语言Python 自动化Python webPython 自动化办公Python 人工智能golang云原生的时代Ruby语言R 语言脚本开发语言shellphpjavascript面向对象语言: Java... 解释型语言: shell....shell 脚本编程语言结构#!/bin/bash #解释器表示使用bash解释 shell语句Shell 编程语言一、 什么是shellUnix shell是一种命令行解释器或shell,为类Unix操作系统提供命令行用户界面。shell既是交互式命令语言,也是脚本语言,操作系统使用shell脚本控制系统的执行。Shell 为你提供了一个连接 Unix 系统的界面。它收集输入,并根据输入执行程序。程序执行完毕后,它会显示该程序的输出结果。shell 是我们运行命令、程序和 shell 脚本的环境。Shell 有不同的类型,就像操作系统有不同的类型一样。每种 shell 都有自己的一套公认的命令和功能。shell 提示符提示符 $ 称为命令提示符,由 shell 发出。当提示符显示时,您可以键入命令。按 Enter 键后,Shell 会读取你的输入。它通过查看输入的第一个单词来确定您要执行的命令。单词是一组不间断的字符。空格和制表符分隔单词。下面是一个日期命令的简单示例,该命令显示当前日期和时间[root@y36-server ~]# date 2023年 09月 19日 星期二 22:08:05 CST1.2 Shell的种类:Bash、sh、zsh等在 Unix 中,主要有两种 shellBourne shell − If you are using a Bourne-type shell, the $ character is the default prompt.C shell − If you are using a C-type shell, the % character is the default prompt.Bourne Shell 有以下子类别Bourne shell (sh)Korn shell (ksh)Bourne Again shell (bash)POSIX shell (sh)不同的 C 型外壳如下C shell (csh)TENEX/TOPS C shell (tcsh)最初的 Unix shell 是由 Stephen R. Bourne 于 20 世纪 70 年代中期在新泽西州 AT&T 贝尔实验室工作时编写的。伯恩 shell 是 Unix 系统上出现的第一个 shell,因此被称为 "shell"。在大多数 Unix 版本中,Bourne shell 通常安装为 /bin/sh。因此,它是编写可用于不同版本 Unix 的脚本的首选 shell。二、编译语言编程语言的分类:低级开发语言机器语言汇编语言高级开发语言Clinux CC#C++Java 语言Python 语言Python 自动化Python webPython 自动化办公Python 人工智能golang云原生的时代Ruby语言R 语言脚本开发语言shellphpjavascript面向对象语言: Java... 解释型语言: shell....shell 脚本编程语言结构#!/bin/bash #解释器表示使用bash解释 shell语句sh 解释器[root@lvs02-mysql-server ~]# cat example #!/bin/sh #解释器表示使用sh解释 echo "you b c"使用env指定解释#!/bin/env bash echo "you b c"[root@lvs02-mysql-server ~]# cat example #!/bin/sh #解释器表示使用sh解释 echo "you b c"使用env指定解释#!/bin/env bash echo "you b c"
2024年01月24日
40 阅读
0 评论
0 点赞
1
2
3