
后台运行操作符 shell脚本中使用的格式如下command 工作机制是:将耗时长的命令放入后台运行;shell立即返回,不用等待命令执行完成;命令在新 的子shell中运行。常规用法如下1. 启动守护进程 nginx 2. 运行耗时任务不阻塞 ./build.sh 3. 后台服务监控 tail -f /var/log/app.log 4. 并行处理文件 for file in *.txt; do process_file "$file" done wait # 等待所有后台进程完成 5. 长时间运行的备份任务 tar -czf backup.tar.gz /data 软件包下载yumdownloader本次介绍的是红帽系列的操作系统下载软件包用于离线暗转的方法,Debian系列的方式请自行搜索,这里不做介绍。软件包的下载使用yum或dnf的downloadonly插件。这个插件是大多数现代 Linux 发行版(如 CentOS 7+, Fedora, RHEL 7+)默认包含的,所以你一般不需要额外安装。这个插件也是目前最直接、最推荐的方式。使用的时候需要添加--downloadonly 和 --downloaddir 这两个选项。选项说明--downloadonly: 核心选项,告诉 yum 或 dnf 只下载软件包,不要进行安装或其他操作。--downloaddir=目录路径: 指定一个目录来存放下载好的 RPM 包。如果省略此选项,RPM 包会默认下载到 /var/cache/yum/ 目录下,推荐你指定一个有写权限的目录,比如你自己的家目录下的一个文件夹,这样方便查找。-y (可选): 表示 "yes",在需要确认时自动回答“是”,避免交互式提示。在下载-only 模式下通常不需要,但加上也无妨。另外还有一个命令也是推荐使用的,yumdownloader命令,下面分别介绍这几个命令的用法。假设我们要下载一个名为 httpd 的软件包,并存放到我们创建的 my_downloads 文件夹中。# 在你的家目录下创建一个文件夹 mkdir -p ~/my_downloads #使用 dnf (适用于 Fedora, CentOS 8+, RHEL 8+ 等): # dnf 下载 httpd 包到 ~/my_downloads 目录 dnf install httpd --downloadonly --downloaddir=~/my_downloads # 如果你的系统较老,使用 yum (适用于 CentOS 7, RHEL 7 等): # yum 下载 httpd 包到 ~/my_downloads 目录 yum install httpd --downloadonly --downloaddir=~/my_downloads如果想要下载已经安装的软件包的更新的离线安装包和依赖,可以使用如下命令:# 下载系统中 httpd 包的更新 dnf update httpd --downloadonly --downloaddir=~/my_downloads # 或者 yum update httpd --downloadonly --downloaddir=~/my_downloads命令的对应关系总结如下:目的命令 (使用dnf)命令 (使用yum)下载单个软件包sudo dnf install 包名 --downloadonly --downloaddir=目录sudo yum install 包名 --downloadonly --downloaddir=目录下载软件包及其依赖sudo dnf groupinstall "环境组名" --downloadonly --downloaddir=目录sudo yum groupinstall "环境组名" --downloadonly --downloaddir=目录下载软件包的更新sudo dnf update 包名 --downloadonly --downloaddir=目录sudo yum update 包名 --downloadonly --downloaddir=目录下载所有可用更新sudo dnf update --downloadonly --downloaddir=目录sudo yum update --downloadonly --downloaddir=目录接下来介绍一下yumdownloader命令的用法。首先要明确一个核心概念:yumdownloader 不是一个 yum 的子命令,它是一个独立的命令行工具。它专门被设计用来解决“下载软件包及其依赖项”这一个核心问题,并且非常高效。1. yumdownloader 的核心作用与优势yumdownloader 的主要目标是:从软件仓库(repository)中精确地下载一个或多个 RPM 软件包,并自动解决其所有依赖关系,将依赖包一并下载下来。相比于 yum install --downloadonly 方式,yumdownloader 有几个显著的优势:轻量级:它本身没有 yum 那么多的配置管理和解析逻辑,启动更快,专注于下载任务。灵活性:提供了丰富的命令行选项,允许更精细地控制下载行为,例如不下载依赖、下载源码包等。明确的结果:yumdownloader 只下载,不缓存。如果你指定了目录,所有 .rpm 文件都会明明白白地放在那里,不像 yum 会放到系统深层的缓存目录中。接下来介绍一下yumdownloader的常用选项的详解# 创建一个下载目录 mkdir -p ~/downloaded_rpms # 下载 httpd 包及其依赖到 ~/downloaded_rpms 目录 yumdownloader --destdir=~/downloaded_rpms httpd--destdir=目录路径: 指定 RPM 包的下载目录。这是最重要的选项,强烈推荐始终使用它,否则包会下载到当前目录。注意--resolve是默认的,也可以显式的写在命令中,增加可读性。# 显式的写上选项--resolve,下载服务以及依赖包 yumdownloader --destdir=~/downloaded_rpms --resolve httpd如果你明确知道只需要一个特定的包,不需要它的任何依赖(例如,你已经有了依赖包,或者只是为了分析包内容),可以使用 --resolve 的反向选项 --noresolve。如果你的系统是 64 位的,但需要某个软件的 32 位版本,可以通过 --arch 选项指定。# 下载 32 位的 libwebkitgtk 包及其依赖 yumdownloader --destdir=~/downloaded_rpms --arch=i686 --resolve libwebkitgtk如果你想为系统上已经安装的某个软件包重新下载其原始的 .rpm 安装文件。yumdownloader 提供了一个非常方便的 --url 选项来实现这个功能。# 假设系统中已安装了 docker-ce # 查看其安装后的包名,通常是 docker-ce 和 docker-ce-cli 等 # 这里以确保下载的是备份了 .repo 文件中的源的路径准确的包 yumdownloader --destdir=~/downloaded_rpms --resolve --url docker-ce--url: 这个选项告诉 yumdownloader 不仅要下载包,还要去找到原始仓库服务器上该包的 URL。这对于后续的离线安装或问题排查非常有帮助。不加 --url 时,它可能会从缓存下载,路径可能不指向官方源。================================ The END ================================特殊权限SUID、SGID、SBIT设置Set UID:当字母s出现在文件拥有这的x权限位上的时候,例如/usr/bin/passwd这个文件的权限是[-rwsr-xr-x],此时就被称为Set UID,简称为SUID的特殊权限。SUID的权限有以下这样的功能和限制。SUID权限仅对二进制程序(binary program)文件有效;执行者对于该程序具有x的可执行权限;本权限仅在执行该程序的过程中有效(run-time);执行者将具有该程序拥有者(owner)的权限。需要注意的是,SUID是不能用在shell script上面的,也不能用在目录上面,都是无效的。Set GID:当s标志位在文件群组的x位上的时候,被称为Set GID,简称为SGID的特殊权限。与SUID不同的是,SGID既可以对二进制程序设置,也可以对目录进行设置特殊权限。对文件来说,SGID有以下这些功能:SGID对二进制程序有用;程序执行者对程序来说具备x权限;执行者在执行的过程中将会获得该程序的群组支持。当目录设置了SGID权限的时候,具有以下功能:用户若对于此目录具有r和x权限,用户能够进入此目录;用户在此目录下的有效群组将会变成该目录的群组;若用户在此目录下具有w权限,则使用者也可以在此目录新建文件,而且新文件的群组与此目录的群组相同。Sticky Bit:目前只针对目录有效,对于文件已经没有效果了。SBIT对目录的作用是下面这些当用户对此目录具有w和x权限时,使用者同样具有;当用户在此目录创建文件时,只有自己和root有权限删除该文件。如何配置文件使具有SUID和SGID权限呢,数字权限修改方法的三位数字之前添加上对应的数字就好了。4为SUID2为SGID1为SBIT# 例如讲一个原本755权限的文件添加SUID权限,执行如下命令 chmod 4755 /test.sh # 添加SGID权限的命令如下 chmod 2755 /test.sh chmod 2755 /test # 给一个目录添加一个SBIT权限 chmod 1755 /test================================ The END ================================shell中的数组Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:array_name=(value1 value2 ... valuen) # 例如 array_name=(a B "C" 10 'haha')我们也可以使用数字下标来定义数组:array_name[0]="hello" array_name[1]='apple' array_name[2]=20读取数组的一般格式如下:${array_name[index]} # 示例如下