# 权限

# xx.sh没有权限

chmod u+x *.sh

# 授权

su 用户名: 切换用户

chown -R 用户 目录;  #变更所有者(授权); 

# 网络

# 查看端口占用情况

netstat -anp | grep 端口

# 端口转发

iptables -t nat -I PREROUTING -i ens36 -d 0.0.0.0 -p tcp --dport 443 -j DNAT --to-destination localhost:80

# 查看路由表

iptables -t nat -nL --line

# 删除路由表规则

iptables -t nat  -D PREROUTING  1 #数字代表行号

# 添加路由规则

route add -net 10.1.189.0 netmask 255.255.255.0 gw 10.160.12.254 dev eth1
  • 10.1.189.0表示目标网络
  • 255.255.255.0表示掩码
  • 10.160.12.254表示网关
  • eth1表示网口

# 磁盘

# 查看磁盘空间

df -h

# 查看innode空间

df -i
  • 在Linux中,每个文件不管大小,都会对应一个innode,它是专门用来保存文件属性、权限和指针(指向block)的;
  • block用于存放文件的实际数据;
  • innodeblock,任意一个满了,都会导致磁盘空间不足的错误

# 调整磁盘大小

  • 将/home的磁盘划归到/root目录去,以/home有380G为例
df -h
umount /home
lvremove /dev/mapper/centos-home
lvextend -L +200G /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root
lvcreate -L 179G -n /dev/mapper /centos-root
mkfs.xfs /dev/mapper/centos-home
mount /dev/mapper/centos-home
df -h

# 性能

# 内存管理:

free -m  #查看内存情况,可选M,G
top  #内存使用情况

# 进程信息

ps -aux | grep java
cd /proc/<PID>
ll exe    #即可查看进程的应用程序所在地址

# 查看进程资源

#查看进程资源
ps -ef|grep java
netstat -ntlp

# 工具

# 查找

find / -name nginx

# vim编辑器

yyVG  #全选

# 返回之前的目录

cd -

# 安装包软件

# RPM

  • RedHat package manage的简写,
  • linux的一种软件包,软件包以.rpm结尾,安装语法: rpm -ivh xxx.rpm, 卸载语法: rpm -e xxx
  • rpm安装的缺点是 文件的关联性太大,有时候装一个软件要安装其他很多的软件包,很麻烦;
  • 本质上是一种包

# RPM的机制原理

  • RPM 包管理器使用一个数据库来记录系统中安装的所有软件包的信息。这个数据库通常位于 /var/lib/rpm 目录下。数据库记录了每个软件包的安装路径、文件列表、依赖关系等信息,方便用户查询和管理软件包。
  • RPM 包中包含一组脚本,这些脚本在安装、卸载和升级过程中执行。常见的脚本包括:
    • %pre: 在安装前执行的脚本。
    • %post: 在安装后执行的脚本。
    • %preun: 在卸载前执行的脚本。
    • %postun: 在卸载后执行的脚本。
    • %triggerin: 在其他包安装时触发的脚本。
    • %triggerun: 在其他包卸载时触发的脚本。
    • %triggerpostun: 在其他包卸载后触发的脚本

# RPM 包的安装过程

  • 下载和验证 RPM 包 用户从可信的源下载 RPM 包。使用 rpm -K 命令验证 RPM 包的完整性和签名。
  • 解析元数据 RPM 包管理器解析 RPM 包中的元数据信息,提取软件包的名称、版本、依赖关系等信息。
  • 检查依赖关系 RPM 包管理器检查系统中是否已经安装了所有必需的依赖项。如果依赖项缺失,RPM 包管理器会提示用户解决依赖关系。
  • 执行预安装脚本 如果 RPM 包中包含 %pre 脚本,RPM 包管理器会在安装前执行这些脚本。
  • 解压和安装文件 RPM 包管理器解压 RPM 包中的文件,并将它们安装到指定的路径。
  • 执行安装后脚本 如果 RPM 包中包含 %post 脚本,RPM 包管理器会在安装后执行这些脚本。
  • 更新数据库 RPM 包管理器将新安装的软件包信息记录到数据库中,以便后续查询和管理

# RPM包的卸载过程

  • 解析元数据 RPM 包管理器解析 RPM 包中的元数据信息,提取软件包的名称、版本、文件列表等信息。22
  • 执行预卸载脚本 如果 RPM 包中包含 %preun 脚本,RPM 包管理器会在卸载前执行这些脚本。2
  • 删除文件 RPM 包管理器删除软件包安装的文件和目录。22
  • 执行卸载后脚本 如果 RPM 包中包含 %postun 脚本,RPM 包管理器会在卸载后执行这些脚本。2
  • 更新数据库 RPM 包管理器从数据库中移除已卸载的软件包信息

# RPM安装的本质

  • RPM 包中包含的是已经编译好的二进制文件,而不是源代码,安装过程快捷更多。
  • 脚本的作用,是为了解决依赖关系,或者 移动编译好的二进制文件到指定位置
  • 本质上是预编译安装

# 源代码安装过程(编译)

  • 区别于上方的预编译安装过程,源代码安装过程是编译安装
  • 下载源代码包:用户从软件的官方网站或可信的源下载源代码包(通常是 .tar.gz 或 .tar.bz2 文件)。
  • 解压源代码包:使用 tar 命令解压源代码包。
  • 配置编译环境:进入解压后的目录,运行 ./configure 命令。./configure 脚本会检查系统的编译环境,并生成 Makefile 文件
  • 编译源代码:运行 make 命令进行编译。编译过程会生成可执行文件和库文件。
  • 安装编译结果:运行 make install 命令将编译生成的文件安装到指定的路径。
  • 卸载软件:如果需要卸载软件,可以运行 make uninstall 命令(前提是软件的 Makefile 文件中定义了 uninstall 目标)。
  • make install 的主要作用是将编译生成的可执行文件、库文件、配置文件和文档等安装到系统中指定的位置, 本质上是调用 Makefile 文件中的 install 目标

# YUM

  • Yellow dog Updater Modified的简写, Yellow Dog 这个名字来源于开发者Michael Lee Yohe 的宠物狗,这只狗是一只黄色的拉布拉多犬。
  • 是 CentOS 和 Fedora 中广泛使用的软件包管理工具,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
  • 安装语法: yum install xxx, 卸载语法: yum remove xxx
  • 本质上是一个安装包的软件

# YUM关键特性

  • yum 不会保留已下载的 RPM 包文件,但是默认会在 /var/cache/yum/x86_64/7/<repository_name>/packages 目录下缓存已安装的 RPM 包;如果缓存被清理过,就无法找到了。没清理过缓存的情况下可以在此寻找rpm包
  • 使用downloadonly 插件,可以用来下载但不安装 RPM 包,这样可以将 RPM 包保留在指定的目录中。yum install yum-plugin-downloadonly,yum install --downloadonly --downloaddir=/path/to/download/directory package_name

# YUM与RPM的对比

  • rpm 只能安装已经下载到本地机器上的rpm 包
  • yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题

# YUM源

  • YUM 源是指包含软件包及其元数据的远程或本地存储位置。这些源可以是 HTTP、FTP 服务器,也可以是本地文件系统上的目录
  • 每个源都有一个配置文件。 通常位于 /etc/yum.repos.d/ 目录下,文件名以 .repo 结尾
  • 当 yum 执行命令(如 install、update、remove)时,它会根据配置文件中的信息从指定的仓库中查找和下载软件包。

# 常见的YUM源及管理

  • 官方源:由操作系统发行商提供的默认仓库,如 CentOS 的 Base 和 Extras 仓库。
  • 第三方源:由第三方提供的仓库,如 EPEL(Extra Packages for Enterprise Linux)、RPM Fusion等。
  • 本地源:可以在本地文件系统上创建仓库,用于内部软件包的分发和管理。
  • 列出所有仓库: yum repolist
  • 刷新仓库缓存:yum clean allyum makecache
  • 禁用仓库: 编辑相应的.repo 文件,将 enabled 设置为 0

# YUM绕过gpk检查

yum install --nogpgcheck xxx 

# 本地yum源搭建过程

  1. 创建本地目录
mkdir -p /var/local/repo
# 从光盘,cpu驱动盘等地复制rpm包到本地目录
cp /path/to/your/rpms/*.rpm /var/local/repo/
  1. 创建仓库源数据
yum install createrepo
createrepo /var/local/repo
  1. 配置yum源
# 追加内容
vim /etc/yum.repos.d/local.repo
>>> [local]
name=Local Repository
baseurl=file:///var/local/repo
enabled=1
gpgcheck=0
  1. 刷新YUM缓存
yum clean all
yum makecache
  1. 测试源是否可用
yum repolist
yum install xxxpackage_name

# systemctl执行过程及问题排查

# 执行机制

  • /usr/lib/systemd/system/jenkins.service服务单元配置文件中,定义了某个服务的启动用户启动命令。最终通过exec启动进程。 具体内容可看 /usr/bin/jenkins启动脚本
  • 本质上,就是通过特定用户去执行特定命令,包括命令参数。
  • 与直接启动shell脚本的区别,就是 启动用户,与启动命令的环境参数不同。

# 服务单元配置文件的组成

  • [Unit]:描述服务的基本信息,如描述,依赖等。
  • [Service]:定义了如何控制这个服务,比如启动命令 (ExecStart)、停止命令 (ExecStop)、重启行为 (Restart) 等
  • [Install]:定义了当使用 systemctl enable 命令启用服务时,应该创建哪些符号链接。这决定了服务何时会被启动,例如开机启动。

# 问题排查思路

  • 分为两个维度的错误: 1. 进程启动之前即报错,比如权限问题无法执行(此时无法看到具体的错误原因); 2.程序启动过程中的错误,一般可以通过日志进行处理;
  • 启动之前的错误,排查方式不唯一
    • systemctl status jenkins查看
    • 通过journalctl -xe 查看,
    • 通过journalctl -u jenkins 查看。

# 木马进程排查方法(pid=18789为例)

  • 查看进程的环境变量: cat /proc/18789/environ
  • 查看进程的启动命令: cat /proc/18789/cmdline
  • 查看网络链接: netstat -tulnp | grep 18789
  • 查看打开的文件描述符: ls -l /proc/18789/fd
  • 查看系统日志:dmesg | grep 18789 或 journalctl -u <service_name> | grep 18789