Linux命令2

Linux命令2

named-checkconf

named-checkconf 用于检查 named 配置文件(通常是 /etc/named.conf)的语法和一致性。它可以帮助你找到并修复配置文件中的问题,从而防止 named 服务启动失败。

例如,你可以使用以下命令来检查默认的 named 配置文件:

named-checkconf /etc/named.conf

# 如果配置文件没有问题,该命令将不输出任何内容并返回到命令行提示符。如果有任何问题,它将打印出错误消息并返回一个非零退出码。

named-checkzone

named-checkzone 用于检查 BIND 区域文件的语法和一致性。它读取区域文件并尝试解析所有的记录,从而确保文件的格式正确。

named-checkzone example.com /var/named/example.com.zone

# 样,如果区域文件没有问题,该命令将打印出一些基本的统计信息并返回到命令行提示符。如果有任何问题,它将打印出错误消息并返回一个非零退出码。

nc

在Linux中,nc是一种非常有用的网络工具,它是netcat的缩写,是一款可以读取、写入数据的网络工具。它可以通过TCP或UDP协议在网络上建立连接,从而实现网络通信的功能。

nc命令的语法如下:

nc [options] host port

其中,host表示要连接的主机名或IP地址,port表示要连接的端口号。options是可选的一些参数,可以用来配置nc的行为。

下面是nc命令的一些常见用法:

  1. 建立TCP连接
nc host port

使用该命令可以与指定的主机和端口建立TCP连接。连接成功后,可以在终端输入数据并发送到远程主机,也可以从远程主机读取数据并在终端上显示。

  1. 建立UDP连接
nc -u host port

使用该命令可以与指定的主机和端口建立UDP连接。与TCP连接不同,UDP连接是无状态的,发送方发送数据包后就不再关心它是否到达接收方。因此,使用nc建立UDP连接时,需要自己控制数据包的顺序和重传机制。

  1. 监听端口
nc -l port

使用该命令可以在本地主机上监听指定的端口,等待其他主机建立连接。当有连接请求时,nc会自动将连接接受并显示连接信息。

  1. 文件传输
nc -l port < file

使用该命令可以将本地文件传输到远程主机。该命令在监听端口的同时,从标准输入中读取文件内容,并将其发送到连接的远程主机。如果需要从远程主机接收文件,则可以使用相反的命令:

nc host port > file
  1. 扫描端口
nc -z host start_port-end_port

使用该命令可以扫描指定主机上的一段端口,查看哪些端口是开放的。该命令会依次尝试连接指定主机上的每个端口,如果端口开放,则会显示连接成功的信息。

nmcli

nmcli 是 NetworkManager 的命令行客户端。NetworkManager 是 Linux 系统中用于管理网络的守护进程。nmcli 提供了一种命令行方式来控制 NetworkManager,允许你查看网络状态、连接和断开网络、修改网络配置等,所有这些操作都无需图形界面。

# 选项(OPTIONS)
-a, --ask: 如果在命令中缺少所需参数,该选项会让 nmcli 提示用户输入它们。
-c, --colors auto|yes|no: 决定是否在输出中使用颜色。auto 会在输出到终端时使用颜色,而在其他情况下不使用。
-e, --escape yes|no: 是否转义输出中的列分隔符。
-f, --fields <field,...>|all|common: 指定输出中要显示的字段。这可以用来自定义输出的列。
-g, --get-values <field,...>|all|common: 这是为了简化输出的一个快捷方式,用于以表格式输出指定的字段,相当于同时使用 -m tabular -t -f 选项。
-h, --help: 显示帮助信息。
-m, --mode tabular|multiline: 设置输出模式。tabular 为表格形式,multiline 为多行形式。
-o, --overview: 简略模式,提供一个总览。
-p, --pretty: 使输出更加美观,通常与 multiline 模式结合使用。
-s, --show-secrets: 允许显示密码或其他敏感信息。
-t, --terse: 使输出简洁,仅显示必要信息。
-v, --version: 显示 nmcli 的版本信息。
-w, --wait <seconds>: 设置在等待操作完成时的超时时间。

# 对象(OBJECT)
g[eneral]: 显示和操作 NetworkManager 的一般状态。
n[etworking]: 控制整体的网络设置。
r[adio]: 控制 NetworkManager 的无线开关,如 Wi-Fi、Bluetooth。
c[onnection]: 管理 NetworkManager 的网络连接。
d[evice]: 显示和管理由 NetworkManager 管理的设备。
a[gent]: 与 NetworkManager 的秘密代理或 polkit 代理交互。
m[onitor]: 监控 NetworkManager 的更改。
#中括号里面的内容可以写,也可不写

# 用法
nmcli [OPTIONS] OBJECT { COMMAND | help }
# nmcli connection 主要关注与 NetworkManager 中的网络连接相关的操作。以下是 nmcli connection 的子命令及其描述:

# show: 列出所有的网络连接或显示特定连接的详细信息。
    不带参数:nmcli connection show 列出所有连接。
    带参数:nmcli connection show <CONNECTION_NAME> 显示特定连接的详细信息。
# up: 激活指定的网络连接。
    用法:nmcli connection up <CONNECTION_NAME>
# down: 停用(或断开)指定的网络连接。
    用法:nmcli connection down <CONNECTION_NAME>
# add: 添加新的网络连接。
    例如,要添加新的 Ethernet 连接:nmcli connection add type ethernet con-name            <CONNECTION_NAME> ifname <INTERFACE_NAME>
# edit: 以交互模式编辑现有的网络连接。
    用法:nmcli connection edit <CONNECTION_NAME>
# delete: 删除指定的网络连接。
    用法:nmcli connection delete <CONNECTION_NAME>
# modify: 修改现有的网络连接的属性。
    例如,要更改连接的 IPv4 地址:nmcli connection modify <CONNECTION_NAME> ipv4.addresses <NEW_IP_ADDRESS>
# clone: 克隆现有的网络连接,并为新连接指定新的名称。
    用法:nmcli connection clone <EXISTING_CONNECTION_NAME> <NEW_CONNECTION_NAME>
# reload: 重新加载 NetworkManager 的连接配置,但不应用它们。
    用法:nmcli connection reload
# load: 从指定的文件加载连接。
    用法:nmcli connection load <FILE_PATH>
# import: 从其他类型的配置文件(例如 VPN)导入连接。
    用法:nmcli connection import type <TYPE> file <FILE_PATH>
# export: 将特定的连接导出为外部的配置文件。
    用法:nmcli connection export <CONNECTION_NAME>
# monitor: 实时监视网络连接的更改。
    用法:nmcli connection monitor [<CONNECTION_NAME>]
# 案例
# 1.要查看所有网络设备的状态:
nmcli device status

# 2.查看一个特定的连接的详细信息:
nmcli -p connection show CONNECTION_NAME

# 3.查看网络:
nmcli -p -m multiline connection show
===============================================================================
                      NetworkManager connection profiles
===============================================================================
NAME:                                   eth0
UUID:                                   5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
TYPE:                                   ethernet
DEVICE:                                 eth0
-------------------------------------------------------------------------------
NAME:                                   eth1
UUID:                                   bd3d361f-bd4d-3778-ad0b-2a5a957bfcc4
TYPE:                                   ethernet
DEVICE:                                 eth1
-------------------------------------------------------------------------------

# 4.列出所有网络连接:
nmcli connection show

# 5.启动/停止特定网络连接:
# 启动连接:
nmcli connection up CONNECTION_NAME

#关闭连接:
nmcli connection down CONNECTION_NAME

# 6.添加新的网络连接:
# 例如,要添加一个新的 Wi-Fi 连接,可以使用:
# 其中 SSID 是 Wi-Fi 的名称,PASSWORD 是 Wi-Fi 的密码。
nmcli device wifi connect SSID password PASSWORD

# 7.删除网络连接:
# 例如,要修改一个连接的 IPv4 地址,你可以使用:
nmcli connection modify CONNECTION_NAME ipv4.addresses NEW_IP_ADDRESS

# 8.列出可用的 Wi-Fi 网络:
nmcli device wifi list

# 9.断开设备的所有网络连接:
nmcli device disconnect DEVICE_NAME
# 其中 DEVICE_NAME 是设备的名称,例如 wlan0。

# 10. 查看特定设备的详细信息:
nmcli device show DEVICE_NAME

nmcli connection show

在较新版本的 nmcli 中,nmcli con status 已经被弃用。取而代之的是 nmcli con show。不过,由于某些版本的 nmcli 可能仍然支持 nmcli con status

# 在较新版本的 nmcli 中,nmcli con show 命令用于查看连接的详细信息。
# 不带参数:列出所有的网络连接和它们的状态。
nmcli con show

# 带连接名称或UUID:查看特定连接的详细信息。
nmcli con show <CONNECTION_NAME_OR_UUID>

# 查看激活的连接:这个用法类似于旧的 nmcli con status 命令。
nmcli con show --active

nmcli connection up

nmcli con up 是一个用于激活 NetworkManager 连接的命令。通过使用它,你可以启动预先配置的网络连接,无论是有线、无线还是 VPN 连接。以下是该命令的详细用法:

# 激活指定的连接
# 使用连接的名称或 UUID 来激活它。
nmcli con up <CONNECTION_NAME_OR_UUID>

# 选项
# 指定设备:
# 如果有多个设备(例如,两个 Wi-Fi 适配器)并且你想在特定设备上激活连接,可以使用 ifname 选项。
nmcli con up <CONNECTION_NAME_OR_UUID> ifname <INTERFACE_NAME>

# 1.设置 IP 地址:
# 当激活连接时,你可以临时指定 IP 地址。
nmcli con up <CONNECTION_NAME> ip4 <IPV4_ADDRESS/MASK> gw4 <GATEWAY_ADDRESS>
eg:
nmcli con up MyConnection ip4 192.168.1.100/24 gw4 192.168.1.1

# 2.设置 DNS 服务器:
# 激活连接时,也可以临时指定 DNS 服务器。
nmcli con up <CONNECTION_NAME> ipv4.dns "<DNS1,DNS2>"

# 3.带有超时的激活:
# 使用 --wait 可以设置尝试激活连接的超时时间(以秒为单位)。如果在指定的时间内无法激活连接,则操作将失败。
nmcli con up <CONNECTION_NAME> --wait <SECONDS>

# 4.强制激活:
# 如果出于某种原因你想强制激活连接,即使当前条件并不完全满足,你可以使用 --force 选项。请谨慎使用,因为这可能会导致不稳定的连接。
nmcli con up <CONNECTION_NAME> --force
# 案例
# 1.激活特定的 Wi-Fi 连接:
# 如果你有一个名为 "Home_Wifi" 的 Wi-Fi 连接配置,并想激活它,你可以执行:
nmcli con up Home_Wifi

# 2.在特定的设备上激活连接:
# 设你有两个有线网络适配器:eth0 和 eth1。你想在 eth1 上激活名为 "Office_Net" 的连接:
nmcli con up Office_Net ifname eth1

# 3.激活 VPN 连接:
# 如果你有一个 VPN 连接配置,名为 "MyVPN",并想激活它,只需:
nmcli con up MyVPN

# 4.使用自定义 IP 激活连接:
# 假设你有一个名为 "Static_Net" 的连接,你想临时使用一个不同的 IP 地址和网关来激活它:
nmcli con up Static_Net ip4 10.0.2.15/24 gw4 10.0.2.1

# 5.激活连接并设置 DNS:
# 如果你希望在激活连接时指定 DNS 服务器,可以执行:
nmcli con up MyConnection ipv4.dns "8.8.8.8,8.8.4.4"

# 6.激活连接,但有超时限制:
# 有时,在尝试激活某个可能不稳定或远程的连接时,你可能不希望它无休止地尝试。你可以设置一个超时:
nmcli con up Remote_Net --wait 10
# 在上述示例中,如果 "Remote_Net" 连接在 10 秒内未激活,命令将返回失败。

nmcli connection down

nmcli con down 命令用于停止或去激活 NetworkManager 的网络连接。当你想要断开一个当前活跃的连接时,这个命令非常有用。下面是关于 nmcli con down 的详细讲解和用法:

# 使用
nmcli con down <CONNECTION_NAME_OR_UUID>

# 指定设备:
# 如果你有多个设备(例如,两个 Wi-Fi 适配器)并且想在特定的设备上去激活连接,可以使用 ifname 选项。
nmcli con down <CONNECTION_NAME_OR_UUID> ifname <INTERFACE_NAME>

# 带有超时的去激活:
# 使用 --wait 可以设置尝试去激活连接的超时时间(以秒为单位)。如果在指定的时间内无法去激活连接,则操作将失败。
nmcli con down <CONNECTION_NAME> --wait <SECONDS>
# 案例
# 1.断开特定的 Wi-Fi 连接:
nmcli con down Home_Wifi

# 2.在特定的设备上断开连接:
nmcli con down Office_Net ifname eth1

# 3.断开 VPN 连接:
nmcli con down MyVPN

# 4.断开连接,但有超时限制:
nmcli con down Remote_Net --wait 10

nmcli connection add

nmcli connection add 是一个非常强大的命令,用于通过 NetworkManager 创建新的网络连接配置。它支持多种连接类型,如 Ethernet、Wi-Fi、VPN、桥接、VLAN 等。

# 基础结构
nmcli con add type <TYPE> [options]

# 其中 <TYPE> 是连接类型,如 ethernet、wifi、bridge、vlan 等。

#常见参数
con-name <NAME>:指定新连接的名称。
ifname <INTERFACE>:指定网络接口的名称。例如,对于以太网,它可能是 eth0、ens33 等。
ip4 <IP_ADDRESS> 和 gw4 <GATEWAY>:指定 IPv4 地址和网关。
autoconnect yes|no:指定是否在启动或接口可用时自动激活此连接。
# 案例
# 1.添加一个以太网连接:
# 如果你想为一个接口(如 eth0)添加一个新的以太网连接并设置其静态 IP 地址,可以使用:
nmcli con add type ethernet con-name MyConnection ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1

# 2.添加 Wi-Fi 连接:
# 要添加一个 Wi-Fi 连接并设置 SSID 和密码,可以执行:
nmcli con add type wifi con-name MyWifiConnection ifname wlan0 ssid MySSID
nmcli con modify MyWifiConnection wifi-sec.key-mgmt wpa-psk
nmcli con modify MyWifiConnection wifi-sec.psk 'MyPassword'

# 3.添加桥接连接:
# 如果你想创建一个桥接并将 eth0 和 eth1 添加为其成员,可以执行:
nmcli con add type bridge con-name MyBridge ifname br0
nmcli con add type bridge-slave autoconnect yes con-name MyBridge-eth0 ifname eth0 master br0
nmcli con add type bridge-slave autoconnect yes con-name MyBridge-eth1 ifname eth1 master br0

# 使用 nmcli connection add 添加连接后,你可能需要使用 nmcli connection up 来激活该连接。

nmcli connection edit

nmcli connection edit 命令允许你交互式地编辑一个现有的网络连接配置。使用这个命令,你会进入一个命令行界面,其中你可以修改、添加或删除连接的各种属性。

# 使用方法
# 基本命令格式如下:
nmcli connection edit <CONNECTION_NAME_OR_UUID>

# 其中 <CONNECTION_NAME_OR_UUID> 是你想要编辑的连接的名称或UUID。

# 编辑会话
一旦你进入编辑会话,你会看到一个提示符,如 [nmcli]。在此提示符下,你可以使用以下命令:
print: 显示连接的所有属性。例如,print ipv4 仅显示IPv4相关的属性。
set: 设置属性的值。例如,set ipv4.addresses 192.168.1.10/24 设置IPv4地址。
remove 或 rm: 删除属性的值。例如,remove ipv4.dns 删除已设置的DNS服务器。
verify: 检查当前的配置是否有效。
save: 保存当前的配置并退出编辑会话。
quit: 退出编辑会话而不保存更改。
help 或 ?: 显示可用命令的帮助。
# 示例
# 假设你有一个名为 “HomeWiFi” 的无线连接,你想要更改其静态IP和DNS设置。你可以这样做:
nmcli connection edit HomeWiFi
在编辑会话中:
[nmcli] set ipv4.method manual
[nmcli] set ipv4.addresses 192.168.1.100/24
[nmcli] set ipv4.gateway 192.168.1.1
[nmcli] set ipv4.dns 8.8.8.8,8.8.4.4
[nmcli] save
[nmcli] quit
# 这将为 “HomeWiFi” 连接设置一个静态IP地址,网关和DNS服务器,并保存这些更改。

nmcli connection delete

nmcli connection delete 命令允许你删除一个或多个 NetworkManager 管理的网络连接配置。请注意,此操作只会删除配置,而不会对物理接口或设备产生影响。

# 使用方法
基本命令格式如下:
nmcli connection delete <CONNECTION_NAME_OR_UUID> [<CONNECTION_NAME_OR_UUID>...]

# 其中 <CONNECTION_NAME_OR_UUID> 是你想要删除的连接的名称或UUID。你可以同时指定多个连接名称或UUID以批量删除它们。
# 1.删除一个指定的连接:
# 如果你知道要删除的连接的名称,例如名为 “HomeWiFi”的连接,你可以执行以下命令:
nmcli connection delete HomeWiFi

# 2.删除多个连接:
# 如果你想一次性删除名为 “HomeWiFi” 和 “OfficeEthernet”的连接,你可以这样做:
nmcli connection delete HomeWiFi OfficeEthernet

# 3. 使用 UUID 删除连接:
# 每个连接都有一个唯一的 UUID。有时,使用 UUID 而不是连接名称更为准确,尤其是当存在多个连接具有相同名称时。
nmcli connection delete 27c487f9-c6d6-3955-9db8-ae1b2f2872c3

nmcli connection modify

nmcli connection modify 命令允许你非交互式地修改一个现有的网络连接的属性。与 nmcli connection edit 命令不同,此命令是非交互式的,你可以直接在一行命令中指定要修改的属性和它们的新值。

# 使用方法
# 基本命令格式如下:
nmcli connection modify <CONNECTION_NAME_OR_UUID> <SETTING>.<PROPERTY> <VALUE> [<SETTING>.<PROPERTY> <VALUE>...]

# <CONNECTION_NAME_OR_UUID>: 要修改的连接的名称或UUID。
# <SETTING>: 连接的设置名称,如 ipv4, ipv6, 802-11-wireless 等。
802-3-ethernet (有线连接):
auto-negotiate: 是否自动协商连接速度和双工模式。
duplex: 双工模式,可以是 'half''full'。
mac-address: MAC 地址。
mtu: MTU 值

802-11-wireless (无线连接):
ssid: 无线网络的 SSID。
mode: 连接模式,例如 'infrastructure'(基础设施模式)或 'ad-hoc'。
band: 使用的频带,例如 'a', 'bg'。
channel: 使用的通道。
mac-address: MAC 地址。
cloned-mac-address: 伪装的 MAC 地址。
mtu: MTU 值。

ipv4 (IPv4 设置):
method: 获取 IP 的方法,例如 'auto'(DHCP),'manual'(静态)或 'disabled'。
addresses: 静态 IP 地址和前缀长度,例如 "192.168.1.100/24"。
gateway: 网关的 IP 地址。
dns: DNS 服务器的 IP 地址。
routes: 静态路由。

ipv6 (IPv6 设置):
method: 同上,但适用于 IPv6。
addresses: 同上,但适用于 IPv6。
gateway: 同上,但适用于 IPv6。
dns: 同上,但适用于 IPv6。
routes: 同上,但适用于 IPv6。

connection:
id: 连接的名称。
uuid: 连接的唯一标识。
type: 连接的类型,例如 'wifi''ethernet'。
autoconnect: 是否自动连接。
timestamp: 连接上次活跃的时间。

proxy:
method: 代理设置,例如 'none', 'auto', 'manual'。
browser-only: 是否仅为浏览器设置代理。
pac-url: PAC 文件的 URL(用于自动代理配置)。
pac-script: PAC 脚本的内容。
http: HTTP 代理服务器地址。
https: HTTPS 代理服务器地址。
ftp: FTP 代理服务器地址。
socks: SOCKS 代理服务器地址。
# <PROPERTY>: 设置中的特定属性,如 addresses, method, ssid 等。
# <VALUE>: 为属性指定的新值。
# 案例
# 1.设置静态IP地址:
# 要为名为 “HomeEthernet”的连接设置静态 IP、网关和DNS,你可以执行以下命令:
nmcli connection modify HomeEthernet ipv4.method manual ipv4.addresses "192.168.1.10/24" ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,8.8.4.4"

# 2.更改 Wi-Fi SSID:
nmcli connection modify MyWifiConnection 802-11-wireless.ssid NewSSIDName

# 3.启用/禁用自动连接:
# 如果你希望连接在系统启动时自动建立(或防止它这样做),你可以设置 autoconnect 属性:
nmcli connection modify HomeEthernet connection.autoconnect yes
或
nmcli connection modify HomeEthernet connection.autoconnect no

# 3.改变连接名称:
# 使用 con-name 可以更改连接的名称:
nmcli connection modify <CONNECTION_NAME_OR_UUID> connection.id <NEW_NAME>
或者
nmcli connection modify <CONNECTION_NAME_OR_UUID> con-name <NEW_NAME>

# 4.指定或修改UUID:
nmcli connection modify <CONNECTION_NAME_OR_UUID> connection.uuid <NEW_UUID>

# 5.更改连接的类型:
# 修改连接的类型(例如,从 Wi-Fi 更改为以太网):
nmcli connection modify <CONNECTION_NAME_OR_UUID> connection.type ethernet

# 6.设置自动连接超时:
# 修改连接尝试建立连接的超时时间:
nmcli connection modify <CONNECTION_NAME_OR_UUID> connection.autoconnect-timeout <TIME_IN_SECONDS>

# 7.指定连接的特定接口名:
# 如果你想让一个连接仅适用于特定的网络接口,例如 eth0,你可以这样做:
nmcli connection modify <CONNECTION_NAME_OR_UUID> connection.interface-name eth0

nmcli connection clone

nmcli connection clone 命令允许你复制一个现有的网络连接,创建一个与原始连接几乎完全相同的新连接。这在很多场景下都很有用,特别是当你想为不同的网络环境或硬件设备创建相似的连接配置时。

# 用法
nmcli connection clone {CONNECTION_NAME_OR_UUID} {NEW_CONNECTION_NAME}

{CONNECTION_NAME_OR_UUID}: 要克隆的现有连接的名称或UUID。
{NEW_CONNECTION_NAME}: 新连接的名称。

# 参数:
--temporary 或 -temporary: 创建一个临时连接。这意味着当 NetworkManager 重启或系统重启时,这个克隆的连接将不会被保留
# 案例:
# 1.复制一个已存在的连接:
# 假设你有一个叫做 HomeEthernet 的现有连接,并且你想为你的办公室创建一个类似的连接。你可以简单地复制这个连接,并给新的连接一个不同的名字,如 OfficeEthernet:
nmcli connection clone HomeEthernet OfficeEthernet
# 这将创建一个名为 OfficeEthernet 的新连接,其配置与 HomeEthernet 相同。

# 2.创建一个临时的克隆连接:
# 如果你想测试一个连接配置,但不希望它在系统重启后仍然存在,你可以创建一个临时的克隆连接:
nmcli connection clone --temporary HomeEthernet TestEthernet
# 这会创建一个名为 TestEthernet 的临时连接,该连接在 NetworkManager 重启或系统重启后将被自动删除

# 注意:
# 1.使用 nmcli connection clone 创建的新连接会自动为新连接分配一个新的 UUID。
# 2.克隆操作不会启动新的连接。你必须使用 nmcli connection up 命令手动启动它。

nmcli connection reload

nmcli connection reload 是一个简单但非常有用的命令,其主要目的是重新加载NetworkManager的所有连接配置。当你手动修改了NetworkManager的配置文件(例如,在 /etc/NetworkManager/system-connections/ 下),并希望NetworkManager识别这些更改,但又不希望重新启动整个NetworkManager服务时,此命令非常有用。

# 用法
nmcli connection reload

# 参数:
# 实际上,nmcli connection reload 命令没有额外的参数。它只是简单地告诉 NetworkManager 重新读取和应用所有的连接配置。

# 场景
# 假设你手动编辑了一个网络连接的配置文件。例如,你可能已经进入 /etc/sysconfig/network-scripts/ifcfg-eth0

在编辑后,为了确保NetworkManager能够识别并应用你所做的更改,你应当执行:
nmcli connection reload

# 即使重新加载了连接配置,它并不会自动应用到当前活动的连接。为了在一个已经活跃的连接上应用更改,你可能还需要断开该连接,然后重新连接,或使用nmcli connection up命令。

nmcli connection load

nmcli connection load 命令允许你直接从文件加载一个或多个网络连接配置到 NetworkManager。如果你有一个预先配置的连接文件,或者你从另一台机器或备份中获取了连接文件,并希望将其导入到当前系统中,那么这个命令就会非常有用。

# 基本用法:
nmcli connection load {/path/to/connection/file}

# {/path/to/connection/file}: 要加载的连接配置文件的路径。
可以指定多个文件路径,以空格分隔,一次加载多个连接。

# 示例:
# 1.从指定文件加载连接:
# 假设你有一个名为 office.nmconnection 的连接配置文件,并且你想将它导入到 NetworkManager 中:
nmcli connection load /path/to/office.nmconnection
# 上述命令会加载并导入 office.nmconnection 文件中的连接配置。

# 2.一次加载多个连接文件:
# 如果你有多个连接文件并希望一次导入它们,只需在命令中指定所有文件的路径:
nmcli connection load /path/to/office.nmconnection /path/to/home.nmconnection
# 这会将 office.nmconnection 和 home.nmconnection 两个文件都导入到 NetworkManager 中。

# 注意:
加载新的连接配置不会自动激活该连接。要启动新导入的连接,你必须使用 nmcli connection up 命令。
如果加载的连接配置文件名与现有的连接名称相同,那么该文件的连接配置将不会被加载,除非现有的连接先被删除或重命名。

nmcli connection import

nmcli connection import 命令用于从特定类型的外部文件中导入网络连接配置。它与 nmcli connection load 命令稍有不同。而 nmcli connection load 直接加载 NetworkManager 的原生 .nmconnection 文件,nmcli connection import 则是用于其他格式,如 VPN 配置文件。

# 主要参数:
--type 或 -t: 导入的配置文件类型。例如,对于 OpenVPN 连接,你会指定 openvpn 作为类型。
FILENAME: 要导入的配置文件的路径。

# 用法
nmcli connection import --type {type} FILENAME

# 示例:
# 1. 导入 OpenVPN 配置:
如果你有一个 OpenVPN 的 .ovpn 配置文件,并希望将其导入到 NetworkManager 中,可以使用以下命令:
nmcli connection import --type openvpn /path/to/vpn-config.ovpn
# 此命令会创建一个新的 NetworkManager VPN 连接,基于你提供的 .ovpn 文件。

# 与 nmcli connection load 命令一样,导入连接不会自动激活它。要启动新导入的连接,需要使用 nmcli connection up 命令。
# nmcli connection import 只支持某些特定类型的配置文件,例如 VPN 配置。如果你尝试导入不支持的文件类型,命令会返回一个错误。
# 在使用 nmcli connection import 导入连接后,它会在 /etc/NetworkManager/system-connections/ 目录中创建一个新的 .nmconnection 文件。

nmcli connection export

nmcli connection export 命令允许你将特定类型的连接配置导出到外部文件中。这对于备份、迁移或共享特定连接配置(尤其是 VPN 配置)非常有用。

# 主要参数:
CONNECTION_NAME: 要导出的连接的名称。这是 NetworkManager 中定义的连接名称,不是文件名或设备名称。
FILE: 导出的配置应保存的文件路径。如果不指定此选项,输出将直接发送到标准输出。

#基本用法:
nmcli connection export CONNECTION_NAME > FILE

# 1.导出 OpenVPN 连接配置:
如果你有一个在 NetworkManager 中定义的 OpenVPN 连接,名为 "MyVPN",并且你希望将其配置导出到一个 .ovpn 文件中,你可以使用以下命令:
nmcli connection export MyVPN > myvpn-config.ovpn
或
nmcli connection export MyVPN myvpn-config.ovpn
# 这会创建一个名为 myvpn-config.ovpn 的文件,其中包含 "MyVPN" 的 OpenVPN 配置。

# 注意
nmcli connection export 主要用于 VPN 连接。不是所有的连接类型都支持导出,因为不是所有的连接都有与之对应的标准外部配置文件格式。
如果指定的连接类型不支持导出,或者给定的连接名称在 NetworkManager 中不存在,命令会返回一个错误。
使用 nmcli connection export 导出的配置文件应该是可直接用于相应的 VPN 客户端的。例如,导出的 OpenVPN .ovpn 文件应该可以在其他不使用 NetworkManager 的系统或设备上使用。

nmcli connection monitor

nmcli connection monitor 命令用于实时监控特定的网络连接的状态变化。当你想要观察一个或多个连接的动态行为,如它们的上线和下线状态,此命令是很有用的。

# 主要参数:
CONNECTION_NAME: 要监控的连接的名称。你可以指定多个连接名称,以空格分隔。

# 基本用法:
nmcli connection monitor [CONNECTION_NAME...]
如果你不指定任何连接名称,nmcli connection monitor 将监控所有活动的连接。

# 1.监控特定连接:
如果你想实时监控名为 "HomeWifi" 的连接,可以执行以下命令:
nmcli connection monitor HomeWifi
当 "HomeWifi" 连接的状态发生变化时,你会在终端中看到相关的信息。

# 2.监控多个连接:
如果你想同时监控名为 "HomeWifi""OfficeVPN" 的两个连接,可以这样做:
nmcli connection monitor HomeWifi OfficeVPN
当这两个连接中的任何一个的状态发生变化时,都会在终端中显示相关信息。

# 监控所有连接:
如果你只是想监控所有活动的连接,不需要指定任何连接名称:
nmcli connection monitor
任何活动连接的状态变化都会在终端中显示。
当使用 nmcli connection monitor 命令时,它会持续运行,直到你中断它(例如,通过按 Ctrl+C)。
这个命令的输出会提供有关连接状态变化的详细信息,例如连接何时上线、何时下线等。

参数查阅

# 命令需要的参数如下:
autoconnect: 当网络管理器启动时是否自动连接。
con-name: 连接的名称。
ifname: 使用的网络界面名称,如eth0或wlan0。
ipv4.method: 设置IPv4的获取方式,如manual(手动)或auto(DHCP)。
ipv4.addresses: IPv4地址。
ipv4.gateway: IPv4的网关。
ipv4.dns: IPv4的DNS服务器。
ipv6.method: 设置IPv6的获取方式。
ipv6.addresses: IPv6地址。
ipv6.gateway: IPv6的网关。
ipv6.dns: IPv6的DNS服务器。
type: 连接类型,如ethernet、wifi等。
connection.id: 连接ID,通常与con-name相同。
connection.type: 连接类型,可以是以太网、Wi-Fi等。
connection.autoconnect: 是否在可用时自动连接。
connection.uuid: 连接的唯一标识符。
master: 主连接名,用于桥接或绑定。
slave-type: 当设备作为某个主设备的从属设备时的类型。
connection.wait-device-timeout: 等待设备准备好连接的时间。
connection.zone: 为连接定义的防火墙区域。
connection.auth-retries: 认证尝试次数。
connection.autoconnect-priority: 在多个自动连接中,设置连接的优先级。
connection.autoconnect-retries: 自动连接尝试失败后的重试次数。
connection.lldp: 用于配置LLDP (Link Layer Discovery Protocol) 的设置。
ipv4.dhcp-client-id: DHCP客户端标识符。
ipv4.dhcp-hostname: 通过DHCP请求的主机名。
ipv4.ignore-auto-dns: 忽略由DHCP获取的DNS设置。
ipv4.may-fail: 如果为真,即使IPv4配置失败,网络管理器也会认为设备已成功激活。
ipv4.never-default: 如果为真,此连接的IP地址永远不会作为默认路由。
ipv6.addr-gen-mode: 控制如何生成标准的IPv6地址。
ipv6.dhcp-hostname: 通过DHCPv6请求的主机名。
ipv6.may-fail: 如果为真,即使IPv6配置失败,网络管理器也会认为设备已成功激活。
ipv6.never-default: 如果为真,此连接的IPv6地址永远不会作为默认路由。
connection.metered: 指示连接是否有流量计费或数据使用限制。
connection.permissions: 用户的权限列表,只有列出的用户可以管理此连接。
connection.read-only: 如果为真,则不允许修改连接。
proxy.method: 代理设置方式,例如none、auto或manual。
proxy.browser-only: 仅对浏览器应用代理设置。
proxy.pac-url: PAC (Proxy Auto-Configuration) 文件的URL。

nmtui

nmtui(Network Manager Text User Interface)是一个基于文本的用户界面,用于简化NetworkManager的配置和管理。它提供了一个简单、易于使用的菜单,以便在没有图形用户界面的情况下管理网络设置。nmtui在服务器和命令行环境中特别有用。

使用nmtui时,只需在终端中键入nmtui命令并按Enter键。这将打开nmtui的主菜单,其中包含以下选项:

  1. Edit a connection:编辑现有的网络连接或创建新的网络连接。您可以配置各种类型的网络连接,如有线、无线、VPN、VLAN等。编辑连接时,您可以设置IP地址、子网掩码、网关、DNS服务器等参数。
  2. Activate a connection:激活或停用现有的网络连接。选择要操作的连接,然后按Enter键。
  3. Set system hostname:设置系统的主机名。输入新的主机名后,选择“OK”并按Enter键。
  4. Quit:退出nmtui程序。

nmtui界面中,您可以使用上下箭头键在不同选项之间导航,使用左右箭头键在按钮之间切换。按Enter键选择一个选项或确认更改,按Esc键返回上一级菜单。

以下是使用nmtui的一些常见操作:

  • 要创建新的网络连接,请选择“Edit a connection”并按Enter键。然后,在底部选择“Add”,根据需要选择连接类型,并填写必要的信息。
  • 要编辑现有连接,请选择“Edit a connection”并按Enter键。然后,使用上下箭头键选择要编辑的连接,按Enter键。在配置页面中,您可以更改IP地址、子网掩码、网关、DNS服务器等设置。
  • 要激活或停用现有连接,请选择“Activate a connection”并按Enter键。然后,使用上下箭头键选择要操作的连接,按Enter键。

nmap

nmap(Network Mapper)是一个功能强大的网络扫描和安全审计工具。它广泛用于网络发现、安全测试、网络管理以及漏洞检测等场景。nmap 可以帮助用户发现开放的端口、运行的服务、操作系统信息等,从而评估网络安全风险。

nmap 的基本语法格式如下:

nmap [Scan Type] [Options] {targets}
  • Scan Type:可选的扫描类型,如 -sS(SYN 扫描)、-sT(全连接扫描)等。如果不指定,nmap 默认使用 SYN 扫描。
  • Options:可选的参数和选项,如 -p(指定端口)、-O(操作系统检测)等。可以根据需求组合使用多个选项。
  • targets:目标主机,可以是主机名、IP 地址、CIDR 子网或 IP 地址范围。可以同时指定多个目标。

1.扫描类型:

  • -sS:SYN 扫描(默认扫描类型),仅发送 TCP SYN 数据包;
  • -sT:全连接扫描,发送完整的 TCP 握手数据包;
  • -sU:UDP 扫描,扫描 UDP 端口;
  • -sN, -sF, -sX:TCP NULL、FIN、Xmas 扫描,发送特殊的 TCP 数据包;
  • -sP:Ping 扫描,只检查主机是否在线,不扫描端口;
  • -sn:Ping 扫描,禁用端口扫描;
  • -sA:ACK 扫描,发送 TCP ACK 数据包;
  • -sW:Window 扫描,发送 TCP ACK 数据包并检查窗口大小;
  • -s0: IP协议扫描。

2.扫描选项:

  • -p:指定要扫描的端口,如 -p80,443-p1-1024
  • -F:快速扫描,扫描约 100 个常用端口;
  • -O:操作系统检测,尝试识别目标主机的操作系统;
  • -sV:服务版本检测,尝试识别目标主机的服务及其版本;
  • -A:详细扫描,包括操作系统检测、服务版本检测、脚本扫描和 traceroute;
  • -e: 使用指定网络接口扫描;
  • -6:IPv6 扫描,使用 IPv6 地址进行扫描。

3.发现选项:

  • -Pn:跳过主机发现,直接扫描;
  • -PE, -PP, -PM:使用 ICMP echo、timestamp 和 netmask 请求进行主机发现;
  • -PS, -PA, -PU, -PY:使用 TCP SYN/ACK、UDP 或 SCTP 握手进行主机发现。

4.时间和性能选项

  • -T:设置时间模板,范围为 0(最慢)到 5(最快),如 -T4
  • --min-hostgroup, --max-hostgroup:设置并行扫描的主机组大小;
  • --min-parallelism, --max-parallelism:设置并行扫描的数据包数量;
  • --min-rtt-timeout, --max-rtt-timeout, --initial-rtt-timeout:设置 RTT 超时时间。

5.输出选项

  • -oN:将扫描结果输出到普通文本文件;
  • -oX:将扫描结果输出到 XML 文件;
  • -oG:将扫描结果输出到 grepable 文本文件;
  • -oA:将扫描结果输出到所有格式(普通文本、XML 和 grepable)的文件。

6.脚本选项

  • --script:使用 Nmap Scripting Engine(NSE)运行指定的脚本,如 --script=http-title
  • --script-args:为 NSE 脚本提供参数,如 --script-args=username=admin,password=1234
  • --script-updatedb:更新 NSE 脚本数据库。

7.其他选项

  • -v:增加详细输出,可以使用多个 -v 以提高详细程度;
  • -h--help:显示帮助信息;
  • -iL:从文件读取目标主机列表,每行一个主机名或 IP 地址;
  • -exclude:排除特定主机或范围,如 -exclude 192.168.1.1,192.168.1.10-192.168.1.20
  • -exclude-file:从文件中排除特定主机;
  • --resolve-all:强制解析所有目标主机的 DNS 名称。

8.常见的用法:

端口扫描:

nmap example.com

这将扫描 example.com 上的默认端口。

扫描指定端口:

nmap -p 80,443,8080 example.com

这将扫描 example.com 上的指定端口(80、443、8080)。

扫描端口范围:

nmap -p 1-1024 example.com

这将扫描 example.com 上的端口范围(1 到 1024)。

example.com 执行操作系统检测和服务版本检测:

nmap -O -sV example.com

这将尝试检测 example.com 上运行的服务及其版本。

扫描整个子网:

nmap 192.168.1.0/24

这将扫描 192.168.1.0/24 子网上的所有主机。

192.168.1.1/24 子网中的所有主机执行快速扫描:

nmap -T4 -F 192.168.1.1/24

这将以较高的速度(-T4)对 example.com 进行快速扫描(-F)。

example.com 执行全连接扫描:

nmap -sT example.com

TCP SYN 扫描指定端口:

nmap -sS -p 22,80,443 example.com

UDP 扫描指定端口:

nmap -sU -p 53,67,68,123 example.com

IP协议扫描:

nmap -sO example.com

此命令扫描支持的IP协议。

扫描主机列表文件:

nmap -iL target_list.txt

这里 target_list.txt 包含了一个主机名或 IP 地址的列表,每行一个。

使用指定网络接口扫描:

nmap -e eth0 example.com

这里 -e 选项指定了要使用的网络接口,例如 eth0

识别主机支持的 SSL/TLS 协议:

nmap --script ssl-enum-ciphers example.com

使用 Nmap Scripting Engine(NSE)执行特定脚本,检查目标主机支持的 SSL/TLS 协议及加密套件。

扫描并显示 traceroute:

nmap --traceroute example.com

此选项将在扫描完成后显示到目标主机的路由。

nl

在Linux中,nl命令是一种文本处理工具,它用于给文本文件的每一行添加行号。nl命令可以按照行号的格式输出文件内容,并可以指定不同的行号格式、行号宽度、是否对空白行进行行号计算等。以下是一些关于nl命令的详细信息

nl命令的基本语法如下:

nl [选项] 文件名

其中,选项包括:

  • -b样式:指定行号样式,可选值为a、t、n,分别表示不对空白行计算行号、只对文本行计算行号、对所有行计算行号。
  • -n:指定行号的起始值,即第一行的行号。
  • -w:指定行号字段的宽度。
  • -s:指定行号字段和文本之间的分隔符。
  • –help:显示命令帮助信息。
  • –version:显示命令版本信息。
  1. 添加默认行号

使用nl命令添加默认行号的语法格式为

nl 文件名
  1. 指定行号样式

使用nl命令指定行号样式的语法格式为:

nl -b 样式 文件名

其中,样式包括:

  • a:不对空白行计算行号。
  • t:只对文本行计算行号。
  • n:对所有行计算行号

例如,给名为test.txt的文件添加行号,但不对空白行计算行号,可以执行以下命令:

nl -b a test.txt
  1. 指定行号起始值和字段宽度

使用nl命令指定行号起始值和字段宽度的语法格式为:

nl -n 起始值 -w 宽度 文件名

例如,给名为test.txt的文件添加行号,起始值为10,字段宽度为4,可以执行以下命令:

nl -n 10 -w 4 test.txt
  1. 指定分隔符

使用nl命令指定分隔符的语法格式为:

nl -s 分隔符 文件名

例如,给名为test.txt的文件添加行号,并使用"|"作为行号字段和文本之间的分隔符,可以执行以下命令:

nl -s "|" test.txt

nscd

nscd 是一个名为 “Name Service Cache Daemon” 的守护进程,用于缓存名字服务的结果。这主要包括主机名,用户和组查询。当系统频繁地进行这些查询时(比如在一个大型网络环境中),nscd 可以通过存储先前的查询结果来提高性能,从而避免了对这些服务的重复查询。

# 参数
-d, --debug: 这个选项让 nscd 以调试模式运行。在这种模式下,nscd 不会作为守护进程运行(也就是说,它不会在后台运行),并且会在当前终端上显示所有的消息。
-f, --config-file=NAME: 这个选项让 nscd 从指定的配置文件 NAME 中读取配置数据。
-F, --foreground: 这个选项让 nscd 作为一个前台进程运行,而不是作为一个守护进程。它不会在后台运行,但除此之外,它的行为就像一个守护进程。
-g, --statistics: 这个选项让 nscd 打印出当前的配置统计信息。
-i, --invalidate=TABLE: 这个选项让 nscd 使指定的缓存 TABLE 失效。
-K, --shutdown: 这个选项让 nscd 关闭服务器。
-t, --nthreads=NUMBER: 这个选项让 nscd 启动 NUMBER 个线程。
-?, --help: 这个选项让 nscd 显示帮助列表。
--usage: 这个选项让 nscd 显示一个简短的用法消息。
-V, --version: 这个选项让 nscd 打印出程序版本。

#
nscd -d 或 nscd --debug:在调试模式下启动 nscd,不会在后台运行,并且会在当前终端上显示调试信息。
nscd -f FILE 或 nscd --config-file=FILE:使用特定的配置文件 FILE 来启动 nscd。
nscd -F 或 nscd --foreground:以前台进程模式运行 nscd,这样它就不会变成守护进程并在后台运行。
nscd -g 或 nscd --statistics:打印当前的缓存统计信息。
nscd -i TABLE 或 nscd --invalidate=TABLE:使 nscd 中特定的缓存 TABLE 无效。TABLE 可能是 "hosts"(主机名),"passwd"(用户),"group"(组)等。
nscd -K 或 nscd --shutdown:关闭 nscd 服务。
nscd -t NUMBER 或 nscd --nthreads=NUMBER:启动 NUMBER 个 nscd 工作线程。
nscd -? 或 nscd --help:显示 nscd 的帮助信息。
nscd --usage:显示 nscd 的简短用法。
nscd -V 或 nscd --version:打印 nscd 的版本信息。

#请注意,要使 nscd 正常工作,需要有适当的配置文件(默认为 /etc/nscd.conf)。如果这个文件不存在,或者如果它的设置不正确,nscd 可能无法正常工作。你应该总是先检查配置文件,然后再运行 nscd。

# 必须先安装nscd
yum -y install nscd
# 用法
# 1.在前台启动 nscd 并打印调试信息:
nscd -d -F

# 2.从特定的配置文件启动 nscd:
nscd -f /path/to/my/nscd.conf
# 这将从 /path/to/my/nscd.conf 启动 nscd,而不是从默认的配置文件。这对于使用自定义配置的情况特别有用。

# 3.显示 nscd 的缓存统计:
nscd -g
#这将打印 nscd 的缓存统计信息,包括每个缓存的命中次数和未命中次数。

# 4.使某个特定的缓存无效:
nscd -i hosts
# 将使 hosts(主机名)缓存无效。这对于你修改了 /etc/hosts 文件,并希望 nscd 立即看到这些更改,而不是等待其自然过期的情况特别有用。

# 5.关闭 nscd:
nscd -K
# 这将关闭 nscd 服务。如果你需要关闭 nscd(例如,进行维护或故障排查),则可以使用此命令。

nslookup

nslookup 是一个网络管理员常用的用于查询 DNS(Domain Name System)的实用程序。该命令主要用于查询 DNS 查找主机名的 IP 地址,或者查找 IP 地址对应的主机名,以及查询邮件交换记录等。

# `nslookup` 命令的基本格式如下:
nslookup [option] [hostname | IP_address] [server]

# 命令选项:
option: 命令选项,例如 -type, -debug 等。
hostname: 需要查询 IP 地址的主机名。
IP_address: 需要查询主机名的 IP 地址。
server: DNS 服务器的 IP 地址或者主机名。如果不指定,那么默认使用 /etc/resolv.conf 中配置的 DNS 服务器。
# 1.查询主机名的 IP 地址
nslookup www.google.com

# 2.查询 IP 地址的主机名
nslookup 8.8.8.8

# 3.查询特定类型的记录
nslookup -query=mx gmail.com

# 4.指定 DNS 服务器
nslookup www.google.com 8.8.8.8

# 注意:nslookup 已经被标记为废弃,并可能在未来的版本中被移除。许多系统和网络管理员现在更倾向于使用 dig 或 host 命令进行 DNS 查询,因为它们提供了更强大和灵活的功能。并且这些工具都是依赖bind-utils这个包

openssl

OpenSSL 是一个强大的安全套接字层密码库,围绕这个库有很多安全应用。OpenSSL 工具库可以用于各种不同的功能,包括创建证书请求、生成随机数、编码和解码数据、创建 RSA 和 EC 私钥,以及查看证书详细信息等。

OpenSSL 的基本命令和参数

openssl command [ command_opts ] [ command_args ]

其中 “command” 是你希望执行的 OpenSSL 命令,“command_opts” 是传递给该命令的选项,“command_args” 是传递给该命令的参数。

例如,你可以使用以下命令生成一个新的 RSA 私钥:

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

在这个命令中,“genpkey” 是命令,“-algorithm” 和 “-out” 是选项,“RSA”、“private_key.pem” 和 “rsa_keygen_bits:2048” 是参数。

使用 OpenSSL 创建证书

首先,我们需要生成一个私钥。私钥用于签署证书请求和解密接收到的信息。下面的命令将创建一个 2048 位的 RSA 私钥:

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

这个命令生成了一个2048位的RSA私钥。其中-algorithm参数用于指定所使用的算法,-out参数用于指定私钥的输出文件名,rsa_keygen_bits:2048用于设置RSA密钥的位数。

创建证书请求(Certificate Signing Request,CSR)

一旦我们有了私钥,我们就可以创建一个证书请求。证书请求包含公钥和一些额外的信息,例如组织名称和联系信息。下面的命令将创建一个新的证书请求:

openssl req -new -key private_key.pem -out request.csr

这个命令用已有的私钥创建一个证书签名请求。其中-new参数表示创建一个新的请求,-key参数用于指定用于签名请求的私钥,-out参数用于指定请求的输出文件名。

创建自签名证书
如果你是自己的 CA(证书颁发机构),你可以使用你的私钥和证书请求来创建一个自签名证书。自签名证书是自己签署自己的证书,通常用于内部网络或开发环境。以下命令将创建一个有效期为一年的自签名证书:

openssl req -x509 -key private_key.pem -in request.csr -out certificate.pem -days 365

使用 OpenSSL 检查证书
你可以使用 OpenSSL 来查看证书的内容和详细信息。下面的命令将打印出证书的所有信息

openssl x509 -text -noout -in certificate.pem

用法案例:

1.生成自签名证书:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

这个命令创建一个新的4096位RSA密钥并创建一个有效期为一年的自签名证书。其中-x509参数表示要创建一个自签名证书,-newkey参数用于指定新创建的私钥的类型和位数,-keyout参数用于指定新私钥的输出文件名,-out参数用于指定证书的输出文件名,-days参数用于设置证书的有效期。

2.查看证书详细信息:

openssl x509 -text -noout -in cert.pem

这个命令打印出证书的详细信息。其中-text参数表示要打印出证书的详细信息,-noout参数表示不要输出编码过的证书信息,-in参数用于指定要检查的证书的文件名。

3.计算文件的SHA256散列值:

openssl dgst -sha256 file.txt

这个命令将计算file.txt文件的SHA256散列。

4.加密文件:

openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc

这个命令将使用AES-256-CBC加密算法和一个加盐值来加密file.txt文件,然后将加密后的内容写入file.txt.enc文件。

5.解密文件:

openssl enc -d -aes-256-cbc -in file.txt.enc -out file.txt.dec

这个命令将使用AES-256-CBC解密算法来解密file.txt.enc文件,然后将解密后的内容写入file.txt.dec文件。

6.验证证书链:

openssl verify -CAfile ca-cert.pem server-cert.pem

这个命令检查服务器证书是否由CA证书所签名。其中-CAfile参数用于指定CA证书的文件名。

  1. 数据的加密和解密
openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc
openssl enc -d -aes-256-cbc -in file.txt.enc -out file.txt.dec

这两个命令分别用于加密和解密文件。其中-aes-256-cbc参数表示使用的加密算法,-salt参数表示在加密过程中使用盐,-in参数用于指定输入文件的文件名,-out参数用于指定输出文件的文件名,-d参数表示要进行解密操作。

8.计算和验证文件哈希值

openssl dgst -sha256 file.txt
openssl dgst -sha256 -verify pubkey.pem -signature sigfile.bin file.txt

这两个命令分别用于计算文件的哈希值和验证文件的签名。其中-sha256参数表示要使用的哈希算法,-verify参数表示要验证签名,-signature参数用于指定签名文件的文件名。

9.生成公钥:

openssl rsa -pubout -in private_key.pem -out public_key.pem

这个命令会从私钥文件中提取出公钥。

10.使用CA证书签署CSR:

openssl x509 -req -days 365 -in request.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out signed_certificate.crt

这个命令会使用CA证书签署CSR,生成一个有效期为1年的证书。

openssl passwd

openssl passwd命令是用于生成和验证密码的。这个命令可以生成各种类型的加密密码,包括Unix的crypt格式,以及MD5,SHA256和SHA512格式。下面是这个命令的一些常用选项

  • -help:显示帮助信息。
  • -in infile:从文件中读取密码,而不是从命令行输入。
  • -noverify:在从终端读取密码时,不进行验证。
  • -quiet:不显示警告信息。
  • -table:以表格格式输出结果。
  • -reverse:交换表格的列。
  • -salt val:使用指定的盐值进行密码加密。
  • -stdin:从标准输入读取密码,而不是从命令行输入。
  • -6:使用基于SHA512的密码算法。
  • -5:使用基于SHA256的密码算法。
  • -apr1:使用基于MD5的密码算法,这是Apache的变种。
  • -1:使用基于MD5的密码算法。
  • -aixmd5:使用AIX的MD5密码算法。
  • -crypt:使用标准的Unix密码算法,这是默认选项。
  • -rand val:将文件加载到随机数生成器中。
  • -writerand outfile:将随机数据写入指定的文件。

1.生成加密密码:

基本的命令格式如下:

openssl passwd -crypt yourpassword

这个命令会生成一个使用Unix crypt方式加密的密码。你可以将yourpassword替换为你想要加密的密码。

如果你想使用其他加密方式,你可以使用-1(MD5),-5(SHA256)或-6(SHA512)选项。例如,下面的命令会生成一个使用SHA512方式加密的密码:

openssl passwd -6 yourpassword

2.使用盐值:

生成加密密码时,你可以指定一个盐值。盐值可以增加密码的复杂性,使得通过暴力破解更加困难。你可以使用-salt选项指定盐值。例如:

这个命令会使用xyz作为盐值,生成一个SHA512加密的密码。

openssl passwd -6 -salt xyz yourpassword

这个命令会使用xyz作为盐值,生成一个SHA512加密的密码。

3.从文件中读取密码:

如果你的密码存储在文件中,你可以使用-in选项从文件中读取密码。例如:

openssl passwd -6 -salt xyz -in password.txt

这个命令会从password.txt文件中读取密码,并生成一个SHA512加密的密码。

4.从标准输入读取密码:

如果你不想在命令行中直接输入密码,你可以使用-stdin选项从标准输入读取密码。例如:

echo yourpassword | openssl passwd -6 -salt xyz -stdin

这个命令会从标准输入(在这个例子中是echo命令的输出)读取密码,并生成一个SHA512加密的密码。

案例:

1.生成一个基于SHA256的密码,你可以使用下面的命令:

openssl passwd -6 -salt xyz yourpassword

这个命令会输出一个SHA256加密的密码,你可以将这个密码用于配置文件或者其他需要密码的地方。

2.生成密码并保存到文件:

如果你想生成一个密码并将其保存到文件中,你可以使用-out选项。例如:

openssl passwd -6 -salt xyz yourpassword -out password.txt

3.从文件中读取密码:

如果你不想在命令行中直接输入密码,你可以使用-stdin选项从标准输入读取密码。例如:

echo yourpassword | openssl passwd -6 -salt xyz -stdin

这个命令会从标准输入(在这个例子中是echo命令的输出)读取密码,并生成一个SHA256加密的密码

4.验证密码:

openssl passwd命令也可以用于验证密码。你可以使用-table选项以表格格式输出结果,然后手动比较输入的密码和存储的密码。例如:

openssl passwd -6 -salt xyz -table yourpassword

这个命令会输出一个表格,其中包含输入的密码和加密的密码。你可以比较这两个密码,以验证输入的密码是否正确

openssl enc

openssl enc命令用于对数据进行加密和解密。这个命令支持多种加密算法,你可以使用-list选项查看所有支持的算法。下面是这个命令的一些常用选项:

  • -help:显示帮助信息。
  • -list-ciphers:列出所有支持的加密算法。
  • -in infile:指定输入文件。
  • -out outfile:指定输出文件。
  • -pass val:指定密码源。这个选项的值可以是pass:passwordenv:varfile:pathnamefd:number
  • -e:加密数据。
  • -d:解密数据。
  • -p:打印IV(初始化向量)和密钥。
  • -P:打印IV和密钥,然后退出。
  • -v:显示详细输出。
  • -nopad:禁用标准的块填充。
  • -salt:在密钥派生函数中使用盐值。这是默认选项。
  • -nosalt:在密钥派生函数中不使用盐值。
  • -debug:打印调试信息。
  • -a-base64:根据加密标志进行Base64编码或解码。
  • -A:与-[base64|a]选项一起使用,指定Base64缓冲区为单行。
  • -bufsize val:指定缓冲区大小。
  • -k val:指定密码。
  • -kfile infile:从文件中读取密码。
  • -K val:指定原始密钥,以十六进制形式。
  • -S val:指定盐值,以十六进制形式。
  • -iv val:指定IV,以十六进制形式。
  • -md val:使用指定的摘要算法从密码创建密钥。
  • -iter +int:指定迭代次数,并强制使用PBKDF2。
  • -pbkdf2:使用基于密码的密钥派生函数2。
  • -none:不进行加密。
  • -rand val:将文件加载到随机数生成器中。
  • -writerand outfile:将随机数据写入指定的文件。
  • -z:使用zlib作为“加密”。
  • -engine val:使用引擎,可能是硬件设备。
#支持的加密算法
[root@centos8 ~]#openssl enc --list
Supported ciphers:
-aes-128-cbc               -aes-128-cfb               -aes-128-cfb1
-aes-128-cfb8              -aes-128-ctr               -aes-128-ecb
-aes-128-ofb               -aes-192-cbc               -aes-192-cfb
-aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr
-aes-192-ecb               -aes-192-ofb               -aes-256-cbc
-aes-256-cfb               -aes-256-cfb1              -aes-256-cfb8
-aes-256-ctr               -aes-256-ecb               -aes-256-ofb
-aes128                    -aes128-wrap               -aes192
-aes192-wrap               -aes256                    -aes256-wrap
-aria-128-cbc              -aria-128-cfb              -aria-128-cfb1
-aria-128-cfb8             -aria-128-ctr              -aria-128-ecb
-aria-128-ofb              -aria-192-cbc              -aria-192-cfb
-aria-192-cfb1             -aria-192-cfb8             -aria-192-ctr
-aria-192-ecb              -aria-192-ofb              -aria-256-cbc
-aria-256-cfb              -aria-256-cfb1             -aria-256-cfb8
-aria-256-ctr              -aria-256-ecb              -aria-256-ofb
-aria128                   -aria192                   -aria256
-bf                        -bf-cbc                    -bf-cfb
-bf-ecb                    -bf-ofb                    -blowfish
-camellia-128-cbc          -camellia-128-cfb          -camellia-128-cfb1
-camellia-128-cfb8         -camellia-128-ctr          -camellia-128-ecb
-camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb
-camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ctr
-camellia-192-ecb          -camellia-192-ofb          -camellia-256-cbc
-camellia-256-cfb          -camellia-256-cfb1         -camellia-256-cfb8
-camellia-256-ctr          -camellia-256-ecb          -camellia-256-ofb
-camellia128               -camellia192               -camellia256
-cast                      -cast-cbc                  -cast5-cbc
-cast5-cfb                 -cast5-ecb                 -cast5-ofb
-chacha20                  -des                       -des-cbc
-des-cfb                   -des-cfb1                  -des-cfb8
-des-ecb                   -des-ede                   -des-ede-cbc
-des-ede-cfb               -des-ede-ecb               -des-ede-ofb
-des-ede3                  -des-ede3-cbc              -des-ede3-cfb
-des-ede3-cfb1             -des-ede3-cfb8             -des-ede3-ecb
-des-ede3-ofb              -des-ofb                   -des3
-des3-wrap                 -desx                      -desx-cbc
-id-aes128-wrap            -id-aes128-wrap-pad        -id-aes192-wrap
-id-aes192-wrap-pad        -id-aes256-wrap            -id-aes256-wrap-pad
-id-smime-alg-CMS3DESwrap  -idea                      -idea-cbc
-idea-cfb                  -idea-ecb                  -idea-ofb
-rc2                       -rc2-128                   -rc2-40
-rc2-40-cbc                -rc2-64                    -rc2-64-cbc
-rc2-cbc                   -rc2-cfb                   -rc2-ecb
-rc2-ofb                   -rc4                       -rc4-40
-rc5-cbc                   -rc5-cfb                   -rc5-ecb
-rc5-ofb                   -seed                      -seed-cbc
-seed-cfb                  -seed-ecb                  -seed-ofb

[root@centos8 ~]#

1.如果你想使用AES-256-CBC算法加密一个文件,你可以使用下面的命令:

openssl enc -aes-256-cbc -salt -in plaintext.txt -out ciphertext.txt -pass pass:yourpassword

这个命令会使用你指定的密码和一个随机生成的盐值,对plaintext.txt文件进行加密,然后将加密后的数据保存到ciphertext.txt文件中。

2.加密文件:

openssl enc -ciphername -in filename -out outfilename -pass pass:your_password

其中,ciphername 是你想要使用的加密算法,比如 -aes-256-cbc;可以使用openssl enc --list查看有哪些加密算法。filename 是你想要加密的文件名;outfilename 是输出的加密文件名;your_password 是你设置的密码。

3.解密文件:

openssl enc -ciphername -d -in filename -out outfilename -pass pass:your_password

这个命令几乎与加密命令相同,只是多了一个 -d 标志,这个标志表示 “解密”。其他参数的含义与上述相同。

4.使用 base64 编码文件:

openssl enc -base64 -in plainfile.txt -out base64file.txt

这个命令会将 “plainfile.txt” 编码为 base64 格式,并将结果存储在 “base64file.txt”。

5.解码 base64 编码的文件:

openssl enc -base64 -d -in base64file.txt -out decodedfile.txt

这个命令会将 “base64file.txt” 解码为原始格式,并将结果存储在 “decodedfile.txt”。

openssl dgst

openssl dgst 命令用于计算文件或者输入数据的消息摘要(通常称为哈希值)。它支持多种哈希函数,包括但不限于 MD5、SHA1、SHA256、SHA512 等。以下是该命令的一些主要选项的解释

  • file...:要计算摘要的文件名。如果没有提供文件名,那么 dgst 将从标准输入(stdin)读取数据。
  • -help:显示命令的帮助信息。
  • -list:列出所有可用的摘要算法。
  • -c:以冒号分隔的形式输出摘要。
  • -r:以 coreutils 格式(可以被 read 命令解析)输出摘要。
  • -out outfile:将输出写入文件,而不是标准输出。
  • -passin val:指定输入文件的密码来源。
  • -sign val:使用私钥对摘要进行签名。
  • -verify val:使用公钥验证签名。
  • -prverify val:使用私钥验证签名。
  • -signature infile:包含要验证的签名的文件。
  • -keyform format:密钥文件的格式(PEM 或 ENGINE)。
  • -hex:以十六进制形式输出摘要。
  • -binary:以二进制形式输出摘要。
  • -d-debug:打印调试信息。
  • -fips-fingerprint:使用在 OpenSSL-FIPS 中用于指纹的密钥计算 HMAC。
  • -hmac val:使用密钥创建哈希 MAC。
  • -mac val:创建 MAC(不一定是 HMAC)。
  • -sigopt val:以 n:v 形式的签名参数。
  • -macopt val:以 n:v 形式的 MAC 算法参数或密钥。
  • -rand val:加载文件到随机数生成器。
  • -writerand outfile:将随机数据写入指定的文件。
  • -engine val:使用引擎 e,可能是一个硬件设备。
  • -engine_impl:也使用由 -engine 给出的引擎进行摘要操作。
  • -*:任何支持的摘要算法。
#支持的加密算法
[root@centos8 ~]#openssl dgst --list
Supported digests:
-blake2b512                -blake2s256                -md4
-md5                       -md5-sha1                  -ripemd
-ripemd160                 -rmd160                    -sha1
-sha224                    -sha256                    -sha3-224
-sha3-256                  -sha3-384                  -sha3-512
-sha384                    -sha512                    -sha512-224
-sha512-256                -shake128                  -shake256
-sm3                       -ssl3-md5                  -ssl3-sha1
-whirlpool
[root@centos8 ~]#

例如,如果你想计算一个文件的 SHA-256 摘要,你可以使用以下命令:

openssl dgst -sha256 filename

这将输出文件的 SHA-256 摘要。

如果你想要使用 HMAC(带密钥的哈希消息认证码)计算摘要,你可以使用 -hmac 选项:

openssl dgst -sha256 -hmac "key" filename

1.对文件进行哈希并签名

你可以使用openssl dgst命令和你的私钥来对一个文件的摘要进行签名。假设你有一个名为"private.pem"的私钥文件,你可以使用以下命令来签名一个文件:

openssl dgst -sha256 -sign private.pem -out signature.sig inputfile

这个命令会计算"inputfile"的SHA-256摘要,然后使用你的私钥对它进行签名。签名将被写入"signature.sig"文件

2.验证签名

假设你有一个公钥文件"public.pem",你可以使用它来验证上面生成的签名:

openssl dgst -sha256 -verify public.pem -signature signature.sig inputfile

这个命令将验证"inputfile"的SHA-256摘要与"signature.sig"中的签名是否匹配。如果匹配,它将输出"Verified OK";如果不匹配,它将输出"Verification Failure"。

3.创建HMAC(带密钥的哈希消息认证码)

你可以使用openssl dgst命令和一个密钥来创建一个HMAC。例如,以下命令使用SHA-256算法和密钥"secretkey"创建一个HMAC:

openssl dgst -sha256 -hmac "secretkey" -out hmac.txt inputfile

openssl genrsa

openssl genrsa 命令用于生成 RSA 私钥。这是生成 SSL 证书或 SSH 密钥对的常见步骤之一。下面是对它的一些选项的解释:

  • -help:显示帮助信息。
  • -3:设置公钥指数值为3。
  • -F4-f4:设置公钥指数值为65537(0x10001)。
  • -out outfile:将生成的私钥输出到指定的文件。
  • -rand val:加载文件到随机数生成器。
  • -writerand outfile:将随机数据写入指定的文件。
  • -passout val:设置输出文件的密码源。
  • -*:使用任何支持的密码算法对输出进行加密。
  • -engine val:使用引擎,可能是硬件设备。
  • -primes +int:指定用于生成密钥的素数数量。

以下是 openssl genrsa 的一些使用实例:

1.生成一个 2048 位的 RSA 私钥:

openssl genrsa -out private_key.pem 2048

RSA 密钥的长度可以根据需要选择不同的值。常用的密钥长度有 2048、3072 和 4096 等。

较短的密钥长度生成速度较快,但安全性较低,可能容易受到攻击。较长的密钥长度生成速度较慢,但提供更高的安全性。一般来说,2048 位的密钥已被广泛接受为安全性较高且性能较好的选择。

您可以根据具体的需求和安全要求选择适当的密钥长度。然而,请注意,较长的密钥长度也会增加加密和解密的计算负担。

2.生成一个 2048 位的 RSA 私钥并用密码保护(加密):

openssl genrsa -des3 -out private_key.pem 2048

当你运行这个命令时,OpenSSL 会要求你输入一个密码。这个密码会用于加密私钥文件。如果你在使用私钥时(比如为证书签名或建立 SSL 连接),你需要提供这个密码。

3.生成一个具有特定公钥指数的 RSA 私钥:

openssl genrsa -3 -out private_key.pem 2048

这个命令会生成一个 2048 位的 RSA 私钥,其公钥指数为3(而不是默认的65537)。

4.生成一个2048位的RSA私钥,并使用AES-256-CBC进行加密:

openssl genrsa -aes256 -out private_key.pem 2048

在运行此命令时,你将被要求输入一个密码,该密码将被用于加密私钥文件。

5.使用随机文件生成2048位的RSA私钥:

openssl genrsa -rand /path/to/random/file -out private_key.pem 2048

这个命令会使用提供的随机文件来提高生成私钥时的随机性。这对于在随机性可能较差的环境中(比如在某些类型的虚拟机中)生成密钥可能很有帮助。6.生成一个多素数RSA私钥:

openssl genrsa -primes 3 -out private_key.pem 2048

正常的RSA私钥是由两个素数的乘积构成的。这个命令生成的私钥,是由三个素数的乘积构成的。多素数RSA可以提高RSA操作的速度,但是会降低安全性,因此应谨慎使用。

openssl rsa

openssl rsa 命令主要用于处理 RSA 密钥。可以用它来查看密钥详情,转换密钥格式,提取公钥等。下面是对它的一些选项的解释:

  • -help:显示帮助信息。
  • -inform format:输入格式,可以是 DER 或 PEM。
  • -outform format:输出格式,可以是 DER、PEM 或 PVK。
  • -in val:输入文件。
  • -out outfile:输出文件。
  • -pubin:指示输入文件是公钥。
  • -pubout:输出公钥。
  • -passout val:设置输出文件的密码源。
  • -passin val:设置输入文件的密码源。
  • -RSAPublicKey_in:输入是 RSAPublicKey。
  • -RSAPublicKey_out:输出是 RSAPublicKey。
  • -noout:不打印密钥。
  • -text:以文本方式打印密钥。
  • -modulus:打印 RSA 密钥的模。
  • -check:验证密钥的一致性。
  • -*:使用任何支持的密码算法对私钥进行加密。
  • -pvk-strong:启用“强”PVK编码级别(默认)。
  • -pvk-weak:启用“弱”PVK编码级别。
  • -pvk-none:不强制 PVK 编码。
  • -engine val:使用引擎,可能是硬件设备。

以下是 openssl rsa 的一些使用实例:

1.查看 RSA 私钥的详细信息:

openssl rsa -in private_key.pem -text -noout

2.从 RSA 私钥中提取公钥:

openssl rsa -in private_key.pem -pubout -out public_key.pem

3.检查 RSA 私钥的一致性:

openssl rsa -in private_key.pem -check

4.转换 RSA 私钥的格式(比如从 PEM 转换为 DER):

openssl rsa -in private_key.pem -outform DER -out private_key.der

5.从 RSA 密钥中提取模数:

openssl rsa -in private_key.pem -modulus -noout

这个命令会打印出 RSA 密钥的模数。这个值是在 RSA 密钥生成过程中两个大素数的乘积,是公开的信息。

6.删除 RSA 私钥的密码保护:

openssl rsa -in encrypted_private_key.pem -out decrypted_private_key.pem

在运行此命令时,OpenSSL 会要求你输入原始私钥的密码。然后它会生成一个新的,未加密的私钥文件。

7.添加密码保护到 RSA 私钥:

openssl rsa -in private_key.pem -des3 -out encrypted_private_key.pem

这个命令会让你为私钥输入一个密码,然后它会使用 DES3 加密算法生成一个新的加密私钥文件

8.将公钥格式从 RSAPublicKey 转换为 SubjectPublicKeyInfo:

openssl rsa -pubin -in public_key.pem -RSAPublicKey_out -out spki_public_key.pem

在 X.509 证书中,公钥通常以 SubjectPublicKeyInfo 格式表示。然而,有些工具可能会生成 RSAPublicKey 格式的公钥。你可以使用这个命令来进行转换。

openssl rsault

openssl rsautl 是一个用于 RSA 加密和解密的命令。它也可以用于签名和验证。以下是它的一些选项的解释:

  • -help:显示帮助信息。
  • -in infile:输入文件。
  • -out outfile:输出文件。
  • -inkey val:输入密钥。
  • -keyform PEM|DER|ENGINE:私钥格式,默认为 PEM。
  • -pubin:指示输入的是公钥。
  • -certin:输入是一个携带 RSA 公钥的证书。
  • -ssl:使用 SSL v2 填充。
  • -raw:不使用填充。
  • -pkcs:使用 PKCS#1 v1.5 填充(默认)。
  • -oaep:使用 PKCS#1 OAEP。
  • -sign:使用私钥签名。
  • -verify:使用公钥验证。
  • -asn1parse:通过 asn1parse 运行输出;和 -verify 一起使用很有用。
  • -hexdump:16进制输出。
  • -x931:使用 ANSI X9.31 填充。
  • -rev:反转输入缓冲区的顺序。
  • -encrypt:使用公钥加密。
  • -decrypt:使用私钥解密。
  • -passin val:输入文件密码源。
  • -rand val:加载文件到随机数生成器。
  • -writerand outfile:将随机数据写入指定文件。
  • -engine val:使用引擎,可能是硬件设备

1.使用公钥加密文件:

echo 'Hello, world!' | openssl rsautl -encrypt -pubin -inkey public.pem > encrypted.bin

2.使用私钥解密文件:

openssl rsautl -decrypt -inkey private.pem -in encrypted.bin

3.使用私钥签名文件,并用公钥验证签名:

openssl rsautl -sign -inkey private.pem -in input.txt -out signature.bin
openssl rsautl -verify -pubin -inkey public.pem -in signature.bin -asn1parse

4.使用 PKCS#1 OAEP 填充(这是一种提供额外安全性的填充方式):

echo 'Hello, world!' | openssl rsautl -encrypt -oaep -pubin -inkey public.pem > encrypted.bin

5.使用 SSL v2 填充(这是一个旧的填充方式,现在已经很少使用了):

echo 'Hello, world!' | openssl rsautl -encrypt -ssl -pubin -inkey public.pem > encrypted.bin

6.使用 RAW 模式(不进行任何填充,仅用于特殊情况):

echo 'Hello, world!' | openssl rsautl -encrypt -raw -pubin -inkey public.pem > encrypted.bin

7.使用公钥解密(这是非标准的操作,应该避免在实际应用中使用):

openssl rsautl -decrypt -pubin -inkey public.pem -in encrypted.bin

openssl dsa

openssl dsa 是一个用于处理 DSA (Digital Signature Algorithm 数字签名算法)密钥的命令。以下是它的一些选项的解释:

  • -help:显示帮助信息。
  • -inform format:输入格式,可选 DER、PEM、PVK。
  • -outform format:输出格式,可选 DER、PEM、PVK。
  • -in val:输入的密钥。
  • -out outfile:输出的文件。
  • -noout:不输出密钥。
  • -text:以文本形式打印密钥。
  • -modulus:打印 DSA 的公共值。
  • -pubin:指示输入的是公钥。
  • -pubout:输出公钥,而不是私钥。
  • -passin val:输入文件密码源。
  • -passout val:输出文件密码源。
  • -*:任何支持的加密算法。
  • -pvk-strong:启用 ‘Strong’ PVK 编码级别(默认)。
  • -pvk-weak:启用 ‘Weak’ PVK 编码级别。
  • -pvk-none:不强制 PVK 编码。
  • -engine val:使用引擎,可能是硬件设备。

以下是一些 openssl dsa 的使用实例:

  1. 查看 DSA 私钥的详细信息
openssl dsa -in private_key.pem -text -noout

2.提取 DSA 公钥:

openssl dsa -in private_key.pem -pubout -out public_key.pem

3.将 DSA 私钥的格式从 DER 转换为 PEM:

openssl dsa -inform DER -in private_key.der -out private_key.pem

4.从 DSA 私钥中提取模数(也就是公共值):

openssl dsa -in private_key.pem -modulus -noout

5.删除 DSA 私钥的密码保护:

openssl dsa -in encrypted_private_key.pem -out decrypted_private_key.pem

6.使用-pvk-strong-pvk-weak-pvk-none选项来控制PVK(Private Key)编码的强度。默认情况下,openssl会使用强的PVK编码级别,但是在某些情况下,你可能需要降低这个级别或者完全不使用PVK编码。例如:

openssl dsa -in private_key.pem -out private_key.pvk -pvk-weak

7-engine选项可以指定一个加密引擎。这在某些情况下很有用,比如当你的系统有一个硬件加密设备时,你可以利用这个设备来提高加密操作的速度。

8.使用-passin-passout选项来从一个文件或者其他来源获取输入和输出文件的密码。例如,你可以从一个环境变量获取密码:

openssl dsa -in private_key.pem -out encrypted_private_key.pem -passout env:PASSWORD

9.-*选项可以用来指定一个加密算法。这可以用来加密私钥文件。例如,你可以使用AES-256-CBC算法来加密你的私钥:

openssl dsa -in private_key.pem -aes256 -out encrypted_private_key.pem

openssl x509

openssl x509 是 OpenSSL 命令行工具的一个子命令,主要用于 X.509 证书的显示和管理。X.509 是一种广泛应用于互联网安全的证书标准,被用于 SSL 和 TLS 等协议。openssl x509 可以处理 DER(一种二进制格式)或 PEM(一种基于文本的格式)格式的 X.509 证书。

#以下是 openssl x509 命令中列出的各个参数的详细解释:
-help:显示命令帮助信息的参数。
-inform format:指定输入证书的格式,可以是DER或PEM。
-in infile:指定输入的证书文件。
-outform format:指定输出证书的格式,可以是DER或PEM。
-out outfile:指定输出的证书文件。
-keyform PEM|DER|ENGINE:指定私钥的格式。
-passin val:指定输入的私钥密码。
-serial:打印证书的序列号。
-subject_hash:打印证书主题的哈希值。
-issuer_hash:打印证书发行者的哈希值。
-hash:与 -subject_hash 相同,打印证书主题的哈希值。
-subject:打印证书的主题。
-issuer:打印证书的发行者。
-email:打印证书中的电子邮件地址。
-startdate:打印证书的有效起始日期。
-enddate:打印证书的有效结束日期。
-purpose:打印证书的用途。
-dates:打印证书的有效起始和结束日期。
-modulus:打印证书中的RSA密钥模数。
-pubkey:输出证书中的公钥。
-fingerprint:打印证书的指纹。
-alias:输出证书的别名。
-noout:不输出证书,只显示状态信息。
-nocert:不输出证书。
-ocspid:打印证书的OCSP主题名和公钥的哈希值。
-ocsp_uri:打印OCSP响应者的URL。
-trustout:输出一个被信任的证书。
-clrtrust:清除所有的信任用途。
-clrext:清除所有的证书扩展。
-addtrust val:添加一个信任用途。
-addreject val:添加一个拒绝用途。
-setalias val:设置证书别名。
-days int:设置签名证书的有效期,单位为天。
-checkend intmax:检查证书是否在指定的秒数内过期。
-signkey val:使用指定的私钥进行自签名。
-x509toreq:输出一个证书请求对象。
-req:输入是一个证书请求,签名并输出。
-CA infile:设置CA证书,必须是PEM格式。
-CAkey val:设置CA的私钥,必须是PEM格式。
-CAcreateserial:如果不存在则创建序列号文件。
-CAserial val:指定序列号文件。
-set_serial val:设置序列号。
-text:以文本形式打印证书。
-ext val:打印X509v3扩展。
-C:以C代码形式输出。
-extfile infile:添加X509V3扩展的文件。
-rand val:加载文件到随机数生成器中。
-writerand outfile:将随机数据写入指定文件。
-extensions val:使用配置文件中的指定部分。
-nameopt val:设置证书名的各种选项。
-certopt val:设置证书文本的各种选项。
-checkhost val:检查证书是否匹配主机。
-checkemail val:检查证书是否匹配电子邮件。
-checkip val:检查证书是否匹配IP地址。
-CAform PEM|DER:设置CA证书格式。
-CAkeyform PEM|DER|ENGINE:设置CA私钥格式。
-sigopt val:设置签名参数。
-force_pubkey infile:强制在证书中使用指定的公钥。
-next_serial:增加当前证书的序列号。
-clrreject:清除所有拒绝使用的证书。
-badsig:损坏证书签名的最后一字节(用于测试)。
-*:使用任何支持的摘要算法。
-subject_hash_old:打印旧风格(MD5)的主题哈希值。
-issuer_hash_old:打印旧风格(MD5)的发行者哈希值。
-engine val:使用可能是硬件设备的引擎。
-preserve_dates:签名时保留现有的日期
# 1.查看证书详细信息: 如果你想查看证书的详细信息,你可以使用 -text 参数。例如:
openssl x509 -in cert.pem -text -noout
这会显示证书中的所有信息,包括版本、序列号、签名算法、发行者、有效期、主题、主题公钥信息、签名等。

# 2.将DER格式的证书转换为PEM格式: 如果你有一个DER格式的证书,你可以将其转换为PEM格式。例如:
openssl x509 -inform der -in cert.der -outform pem -out cert.pem
这会将 cert.der 文件转换为 PEM 格式并将结果保存到 cert.pem 文件中。

#将证书从 PEM 格式转换为 DER 格式:
openssl x509 -outform der -in mycert.pem -out mycert.der

# 3.验证证书是否过期: 如果你想验证一个证书是否将在下个月过期,你可以使用 -checkend 参数。例如:
openssl x509 -in cert.pem -checkend 2592000 -noout
这会在证书将在30天内过期时返回1,否则返回0。这里的2592000是30天的秒数。

# 4.查看证书的公钥: 如果你想查看证书中的公钥,你可以使用 -pubkey 参数。例如:
openssl x509 -in cert.pem -pubkey -noout
这会显示证书中的公钥。

# 5.创建自签名证书: 下面的命令会创建一个新的自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
这会生成一个新的4096位RSA密钥(key.pem),并使用这个密钥创建一个新的有效期为1年的自签名证书(cert.pem)。

# 6.证书转换为证书请求: 如果你有一个证书并希望将其转换为证书请求(CSR),你可以使用以下命令:
openssl x509 -x509toreq -in cert.pem -out request.csr -signkey key.pem
这会从cert.pem证书中创建一个新的CSR(request.csr),并使用私钥key.pem对其进行签名。

# 7.验证证书链: 你可以使用openssl来验证证书链。例如,如果你有一个证书(cert.pem),一个中间证书(intermediate.pem)和一个根证书(root.pem),你可以使用以下命令来验证证书链:
openssl verify -CAfile <(cat intermediate.pem root.pem) cert.pem
这会验证cert.pem是否由intermediate.pem和root.pem形成的证书链签名。如果验证成功,它会输出cert.pem: OK。

# 8.查看证书的指纹: 你可以使用下面的命令查看证书的SHA256指纹:
openssl x509 -in cert.pem -noout -sha256 -fingerprint
这会显示证书的SHA256指纹。

# 9.转换证书格式: 证书可以以多种格式存储和传输,包括二进制DER格式和文本化的PEM格式。以下命令将DER格式的证书转换为PEM格式:
openssl x509 -inform der -in certificate.der -out certificate.pem

# 10.从证书中提取公钥: 你可以使用以下命令从PEM格式的证书中提取公钥:
openssl x509 -pubkey -noout -in cert.pem > pubkey.pem

# 11.验证证书是否在某个日期有效: 您可以使用以下命令检查证书在某个特定日期是否有效:
openssl x509 -noout -dates -in cert.pem
这将显示证书的"notBefore"(不早于)和"notAfter"(不晚于)日期。

# 12.查看证书的主题和颁发者: 您可以使用以下命令查看证书的主题(证书所有者)和颁发者(签署证书的实体):
openssl x509 -noout -subject -issuer -in cert.pem

请记住,cert.pem,key.pem,request.csr,intermediate.pem和root.pem是你的文件名,你应该用你实际的文件名替换它们。。

openssl ca

openssl ca 命令用于根据CA(证书颁发机构)策略对证书请求进行签名。

# 下面是这个命令的一些参数及其含义:
-help: 显示帮助信息。
-verbose: 在处理过程中提供详细输出。
-config val: 指定一个配置文件。
-name val: 指定要使用的CA定义。
-subj val: 使用参数替代请求的主题。
-utf8: 输入字符为UTF8(默认为ASCII)。
-create_serial: 如果读取序列号失败,则创建新的随机序列号。
-rand_serial: 始终创建随机序列号;不存储它。
-multivalue-rdn: 启用对多值RDN的支持。
-startdate val: 证书的notBefore日期,YYMMDDHHMMSSZ格式。
-enddate val: 证书的notAfter日期,YYMMDDHHMMSSZ格式(覆盖-days)。
-days +int: 为证书认证的天数。
-md val: 要使用的消息摘要算法;可以通过openssl help看到可用列表。
-policy val: 要支持的CA策略。
-keyfile val: 私钥文件。
-keyform format: 私钥文件格式(PEM或ENGINE)。
-passin val: 输入文件的密码短语来源。
-key val: 如果私钥是加密的,则用于解码私钥的密钥。
-cert infile: CA证书。
-selfsign: 使用与其关联的密钥签署证书。
-in infile: 输入的PEM编码证书请求。
-out outfile: 输出文件的位置。
-outdir dir: 输出证书的位置。
-sigopt val:n:v 格式的签名参数。
-notext:不打印生成的证书。
-batch:不要问问题。
-preserveDN:不要重新排序 DN。
-noemailDN:不要将 EMAIL 字段添加到 DN。
-gencrl:生成一个新的 CRL。
-msie_hack:处理所有那些通用字符串的 msie 修改。
-crldays +int:直到下一个 CRL 到期的天数。
-crlhours +int:直到下一个 CRL 到期的小时数。
-crlsec +int:直到下一个 CRL 到期的秒数。
-infiles:最后一个参数,要处理的请求。
-ss_cert infile:文件包含一个要签名的自签名证书。
-spkac infile:文件包含 DN 和签名的公钥及挑战。
-revoke infile:撤销证书(在文件中给出)。
-valid val:添加关于证书(在文件中给出)的有效(未撤销)DB条目。
-extensions val:扩展部分(覆盖配置文件中的值)。
-extfile infile:要添加的带 X509v3 扩展的配置文件。
-status val:显示给定序列号的证书状态。
-updatedb:更新过期证书的 db。
-crlexts val:CRL 扩展部分(覆盖配置文件中的值)。
-crl_reason val:吊销原因。
-crl_hold val:保留指令,一个 OID。将撤销原因设置为 certificateHold。
-crl_compromise val:将妥协时间设置为 val 并将撤销原因设置为 keyCompromise。
-crl_CA_compromise val:将妥协时间设置为 val 并将撤销原因设置为 CACompromise。
-rand val:将文件加载到随机数生成器中。
-writerand outfile:将随机数据写入指定的文件。
-engine val:使用引擎,可能是硬件设备。
# 1.使用私有CA签发证书:
openssl ca -config /etc/ssl/openssl.cnf -in client.csr -out client.crt
这个命令使用 /etc/ssl/openssl.cnf 配置文件中定义的CA配置,来签发一个新的证书。输入证书请求文件为 client.csr,输出证书文件为 client.crt。

# 2.撤销证书:
openssl ca -config /etc/ssl/openssl.cnf -revoke client.crt
这个命令使用 /etc/ssl/openssl.cnf 配置文件中定义的CA配置,来生成一个新的CRL。输出CRL文件为 crl.pem。

# 3.使用特定策略签发证书:
openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -in client.csr -out client.crt
这个命令使用 /etc/ssl/openssl.cnf 配置文件中定义的CA配置,并使用名为 policy_anything 的策略,来签发一个新的证书。输入证书请求文件为 client.csr,输出证书文件为 client.crt

# 4.签署证书并附加自定义扩展:
openssl ca -config /etc/ssl/openssl.cnf -extensions usr_cert -in client.csr -out client.crt
在这个例子中,-extensions 参数指定了在签署证书时使用的扩展名。这些扩展在配置文件(这里是 /etc/ssl/openssl.cnf)中定义。

# 5.使用特定的序列号签署证书:
openssl ca -config /etc/ssl/openssl.cnf -subj "/C=US/ST=NY/L=New York/CN=example.com" -set_serial 123456789 -in client.csr -out client.crt
这个命令使用了 -set_serial 参数来为新签署的证书设置特定的序列号。

# 6.验证证书是否已被撤销:
openssl ca -config /etc/ssl/openssl.cnf -status 123456789
在这个例子中,-status 参数用来查询指定序列号的证书的状态。如果证书已被撤销,或者不存在,命令会打印出相应的消息。

请注意,上述命令中的 /etc/ssl/openssl.cnf 是 OpenSSL 的默认配置文件的位置

openssl req

openssl req 命令是用于处理 PKCS证书签名请求(CSR)的 OpenSSL 实用程序。这个命令可以创建新的证书签名请求,也可以处理已存在的请求。

#以下是 openssl req 命令的参数的含义和用法:

-help: 显示帮助信息。
-inform PEM|DER: 输入格式,PEM 或 DER。
-outform PEM|DER: 输出格式,PEM 或 DER。
-in infile: 输入文件。
-out outfile: 输出文件。
-key val: 要使用的私钥。
-keyform format: 密钥文件格式。
-pubkey: 输出公钥。
-new: 生成新的请求。
-config infile: 请求模板文件。
-keyout outfile: 密钥输出文件。
-passin val: 输入的私钥密码源。
-passout val: 输出文件的密码短语源。
-rand val: 将文件加载到随机数生成器中。
-writerand outfile: 将随机数据写入指定的文件。
-newkey val: 指定为类型:位数。
-pkeyopt val: 公钥选项,以 opt:value 的形式。
-sigopt val: 签名参数,以 n:v 的形式。
-batch: 在生成请求过程中不询问任何问题。
-newhdr: 在标题行中输出 "NEW"。
-modulus: RSA 模数。
-verify: 验证 REQ 上的签名。
-nodes: 不加密输出密钥。
-noout: 不输出 REQ。
-verbose: 详细输出。
-utf8: 输入字符为 UTF8(默认为 ASCII)。
-nameopt val: 各种证书名称选项。
-reqopt val: 各种请求文本选项。
-text: 请求的文本形式。
-x509: 输出 x509 结构,而非证书请求(某些 CA 需要此选项)。
-subj val: 设置或修改请求主题。
-subject: 输出请求的主题。
-multivalue-rdn: 启用对多值 RDN 的支持。
-days +int: 证书有效天数。
-set_serial val: 要使用的序列号。
-addext val: 额外的证书扩展 key=value 对(可以多次给出)。
-extensions val: 证书扩展部分(覆盖配置文件中的值)。
-reqexts val: 请求扩展部分(覆盖配置文件中的值)。
-precert: 添加一个 poison 扩展(暗示 -new)。
-engine val: 使用可能的硬件设备引擎。
-keygen_engine val: 指定用于密钥生成操作的引擎。
# 1.创建新的私钥和证书签名请求(CSR):
openssl req -new -newkey rsa:2048 -nodes -keyout mykey.pem -out mycsr.csr
这将创建一个新的 RSA 私钥 mykey.pem 和一个新的证书签名请求 mycsr.csr。-newkey rsa:2048 参数指定创建新的 RSA 密钥,长度为 2048 位。-nodes 参数表示不对生成的私钥进行加密。
openssl req -new -key /data/app2/priviete_key.pem -out /data/app2/app2.csr
这个是通过现有的私钥来创建证书签名请求

# 2.查看证书签名请求(CSR)的内容:
openssl req -in mycsr.csr -verify -noout -text
将显示 CSR 的详细信息,并验证其签名。-in mycsr.csr 参数指定要读取的 CSR 文件。-verify 参数表示要验证 CSR 的签名。-noout 参数表示不生成 CSR(因为我们只想验证和显示它,不想生成新的 CSR)。-text 参数表示以文本格式显示 CSR 的详细信息。

# 3.生成新的私钥和自签名证书:
openssl req -x509 -newkey rsa:4096 -nodes -keyout domain.key -out domain.crt -days 365
这个命令创建了一个新的 4096 位 RSA 私钥 "domain.key" 和一个新的自签名证书 "domain.crt"。证书的有效期限是 365 天,-nodes 选项表示私钥不应该被加密,所以在生成私钥时不会提示输入密码。
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
这个命令与第一个命令的主要区别在于它使用一个现有的私钥(位于 /etc/pki/CA/private/cakey.pem)来生成一个新的自签名的 X.509 证书,而不是生成一个新的私钥。这个证书的有效期为 3650 天,即 10 年。生成的证书被保存在 /etc/pki/CA/cacert.pem 文件中。
总的来说,第一个命令用于生成新的私钥和证书,而第二个命令使用现有的私钥来生成新的证书。

# 4.创建证书签名请求(CSR)使用现有的私钥:
openssl req -out CSR.csr -key privateKey.key -new
如果已经有一个私钥,这个命令可以用来生成一个新的证书签名请求。



openssl crl

openssl crl 命令是用于处理证书撤销列表(CRL)的OpenSSL实用工具。

# 下面是各个参数的含义:
help:显示帮助摘要。
-inform PEM|DER:输入格式,默认为 PEM。
-in infile:输入文件,默认为 stdin。
-outform PEM|DER:输出格式,默认为 PEM。
-out outfile:输出文件,默认为 stdout。
-keyform PEM|DER:私钥文件格式 (PEM 或 ENGINE)-key infile:用于签名 CRL 的私钥。
-issuer:打印颁发者 DN。
-lastupdate:设置 lastUpdate 字段。
-nextupdate:设置 nextUpdate 字段。
-noout:不输出 CRL。
-fingerprint:打印 CRL 指纹。
-crlnumber:打印 CRL 序号。
-badsig:损坏加载的 CRL 签名的最后一个字节(用于测试)。
-gendelta infile:与输入的 CRL 比较/对比的其他 CRL。
-CApath dir:使用 dir 中的证书验证 CRL。
-CAfile infile:使用文件中的证书验证 CRL。
-no-CAfile:不加载默认的证书文件。
-no-CApath:不从默认的证书目录加载证书。
-verify:验证 CRL 签名。
-text:打印出文本格式版本。
-hash:打印哈希值。
-nameopt val:各种证书名称选项。
-*:任何受支持的摘要。
-hash_old:打印旧式(MD5)哈希值。
# 1.查看 CRL 文件内容:
openssl crl -in crl.pem -noout -text
此命令会将 CRL 文件 crl.pem 的内容打印到控制台。

# 2.验证 CRL:
openssl crl -in crl.pem -CAfile ca.pem -noout -verify
此命令会使用 CA 证书文件 ca.pem 验证 CRL 文件 crl.pem。如果验证成功,该命令不会有输出。

# 3.生成新的空白 CRL:
openssl crl -gencrl -out crl.pem -config openssl.cnf
此命令将根据 OpenSSL 配置文件 openssl.cnf 中的设置生成一个新的空白 CRL,并将其保存为 crl.pem 文件

# 4.手动设置 CRL 的 lastUpdate 和 nextUpdate 字段:
openssl crl -in crl.pem -out new_crl.pem -lastupdate 20230101000000Z -nextupdate 20240101000000Z
此命令将读取 crl.pem 文件中的 CRL,然后手动设置 lastUpdate 和 nextUpdate 字段的值,并将结果保存为 new_crl.pem 文件。

# 5.生成 CRL 的指纹(摘要):
openssl crl -in crl.pem -noout -fingerprint
该命令将计算 crl.pem 文件中 CRL 的指纹(摘要)并输出到控制台。

openssl genpkey

openssl genpkey 命令用于生成新的私钥。

# 下面是各个参数的含义:
-help:显示帮助摘要。
-out outfile:输出文件。
-outform PEM|DER:输出格式,可以是 DER 或 PEM。
-pass val:输出文件的密码来源。
-paramfile infile:参数文件。
-algorithm val:公钥算法。
-pkeyopt val:设置公钥算法选项,格式为 opt:value。
-genparam:生成参数而不是私钥。
-text:以文本形式打印结果。
-*:用于加密私钥的密码算法。
-engine val:使用引擎,可能是硬件设备。
# 1.生成新的 RSA 私钥:
openssl genpkey -algorithm RSA -out private.key
这个命令会生成一个新的 RSA 私钥,并将其保存为 private.key 文件。

# 2.生成新的 ECDSA 私钥
openssl genpkey -algorithm EC -out private.key
这个命令会生成一个新的 ECDSA 私钥,并将其保存为 private.key 文件。

# 3.生成新的私钥和公钥对:
openssl genpkey -algorithm RSA -out private.key
openssl pkey -in private.key -pubout -out public.key
第一行命令生成一个新的 RSA 私钥,并将其保存为 private.key 文件。第二行命令读取私钥文件并生成对应的公钥,并将其保存为 public.key 文件。

# 4.生成新的私钥并使用密码进行加密:
openssl genpkey -algorithm RSA -out private.key -aes256
此命令将生成一个新的 AES 256 位加密的 RSA 私钥,并将其保存为 private.key 文件。在生成过程中,将要求输入密码以保护私钥。

# 5.使用预定义的参数生成密钥对:
openssl genpkey -algorithm RSA -paramfile params.txt -out private.key
该命令使用参数文件 params.txt 中定义的参数生成新的 RSA 密钥对,并将私钥保存为 private.key 文件。

# 6.生成参数而不生成私钥:
openssl genpkey -genparam -algorithm RSA -out params.txt
此命令将生成一组 RSA 参数,并将其保存在 params.txt 文件中,而不生成实际的私钥。

# 7.使用引擎生成私钥:
openssl genpkey -algorithm RSA -engine pkcs11 -out private.key
这个命令使用 pkcs11 引擎生成一个新的 RSA 私钥,并将其保存为 private.key 文件。这要求 OpenSSL 配置中已配置了正确的 pkcs11 引擎。

openssl verify

openssl verify 命令用于验证证书的有效性。

用法:

 openssl verify [options] cert.pem...

cert.pem...:要验证的一个或多个证书文件。

常用选项:

  • -CAfile infile:指定包含可信任根证书的文件。
  • -CApath dir:指定包含可信任根证书的目录。
  • -untrusted infile:指定包含不可信任中间证书的文件。
  • -verbose:打印详细的验证信息。
  • -show_chain:显示关于证书链的详细信息。
  • -purpose val:指定证书链的目的。
  • -verify_depth int:指定验证的证书链深度限制。
# 参数的含义
-help:显示帮助摘要。
-verbose:打印关于正在执行的操作的额外信息。
-CApath dir:指定一个目录,包含可信任的证书。
-CAfile infile:指定一个文件,包含可信任的证书。
-no-CAfile:不加载默认的证书文件。
-no-CApath:不加载默认的证书目录。
-untrusted infile:指定一个文件,包含不可信任的证书。
-trusted infile:指定一个文件,包含可信任的证书。
-CRLfile infile:指定一个文件,包含一个或多个 CRL(以 PEM 格式)。
-crl_download:尝试下载与此证书相关的 CRL 信息。
-show_chain:显示有关证书链的信息。
-nameopt val:各种证书名称选项。
-policy val:将策略添加到可接受的策略集中。
-purpose val:证书链的目的。
-verify_name val:验证策略名称。
-verify_depth int:链的深度限制。
-auth_level int:链的身份验证安全级别。
-attime intmax:验证的时间戳。
-verify_hostname val:预期的对等方主机名。
-verify_email val:预期的对等方电子邮件。
-verify_ip val:预期的对等方 IP 地址。
-ignore_critical:允许处理未处理的关键扩展。
-issuer_checks:(已弃用)。
-crl_check:检查叶证书的吊销。
-crl_check_all:检查完整链的吊销。
-policy_check:执行 RFC 5280 策略检查。
-explicit_policy:设置策略变量 require-explicit-policy。
-inhibit_any:设置策略变量 inhibit-any-policy。
-inhibit_map:设置策略变量 inhibit-policy-mapping。
-x509_strict:禁用证书的兼容性解决方案。
-extended_crl:启用扩展的 CRL 功能。
-use_deltas:使用增量 CRL。
-policy_print:打印策略处理诊断信息。
-check_ss_sig:检查根 CA 自签名。
-trusted_first:首先搜索信任存储区(默认)。
-suiteB_128_only:仅使用 Suite B 128 位模式。
-suiteB_128:允许使用 192 位算法的 Suite B 128 位模式。
-suiteB_192:仅使用 Suite B 192 位模式。
-partial_chain:接受由中间信任存储区 CA 锚定的链。
-no_alt_chains:(已弃用)。
-no_check_time:忽略证书有效时间。
-allow_proxy_certs:允许使用代理证书。
-engine val:使用引擎,可能是硬件设备。
# 1.验证单个证书:
openssl verify cert.pem
这将验证名为 cert.pem 的证书的有效性。

# 2.验证证书链:
openssl verify -CAfile ca.crt -untrusted intermediate.crt cert.crt
这将验证名为 cert.crt 的证书,并使用 ca.crt 作为根证书,intermediate.crt 作为中间证书

# 3.验证证书并显示详细信息:
openssl verify -verbose cert.pem
这将验证名为 cert.pem 的证书,并打印详细的验证信息。

# 4.验证证书链的有效性并显示证书链信息:
openssl verify -show_chain -CAfile ca.crt -untrusted intermediate.crt cert.crt
这将验证名为 cert.crt 的证书,使用 ca.crt 作为根证书,intermediate.crt 作为中间证书,并显示完整的证书链信息。

openssl list

openssl list 命令用于列出 OpenSSL 支持的命令、算法、方法等内容。

# 选项:
-1:以单列形式显示列表。
-commands:列出标准命令列表。
-digest-commands:列出消息摘要命令列表。
-digest-algorithms:列出消息摘要算法列表。
-cipher-commands:列出加密命令列表。
-cipher-algorithms:列出加密算法列表。
-public-key-algorithms:列出公钥算法列表。
-public-key-methods:列出公钥方法列表。
-disabled:列出已禁用的功能列表。
-missing-help:列出缺少详细帮助字符串的项。
-options val:列出指定命令的选项。
# 1.列出所有标准命令:centos8适用,centos7不适用
openssl list -commands

# 2.列出所有消息摘要算法:
openssl list -digest-algorithms

# 3.列出所有加密算法:
openssl list -cipher-algorithms
·
# 4.列出特定命令的选项:
openssl list -options enc

openssl dhparam

openssl dhparam 是 OpenSSL 工具包中的一个命令,用于处理Diffie-Hellman参数。Diffie-Hellman算法是一种允许两个通信双方在不直接传输任何秘密信息的情况下共同生成一个共享的秘密值的方法,经常用于TLS/SSL协议中的秘钥交换

# 选项
dhparam [options] [numbits]: 基本格式。这里的numbits是指要生成的Diffie-Hellman参数的位数,默认是2048位。
-inform arg: 定义输入文件的格式。它可以是DER(二进制格式)或PEM(ASCII格式)。
-outform arg: 定义输出文件的格式。同样,它可以是DER或PEM。
-in arg: 指定输入文件名。
-out arg: 指定输出文件名。
-dsaparam: 读取或生成DSA参数,然后转换为DH参数。这可以更快地生成参数,但可能不如真正的Diffie-Hellman参数那么安全。
-check: 检查DH参数是否正确。
-text: 以文本格式打印Diffie-Hellman参数。
-C: 输出为C代码,这样开发人员可以在其应用程序中直接使用它。
-2 和 -5: 这两个选项定义了在生成DH参数时使用的生成器值。在Diffie-Hellman中,2和5是常用的生成器。
numbits: 定义要生成的Diffie-Hellman参数的位数。例如,你可以指定2048来生成2048位的参数。
-engine e: 使用名为e的引擎,这可能是一个硬件设备,用于加速参数的生成或其他功能。
-rand file:file:...: 加载一个或多个文件或目录中的文件到随机数生成器。这用于增强生成的随机性。
-noout: 不输出结果。这在配合-check选项使用时很有用,当你只想检查参数但不输出它们时。

#案例:
为了在实际应用中生成Diffie-Hellman参数,您可能会运行以下命令:
openssl dhparam -out dhparams.pem 2048
这将生成一个2048位的DH参数并将其保存在dhparams.pem文件中。在设置TLS/SSL服务器时,这些参数可能会被要求。

./easyrsa

EasyRSA是一个轻量级的SSL证书管理工具,基于OpenSSL,用于简化创建自己的证书颁发机构(CA)和管理相关的证书。它经常用于为VPN和其他安全应用程序设置SSL/TLS证书。

# 1.安装EasyRSA工具
yum -y install easy-rsa

# 如果是通过github来安装的话,那么需要先下载对应的rpm包
https://github.com/OpenVPN/easy-rsa

# 2.初始化 Public Key Infrastructure (PKI)
# 在解压后的EasyRSA目录中,如果是通过yum来安装的话那么就在下面这个目录当中
cd /usr/share/easy-rsa/3
./easyrsa init-pki

# 3. 创建新的证书颁发机构(CA)
./easyrsa build-ca
# 当提示时,输入CA的密码和其他相关信息。

# 4.生成服务器证书和私钥
./easyrsa build-server-full servername nopass
# 其中servername是你为服务器证书选择的名称。使用nopass意味着生成的私钥不会加密。

# 5.生成客户端证书和私钥
./easyrsa build-client-full clientname nopass
# 其中clientname是你为客户端证书选择的名称。

# 6.撤销证书
# 如果你需要撤销某个证书:
./easyrsa revoke clientname
./easyrsa gen-crl
# 撤销的证书会被添加到CRL(证书撤销列表)中。

# 7.查看证书详情
openssl x509 -in pki/issued/clientname.crt -text -noout

# 8.自定义变量
# 在你的EasyRSA目录中,有一个vars.example文件。你可以复制这个文件到vars,然后编辑它来自定义一些默认的证书参数,例如证书的有效期、默认国家/省份等。
cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa-server/3/vars

# 9.生成Diffie-Hellman参数:
# 如果你在使用OpenVPN或其他需要Diffie-Hellman参数的服务,可以使用以下命令生成它:
./easyrsa gen-dh

# 10.生成TLS-Auth密钥:
# 为了增强OpenVPN的安全性,可以使用TLS-Auth功能,以下命令生成所需的密钥:
openvpn --genkey --secret ta.key

# 11.生成EC(椭圆曲线)证书:
# 如果你想使用EC(比RSA更安全且更高效):
./easyrsa set-ecparams secp384r1
./easyrsa build-ca
./easyrsa build-server-full servername nopass
./easyrsa build-client-full clientname nopass

# 12.导入和导出PKI项:
# EasyRSA还提供了导入和导出证书和私钥的功能,这在你需要迁移或备份你的PKI环境时非常有用。
# 导入请求:
./easyrsa import-req /path/to/external/request.req short_basename
# 这个命令用于导入外部生成的证书签名请求。request.req是外部的请求文件,而short_basename是你希望在EasyRSA环境中为这个请求命名的名字。
# 导出命令:
# 例如,export-p7, export-p8, 和 export-p12 是用于导出证书和私钥为特定格式的命令。其中最常用的是export-p12, 它可以创建一个包含证书、私钥和CA证书的.p12文件,通常用于一些应用或设备需要证书和私钥在一个文件中的场景。
./easyrsa export-p12 <filename_base>

# 13.清理旧的请求文件:
# 生成证书或私钥后,你可能会在pki/reqs目录中留下一些旧的请求文件。可以安全地删除它们,或者定期清理这些文件。
rm /path/to/easyrsa/pki/reqs/your_request_file.req

# 14.签名外部证书请求:
# 如果有人发送了一个证书签名请求(CSR)给你,并希望由你的CA签名,可以使用sign-req命令来处理它。
# 首先,你需要导入这个请求:
./easyrsa import-req /path/to/external/request.req short_basename
# 然后,使用sign-req来为它签名:
./easyrsa sign-req type short_basename
# 其中type可以是client或server,取决于证书的用途。

# 15.Inline Credentials for OpenVPN:
# 对于OpenVPN,你可能会希望使用单一的.ovpn配置文件,其中包含所有的证书和密钥信息。EasyRSA并没有直接提供此功能,但你可以手动将CA证书、客户端证书、客户端私钥以及(如果使用)TLS-Auth密钥嵌入到OpenVPN的配置文件中。
# 在.ovpn文件的相应部分,插入以下内容:
<ca>
(你的CA证书内容)
</ca>

<cert>
(你的客户端证书内容)
</cert>

<key>
(你的客户端私钥内容)
</key>

<tls-auth>
(你的TLS-Auth密钥内容)
</tls-auth>

# 16.更新CRL (证书吊销列表):
# 撤销证书后,你需要确保应用程序或服务(如OpenVPN)有更新的CRL。这样,它们就可以拒绝已撤销的证书的连接请求。
#证书吊销列表 (CRL) 是一个列出已被撤销的证书的列表。当一个证书被撤销,它的信息就会被加入到CRL中。
# 要生成或更新CRL,使用以下命令:
./easyrsa gen-crl
# 生成的CRL文件默认存储在pki/crl.pem。你需要确保此CRL文件可供你的服务(如OpenVPN)访问,并在其配置中引用。

# 17.密码管理:
# 当你使用EasyRSA生成证书和私钥时,可以选择是否为私钥设置密码。
# * 使用密码加密私钥增加了安全性,因为即使私钥文件被不当访问,没有密码也无法使用它。
# * 但这也意味着每次使用私钥(例如启动OpenVPN服务器)时都需要输入密码。
# 如果在创建时没有为私钥设置密码,但后来想要加上,你可以使用set-rsa-pass和set-ec-pass命令。

# 18.设置PKI目录和输出目录:
# 默认情况下,EasyRSA使用当前目录下的pki目录来存储PKI相关的文件。但你可以通过命令行参数来更改这个位置。
./easyrsa --pki-dir=/path/to/custom_pki_directory command
# 同样,--out-dir选项允许你指定证书和密钥的输出目录。

# 19.展示证书信息:
# 使用以下命令来展示证书请求或证书的详细信息。
# 查看证书请求:
./easyrsa show-req <filename_base>
# 查看证书:
./easyrsa show-cert <filename_base>

# 20.续订证书:
# 当证书接近到期时,你可以采取以下步骤进行续订:
# 生成一个新的证书请求。这可以使用与首次生成相同的命令完成。
# 使用你的CA签名这个新的请求。
# 使用新的证书替换旧的证书。确保也更新任何使用这个证书的服务或应用的配置。
# 命令
./easyrsa init-pki #初始化PKI目录和数据库,创建必要的文件和目录结构。
./easyrsa build-ca #创建新的证书颁发机构(CA)。创建主CA证书。当提示输入时,你可以为CA设置一个名称,并为私钥设置一个密码。
./easyrsa gen-dh # 生成Diffie-Hellman参数,通常用于OpenVPN等应用。
./easyrsa gen-req myserver nopass #生成新的证书签名请求(CSR)。这用于创建一个新的证书请求,可以发送给CA进行签名。nopass是不输入密码。
<filename_base>: 为生成的请求文件和密钥设定一个基础名称。
nopass: 如果添加此选项,私钥不会被加密。

./easyrsa sign-req client myserver
./easyrsa sign-req server myserver #使用CA签署证书请求。使用CA签署证书请求。这实际上是将证书签名请求 (CSR) 转化为一个完整的证书的过程。在这个过程中,CA的私钥用于签署CSR,并生成一个公开证书。
<type>: 可以是 client 或 server,指明是签署客户端还是服务器证书。
<filename_base>: 之前用gen-req命令创建的文件名基础。

# 快速生成并签署客户端或服务器的证书和密钥。这两个命令是为了简化流程。它们结合了生成CSR、私钥以及使用CA进行签名的步骤。
./easyrsa build-client-full client1 nopass
./easyrsa build-server-full server1 nopass

./easyrsa revoke client1 #撤销证书。撤销之前颁发的证书。撤销证书后,相关证书将不再被认为是有效的。
./easyrsa renew client1 #更新即将到期的证书。
./easyrsa build-serverClient-full both1 nopass #生成一个可以同时作为服务器和客户端的证书。
./easyrsa gen-crl #生成证书撤销列表。生成证书撤销列表 (CRL)。CRL列出了所有被撤销的证书。许多服务(如OpenVPN)会使用CRL来拒绝撤销证书的连接请求。
./easyrsa update-db #更新内部数据库,特别是撤销证书后。

# 显示请求、证书或CA的详细信息。
./easyrsa show-req myserver
./easyrsa show-cert client1
./easyrsa show-ca

./easyrsa import-req /path/to/external.csr client2 #导入从外部生成的证书签名请求。这使得外部用户可以请求证书,然后由CA签名。

#export-p7, export-p8 和 export-p12
./easyrsa export-p12 client1 #以PKCS#7、PKCS#8和PKCS#12格式导出证书。这些格式可以与其他工具或系统兼容。

#set-rsa-pass 和 set-ec-pass
#为RSA或EC密钥设置或更改密码。
./easyrsa set-rsa-pass myserver 

./easyrsa upgrade type #升级证书类型,例如从RSA到EC。

ping

在 Linux 系统中,ping 是一个用于测试网络连接性的命令行工具。它可以向指定的 IP 地址或域名发送一个 ICMP Echo 请求,并等待对方的响应。通过分析响应的时间和状态,可以判断网络的连通性和响应速度。

下面是一些常用的 ping 命令选项:

  • ping IP地址或域名 :向指定的 IP 地址或域名发送 ICMP Echo 请求。
  • -c 次数 :指定发送 ICMP Echo 请求的次数,默认为无限次。
  • -s 大小 :指定 ICMP Echo 请求的数据包大小,默认为 56 字节。
  • -i 秒数 :指定发送 ICMP Echo 请求的时间间隔,默认为 1 秒。
  • -w 秒数 :指定等待响应的超时时间,默认为 2 秒。
  • -q :以安静模式运行,只显示最终结果,不显示详细信息。
  • -v :以详细模式运行,显示每个 ICMP Echo 请求的详细信息。

用 ping 命令可以快速检测网络的连接性,以及网络的延迟和响应速度。如果 ping 命令返回的结果是“目标主机不可达”或“连接超时”等错误信息,则说明网络连接存在问题,需要进一步排查。如果 ping 命令返回的结果正常,则说明网络连接正常,可以进行其他网络操作。

  1. -c:指定发送的数据包数量。例如,ping -c 4 example.com将向example.com发送4个数据包。
  2. -i:指定数据包发送间隔(以秒为单位)。例如,ping -i 2 example.com将每隔2秒发送一个数据包。
  3. -t(仅适用于Windows):指定TTL(Time to Live)值。例如,ping -t 128 example.com将使用TTL值128发送数据包。
  4. -a(仅适用于Windows):指定在接收到回复时发出声音。例如,ping -a example.com
  5. -w(仅适用于Windows):指定等待每个回复的超时时间(以毫秒为单位)。例如,ping -w 500 example.com将等待500毫秒的超时。
  6. -W(仅适用于Linux):指定等待每个回复的超时时间(以秒为单位)。例如,ping -W 1 example.com将等待1秒的超时。
  7. -s(仅适用于Linux):指定发送的数据包大小(以字节为单位)。例如,ping -s 56 example.com将发送大小为56字节的数据包。
  8. -l(仅适用于Windows):指定发送的数据包大小(以字节为单位)。例如,ping -l 56 example.com将发送大小为56字节的数据包。
  9. -f(仅适用于Linux):指定发送“洪水”模式数据包。在这种模式下,数据包将尽可能快地发送,而不等待接收到回复。通常需要管理员权限。例如,ping -f example.com
  10. -q(仅适用于Linux):指定以“安静”模式运行,仅显示总结信息。例如,ping -q example.com

ps

在Linux操作系统中,ps命令是一种常用的命令行工具,用于查看系统中运行的进程信息。以下是关于ps命令的详细讲解:

语法:

ps [选项]

BSD 风格选项:

  • a:显示终端上的所有进程,包括其他用户的进程。
  • u:显示更详细的进程信息,如用户、CPU使用率、启动时间等。
  • x:显示没有控制终端的进程。
  • e:显示环境变量信息。

UNIX 风格选项:

  • -f:显示完整的格式化输出,包括父进程ID、启动时间等。
  • -l:显示长列表格式,包括更多关于进程的详细信息。
  • -o:自定义输出格式,可以选择要显示的字段。
  • -p:指定要显示的进程ID。
  • -t:指定要显示的TTY或终端。
  • -C:显示指定进程的信息
  • -e:显示所有进程。
  • -u:指定要显示的用户
  • -A:与 -e 相同,显示所有进程。
  • -G:指定要显示的进程组。
  • -T:显示进程的线程信息。
  • -a:当前终端中的进程。

常用输出字段:

  • USER:进程所属的用户名。
  • PID:进程的ID。
  • %CPU:进程使用的CPU占用率。
  • %MEM:进程使用的内存占用率。
  • VSZ:进程使用的虚拟内存大小。
  • RSS:进程使用的实际内存大小。
  • TTY:进程所属的终端。
  • STAT:进程的状态。
  • START:进程的启动时间。
  • TIME:进程使用CPU的时间。

top 是一个实时显示系统中进程状态的工具。在 Linux 中,进程有多种状态,top 命令中的 STAT 列展示了进程的当前状态。以下是 Linux 系统中的进程状态:

  1. R(Running):进程处于运行或者可运行(即在运行队列中)的状态。
  2. S(Sleeping):进程处于可中断睡眠状态,通常是等待某个条件得到满足,如等待 I/O 完成或等待某个信号。
  3. D(Uninterruptible sleep):进程处于不可中断睡眠状态,通常是在执行关键内核代码,如磁盘 I/O。在此状态下,进程不会响应任何信号。
  4. T(Stopped):进程被停止,例如收到了 SIGSTOP、SIGTSTP、SIGTTIN 或 SIGTTOU 信号。进程可以通过 SIGCONT 信号重新启动。
  5. t(Tracing stop):进程被跟踪(例如,通过 ptrace),进程暂停执行。
  6. Z(Zombie):僵尸进程。进程已经结束,但是其父进程尚未回收(即没有调用 wait() 或 waitpid())。僵尸进程不占用系统资源,但会在进程表中留下一个占位符,直到父进程回收它为止。
  7. X(Dead):已死的进程,此状态很少出现,它表示进程已经被回收,但仍然存在于进程表中。

top 命令中的 STAT 列可能会在进程状态字母后附加一些标志,这些标志提供了关于进程的额外信息:

  • <:高优先级(nice 值为负数)进程。
  • N:低优先级(nice 值为正数)进程。
  • L:进程有一些页面被锁定在内存中。
  • s:进程是会话(session)的领导者。
  • l:进程是多线程的(使用了 CLONE_THREAD)。
  • +:进程位于前台进程组
  • Ss:组合状态,表示进程处于睡眠状态并且是会话领导者。
  • Ss+:组合状态,表示进程处于睡眠状态,是会话领导者,并且在前台进程组中。
  • R+:组合状态,表示进程处于运行状态,并且在前台进程组中。
  • Ssl:组合状态,表示进程处于睡眠状态,是会话领导者,并且是多线程的

ps输出属性:

  1. pid:进程 ID。
  2. ppid:父进程 ID。
  3. ruser:真实用户名。
  4. user:有效用户名。
  5. group:有效组名。
  6. rgroup:真实组名。
  7. comm:命令名(可执行文件名)。
  8. args:命令行参数。
  9. cmd:与 args 相同,显示完整的命令行参数。
  10. etime:进程运行时间。
  11. cputime:进程占用的 CPU 时间。
  12. nice:进程的 nice 值。
  13. pcpu:进程占用的 CPU 使用百分比。
  14. pmem:进程占用的内存使用百分比。
  15. rss:进程占用的驻留集大小(单位:千字节)。
  16. size:进程占用的虚拟内存大小(单位:千字节)。
  17. stat:进程的状态(如 R 表示运行,S 表示睡眠等)。
  18. start:进程启动时间。
  19. lstart:进程启动时间,以完整的日期格式显示。
  20. tty:进程关联的终端。
  21. time:进程累积占用的 CPU 时间。
  22. vsz:进程占用的虚拟内存大小(单位:千字节)。
  23. wchan:进程进入内核函数的名称(如果进程处于睡眠状态)。
  24. psr:进程当前运行在哪个 CPU(处理器亲和性)
  25. ni:nice 值,是一个表示进程优先级的整数,范围从 -20(最高优先级)到 19(最低优先级)。普通用户启动的进程具有 0 的 nice 值,而系统任务和核心服务通常具有更高的优先级(负 nice 值)。
  26. pri:priority 优先级,是一个表示内核调度优先级的整数。优先级越低,进程优先级越高。这个值是根据进程的 nice 值和其他因素(如实时调度策略)计算得出的。
  27. rtprio:实时优先级,表示进程的实时调度优先级。实时进程按照不同的调度策略(如 SCHED_FIFO 或 SCHED_RR)运行,具有高于普通进程的优先级。实时优先级的范围通常是 1 到 99,其中 1 是最高优先级。
  28. psr:processor CPU 编号,表示进程当前运行在哪个 CPU 上。对于具有多个处理器或核心的系统,了解进程在哪个 CPU 上运行可能对性能分析和调试很有帮助。

显示当前用户的进程:

ps

使用 BSD 风格选项显示所有用户的进程:

ps aux

使用 Unix 风格选项显示所有用户的进程信息:

ps -e

显示当前用户进程信息:

ps -u username

以完整格式显示所有进程信息:

ps -ef

以长格式显示所有进程信息:

ps -l

显示指定进程 ID 的详细信息:

ps -p PID

自定义输出格式:

ps -eo pid,user,comm
ps -eo pid,ni,pri,rtprio,psr,comm

显示当前终端上所有进程信息:

ps -a

显示无终端进程信息:

ps -x

显示指定进程的信息:

ps -C processname

pwd

pwd 命令是 Linux 系统中的一个常用命令,用于显示当前工作目录的完整路径。在 Linux 系统中,每个文件和目录都有一个相对于根目录的路径,而 pwd 命令可以帮助用户确定当前工作目录在整个文件系统中的位置。

显示当前工作目录的完整路径:

pwd

显示当前工作目录的符号链接路径:

pwd -P

需要注意的是,如果当前工作目录被更改,那么 pwd 命令将显示更改后的工作目录的完整路径。另外,如果当前目录是符号链接,那么默认情况下 pwd 命令将显示符号链接路径,而不是符号链接指向的路径。如果需要显示符号链接指向的路径,可以使用 pwd -P 命令选项。

pstree

pstree是一个在Linux中用来展示系统进程树的实用程序。它以树状结构的形式显示正在运行的进程,以便更容易地查看进程之间的层次关系和依赖关系。pstree将进程按照父子关系进行分组,从而帮助用户识别各个进程之间的从属关系。

pstree的基本语法如下:

pstree [options] [pid or username]

这里有一些常用的pstree选项:

  • -p:显示进程的PID(进程ID)。
  • -n:根据PID排序。
  • -u:在进程名后面显示进程的所属用户。
  • -a:显示进程的命令行参数。
  • -G:使用VT100线路绘制树状结构。
  • -l:不截断长行。
  • -h--highlight-all:高亮显示当前进程及其所有子进程。
  • -H:高亮显示指定PID的进程及其所有子进程。
  • -g:显示进程组。

例如,要显示包含进程ID的进程树,可以使用以下命令

pstree -p

要查看特定用户的进程树,只需在命令行中输入用户名即可:

pstree username

paste

paste 命令是 Linux 中常用的文本合并工具,用于将多个文件或文本流的内容合并成一列或一行。paste 命令会将多个文件或文本流中的内容按照列或行合并在一起,并以 TAB 或指定的分隔符分隔各列或各行的内容。

下面是 paste 命令的基本用法:

paste [options] file1 file2 ...

paste 命令常用的选项有:

  • -d:指定列或行之间的分隔符。
  • -s:将多行合并成一行。
  • -z:使用 NULL 作为分隔符。

下面是一些示例:

  1. 将两个文件的内容合并成一列:
$ paste file1 file2
  1. 将两个文件的内容合并成一行:
$ paste -s file1 file2
  1. 指定列或行之间的分隔符:
$ paste -d "," file1 file2

该命令会使用逗号作为列或行之间的分隔符。

  1. 使用 NULL 作为分隔符:
$ paste -z file1 file2

该命令会使用 NULL 作为列或行之间的分隔符。

  1. 从标准输入中读取数据

paste 命令也可以从标准输入中读取数据,并将其合并成一列或一行。例如,将两个命令的输出合并成一行:

$ ls | paste -s -d ","

该命令会将 ls 命令的输出和逗号合并成一行输出。

  1. 处理多个文件中的数据

paste 命令还可以同时处理多个文件中的数据,并将其合并成一列或一行。例如,将多个文件中的数据按行合并:

$ paste -d "\n" file1 file2 file3 ...

该命令会将 file1file2file3 等多个文件中的数据按行合并

  1. 指定输出的行数

paste 命令可以使用 -s 选项指定输出的行数。例如,将多个文件的前三行合并成一行:

$ head -n 3 file1 file2 file3 | paste -s -d " "

该命令会将 file1file2file3 文件的前三行合并成一行,并使用空格作为分隔符输出。其中,head -n 3 file1 file2 file3 命令会输出三个文件的前三行内容,paste -s -d " " 命令会将这些内容按列合并成一个文件,并使用空格作为分隔符输出。

  1. 将多列文件转换为一列

如果有一个多列文件,想将它们转换为一列,可以使用 paste 命令结合 awk 命令实现,示例如下:

$ paste file1 file2 file3 | awk '{ for (i=1; i<=NF; i++) print $i }' > output.txt

该命令将 file1file2file3 按列合并在一起,然后使用 awk 命令将各列内容逐行输出,最终结果保存到 output.txt 文件中。

  1. 多行合并成一行

如果有多行文本需要合并成一行,可以使用 paste 命令的 -s 选项,示例如下:

$ cat input.txt | paste -s -d " "

该命令将 input.txt 文件的多行内容合并成一行,并使用空格作为分隔符输出。

parted

Parted是一个用于对硬盘进行分区的命令行工具。它可以创建、删除、调整和移动硬盘分区,并支持多种不同的分区格式。下面是一些Parted命令的示例:

  1. 查看硬盘分区情况

使用 parted -l 命令可以查看系统中所有硬盘的分区情况。例如:

$ sudo parted -l

该命令将列出所有硬盘的分区情况,以及硬盘的大小、文件系统类型等信息。

  1. 创建分区

要创建一个新的分区,可以使用mkpart命令。例如,要创建一个大小为10 GB的新分区,可以输入:

$ sudo parted /dev/sda mkpart primary 0GB 10GB

这将在/dev/sda上创建一个新的主分区,其起始位置为0GB,结束位置为10GB。

  1. 删除分区

要删除分区,可以使用rm命令。例如,要删除/dev/sda上的第3个分区,可以输入:

$ sudo parted /dev/sda rm 3

这将删除/dev/sda上的第3个分区。

  1. 调整分区大小

要调整分区的大小,可以使用resizepart命令。例如,要将/dev/sda上的第1个分区调整为20 GB,可以输入:

$ sudo parted /dev/sda resizepart 1 20GB

这将将/dev/sda上的第1个分区大小调整为20 GB。

  1. 移动分区

要移动分区,可以使用move命令。例如,要将/dev/sda上的第2个分区移动到位置50GB处,可以输入:

$ sudo parted /dev/sda move 2 50GB
  1. 切换分区单位

默认情况下,Parted命令使用的是MiB(兆字节)作为分区大小的单位。要切换到其他单位,可以使用unit命令。例如,要切换到GB作为单位,可以输入:

$ sudo parted /dev/sda unit GB
  1. 查看分区信息

要查看有关某个特定分区的详细信息,可以使用print命令。例如,要查看/dev/sda上的第1个分区的详细信息,可以输入:

$ sudo parted /dev/sda print 1

该命令将显示有关该分区的信息,例如分区的大小、起始位置、文件系统类型等。

  1. 格式化分区

要格式化分区以便在其上创建文件系统,可以使用mkfs命令。例如,要在/dev/sda上的第1个分区上创建ext4文件系统,可以输入:

$ sudo mkfs.ext4 /dev/sda1

这将格式化/dev/sda上的第1个分区,并在其上创建一个ext4文件系统。

  1. 创建磁盘分区表

在创建分区之前,需要先创建磁盘分区表。常见的磁盘分区表有两种类型:MS-DOS和GPT。可以使用以下命令创建一个GPT分区表

parted /dev/sda mklabel gpt

partprobe

在Linux系统中使用磁盘时,有时需要手动分区,或者可能已经添加了一个新的磁盘并希望操作系统知道它已经存在。这时,就可以使用partprobe命令通知内核分区表已经被修改。

partprobe命令的作用是告诉内核重新读取分区表并更新内存中的信息。可以通过一下两种方式之一来完成:

  1. 使用块设备路径作为参数,重新读取设备的分区表。例如:
partprobe /dev/sda

这将告诉内核重新读取/dev/sda上的分区表。

  1. 如果不指定参数,则partprobe将扫描所有已知的块设备(重新读取所有磁盘的分区表)并更新内存中的信息。例如:
partprobe

注意:使用partprobe命令修改分区表不会立即生效,而是需要重启系统或重新加载相关设备驱动程序以使其生效。但是,使用partprobe命令可以帮助避免手动操作分区表所带来的风险。

除了上面常规用途,partprobe命令还可以用于一下情况:

  1. 更新RAID阵列配置:如果系统中有软件RAID阵列,则在修改分区表后,可以使用partprobe命令通知RAID阵列管理器更新配置。
  2. 更新LVM逻辑卷:如果使用LVM(逻辑卷管理器)来管理硬盘分区,则修改分区表后需要使用partprobe命令通知LVM更新分区信息。
  3. 更新iSCSI目标设备:如果使用iSCSI技术将远程存储设备映射到本地系统上,则在添加或删除目标设备后,使用partprobe命令来通知系统更新新设备列表。

注意:并不是所有的Linux发行版都默认安装了partprobe命令。如果在你的系统中找不到该命令,可以尝试使用partx命令来达到相同的效果。partx命令是partprobe命令的一种替代方案,它与partprobe的用法类似,但其默认情况下会扫描所有已知的设备。

  1. 手动指定一个分区的信息
sudo partprobe /dev/sda --set-partition=1 --type=0x83 --start=2048 --end=1048575
  1. 显示分区信息
sudo partprobe -s
  1. 强制重新加载
sudo partprobe -d /dev/sda
  1. 检查特定设备的分区信息并打印到stdout
sudo partprobe -s /dev/sda
  1. 在特定的设备上创建一个新的分区
sudo partprobe /dev/sda && sudo fdisk /dev/sda
  1. 显示partprobe命令的版本信息
sudo partprobe --version
  1. 指定一个分区的信息并创建它
sudo partprobe /dev/sda --set-partition=1 --typr=0x83 --start=2048 --end=1048575 --create

passwd

在Linux中,passwdchpasswd命令都用于更改用户的密码。但是,它们在实现方式和使用方法上略有不同。下面是它们的详细解释:

passwd命令是Linux中的标准命令之一,它用于更改用户密码。passwd命令的使用非常简单,只需要在终端中输入passwd,然后按照提示输入当前用户的密码,然后输入新密码并再次确认即可。例如:

$ passwd
Changing password for user1.
(current) UNIX password:
New password:
Retype new password:
passwd: password updated successfully

passwd命令会将新密码保存在系统的密码文件中。密码文件的位置和格式取决于您的Linux发行版和配置。通常,密码文件位于/etc/passwd,而加密的密码则位于/etc/shadow

需要注意的是,passwd命令只能用于更改当前用户的密码。如果您想更改其他用户的密码,则需要使用su命令切换到目标用户,并在该用户的环境下运行passwd命令。

read

read命令是Shell脚本中用于读取用户输入的一个内置命令。它从标准输入(默认为键盘)接收输入,并将输入的数据存储在一个或多个变量中。read命令具有多种选项,可以用于定制输入的处理方式。

下面是read命令的一些常用选项:

  • -a array:将输入的数据解析为数组。每个空格分隔的单词作为数组的一个元素。
  • -p prompt:在读取输入之前,显示一个提示字符串。
  • -t timeout:设置等待用户输入的超时时间(以秒为单位)。如果在超时时间内没有收到输入,read命令将失败。
  • -n nchars:从输入中读取指定数量的字符,而不是整行。
  • -d delimiter:指定输入的分隔符。默认情况下,换行符(\n)作为输入的结束标志。
  • -s:静默模式。在此模式下,用户输入的数据不会显示在屏幕上。这在处理敏感数据(如密码)时非常有用。

这里有一个简单的示例来演示read命令的基本用法:

#!/bin/bash

# 使用-p选项显示提示信息
read -p "请输入您的名字: " name

# 没有选项的简单read命令
echo "请输入您的年龄:"
read age

echo "您的名字是:$name"
echo "您的年龄是:$age"

在这个示例中,我们使用-p选项向用户显示输入提示。然后,我们读取两个变量:nameage。最后,我们打印出这两个变量的值。

rm

rm 命令是 Linux 系统中的一个常用命令,用于删除文件或目录。在 Linux 系统中,用户可以使用 rm 命令删除不需要的文件和目录,以释放磁盘空间和管理文件系统。

删除一个文件:

rm myfile.txt

递归删除一个目录及其子目录和文件:

rm -r mydir

强制删除文件或目录,不提示确认:

rm -f myfile.txt
rm -rf mydir

需要注意的是, rm 命令删除的文件和目录都不会进入垃圾回收站,而是直接从文件系统中删除。因此,在使用 rm 命令时需要格外小心,以免误删重要文件或目录。

此外,如果要删除目录及其所有子目录和文件,需要使用 -r 选项进行递归删除。如果要强制删除文件或目录,可以使用 -f 选项。强烈建议在使用 rm -rf 命令之前进行双重检查,以避免误删重要数据。

rev

在Linux中,rev命令是一种文本处理工具,用于将文件中每一行的字符顺序颠倒,并将结果输出到标准输出流中。rev命令可以接受一个或多个文件作为输入,并逐行反转每个文件的内容。以下是一些关于rev命令的详细信息:

rev命令的基本语法如下:

rev [选项] 文件名

其中,选项包括:

  • -V--version:显示版本信息
  • -h--help:显示帮助信息
  • -c--characters:将每个字符当做单独的文本行进行反转
  • -t--tac:反转文件中每行的顺序,类似于 tac 命令的功能
  1. 反转文本文件中的每一行

使用rev命令反转文本文件中的每一行的语法格式为:

rev 文件名
  1. 反转多个文件中的每一行

使用rev命令反转多个文件中的每一行的语法格式为:

rev 文件1 文件2 ...
  1. 将反转结果输出到文件

使用rev命令将反转结果输出到文件的语法格式为:

rev 文件名 > 输出文件名
  1. 反转定界符分隔的字段

使用rev命令反转定界符分隔的字段的语法格式为:

rev -d '定界符' 文件名

例如,反转名为test.txt的文件中每一行以"|"分隔的字段的字符顺序,可以执行以下命令:

rev -d '|' test.txt

rndc

rndc (远程名字守护程序控制器)命令是 BIND DNS 服务器中用于管理的命令行工具,用来控制运行的服务器。rndc 通过发送加密的命令到名字服务器上,提供了一个安全的方式来管理服务器。该命令主要用于管理员在不重启 BIND 服务的情况下,对 BIND 服务进行管理。

# rndc基本格式:
rndc [options] command [command-options]

options:这些选项是对 rndc 工具的设置,而非针对单个命令的。
command:你想要 rndc 执行的命令。
command-options:针对特定命令的一些额外选项。

# options:
-b address:设置源 IP 地址。
-c config:使用特定的配置文件,默认为 /etc/rndc.conf。
-s server:指定要连接的服务器名或 IP 地址。
-p port:指定远程服务器端口号,默认为 953-k key-file:指定密钥文件,其覆盖 rndc.conf 中的密钥设置。
-y key:指定 TSIG 密钥名称。
-r:打开递归处理。
-V:打开详细输出模式。

# command:
1.addzone zone [class [view]] { zone-options }:此命令允许你在运行的 BIND 服务器中添加新的 DNS 区域。
2.delzone [-clean] zone [class [view]]:此命令允许你从运行的 BIND 服务器中删除一个存在的 DNS 区域。
3.dnstap -reopen:此命令关闭、截断并重新打开 DNSTAP 输出文件。
4.dnstap -roll count:此命令关闭、重命名并重新打开 DNSTAP 输出文件。
5.dumpdb [-all|-cache|-zones|-adb|-bad|-fail] [view ...]:此命令将服务器的缓存(例如所有的、区域的、地址的、坏的或失败的缓存)转储到转储文件(named_dump.db)中。
6.flush:此命令清空服务器的所有缓存。
7.flush [view]:此命令清空服务器中特定视图的缓存。
8.flushname name [view]:此命令从服务器的缓存中清空给定的名称。
9.flushtree name [view]:此命令从服务器的缓存中清空给定名称下的所有名称。
10.freeze:此命令暂停对所有动态区域的更新。
11.freeze zone [class [view]]:此命令暂停对特定动态区域的更新。
12.halt:此命令在不保存待处理的更新的情况下停止服务器。
13.halt -p:此命令在不保存待处理的更新的情况下停止服务器,并报告进程 ID。
14.loadkeys zone [class [view]]:此命令更新区域的密钥,但不立即签名。
15.managed-keys refresh [class [view]]:此命令检查 RFC 5011 键的更改。
16.managed-keys status [class [view]]:此命令显示 RFC 5011 管理的键的信息。
17.managed-keys sync [class [view]]:此命令将 RFC 5011 管理的键写入磁盘。
18.modzone zone [class [view]] { zone-options }:此命令修改区域的配置,需要开启 allow-new-zones 选项。
19.notify zone [class [view]]:此命令为特定区域重新发送 NOTIFY 消息。
20.notrace:此命令将调试级别设置为 021.nta -dump:列出所有设置的否定信任锚点。
22.nta [-lifetime duration] [-force] domain [view]:为指定的域设置一个否定信任锚点,这将禁用DNSSEC验证。 -lifetime 参数用于指定否定信任锚点的持续时间(最长一周),而 -force 参数则会阻止否定信任锚点在其全周期内过早到期。
23.nta -remove domain [view]:删除一个否定信任锚点,这将重新启用对指定域的DNSSEC验证。
24.querylog [ on | off ]:启用或禁用查询日志记录。
25.reconfig:重新加载配置文件和新的区域,但不会重新加载已存在的区域。
26.recursing:转储当前正在递归查询的查询(这些信息被写入named.recursing文件)。
27.refresh zone [class [view]]:立即调度对指定区域进行维护。
28.reload:重新加载配置文件和所有区域。
29.reload zone [class [view]]:重新加载一个特定区域。
30.sfer zone [class [view]]:重新传输一个区域,而无需检查序列号。
31.scan:扫描可用的网络接口以查找变化。
32.secroots [view ...]:将安全根写入到secroots文件。
33.serve-stale ( yes | no | reset ) [class [view]]:控制是否返回过期的回答。
34.showzone zone [class [view]]:打印一个区域的配置。
35.sign zone [class [view]]:更新区域密钥,并根据需要签名。
36.signing -clear all zone [class [view]]:删除所有已完成指定区域签名的密钥的私有记录
37.signing -clear <keyid>/<algorithm> zone [class [view]]:删除表示指定密钥已完成对指定区域签名的私有记录。
38.signing -list zone [class [view]]:列出显示给定区域的DNSSEC签名状态的私有记录。
39.signing -nsec3param hash flags iterations salt zone [class [view]]:如果区域已经签名,则添加NSEC3链。如果区域尚未签名,则使用NSEC3链对区域进行填充。
40.signing -nsec3param none zone [class [view]]:从区域中删除NSEC3链。
41.signing -serial <value> zone [class [view]]:设置区域的序列号为指定的值。
42.stats:将服务器统计信息写入统计文件。
43.status:显示服务器的状态。
44.stop:将挂起的更新保存到主文件,并停止服务器。
45.stop -p:将挂起的更新保存到主文件,并停止服务器,同时报告进程ID。
46.sync [-clean]:将所有动态区域的更改转储到磁盘,并可以选择删除它们的日志文件。
47.sync [-clean] zone [class [view]]:将一个区域的更改转储到磁盘,并可以选择删除其日志文件。
48.thaw:启用所有动态区域的更新并重新加载它们。
49.thaw zone [class [view]]:启用一个冻结的动态区域的更新并重新加载它。
50.trace:将调试级别增加一个单位。
51.trace level:更改调试级别。
52.tsig-delete keyname [view]:删除通过TKEY协商的TSIG密钥。
53.tsig-list:列出所有当前活动的TSIG密钥,包括静态配置的密钥和通过TKEY协商的密钥。
54.validation [ yes | no | status ] [view]:启用或禁用DNSSEC验证。
55.zonestatus zone [class [view]]:显示一个区域的当前状态。
# 要使用 rndc,首先需要在 DNS 服务器上配置好 rndc,并在 /etc/rndc.conf 文件中设置好与服务器交互所需的密钥和其他选项。
# 在已经配置好 rndc 的服务器上,你可以直接运行 rndc 命令,如下所示:
rndc reload
#上述命令将使 BIND 服务器重新加载所有区域文件。


# 查看dns服务器(bind)的缓冲
# 如果你想查看 rndc 缓存了哪些 DNS 信息,你应该使用 rndc dumpdb 命令。这将转储服务器的缓存(包括 DNS 缓存)到 named 的转储文件中。具体命令如下:
rndc dumpdb
# 然后,你可以查看名为 named_dump.db 的转储文件。这个文件通常位于 /var/cache/bind/ 或者 /var/named/ 目录下,取决于你的系统配置。你可以使用 cat 或 less 等命令来查看这个文件的内容。例如:
cat /etc/named.conf

dump-file 	"/var/named/data/cache_dump.db";

# 可以看到缓冲文件的位置

# 请注意,如果你运行的 BIND 服务器配置为不允许缓存转储,那么这个命令可能无法工作。在这种情况下,你需要修改你的 BIND 配置以允许缓存转储。

cat /var/named/data/cache_dump.db
rndc reload:重新加载所有区域和配置。如果你更改了 BIND 的配置或者某个区域的数据,你可以使用这个命令让改变立即生效,而不用重启整个服务器。

rndc refresh [zone]:强制刷新指定的区域。这将导致 BIND 尝试从它的主服务器获取区域的最新拷贝。

rndc flush:清空服务器的缓存。这可能有助于解决由于缓存过期或者损坏数据引起的问题。或者systemctl restart named,重启服务也会清掉缓存

rndc status:显示服务器的状态。这将给出服务器的一些基本信息,如运行时间、加载的区域数量等。

rndc stop:停止服务器。这将安全地停止 BIND,保存所有未决的更改并清理所有资源。

# 用法
# 1.重新加载所有区域和配置:
rndc reload

# 2.强制刷新指定的区域:
rndc refresh example.com

# 3.清空服务器的缓存:
rndc flush

# 4.显示服务器的状态:
rndc status

# 5.停止服务器:
rndc stop

rsync

rsync 是 Linux 中一个强大的文件同步工具,用于在本地或远程主机之间同步文件和目录。它可以通过网络传输文件并保持文件的完整性和权限等属性。以下是 rsync 命令的详细用法、选项和格式:

rsync 命令的基本用法格式如下:

rsync [options] source destination

其中,source 表示源文件或目录,destination 表示目标文件或目录。当 sourcedestination 中一个是本地路径,另一个是远程路径时,rsync 会在它们之间建立一个远程连接,通过网络传输文件。

例如,要将本地目录 /home/user/documents 同步到远程主机的 /data/backups 目录中,可以使用以下命令:

rsync -avz /home/user/documents user@example.com:/data/backups

这将使用 rsync 命令将本地目录 /home/user/documents 复制到远程主机 example.com/data/backups 目录中

rsync 命令的常用选项如下:

  • -a:表示归档模式,即保持文件的完整性、权限和时间等属性。这是 rsync 常用的选项之一。
  • -v:表示详细模式,即在输出中显示正在复制的文件名。
  • -z:表示压缩模式,即在传输过程中对数据进行压缩以节省带宽。
  • -r:表示递归模式,即对目录及其子目录进行递归复制。
  • -u:表示更新模式,即仅复制源文件中比目标文件新的文件。
  • -h:表示人性化输出,即将文件大小以易读的格式(如 KB、MB)显示。
  • -P:表示启用局部复制和续传功能,即允许在复制过程中恢复中断的复制任务。
  • --delete:表示删除模式,即在目标目录中删除源目录不存在的文件。
  • --exclude:表示排除模式,即排除指定文件或目录。
  • --bwlimit:表示限制带宽,即限制传输速率。
  • --dry-run:表示演习模式,即显示要执行的操作

例如,要将本地目录 /home/user/documents 同步到远程主机 example.com/data/backups 目录中,并在传输过程中使用压缩功能,可以使用以下命令:

rsync -avz /home/user/documents user@example.com:/data/backups

ssh-keygen

ssh-keygen是一个用于创建、管理和转换认证密钥的工具。它的主要用途是创建身份验证密钥对,可以用于SSH协议。

# 1.基本用法是:ssh-keygen -t key_type,其中key_type可以是rsa,dsa,ecdsa,ed25519等。

# 2.以下是ssh-keygen命令中各参数的解释:
-q: 安静模式。在生成新密钥时使用,以抑制通常的输出。
-b bits: 指定密钥长度。
-t dsa | ecdsa | ed25519 | rsa: 指定要生成的密钥类型。dsa,ecdsa,ed25519或rsa。
-m format: 用于指定密钥的格式。PEM(旧的)和新的OpenSSH的私钥格式是两种选择。
-N new_passphrase: 提供一个新的密语(或空,如果没有密语)。
-C comment: 提供一个新的注释。
-f output_keyfile: 指定密钥的文件名。
-p: 修改私钥的密语。
-P old_passphrase: 提供旧的密语。
-i: 导入一个外部的SSH2密钥。
-e: 导出一个SSH2的密钥。
-y: 从私钥中提取公钥。
-c: 更改私钥的注释。
-l: 显示公钥文件的指纹。
-B: 显示公钥文件的泡泡棒图形。
-D pkcs11: 下载pkcs11的密钥。
-F hostname: 搜索指定的hostname在已知的主机文件中。
-H: Hash已知的主机文件。
-R hostname: 从已知的主机文件中删除所有键。
-r hostname: 在DNS中打印出SSHFP指纹资源记录。
-G output_file: 生成候选模数素数以供大数的SSH2 RSA和DSA密钥生成。
-T output_file: 测试候选模数素数的生成。
-s ca_key: 签发一个证书。
-I certificate_identity: 指定证书的标识。
-n principals: 指定允许的主体用户/主机。
-O option: 指定证书选项。
-V validity_interval: 指定证书的有效期间。
-z serial_number: 指定证书序列号。
-L: 显示证书的详细信息。
-A: 在所有的默认位置生成所有的宿主密钥。
-k: 生成一个新的KRL文件。
-Q: 测试KRL文件。
# 1.生成一个新的RSA密钥对
ssh-keygen -t rsa
执行这个命令后,系统会在当前用户的~/.ssh/目录中生成两个文件,id_rsa(私钥)和id_rsa.pub(公钥)。在默认情况下,私钥是受保护的,只有用户自己可以看到,而公钥可以分享给任何人。

ssh-keygen -t rsa -b 2048 -f /path/to/key
其中,-t rsa表示生成的密钥类型为RSA(不指定默认是RSA算法),-b 2048表示生成的密钥长度为2048位,-f /path/to/key表示生成的密钥文件存放在/path/to/key路径下,默认在/root/.ssh下(会创建.ssh文件夹)# 2.使用-C选项来添加一个有用的注释到密钥中,通常包含用户名和主机名:
ssh-keygen -t rsa -C "your.email@example.com"

# 3.生成不同名称或者不同位置的密钥,可以使用-f选项指定文件路径:
ssh-keygen -t rsa -f ~/.ssh/my_ssh_key
在生成密钥的过程中,你可以选择添加一个密码短语,作为额外的安全措施。这意味着无法在没有这个密码短语的情况下使用私钥。

ssh-copy-id

ssh-copy-id是一个用于安装你的公钥到SSH服务器的公钥列表中的脚本工具。在你生成了SSH密钥对后,你可以使用这个命令将公钥复制到远程服务器,以便SSH无密码登录。

#以下是ssh-copy-id命令中各参数的解释:

-i [identity_file]: 指定公钥文件的路径。如果没有提供此选项,ssh-copy-id将查找默认的公钥文件,如~/.ssh/id_rsa.pub,~/.ssh/id_dsa.pub,~/.ssh/id_ecdsa.pub,~/.ssh/id_ed25519.pub等。
-p [port]: 指定远程服务器的SSH端口。
-f: 强制复制,即使远程服务器上已存在相同的公钥。
-n: 不做任何事,只是显示将要添加到远程服务器的公钥。
-o ssh_option: 传递选项给ssh。/etc/ssh/ssh_config里面都是选项
-s: 在添加公钥时使用sudo(需要远程主机上的sudo访问)。
# 1.基本用法是:ssh-copy-id user@hostname,其中user是你的用户名,hostname是你要复制到的远程服务器的主机名。

#2.将你的公钥复制到远程服务器:
ssh-copy-id user@hostname
在这个命令中,ssh-copy-id会将公钥复制到远程服务器的~/.ssh/authorized_keys文件中,如果这个文件不存在,ssh-copy-id会创建。

ssh-copy-id也可以接受一个选项-i,用于指定要复制的公钥文件,
ssh-copy-id -i ~/.ssh/my_ssh_key.pub user@hostname

sshpass

sshpass是一个非交互式ssh密码提供者。它允许你直接通过命令行或脚本提供ssh的密码,而无需人工交互。这对自动化脚本非常有用,但需要注意,使用sshpass可能存在安全风险,因为密码可能会出现在命令行历史或系统的进程列表中,可能被其他用户看到。

#以下是sshpass命令中各参数的解释:
-f filename:从指定的文件中获取密码。
-d number:从文件描述符获取密码。数字表示文件描述符的编号。
-p password:直接提供密码作为参数(安全性不太理想)。命令行中直接显示密码可能会被别人看到,或者保存在命令历史中。
-e:从环境变量"SSHPASS"中获取密码。
-P prompt:指定sshpass应该搜索的字符串来检测密码提示。默认情况下,sshpass会查找"password"提示。
-v:详细模式。会详细显示sshpass正在做什么。
-h:显示帮助信息。
-V:打印版本信息。

在上述的参数中,-f,-d,-p和-e只能选择其中一个使用,这四个参数都是用来指定密码来源的。如果不使用这四个参数中的任何一个,那么密码将从标准输入(stdin)中获取。
# 1.如果你想要使用在环境变量SSHPASS中存储的密码,你可以这样使用sshpass:
export SSHPASS=your_password
sshpass -e ssh user@hostname
在这个例子中,export命令是用来设置环境变量SSHPASS的,sshpass -e告诉sshpass从环境变量SSHPASS中获取密码。然后,ssh user@hostname是你通常使用的SSH命令,其中user是你的用户名,hostname是你要连接的主机名。

# 2.使用如下命令使用sshpass执行一个远程命令:
sshpass -p 'your_password' ssh user@hostname 'remote_command'
在这个命令中,your_password是你的密码,user是你的用户名,hostname是你要连接的远程服务器的主机名,remote_command是你要在远程服务器上执行的命令。

# 3.将密码存储在一个文件中,然后使用-f选项:
sshpass -f /path/to/password_file ssh user@hostname 'remote_command'

# 4.使用 sshpass 工具自动输入 SSH 密码以将 SSH 公钥复制到远程主机。
sshpass -p root ssh-copy-id -i .ssh/id_rsa.pub -o StrictHostKeyChecking=no 10.0.0.109
sshpass -p root:sshpass 是一个用于非交互式密码提供的实用程序。-p 选项告诉 sshpass 密码会在后面直接给出,在这里,密码是 "root"。
ssh-copy-id:这是一个将本地公钥复制到远程服务器的 authorized_keys 文件的命令。
-i .ssh/id_rsa.pub: -i 选项指定要复制的公钥文件,.ssh/id_rsa.pub 是默认的 SSH 公钥文件路径。
-o StrictHostKeyChecking=no:这是传递给 ssh 的选项,禁止对远程主机的公钥进行严格的主机密钥检查。这对于你首次连接到服务器,服务器的公钥还不在你的 known_hosts 文件中,或者你是在自动化脚本中使用此命令时很有用
使用这个命令需要确保远程服务器的 /etc/ssh/sshd_config 文件中启用了基于公钥的认证(PubkeyAuthentication yes)。

sed

Sed是一个强大的文本处理工具,其名称来自“流编辑器”(Stream Editor)的缩写。它可以在命令行中使用,也可以作为脚本运行。Sed可以读取、编辑、过滤和转换文本文件中的内容,可以对文件内容进行搜索和替换等多种操作。

以下是关于Linux中sed的一些详细讲解:

  1. 基本用法

sed命令的基本语法如下:

sed [options] 'command' input_file

其中,options是一些选项参数,可以用于控制sed的行为;command是一个或多个sed编辑命令,用于对输入文件进行编辑和转换;input_file是要处理的输入文件的名称。

options:

  • -n 不输出模式空间内容到屏幕,即不自动打印;禁止sed的默认输出,只输出被命令处理过的文本。

  • -e 多点编辑,允许在命令行中指定多个命令,用分号分隔。

  • -f FILE 从指定文件中读取编辑脚本

  • -r, -E 使用扩展正则表达式

  • -i直接修改文件内容。

  • -i.bak 备份文件并原处编辑

  • -s将多个文件视为独立文件,而不是单个连续的长文件流

    #说明:

  • -ir 不支持

  • -i -r 支持

  • -ri 支持

  • -ni 会清空文件

command:

1. 不给地址:对全文进行处理
2. 单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
3. 地址范围:
#,# #从#行到第#行,3,6 从第3行到第6行
#,+# #从#行到+#行,3,+4 表示从3行到第7行
/pat1/,/pat2/
#,/pat/
/pat/,#
4. 步进:~
1~2 奇数行
2~2 偶数行

命令:

p 打印当前模式空间内容,追加到默认输出之后
Ip 忽略大小写输出
d 删除模式空间匹配的行,并立即启用下一轮循环
a [\]text 在指定行后面追加文本,支持使用\n实现多行追加
i [\]text 在行前面插入文本
c [\]text 替换行为单行或多行文本
w file 保存模式匹配的行至指定文件
r file 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
q 结束或退出sed

查找替换:

s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中
I,i 忽略大小写

例如,下面的命令将打印出input_file文件中的每一行:

sed 'p' input_file
  1. 编辑命令

sed中的编辑命令通常由一个操作符和一个模式组成,它们一起用于指定要编辑和转换的文本范围和方式。下面是一些常用的sed编辑命令:

  • 替换命令(s):用于替换指定模式的文本。语法为:
sed 's/模式/替换文本/标志' input_file

其中,模式是要替换的文本模式;替换文本是要替换成的文本;标志是一些可选的标志参数,用于控制替换的方式和范围。例如,下面的命令将把input_file文件中的所有apple替换为orange

sed 's/apple/orange/g' input_file
  • 删除命令(d):用于删除指定模式的文本。语法为:
sed '/模式/d' input_file

其中,模式是要删除的文本模式。例如,下面的命令将删除input_file文件中所有以#开头的行:

sed '/^#/d' input_file
sed '2d' file.txt

这个命令会删除文件file.txt中的第二行。如果要删除多行,可以使用逗号分隔行数:

sed '2,5d' file.txt

这个命令会删除文件file.txt中的第二行到第五行。

插入命令(i):用于在指定模式之前插入新的文本。语法为:

sed '/模式/i 新文本' input_file

其中,模式是要在其前面插入新文本的文本模式;新文本是要插入的文本。例如,下面的命令将在input_file文件中所有以apple开头的行之前插入一行fruit:

sed '/^apple/i fruit:' input_file

追加命令(a):用于在指定模式之后追加新的文本。语法为:

sed '/模式/a 新文本' input_file

su

su 是 “switch user” 的缩写。可以让普通用户临时提升为管理员或其他用户。su 命令的常用格式为:

su [选项] [用户名]

使用 su 命令可以将当前用户切换到另一个用户身份下,如果没有指定用户名,则默认切换到 root 用户身份下。

# 选项如下:
-m, -p, --preserve-environment: 保留当前环境变量,不重置它们。通常,当切换到另一个用户时,环境变量会被重置为该用户的默认环境。
-g, --group <group>: 指定要切换到的主组。这将改变执行命令的主组ID。
-G, --supp-group <group>: 指定要切换到的辅助组。这将改变执行命令的辅助组ID。
-, -l, --login: 使 shell 成为登录 shell。这意味着环境变量和工作目录将与目标用户的设置一致。当你使用 su 切换到另一个用户时,通常会使用此选项,因为它模拟该用户正常登录的环境。
-c, --command <command>: 使用 -c 选项将单个命令传递给 shell。这允许你以另一个用户的身份执行特定的命令,而不是切换到交互式 shell。
--session-command <command>: 将单个命令传递给 shell 并使用 -c 选项,但不创建新的会话。
-f, --fast: 将 -f 选项传递给 shell。这主要用于 csh 或 tcsh shell,它可以阻止读取启动文件。
-s, --shell <shell>: 如果 /etc/shells 允许,运行指定的 shell。这允许你选择一个不同的 shell,而不是用户的默认 shell。
-P, --pty: 创建一个新的伪终端。这通常用于高级用途,例如在脚本中模拟交互式 shell 会话。
-h, --help: 显示帮助信息并退出。
-V, --version: 显示版本信息并退出。
# 1.切换到 root 用户并使 shell 成为登录 shell:
su - root

# 2.以另一个用户的身份执行特定命令:
su -c 'ls /root' root

# 3.以普通用户身份执行某个命令:
su -c "command"

sudo

sudo 是一个非常重要的命令行工具,用于 Unix 和 Linux 系统。它的名称是 “superuser do”(超级用户执行)的缩写,允许普通用户以其他用户(通常是 root 或超级用户)的身份执行命令。这种方式提供了一种控制用户访问权限和执行敏感任务的方法,而不需要永久切换到具有更高权限的用户账户。

sudo 的基本语法是:

sudo [OPTIONS] COMMAND [ARGUMENTS...]

使用 sudo 命令需要输入当前用户的密码,如果密码正确,则可以以超级用户的权限执行命令。sudo 命令还可以通过编辑 /etc/sudoers 文件来实现不需要输入密码就可以执行某些命令的功能。当你使用 sudo 执行命令时,通常需要输入你的密码,以验证你有权执行该操作。sudo 还记住你的凭据一段时间(通常是5分钟),这样你就可以在不重复输入密码的情况下再次使用 sudo

# 选项如下:
-A, --askpass: 使用辅助程序来提示密码,而不是在终端中直接提示。
-b, --background: 在后台运行指定的命令。
-B, --bell: 在提示密码时响铃。
-C, --close-from=num: 关闭所有大于或等于指定数字的文件描述符。
-E, --preserve-env: 在运行命令时保留用户环境变量。
--preserve-env=list: 保留指定的环境变量列表。
-e, --edit: 编辑文件而不是执行命令。
-g, --group=group: 以指定的组名或ID运行命令。
-H, --set-home: 将HOME环境变量设置为目标用户的家目录。
-h, --help: 显示帮助信息并退出。
--host=host: 在指定的主机上运行命令(如果插件支持)。
-i, --login: 以目标用户运行登录shell;也可以指定要运行的命令。
-K, --remove-timestamp: 完全删除时间戳文件。
-k, --reset-timestamp: 使时间戳文件无效。
-l, --list: 列出用户的权限或检查特定命令;使用两次以更长的格式显示。
-n, --non-interactive: 非交互式模式,不使用提示。
-P, --preserve-groups: 保留组向量,而不是设置为目标的组。
-p, --prompt=prompt: 使用指定的密码提示。
-r, --role=role: 使用指定的角色创建SELinux安全上下文。
-S, --stdin: 从标准输入读取密码。
-s, --shell: 以目标用户运行shell;也可以指定要运行的命令。
-t, --type=type: 使用指定的类型创建SELinux安全上下文。
-T, --command-timeout=timeout: 在指定的时间限制后终止命令。
-U, --other-user=user: 在列表模式下,显示其他用户的权限。
-u, --user=user: 以指定的用户名或ID运行命令(或编辑文件)。
-V, --version: 显示版本信息并退出。
-v, --validate: 更新用户的时间戳而不运行命令。
--: 停止处理命令行参数。
# 1.执行命令:最常见的用法是执行需要超级用户权限的命令。例如,安装软件通常需要管理员权限:
sudo apt-get install nginx

# 2.以另一个用户身份执行命令:虽然 sudo 通常用于以 root 用户身份执行命令,但你也可以用它来以其他用户的身份执行命令。使用 -u 选项 followed by the username:
sudo -u username command
修改/etc/passwd 将xing用户的uid修改为0;sudo -u xing vim /etc/passwd

# 3.启动 shell:你可以使用 sudo 启动一个以 root 用户身份运行的 shell。这允许你执行多个命令,而无需为每个命令输入 sudo:
sudo -isudo -s
使用 -i 选项会模拟一个完整的登录 shell,这意味着环境变量和工作目录将与目标用户的设置一致。而 -s 选项则使用你当前的环境变量。

# 4.编辑文件:sudo 可以与文本编辑器一起使用,以 root 权限编辑系统文件。例如:
sudo nano /etc/hosts

# 5.管道和重定向:由于 sudo 只对它直接执行的命令有效,因此如果你需要使用管道或重定向,你需要稍微改变策略。例如,使用 tee 来以超级用户权限写入文件:
echo "content" | sudo tee /path/to/privileged/file

ss

ssnetstat 命令之间的关系:ssnetstat 都是用于显示网络连接和套接字信息的实用程序。然而,ss 命令在获取信息方面更快,更有效率,因为它直接从内核获取信息。虽然 netstat 仍然可以用于显示网络统计信息,但 ss 命令在许多方面已经取代了它。因此,建议您使用 ss 命令来查看网络连接和套接字信息。

ss是一种Linux系统命令,用于显示当前网络连接的详细信息,包括TCP和UDP协议的连接状态、套接字、进程ID等。

ss命令的语法格式如下:

ss [options] [ FILTER ]

其中,options是ss命令的可选参数,用于设置命令的行为和输出格式;FILTER是ss命令的可选过滤条件,用于过滤显示的连接信息。

下面是一些常用的ss命令选项:

  • -t:只显示TCP协议的连接信息。
  • -u:只显示UDP协议的连接信息。
  • -a:显示所有连接信息,包括监听状态的套接字。
  • -n:不进行主机名解析,直接显示IP地址。
  • -p:显示与连接关联的进程ID和进程名称。
  • -o:显示计时器信息,包括连接持续时间和流量统计。
  • -l:只显示监听状态的套接字信息。
  • -s:显示TCP协议的统计信息,包括连接状态计数和错误计数。
  • -e:显示扩展套接字信息,包括用户 ID、inode 等
  • -4:仅显示 IPv4 套接字
  • -6:仅显示 IPv6 套接字
  • -A:指定要显示的套接字表类型,如 inetunix

除了这些选项,ss命令还可以通过FILTER过滤条件进行筛选,例如:

  • ss state established:只显示状态为“已建立”的连接信息。
  • ss dst 192.168.1.1:只显示目标地址为192.168.1.1的连接信息。

用例:

  • ss -t:显示所有 TCP 连接
  • ss -u:显示所有 UDP 连接
  • ss -l:显示所有监听套接字
  • ss -t -n:显示所有 TCP 连接,但不解析服务名称
  • ss -t -p:显示所有 TCP 连接,以及相关进程信息
  • ss -t -l -n -p:显示所有监听的 TCP 套接字,以数字形式,包括进程信息
  • ss -4 -t:仅显示 IPv4 的 TCP 连接

sysctl

sysctl是一个用于在运行时查询和修改Linux内核参数的命令行工具。这些内核参数可以用于调整和优化系统性能、行为以及内核子系统。sysctl允许您在不重新编译内核或重启系统的情况下动态修改这些参数。

sysctl命令的基本格式如下:

sysctl [options] [variable[=value]]...

其中variable表示内核参数名称,value表示要设置的新值。options可以是以下选项之一:

  1. -n--values:仅显示参数值,不显示参数名称。这在脚本中处理输出时非常有用。
  2. -e--ignore:忽略无法设置的参数错误。默认情况下,如果sysctl遇到无法设置的参数,它会返回一个错误。使用此选项可以使sysctl在遇到错误时继续执行。
  3. -w--write:将内核参数设置为指定值。请注意,使用此选项修改的参数值仅在当前系统运行期间有效。系统重启后,参数值将恢复为默认值或/etc/sysctl.conf中的设置。
  4. -p--load:加载/etc/sysctl.conf文件中的设置。您可以指定一个文件作为参数,如sysctl -p /path/to/custom/sysctl.conf,以加载自定义的配置文件。如果未指定文件,sysctl将使用默认的/etc/sysctl.conf文件。
  5. -a--all:显示所有可用内核参数及其当前设置。
  6. -A--all-to-readable:以易于阅读的格式显示所有可用内核参数及其当前设置。
  7. -b--binary:以二进制格式显示参数值。这对于处理非文本值(如控制台键盘模式)非常有用。
  8. -q--quiet:在执行操作时不显示任何输出。
  9. -f--file:指定一个文件来读取参数设置,而不是从/proc/sys读取。
  10. -d--description:显示参数的描述,如果可用。

以下是一些使用不同选项的sysctl命令示例:

  1. 仅显示net.ipv4.tcp_max_syn_backlog参数的值:
sysctl -n net.ipv4.tcp_max_syn_backlog
#这个显示完整信息
sysctl net.ipv4.tcp_max_syn_backlo
  1. 忽略无法设置的参数错误:
sysctl -e -w net.ipv4.tcp_max_syn_backlog=1024
  1. 加载自定义配置文件:
sysctl -p /path/to/custom/sysctl.conf
  1. 以易于阅读的格式显示所有参数:
sysctl -A
  1. 显示net.ipv4.tcp_max_syn_backlog参数的描述:
sysctl -d net.ipv4.tcp_max_syn_backlog
  1. 要将net.ipv4.tcp_max_syn_backlog的值设置为1024:
sysctl -w net.ipv4.tcp_max_syn_backlog=1024
  1. 使/etc/sysctl.conf文件中的更改生效:
sysctl -p

如果在/etc/sysctl.conf文件中进行了更改,可以使用此命令使这些更改立即生效,而无需重启系统。

  1. 查询所有可用内核参数:
sysctl -a

使用此选项可以显示系统中所有可用的内核参数及其当前设置。

  1. 将当前内核参数设置保存到文件:
sysctl -A > /path/to/output_file

这将把当前系统中所有可用的内核参数及其设置保存到指定的文件中。

systemd

  1. systemd-ask-password:请求系统级密码。
  2. systemd-cat:连接一个或多个命令的标准输出和标准错误到systemd的日志服务。
  3. systemd-cgls:递归显示控制组层次结构的内容。
  4. systemd-cgtop:显示按其控制组分类的进程的top。
  5. systemd-delta:比较系统d的配置文件。
  6. systemd-detect-virt:检测运行的虚拟化技术。
  7. systemd-escape:生成systemd用于单元名称的转义字符串。
  8. systemd-firstboot:在系统首次启动时初始化基本系统设置,如设置密码、设置时区等。
  9. systemd-hwdb:硬件数据库管理工具。
  10. systemd-inhibit:执行一个命令,同时阻止系统休眠。
  11. systemd-machine-id-setup:初始化或更改系统的机器ID。
  12. systemd-notify:发送通知到systemd管理器。
  13. systemd-nspawn:简单的容器管理器,用于运行进程。
  14. systemd-path:获取各种系统路径。
  15. systemd-run:在新的service或scope单元中运行命令。
  16. systemd-socket-activate:启动socket激活的守护进程。
  17. systemd-stdio-bridge:提供与systemd进行通信的接口
  18. systemd-analyze是一个用于分析和调试系统启动性能的工具。
#1.systemd-analyze
systemd-analyze plot: 是一个子命令,它生成了一个SVG图像,显示了系统启动过程中各个服务和单元的启动时间和顺序。
systemd-analyze time:显示内核启动时间、用户空间启动时间和总启动时间。
systemd-analyze blame:显示按启动时间排序的服务列表,这有助于找出启动过程中哪些服务花费了最多的时间。
systemd-analyze critical-chain:显示与启动时间相关的服务链,帮助找出可能减缓启动过程的服务依赖。
systemd-analyze dump:打印系统管理器的状态快照,包括已加载和活动的单元。
systemd-analyze dot:生成表示启动单元间依赖关系的GraphViz兼容点文件。你可以使用GraphViz软件包中的dot实用程序将其转换为其他格式,如PNG或SVG。
systemd-analyze security:分析系统上可用的服务的安全性,基于沙箱特性提供安全性评分。
systemd-analyze verify [unit-file]:验证单元文件是否包含语法错误或其他问题。
systemd-analyze log-level [level]:获取或设置systemd的日志级别。
systemd-analyze log-target [target]:获取或设置systemd的日志目标。
  1. systemd-ask-password: 此命令可用于查询系统级密码,例如用于硬盘解密等。

    子命令:

    • --no-tty: 如果没有TTY可用,不要失败,而是直接读取。
    • --watch: 监控密码请求的出现,并在每次出现时执行查询。
  2. systemd-cat: 该命令将一个或多个命令的标准输出和标准错误连接到 systemd 的日志服务。使用它,你可以轻松地将任何进程的输出转储到系统日志中。

    子命令:

    • --priority=: 设置记录的日志优先级。
    • --level-prefix=: 控制是否在每条日志行前加上日志优先级。
    • --identifier=: 为生成的日志消息设置日志标识符。
  3. systemd-cgls: 此命令递归地显示 cgroup 层次结构,这有助于你查看和理解系统的资源管理。

    子命令:

    • -k--kernel: 仅显示内核控制组。
    • -u--user: 仅显示用户控制组。
    • -m--machine: 仅显示容器和虚拟机。
    • --no-pager: 不要将输出通过分页器。
  4. systemd-delta: 该命令会找出所有已修改的 systemd 配置文件,并将其与默认配置文件进行比较。这个命令没有子命令,但有选项,如 --type= 来过滤特定类型的差异。

  5. systemd-detect-virt: 该命令用于检测宿主机或容器的虚拟化技术。它的子命令包括:

    • -c--container: 只检测容器虚拟化。
    • -v--vm: 只检测硬件虚拟化。
  6. systemd-escape: 用于转义字符串,使其成为 systemd 单元名的有效部分。它的子命令包括:

    • -p--path: 将给定的路径转换为 systemd 单元名称中可接受的形式。
    • -u--unescape: 执行反转义操作,将 systemd 单元名称中的字符串转换回原始形式。
    • -m--mangle: 将给定的字符串转换为 systemd 单元名称中可接受的形式,但不像 --path 选项那样插入斜线。
  7. systemd-firstboot: 用于在系统首次启动时初始化基本系统设置,例如设置 root 密码、设置时区等。它的子命令包括:

    • --root=: 为首次启动设置操作指定一个目录,而不是使用默认的 /
    • --locale=, --keymap=, --timezone=, --hostname=: 用于设置语言环境、键盘映射、时区和主机名。
    • --prompt: 询问所有选项,即使它们已经在系统上设置。
  8. systemd-hwdb: 该命令用于管理硬件数据库(hwdb)。它的子命令包括:

    • update: 更新硬件数据库。
    • query: 查询硬件数据库中的信息。
  9. systemd-inhibit: 此命令用于执行一个命令,同时阻止系统进入休眠状态。它的子命令包括:

    • --what: 指定你想要阻止的事件类型,例如:sleep、shutdown、idle等。
    • --who: 描述阻止休眠的程序或用户。
    • --why: 描述为什么要阻止休眠。
  10. systemd-machine-id-setup: 该命令用于初始化或更改系统的机器ID。这个命令没有子命令,但有选项,如 --commit--print

  11. systemd-notify: 这个命令可以向 systemd 发送状态通知信息。它的子命令包括:

    • --ready: 指示服务已经完成启动。
    • --pid=: 指定发送通知的进程的 PID。
    • --status=: 设置服务的状态行。
  12. systemd-nspawn: 这是一个简单的容器管理器,用于运行进程。它的子命令包括:

    • -D--directory=: 指定容器的根目录。
    • -b--boot: 引导容器(即,启动 init 系统)。
    • -n--network-veth: 创建一个虚拟以太网设备并添加到容器中。
  13. systemd-path: 该命令用于查询各种系统服务相关的路径。例如,可以查询 systemd 用户目录、系统运行时目录等。此命令没有特定的子命令,而是接受一系列预定义的路径名称(如 “user-home” 或 “temporary”)作为参数。

  14. systemd-run: 该命令在一个新的 service 或 scope 单元中运行指定的命令。它的子命令包括:

    • --unit=: 指定新创建的单元的名称。
    • --scope: 在一个新的 scope 单元而不是 service 单元中运行命令。
    • --user: 作为一个用户单元而不是系统单元运行命令。
    • --on-active=, --on-boot=, --on-startup=, --on-unit-active=, --on-unit-inactive=: 定时启动命令。
  15. systemd-socket-activate: 该命令用于启动 socket 激活的守护进程。它的子命令包括:

    • --inetd: 使用 inetd 风格的 socket 激活,这允许 systemd 代替传统的 inetd 守护进程。
    • --accept: 在每个连接上单独启动一个新的进程。
  16. systemd-stdio-bridge: 这是一个辅助程序,用于将 stdin、stdout 和 stderr 连接到 D-Bus 服务,它通常不会由用户直接调用,没有特定的子命令。

  17. systemd-analyze: 这是一个用于分析和调试系统启动性能的工具。它的子命令包括:

    • time: 显示启动所花费的总时间。
    • blame: 显示每个服务启动所花费的时间。
    • critical-chain: 显示启动过程中最慢的服务和它们的依赖关系。
    • plot: 生成一个 SVG 图形,显示系统启动过程。
  18. systemd-cgtop: 这个命令将显示一个实时更新的列表,展示系统中各个cgroup的资源使用情况,类似于经典的 top 命令,但按cgroup分类。

    子命令:

    • -n--iterations=: 设置刷新的次数,然后退出。
    • -1--one-shot: 显示一次信息,然后退出。
    • -d--delay=: 设置屏幕刷新之间的延迟。
    • -b--batch: 执行批处理模式操作。
    • --depth=: 控制树的最大深度。

systemctl

systemctl 是一个用于管理 systemd 系统和服务管理器的命令行工具。它允许你启动、重启、停止、禁用或启用系统服务,可以查询服务的状态,还可以在系统启动时启用或禁用服务。

用法:

systemctl [OPTIONS...] {COMMAND} ...systemctl命令接受一系列的选项(OPTIONS)和命令(COMMAND)。选项用于更改命令的行为,而命令则定义了要执行的操作。

参数:

  • -h --help:显示帮助信息。
  • --version:显示程序版本。
  • --system:连接到系统管理器。
  • -H --host=[USER@]HOST:在远程主机上操作。
  • -M --machine=CONTAINER:在本地容器上操作。
  • -t --type=TYPE:列出特定类型的单元。
  • --state=STATE:列出具有特定加载、子进程或活动状态的单元。
  • -p --property=NAME:只显示此名称的属性。
  • -a --all:显示所有已加载的单元/属性,包括死掉的/空的。要列出系统上安装的所有单元,请使用’list-unit-files’命令。
  • -l --full:在输出中不省略单元名称。
  • -r --recursive:显示主机和本地容器的单元列表。
  • --reverse:用’list-dependencies’显示反向依赖关系。
  • --job-mode=MODE:指定在排队新作业时如何处理已经排队的作业。
  • --show-types:在显示套接字时,显式显示其类型。
  • -i --ignore-inhibitors:在关闭或睡眠时,忽略阻塞器。
  • --kill-who=WHO:向谁发送信号。
  • -s --signal=SIGNAL:发送什么信号。
  • --now:在启用或禁用单元的同时启动或停止单元。
  • -q --quiet:抑制输出。
  • --no-block:不等待操作完成。
  • --no-wall:在halt/power-off/reboot之前不发送wall消息。
  • --no-reload:在启用/禁用单元文件后不重新加载守护进程。
  • --no-legend:不打印图例(列头和提示)。
  • --no-pager:不将输出管道输入到分页器。
  • --no-ask-password:不询问系统密码。
  • --global:全局启用/禁用单元文件。
  • --runtime:只在下次重启之前临时启用单元文件。
  • -f --force:在启用单元文件时,覆盖现有的符号链接。在关闭时,立即执行操作。
  • --preset-mode=:应用只启用、只禁用或所有预设。
  • --root=PATH:在指定的根目录中启用单元文件。
  • -n --lines=INTEGER:要显示的日志条目数量。
  • -o --output=STRING:更改日志输出模式(短,短-iso,短-精确,短-单调,详细,导出,json,json-pretty,json-sse,cat)。
  • --plain:以列表形式打印单元依赖关系,而不是树形。

以下是一些主要的Unit命令(对systemd管理的服务、挂载点、设备等的操作):

  • list-units [PATTERN...]:列出已加载的单元。
  • list-sockets [PATTERN...]:按地址顺序列出已加载的套接字。
  • list-timers [PATTERN...]:按下一次执行时间顺序列出已加载的计时器。
  • start NAME...:启动(激活)一个或多个单元。
  • stop NAME...:停止(停用)一个或多个单元。
  • reload NAME...:重新加载一个或多个单元。
  • restart NAME...:启动或重新启动一个或多个单元。
  • try-restart NAME...:如果单元处于活动状态,则重新启动一个或多个单元。
  • reload-or-restart NAME...:如果可能,重新加载一个或多个单元,否则启动或重新启动。
  • reload-or-try-restart NAME...:如果可能,重新加载一个或多个单元,否则,如果单元处于活动状态,则重新启动。
  • isolate NAME:启动一个单元并停止所有其他单元。
  • kill NAME...:向单元的进程发送信号。
  • is-active PATTERN...:检查单元是否处于活动状态。
  • is-failed PATTERN...:检查单元是否失败。
  • status [PATTERN...|PID...]:显示一个或多个单元的运行时状态。
  • show [PATTERN...|JOB...]:显示一个或多个单元/作业或管理器的属性。
  • cat PATTERN...:显示一个或多个单元的文件和drop-ins。
  • set-property NAME ASSIGNMENT...:设置单元的一个或多个属性。
  • help PATTERN...|PID...:显示一个或多个单元的手册。
  • reset-failed [PATTERN...]:重置所有,一个或多个单元的失败状态。
  • list-dependencies [NAME]:递归显示此单元所需或所需的单元,或此单元所需或所需的单元。

以下是Unit File命令(对systemd单元配置文件的操作):

  • list-unit-files [PATTERN...]:列出已安装的单元文件。
  • enable NAME...:启用一个或多个单元文件。
  • disable NAME...:禁用一个或多个单元文件。
  • reenable NAME...:重新启用一个或多个单元文件。
  • preset NAME...:根据预设配置启用/禁用一个或多个单元文件。
  • preset-all:根据预设配置启用/禁用
  • preset-all:根据预设配置启用/禁用所有单元文件。
  • is-enabled NAME...:检查单元文件是否已启用。
  • mask NAME...:屏蔽一个或多个单元。
  • unmask NAME...:取消屏蔽一个或多个单元。
  • link PATH...:将一个或多个单元文件链接到搜索路径。
  • add-wants TARGET NAME...:为目标添加一个或多个单元的’Wants’依赖关系。
  • add-requires TARGET NAME...:为目标添加一个或多个单元的’Requires’依赖关系。
  • edit NAME...:编辑一个或多个单元文件。
  • get-default:获取默认目标的名称。
  • set-default NAME:设置默认目标。

接下来是Machine命令:

  • list-machines [PATTERN...]:列出本地容器和主机。

再看Job命令:

  • list-jobs [PATTERN...]:列出作业。
  • cancel [JOB...]:取消全部,一个或多个作业。

然后是Snapshot命令:

  • snapshot [NAME]:创建一个快照。
  • delete NAME...:删除一个或多个快照。

再来是Environment命令:

  • show-environment:显示环境。
  • set-environment NAME=VALUE...:设置一个或多个环境变量。
  • unset-environment NAME...:取消设置一个或多个环境变量。
  • import-environment [NAME...]:导入全部或部分环境变量。

Manager Lifecycle命令:

  • daemon-reload:重新加载systemd管理器配置。
  • daemon-reexec:重新执行systemd管理器。

最后是System命令:

  • is-system-running:检查系统是否完全运行。
  • default:进入系统默认模式。
  • rescue:进入系统救援模式。
  • emergency:进入系统紧急模式。
  • halt:关闭并停止系统。
  • poweroff:关闭并关闭系统电源。
  • reboot [ARG]:关闭并重启系统。
  • kexec:使用kexec关闭并重启系统。
  • exit:请求用户实例退出。
  • switch-root ROOT [INIT]:更改到不同的根文件系统。
  • suspend:暂停系统。
  • hibernate:使系统休眠。
  • hybrid-sleep:使系统进入混合休眠状态。

这是systemctl命令的最后一部分,以下是对最后几个命令选项的解释:

  • suspend:这个命令让系统进入挂起状态。在这种状态下,系统的所有操作都将停止,但电源不会被关闭。这是一种节能模式,当你不需要使用计算机,但又不想完全关闭它时,可以使用这个命令。
  • hibernate:这个命令让系统进入休眠状态。在这种状态下,系统的所有操作都将停止,且电源也会被关闭。系统的当前状态将被保存在硬盘上,下次启动时,你可以恢复到休眠前的状态。
  • hybrid-sleep:这个命令让系统同时进入休眠和挂起状态。系统的当前状态将被保存在硬盘上,同时系统也进入低电耗的挂起状态。如果电源被中断,系统可以从硬盘上恢复;如果电源没有中断,系统可以快速地从挂起状态恢复。

这是一些常用的systemctl命令:

  • systemctl start [service]:开始运行指定的服务。
  • systemctl stop [service]:停止运行指定的服务。
  • systemctl restart [service]:重启指定的服务。
  • systemctl reload [service]:在不中断服务的情况下重新加载指定的服务的配置。
  • systemctl force-reload [service]: 这个命令用于强制重新加载服务的配置。它会停止并重新启动服务以应用新的配置。如果服务不支持重新加载配置,那么这个命令就会完全重启服务。请注意,不是所有服务都支持 force-reload
  • systemctl daemon-reload [service]:systemd 就会重新加载配置,包括你修改的那些服务单元文件,这样你的改动才会生效。如果不执行此操作,systemd 将继续使用其旧的配置。
  • systemctl status [service]:显示指定服务的状态。
  • systemctl enable [service]:使指定的服务在启动时自动运行。
  • systemctl is-enabled [service]: 查看服务是否开机自启。
  • systemctl enable --now [service]: 设置开机自启动,并立即启动服务。
  • systemctl disable [service]:禁止指定的服务在启动时自动运行。
  • systemctl is-active [service-name]: 检查一个服务是否正在运行。
  • systemctl list-units:列出当前加载的所有单元。
  • systemctl isolate [poweroff.target、multi-user.target、rescue.target、graphical.target、reboot.target]:修改启动时的运行模式。使用ll /lib/systemd/system/*.target 可以查看有哪些target
  • systemctl get-default:查看当前系统默认以什么模式运行
  • systemctl mask [service]:该命令会阻止一个服务被启动,无论是手动还是自动。当你执行 systemctl mask 命令时,系统会在 /etc/systemd/system 目录下为指定的服务创建一个符号链接,指向 /dev/null。这实际上阻止了 systemd 启动该服务。这通常用于禁用那些你不希望在系统运行时启动,或者可能对系统稳定性构成威胁的服务。
  • systemctl umask [service]:取消上面的mask
  • systemctl reboot:重新启动系统。
  • systemctl poweroff: 关闭系统。
  • systemctl suspend: 挂起系统。

示例

1.启动一个服务
systemctl start httpd.service

2.停止一个服务:
systemctl stop httpd.service

3.重新启动一个服务:
systemctl restart httpd.service

4.显示一个服务的状态:
systemctl status httpd.service

5.启动一个服务,并在系统启动时自动启动:
systemctl enable --now httpd.service

6.列出所有处于failed状态的服务:
systemctl --failed

7.显示所有已启动的服务:
systemctl list-units --type=service --state=running
详细讲解:systemctl list-units 命令用于列出所有当前加载的系统单元,而 --type=service 和 --state=running 参数则允许你过滤出特定类型和状态的单元。
以下是 --type 参数的一些可能值:
service:systemd 服务单元,这些单元对应于后台运行的服务。
socket:系统插座单元,这些单元对应于等待连接的网络插座或其他进程间通信端口。
device:设备单元,这些单元对应于系统中的硬件设备。
mount:挂载点单元,这些单元对应于系统中的文件系统挂载点。
automount:自动挂载单元,这些单元对应于在访问时自动挂载的挂载点。
swap:交换空间单元,这些单元对应于系统中的交换空间。
target:目标单元,这些单元对应于一组其他单元,可以用于系统启动和关闭。

以下是 --state 参数的一些可能值:
active:单元当前正在运行。
inactive:单元当前没有运行。
failed:单元试图启动,但失败了。
activating:单元正在启动过程中。
deactivating:单元正在停止过程中。

这些参数可以组合使用,以便你可以定制你看到的单元列表。例如,要查看所有正在运行的服务,你可以使用:
systemctl list-units --type=service --state=active
要查看所有失败的设备,你可以使用:
systemctl list-units --type=device --state=failed

8.区别:
systemctl list-unit-files 和 systemctl list-units 这两个命令的主要区别在于它们提供的信息和用途:
systemctl list-unit-files 显示的是所有已安装的 unit 文件及其启用状态(enabled, disabled, masked 等)。这些 unit 文件是在磁盘上的定义文件,可能是服务(.service)、挂载点(.mount)、设备(.device)、套接字(.socket)等。这个命令主要用于检查 unit 文件的存在性和它们的启用状态。
systemctl list-units 显示的是当前已加载(即系统正在管理的)的 unit。这些 unit 可能是正在运行的服务,已挂载的挂载点,已激活的设备等。这个命令主要用于查看系统当前的运行状态。
使用 --type=service 参数时,systemctl list-unit-files --type=service 会列出所有的服务 unit 文件及其启用状态,而 systemctl list-units --type=service 则会列出所有当前已加载的服务 unit 及其运行状态。
在实际使用中,你可能需要根据具体需求选择使用哪个命令。例如,如果你需要检查一个服务是否已经启用,你应该使用 systemctl list-unit-files。如果你需要查看一个服务当前是否正在运行,你应该使用 systemctl list-units

ssh

在 Linux 系统中,ssh 命令可以用于在本地机器和远程服务器之间建立安全的 SSH 连接。SSH(Secure Shell)是一种加密协议,可以提供安全的远程登录和数据传输功能。

用法:

在Linux终端中,可以使用ssh命令来建立到远程计算机的SSH连接。ssh命令的一般语法如下:

ssh [options] [user@]hostname

其中,options是ssh命令的一些可选参数,user是要登录到远程计算机的用户名,hostname是远程计算机的主机名或IP地址。

选项:

SSH命令有许多可选的选项,这些选项可以用来控制SSH连接的行为。以下是SSH命令的一些常用选项:

  • -p port:指定SSH服务器的端口号,默认为22。
  • -i identity_file:指定用于身份验证的私钥文件的路径。
  • -l login_name:指定登录到远程主机的用户名。
  • -X:启用X11转发,可以在本地计算机上运行远程主机的图形化应用程序。
  • -v:输出SSH连接的详细调试信息

格式:

SSH命令有一些常用的格式,这些格式可以满足不同的SSH连接需求。以下是SSH命令的一些常用格式:

  • ssh user@host:使用用户名和主机名连接到SSH服务器。
  • ssh -p port user@host:使用指定端口号、用户名和主机名连接到SSH服务器。
  • ssh -i identity_file user@host:使用指定私钥文件、用户名和主机名连接到SSH服务器。
  • ssh -X user@host:使用用户名和主机名连接到SSH服务器,并启用X11转发功能。

下面是一些 ssh 命令的使用示例:

  1. 登录远程服务器
ssh username@remote_host

此命令会使用 SSH 协议连接远程服务器,并提示输入目标服务器的密码。username 是目标服务器上的用户名,remote_host 是目标服务器的 IP 地址或域名。

  1. 登录远程服务器并指定端口号
ssh -p port username@remote_host

此命令会在 SSH 连接中指定端口号,以连接远程服务器。port 是远程服务器的 SSH 服务监听端口号。

  1. 使用 SSH 密钥登录远程服务器
ssh -i path_to_private_key username@remote_host

此命令会使用指定的 SSH 密钥文件登录远程服务器。path_to_private_key 是 SSH 密钥文件的路径,username 是目标服务器上的用户名,remote_host 是目标服务器的 IP 地址或域名。

  1. 在 SSH 连接中传递命令
ssh username@remote_host "command"

此命令会在 SSH 连接中执行指定的命令,并返回命令的输出。command 是要在远程服务器上执行的命令。

  1. 使用远程端口转发
ssh -L local_port:remote_host:remote_port username@remote_host

此命令会在本地机器和远程服务器之间建立一个 SSH 连接,并将远程服务器上的指定端口映射到本地机器上的指定端口。local_port 是本地机器上的端口号,remote_host 是远程服务器的 IP 地址或域名,remote_port 是远程服务器上的端口号。

例如,要使用私钥文件/path/to/private_key连接到主机example.com的SSH服务器,并指定端口号为2222,可以输入以下命令:

ssh -p 2222 -i /path/to/private_key user@example.com

例如,要使用端口号2222连接到主机example.com的SSH服务器,并指定用户名为user和私钥文件为/path/to/private_key,可以输入以下命令:

ssh -p 2222 -i /path/to/private_key user@example.com

需要注意的是,私钥文件必须具有正确的文件权限。通常情况下,私钥文件应该只能由文件所有者读取和写入,因此可以使用以下命令来设置正确的文件权限:

chmod 600 /path/to/private_key

ssh-keygen

在 Linux 系统中,ssh-keygen 命令是用于生成 SSH 密钥对的工具。它通常与 SSH 客户端一起使用,用于认证 SSH 服务器的身份,并在服务器和客户端之间建立安全的加密通道

下面是一些常用的 ssh-keygen 命令选项:

  • ssh-keygen -t <type> :指定要生成的密钥类型,包括 RSA、DSA 和 ECDSA 等。默认为 RSA。
  • ssh-keygen -b <bits> :指定要生成的密钥长度,单位为比特。默认为 2048。
  • ssh-keygen -C <comment> :为密钥添加注释信息。
  • ssh-keygen -f <filename> :指定要生成的密钥文件名。默认为 id_rsaid_dsa
  • ssh-keygen -N <passphrase> :为密钥添加密码保护。
  • ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] :修改已有密钥的密码保护。
  • ssh-keygen -y [-f keyfile] :从已有的私钥文件中提取公钥。

使用 ssh-keygen 命令生成 SSH 密钥对通常包含以下步骤:

  1. 在终端中输入 ssh-keygen 命令并按下回车键。
  2. 系统提示输入密钥保存路径,默认为 ~/.ssh/id_rsa~/.ssh/id_dsa
  3. 系统提示输入密码保护,可选择跳过或输入密码保护。
  4. 系统提示输入确认密码保护。
  5. 密钥对生成成功后,系统会在密钥保存路径中生成两个文件:id_rsaid_rsa.pubid_dsaid_dsa.pub,其中 id_rsaid_dsa 是私钥文件,id_rsa.pubid_dsa.pub 是公钥文件。

需要注意的是,私钥文件必须保持在本地机器上,而公钥文件则可以在本地或远程服务器上使用。在使用 SSH 时,应将公钥文件传输到需要访问的远程服务器上,并将其添加到服务器上的 ~/.ssh/authorized_keys 文件中,以便于建立安全的加密通道。

总之,ssh-keygen 命令是一个非常有用的工具,可以帮助用户生成 SSH 密钥对,从而实现安全的身份验证和加密通讯。

当需要在本地机器和远程服务器之间建立 SSH 连接时,可以使用 ssh-keygen 命令生成 SSH 密钥对。下面是一些具体的用法例子:

  1. 生成默认的 RSA 密钥对
ssh-keygen

此命令会在用户的 home 目录下的 .ssh 文件夹中生成 id_rsaid_rsa.pub 两个文件。

  1. 生成指定类型的密钥对
ssh-keygen -t ecdsa -b 521

此命令会生成一个 ECDSA 类型的密钥对,密钥长度为 521 比特。

  1. 生成指定文件名的密钥对
ssh-keygen -f my_key

此命令会在当前目录下生成 my_keymy_key.pub 两个文件,用于存储生成的密钥对。

  1. 生成带有注释的密钥对
ssh-keygen -t rsa -C "my comment"

此命令会生成一个 RSA 类型的密钥对,并在密钥对中添加注释信息。

  1. 生成带有密码保护的密钥对
ssh-keygen -p -f my_key -N "new passphrase" -P "old passphrase"

此命令会修改名为 my_key 的私钥文件的密码保护,将旧密码保护替换为新的密码保护。

  1. 从私钥文件中提取公钥
ssh-keygen -y -f my_key > my_key.pub

此命令会从名为 my_key 的私钥文件中提取公钥,并将其保存到名为 my_key.pub 的文件中。

scp

在 Linux 系统中,scp 是一个用于在不同主机之间复制文件和目录的命令行工具。它基于 SSH 协议进行数据传输,可以保证数据传输的安全性。

下面是一些常用的 scp 命令选项:

  • scp [options] source destination :将 source 复制到 destination。
  • -r :递归复制整个目录树。
  • -P :指定远程 SSH 服务器端口号,默认为 22。
  • -p :保留文件的权限、时间戳等属性。
  • -q :以安静模式运行,不显示详细信息。
  • -v :以详细模式运行,显示每个文件的复制进度和状态信息。

使用 scp 命令可以实现在不同主机之间快速传输文件和目录。与常规的文件传输方式相比,scp 具有更高的安全性和可靠性。通过在终端中输入 scp 命令并指定源文件和目标路径,可以快速将本地文件传输到远程主机或从远程主机传输文件到本地主机。

需要注意的是,使用 scp 命令需要具有目标主机的 SSH 登录权限,并且需要知道目标主机的 IP 地址、用户名和密码等信息。另外,在使用 scp 命令进行文件传输时,建议使用绝对路径或相对路径来指定源文件和目标路径,以避免出现不必要的错误和问题。

当需要将本地主机上的文件传输到远程主机上时,可以使用以下命令:

scp local_file remote_username@remote_ip:remote_folder

其中,local_file 是本地主机上要传输的文件路径,remote_username 是远程主机的用户名,remote_ip 是远程主机的 IP 地址,remote_folder 是远程主机上的目标文件夹路径。

例如,将本地主机上的 test.txt 文件传输到远程主机 192.168.1.100/home/user/files 目录下:

scp /home/user/test.txt user@192.168.1.100:/home/user/files/

当需要将远程主机上的文件传输到本地主机上时,可以使用以下命令:

scp remote_username@remote_ip:remote_file local_folder

其中,remote_username 是远程主机的用户名,remote_ip 是远程主机的 IP 地址,remote_file 是远程主机上要传输的文件路径,local_folder 是本地主机上的目标文件夹路径。

例如,将远程主机 192.168.1.100 上的 /home/user/files/test.txt 文件传输到本地主机的 /home/user/files 目录下:

scp user@192.168.1.100:/home/user/files/test.txt /home/user/files/

需要注意的是,传输文件时应当确保目标路径的正确性,避免出现不必要的错误和问题。同时,建议在传输过程中指定 -P 选项,以避免因为目标主机的 SSH 端口号不同而出现无法连接的问题。一般默认都是22端口。

screen

screen 命令是一个在Linux/Unix系统中用来创建和管理会话的工具,它允许用户在一个终端窗口中运行多个命令行程序或shell会话,而无需担心因为断开终端而导致这些进程中止。以下是 screen 命令的一些常用选项和用法。

创建新会话:

screen -S session_name

查看已有会话:

screen -ls

连接会话:

screen -r session_name

断开会话:

screen 会话中,按下 Ctrl + A 然后按下 d 键即可断开当前会话。

列出所有命令:

screen 会话中,按下 Ctrl + A 然后按下 ? 键即可列出所有可用的 screen 命令。

滚动屏幕:

screen 会话中,按下 Ctrl + A 然后按下 [ 键即可进入滚动模式。在滚动模式中,您可以使用箭头键或 PgUp / PgDn 键来滚动屏幕。按下 Esc 键可退出滚动模式。

分离会话:

screen 会话中,按下 Ctrl + A 然后按下 d 键即可分离当前会话。分离会话意味着您可以在不断开会话的情况下离开终端窗口。

sort

sort 命令是 Linux 中常用的文本排序工具,用于对文件中的文本进行排序。sort 命令可以按照多种方式进行排序,包括按照字母顺序、数字顺序、空格分隔的列、指定字段等。

下面是 sort 命令的基本用法:

sort [options] [input_file]

sort 命令常用的选项有:

  • -r:按照逆序排列。
  • -n:按照数字顺序排列。
  • -k:按照指定字段进行排序。
  • -t:指定字段分隔符。
  • -u:去重,去除重复的行。
  • -c:检查文件是否已经按照指定的方式排序。

下面是一些示例:

  1. 按照字母顺序排序:
$ sort filename
  1. 按照数字顺序排序:
$ sort -n filename
  1. 按照指定字段排序:
$ sort -t ":" -k 3 filename

表示以冒号为分隔符,按照第 3 个字段排序。

  1. 检查文件是否已经按照指定的方式排序:
$ sort -c filename

如果文件已经按照指定的方式排序,则不输出任何信息;否则会提示文件未排序。

  1. 去除重复的行:
$ sort -u filename
  1. 按照多个字段排序:
$ sort -t ":" -k 1,2 filename

表示以冒号为分隔符,先按照第 1 个字段排序,如果第 1 个字段相同,则按照第 2 个字段排序。

  1. 忽略空格和特殊字符:
$ sort -b filename

忽略行首的空格字符,并按照字母顺序排序。

  1. 按照文件中的随机顺序排序:
$ sort -R filename

按照随机顺序排序文件中的文本行。

  1. 按照人类可读的格式进行排序:
$ sort -h filename

按照人类可读的格式进行排序,例如按照 K、M、G 等单位大小进行排序。

  1. 按照本地化规则排序:
$ sort -f filename

按照本地化规则进行排序,忽略大小写。

stat

stat 命令是 Linux 系统中的一个基本命令,它用于显示指定文件或目录的详细信息,包括文件的访问权限、所有者、修改时间、创建时间等。

显示文件或目录的详细信息:

stat filename.txt

以格式化输出方式显示文件或目录的详细信息:

stat -c "File: %n\nSize: %s bytes\nAccess: %A\nModify: %y\nChange: %z\n" filename.txt

其中,-c 参数用于指定输出格式,%n 表示文件名,%s 表示文件大小,%A 表示访问权限,%y 表示修改时间,%z 表示创建时间。

需要注意的是,stat 命令在显示文件或目录的详细信息时,提供了非常丰富的信息,因此可以用于快速查看文件或目录的元数据。此外,stat 命令还可以用于以特定格式输出文件或目录的详细信息,这使得它非常适合用于自动化脚本和程序中。

swap

在Linux操作系统中,swap(交换分区)是一种特殊的分区,用于将内存中暂时不使用的数据转移到磁盘上,以释放内存空间,从而避免系统内存不足的情况。当系统内存紧张时,操作系统会将一部分内存中的数据写入swap分区,以释放空间供其他应用程序使用。当应用程序再次需要访问该数据时,操作系统将从swap分区中读取数据并重新加载到内存中。

Linux系统中,我们可以使用以下命令查看系统中swap的使用情况:

$ swapon -s

该命令会显示当前系统中所有已经启用的swap分区及其使用情况。

可以使用以下命令创建一个swap分区:

$ sudo mkswap /dev/sdb1

该命令将/dev/sdb1设备格式化为swap分区,并将其标记为可用的swap分区。需要注意的是,在创建swap分区之前,必须确保该分区没有被挂载或正在使用。

为了启用新创建的swap分区,我们需要将其添加到/etc/fstab文件中。具体来说,我们需要在/etc/fstab文件中添加如下一行:

/dev/sdb1   swap   swap   defaults   0   0

其中,第一个参数是swap分区的设备名,第二个参数是分区的类型(应该设置为"swap"),第三个参数也是"swap",第四个参数是挂载选项,第五个参数是dump标志位(通常设置为0),第六个参数是fsck标志位(通常设置为0)。

如果我们需要暂时禁用swap分区,可以使用以下命令:

$ sudo swapoff /dev/sdb1

这将导致系统停止使用/dev/sdb1分区作为swap分区。如果我们需要永久禁用该分区作为swap分区,可以编辑/etc/fstab文件并将该行注释掉或删除。

stress

stress 是一个用于模拟系统负载的工具。它可以帮助你测试系统在高负载下的稳定性和性能,以及评估系统资源的使用情况。

以下是 stress 命令的基本语法:

stress [OPTION]...

其中,OPTION 是可选的,用于指定一些选项。

以下是一些常用的 stress 命令选项:

  • -c N:指定要创建的 CPU 负载数量。
  • -d N:指定要创建的磁盘 I/O 负载数量。
  • -m N:指定要创建的内存负载数量。
  • -i N:指定要创建的 I/O 负载数量。
  • -t TIME:指定要运行 stress 的时间。
  • -v:输出详细的运行日志。
  • -q:不输出运行日志。
  • --cpu N:指定 CPU 负载占用率,例如 --cpu 8 表示将所有 CPU 核心使用率提升至 80%。
  • --io N:指定 I/O 负载占用率。
  • --vm N:指定内存负载占用率。

以下是一些 stress 命令的示例:

  1. 创建 8 个 CPU 负载:
$ stress -c 8

这个命令会创建 8 个 CPU 负载,使用所有可用的 CPU 核心。

  1. 创建 4 个磁盘 I/O 负载:
$ stress -d 4

这个命令会创建 4 个磁盘 I/O 负载,使用默认的块大小和文件名。

  1. 创建 2 个内存负载:
$ stress -m 2

这个命令会创建 2 个内存负载,每个负载使用 50% 的系统内存。

  1. 创建 2 个内存负载:
$ stress -i 1

这个命令会创建 1 个 I/O 负载,使用默认的块大小和文件名。

  1. 创建 4 个 CPU 负载,并限制每个负载使用 50% 的 CPU 核心:
$ stress --cpu 4 --cpu-load 50

这个命令会创建 4 个 CPU 负载,并限制每个负载使用 50% 的 CPU 核心。

  1. 通过 --vm 选项使用虚拟内存模式stress 命令可以模拟虚拟内存的使用情况。通过 --vm 选项,可以指定要使用的虚拟内存大小和数量。例如,以下命令将在系统上创建一个 1GB 大小的虚拟内存:
$ stress --vm 1 --vm-bytes 1G
  1. 通过 --io 选项使用磁盘 I/O 模式stress 命令可以模拟磁盘 I/O 操作,通过 --io 选项指定要使用的 I/O 操作数量和类型。例如,以下命令将在系统上创建一个 4KB 大小的随机文件,并进行 10 次读取和写入操作:
$ stress --io 10 --hdd 1 --hdd-bytes 4K
  1. 通过 --cpu 选项使用 CPU 模式stress 命令可以模拟 CPU 负载。通过 --cpu 选项,可以指定要使用的 CPU 数量和工作线程数量。例如,以下命令将在系统上创建 8 个线程,每个线程使用 50% 的 CPU 资源:
$ stress --cpu 8 --cpu-load 50
  1. 通过 --timeout 选项设置持续时间默认情况下,stress 命令会一直运行,直到用户手动停止。但是可以通过 --timeout 选项指定运行时间。例如,以下命令将在系统上模拟 1 分钟的 CPU 负载:
$ stress --cpu 8 --cpu-load 50 --timeout 60s

  1. 当初做swap测试的时候用到一条命令
sudo stress --vm 1 --vm-bytes 8G --timeout 30s

其中,--vm 参数表示要生成占用内存的进程,--vm-bytes 参数表示每个进程所占用的内存大小,--timeout参数表示测试的时长。这个命令会在30秒内让系统生成一个占用2GB内存的进程,观察期间内存和交换分区的使用情况即可。

setuid

setuid、setgid和sticky bit是Linux文件系统中的三个特殊权限位,它们分别被称为SUID、SGID和Sticky Bit。

setuid是一种在Linux中赋予二进制文件特权的权限位。当二进制文件拥有setuid权限时,运行该文件的进程将具有该文件所有者的权限,而不是当前用户的权限。这种权限通常用于允许用户执行一些需要特殊权限才能运行的程序,例如执行需要root权限的程序。

用法:

chmod u+s filenamechmod 4xxx filename (其中xxx为权限掩码)

选项:

  • u+s:设置setuid权限
  • g-s:取消setuid权限
  • 4000:八进制权限掩码,用于设置setuid权限

示例:

设置/usr/bin/passwd的setuid权限,使其允许普通用户修改密码:

sudo chmod u+s /usr/bin/passwd

取消/usr/bin/passwd的setuid权限:

sudo chmod u-s /usr/bin/passwd

setgid

setgid是一种在Linux中赋予目录或二进制文件特权的权限位。当目录或二进制文件拥有setgid权限时,运行该目录或文件的进程将具有该目录或文件所属组的权限,而不是当前用户的权限。这种权限通常用于在多个用户之间共享文件,以确保共享文件组的成员具有相同的权限。

用法:

chmod g+s filenamechmod 2xxx filename (其中xxx为权限掩码)

选项:

  • g+s:设置setgid权限
  • g-s:取消setgid权限
  • 2000:八进制权限掩码,用于设置setgid权限

设置/home/shared目录的setgid权限,使所有新创建的文件和目录都与该目录属于同一组:

sudo chmod g+s /home/shared

取消/home/shared目录的setgid权限:

sudo chmod g-s /home/shared

sticky bit

Sticky bit是一种在Linux中赋予目录特权的权限位。当目录拥有sticky bit权限时,只有目录所有者和文件所有者才能删除该目录中的文件。这种权限通常用于在多个用户之间共享目录,以防止其他用户误删别人的文件。

在文件或目录的权限表示中,sticky bit用一个“t”来表示。对于目录,表示为d+rwxrwt,其中最后一个字母t就是sticky bit;对于文件,表示为-rwxrwxrwt。

用法:

chmod +t directorychmod 1xxx directory (其中xxx为权限掩码)

  1. 目录的权限表示:d+rwxrwxrwt
  2. 文件的权限表示:-rwxrwxrwt

选项:

  • +t:设置Sticky bit权限
  • -t:取消Sticky bit权限
  • 1000:八进制权限掩码,用于设置Sticky bit权限

示例:

设置/home/shared目录的Sticky bit权限,以防止其他用户误删别人的文件:

sudo chmod +t /home/shared
chmod 1755 /home/test

其中,1表示sticky bit,7表示用户具有读、写、执行权限,5表示组和其他用户具有读和执行权限。

需要注意的是,sticky bit只对目录有效,对于文件则没有作用。此外,sticky bit与setgid权限位有些类似,但是两者的作用不同,setgid权限位是用来控制文件或目录的用户组,而不是删除权限。

tcpdump

tcpdump 是一款用于 Linux 和 Unix 系统的强大命令行网络分析工具。它允许您捕获并实时查看正在通过网络接口传输的数据包。tcpdump 使用 pcap 库来捕获数据包,因此可以解析各种网络协议,包括 TCP、UDP、ICMP 等。它对网络管理员和安全专家进行故障排查、网络性能监控和安全分析等任务非常有用。

以下是一些常用的 tcpdump 命令和选项:

  1. -i:指定网络接口。使用这个选项可以选择要捕获数据包的网络接口,如tcpdump -i eth0

  2. -n:不解析主机名。默认情况下,tcpdump会将IP地址解析为主机名。使用-n选项可以禁用这个功能,如tcpdump -n

  3. -c:捕获指定数量的数据包。使用这个选项可以限制捕获的数据包数量,如tcpdump -c 10表示捕获10个数据包。

  4. -w:将捕获的数据包写入文件。使用这个选项可以将捕获的数据包保存到一个文件中,以便后续分析,如tcpdump -w output.pcap

  5. -r:从文件中读取数据包。使用这个选项可以分析之前使用-w选项保存的数据包文件,如tcpdump -r output.pcap

  6. -v-vv-vvv:详细输出。这些选项会提供不同级别的详细输出,-v是基本详细信息,-vv-vvv会提供更多详细信息。

  7. srcdst:指定源地址和目的地址。使用这两个关键词可以过滤特定的源地址和目的地址,如tcpdump src 192.168.1.1tcpdump dst 192.168.1.2

  8. port:指定端口。使用这个关键词可以过滤特定的端口,如tcpdump port 80

  9. host:指定主机。使用这个关键词可以过滤与特定主机相关的数据包,如tcpdump host example.com

  10. tcpudpicmp:指定协议。使用这些关键词可以过滤特定协议的数据包,如tcpdump tcp

  11. 捕获指定网络接口的数据包:

tcpdump -i <接口名称>
  1. 捕获指定数量的数据包:
tcpdump -c <数据包数量>
  1. 以详细模式显示数据包:
tcpdump -v
  1. 以非常详细模式显示数据包:
tcpdump -vv
  1. 以最详细模式显示数据包:
tcpdump -vvv
  1. 显示数据包的完整内容:
tcpdump -X
  1. 只显示指定主机的数据包:
tcpdump host <IP地址>
  1. 只显示指定端口的数据包:
tcpdump port <端口号>
  1. 只显示指定协议的数据包:
tcpdump icmp
  1. 使用表达式过滤数据包:
tcpdump "src <源IP地址> and dst <目标IP地址>"
  1. 将捕获的数据包保存到文件中:
tcpdump -w <文件名>
  1. 从文件中读取并分析数据包:
tcpdump -r <文件名>

touch

touch 命令是 Linux 系统中的一个基本命令,它用于创建一个新的空文件或更新现有文件的访问和修改时间戳。如果指定的文件不存在,则 touch 命令将创建一个空文件。

创建一个新的空文件:

touch filename.txt

更改文件的访问和修改时间戳:

touch filename.txt

使用绝对时间更改文件的时间戳:

touch -t YYYYMMDDhhmm.ss filename.txt

其中,YYYYMMDDhhmm.ss 是一个代表时间戳的数字字符串,它的格式为年月日小时分钟秒钟。

tr

tr是一个用于字符转换和删除的命令。它可以用来对输入的文本进行一些简单的字符操作,如替换、删除、压缩等

以下是tr命令的基本语法:

tr [OPTION]... SET1 [SET2]

其中,OPTION是可选的,用于指定一些选项;SET1SET2是必须的,分别表示要进行转换的字符集和转换后的字符集。

以下是tr命令的一些常用选项:

  • -c:用SET1中未包含的字符来替换文本中的字符。
  • -d:删除文本中包含的SET1中的字符。
  • -s:压缩文本中相邻的重复字符,只保留一个。
  • -t:用SET2中的字符来替换SET1中的字符。

以下是一些tr命令的示例:

  1. 将文本中的小写字母转换成大写字母
$ echo "hello, world" | tr '[:lower:]' '[:upper:]'
HELLO, WORLD
  1. 删除文本中的空格:
$ echo "hello,    world" | tr -d ' '
hello,world
  1. 压缩文本中的重复字符:(相当于去重)
$ echo "hello, world" | tr -s 'l'
helo, world
  1. 将文本中的数字替换为#
$ echo "123456" | tr '[:digit:]' '#'
######
  1. 保留文本中的指定字符:
$ echo "hello, world" | tr -c '[:alpha:]' '\n'
hello
world

这个命令使用 -c 选项来保留 SET1 中的字符,删除其他字符,然后用换行符替换删除的字符。

  1. 在文本中插入换行符:
$ echo "hello, world" | tr -s ' ' '\n'
hello,
world

这个命令使用 -s 选项来压缩相邻的空格,然后用换行符替换每个空格。

  1. 将文本中的字符替换为其 ASCII 编码值:
$ echo "hello, world" | tr '[:print:]' '[\000-\177]'
\150\145\154\154\157\054\040\167\157\162\154\144

这个命令使用 [:print:] 来表示所有可打印字符,然后将这些字符替换为其 ASCII 编码值。

tr 命令中,[:lower:] 是一种字符集合,用于匹配所有小写字母。类似的字符集合还有很多,以下是一些常用的字符集合:

  • [:upper:]:匹配所有大写字母。
  • [:alpha:]:匹配所有字母,包括大小写。
  • [:digit:]:匹配所有数字。
  • [:alnum:]:匹配所有字母和数字,包括大小写。
  • [:punct:]:匹配所有标点符号。
  • [:space:]:匹配所有空白字符,包括空格、制表符和换行符。
  • [:print:]:匹配所有可打印字符。

tr 命令中,字符集合用方括号括起来,例如 [:lower:] 表示小写字母集合。可以使用这些字符集合来定义 SET1SET2,从而对文本进行转换。

以下是一些 tr 命令示例,演示如何使用字符集合:

  1. 将所有小写字母转换为大写字母:
$ echo "hello, world" | tr '[:lower:]' '[:upper:]'
HELLO, WORLD
  1. 从文本中删除所有标点符号:
$ echo "Hello, World!" | tr -d '[:punct:]'
Hello World

这个命令使用 -d 选项删除所有匹配到的标点符号。

  1. 将文本中的空格转换为换行符:
$ echo "Hello, World" | tr ' ' '\n'
Hello,
World

这个命令使用空格作为 SET1,使用换行符作为 SET2。

tac

在Linux中,tac命令是一种文本处理工具,它用于反转(倒序)文本文件的行顺序。tac命令的功能与cat命令类似,但是它是按照从后往前的顺序输出文件内容。以下是一些关于tac命令的详细信息:

tac命令的基本语法如下:

tac [选项] 文件名

其中,选项包括:

  • -b, --before:在每行输出之前添加定界符。
  • -s, --separator=字符串:使用指定的字符串作为定界符,而不是默认的换行符。
  • –help:显示命令帮助信息。
  • –version:显示命令版本信息
  1. 反转文件内容
tac 文件名
  1. 在每行输出之前添加定界符

使用tac命令在每行输出之前添加定界符的语法格式为:

tac -b 文件名
  1. 使用指定的字符串作为定界符

使用tac命令使用指定的字符串作为定界符的语法格式为:

tac -s 字符串 文件名

例如,反转名为test.txt的文件的内容,并使用定界符"|"代替默认的换行符,可以执行以下命令:

tac -s "|" test.txt
  1. 结合其他命令使用

tac命令可以结合其他命令使用,例如与grep、awk、sed等命令一起使用。

例如,反转名为test.txt的文件的内容,然后使用grep命令过滤包含特定字符串的行,可以执行以下命令

tac test.txt | grep "特定字符串"

tar

在 Linux 中,有多种打包压缩文件的工具,其中最常用的是 tar。tar 可以将多个文件或目录打包成一个 tar 文件,然后选用 gzip、bzip2、xz 等工具对打成的tar包进行压缩

# 下面是 tar 命令的一些常用参数和选项:
-c:此选项用于创建存档。也就是打包。必须跟随f选项来指定存档的名称。
示例:tar -cf archive.tar foo bar(从foo和bar文件创建archive.tar)
-t:用于列出存档中的文件。
示例:tar -tvf archive.tar(详细列出archive.tar中的所有文件)
-x:从存档中提取文件。
示例:tar -xf archive.tar(从archive.tar提取所有文件)
--add-file=FILE:将给定的FILE添加到存档中(如果其名称以破折号开头,则很有用)。
-C, --directory=DIR:更改到目录DIR。
示例:tar -cf archive.tar -C /path/to/directory(在创建存档之前更改到指定目录)
--exclude=PATTERN:排除与PATTERN匹配的文件。
--exclude-backups:排除备份和锁文件。
--exclude-caches:排除包含CACHEDIR.TAG的目录的内容,但保留标记文件本身。
--exclude-caches-all:排除包含CACHEDIR.TAG的目录。
--exclude-caches-under:排除包含CACHEDIR.TAG的目录下的所有内容。
--exclude-ignore=FILE:从FILE中读取每个目录的排除模式(如果存在)。
--exclude-ignore-recursive=FILE:从FILE中读取每个目录及其子目录的排除模式(如果存在)。
--exclude-tag=FILE:排除包含FILE的目录的内容,但保留FILE本身。
--exclude-tag-all=FILE:排除包含FILE的目录。
--exclude-tag-under=FILE:排除包含FILE的目录下的所有内容。
--exclude-vcs:排除版本控制系统目录。
--exclude-vcs-ignores:从VCS忽略文件中读取排除模式。
--no-null:禁用先前的--null选项的效果。
--no-recursion:避免自动进入目录。
--no-unquote:不取消输入文件或成员名称的引用。
--no-verbatim-files-from:-T将以破折号开头的文件名视为选项(默认)。
--null:-T读取以空终止的名称;暗示--verbatim-files-from。
--recursion:递归进入目录(默认)。
-T, --files-from=FILE:从FILE获取要提取或创建的名称。
--unquote:取消输入文件或成员名称的引用(默认)。
--verbatim-files-from:-T 选项按原样读取文件名(不进行转义或选项处理)。
-X, --exclude-from=FILE:排除在 FILE 中列出的模式

文件名匹配选项(同时影响排除和包含模式):
--anchored:模式匹配文件名开头。
--ignore-case:忽略大小写。
--no-anchored:模式在任何 '/' 之后匹配(排除的默认设置)。
--no-ignore-case:大小写敏感匹配(默认)。
--no-wildcards:逐字字符串匹配。
--no-wildcards-match-slash:通配符不匹配 '/'。
--wildcards:使用通配符(默认)。
--wildcards-match-slash:通配符匹配 '/'(排除的默认设置)。

主要操作模式:
-A, --catenate, --concatenate:将 tar 文件附加到存档中。
-c, --create:创建新存档。
-d, --diff, --compare:找出存档和文件系统之间的差异。
--delete:从存档中删除(不适用于磁带!)。
-r, --append:将文件附加到存档的末尾。
-t, --list:列出存档的内容。
--test-label:测试存档卷标并退出。
-u, --update:仅附加存档中的文件的新副本。
-x, --extract, --get:从存档中提取文件。

操作修饰符:
--check-device:在创建增量存档时检查设备号(默认)。
-g, --listed-incremental=FILE:处理新的 GNU 格式增量备份。
-G, --incremental:处理旧的 GNU 格式增量备份。
--hole-detection=TYPE:检测空洞的技术。
--ignore-failed-read:在无法读取文件时不要以非零退出。
--level=NUMBER:为创建的列出的增量存档设置转储级别。
-n, --seek:存档是可寻址的。
--no-check-device:在创建增量存档时不检查设备号。
--no-seek:存档不可寻址。
--occurrence[=NUMBER]:仅处理存档中每个文件的第 NUMBER 次出现;此选项仅在与子命令 --delete、--diff、--extract 或 --list 以及在命令行上或通过 -T 选项给出文件列表时有效;NUMBER 默认为 1。
--sparse-version=MAJOR[.MINOR]:设置要使用的稀疏格式的版本(暗示 --sparse)。
-S, --sparse:有效处理稀疏文件。

覆盖控制:
-k, --keep-old-files:在提取时不替换现有文件,将它们视为错误。
--keep-directory-symlink:在提取时保留现有的指向目录的符号链接。
--keep-newer-files:不替换比其存档副本更新的现有文件。
--no-overwrite-dir:保留现有目录的元数据。
--one-top-level[=DIR]:创建一个子目录,以避免提取松散文件。
--overwrite:在提取时覆盖现有文件。
--overwrite-dir:在提取时覆盖现有目录的元数据(默认)。
--recursive-unlink:在提取目录之前清空层次结构。
--remove-files:将文件添加到存档后删除它们。
--skip-old-files:在提取时不替换现有文件,静默跳过它们。
-U, --unlink-first:在其上提取之前删除每个文件。
-W, --verify:尝试在写入后验证存档。

选择输出流:
--ignore-command-error:忽略子进程的退出代码。
--no-ignore-command-error:将子进程的非零退出代码视为错误。
-O, --to-stdout:将文件提取到标准输出。
--to-command=COMMAND:将提取的文件通过管道发送到另一个程序。

处理文件属性:
--atime-preserve[=METHOD]:保留转储文件的访问时间,通过在读取后恢复时间(METHOD='replace';默认)或首先不设置时间(METHOD='system')。
--clamp-mtime:仅在文件比使用 --mtime 给定的文件更近时设置时间。
--delay-directory-restore:延迟设置提取的目录的修改时间和权限,直到提取结束。
--group=NAME:将 NAME 强制用作添加文件的组。
--group-map=FILE:使用 FILE 来映射文件所有者 GID 和名称。
--mode=CHANGES:强制为添加的文件设置(符号)模式更改。
--mtime=DATE-OR-FILE:从 DATE-OR-FILE 设置添加文件的 mtime。
-m, --touch:不提取文件的修改时间。
--no-delay-directory-restore:取消 --delay-directory-restore 选项的效果。
--no-same-owner:以你自己的身份提取文件(普通用户的默认设置)。
--no-same-permissions:在从存档提取权限时应用用户的 umask(普通用户的默认设置)。
--numeric-owner:始终为用户/组名称使用数字。
--owner=NAME:将 NAME 强制用作添加文件的所有者。
--owner-map=FILE:使用 FILE 来映射文件所有者 UID 和名称。
-p, --preserve-permissions, --same-permissions:提取有关文件权限的信息(超级用户的默认设置)。
--same-owner:尝试以存档中存在的相同所有权提取文件(超级用户的默认设置)。
-s, --preserve-order, --same-order:成员参数按照存档中文件的顺序列出。

处理扩展文件属性:
--acls:启用 POSIX ACLs 支持。
--no-acls:禁用 POSIX ACLs 支持。
--no-selinux:禁用 SELinux 上下文支持。
--no-xattrs:禁用扩展属性支持。
--selinux:启用 SELinux 上下文支持。
--xattrs:启用扩展属性支持。
--xattrs-exclude=MASK:指定 xattr 键的排除模式。
--xattrs-include=MASK:指定 xattr 键的包含模式

设备选择和切换:
-f, --file=ARCHIVE:使用存档文件或设备 ARCHIVE。
--force-local:即使具有冒号,存档文件也是本地的。
-F, --info-script=NAME, --new-volume-script=NAME:在每个磁带结束时运行脚本(暗示 -M)。
-L, --tape-length=NUMBER:在写入 NUMBER x 1024 字节后更改磁带。
-M, --multi-volume:创建/列出/提取多卷存档。
--rmt-command=COMMAND:使用给定的 rmt COMMAND 而不是 rmt。
--rsh-command=COMMAND:使用远程 COMMAND 而不是 rsh。
--volno-file=FILE:使用/更新 FILE 中的卷号。

设备阻塞:
-b, --blocking-factor=BLOCKS:每个记录 BLOCKS x 512 字节。
-B, --read-full-records:在我们读取时重新阻止(适用于 4.2BSD 管道)。
-i, --ignore-zeros:忽略存档中的零块(表示 EOF)。
--record-size=NUMBER:每个记录的字节数,是 512 的倍数。

存档格式选择:
-H, --format=FORMAT:创建指定格式的存档。
    gnu:GNU tar 1.13.x 格式。
    oldgnu:tar <= 1.12 的 GNU 格式。
    pax:POSIX 1003.1-2001 (pax) 格式。
    posix:与 pax 相同。
    ustar:POSIX 1003.1-1988 (ustar) 格式。
    v7:旧的 V7 tar 格式。
--old-archive, --portability:与 --format=v7 相同。
--pax-option=keyword[[:]=value][,keyword[[:]=value]]...:控制 pax 关键字。
--posix:与 --format=posix 相同。
-V, --label=TEXT:创建卷名为 TEXT 的存档;在列表/提取时,使用 TEXT 作为卷名的通配符模式

压缩选项:
-a, --auto-compress:使用存档后缀来确定压缩程序。
-I, --use-compress-program=PROG:通过 PROG 过滤(必须接受 -d)。
-j, --bzip2:通过 bzip2 过滤存档。
-J, --xz:通过 xz 过滤存档。
--lzip:通过 lzip 过滤存档。
--lzma:通过 xz --format=lzma 过滤存档。
--lzop:通过 lzop 过滤存档。
--no-auto-compress:不使用存档后缀来确定压缩程序。
-z, --gzip, --gunzip, --ungzip:通过 gzip 过滤存档。
-Z, --compress, --uncompress:通过 compress 过滤存档。

本地文件选择:
--backup[=CONTROL]:删除前备份,选择版本 CONTROL。
-h, --dereference:跟随符号链接;存档并转储它们指向的文件。
--hard-dereference:跟随硬链接;存档并转储它们引用的文件。
-K, --starting-file=MEMBER-NAME:开始于成员 MEMBER-NAME 读取存档。
--newer-mtime=DATE:只比较日期和数据更改时间。
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE:仅存储比 DATE-OR-FILE 更新的文件。
--one-file-system:创建存档时保持在本地文件系统。
-P, --absolute-names:不从文件名中删除开头的 '/'--suffix=STRING:删除前备份,覆盖通常的后缀('~',除非通过环境变量 SIMPLE_BACKUP_SUFFIX 覆盖)。

文件名转换:
--strip-components=NUMBER:在提取时从文件名中去除 NUMBER 个前导组件。
--transform=EXPRESSION, --xform=EXPRESSION:使用 sed 替换表达式来转换文件名。

信息输出:
--checkpoint[=NUMBER]:每 NUMBER 条记录显示一次进度消息(默认为10)。
--checkpoint-action=ACTION:在每个检查点上执行动作。
--full-time:以完整分辨率打印文件时间。
--index-file=FILE:将详细输出发送到 FILE。
-l, --check-links:如果未转储所有链接,则打印一条消息。
--no-quote-chars=STRING:禁用字符串中的字符引用。
--quote-chars=STRING:额外引用来自 STRING 的字符。
--quoting-style=STYLE:设置名称引用样式;见下文了解有效的 STYLE 值。
-R, --block-number:在每条消息中显示存档中的块号。
--show-defaults:显示 tar 默认值。
--show-omitted-dirs:在列出或提取时,列出不符合搜索条件的每个目录。
--show-snapshot-field-ranges:显示快照文件字段的有效范围。
--show-transformed-names, --show-stored-names:显示转换后的文件或存档名称。
--totals[=SIGNAL]:处理存档后打印总字节数;如果带参数,则在接收到此信号时打印总字节数。允许的信号有:SIGHUP, SIGQUIT, SIGINT, SIGUSR1 和 SIGUSR2;也接受没有 SIG 前缀的名称。
--utc:以 UTC 打印文件修改时间。
-v, --verbose:详细列出处理的文件。
--warning=KEYWORD:警告控制。
-w, --interactive, --confirmation:每个操作都要求确认。

兼容性选项:
-o:创建时与 --old-archive 相同;提取时与 --no-same-owner 相同。

其他选项:

-?, --help:提供此帮助列表。
--restrict:禁用某些可能有害的选项。
--usage:给出简短的使用消息。
--version:打印程序版本。
长选项的强制或可选参数对于任何相应的短选项也是强制或可选的。

备份后缀是'~',除非使用 --suffix 或 SIMPLE_BACKUP_SUFFIX 设置。
版本控制可以使用 --backup 或 VERSION_CONTROL 设置,值为:

none, off:永远不要备份
t, numbered:进行编号备份
nil, existing:如果有编号备份则编号,否则简单
never, simple:始终进行简单备份
--quoting-style 选项的有效参数包括:

literal
shell
shell-always
shell-escape
shell-escape-always
c
c-maybe
escape
locale
clocale

常用选项:

  1. -c:创建一个新的 tar 文件。
  2. -x:从一个 tar 文件(归档文件)中提取文件。
  3. -f:指定 tar 文件的文件名。
  4. -t 列出归档文件中的内容。
  5. -v 详细模式,显示操作过程。
  6. -z:使用 gzip 进行压缩和解压缩。
  7. -j:使用 bzip2 进行压缩和解压缩。
  8. -J:使用 xz 进行压缩和解压缩。
  9. -C:指定解压缩的目标目录。
  10. -p 保留文件的原始权限。
  11. -t或--list :列出备份文件的内容。
#下面是一些常见的 tar 命令操作:
1.创建一个新的 tar 文件:tar -cvf archive.tar file1 file2 file3
该命令会创建一个名为 archive.tar 的 tar 文件,并将 file1、file2 和 file3 文件添加到该文件中。

2.查看 tar 文件的内容:tar -tvf archive.tar
该命令会列出 archive.tar 文件中包含的所有文件的名称和属性。

3.解压缩一个 tar 文件(从归档中提取文件):tar -xvf archive.tar
该命令会将 archive.tar 文件中的所有文件解压缩到当前目录中。

4.从一个使用 gzip 压缩的归档文件中提取文件/解压缩一个 tar.gz 文件:tar -zxvf archive.tar.gz
该命令会将 archive.tar.gz 文件中的所有文件解压缩到当前目录中,并使用 gzip 进行解压缩。

5.解压缩一个 tar.bz2 文件:tar -jxvf archive.tar.bz2
该命令会将 archive.tar.bz2 文件中的所有文件解压缩到当前目录中,并使用 bzip2 进行解压缩。

6.解压缩一个 tar.xz 文件:tar -Jxvf archive.tar.xz
该命令会将 archive.tar.xz 文件中的所有文件解压缩到当前目录中,并使用 xz 进行解压缩。

7.将一个目录打包成 tar 文件:tar -cvf archive.tar dir/
该命令会将 dir/ 目录下的所有文件和子目录打包成 archive.tar 文件。

8.将一个目录打包成 tar.gz 文件:tar -czvf archive.tar.gz dir/
该命令会将 dir/ 目录下的所有文件和子目录打包成 archive.tar.gz 文件,并使用 gzip 进行压缩。

9.将一个目录打包成 tar.bz2 文件:tar -cjvf archive.tar.bz2 dir/
该命令会将 dir/ 目录下的所有文件和子目录打

10.使用 xz 压缩:
tar -cJvf archive.tar.xz directory

11.添加文件到已存在的归档:
tar -rvf archive.tar newfile

12.从归档文件中删除文件:
tar --delete -f archive.tar file-to-delete

tmux

tmux 是一个在 Linux 系统中用于多路复用终端的工具。你可以把它看作是一个窗口管理器,只不过这个窗口管理器运行在你的文本终端里。tmux 可以让你在一个终端窗口中使用多个终端会话,而且这些会话可以在后台运行,并且完全独立于你的终端窗口。

Tmux 是一个终端复用器(terminal multiplexer)。

典型的命令行使用方式

打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session)。

会话的一个重要特点是,窗口与其中启动的进程是绑定的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。

因此SSH 登录远程计算机,打开一个远程窗口执行命令,如果网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。

为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。

tmux基本用法

(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。

(2) 它可以让新窗口"接入"已经存在的会话。

(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。

(4)它还支持窗口任意的垂直和水平拆分。

启动与退出

安装完成后,键入tmux命令,就进入了 Tmux 窗口。

$ tmux

上面命令会启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。

按下Ctrl+d或者显式输入exit命令,就可以退出 Tmux 窗口。

$ exit

前缀键

Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效。

举例来说,帮助命令的快捷键是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就会显示帮助信息。然后,按下 ESC 键或q键,就可以退出帮助。

会话管理

新建会话

第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。

使用编号区分会话,不太直观,更好的方法是为会话起名。

$ tmux new -s <session-name>
$ tmux new-session -s <session-name>

上面命令新建一个指定名称的会话。

分离会话

在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。

$ tmux detach
$ tmux detach-client

上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。

tmux ls命令可以查看当前所有的 Tmux 会话。

$ tmux ls
# or
$ tmux list-session
接入会话

tmux attach命令用于重新接入某个已存在的会话。

# 使用会话编号
$ tmux attach -t 0

# 使用会话名称
$ tmux attach -t <session-name>
$ tmux attach-session -t <session-name>
杀死会话

tmux kill-session命令用于杀死某个会话。

# 使用会话编号
$ tmux kill-session -t 0

# 使用会话名称
$ tmux kill-session -t <session-name>
切换会话

tmux switch命令用于切换会话,在一个会话中切换到另一个会话。

# 使用会话编号
$ tmux switch -t 0

# 使用会话名称
$ tmux switch -t <session-name>
重命名会话

tmux rename-session命令用于重命名会话。

$ tmux rename-session -t 0 <new-name>

上面命令将0号会话重命名。

会话快捷键

下面是一些会话相关的快捷键。

  • Ctrl+b d:分离当前会话。
  • Ctrl+b s:列出所有会话。
  • Ctrl+b $:重命名当前会话。

最简操作流程

综上所述,以下是 Tmux 的最简操作流程。

  1. 新建会话tmux new -s my_session
  2. 在 Tmux 窗口运行所需的程序。
  3. 按下快捷键Ctrl+b d将会话分离。
  4. 下次使用时,重新连接到会话tmux attach-session -t my_session

窗格操作

Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。

划分窗格

tmux split-window命令用来划分窗格。

# 划分上下两个窗格
$ tmux split-window

# 划分左右两个窗格
$ tmux split-window -h

移动光标

tmux select-pane命令用来移动光标位置。

# 光标切换到上方窗格
$ tmux select-pane -U

# 光标切换到下方窗格
$ tmux select-pane -D

# 光标切换到左边窗格
$ tmux select-pane -L

# 光标切换到右边窗格
$ tmux select-pane -R

交换窗格位置

tmux swap-pane命令用来交换窗格位置。

# 当前窗格上移
$ tmux swap-pane -U

# 当前窗格下移
$ tmux swap-pane -D

窗格快捷键

下面是一些窗格操作的快捷键。

  • Ctrl+b %:划分左右两个窗格。
  • Ctrl+b ":划分上下两个窗格。
  • Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键
  • Ctrl+b ;:光标切换到上一个窗格。
  • Ctrl+b o:光标切换到下一个窗格。
  • Ctrl+b {:当前窗格与上一个窗格交换位置。
  • Ctrl+b }:当前窗格与下一个窗格交换位置。
  • Ctrl+b Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。
  • Ctrl+b Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。
  • Ctrl+b x:关闭当前窗格。
  • Ctrl+b !:将当前窗格拆分为一个独立窗口。
  • Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。
  • Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小。
  • Ctrl+b q:显示窗格编号。

窗口管理

除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口。

新建窗口

tmux new-window命令用来创建新窗口。

$ tmux new-window

# 新建一个指定名称的窗口
$ tmux new-window -n <window-name>

切换窗口

tmux select-window命令用来切换窗口。

# 切换到指定编号的窗口
$ tmux select-window -t <window-number>

# 切换到指定名称的窗口
$ tmux select-window -t <window-name>

重命名窗口

tmux rename-window命令用于为当前窗口起名(或重命名)。

$ tmux rename-window <new-name>
窗口快捷键

下面是一些窗口操作的快捷键。t

  • Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
  • Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
  • Ctrl+b n:切换到下一个窗口。
  • Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号,0-9.
  • Ctrl+b w:从列表中选择窗口。
  • Ctrl+b ,:窗口重命名。
  • Ctrl-b &:关闭当前的窗口。这将会关闭窗口中的所有面板。
  • Ctrl-b t:在状态栏中显示时间
  • Ctrl-b ::进入 tmux 命令模式,可以在命令行中执行更高级的命令
  • Ctrl-b [:进入复制模式,可以在历史记录中浏览和选择文本。
  • Ctrl-b ]:将复制模式中的文本粘贴到当前窗格。
  • Ctrl-b =:显示当前窗口和面板的信息,包括窗口和面板的编号、名称等。

其他命令

下面是一些其他命令。

# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys

# 列出所有 Tmux 命令及其参数
$ tmux list-commands

# 列出当前所有 Tmux 会话的信息
$ tmux info

# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf

tee

tee命令可以把标准输入中的数据输出到标准输出和文件中,这样就可以在不破坏原有数据的前提下将数据输出到多个地方。

使用tee命令的格式如下:

tee [选项] [文件]
或者
command | tee [-a] file1 [file2 ...]
其中,command是一个命令或者一系列命令,用于产生数据。管道符“|”表示将command的标准输出传递给tee命令。-a选项表示在文件中追加数据,而不是覆盖原有数据。file1、file2等是文件名,表示将数据输出到这些文件中。

常用选项有:

  • -a:追加数据到文件末尾。
  • -i:忽略中断信号。

举个例子,你可以这样使用tee命令:

echo "hello" | tee output.txt
ls | tree output.txt

这条命令会将字符串"hello"输出到标准输出和文件output.txt中。

如果你想追加数据到文件末尾,可以使用-a选项:

echo "world" | tee -a output.txt

这条命令会将字符串"world"追加到文件output.txt的末尾。

  1. 追加数据到文件
ps aux | tee -a processes.txt
这个命令将列出当前正在运行的进程并将其输出到processes.txt文件中,如果processes.txt文件已经存在,则会将新数据追加到文件的末尾。
  1. 多个文件同时输出
dmesg | tee errors.txt messages.txt
这个命令将dmesg命令的输出同时输出到errors.txt和messages.txt文件中,可以将多个文件名作为tee命令的参数。

tree

tree 命令是 Linux 系统中的一个非常有用的命令,它可以以树形结构显示指定目录及其子目录中的所有文件和文件夹。这使得 tree 命令非常适合用于快速查看整个目录结构,并确定目录中有哪些文件和文件夹。

# 选项
格式:tree + 参数
 tree命令行参数:
 
1.列表选项(Listing options)
-a:列出所有文件,包括隐藏文件(以.开头的文件)。
-d:仅列出目录。
-l:遇到符号链接(symlink)时,像目录一样遍历。
-f:为每个文件打印完整的路径前缀。
-x:仅列出当前文件系统的内容。
-L level:只遍历到指定深度的目录。
-R:当达到最大目录深度时,重新运行 tree。
-P pattern:仅列出与给定模式匹配的文件。
-I pattern:不列出与给定模式匹配的文件。
--ignore-case:模式匹配时忽略大小写。
--matchdirs:在 -P 模式匹配中包括目录名。
--noreport:不显示树列表末尾的文件/目录计数。
--charset X:用字符集 X 输出终端/HTML和缩进线。
--filelimit #:不遍历包含超过#个文件的目录。
--timefmt <f>:按照格式<f>打印并格式化时间。
-o filename:输出到文件而不是 stdout。
--du:打印目录大小。
--prune:从输出中删除空目录。

2.文件选项(File options)
-q:将不可打印的字符打印为 ?。
-N:原样打印不可打印的字符。
-Q:用双引号引用文件名。
-p:打印每个文件的权限。
-u:显示文件所有者或UID号。
-g:显示文件组所有者或GID号。
-s:打印每个文件的大小(字节数)。
-h:以更易读的方式打印大小。
--si:类似于 -h,但使用 SI 单位(1000 的幂)。
-D:打印最后修改时间或(-c)状态更改时间。
-F:根据 ls -F 在文件名后附加 /、=、*、@、|>。
--inodes:打印每个文件的 inode 号。
--device:打印每个文件所属的设备 ID 号。

3.排序选项(Sorting options)
-v:按版本对文件进行字母数字排序。
-t:按最后修改时间对文件进行排序。
-c:按最后状态更改时间对文件进行排序。
-U:不对文件进行排序。
-r:反转排序顺序。
--dirsfirst:在文件之前列出目录(-U 禁用)。
--sort X:选择排序:名称、版本、大小、修改时间、创建时间。

4.图形选项(Graphics options)
-i:不打印缩进线。
-A:打印 ANSI 线图形缩进线。
-S:打印 CP437(控制台)图形缩进线。
-n:始终关闭着色(-C 覆盖)。
-C:始终开启着色。

5.XML/HTML/JSON 选项
-X:打印树的 XML 表示。
-J:打印树的 JSON 表示。
-H baseHREF:以 baseHREF 为顶级目录打印 HTML 格式。
-T string:将默认的 HTML 标题和 H1 标题替换为字符串。
--nolinks:在 HTML 输出中关闭超链接。

6.其他选项(Miscellaneous options)
--version
tree -L 4 >dirce.doc  #tree支持重定向至文件,即可生成UTF8格式的文档..我们也可以在windows 下查看..
#注意:生成的TXT或其他文件在win下面打开时也为乱码...这时我们要选择字符编码为UTF-8..当然..UTF-8是你linux下的默认字符集才可以.....

显示当前目录及其子目录中的所有文件和文件夹:

tree
tree -C #加上颜色进行区分

显示指定目录及其子目录中的所有文件和文件夹:

tree /path/to/directory

显示目录结构,并使用图形符号来表示文件和文件夹:

tree -F

其中,-F 参数用于在目录和文件名称后面添加一个符号来表示它们的类型。

需要注意的是,tree 命令默认只显示目录中的文件和文件夹名称,并不会显示文件和文件夹的详细信息。如果需要显示更多的信息,可以使用其他命令(如 lsstat)来获取它们的详细信息。

type

type 命令是 Linux 系统中的一个命令,用于确定给定命令的类型。它通常用于确定命令是内部命令、外部命令还是别名。

如果要确定 ls 命令的类型,可以在终端窗口中运行以下命令:

type ls

该命令将显示类似于以下内容的输出:

ls is aliased to `ls --color=auto'

其中,ls 是命令的名称,aliased to 表示该命令是别名,后面的内容是该别名的定义。

除了别名,type 命令还可以确定命令是内部命令还是外部命令。如果命令是内部命令,type 命令将显示该命令的类型为 shell builtin;如果命令是外部命令,type 命令将显示该命令的路径。

需要注意的是,type 命令只能确定命令的类型,不能执行命令。如果要执行命令,应该直接输入命令名称,而不是使用 type 命令。

下面是 type 命令的一些基本用法:

  • type command:显示 command 的类型。例如,type ls 会显示 ls 是一个外部命令,而 type cd 会显示 cd 是一个 shell 内置命令。

  • type -t command:只显示 command 的类型。如果 command 是一个外部命令,那么输出会是 file;如果 command 是一个内置命令,那么输出会是 builtin;如果 command 是一个别名,那么输出会是 alias

  • type -p command:如果 command 是一个外部命令,那么显示这个命令的完整路径。

  • type -a command:显示所有名为 command 的命令,包括别名、内置命令和外部命令。

  • type -f command:不考虑函数,只搜索别名和命令。

  • 下面是 type 命令的一些选项和用法:

    • -a:显示所有包含名为 NAME 的可执行文件的位置;包括别名,内置命令和函数,但只有当 -p 选项没有被使用时才包括这些。
    • -f:禁止查找 shell 函数。
    • -P:对每个 NAME 强制执行 PATH 搜索,即使它是别名,内置命令或函数,并返回路径。
    • -p:如果是外部命令会显示该命令的路径,如果是内部命令什么都不显示。
    • -t:输出单个单词,该单词是 aliaskeywordfunctionbuiltinfile'' 中的一个,分别表示如果 NAME 是别名,shell 保留字,shell 函数,shell 内置命令,磁盘文件,或未找到。
    #type -p chmod
    /usr/bin/chmod
    
    #type -p umask
    什么都不显示
    
    #type -P umask
    /usr/bin/umas
    

timedatectl

timedatectl 是在使用 systemd 的 Linux 系统中用于查询和更改系统时间和日期设置的命令行工具。

参数:

  • -h--help:显示帮助信息,包括所有可用的命令和选项。
  • --version:显示包版本信息。
  • --no-pager:不使用分页器输出信息,直接在终端中显示所有输出。
  • --no-ask-password:执行命令时不提示输入密码。
  • -H--host=[USER@]HOST:在远程主机上执行操作。
  • -M--machine=CONTAINER:在本地容器上执行操作。
  • --adjust-system-clock:在更改本地 RTC(Real Time Clock,实时时钟)模式时调整系统时钟。
  • --monitor:监视 systemd-timesyncd 的状态。
  • -p--property=NAME:只显示指定属性的信息。
  • -a--all:显示所有属性的信息,包括空属性。
  • --value:在显示属性时,只打印值。

命令:

  • status:显示当前的时间设置。
  • show:显示 systemd-timedated 的属性。
  • set-time TIME:设置系统时间,其中 TIME 为具体的时间。
  • set-timezone ZONE:设置系统时区,其中 ZONE 为具体的时区。
  • list-timezones:显示已知的时区。
  • set-local-rtc BOOL:控制 RTC 是否以本地时间显示,其中 BOOL 可以是 0(禁用)或 1(启用)。
  • set-ntp BOOL:启用或禁用网络时间同步,其中 BOOL 可以是 0(禁用)或 1(启用)

systemd-timesyncd 命令:

  • timesync-status:显示 systemd-timesyncd 的状态。
  • show-timesync:显示 systemd-timesyncd 的属性。

案例:

启动NTP服务

# CentOS7
[root@centos7 yum.repos.d]#timedatectl
      Local time: Tue 2023-11-14 22:07:08 CST
  Universal time: Tue 2023-11-14 14:07:08 UTC
        RTC time: Tue 2023-11-14 14:07:08
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
      
Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.
[root@centos7 yum.repos.d]#

Local time(本地时间): 显示系统本地时区的当前时间。
Universal time(世界统一时间): 显示协调世界时(UTC)的当前时间。
RTC time(实时时钟时间): 显示硬件时钟的当前时间,即计算机主板上的时钟。
Time zone(时区): 显示当前设置的时区,这里是Asia/Shanghai(东八区)。
NTP enabled(NTP启用): 显示是否启用了网络时间协议(NTP),用于网络时间同步。
NTP synchronized(NTP同步): 显示系统时间是否已经通过NTP进行同步。
RTC in local TZ(实时时钟使用本地时区): 当前硬件时钟是否设置为本地时区时间。通常推荐硬件时钟使用UTC时间。
DST active(夏令时激活): 显示夏令时是否激活,n/a表示不适用。
警告信息说明系统配置为按本地时区读取硬件时钟时间。这种模式可能会导致各种问题,尤其是在时区变更和夏令时调整时。硬件时钟时间不会自动更新,它依赖外部设施来维护。如果可能,建议通过调用timedatectl set-local-rtc 0命令,使用UTC来设置硬件时钟。
# CentOS8
[root@Cenos8 yum.repos.d]#timedatectl
               Local time: Tue 2023-05-16 16:52:24 CST
           Universal time: Tue 2023-05-16 08:52:24 UTC
                 RTC time: Tue 2023-05-16 08:52:18
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: n/a
          RTC in local TZ: no
[root@Cenos8 yum.repos.d]#

#这段输出信息提供了系统时间和日期设置的详细概况。以下是各部分的解释:
Local time: 本地时间,表示当前设置的时区下的系统时间。
Universal time: 全球统一时间,基本上等同于协调世界时(UTC),不受夏令时调整影响。
RTC time: 硬件实时时钟(RTC)的时间,该时钟即使在系统关机或重启时仍然运行。
Time zone: 当前系统设置的时区,包括时区名称和与UTC的偏移量。
System clock synchronized: 表示系统时钟是否与网络时间协议(NTP)服务器同步。如果显示为 "yes",则表示系统时钟已经同步,如果显示为 "no",则表示系统时钟尚未同步。
NTP service: 显示NTP服务的状态,"active" 表示NTP服务正在运行,"inactive" 表示NTP服务未运行,"n/a" 表示无法获取NTP服务的状态,可能是因为系统未安装NTP服务,或者NTP服务被禁用。
RTC in local TZ: 表示硬件时钟(RTC)是否设置为本地时间模式。如果为 "yes",则表示硬件时钟显示的是本地时区的时间;如果为 "no",则表示硬件时钟显示的是UTC时间。
如果你看到 "NTP service: n/a""System clock synchronized: no",那么可能是你的系统未安装NTP服务,或者NTP服务被禁用了。你可以尝试使用 timedatectl set-ntp true 命令启用NTP服务,然后再次检查状态。如果问题仍然存在,那么你可能需要手动安装NTP服务

System clock synchronized: no
              NTP service: n/a
#n/a可能是ntp未安装

#确认是否是禁用还是未安装
[16:07:15 root@CentOS8 ~]#timedatectl set-ntp true
Failed to set ntp: NTP not supported
[16:07:21 root@CentOS8 ~]#

#安装ntp服务
#1.首先,安装 chrony 包。chrony 是一个实现 NTP 协议的服务,可以用来同步系统时间。你可以使用以下命令来安装:
yum search ntp #可以通过yum来搜索相关包名
yum -y install chrony

#2.安装完成后,启动 chronyd 服务,并设置为开机启动:
sudo systemctl start chronyd
sudo systemctl enable chronyd
或者
systemctl enable --now chronyd #设置chronyd自启,同时将该服务启动

#3.确认 chronyd 服务正在运行:
systemctl status chronyd

#4.现在你应该可以使用 timedatectl set-ntp true 命令启用 NTP 了。如果再次运行 timedatectl 或 timedatectl status,你应该能看到 "NTP service: active" 和 "System clock synchronized: yes"。

#再次查看
[root@Cenos8 yum.repos.d]#timedatectl
               Local time: Tue 2023-05-16 17:17:49 CST
           Universal time: Tue 2023-05-16 09:17:49 UTC
                 RTC time: Tue 2023-05-16 09:17:49
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes	 #System clock synchronized、NTP service这两个都是由chronyd控制的,现在是yes和active,如果使用date 修改了系统时间,那么这里的System clock synchronized会变成no,需要重新启动chronyd服务
              NTP service: active
          RTC in local TZ: no
[root@Cenos8 yum.repos.d]#

#使用 chronyc 命令来查询 chronyd 的状态和配置
#1.显示 chronyd 的同步状态
[root@Cenos8 yum.repos.d]#chronyc tracking
Reference ID    : 1435C7A7 (20.53.199.167)
Stratum         : 3
Ref time (UTC)  : Tue May 16 09:37:47 2023
System time     : 0.000909813 seconds fast of NTP time
Last offset     : +0.000032794 seconds
RMS offset      : 0.004021724 seconds
Frequency       : 0.166 ppm slow
Residual freq   : -0.078 ppm
Skew            : 3.994 ppm
Root delay      : 0.189955235 seconds
Root dispersion : 0.029499399 seconds
Update interval : 64.8 seconds
Leap status     : Normal
[root@Cenos8 yum.repos.d]#

#2.显示配置的 NTP 服务器。
[root@Cenos8 yum.repos.d]#chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 20.53.199.167                 2   6   377    91  -7718us[-7685us] +/-  129ms

1.查看当前的日期和时间:
timedatectl status
timedatectl

2.设置系统时间为 2023 年 5 月 16 日 15:30:00:
timedatectl set-time '2023-05-16 15:30:00'

3.设置系统时区为美国洛杉矶:
timedatectl set-timezone America/Los_Angeles

4.查看所有已知的时区:
timedatectl list-timezones --no-pager | grep -i shanghai

5.将 RTC 设置为本地时间:这个命令将硬件时钟设置为本地时间。如果将 1 替换为 0,硬件时钟将被设置为协调世界时 (UTC)。
timedatectl set-local-rtc 1
解释:
RTC 是 Real Time Clock(实时时钟)的缩写,这是计算机主板上的一个硬件设备,即使在计算机关机或重启时,它仍然继续运行并保持时间。在计算机系统中,通常有两个时钟:硬件时钟(RTC)和系统时钟。系统时钟是由操作系统维护的,而硬件时钟是独立于操作系统的。当计算机启动时,系统时钟会从硬件时钟获取时间;而当系统关机时,系统时钟的当前时间会写回到硬件时钟。timedatectl set-local-rtc 1 命令的作用是将硬件时钟设置为本地时间模式。如果硬件时钟被设置为本地时间模式,那么它将会显示本地时区的时间,而不是协调世界时(UTC)。不过,通常推荐将硬件时钟设置为 UTC,因为这样可以更好地处理时区更改和夏令时调整,而系统时钟会自动根据设置的时区来显示本地时间。

6.启用或禁用网络时间协议 (NTP) 同步:
timedatectl set-ntp true/false
解释:
timedatectl set-ntp true 命令的作用是启用网络时间协议(NTP)。NTP 是用来同步计算机时间的一种协议,它允许计算机通过网络(通常是因特网)从一个 NTP 服务器获取精确的时间。这样可以确保你的计算机时间与世界标准时间保持一致,这对于一些需要精确时间的任务(比如日志记录、交易处理等)非常重要。

7.查看 systemd-timesyncd 的状态:
timedatectl timesync-status

tail

tail用于显示文件的末尾若干行内容。通常用于查看日志文件和其他不断增长的文件的内容。tail命令默认输出文件的末尾10行,可以通过选项来指定输出的行数。

需要注意的是,head命令和tail命令都可以用来查看文件内容的一部分,它们之间的主要区别在于head命令默认显示文件的开头部分,而tail命令默认显示文件的末尾部分。

下面是一些常用的tail命令选项:

  • -f或–follow:实时跟踪文件的变化,并输出新增的内容。
  • -n <行数>或–lines=<行数>:指定要输出的行数。
  • -c <字节数>或–bytes=<字节数>:指定要输出的字节数。
  • -q或–quiet:不显示文件名头信息。

下面是一些tail命令的示例:

  1. 显示文件末尾10行内容:
tail /etc/fstab
  1. 显示文件末尾20行内容:
tail -n 20 /etc/httpd/conf/httpd.conf

上述命令表示输出文件的末尾20行内容。而如果加上-n +<number>的选项,则表示从文件的第<number>行开始输出直到文件末尾的所有内容,例如:

tail -n +11 /etc/httpd/conf/httpd.conf

上述命令表示从文件的第11行开始输出所有的内容。

需要注意的是,-n +<number>选项只能用于GNU版本的tail命令,不能用于一些较老版本的tail命令。在一些较老版本的tail命令中,如果要输出从某行开始的内容,可以使用sed命令来实现,例如:

sed -n '11,$p' /etc/httpd/conf/httpd.conf

上述命令表示输出文件的第11行到最后一行的所有内容。其中-n选项表示只输出指定的行数,11,$表示从第11行到最后一行,p表示输出匹配的行

  1. 实时跟踪文件的变化:
tail -f /var/log/messages
  1. 不显示文件名头信息:
tail -q /etc/fstab /etc/redhat-release
#正常情况下
==> /etc/fstab <==
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=ad19dd45-b7ee-485c-87e6-3c9bb8ec3996 /                       xfs     defaults        0 0
UUID=8fbb4a9c-1506-4c4a-889d-b78163091bb0 /boot                   ext4    defaults        1 2
UUID=933c390a-5904-4b01-aa6a-447c771b7f08 /data                   xfs     defaults        0 0
#UUID=98f53a44-1fb7-4139-85c6-a3c2d1633cd7 none                    swap    defaults        0 0
UUID=430542b8-0e56-4316-8e49-e937b8b682f5 /data/mysql             ext4    defaults        0 0
#UUID=2a9d6777-78de-4af3-9b97-0ba31db1c95c none                    swap    pri=55       0 0
/data/swapfile                                  none                   swap     defaults        0 0

==> /etc/redhat-release <==
CentOS Linux release 8.5.2111.990713

加上-q以后
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=ad19dd45-b7ee-485c-87e6-3c9bb8ec3996 /                       xfs     defaults        0 0
UUID=8fbb4a9c-1506-4c4a-889d-b78163091bb0 /boot                   ext4    defaults        1 2
UUID=933c390a-5904-4b01-aa6a-447c771b7f08 /data                   xfs     defaults        0 0
#UUID=98f53a44-1fb7-4139-85c6-a3c2d1633cd7 none                    swap    defaults        0 0
UUID=430542b8-0e56-4316-8e49-e937b8b682f5 /data/mysql             ext4    defaults        0 0
#UUID=2a9d6777-78de-4af3-9b97-0ba31db1c95c none                    swap    pri=55       0 0
/data/swapfile                                  none                   swap     defaults        0 0
CentOS Linux release 8.5.2111.990713
  1. 显示文件末尾1000字节内容:
tail -c 1000 /etc/fstab

traceroute

traceroute 是一个用于诊断网络问题的 Linux 命令。该命令的主要目的是显示数据包从源主机(您的计算机)到目标主机(例如,另一台计算机或网站服务器)经过的路由路径。通过这个命令,您可以识别网络连接问题、网络拓扑以及性能问题。

traceroute 的工作原理是发送一系列带有递增 TTL(Time-to-Live)值的探测数据包。当这些数据包经过路由器时,路由器会递减 TTL 值。当 TTL 值降至 0 时,路由器将丢弃数据包,并向源主机发送一条 ICMP(Internet Control Message Protocol)消息,告知数据包已被丢弃。通过这种方式,traceroute 能够识别数据包经过的每个路由器。

下面是关于如何使用 traceroute 命令的详细讲解:

  1. 运行 traceroute

要使用 traceroute 命令,只需输入 traceroute,后跟目标主机的 IP 地址或域名:

traceroute <目标主机>
  1. 更改探测数据包的类型:

默认情况下,traceroute 使用 UDP 数据包进行探测。但是,您可以使用 -I 选项将其更改为使用 ICMP Echo 请求数据包,这与 ping 命令使用的数据包类型相同:

traceroute -I <目标主机>
  1. 设置数据包的大小:

您可以使用 -s 选项设置发送的探测数据包的大小(以字节为单位):

traceroute -s <大小> <目标主机>
  1. 限制跳数:

您可以使用 -m 选项设置 traceroute 的最大跳数。如果在达到最大跳数之前没有到达目标主机,traceroute 将停止:

traceroute -m <最大跳数> <目标主机>
  1. -n:不对 IP 地址执行反向 DNS 解析。这将加快 traceroute 的执行速度,因为它不会尝试查找每个 IP 地址对应的主机名。
traceroute -n <目标主机>
  1. -q:设置每个 TTL 值发送的查询数量。默认值是 3。您可以增加或减少此值以调整 traceroute 的详细程度。
traceroute -q <查询数量> <目标主机>
  1. -w:设置等待每个响应的最长时间(以秒为单位)。默认值是 5 秒。您可以根据网络状况增加或减少此值。
traceroute -w <超时秒数> <目标主机>
  1. -f:设置初始 TTL 值。默认情况下,traceroute 从 TTL 值 1 开始。您可以使用此选项更改初始 TTL 值。
traceroute -f <初始TTL> <目标主机>
  1. -i:指定要使用的网络接口。这在您的计算机具有多个网络接口时可能很有用。
traceroute -i <网络接口> <目标主机>
  1. -t:为发送的数据包设置 IP Type of Service (TOS) 值。TOS 值是一个 8 位字段,用于指定数据包的优先级和 QoS(Quality of Service)选项。
traceroute -t <TOS值> <目标主机>
  1. -p:设置要使用的目标端口。默认情况下,traceroute 使用一个不太可能被使用的 UDP 端口。您可以通过此选项更改端口。
traceroute -p <端口号> <目标主机>

tracepath

tracepath 是一个用于诊断网络路径和 MTU(Maximum Transmission Unit,最大传输单元)问题的 Linux 命令。与 traceroute 命令类似,tracepath 的主要目的是显示数据包从源主机(您的计算机)到目标主机(例如,另一台计算机或网站服务器)经过的路由路径。tracepath 不需要 root 权限即可运行,这是它与 traceroute 的一个主要区别。

以下是关于如何使用 tracepath 命令的详细讲解:

  1. 运行 tracepath

要使用 tracepath 命令,只需输入 tracepath,后跟目标主机的 IP 地址或域名:

tracepath <目标主机>

tracepath 将显示从您的计算机到目标主机的网络路径,并显示每个跳(路由器)的往返时间(RTT)。

  1. 指定数据包的大小:

您可以使用 -s 选项指定发送的数据包的大小(以字节为单位)。这在诊断 MTU 问题时可能很有用。

tracepath -s <大小> <目标主机>
  1. 设置最大 TTL 值:

您可以使用 -m 选项设置 tracepath 的最大 TTL 值。如果在达到最大 TTL 值之前没有到达目标主机,tracepath 将停止。

tracepath -m <最大TTL> <目标主机>
  1. 指定网络接口:

您可以使用 -b 选项指定要使用的网络接口。这在您的计算机具有多个网络接口时可能很有用。

tracepath -b <网络接口> <目标主机>

top

在Linux系统中,top命令是一个常用的系统监控命令,它可以实时地展示系统的各种状态,包括CPU、内存、进程等。下面是关于top命令的一些基本用法和参数

  1. 命令格式:
top [选项]
  1. 常用选项:
  • -d :指定top命令的刷新时间,单位为秒;
  • -b :以批处理模式运行top命令,将结果输出到标准输出,适用于将top的结果导入到其他脚本进行处理;
  • -u :指定top命令只显示指定用户的进程;
  • -p :指定top命令只显示指定进程号的进程;
  • -n :指定top命令执行的次数
  1. top命令输出的信息分为多个部分:
  • 第一行:系统的负载情况,包括运行的进程数量、CPU的占用情况和内存的占用情况;
  • 第二行:进程相关的信息,包括正在运行的进程数、睡眠的进程数、停止的进程数、僵尸进程数等;
  • 第三行:CPU的使用情况,包括用户空间的CPU使用率、系统空间的CPU使用率、空闲CPU的使用率等;
  • 第四行:内存的使用情况,包括总内存大小、已用内存大小、空闲内存大小、缓存大小等;
  • 后面的内容:各个进程的详细信息,包括进程ID、进程的所有者、进程所占用的CPU时间、进程的状态、进程的内存占用情况等。
  1. 常用操作:
  • q :退出top命令;
  • k :向某个进程发送信号;
  • r :修改某个进程的优先级;
  • h :显示帮助信息;
  • 1 :切换到单CPU模式

unzip

unzip 是一个用于解压缩 ZIP 文件的命令行工具。下面是上面提到的 unzip 命令的参数及其解释

# 参数
-Z: 进入ZipInfo模式,用于查看zip文件的信息。使用 "unzip -Z" 可以查看此模式的用法。
-p: 将解压后的文件内容输出到标准输出,不会解压到文件夹。
-l: 列出ZIP文件中的文件,但不进行解压。
-f: 刷新现有文件,但不创建新文件。
-t: 测试压缩文件中的数据以检查其完整性。
-u: 更新文件,如果文件不存在,则创建它。
-z: 仅显示存档的注释,不解压。
-v: 详细列出文件或显示版本信息。
-T: 将归档的时间戳设置为最新。
-x: 排除在后面指定的文件或目录,这些文件或目录不会被解压。
-d: 指定解压缩的目标目录。
# 修饰符
-n: 从不覆盖现有文件。
-q: 安静模式。-qq 是更安静的模式。
-o: 在不提示的情况下覆盖文件。
-a: 自动转换文本文件。
-j: 丢弃路径信息,即不创建目录,直接解压所有文件。
-aa: 将所有文件视为文本文件。
-U: 对所有非ASCII Unicode使用转义字符。
-UU: 忽略任何Unicode字段。
-C: 不区分大小写地匹配文件名。
-L: 将某些名称转换为小写。
-X: 恢复原始的UID/GID信息。
-V: 保留VMS版本号。
-K: 保留setuid/setgid/粘性权限。
-M: 通过 "more" 分页器输出数据。
-O CHARSET: 为DOS、Windows和OS/2档案指定字符编码。
-I CHARSET: 为UNIX和其他档案指定字符编码。

uniq

uniq 命令是 Linux 中常用的文本去重工具,用于去除文本文件中的重复行。uniq 命令只能去除连续出现的重复行,如果文本中出现非连续的重复行,则需要先使用 sort 命令进行排序。

下面是 uniq 命令的基本用法:

uniq [options] [input_file]

uniq 命令常用的选项有:

  • -c:显示每行出现的次数。
  • -d:只显示重复的行。
  • -u:只显示不重复的行。

下面是一些示例:

  1. 去除重复的行:
$ uniq filename
  1. 显示每行出现的次数:
$ uniq -c filename
  1. 只显示重复的行:
$ uniq -d filename
  1. 只显示不重复的行:
$ uniq -u filename

需要注意的是,uniq 命令只能去除连续出现的重复行。如果需要去除非连续的重复行,则需要先使用 sort 命令进行排序。例如:

$ sort filename | uniq

该命令会先将文件中的文本行按照字典序排序,然后再使用 uniq 命令去除重复的行。

uname

uname 是一个 Linux 系统工具,可以获取当前系统的基本信息。使用 uname 命令可以查询系统内核和硬件平台的信息,如内核版本、系统架构、主机名等。以下是 uname 命令的详细用法、选项和格式

uname 命令的基本用法格式如下:

uname [OPTION]...

其中,OPTION 是可选的命令选项。如果不带任何选项,uname 命令将显示系统内核的名称。

uname 命令的常用选项如下:

  • -a, --all:显示所有信息(按下述顺序),但如果未知,则省略-p和-i。
  • -s, --kernel-name:显示内核名称。
  • -n, --nodename:显示网络节点主机名,也就是当前设备的主机名。
  • -r, --kernel-release:显示内核版本。
  • -v, --kernel-version:显示内核版本详情,这可能包括内核的版本号以及发布日期等。
  • -m, --machine:显示机器硬件名称,这通常是指硬件的架构,例如x86_64表示64位架构。
  • -p, --processor:显示处理器类型,这在不同的系统中可能不可移植。在某些系统中,它可能返回的是CPU的型号。
  • -i, --hardware-platform:显示硬件平台,这在不同的系统中可能不可移植。它提供了更多关于硬件架构的信息,但并非所有系统都支持这个选项。
  • -o, --operating-system:显示操作系统。在Linux系统中,它通常会返回"GNU/Linux"。
  • --help:显示帮助信息并退出。
  • --version:输出版本信息并退出。

useradd

useradd 是 Linux 中的一个命令,用于创建新的用户账户。其用法如下:

useradd [选项] 用户名

#选项
-b, --base-dir BASE_DIR: 设置新用户的主目录的基础路径。默认情况下,用户的主目录在/home下。如果你使用 -b /myhome,新用户的主目录将会在 /myhome/<username> 下。
-c, --comment COMMENT: 设置新用户的 GECOS 信息。通常,这是一个简短的描述或者是用户的全名,用双引号括起来。
-d, --home-dir HOME_DIR: 明确设置新用户的主目录,默认为 /home/用户名。例如,-d /myhome/john将使用户john的主目录设置为/myhome/john。
-D, --defaults: 显示或更改useradd命令的默认配置。
-e, --expiredate EXPIRE_DATE: 设置账户的到期日期,格式为YYYY-MM-DD。
-f, --inactive INACTIVE: 设置在密码过期后,账户多久会被禁用,设置为 0 将在密码过期后立即禁用帐户。
-g, --gid GROUP: 设置新用户的主群组。你可以通过群组名或群组ID来设置。
-G, --groups GROUPS: 设置新用户的辅助群组,群组之间用逗号分隔。
-h, --help: 显示帮助信息。
-k, --skel SKEL_DIR: 使用特定的骨架目录(skeleton directory)。骨架目录是一个包含初始化文件的目录,当创建新用户主目录时,这些文件会被复制过去。
-K, --key KEY=VALUE: 重写/etc/login.defs文件中的默认设置。
-l, --no-log-init: 不在lastlog和faillog数据库中添加用户。
-m, --create-home: 创建用户的主目录。
-M, --no-create-home: 不创建用户的主目录。
-N, --no-user-group: 创建新用户时,不创建与其同名的群组。
-o, --non-unique: 允许创建拥有相同UID的用户。
-p, --password PASSWORD: 为新用户设置加密后的密码。
-r, --system: 创建一个系统账户,这个账户不会被显示在登录界面,UID 范围也不同于普通用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000,系统用户通常用于运行守护进程和服务。并且也不会创建家目录
-R, --root CHROOT_DIR: 设置新用户的chroot目录。
-P, --prefix PREFIX_DIR: 设置包含/etc/*文件的前缀目录。
-s, --shell SHELL: 设置新用户的默认shell,默认为/bin/bash。
-u, --uid UID: 设置新用户的用户ID。
-U, --user-group: 创建一个与用户同名的群组。
-Z, --selinux-user SEUSER: 对于SELinux用户映射,使用特定的SEUSER。

其中,[选项] 是可选的,用户名 是要创建的新用户的用户名。下面是一些常用的选项:

注意,创建用户时,如果未指定密码,则需要使用 passwd 命令为新用户设置密码。

实际案例:

useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache

#CentOS8
useradd -p $(openssl passwd -6 -salt eSk2L17vEr4Aio 123456) user1
#CentOS7 没有-6选项需要用python模块来生成SHA512
[root@centos7 ~]#python -c 'import crypt,getpass;pw="magedu";print(crypt.crypt(pw))'
$6$uiLOzwA6WVXFr4tk$4ZZpWhdjYxKPVZC.x1MLGG9elDRa8639ft6.B9Pf22/xBZhafgKnRm9Nk7V26.Nupg.3yhb.Rgl2kWa7cyNkc0
[root@centos7 ~]#useradd -p $6$uiLOzwA6WVXFr4tk$4ZZpWhdjYxKPVZC.x1MLGG9elDRa8639ft6.B9Pf22/xBZhafgKnRm9Nk7V26.Nupg.3yhb.Rgl2kWa7cyNkc0 user1
#CentOS 6
[root@centos6 ~]# grub-crypt
Password: 123456
Retype password:123456
$6$1QxGPylTsWrqO/oy$YTlQ282j01XJAviWiMnGmTI8IKqkwidDlRVLe9NpXqMb5FQ1NPiNsRLQixnjNs0NNqxn1zU2zuy5AHO9so2rI.
[root@centos6 ~]#

下面是一些示例:

  1. 创建一个名为 user1 的用户
useradd user1
  1. 创建一个名为 user2 的用户,并设置其注释信息:
useradd -c "This is user2" user2
  1. 创建一个名为 user3 的用户,并指定其所属的初始组为 users
useradd -g users user3
  1. 创建一个名为 user4 的用户,并指定其登录 shell 为 /bin/sh
useradd -s /bin/sh user4
  1. user5 的用户,并指定其密码为 mypassword
#通过标准输入指定密码,而不是通过命令行输入
echo "mypassword" | passwd --stdin user5
  1. 创建一个名为 user6 的用户,并指定其家目录为 /home/myuser
useradd -d /home/myuser user6
  1. 创建一个名为 user7 的用户,并同时创建其家目录:
useradd -m user7

# 创建一个系统用户,指定用户组,指定家目录,并创建家目录
useradd -r -g 306 -u 306 -m -d /data/mysql mysql

# 创建一个新用户并为其设置已加密的密码:
useradd -p encrypted_password username

# 创建一个新用户并将其添加到多个组:
useradd -G group1,group2 username

需要注意的是,使用 useradd 命令创建用户时,会自动创建同名的组。如果需要创建不同名的组,可以使用 groupadd 命令创建新组,并使用 -g 选项指定组的 GID。

另外,使用 useradd 命令创建的用户账户并没有设置密码,需要使用 passwd 命令为其设置密码。命令格式如下:

passwd 用户名

运行该命令后,系统会提示输入新密码,并再次要求确认密码。输入密码时,不会显示任何字符,这是出于安全考虑。密码设置成功后,可以使用新密码登录该账户

使用useradd命令创建一个系统用户,并使用-r--system选项,该命令默认不会为系统用户创建家目录。系统用户通常用于运行特定的服务或守护进程,而不是用于登录和进行日常操作。因此,这些用户在默认情况下可能不需要家目录。但是,如果你确实希望为系统用户创建家目录,可以结合使用-m--create-home选项以及-d--home-dir选项来指定家目录的位置。总之,尽管-r--system选项不会默认创建家目录,但你仍然可以选择为系统用户创建一个。

usermod

usermod是一个用于修改Linux系统用户账户信息的命令行工具。它可以用于更改用户账户的各种属性,如用户名、UID、GID、家目录、默认shell等。下面是usermod的用法、选项和格式的详细讲解。

usermod命令的一般用法如下:

usermod [OPTIONS] USERNAME

其中,OPTIONSusermod命令支持的选项,USERNAME是要修改的用户账户的用户名。可以指定多个选项,选项的顺序可以随意。修改后的用户信息将在/etc/passwd/etc/shadow文件中更新。

usermod命令有许多选项,这里列出其中一些常用的选项:

  • -b, --badname: 允许使用不符合标准命名规范的用户名
  • -c, --comment COMMENT:用于添加或更改用户账户的注释。注释可以是任何有意义的文本,用于描述用户的身份、用途等。例如:-c "This is a test account"
  • -d, --home HOME_DIR:用于更改用户的家目录。例如:-d /home/newdir
  • -e, --expiredate EXPIRE_DATE:用于设置账户的过期日期。过期日期格式为YYYY-MM-DD。例如:-e 2024-03-09
  • -f, --inactive INACTIVE: 设置帐户密码过期后多久将帐户设为非活跃状态。
  • -g, --gid GROUP:用于更改用户的默认组ID。例如:-g newgroup
  • -G, --groups GROUPS: 设置用户所属的其他(附加的)群组。
  • -a, --append: 将用户添加到通过 -G 选项提到的附加群组中,而不从其他群组中移除用户。
  • -l, --login NEW_LOGIN:用于更改用户的登录名。例如:-l newlogin
  • -L, --lock: 锁定用户帐户,阻止该用户登录。
  • -m, --move-home: 当与 -d 一起使用时,移动用户的家目录内容到新位置。
  • -o, --non-unique: 允许用户有一个非唯一的 UID(不建议在常规操作中使用)。
  • -p, --password PASSWORD:用于设置用户的密码。可以使用加密后的密码或是清文密码。例如:-p newpassword
  • -R, --root CHROOT_DIR: 在 chroot 环境中执行。
  • -P, --prefix PREFIX_DIR: 指定 /etc/* 文件的前缀目录。
  • -s, --shell SHELL:用于更改用户的默认shell。例如:-s /bin/bash
  • -u, --uid UID:用于更改用户的UID。例如:-u 1001
  • -U, --unlock: 解锁用户帐户,允许该用户再次登录。
  • -v, --add-subuids FIRST-LAST: 添加子 UID 范围。
  • -V, --del-subuids FIRST-LAST: 删除子 UID 范围。
  • -w, --add-subgids FIRST-LAST: 添加子 GID 范围。
  • -W, --del-subgids FIRST-LAST: 删除子 GID 范围。
  • -Z, --selinux-user SEUSER: 为用户设定一个新的 SELinux 用户映射。

例如,要更改用户名为johndoe的账户的默认shell为/bin/bash,可以使用以下命令:

usermod -s /bin/bash johndoe

如果要同时更改用户名和家目录,可以使用以下命令:

usermod -l newlogin -d /home/newdir johndoe
# 1.更改用户的登录名:
如果您想更改用户的登录名,可以使用 -l 选项。
usermod -l newusername oldusername
上述命令将 oldusername 改为 newusername。

# 2.移动用户的家目录:
要更改用户的家目录并将其旧的家目录内容移动到新位置,可以使用 -d-m 选项。
usermod -d /new/home/dir -m username

# 3.更改用户的主群组:
使用 -g 选项可以更改用户的主群组。
usermod -g newgroup username

# 4.添加用户到附加的群组:
要将用户添加到附加的群组而不从其他群组中移除该用户,使用 -G-a 选项。
usermod -G group1,group2 -a username

# 5.锁定和解锁用户帐户:
使用 -L 锁定用户,使其无法登录;使用 -U 解锁用户。
usermod -L username   # 锁定
usermod -U username   # 解锁

# 6.更改用户的 UID:
使用 -u 选项更改用户的 UIDusermod -u 1002 username

# 7.设置帐户过期日期:
使用 -e 选项设定帐户的过期日期。
usermod -e 2023-12-31 username

# 8.更改用户的登录 shell:
使用 -s 选项更改用户的默认登录 shell。
usermod -s /bin/zsh username

# 9.为用户设置 SELinux 用户映射:
如果您在一个使用 SELinux 的系统上,可以使用 -Z 选项为用户设置 SELinux 用户映射。
usermod -Z user_u username

# 10.更改用户的 GECOS 信息:
GECOS 字段通常包括用户的全名等信息,可以使用 -c 选项进行更改。
usermod -c "Full User Name" username

# 11.在 chroot 环境中修改用户:
如果你正在使用一个 chroot 环境,并希望在其中修改用户,可以使用 -R 选项。
usermod -R /path/to/chroot -g newgroup username

# GECOS 是一个历史遗留的术语,原来是 "General Electric Comprehensive Operating Supervisor" 的缩写,是一个早期的操作系统。但当我们今天在 UNIX 和 Linux 上谈论 GECOS,我们通常指的是 /etc/passwd 文件中的一个字段,通常被称为 "GECOS 字段"。这个字段原本被设计为存储用户的真实姓名,但现在它通常还包括其他用户信息,如电话号码、办公室位置、办公室电话等。然而,如何使用这个字段在不同的系统和组织中可能会有所不同。

username:x:1001:1001:John Doe,Room 123,1234,,:/home/username:/bin/bash
上述示例中的 "John Doe,Room 123,1234,," 就是 GECOS 字段。其中 "John Doe" 是用户的真实姓名,"Room 123" 可以是办公室位置,"1234" 可能是电话号码。当然,这些都取决于特定系统的配置和约定。

在许多现代 Linux 系统中,GECOS 字段主要还是用于存储用户的真实姓名,而其他信息则不太常见。当使用如 adduser 或 useradd 命令时,通常会提示输入这些信息,尤其是用户的真实姓名。

userdel

userdel是Linux系统中一个用于删除用户账户的命令行工具。它可以删除指定用户的账户及相关文件,包括用户主目录、邮件等。下面是关于userdel的详细讲解:

用法:userdel [选项] [用户名]

选项:

  • -f, --force: 强制执行某些通常会失败的操作。例如,即使用户仍然登录,也可以删除用户或删除用户未拥有的文件。
  • -h, --help: 显示命令的帮助信息并退出。
  • -r, --remove: 删除用户的家目录和邮件存储区。这是一个需要小心使用的选项,因为它会删除用户的所有文件和数据。
  • -R, --root CHROOT_DIR: 指定一个 chroot 目录,然后在该目录中执行 userdel 命令,而不是在实际的文件系统中。这对于操作 chroot 环境中的用户特别有用。
  • -P, --prefix PREFIX_DIR: 指定一个前缀目录,其中包含 /etc/* 文件。这对于操作在特定位置的配置文件特别有用。
  • -Z, --selinux-user: 删除用户的任何 SELinux 用户映射。如果系统启用了 SELinux,并且为用户定义了特定的 SELinux 用户标识,则此选项将删除与该用户关联的任何 SELinux 映射。

格式:

userdel [选项] [用户名]

其中,[用户名]为要删除的用户账户的用户名。

  1. 删除用户及其家目录
sudo userdel -r testuser

该命令将删除testuser用户账户及相关文件,包括其主目录、邮件等

  1. 强制删除仍然登录的用户
sudo userdel -f testuser

该命令将强制删除testuser用户账户,即使该用户当前正在登录或拥有某些进程。

# 1.删除与用户关联的 SELinux 映射:
如果你的系统启用了 SELinux 并为用户定义了特定的 SELinux 用户映射,你可以使用以下命令删除它:
userdel -Z username

# 2.在 chroot 环境中删除用户:
如果你要在 chroot 环境(例如 /mnt/my_chroot)中删除用户,而不是在实际的文件系统中,你可以使用 -R 选项:
userdel -R /mnt/my_chroot username

# 3.在特定的配置目录中删除用户:
假设你的 /etc/* 配置文件不在标准位置,而是在 /my_config/ 目录下,你可以使用 -P 选项来删除用户:
userdel -P /my_config username

# 4.强制删除用户及其家目录,即使用户仍然登录:
如果你不仅要强制删除仍然登录的用户,还要删除其家目录,你可以组合 -f-r 选项:
userdel -f -r username

# chroot 是 "change root" 的缩写,是 Unix 和 Linux 系统中的一个操作,它更改了进程和其子进程看到的根目录。使用 chroot 可以将进程的根目录设置为文件系统中的任何位置,而不是实际的 / 根目录。这种技术通常用于隔离进程,创建和管理轻量级容器,或者在恢复操作中修复损坏的系统。
1.系统恢复:如果你的主系统出现故障,你可以使用 Linux 启动光盘或 USB 设备来启动,然后 chroot 到硬盘上的系统,进行修复。
2.软件构建和测试:你可以在隔离的环境中构建和测试软件,以确保软件不会影响系统的其他部分。
3.提高安全性:通过限制某些服务在 chroot 环境中运行,可以提高系统的安全性。如果这些服务被破坏,攻击者只能访问 chroot 环境中的文件,而不能访问整个文件系统。
4.创建轻量级容器:在 Docker 和其他容器技术流行之前,chroot 是创建轻量级隔离环境的常用方法。

之前提到的 userdel -R /path/to/chroot username:这意味着 userdel 命令将在指定的 chroot 环境中执行,而不是在实际的系统中。这样,当你想删除一个仅存在于 chroot 环境中的用户(并不是在主系统上)时,就很有用了。

visudo

visudo 是一个命令行工具,用于安全地编辑/etc/sudoers文件。它提供了一种锁定机制以防止多个用户同时编辑此文件,并在保存更改之前检查语法错误。由于/etc/sudoers文件是非常重要的系统文件,使用visudo可以防止因语法错误而导致的问题。

# 下面是viduso的选项:
-c, --check: 这个选项让visudo仅检查/etc/sudoers文件及/etc/sudoers.d目录下的文件的语法,而不实际编辑文件。这对于验证文件的语法是否正确很有用。
-f, --file: 允许你指定要编辑的sudoers文件的位置,而不仅仅是默认的/etc/sudoers文件。这也可以用于检查非标准位置的文件。
visudo --file=/etc/sudoers.d/customfile
-h, --help: 显示帮助信息并退出。
-q, --quiet: 使用这个选项可以让visudo在检查语法时输出较少的信息,也就是说,它会以较少的冗余方式报告错误。
-s, --strict: 启用严格的语法检查。如果/etc/sudoers文件或/etc/sudoers.d目录下的文件包含语法错误,此选项将导致visudo以非零状态退出。
-V, --version: 显示visudo的版本信息并退出。
# 1.要编辑默认的sudoers文件,只需运行visudo命令而不使用任何参数:
visudo

# 2.要检查/etc/sudoers文件及/etc/sudoers.d目录下的文件是否包含语法错误,可以使用:
visudo --check

# 3.要编辑/etc/sudoers.d目录中的特定文件,你可以使用:
visudo --file=/etc/sudoers.d/filename

# 4.请注意,当你使用visudo编辑文件时,它通常使用系统上配置的默认编辑器。如果你熟悉特定的文本编辑器,你可以通过设置VISUAL或EDITOR环境变量来更改此设置。例如,使用nano作为编辑器:
VISUAL=nano visudo

vmstat

vmstat(virtual memory statistics)是一个 Linux 命令行工具,用于报告关于内存、进程、分页、块 I/O 和 CPU 活动的统计信息。它提供了有关系统性能的实时信息,可以帮助你监控系统资源的使用情况,识别性能瓶颈并优化系统设置。

vmstat 的基本语法如下:

vmstat [options] [interval] [count]
  • options:指定显示的报告类型和格式。
  • interval:指定报告之间的时间间隔(以秒为单位)。
  • count:指定要生成的报告数量。

以下是一些常用的 vmstat 选项:

  • -a:显示活动和不活动的内存。
  • -d:显示磁盘统计信息。
  • -n:在连续报告中,仅显示第一份报告的表头。
  • -s:显示内存和磁盘使用的总计。
  • -S:指定显示单位(例如,k 表示千字节,K 表示 1000 字节)。
  • -w:显示宽输出,适用于宽屏幕。

以下是一些使用 vmstat 的示例

1.显示系统虚拟内存统计信息:
vmstat
2.每隔 5 秒显示一次系统虚拟内存统计信息:
vmstat 5
3.显示磁盘统计信息:
vmstat -d
4.显示内存和磁盘使用总计:
vmstat -s

vmstat 输出包含了关于系统运行状态的详细信息,包括进程、内存、分页、块 I/O 和 CPU 活动。通过定期监控和分析 vmstat 输出,可以优化系统性能并确保资源得到有效利用。

输出信息:

vmstat 命令的输出提供了关于内存、进程、分页、块 I/O 和 CPU 活动的实时统计信息。以下是一个典型的 vmstat 输出示例以及各列的解释

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 123456  12345 678901   0    0    10    20  150  200  5  3 90  2  0
  • procs
    • r:运行队列中的进程数。这些进程正在等待 CPU 时间。
    • b:处于不可中断睡眠状态的进程数。这些进程通常在等待 I/O 完成。
  • memory
    • swpd:使用的虚拟内存(swap)大小,以千字节为单位。
    • free:空闲内存的大小,以千字节为单位。
    • buff:用作缓冲的内存大小,以千字节为单位。
    • cache:用作缓存的内存大小,以千字节为单位。
  • swap
    • si:每秒从磁盘交换到内存的数据量,以千字节为单位。
    • so:每秒从内存交换到磁盘的数据量,以千字节为单位。
  • io
    • bi:每秒从磁盘读取的数据量,以千字节为单位。
    • bo:每秒写入磁盘的数据量,以千字节为单位。
  • system
    • in:每秒发生的中断数。
    • cs:每秒发生的上下文切换次数。
  • cpu:显示 CPU 使用百分比。
    • us:用户态运行时间百分比。
    • sy:系统态运行时间百分比。
    • id:CPU 空闲时间百分比。
    • wa:等待 I/O 完成的时间百分比。
    • st:虚拟环境中等待 CPU 资源的时间百分比(仅在虚拟机中有效)。

通过分析 vmstat 命令的输出,你可以监控系统资源的使用情况,发现潜在的性能瓶颈,并调整系统设置以优化性能。

下面是 vmstat 输出列名的完整单词解释:

  • procs
    • r:running(运行中的进程数)
    • b:blocked(阻塞的进程数)
  • memory
    • swpd:swapped(交换的虚拟内存大小)
    • free:free(空闲内存大小)
    • buff:buffers(用作缓冲的内存大小)
    • cache:cached(用作缓存的内存大小)
  • swap
    • si:swap in(从磁盘交换到内存的数据量)
    • so:swap out(从内存交换到磁盘的数据量)
  • io
    • bi:blocks in(从磁盘读取的数据量)
    • bo:blocks out(写入磁盘的数据量)
  • system
    • in:interrupts(中断次数)
    • cs:context switches(上下文切换次数)
  • cpu
    • us:user(用户态运行时间百分比)
    • sy:system(系统态运行时间百分比)
    • id:idle(CPU 空闲时间百分比)
    • wa:wait(等待 I/O 完成的时间百分比)
    • st:stolen(虚拟环境中等待 CPU 资源的时间百分比)

wget

在Linux中,wget是一个命令行工具,用于从互联网上下载文件。wget可以使用HTTP、HTTPS和FTP协议下载文件。以下是关于wget的一些常见用法:

基本格式:

wget [options] [URL]

options:

  • -O: 指定下载文件的名称
  • -c: 断点续传,如果下载过程中出现问题,可以从上次下载的地方继续下载
  • -q: 静默模式,不输出任何信息
  • -r: 递归下载,下载指定网站的所有链接
  • -np: 不遵循父级链接,即不下载指向父级目录的链接
  • -nH: 不在下载文件时生成主机名称目录,即不在本地创建以主机名称为名的目录
  • -nc: 不覆盖已存在的文件,如果本地已存在同名文件,则不进行下载
  • -P: 指定下载文件的保存路径
  • -t: 最大尝试次数,如果下载失败,则会尝试指定的次数
  • -T: 超时时间,如果在指定的时间内无法下载,则下载失败
-O: 指定下载后的文件名,例如 wget -O myfile.txt http://example.com/file.txt
-q: 静默模式,不显示进度条和其它信息,例如 wget -q http://example.com/file.txt
-c: 断点续传,从上次下载的位置继续下载,例如 wget -c http://example.com/file.txt
-r: 递归下载,下载指定URL及其链接的所有文件,例如 wget -r http://example.com
-np: 不下载父级链接,例如 wget -r -np http://example.com
-N: 如果文件已经存在,则只下载比本地文件新的文件,例如 wget -N http://example.com/file.txt
-p: 下载页面所需的所有文件(例如图像、样式表等),例如 wget -p http://example.com
-U: 设置请求的User-Agent头信息,例如 wget -U "Mozilla/5.0" http://example.com
  1. 下载单个文件

使用wget下载单个文件非常简单,只需要在终端中输入以下命令:

wget [URL]

其中,[URL]是你要下载的文件的URL地址。

例如,要下载一个名为myfile.zip的文件,它的URL地址是https://example.com/myfile.zip,只需在终端中输入以下命令:

wget https://example.com/myfile.zip

wget将自动下载该文件并将其保存在当前工作目录中。

  1. 下载多个文件

如果你要下载多个文件,你可以将所有的URL地址保存在一个文本文件中,然后使用wget来读取该文件并下载所有的文件。假设你已经创建了一个名为urls.txt的文件,并将要下载的文件URL地址写在了这个文件中,你可以使用以下命令下载所有的文件

wget -i urls.txt

其中,-i选项用于指定URL地址列表文件的路径

  1. 断点续传

如果你的下载任务被意外中断,你可以使用wget的断点续传功能来恢复下载。使用以下命令来恢复已经中断的下载:

wget -c [URL]

其中,-c选项用于启用断点续传功能。wget将会检查已经下载的部分,并从中断处继续下载。

  1. 限速下载

如果你想限制下载速度,可以使用wget的–limit-rate选项。使用以下命令来限制下载速度为100KB/s:

wget --limit-rate=100k [URL]

其中,–limit-rate选项用于指定下载速度限制。这个例子中,下载速度被限制为100KB/s。

  1. 下载到指定目录

默认情况下,wget将下载文件保存在当前工作目录中。如果你想将文件保存到其他目录中,可以使用-O选项来指定保存路径。例如,如果你想将下载的文件保存到/home/user/Downloads/目录中,你可以使用以下命令:

wget -O /home/user/Downloads/myfile.zip [URL]

其中,-O选项用于指定保存文件的路径和名称。

whatis

whatis 命令是 Linux 系统中的一个命令,用于显示指定命令的简短描述信息。它通常与 man 命令一起使用,可以在查看命令的详细手册页之前提供有关该命令的基本信息

如果要查看 ls 命令的简短描述信息,可以在终端窗口中运行以下命令:

whatis ls

该命令将显示类似于以下内容的输出:

ls (1)               - list directory contents

其中,ls 是命令的名称,1 表示命令的手册页的节(section),- list directory contents 是命令的简短描述信息。

需要注意的是,whatis 命令只显示简短描述信息,并不会显示有关命令的详细信息。如果需要查看有关命令的更多信息,可以使用 man 命令查看该命令的详细手册页。

which

在 Linux 系统中,which 是一个用于查找可执行程序(例如命令、脚本等)所在路径的命令行工具。它会在系统环境变量 PATH 中指定的路径中搜索指定的程序,并返回找到的第一个可执行程序的完整路径。这个命令可以帮助你找到正在执行的命令的具体位置,特别是当系统中有相同名称的多个命令时,你可以使用 which 来确定你正在使用哪一个。

下面是一些常用的 which 命令选项:

  • which command:显示 command 的绝对路径。例如,which ls 可能会显示 /bin/ls,这表明 ls 命令在 /bin 目录中。
  • which -a command :查找所有符合条件的程序路径,并按照 PATH 的顺序依次输出。通常情况下,which 只输出第一个匹配的命令。
  • --version, -[vV]:打印 which 命令的版本号,然后成功退出。
  • --help:打印 which 的帮助信息,然后成功退出。
  • --skip-dot:在查找命令时,跳过 PATH 中以点(.)开始的目录。
  • --skip-tilde:在查找命令时,跳过 PATH 中以波浪号(~)开始的目录。
  • --show-dot:在输出中,不将点(.)展开为当前目录。
  • --show-tilde:对于非 root 用户,输出 HOME 目录为波浪号(~)。
  • --tty-only:如果不在 tty 上,则停止处理右侧的选项。
  • --all, -a:打印 PATH 中所有匹配的命令,而不仅仅是第一个。
  • --read-alias, -i:从标准输入读取别名列表。
  • --skip-alias:忽略 --read-alias 选项;不从标准输入读取。
  • --read-functions:从标准输入读取 shell 函数。
  • --skip-functions:忽略 --read-functions 选项;不从标准输入读取。

从标准输入读取别名,并找出 ls 命令的路径:

alias | which --read-alias ls

注意,which 命令只能找到可执行文件。如果一个命令是 shell 内置命令或者是别名,那么 which 命令是找不到的。在这种情况下,你可以使用 type 或者 command -v 命令。

需要注意的是,which 命令只会查找系统环境变量 PATH 中指定的路径,如果需要查找其他路径下的程序,可以考虑使用 find 命令或者直接在终端中输入程序的完整路径。

whoami

whoami 命令是 Linux 系统中的一个命令,用于显示当前用户的用户名。

在 Linux 终端中,如果您想要确定当前登录的用户是谁,可以使用 whoami 命令。只需在终端窗口中输入 whoami,并按下回车键,系统将显示您当前登录的用户名。

#whoami
root

who

who 命令是 Linux 系统中的一个命令,用于显示当前登录到系统中的所有用户的信息。who am i 命令是 who 命令的一种变体,用于显示当前用户的登录信息

在 Linux 终端中,如果您想要确定当前登录到系统中的所有用户,可以使用 who 命令。只需在终端窗口中输入 who,并按下回车键,系统将显示当前登录到系统中的所有用户的详细信息,包括用户名、终端类型、登录时间和登录来源等

[root@centos8 etc]#who
root     pts/0        2023-03-08 16:52 (10.0.0.1)
xing     pts/1        2023-03-08 14:30 (10.0.0.1)
[root@centos8 etc]#    

这表明 root 用户当前在 pts/0 终端登录,xing 用户当前在 pts/1 终端登录。

who am i

如果只想查看当前用户的登录信息,可以使用 who am i 命令。只需在终端窗口中输入 who am i,并按下回车键,系统将显示当前用户的登录信息,包括用户名、终端类型和登录时间等。

[root@centos8 etc]#who am i
root     pts/1        2023-03-08 14:30 (10.0.0.1)
[root@centos8 etc]#

wc

wc 命令是一个用于计算文件或标准输入中字符数、单词数和行数的 Linux 命令行工具。它通常用于对文本文件进行分析,以便进行文本处理、分析和编辑。下面是 wc 命令的常用选项和使用示例:

常用选项

  • -c--bytes:仅计算文件中的字节数。
  • -w--words:仅计算文件中的单词数。
  • -l--lines:仅计算文件中的行数。
  • -m--chars:仅计算文件中的字符数,其中一个多字节字符被计为一个字符。
  • -L--max-line-length:计算文件中最长行的字符数。
  • -help:显示帮助信息。
  • -version:显示 wc 命令的版本信息

使用示例

  1. 计算文件的行数、单词数和字符数:
$ wc filename

示例输出:

 14  79 473 filename

输出中,第一列是行数、第二列是单词数、第三列是字符数,最后一列是文件名。

  1. 统计多个文件的行数、单词数和字符数:
$ wc file1 file2 file3

示例输出:

 14  79 473 file1
  9  52 308 file2
 28 177 781 file3
 51 308 1562 total

输出中,最后一行是所有文件的总计数。

  1. 统计目录下所有文件的行数、单词数和字符数:
$ wc -l -w -c *

示例输出:

      4       48     1033 file1.txt
      6       44      237 file2.txt
      3       18      135 file3.txt
     13      110     1405 total

输出中,第一列是行数、第二列是单词数、第三列是字符数,最后一列是文件名或目录名。

xtrabackup

xtrabackup 是 Percona 提供的一个工具,用于无锁备份 InnoDB、XtraDB 和 HailDB 存储引擎的 MySQL 数据库。该工具在高负载的生产环境中尤为有用,因为它允许对正在运行的数据库进行热备份,从而最大程度地减少了停机时间。

# 主要命令:
--backup: 执行备份操作。
--prepare: 准备一个未完成的备份进行恢复。
--copy-back: 从备份目录复制数据文件和日志文件回 MySQL 数据目录。
--move-back: 与 --copy-back 类似,但移动而不是复制。
--checkpoints: 打印备份的检查点信息。
--stats: 扫描 InnoDB 数据文件并打印统计信息。
--print-defaults: 打印默认选项。
--version: 打印版本信息。
--help: 打印帮助信息。

# 常用选项:
--target-dir: 指定备份的目标目录。
--datadir: 指定 MySQL 数据目录的路径。
--defaults-file: 指定 my.cnf 或 my.ini 配置文件的路径。
--encrypt:加密备份数据,增加安全性。
--user 和 --password: 用于连接数据库的用户名和密码。
--host 和 --port: 用于指定连接的数据库主机和端口。
--no-lock: 在备份过程中不尝试对表进行锁定。这对于在备份期间不需要对数据库进行写操作的场景很有用。
--databases: 备份指定的数据库和/或表。接受一个由空格分隔的数据库和表列表。
--tables-file: 从文件中读取要备份的表列表。
--compress: 使用快速压缩算法将备份数据压缩。
--stream: 用于流式备份。例如,--stream=tar 会生成一个 tar 流,可以直接重定向到其他命令或文件。
--parallel: 指定并行线程的数量来加速备份过程。
--incremental: 指定进行增量备份。
--incremental-basedir: 指定基础备份的目录,用于增量备份。
--apply-log-only: 在 --prepare 操作中仅应用日志不创建新的 ibdata 文件。这在多步增量备份恢复过程中很有用在这里,--apply-log-only 选项指示 xtrabackup 只应用事务日志并不回滚任何不完整的事务。这为后续的增量备份提供了一个“干净”的基础。
xtrabackup --checkpoints:验证备份的完整性。
# 案例
1.全备份
xtrabackup -uroot -pxxxxx --backup --target-dir=/path/to/backupdir
其中 /path/to/backupdir 是你要将备份存放的目录。
最后backupdir是一个目录,最后这个目录会自动创建,但是前面的/path/to/必须手动创建出来

2.增量备份
首先,你需要进行一个基础的全备份。然后,基于此全备份,你可以多次进行增量备份。增量备份只备份上一次备份以来发生变化的数据。
全备份:
xtrabackup -uroot -pxxxx --backup --target-dir=/path/to/full_backup
接着,进行增量备份:
xtrabackup -uroot -pxxxx --backup --target-dir=/path/to/inc_backup --incremental-basedir=/path/to/full_backup
如果之后再有其他增量备份,可以基于最近的增量备份或全备份继续。

3.准备备份
在恢复之前,需要“准备”备份,这会应用所有日志记录并使备份处于可以恢复的状态。
对于全备份(只有全备份的时候):
xtrabackup --prepare --target-dir=/path/to/full_backup

对于增量备份,首先应用全备份的日志,然后依次应用所有增量备份:
xtrabackup --prepare --apply-log-only --target-dir=/path/to/full_backup
在这里,--apply-log-only 选项指示 xtrabackup 只应用事务日志并不回滚任何不完整的事务。这为后续的增量备份提供了一个“干净”的基础。
xtrabackup --prepare --apply-log-only --target-dir=/path/to/full_backup --incremental-dir=/path/to/inc_backup1
与全备份的准备类似,--apply-log-only 选项再次用于应用增量备份的变化,但不回滚任何不完整的事务。这为后续的增量备份提供了一个连续的基础。
xtrabackup --prepare --target-dir=/path/to/full_backup --incremental-dir=/path/to/inc_backup2
在这里,我们没有使用 --apply-log-only 选项。这是因为这是我们打算恢复的最后一个增量备份。因此,我们想应用这次增量备份的所有变化,并回滚任何不完整的事务,为数据库恢复做好最终准备。
总之,使用 --apply-log-only 的目的是允许多次增量备份被依次应用于全备份,而在所有备份都被应用后,最后一次增量备份不使用该选项,确保所有待处理的事务都被正确地完成或回滚。

4. 恢复备份
为了恢复备份,你需要停止 MySQL 服务器并将数据目录替换为你的备份,然后再启动服务器
# 停止MySQL服务
service mysql stop

# 移动原始数据目录
mv /var/lib/mysql /var/lib/mysql_old

# 恢复备份
xtrabackup --copy-back --target-dir=/path/to/full_backup

# 更改数据目录的所有权
chown -R mysql:mysql /var/lib/mysql

# 启动MySQL服务
service mysql start

5.压缩备份
使用 --compress 选项可以对备份进行压缩,节省存储空间:
xtrabackup --backup --compress --target-dir=/path/to/compressed_backup

6.流式备份
你可以将备份直接发送到另一个系统或存储介质,如 tar 文件或通过 SSH 到远程服务器:
xtrabackup --backup --stream=tar ./ | gzip > backup.tar.gz
或者使用 SSH:
xtrabackup --backup --stream=tar ./ | ssh user@remote "cat - > /path/on/remote/backup.tar.gz"

7.并行备份
使用 --parallel 选项可以加速备份过程:
xtrabackup --backup --parallel=4 --target-dir=/path/to/backupdir
上面的命令使用4个线程进行备份。

8.指定数据库和表
如果你只想备份某些数据库或表,可以使用 --databases 选项:
xtrabackup --backup --databases="db1 db2.tbl1 db2.tbl2" --target-dir=/path/to/backupdir

9.如果 xtrabackup 不能自动确定日志文件的位置,你可以使用 --innodb_log_group_home_dir 指定它:
xtrabackup --backup --target-dir=/path/to/backupdir --innodb_log_group_home_dir=/path/to/logdir

10.备份锁定
为了获得一致的备份,xtrabackup 通常会在备份开始时锁定数据库。但是,你可以使用 --no-lock 避免这个锁定,尤其是当你有大量的长时间运行的事务时:
xtrabackup --backup --no-lock --target-dir=/path/to/backupdir

11.使用特定的my.cnf文件
如果你有多个 my.cnf 文件或者它不在标准路径上,你可以使用 --defaults-file 来指定它:
xtrabackup --backup --defaults-file=/path/to/my.cnf --target-dir=/path/to/backupdir

12.生成备份信息和检查点信息
使用 --backup 时,xtrabackup 会在备份目录中生成 xtrabackup_info 和 xtrabackup_checkpoints 文件。这些文件包含有关备份的信息和检查点的信息。

xz

xz 是一个强大的压缩工具,可以压缩和解压缩多种格式的文件。它通常可以在 Linux 中通过命令行工具使用,以提供更快的压缩和解压缩速度,并使用更少的磁盘空间。

下面是一些使用 xz 命令的示例:

  1. 压缩文件:使用 xz 命令可以压缩文件,例如:
xz file.txt

这将在当前目录下创建一个名为 file.txt.xz 的压缩文件,并将原始文件 file.txt 删除。

  1. 解压文件:使用 xz 命令可以解压缩文件,例如:
xz -d file.txt.xz

这将在当前目录下解压缩名为 file.txt.xz 的压缩文件,并将解压后的文件保存为 file.txt

  1. 压缩目录:可以使用 tarxz 命令一起压缩整个目录,例如:
tar -cJf directory.tar.xz directory/

这将在当前目录下创建一个名为 directory.tar.xz 的压缩文件,其中包含整个目录 directory/ 中的所有文件和子目录

  1. 解压缩目录:可以使用 tarxz 命令一起解压缩整个目录,例如:
tar -xJf directory.tar.xz

这将在当前目录下解压缩名为 directory.tar.xz 的压缩文件,并将解压后的文件保存到一个新的目录 directory/ 中。

xfs_admin

xfs_admin命令用于管理XFS文件系统的属性,包括设置设备标签(label)、查看文件系统信息以及设置其他属性。以下是有关xfs_admin命令的详细解释:

语法:

xfs_admin -L <新标签> <设备>

参数:

  • -L <新标签>:设置设备的新标签。
  • <设备>:要设置标签的设备路径,如/dev/sda1

注意事项:

  • xfs_admin命令仅适用于XFS文件系统。
  • 必须以root权限或使用sudo命令来执行xfs_admin命令。
1.显示设备的当前标签:
xfs_admin -l /dev/sda1

2.设置设备的标签:
xfs_admin -L MyLabel /dev/sda1

3.显示文件系统信息:
xfs_admin -i /dev/sda1

4.注意事项:
修改设备的标签不会对文件系统本身产生任何影响。它只是为了方便用户识别和标识不同的文件系统。
使用xfs_admin命令设置设备标签后,可以使用blkid命令来查看设备的新标签。

yum

yum 是一个用于管理 RPM 包的命令行工具,常用于 Red Hat 系统(如 Red Hat Enterprise Linux、CentOS 和 Fedora,尽管 Fedora 已经切换到了 dnf)。

# List of Main Commands(主要命令):
alias: 列出或创建命令别名。
autoremove: 删除原来作为依赖项安装但现在不再需要的所有软件包。
check: 检查打包数据库中的问题。
check-update: 检查可用的软件包升级。
clean: 删除缓存数据。
deplist: 列出软件包的依赖关系及提供它们的软件包(已弃用,建议使用 repoquery --deplist)。
distro-sync: 将已安装的软件包同步到最新可用版本。
downgrade: 降级一个软件包。
group: 显示或使用组信息。
help: 显示有用的使用信息。
history: 显示或使用事务历史。
info: 显示一个或一组软件包的详细信息。
install: 在系统上安装一个或多个软件包。
list: 列出一个或多个软件包。
makecache: 生成元数据缓存。
mark: 标记或取消标记已安装的软件包作为用户安装的。
module: 与模块交互。
provides: 查找提供给定值的软件包。
reinstall: 重新安装一个软件包。
remove: 从系统中删除一个或多个软件包。
repolist: 显示配置的软件仓库。
repoquery: 搜索与关键字匹配的软件包。
repository-packages: 在给定仓库的所有软件包上运行命令。
search: 搜索包含给定字符串的软件包详情。
shell: 运行一个交互式的 YUM shell。
swap: 为移除和安装一个规格运行一个交互式的 YUM 模块。
updateinfo: 显示关于软件包的通知。
upgrade: 升级一个或多个软件包。
upgrade-minimal: 升级,但只有解决影响您的系统的问题的最新软件包匹配。

# List of Plugin Commands(插件命令):
builddep: 安装软件包或 spec 文件的构建依赖。
changelog: 显示软件包的变更日志数据。
config-manager: 管理 yum 配置选项和仓库。
copr: 与 Copr 仓库交互。
debug-dump: 将已安装的rpm包的信息转储到文件。
debug-restore: 恢复在debug-dump文件中记录的软件包。
debuginfo-install: 安装 debuginfo 软件包。
download: 下载软件包到当前目录。
groups-manager: 创建和编辑组元数据文件。
kpatch: 切换 kpatch-patch 软件包的自动安装。
needs-restarting: 确定需要重新启动的已更新的二进制文件。
offline-distrosync: 准备系统的离线同步。
offline-upgrade: 准备系统升级到新版本。
playground: 与 Playground 仓库交互。
repoclosure: 显示仓库的未解决的依赖关系列表。
repodiff: 列出两组仓库之间的差异。
repograph: 以dot格式输出完整的软件包依赖关系图。
repomanage: 管理一个rpm包目录。
reposync: 从远程仓库下载所有软件包。
system-upgrade: 准备系统升级到新版本。

# General YUM options(一般的 YUM 选项):
-c [config file], --config [config file]: 指定配置文件的位置。
-q, --quiet: 静默操作,减少输出。
-v, --verbose: 详细操作,输出更多信息。
--version: 显示 yum 的版本信息。
--installroot [path]: 设置安装根路径。
--nodocs: 安装软件包时不安装文档。
--noplugins: 禁用所有插件。
--enableplugin [plugin]: 通过名称启用插件。
--disableplugin [plugin]: 通过名称禁用插件。
--releasever RELEASEVER: 覆盖配置文件和仓库文件中 $releasever 的值。
--setopt SETOPTS: 设置任意的配置和仓库选项。
--skip-broken: 跳过有问题的包来解决依赖关系。
-h, --help, --help-cmd: 显示命令帮助。
--allowerasing: 允许删除已安装的软件包以解决依赖关系。
-b, --best: 在事务中尝试使用最佳的包版本。
--nobest: 事务不限于最佳候选。
-C, --cacheonly: 仅从系统缓存运行,不更新缓存。
-R [minutes], --randomwait [minutes]: 最大的命令等待时间。
-d [debug level], --debuglevel [debug level]: 调试输出级别。
--debugsolver: 将详细的解决结果转储到文件。
--showduplicates: 在列表/搜索命令中显示仓库中的重复项。
-e ERRORLEVEL, --errorlevel ERRORLEVEL: 错误输出级别。
--obsoletes: 启用 yum 的过时处理逻辑。
--rpmverbosity [debug level name]: rpm的调试输出级别。
-y, --assumeyes: 自动回答所有问题的“是”。
--assumeno: 自动回答所有问题的“否”。
--enablerepo [repo]: 临时启用指定仓库。
--disablerepo [repo]: 临时禁用指定仓库。
--repo [repo], --repoid [repo]: 仅启用特定的仓库。
--enable: 启用仓库。
--disable: 禁用仓库。
-x [package], --exclude [package], --excludepkgs [package]: 排除指定的软件包。
--disableexcludes [repo], --disableexcludepkgs [repo]: 禁用excludepkgs。
--repofrompath [repo,path]: 添加额外的仓库路径和标签。
--noautoremove: 禁止自动删除不再使用的依赖。
--nogpgcheck: 禁用gpg签名检查。
--color COLOR: 控制是否使用颜色。
--refresh: 在运行命令前设置元数据为已过期。
-4: 仅解析IPv4地址。
-6: 仅解析IPv6地址。
--destdir DESTDIR, --downloaddir DESTDIR: 设置复制包的目录。
--downloadonly: 仅下载软件包。
--comment COMMENT: 为事务添加评论。
--bugfix: 在更新中包括与错误修复相关的包。
--enhancement: 在更新中包括增强功能相关的包。
--newpackage: 在更新中包括新包。
--security: 在更新中包括与安全性相关的包。
--advisory ADVISORY, --advisories ADVISORY: 包括为修复指定通知而需要的包。
--bz BUGZILLA, --bzs BUGZILLA: 包括为修复指定BZ而需要的包。
--cve CVES, --cves CVES: 包括为修复指定CVE而需要的包。
--sec-severity {Critical,Important,Moderate,Low}, --secseverity {Critical,Important,Moderate,Low}: 根据严重性包括与安全性相关的包。
--forcearch ARCH: 强制使用的架构。
# 用法:
# 1.安装软件包
yum install [package-name]

# 2.更新软件包
yum update [package-name]

# 3.删除软件包
yum remove [package-name]
或者
yum erase [package-name]

# 4.列出所有可用的软件包
yum list available

# 5.列出所有已安装的软件包
yum list installed

# 6.搜索软件包
yum search [keyword]

# 7.显示软件包信息
yum info [package-name]

# 8.清除缓存
yum clean all

# 9.检查更新
yum check-update

# 10.列出已启用的仓库
yum repolist

# 11.安装组
yum groupinstall "Development Tools"
安装软件组。例如,"Development Tools" 就是一个常见的组名。

# 12.更新系统
yum upgrade

# 13.显示历史
yum history

# 14.安装多个软件包,并自动确认所有提示
yum install -y package1 package2 package3

# 15.在安装软件包时排除特定的软件包
yum update --exclude=package-to-exclude

# 16.从指定的仓库安装软件包
yum install package-name --enablerepo=repository-name

# 17.在更新时跳过可能会引起问题的软件包
yum update --skip-broken

# 18.仅从缓存中搜索并安装软件包,不从互联网上更新仓库元数据
yum install package-name --cacheonly

# 19.搜索并显示与关键词相关的所有软件包及其描述
yum search all keyword

# 20.显示已安装和可用的软件包版本,并指出哪些已经过时
yum list package-name --showduplicates

# 21.安装一个.rpm文件,同时解决依赖关系
yum localinstall /path/to/package.rpm

# 22.使用特定的配置文件执行yum操作
yum --config=/path/to/yum.conf update

# 23.下载软件包但不安装
yum install package-name --downloadonly --downloaddir=/path/to/directory

# 24.列出指定仓库中的所有软件包
yum --disablerepo="*" --enablerepo="repository-name" list available

# 25.在执行更新时,仅考虑安全相关的更新
yum update --sec-severity=Critical

# 26.出所有已启用和已禁用的仓库
yum repolist all

# 27.删除所有不再需要的依赖关系
yum autoremove

# 28.查看软件包的信息,包括它的描述、版本、大小等
yum info package-name

# 29.列出所有与指定安全咨询相关的软件包
yum updateinfo info --advisory=ADVISORY

# 30.检查并显示所有可用的更新,但不实际安装
yum check-update

# 31.强制使用IPv4进行所有连接
yum update -4

# 32.为事务添加注释,以便在历史中跟踪
yum install package-name --comment="Adding necessary package for XYZ feature"

# 33.显示某个已安装软件包所提供的文件
yum provides */filename

yum list

yum list 是一个用于显示包列表的命令。

# 选项:
--all:显示所有软件包,无论是已安装、可用还是更新。这是默认选项。
--available:仅显示当前没有安装但在仓库中可用的软件包。
--installed:仅显示已经在系统上安装的软件包。
--extras:显示那些在启用的仓库中没有,但已经安装在系统上的“额外”的软件包。
--updates 和 --upgrades:这两个选项是同义的,都是显示有可用更新的已安装软件包。
--autoremove:显示那些被标记为自动移除的软件包。当某个软件包不再被任何已安装软件包所需要时,它会被标记为自动移除。
--recent:显示最近被添加或更新在仓库中的软件包。
PACKAGE:还可以指定一个特定的软件包名,yum 会为您显示有关该软件包的信息,无论是已安装、可用还是更新。

yum alias

--enable-resolving 和 --disable-resolving:
这两个选项控制 yum 是否在执行时解析(或替换)定义的别名。
--enable-resolving: 当使用此选项时,如果输入了一个别名,它会被解析并替换为实际的命令。
--disable-resolving: 使用此选项将阻止别名的解析,即使输入的是一个已定义的别名,它也会被视为文字字符串,而不会被替换。

{add,list,delete}:
这些是与别名相关的主要操作。
add: 用于添加新的别名。
list: 列出当前定义的所有别名。
delete: 删除已定义的别名。
command[=result]:

这定义了别名的实际结构。command 是你想要用的简短别名,而 result 是这个别名应该替换成的实际命令。

# 添加别名:
yum alias add ii=install
这将为 install 命令添加一个别名 ii。在未来,你只需要输入 yum ii package_name 就可以代替 yum install package_name 来安装软件包。

# 列出所有别名:
yum alias list

# 删除别名:
yum alias delete ii

# 禁用别名解析:
yum --disable-resolving [other yum commands]
使用这个命令,即使输入的是一个别名,它也不会被解析和替换。

yum autoremove

yum autoremove 是一个用于移除不再需要的软件包的命令。主要的应用场景是,当你安装一个软件包时,它可能会拉取其他一些依赖软件包。如果后来你删除了这个软件包,那些被拉取的依赖可能仍然留在系统中,没有被使用。yum autoremove 正是用来清理这些“孤立”的软件包的。

命令解释:

  • yum autoremove: 当运行这个命令时,yum 会列出所有被认为是不再需要的软件包,然后询问你是否想要删除它们。这些软件包可能是之前安装其他软件包时所需的依赖,但现在这些软件包已被移除或不再需要这些依赖了。
# 简单使用:
yum autoremove
运行上述命令后,系统将列出所有认为不再需要的软件包,并询问你是否确认要移除它们。

# 与特定软件包一起使用:
yum autoremove <package-name>
除了移除指定的 <package-name> 软件包,这个命令还会尝试移除与之关联的不再需要的依赖。

#自动确认:
yum -y autoremove

yum check

yum check 命令是用来验证系统上软件包的完整性和一致性的。它会检查已安装的软件包的元数据,查找任何可能的问题或不一致性。

yum check: 运行这个命令会让 yum 检查所有已安装的软件包和其元数据,以识别以下问题:

  • 是否有任何软件包的依赖关系被打破。
  • 是否有软件包数据库中的不一致。
  • 未完整安装或者是损坏的软件包。
  • 与其他软件包有冲突的软件包。
# 基本使用:
yum check

# 检查特定的软件包
yum check <package-name>

yum check-update

yum check-update 命令用于在 YUM 仓库中检查是否有可用的更新。这个命令只检查更新,而不实际执行更新操作。运行此命令会列出所有有更新可用的软件包及其版本。

# 基本使用:
yum check-update
这将会显示所有有更新可用的软件包列表。对于每个软件包,它会显示当前安装的版本和可用的更新版本。

# 检查特定软件包的更新:
yum check-update <package-name>

# 带其他选项:
你可以与其他 yum 选项结合使用 check-update。例如,如果你想在一个特定的仓库中检查更新,你可以这样做:
yum --enablerepo=<repository-name> check-update

# 注意事项:
如果没有可用的更新,该命令不会显示任何输出。
yum check-update 可以在你想知道是否有新的安全补丁或软件包版本可用时定期运行。
它与 yum update 命令有区别:yum check-update 仅查看可用的更新但不安装,而 yum update 会安装所有可用的更新。
如果 yum check-update 显示有可用的更新,但你不希望更新所有的软件包,你可以选择只更新特定的软件包,例如:
yum update <package-name>

yum clean

yum clean 命令用于清除由 YUM 生成的缓存数据。YUM 会缓存数据以加快软件包的检索和安装速度,但有时这些缓存数据可能会导致问题,或者占用太多磁盘空间。

# 命令选项:
yum clean packages:
删除缓存目录下的软件包文件。
yum clean metadata:
清除元数据文件,这些文件用于存储关于可用软件包的信息。
yum clean dbcache:
清除数据库缓存。YUM 使用一系列的数据库文件来跟踪本地软件包的信息。
yum clean plugins:
清除由插件生成的缓存。
yum clean all:
清除所有缓存内容。这是最常用的选项,因为它确保清除所有可能导致问题的缓存数据。

# 清除所有缓存:
yum clean all
这将清除所有 YUM 缓存数据,包括软件包文件、元数据和数据库缓存。

# 仅清除软件包缓存:
yum clean packages

# 清除特定仓库的缓存:
yum --enablerepo=<repository-name> clean all

# 注意事项:
清除 YUM 缓存后,下次运行 yum update 或 yum install 等命令时,可能会需要更多的时间,因为 YUM 需要重新下载缓存数据。
某些情况下,如 YUM 更新遇到问题或本地缓存与仓库数据不一致时,清除缓存可能是解决问题的方法。
使用 yum clean 时,尤其是 yum clean all,可以帮助释放大量磁盘空间,特别是在频繁使用 YUM 进行大量操作的系统上。

yum deplist

yum deplist 命令用于显示指定软件包的依赖关系。每个 RPM 软件包都可能依赖于其他软件包的特定功能或文件。

# 基本用法:
yum deplist <package-name>
这将列出 <package-name> 的所有依赖项。

# 输出解释:
package:这表示你要查询的软件包。
dependency:列出该软件包所依赖的所有内容。对于每个依赖项,输出都会显示它来自哪个软件包和版本。

eg:
package: git.x86_64 2.17.2-1.fc28
  dependency: bash
   provider: bash.x86_64 4.4.23-1.fc28
  dependency: git-core = 2.17.2-1.fc28
   provider: git-core.x86_64 2.17.2-1.fc28
   ...


# 查询 git 的依赖关系:
yum deplist git

# 查询多个软件包:
yum deplist git vim
这将会显示 gitvim 的依赖关系。

yum distro-sync

yum distro-sync(在一些新版本中,这是dnf distro-sync)命令用于使系统上的已安装软件包与当前启用的存储库中可用的版本同步。这意味着该命令可能会升级或降级软件包,以确保系统上的软件包版本与存储库中的软件包版本相匹配。这个命令特别适用于那些可能已经启用、禁用或更改了存储库,或者对系统进行了手动的软件包操作,希望确保系统软件包与当前存储库同步的情况。

# 主要功能:
1.版本同步:与yum update不同,yum distro-sync不仅仅是升级软件包。如果存储库中的软件包版本比系统上的版本旧,它也会尝试降级该软件包。
2.处理更改的存储库:如果用户启用了新的存储库或禁用了现有的存储库,此命令可以确保系统的状态与当前的存储库设置相匹配。

# 使用方法:
yum distro-sync
这会将所有软件包与当前启用的存储库同步。

# 如果你只想同步特定的软件包,你可以指定它们:
yum distro-sync <package-name>

# 同步整个系统:
yum distro-sync

#只同步特定软件包: 
yum distro-sync git

yum downgrade

yum downgrade 是一个命令,它允许用户将一个或多个已安装的软件包降级到其之前的版本。这可能在新版本的软件包引入问题或不兼容性时非常有用。

# 主要功能:
1.降级软件包:与其它的包管理任务不同,yum downgrade 将尝试找到目标软件包的早期版本,并将当前安装的版本降级到这个早期版本。
2.解决依赖性:这个命令还会处理依赖关系,确保降级过程不会破坏系统。

# 降级一个软件包:
yum downgrade <package-name1> <package-name2> ...

# 在尝试降级之前,始终先查看可用的版本,以确保你知道你正在降级到哪个版本。你可以使用yum list available <package-name>来查看存储库中的可用版本。

yum group

yum group 命令是用于管理软件包组的。软件包组是一组相关的软件包,通常用于实现某个特定的功能或任务,例如“Web 服务器”或“桌面环境”。通过使用 yum group 命令,用户可以轻松地安装、更新、升级或删除多个相关软件包。

# 列出所有可用的软件包组:
yum group list

# 详细列出某个软件包组:
yum group info <group-name>

# 安装软件包组:
yum group install <group-name>

# 升级软件包组:
yum group upgrade <group-name>

# 删除软件包组:
yum group remove <group-name>

# 列出已安装的软件包组:
yum group list installed

yum history

yum history 命令允许用户查看和管理 yum 进行的操作历史,包括安装、删除、更新和其他一些操作。这是一个非常有用的工具,尤其是当你想回滚到之前的某个状态或者查看过去执行过的命令时。

# 查看历史
# 使用下列命令可以列出 yum 的操作历史:这将显示一个包含每次 yum 操作的列表,包括操作的 ID、操作类型、日期等信息。
yum history list

# 查看某个操作的详细信息,你可以使用以下命令查看指定ID的操作的详细信息:
yum history info <ID>
# 此命令将列出此操作涉及的所有软件包,以及它们的状态变化(例如,从旧版本升级到新版本)。

# 撤销某个操作
# 如果你想撤销某个特定的操作(例如,误删了某个软件包),可以使用以下命令:
yum history undo <ID>
# 这会尝试撤销指定ID的操作,将系统恢复到该操作之前的状态。

# 重做某个操作
# 与 undo 命令相反,你可以使用 redo 命令来重复执行某个操作:
yum history redo <ID>

#史命令的其他选项
new:显示最新的历史记录。
sync:从RPM数据库中同步历史记录。
stats:显示历史数据库的统计信息。
addon-info <ID>:显示指定操作的插件数据。

# 注意事项
使用 history 命令时要小心,尤其是 undo 和 redo 命令,因为它们会影响系统的状态。
在使用 undo 或 redo 之前,最好先查看操作的详细信息,确保你知道会发生什么。

yum info

yum info 命令用于获取软件包的详细信息。它为用户提供了一个简单的方法来查找和了解存储在 YUM 仓库中的软件包的相关信息。

# 基本用法
yum info <package_name>

# 显示所有软件包的信息
yum info all

# 查看已安装的软件包信息
yum info installed

# 查看特定软件包的信息
yum info <package_name>

# 显示多个软件包的信息
yum info <package1> <package2> ...

# 输出中的字段解释
以下是 yum info 输出中的一些常见字段的解释:

Name:软件包的名称。
Arch:软件包的架构(例如,x86_64 或 i386)。
Version:软件包的版本号。
Release:软件包的发布号。
Size:软件包的大小。
Repo:软件包所在的 YUM 仓库。
Summary:关于软件包的简短描述。
URL:与软件包相关的网站或项目主页。
License:软件包的许可证。
Description:软件包的详细描述

yum install

yum install 是一个常用命令,用于在使用 YUM(Yellowdog Updater Modified)包管理器的 Linux 发行版中安装软件包

# yum install 命令用于从 YUM 仓库中安装指定的软件包及其所有必需的依赖。
yum install <package_name>

# 安装单个软件包:
# 你可以在一个命令中列出多个软件包来一次性安装它们:
# 这将同时安装 nano, wget, 和 curl 软件包及其依赖。
yum install nano wget curl

# 安装特定版本的软件包:
yum install <package_name>-<version>
eg:
yum install nginx-1.14.0

# 选项和参数
-y:自动应答为 "yes" 以所有的提示,这样在安装过程中就不会询问用户。
yum install nginx -y
--nogpgcheck:安装软件包时不检查 GPG 签名。虽然这可能是必需的,但在安全上不建议这么做,除非你确信软件包来源是可信的。
--exclude=<package_name>:从操作中排除特定的软件包。例如,如果你想安装所有更新,但想排除 kernel 包,你可以使用:
yum install --exclude=kernel

# 注意事项
在执行 yum install 之前,通常建议先运行 yum update 命令以确保你的系统和 YUM 仓库是最新的。
安装软件包之前,YUM 会列出要安装和更新的软件包及其依赖,然后询问你是否确认安装。如果你同意,则会开始下载和安装过程。
YUM 的一个主要优势是它会自动处理软件依赖,所以当你安装一个软件包时,YUM 会确保所有必需的依赖也被安装。

yum makecache

yum makecache 是一个用于生成和更新元数据缓存的 yum 命令。当你访问 YUM 仓库并查询、安装或更新软件包时,YUM 会使用这些元数据。而由于这些数据可能非常庞大,因此将其缓存到本地可以加快后续的查询和操作速度。

# yum makecache 用于生成和刷新 YUM 仓库元数据的缓存。此命令通常在仓库配置更改后或新仓库被添加到系统后运行。
yum makecache

# 选项
fast: 这是一个更快的变体,只有当缓存文件过期时才会从服务器下载元数据。这对于节省带宽和时间非常有用。
yum makecache fast

# 更新元数据缓存:
# 运行此命令会使 YUM 下载最新的仓库元数据并更新其缓存
yum makecache

# 快速更新:
# 只有在元数据文件过期时,此命令才会从服务器下载它们。
yum makecache fast

# 注意事项
在执行长时间未更新的系统上首次运行 yum 命令(如 yum install 或 yum update)时,YUM 通常会首先执行 makecache 操作。但在某些情况下,例如当你添加一个新的仓库或更改现有仓库的配置时,可能需要手动执行此命令。

yum makecache 可能会消耗大量的带宽,因为它会下载所有仓库的完整元数据。如果你关心带宽使用,最好定期运行此命令,而不是频繁地运行。

由于这个命令只是更新缓存,它实际上不会改变系统上的任何软件包。但是,一个新鲜的缓存确保了当你查询、安装或更新软件包时,你看到的信息是最新的。

yum mark

在某些版本的 yum 中,yum mark 命令用于标记或更改软件包的安装状态。这通常用于与自动删除功能一起使用,以决定哪些包是用户主动安装的(即手动安装的)以及哪些包是作为其他软件包的依赖项被自动安装的。

# 用途
# 1.手动标记一个包:当你手动安装一个包但它被视为自动安装的依赖项时,可以使用 yum mark 命令更改其状态。
# 2.标记多个包:如果你想在安装或删除包后更改多个包的状态,yum mark 可以帮助你做到这一点。

# 基本语法
yum mark install <package-name>
yum mark remove <package-name>

#选项和参数
install:标记指定的包为手动安装。
remove:标记指定的包为自动安装的依赖。

# 标记包为手动安装:
如果你手动安装了 nano 软件包,但它被视为自动安装的依赖项,你可以使用以下命令将其标记为手动安装:
yum mark install nano

# 标记包为自动安装:
如果你安装了一个包,例如 httpd,并且这导致了 apr 被自动安装作为依赖项,但后来你决定你实际上想手动管理 apr,你可以使用以下命令将其标记为自动安装:
yum mark remove apr

# 注意事项
运行 yum autoremove 时,任何标记为自动安装(而不是手动安装)且不再被任何软件包依赖的软件包都将被删除。
在更改软件包的标记状态之前,确保你了解这意味着什么,特别是如果你计划在未来使用 yum autoremove 命令。

yum module

yum module 是一个在某些 YUM 版本(特别是那些支持模块化内容的版本)中用于管理模块化内容的命令。模块化内容允许软件维护者提供多个版本的应用程序,并确保用户能够根据他们的需求选择和管理正确的应用程序流(版本)。例如,如果一个用户想要在其系统上使用特定版本的软件(例如 Node.js 10 而不是 Node.js 12),模块化内容就可以实现这一目标。

# 用法
yum module <action> <module-name>
其中 <action> 是你想要执行的操作,<module-name> 是模块的名称。
常见的 <action> 包括:
list:列出可用的模块。
info:显示特定模块的详细信息。
install:安装一个模块流(即特定版本的模块)。
update:更新模块。
remove:从系统中删除一个模块流。
reset:重置模块流的状态。
enable:启用模块流。
disable:禁用模块流

# 列出所有可用模块:
yum module list

# 获取特定模块的信息:
yum module info <module-name>

# 安装特定版本的模块:
yum module install <module-name>:<stream>

# 启用特定模块:
yum module enable <module-name>

# 禁用特定模块:
yum module disable <module-name>

#注意事项:
当你安装或启用一个模块流时,相关的软件包版本也会被安装或更新。

通过模块化内容,软件维护者可以为特定应用程序提供多个版本,并确保它们之间的兼容性。

yum provides

yum provides 是一个非常有用的命令,允许用户查询哪个软件包提供了特定的文件、二进制文件或库。在早期的 YUM 版本中,这个命令也可以被称为 yum whatprovides

# 用法
yum provides <>
其中 <> 可以是一个完整的文件路径、一个不带路径的文件名、或者一个通配符模式。

# 查询哪个软件包提供了特定的文件:
yum provides /usr/bin/ls
这个命令会告诉你 /usr/bin/ls 是由哪个软件包提供的。

# 查询哪个软件包提供了特定的库:
yum provides libpthread.so.0

# 使用通配符查询:
yum provides '*bin/ls'

# 为什么这个命令很有用?
当你尝试编译一个程序时,你可能会遇到错误,提示你缺少某个文件或库。yum provides 命令允许你快速找到需要的软件包,以便你可以安装它。

此外,当你想要知道某个特定的工具或程序是由哪个软件包提供的时,这个命令也非常有用。

注意:
在某些新的 Linux 发行版或版本中,YUM 可能已被 DNF 替代,DNF 是 YUM 的下一代版本。在这些系统上,你可能需要使用 dnf provides 代替 yum provides。但是,两者的工作原理大致相同。

yum reinstall

yum reinstall 命令用于重新安装一个已经在系统上安装的软件包。这在某些情况下非常有用,例如当你认为软件包的某些文件可能已经被更改、损坏或删除时。

#基本用法
yum reinstall <package-name>
这里的 <package-name> 是你想要重新安装的软件包的名称

# 重新安装一个软件包:
yum reinstall nano

# 重新安装多个软件包:
yum reinstall nano vim

#注意事项
当你使用 yum reinstall 命令时,不会更改软件包的版本。它只是获取当前安装的版本的新副本并安装它。

重新安装软件包不会更改其配置文件。如果你的目标是恢复一个软件包的默认配置,你可能需要先手动删除或重命名配置文件,然后再重新安装。

在某些系统中,你可能需要 root 权限才能使用 yum 命令。在这种情况下,你应该使用 sudo 命令,例如:sudo yum reinstall nano。

在某些新的 Linux 发行版或版本中,YUM 可能已被 DNF 替代。在这些系统上,你可能需要使用 dnf reinstall 代替 yum reinstall。

yum remove

yum remove 是用于从系统中卸载软件包的命令。当你不再需要某个软件包或需要为其释放空间时,你可以使用此命令。

# 用法
yum remove <package-name>
其中 <package-name> 是你希望从系统中移除的软件包名称。

# 卸载一个软件包:
yum remove nano

# 卸载多个软件包:
yum remove nano vim


# 同时移除软件包及其依赖:
当你使用 yum remove 命令时,YUM 也会尝试移除不再需要的依赖,以确保系统的整洁。

# 注意事项
在执行 yum remove 命令后,YUM 会显示一个要移除的软件包列表,同时会询问你是否确实要继续。你需要确认此操作才会继续移除过程。
一些核心的系统软件包可能具有很多依赖,尝试移除这些软件包可能导致YUM提示你移除大量的其他软件包。在这种情况下,请谨慎操作,确保你知道自己在做什么。
为了确保 yum 命令的执行,你可能需要 root 权限。在这种情况下,你应该使用 sudo 前缀,例如:sudo yum remove nano。
在某些新的 Linux 发行版或版本中,YUM 可能已被 DNF 替代。在这些系统上,你可能需要使用 dnf remove 代替 yum remove。

yum repolist

yum repolist 是一个用于列出系统上配置的软件库的命令。软件库(通常简称为“repo”)是存储软件包的位置,YUM 使用这些软件库来查找、安装、升级和删除软件包

# 基本用法
yum repolist
执行此命令将列出系统上所有已配置和可用的软件库。

# 输出解释
当你运行 yum repolist,你会看到类似以下的输出:
repo id                     repo name                                     status
base/7/x86_64               CentOS-7 - Base                                10,019
extras/7/x86_64             CentOS-7 - Extras                                 435
updates/7/x86_64            CentOS-7 - Updates                              2,500

# 解释
repo id:软件库的唯一标识符。
repo name:软件库的人类可读名称。
status:软件库中的软件包数量

# 显示所有软件库:
yum repolist all
这会显示所有软件库,包括已启用和已禁用的。

# 显示已启用的软件库:
yum repolist enabled
默认情况下,yum repolist 命令只显示已启用的软件库。

# 显示已禁用的软件库:
yum repolist disabled

yum repoquery

yum repoquery 是一个命令行工具,用于查询软件库中的软件包信息。在某些 Linux 发行版中,这个工具可能是独立于 YUM 的,需要单独安装(例如通过安装 yum-utils 包),但在其他版本中,它可能已经内置在 YUM 中。这个工具提供了比 yum listyum info 更强大、更详细的查询功能。

# 基本用法
yum repoquery [options] [package-name]

# 查询特定软件包:
yum repoquery <package-name>
这会显示与指定软件包名匹配的所有软件包。

#列出所有软件包:
yum repoquery '*'

# 显示软件包的描述:
yum repoquery --description <package-name>

# 显示软件包的依赖关系:
yum repoquery --requires <package-name>

# 查询提供特定功能或文件的软件包:
yum repoquery --whatprovides <feature-or-file>

# 查询需要特定软件包的其他软件包:
yum repoquery --whatrequires <package-name>

# 查询软件库中的特定版本的软件包:
yum repoquery <package-name>-<version>

# 列出软件包的文件:
yum repoquery --list <package-name>

#注意事项
和其他 YUM 命令一样,yum repoquery 默认只查询启用的软件库。如果你想从已禁用的软件库中查询,可以使用 --enablerepo 选项。
# 选项
-a, --all: 查询所有的软件包。
--show-duplicates: 显示软件包的所有版本。
--arch [arch], --archlist [arch]: 仅显示特定架构的结果。
-f FILE, --file FILE: 显示拥有指定文件的软件包。
--whatconflicts REQ: 显示与指定要求冲突的软件包。
--whatdepends REQ: 显示依赖、建议、补充、增强或推荐指定软件包或文件的软件包。
--whatobsoletes REQ: 显示过时的指定软件包的软件包。
--whatprovides REQ: 显示提供指定要求的软件包。
--whatrequires REQ: 显示需要指定软件包或文件的软件包。
--whatrecommends REQ: 显示推荐指定要求的软件包。
--whatenhances REQ: 显示增强指定要求的软件包。
--whatsuggests REQ: 显示建议指定要求的软件包。
--whatsupplements REQ: 显示补充指定要求的软件包。
--alldeps: 检查非明确的依赖关系。
--exactdeps: 严格检查给定的依赖性。
--recursive: 与 --whatrequires--requires --resolve 一起使用,递归查询软件包。
--deplist: 显示所有的依赖和提供它们的软件包列表。
--resolve: 解析功能到原始软件包。
--tree: 为软件包显示递归树
--srpm: 操作对应的源RPM。
--latest-limit LATEST_LIMIT: 显示给定名称和架构的N个最新的软件包。
--disable-modular-filtering: 也列出非活动模块流中的软件包。
-i, --info: 显示关于软件包的详细信息。
-l, --list: 显示软件包中的文件列表。
-s, --source: 显示软件包的源RPM名称。
--changelogs: 显示软件包的更改日志。
--qf QUERYFORMAT, --queryformat QUERYFORMAT: 列出软件包的显示格式。
--querytags: 显示可以与 --queryformat 一起使用的标签。
--nevra: 使用默认的名称-版本号格式显示找到的软件包。
--nvr: 使用名称-版本号-发布格式显示找到的软件包。
--envra: 使用版本号:名称-版本号-发布格式显示找到的软件包。
--groupmember: 显示所选软件包在哪些组中呈现。
--duplicates: 仅查询已安装的重复软件包。
--installonly: 仅查询已安装的installonly软件包。
--unsatisfied: 仅查询有未满足依赖性的已安装软件包。
--location: 显示可以下载软件包的位置。
--conflicts: 显示软件包与之冲突的功能。
--depends: 显示软件包可以依赖、增强、推荐、建议和补充的功能。
--enhances: 显示软件包可以增强的功能。
--provides: 显示软件包提供的功能。
--recommends: 显示软件包推荐的功能。
--requires: 显示软件包依赖的功能。
--requires-pre: 显示软件包在运行%pre和%post脚本时所需的功能。
--suggests: 显示软件包建议的功能。
--supplements: 显示软件包可以补充的功能。
--installed: 仅显示已安装的软件包。
--extras: 显示仅在系统上可用但不在任何可用仓库中的软件包,这些通常是过时的或手动安装的软件包。
--upgrades: 仅显示提供某个已安装软件包的升级的软件包。
--unneeded: 显示可以通过 "yum autoremove" 命令删除的软件包。
--userinstalled: 显示由用户手动安装的软件包。
--recent: 显示最近编辑或安装的软件包。
KEY: 用于查询的关键字或条件。

yum repository-packages

yum repository-packages 命令是用于查询、安装、更新、删除来自特定仓库的软件包的。这是一个非常有用的工具,尤其是当你想要从某个特定的仓库执行操作时。

info: 显示来自指定仓库的软件包的详细信息。
用法:yum repository-packages [repository] info [package-name]
install: 安装来自指定仓库的软件包。
用法:yum repository-packages [repository] install [package-name]
list: 列出指定仓库中的所有软件包。
用法:yum repository-packages [repository] list
remove: 删除来自指定仓库的软件包。
用法:yum repository-packages [repository] remove [package-name]
search: 在指定仓库中搜索软件包。
用法:yum repository-packages [repository] search [search-term]
update: 更新来自指定仓库的软件包。
用法:yum repository-packages [repository] update [package-name]
upgrade: 升级来自指定仓库的软件包(通常与update相同,但语义上可能有些差异)。
用法:yum repository-packages [repository] upgrade [package-name]

#例如,如果你只想要从 epel 仓库更新 nginx,你可以使用如下命令:
yum repository-packages epel update nginx

yum search

yum search 命令是一个非常有用的工具,它允许用户在所有可用的软件包中搜索具有特定关键字的软件包。当你不确定一个软件包的确切名称或你想找到与某个主题相关的所有软件包时,这是一个很好的命令。

yum search [keywords]

# 基本搜索:
yum search nginx

# 描述中的搜索:
YUM 默认在软件包名称和描述中搜索关键字。因此,搜索结果可能包括名称中没有关键字但描述中有关键字的软件包。

# 搜索结果:
yum search命令的输出通常是两列,左列是软件包的名称,右列是软件包的简短描述。这可以帮助你快速了解每个软件包的作用。

# 区分大小写:
该命令不区分大小写,所以yum search Nginx和yum search nginx会返回相同的结果。

# 使用通配符:
yum search支持使用通配符,如*,来增强搜索功能。例如,yum search php-*可以帮助找到以php-开头的所有软件包。

# 匹配多个关键字:
你可以同时搜索多个关键字,只需在关键字之间添加空格。例如:yum search web server会搜索包含“web”和“server”的软件包。

#使用场景
查找特定软件的版本:
如果你想找出与某个软件相关的所有软件包,以及其可能的版本或子包,你可以使用yum search。例如,查找Python相关的所有软件包:yum search python.

探索新软件:
如果你听说了一个新的工具或库,但不确定其在 YUM 仓库中的确切名称,可以使用此命令进行搜索。

找到相关的工具或库:
如果你正在进行某种开发或配置,并想知道是否有与你的工作相关的工具或库,可以使用yum search加上相关的关键字进行搜索。

yum shell

yum shell 是一个不太常用但非常有用的 yum 功能。它允许用户在一个交互式会话中执行多个 yum 命令。这对于执行要求多个步骤的复杂任务特别有用,因为它允许你在单个事务中执行所有步骤,确保操作的一致性和完整性。

yum shell
这将打开一个新的交互式会话,你可以在其中输入并执行多个 yum 命令。

#事务命令:
你可以在 yum shell 中执行任何标准的 yum 命令,如 install, remove, update 等。
eg:
> install nginx
> update httpd

#执行事务:
输入命令后,使用 run 命令执行所有列出的事务
> run

# 撤销或重置:
如果你决定不执行某些命令,可以使用 reset 命令清除当前的命令列表:
> reset

#退出:
完成后,使用 exit 或 quit 退出 yum shell。

# 使用场景
1.复杂的软件包管理任务:
如果你需要在单个事务中执行多个操作(例如,安装一些软件包,删除其他软件包,然后更新其他软件包),yum shell 是一个很好的选择。
2.脚本和自动化:
你可以使用 echo 或输入重定向将多个 yum 命令传递给 yum shell,以便在脚本或自动化任务中使用。

例如:
echo -e "install nginx\nrun" | yum shell
3.减少重复的依赖解析:
在 yum shell 中,当你输入多个命令并执行它们时,yum 只需解析依赖关系一次,而不是每次命令都解析。这可以提高效率,特别是当涉及到大量软件包或复杂的依赖关系时。

yum swap

yum swap 命令是用来交换(即,替换)一个已安装的包到另一个包的。这在某些情况下很有用,特别是当你想要替换一个软件包而不打断其依赖关系的时候。此命令将尝试卸载指定的软件包并安装另一个软件包,同时确保所有的依赖关系都得到满足。

yum swap <要移除的包> <要安装的包>

# 假设你安装了一个包 packageA,现在你想替换它为 packageB,但你不想破坏任何依赖于 packageA 的其他软件包。这时你可以使用 yum swap:
yum swap packageA packageB

yum updateinfo

yum updateinfo 是用于查看与已安装的软件包或可用更新相关的信息和通知的命令。它可以帮助用户理解为什么某个更新是必要的,比如是否解决了一个安全问题或修复了一个错误。

# list:列出所有与更新相关的信息。
yum updateinfo list

# info:为所有更新提供详细的描述。
yum updateinfo info

# summary:提供关于更新信息的总结,例如有多少安全更新、多少错误修复等
yum updateinfo summary

# bugfix:显示与错误修复相关的更新。
yum updateinfo list bugfix

# enhancement:显示增强功能的更新。
yum updateinfo list enhancement

# security:显示与安全相关的更新。
yum updateinfo list security

#cve:显示与特定CVE编号相关的安全更新。CVE编号是公开的安全漏洞和曝露的标识符。
yum updateinfo list cve CVE-2021-XXXX

# sec-severity:按安全严重性筛选更新。例如,要查看所有“重要”安全更新:
yum updateinfo list sec-severity:Important

yum upgrade

yum upgrade 是一个用于更新已安装的软件包及其依赖关系的命令。它不仅会更新软件包,还会删除那些在仓库中已经被标记为过时的软件包。

yum upgrade
这个命令将尝试更新系统上的所有软件包及其依赖关系。

#upgrade 与 update 的区别
yum 提供了两个用于更新软件包的命令:update 和 upgrade。它们在功能上非常相似,但有一个关键的区别:
yum update 会更新所有已安装的软件包到最新版本,但它不会删除已被标记为过时的软件包。
yum upgrade 除了执行所有 yum update 所做的事情之外,还会删除那些在仓库中已经被标记为过时的软件包。
因此,yum upgrade 在大多数情况下是一个更彻底的更新选项。

# 选项
#--security:仅升级与安全相关的软件包。
yum upgrade --security

# --exclude=package_name:更新时排除特定的软件包。例如,如果你不想更新 httpd 软件包,你可以使用:
yum upgrade --exclude=httpd

#package_name:只升级指定的软件包及其依赖关系。例如,要仅更新 httpd 软件包,你可以使用:
yum upgrade httpd

# 	--obsoletes:此选项在 yum upgrade 中默认启用,允许 yum 处理过时的软件包。如果使用 yum update,此选项也可以用来处理过时的软件包。

# --downloadonly:仅下载软件包,但不安装。这对于在有限的带宽环境中非常有用,可以在流量低峰时下载,然后在稍后进行安装。

yum upgrade-minimal

yum upgrade-minimal 是一个命令,用于尽可能少地升级软件包以满足安全、关键和当前的安装的软件包需求。

yum upgrade-minimal
行此命令将会检查并升级那些对系统有重要影响或与安全相关的更新。与 yum upgrade 不同,它不会尝试更新所有可用的软件包。

# --security:仅升级与安全相关的软件包。
yum upgrade-minimal --security

# --bugfix:仅升级包含错误修复的软件包。
yum upgrade-minimal --bugfix

# --obsoletes:此选项在 yum upgrade 和 yum upgrade-minimal 中默认启用,允许 yum 处理过时的软件包。

# package_name:仅尝试对指定的软件包执行最小更新。
yum upgrade-minimal package_name

#优点和应用场景
yum upgrade-minimal 的主要目的是在需要最小更改的环境中应用更新。例如,在生产环境中,你可能不希望立即应用所有更新,但仍希望确保所有安全补丁都被应用。在这种情况下,使用 upgrade-minimal 可以帮助你实现这一目标,同时降低因大量更新而可能导致的潜在风险。

zip

zip 是一个常用的 Linux 命令,用于将文件和目录打包成 ZIP 压缩文件格式。以下是 zip 命令的详细讲解:

zip 命令的基本格式如下:

zip [options] zipfile files

其中,options 为可选参数,zipfile 为要创建的 ZIP 文件名,files 为要压缩的文件或目录列表。

zip 命令的常用选项:

  • -r: 递归地将目录下的所有子目录和文件都压缩到 ZIP 文件中。
  • -q: 静默模式,不显示压缩进度和警告信息。
  • -j: 压缩时不保留文件或目录的路径信息,只将文件本身压缩到 ZIP 文件中。
  • -m: 压缩后删除原文件。
  • -u: 只压缩更新或新增的文件。
  1. 将文件夹 example 打包成 example.zip
zip -r example.zip example/
  1. 将文件夹 example 打包成 example.zip,并使用静默模式:
zip -rq example.zip example/
  1. 将文件夹 example 打包成 example.zip,并去掉路径信息:
zip -j example.zip example/*
  1. 将文件夹 example 打包成 example.zip,压缩后删除原文件:
zip -rm example.zip example/
  1. 将文件夹 example 打包成 example.zip,仅压缩新增或更新的文件:
zip -ru example.zip example/

yum repolist enabled
默认情况下,yum repolist 命令只显示已启用的软件库。

显示已禁用的软件库:

yum repolist disabled


### yum repoquery

> `yum repoquery` 是一个命令行工具,用于查询软件库中的软件包信息。在某些 Linux 发行版中,这个工具可能是独立于 YUM 的,需要单独安装(例如通过安装 `yum-utils` 包),但在其他版本中,它可能已经内置在 YUM 中。这个工具提供了比 `yum list` 和 `yum info` 更强大、更详细的查询功能。

```bash
# 基本用法
yum repoquery [options] [package-name]

# 查询特定软件包:
yum repoquery <package-name>
这会显示与指定软件包名匹配的所有软件包。

#列出所有软件包:
yum repoquery '*'

# 显示软件包的描述:
yum repoquery --description <package-name>

# 显示软件包的依赖关系:
yum repoquery --requires <package-name>

# 查询提供特定功能或文件的软件包:
yum repoquery --whatprovides <feature-or-file>

# 查询需要特定软件包的其他软件包:
yum repoquery --whatrequires <package-name>

# 查询软件库中的特定版本的软件包:
yum repoquery <package-name>-<version>

# 列出软件包的文件:
yum repoquery --list <package-name>

#注意事项
和其他 YUM 命令一样,yum repoquery 默认只查询启用的软件库。如果你想从已禁用的软件库中查询,可以使用 --enablerepo 选项。
# 选项
-a, --all: 查询所有的软件包。
--show-duplicates: 显示软件包的所有版本。
--arch [arch], --archlist [arch]: 仅显示特定架构的结果。
-f FILE, --file FILE: 显示拥有指定文件的软件包。
--whatconflicts REQ: 显示与指定要求冲突的软件包。
--whatdepends REQ: 显示依赖、建议、补充、增强或推荐指定软件包或文件的软件包。
--whatobsoletes REQ: 显示过时的指定软件包的软件包。
--whatprovides REQ: 显示提供指定要求的软件包。
--whatrequires REQ: 显示需要指定软件包或文件的软件包。
--whatrecommends REQ: 显示推荐指定要求的软件包。
--whatenhances REQ: 显示增强指定要求的软件包。
--whatsuggests REQ: 显示建议指定要求的软件包。
--whatsupplements REQ: 显示补充指定要求的软件包。
--alldeps: 检查非明确的依赖关系。
--exactdeps: 严格检查给定的依赖性。
--recursive: 与 --whatrequires--requires --resolve 一起使用,递归查询软件包。
--deplist: 显示所有的依赖和提供它们的软件包列表。
--resolve: 解析功能到原始软件包。
--tree: 为软件包显示递归树
--srpm: 操作对应的源RPM。
--latest-limit LATEST_LIMIT: 显示给定名称和架构的N个最新的软件包。
--disable-modular-filtering: 也列出非活动模块流中的软件包。
-i, --info: 显示关于软件包的详细信息。
-l, --list: 显示软件包中的文件列表。
-s, --source: 显示软件包的源RPM名称。
--changelogs: 显示软件包的更改日志。
--qf QUERYFORMAT, --queryformat QUERYFORMAT: 列出软件包的显示格式。
--querytags: 显示可以与 --queryformat 一起使用的标签。
--nevra: 使用默认的名称-版本号格式显示找到的软件包。
--nvr: 使用名称-版本号-发布格式显示找到的软件包。
--envra: 使用版本号:名称-版本号-发布格式显示找到的软件包。
--groupmember: 显示所选软件包在哪些组中呈现。
--duplicates: 仅查询已安装的重复软件包。
--installonly: 仅查询已安装的installonly软件包。
--unsatisfied: 仅查询有未满足依赖性的已安装软件包。
--location: 显示可以下载软件包的位置。
--conflicts: 显示软件包与之冲突的功能。
--depends: 显示软件包可以依赖、增强、推荐、建议和补充的功能。
--enhances: 显示软件包可以增强的功能。
--provides: 显示软件包提供的功能。
--recommends: 显示软件包推荐的功能。
--requires: 显示软件包依赖的功能。
--requires-pre: 显示软件包在运行%pre和%post脚本时所需的功能。
--suggests: 显示软件包建议的功能。
--supplements: 显示软件包可以补充的功能。
--installed: 仅显示已安装的软件包。
--extras: 显示仅在系统上可用但不在任何可用仓库中的软件包,这些通常是过时的或手动安装的软件包。
--upgrades: 仅显示提供某个已安装软件包的升级的软件包。
--unneeded: 显示可以通过 "yum autoremove" 命令删除的软件包。
--userinstalled: 显示由用户手动安装的软件包。
--recent: 显示最近编辑或安装的软件包。
KEY: 用于查询的关键字或条件。

yum repository-packages

yum repository-packages 命令是用于查询、安装、更新、删除来自特定仓库的软件包的。这是一个非常有用的工具,尤其是当你想要从某个特定的仓库执行操作时。

info: 显示来自指定仓库的软件包的详细信息。
用法:yum repository-packages [repository] info [package-name]
install: 安装来自指定仓库的软件包。
用法:yum repository-packages [repository] install [package-name]
list: 列出指定仓库中的所有软件包。
用法:yum repository-packages [repository] list
remove: 删除来自指定仓库的软件包。
用法:yum repository-packages [repository] remove [package-name]
search: 在指定仓库中搜索软件包。
用法:yum repository-packages [repository] search [search-term]
update: 更新来自指定仓库的软件包。
用法:yum repository-packages [repository] update [package-name]
upgrade: 升级来自指定仓库的软件包(通常与update相同,但语义上可能有些差异)。
用法:yum repository-packages [repository] upgrade [package-name]

#例如,如果你只想要从 epel 仓库更新 nginx,你可以使用如下命令:
yum repository-packages epel update nginx

yum search

yum search 命令是一个非常有用的工具,它允许用户在所有可用的软件包中搜索具有特定关键字的软件包。当你不确定一个软件包的确切名称或你想找到与某个主题相关的所有软件包时,这是一个很好的命令。

yum search [keywords]

# 基本搜索:
yum search nginx

# 描述中的搜索:
YUM 默认在软件包名称和描述中搜索关键字。因此,搜索结果可能包括名称中没有关键字但描述中有关键字的软件包。

# 搜索结果:
yum search命令的输出通常是两列,左列是软件包的名称,右列是软件包的简短描述。这可以帮助你快速了解每个软件包的作用。

# 区分大小写:
该命令不区分大小写,所以yum search Nginx和yum search nginx会返回相同的结果。

# 使用通配符:
yum search支持使用通配符,如*,来增强搜索功能。例如,yum search php-*可以帮助找到以php-开头的所有软件包。

# 匹配多个关键字:
你可以同时搜索多个关键字,只需在关键字之间添加空格。例如:yum search web server会搜索包含“web”和“server”的软件包。

#使用场景
查找特定软件的版本:
如果你想找出与某个软件相关的所有软件包,以及其可能的版本或子包,你可以使用yum search。例如,查找Python相关的所有软件包:yum search python.

探索新软件:
如果你听说了一个新的工具或库,但不确定其在 YUM 仓库中的确切名称,可以使用此命令进行搜索。

找到相关的工具或库:
如果你正在进行某种开发或配置,并想知道是否有与你的工作相关的工具或库,可以使用yum search加上相关的关键字进行搜索。

yum shell

yum shell 是一个不太常用但非常有用的 yum 功能。它允许用户在一个交互式会话中执行多个 yum 命令。这对于执行要求多个步骤的复杂任务特别有用,因为它允许你在单个事务中执行所有步骤,确保操作的一致性和完整性。

yum shell
这将打开一个新的交互式会话,你可以在其中输入并执行多个 yum 命令。

#事务命令:
你可以在 yum shell 中执行任何标准的 yum 命令,如 install, remove, update 等。
eg:
> install nginx
> update httpd

#执行事务:
输入命令后,使用 run 命令执行所有列出的事务
> run

# 撤销或重置:
如果你决定不执行某些命令,可以使用 reset 命令清除当前的命令列表:
> reset

#退出:
完成后,使用 exit 或 quit 退出 yum shell。

# 使用场景
1.复杂的软件包管理任务:
如果你需要在单个事务中执行多个操作(例如,安装一些软件包,删除其他软件包,然后更新其他软件包),yum shell 是一个很好的选择。
2.脚本和自动化:
你可以使用 echo 或输入重定向将多个 yum 命令传递给 yum shell,以便在脚本或自动化任务中使用。

例如:
echo -e "install nginx\nrun" | yum shell
3.减少重复的依赖解析:
在 yum shell 中,当你输入多个命令并执行它们时,yum 只需解析依赖关系一次,而不是每次命令都解析。这可以提高效率,特别是当涉及到大量软件包或复杂的依赖关系时。

yum swap

yum swap 命令是用来交换(即,替换)一个已安装的包到另一个包的。这在某些情况下很有用,特别是当你想要替换一个软件包而不打断其依赖关系的时候。此命令将尝试卸载指定的软件包并安装另一个软件包,同时确保所有的依赖关系都得到满足。

yum swap <要移除的包> <要安装的包>

# 假设你安装了一个包 packageA,现在你想替换它为 packageB,但你不想破坏任何依赖于 packageA 的其他软件包。这时你可以使用 yum swap:
yum swap packageA packageB

yum updateinfo

yum updateinfo 是用于查看与已安装的软件包或可用更新相关的信息和通知的命令。它可以帮助用户理解为什么某个更新是必要的,比如是否解决了一个安全问题或修复了一个错误。

# list:列出所有与更新相关的信息。
yum updateinfo list

# info:为所有更新提供详细的描述。
yum updateinfo info

# summary:提供关于更新信息的总结,例如有多少安全更新、多少错误修复等
yum updateinfo summary

# bugfix:显示与错误修复相关的更新。
yum updateinfo list bugfix

# enhancement:显示增强功能的更新。
yum updateinfo list enhancement

# security:显示与安全相关的更新。
yum updateinfo list security

#cve:显示与特定CVE编号相关的安全更新。CVE编号是公开的安全漏洞和曝露的标识符。
yum updateinfo list cve CVE-2021-XXXX

# sec-severity:按安全严重性筛选更新。例如,要查看所有“重要”安全更新:
yum updateinfo list sec-severity:Important

yum upgrade

yum upgrade 是一个用于更新已安装的软件包及其依赖关系的命令。它不仅会更新软件包,还会删除那些在仓库中已经被标记为过时的软件包。

yum upgrade
这个命令将尝试更新系统上的所有软件包及其依赖关系。

#upgrade 与 update 的区别
yum 提供了两个用于更新软件包的命令:update 和 upgrade。它们在功能上非常相似,但有一个关键的区别:
yum update 会更新所有已安装的软件包到最新版本,但它不会删除已被标记为过时的软件包。
yum upgrade 除了执行所有 yum update 所做的事情之外,还会删除那些在仓库中已经被标记为过时的软件包。
因此,yum upgrade 在大多数情况下是一个更彻底的更新选项。

# 选项
#--security:仅升级与安全相关的软件包。
yum upgrade --security

# --exclude=package_name:更新时排除特定的软件包。例如,如果你不想更新 httpd 软件包,你可以使用:
yum upgrade --exclude=httpd

#package_name:只升级指定的软件包及其依赖关系。例如,要仅更新 httpd 软件包,你可以使用:
yum upgrade httpd

# 	--obsoletes:此选项在 yum upgrade 中默认启用,允许 yum 处理过时的软件包。如果使用 yum update,此选项也可以用来处理过时的软件包。

# --downloadonly:仅下载软件包,但不安装。这对于在有限的带宽环境中非常有用,可以在流量低峰时下载,然后在稍后进行安装。

yum upgrade-minimal

yum upgrade-minimal 是一个命令,用于尽可能少地升级软件包以满足安全、关键和当前的安装的软件包需求。

yum upgrade-minimal
行此命令将会检查并升级那些对系统有重要影响或与安全相关的更新。与 yum upgrade 不同,它不会尝试更新所有可用的软件包。

# --security:仅升级与安全相关的软件包。
yum upgrade-minimal --security

# --bugfix:仅升级包含错误修复的软件包。
yum upgrade-minimal --bugfix

# --obsoletes:此选项在 yum upgrade 和 yum upgrade-minimal 中默认启用,允许 yum 处理过时的软件包。

# package_name:仅尝试对指定的软件包执行最小更新。
yum upgrade-minimal package_name

#优点和应用场景
yum upgrade-minimal 的主要目的是在需要最小更改的环境中应用更新。例如,在生产环境中,你可能不希望立即应用所有更新,但仍希望确保所有安全补丁都被应用。在这种情况下,使用 upgrade-minimal 可以帮助你实现这一目标,同时降低因大量更新而可能导致的潜在风险。

zip

zip 是一个常用的 Linux 命令,用于将文件和目录打包成 ZIP 压缩文件格式。以下是 zip 命令的详细讲解:

zip 命令的基本格式如下:

zip [options] zipfile files

其中,options 为可选参数,zipfile 为要创建的 ZIP 文件名,files 为要压缩的文件或目录列表。

zip 命令的常用选项:

  • -r: 递归地将目录下的所有子目录和文件都压缩到 ZIP 文件中。
  • -q: 静默模式,不显示压缩进度和警告信息。
  • -j: 压缩时不保留文件或目录的路径信息,只将文件本身压缩到 ZIP 文件中。
  • -m: 压缩后删除原文件。
  • -u: 只压缩更新或新增的文件。
  1. 将文件夹 example 打包成 example.zip
zip -r example.zip example/
  1. 将文件夹 example 打包成 example.zip,并使用静默模式:
zip -rq example.zip example/
  1. 将文件夹 example 打包成 example.zip,并去掉路径信息:
zip -j example.zip example/*
  1. 将文件夹 example 打包成 example.zip,压缩后删除原文件:
zip -rm example.zip example/
  1. 将文件夹 example 打包成 example.zip,仅压缩新增或更新的文件:
zip -ru example.zip example/
  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux命令PDF是一种包含Linux操作系统中常用命令和其使用方法的电子书格式文件。通过下载和阅读Linux命令PDF,用户可以方便地学习、查找和使用Linux系统中的各种命令Linux命令PDF中通常会包含诸如文件操作、目录管理、进程管理、网络配置、软件安装等方面的命令。通过学习这些命令,用户可以更好地理解和掌握Linux系统的使用。不论是Linux初学者还是有经验的用户,都可以利用Linux命令PDF来提高自己的技能和效率。 Linux命令PDF的优势包括: 1. 全面性:Linux命令PDF中包含了Linux系统中几乎所有的常用命令,用户可根据需要选择学习和掌握特定的命令。 2. 方便性:PDF文件格式易于阅读和搜索,用户可以方便地在文档中查找和定位具体的命令和使用方法。 3. 离线使用:用户可以将Linux命令PDF下载到本地,便于随时查阅,无需依赖网络连接。 4. 可打印性:用户可以将Linux命令PDF打印成纸质文档,以备在没有电脑或电子设备的情况下使用。 5. 更新性:由于Linux系统的不断更新和发展,命令也在不断增加和演变。因此,一些Linux命令PDF会提供定期的更新版本,使用户能够获取到最新的命令和使用方法。 总之,Linux命令PDF是一种有助于用户学习和使用Linux系统的工具。通过下载和了解Linux命令PDF,用户可以很快地了解和掌握Linux系统中的常用命令,从而提高自己的工作效率和技能水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XingYuyu_Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值