【Linux日新月异(九)】CentOS 7其他常用命令大全:系统操作与管理必备技巧

🌌提供:

  1. Kimi K2 Thinking(网站: 大语言模型(Large Language Model, LLM),是当前人工智能领域的重要技术分支,专注于自然语言处理和生成任务。)【开源】「AL」〖✿✿✿✿✿〗
    🔔说明: 本文内容由Kimi K2生成。AI创作虽经校对,仍难免疏漏或偏颇之处。若您发现错漏、或有任何建议,恳请不吝赐教。您的每一次指正,都是我改进与成长的重要指引。
    📓摘要:
    ...(有好建议的可以留言哦~~~(●'◡'●))


🔧 CentOS 7其他常用命令大全:系统操作与管理必备

除了前面讲解的专业领域命令,CentOS 7还提供了大量日常管理必备的基础命令。这些命令是运维工作的"瑞士军刀",掌握它们能大幅提升效率!


一、⚡ 关机与重启命令

1. shutdown- 安全关机(推荐)⭐

语法:

bash 复制代码
shutdown [选项] 时间 [警告信息]

核心选项:

  • -h:halt,关机
  • -r:reboot,重启
  • -c:取消正在进行的关机
  • -k:只发送警告,不真正关机

案例1:立即关机(⚠️危险,需确认)

bash 复制代码
shutdown -h now
# now表示立即执行

# 或指定时间0
shutdown -h 0

案例2:定时关机

bash 复制代码
# 10分钟后关机,并发送警告给所有登录用户
shutdown -h +10 "系统将在10分钟后关机,请保存工作!"

# 也可指定具体时间
shutdown -h 22:30 "今晚22:30进行系统维护"

案例3:重启系统

bash 复制代码
# 立即重启
shutdown -r now

# 5分钟后重启
shutdown -r +5 "系统将在5分钟后重启"

案例4:取消关机/重启

bash 复制代码
# 如果误操作,立即取消
shutdown -c

# 输出:
# The system shutdown has been cancelled at Fri 2024-11-15 16:45:00 CST!

⚠️ 关机注意事项:

  • 🔥必须root权限:普通用户无法执行shutdown
  • 用户通知shutdown会发送警告给所有终端(wall命令)
  • 进程处理:默认给进程发送SIGTERM信号,等待1分钟后强制SIGKILL
  • 生产环境:务必提前通知,避免业务中断
  • 最佳实践shutdown -r +5给运维窗口留出缓冲时间

2. reboot- 直接重启

语法:

bash 复制代码
reboot [选项]

案例:

bash 复制代码
# 直接重启
reboot

# 强制重启(不sync,⚠️危险)
reboot -f

⚠️ 与shutdown的区别: reboot立即重启,不发送警告,适合自动化脚本


3. poweroff / halt - 直接关机

语法:

bash 复制代码
poweroff      # 切断电源
halt          # 停止系统(可能不断电)

⚠️ 注意 :现在poweroffhalt通常都指向shutdown -h的link


4. init - 切换运行级别(兼容旧系统)

语法:

bash 复制代码
init 0    # 关机
init 6    # 重启

二、💻 系统信息查看命令

1. uname - 内核与系统信息 ⭐

语法:

bash 复制代码
uname [选项]

核心选项:

  • -a:所有信息(最常用)
  • -r:内核版本
  • -m:硬件架构
  • -n:主机名

案例:

bash 复制代码
uname -a
# 输出:Linux centos7 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

# 仅内核版本
uname -r
# 3.10.0-1160.el7.x86_64

# 主机名
uname -n
# centos7

2. hostnamectl - 主机名管理(systemd)⭐

语法:

bash 复制代码
hostnamectl [选项] [命令]

案例1:查看主机信息

bash 复制代码
hostnamectl
# 输出:
#    Static hostname: centos7
#          Icon name: computer-vm
#            Chassis: vm
#         Machine ID: 8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8
#            Boot ID: 9g9g9g9g9g9g9g9g9g9g9g9g9g9g9g
#     Virtualization: vmware
#   Operating System: CentOS Linux 7 (Core)
#        CPE OS Name: cpe:/o:centos:centos:7
#             Kernel: Linux 3.10.0-1160.el7.x86_64
#       Architecture: x86-64

案例2:临时修改主机名

bash 复制代码
# 立即生效(不重启)
hostnamectl set-hostname webserver01

# 验证
hostname
# webserver01

案例3:永久修改主机名(写入/etc/hostname)

bash 复制代码
# set-hostname本身就是永久的
hostnamectl set-hostname db-server

# 同时修改/etc/hosts
nano /etc/hosts
# 127.0.0.1   db-server localhost

⚠️ 主机名注意事项:

  • 🔥需root权限:普通用户无法修改
  • 特殊字符:主机名只允许字母、数字、连字符(-)
  • 长度限制:不超过64字符
  • 网络影响:主机名会出现在日志、邮件、网络协议中

3. lscpu - CPU架构信息 ⭐

案例:

bash 复制代码
lscpu
# 输出:
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4          # 逻辑CPU数
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
CPU MHz:               2199.998
L1d cache:             32K
L1i cache:             32K
L2 cache:              1024K
L3 cache:              28160K

快速查看核心数:

bash 复制代码
nproc
# 4

# 或
grep -c ^processor /proc/cpuinfo
# 4

4. lsmem - 内存物理布局

案例:

bash 复制代码
lsmem
# 输出:
RANGE                                  SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x00000000bfffffff  3G    online       yes   0-23
0x0000000100000000-0x000000013fffffff  1G    online       yes   32-39
Memory block size:       128M
Total online memory:       4G
Total offline memory:      0B

5. lsusb / lspci - USB/PCI设备

案例:

bash 复制代码
# 查看USB设备
lsusb
# Bus 001 Device 002: ID 8087:8000 Intel Corp. 
# Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub

# 查看PCI设备(网卡、显卡等)
lspci | grep -i eth
# 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller

6. dmidecode- 硬件详细信息(需root)

案例:

bash 复制代码
# 查看内存条信息
dmidecode -t memory | grep -E "Size:|Locator:|Type:"
# Size: 8192 MB
# Locator: DIMM_A1
# Type: DDR4

# 查看服务器序列号
dmidecode -t system | grep "Serial Number"
# Serial Number: VMWare-42 12 34 56 78 90 ab cd-ef gh

三、🌐 网络配置命令

1. ifconfig - 传统网络配置(已废弃但常用)

语法:

bash 复制代码
ifconfig [接口] [选项]

案例1:查看网络接口

bash 复制代码
ifconfig
# 输出:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe8e:8e8e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:8e:8e:8e  txqueuelen 1000  (Ethernet)
        RX packets 123456  bytes 123456789 (117.7 MiB)
        TX packets 654321  bytes 654321987 (624.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

案例2:临时配置IP(重启失效)

bash 复制代码
# 配置IP
ifconfig eth0 192.168.1.200 netmask 255.255.255.0

# 启用/禁用接口
ifconfig eth0 up
ifconfig eth0 down

⚠️ 注意事项:

  • 🔥已废弃 :CentOS 7最小化安装无ifconfig,需安装net-tools
  • 临时性 :所有配置重启后丢失,永久配置用nmcli或修改配置文件
  • 安装net-tools: yum install net-tools

2. ip- 现代网络配置(强烈推荐)⭐

语法:

bash 复制代码
ip [选项] OBJECT { COMMAND }
# OBJECT: link, addr, route, neigh, tunnel

案例1:查看接口

bash 复制代码
ip addr show
# 或简写
ip a

# 查看特定接口
ip a show eth0

案例2:配置IP(临时)

bash 复制代码
# 添加IP
ip addr add 192.168.1.200/24 dev eth0

# 删除IP
ip addr del 192.168.1.200/24 dev eth0

# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down

案例3:查看路由

bash 复制代码
ip route
# 或
ip r

# 输出:
default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100

案例4:添加/删除路由

bash 复制代码
# 添加默认网关
ip route add default via 192.168.1.1 dev eth0

# 添加静态路由
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0

# 删除路由
ip route del 10.0.0.0/8

3. nmcli- NetworkManager命令行(CentOS 7推荐)⭐⭐

语法:

bash 复制代码
nmcli [选项] OBJECT { COMMAND }
# OBJECT: device, connection, general, networking

案例1:查看网络状态

bash 复制代码
nmcli general status
# STATE      CONNECTIVITY  WIFI-HW  WIFI   WWAN-HW  WWAN
# connected  full          enabled  enabled  enabled  enabled

# 查看设备
nmcli device status
# DEVICE  TYPE      STATE      CONNECTION
# eth0    ethernet  connected  eth0
# lo      loopback  unmanaged  --

案例2:查看连接信息

bash 复制代码
nmcli connection show
# NAME   UUID                                  TYPE      DEVICE
# eth0   5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0

# 查看详细
nmcli connection show eth0

案例3:配置静态IP(永久生效)

bash 复制代码
# 修改连接配置
nmcli connection modify eth0 \
  ipv4.addresses 192.168.1.200/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns "8.8.8.8,114.114.114.114" \
  ipv4.method manual

# 重启连接生效
nmcli connection down eth0
nmcli connection up eth0

# 验证
ip a show eth0

案例4:启用/禁用网络

bash 复制代码
# 禁用所有网络
nmcli networking off

# 启用
nmcli networking on

# 禁用特定接口
nmcli device disconnect eth0

# 启用
nmcli device connect eth0

4. ethtool- 网卡配置

语法:

bash 复制代码
ethtool [选项] 接口

案例1:查看网卡状态

bash 复制代码
ethtool eth0
# 输出:
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Speed: 1000Mb/s         # 当前速度
        Duplex: Full            # 全双工
        Link detected: yes      # 链路正常

案例2:修改网卡参数

bash 复制代码
# 临时关闭网卡自动协商(需root)
ethtool -s eth0 autoneg off speed 100 duplex full

# 查看驱动信息
ethtool -i eth0
# driver: e1000
# version: 7.3.21-k8-NAPI

四、📂 文件/目录基础操作

1. mkdir- 创建目录

语法:

bash 复制代码
mkdir [选项] 目录...

核心选项:

  • -p自动创建父目录(最常用!)
  • -m:指定权限模式

案例:

bash 复制代码
# 创建单级目录
mkdir /data

# 创建多级目录(父目录不存在也成功)
mkdir -p /data/app/logs/archive

# 创建并指定权限
mkdir -m 755 /data/shared
mkdir -p -m 700 /secure/data/private

⚠️ 注意事项:

  • -p是安全网 :推荐总是使用mkdir -p,避免"parent directory not exist"错误
  • 权限继承 :未指定-m时,继承当前umask

2. touch- 创建空文件 / 更新时间戳

语法:

bash 复制代码
touch [选项] 文件...

核心选项:

  • -a:只更新访问时间
  • -m:只更新修改时间
  • -t [[CC]YY]MMDDhhmm[.ss]:指定时间
  • -c:文件不存在时不创建

案例:

bash 复制代码
# 创建空文件
touch /tmp/test.txt

# 批量创建
touch file1.txt file2.txt file3.log

# 更新文件时间(文件已存在)
touch existing.txt

# 指定时间戳(归档文件常用)
touch -t 202312311800.30 report.pdf
# 2023年12月31日18:00:30

# 不创建新文件(仅更新已存在的)
touch -c may_not_exist.txt

3. mv- 移动/重命名文件或目录

语法:

bash 复制代码
mv [选项] 源文件... 目标

核心选项:

  • -f:强制覆盖,不提示
  • -i:覆盖前提示(默认别名)
  • -b:覆盖前备份

案例1:重命名文件

bash 复制代码
# 将old.txt重命名为new.txt
mv old.txt new.txt

# 重命名目录
mv /data/oldapp /data/newapp

案例2:移动文件到目录

bash 复制代码
# 移动文件
mv report.pdf /data/archive/

# 移动多个文件
mv *.log /var/log/app/

# 移动目录
mv /home/user/tempdir /backup/

案例3:覆盖前备份

bash 复制代码
# 如果目标存在,备份为file.txt~
mv -b file.txt /data/

# 指定备份后缀
mv -b --suffix=.bak file.txt /data/

⚠️ mv注意事项:

  • 🔥跨文件系统移动 :若源和目标在不同分区,mv实际上是复制+删除,会消耗I/O
  • 覆盖无提示 :默认系统别名alias mv='mv -i',覆盖会提示确认。脚本中建议用/bin/mv绕过别名
  • 修复技巧 :误操作mv可用Ctrl+Z撤销(如果还在shell会话中)

4. cp- 复制文件或目录

语法:

bash 复制代码
cp [选项] 源文件... 目标

核心选项:

  • -r / -R:递归复制目录
  • -f:强制覆盖
  • -i:覆盖前提示
  • -p:保留文件属性(权限、时间戳)
  • -a:归档模式(保留所有属性,同-dR --preserve=all
  • -v:显示详细过程

案例1:复制文件

bash 复制代码
# 复制文件
cp config.ini config.ini.bak

# 复制到目录
cp app.jar /opt/app/

案例2:复制目录

bash 复制代码
# 必须加-r
cp -r /data/app01 /backup/app01

# 保留所有属性
cp -a /data/app01 /backup/app01

# 显示进度
cp -rv /data/* /backup/

案例3:批量复制并备份已存在的文件

bash 复制代码
# 复制前备份目标文件
cp --backup=numbered file.txt /data/

# 结果:/data/file.txt, /data/file.txt.~1~, /data/file.txt.~2~

⚠️ cp注意事项:

  • 🔥复制目录必须-r:否则报错"omitting directory"
  • 绝对路径陷阱cp /root/* /tmp/cp /root /tmp 完全不同
  • 权限问题:复制到他人目录需有写权限,保留属性需root
  • 硬链接cp -a保留硬链接,cp -r会将硬链接复制为独立文件

5. rm- 删除文件或目录(⚠️高危)

语法:

bash 复制代码
rm [选项] 文件...

核心选项:

  • -r / -R:递归删除目录
  • -f:强制删除,不提示
  • -i:删除前提示(默认别名)

案例1:删除文件

bash 复制代码
rm test.txt

# 强制删除(无提示)
rm -f test.txt

案例2:删除目录

bash 复制代码
# 删除空目录
rmdir emptydir

# 删除非空目录(必须-r)
rm -r /data/temp/

# 强制删除目录(⚠️极度危险)
rm -rf /data/temp/

案例3:安全删除(交互式)

bash 复制代码
# 系统默认别名 alias rm='rm -i'
rm important.txt
# rm: remove regular file 'important.txt'? y

# 删除3个文件都提示
rm file1.txt file2.txt file3.txt

⚠️ rm安全铁律

  • 🔥保命别名 :在~/.bashrc中设置alias rm='rm -i'
bash 复制代码
echo "alias rm='rm -i'" >> ~/.bashrc
source ~/.bashrc
  • 禁忌操作 :以下命令会导致灾难
bash 复制代码
rm -rf /                    # 删除根目录!系统毁灭
rm -rf /*                   # 同样效果
rm -rf /data/ *             # /data和/之间空格,误删根!
rm -rf $VAR/*               # VAR未定义,变成rm -rf /*
  • 最佳实践 :删除前先用ls确认路径!
bash 复制代码
# 先确认
ls -la /data/temp/*

# 再删除
rm -r /data/temp/*

# 或使用trash-cli(回收站)
yum install trash-cli
trash-put file.txt  # 移动到回收站,可恢复

6. ln - 创建链接

语法:

bash 复制代码
ln [选项] 源文件 链接文件

核心选项:

  • 无选项:创建硬链接
  • -s:创建软链接(符号链接,推荐)

案例1:创建软链接

bash 复制代码
# 为日志文件创建软链接
ln -s /var/log/nginx/access.log /home/user/nginx.log

# 查看
ls -l /home/user/nginx.log
# lrwxrwxrwx 1 root root 31 Nov 15 17:00 /home/user/nginx.log -> /var/log/nginx/access.log

案例2:创建硬链接

bash 复制代码
# 硬链接(同一inode)
ln /data/file.txt /backup/file_link.txt

# 硬链接限制:不能跨分区,不能链接目录

案例3:软链接目录

bash 复制代码
# 常用来管理多版本
ln -s /opt/nginx-1.24.0 /opt/nginx

# 切换版本只需重新链接
rm /opt/nginx
ln -s /opt/nginx-1.25.0 /opt/nginx

⚠️ 链接注意事项:

  • 🔥软链接路径:建议使用绝对路径,相对路径易出错
  • rm软链接rm /opt/nginx 删除链接,不是删除目标目录
  • 权限 :软链接权限为lrwxrwxrwx,实际权限看源文件
  • 备份tar备份时加-h才能跟随软链接

五、📊 变量管理

1. 变量定义与使用

语法:

bash 复制代码
变量名=值          # 赋值(等号两侧无空格!)
$变量名           # 引用变量
${变量名}         # 安全引用(推荐)

案例1:基础变量

bash 复制代码
# 定义变量(注意:等号两侧不能有空格)
name="CentOS 7"
version=7.9

# 引用变量
echo $name
# CentOS 7

echo ${version}
# 7.9

# 拼接字符串
echo "${name} - Version ${version}"
# CentOS 7 - Version 7.9

案例2:变量作用域

bash 复制代码
# 定义局部变量
myvar="local"

# 导出为环境变量(子进程可见)
export MYENV="global"

# 查看所有环境变量
env | grep MYENV

# 删除变量
unset myvar

案例3:特殊变量

bash 复制代码
# $0: 脚本名
# $1-$9: 参数
# $#: 参数个数
# $$: 当前PID
# $?: 上一个命令退出码(0=成功)

echo "脚本名: $0"
echo "第一个参数: $1"
echo "参数总数: $#"
echo "当前PID: $$"

# 检查上一条命令是否成功
ls /notexist
if [ $? -ne 0 ]; then
  echo "命令失败"
fi

⚠️ 变量注意事项:

  • 🔥等号无空格name = "value" ❌ 会报错
  • 引号使用:值含空格必须用引号括起
  • 命名规则:只能字母、数字、下划线,不能以数字开头
  • 大小写敏感Varvar是不同的变量
  • Shell会话:变量默认在Shell会话中有效,关闭终端后消失

案例4:变量持久化(写入文件)

bash 复制代码
# 临时变量(当前会话)
export PATH="/opt/app/bin:$PATH"

# 永久变量(用户级)
echo 'export PATH="/opt/app/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# 永久变量(系统级)
echo 'export JAVA_HOME="/usr/lib/jvm/java-1.8.0"' >> /etc/profile
source /etc/profile

六、🎯 别名管理(Alias)

1. alias- 创建命令别名 ⭐

语法:

bash 复制代码
alias 别名='命令'

案例1:常用别名

bash 复制代码
# 查看当前别名
alias

# 创建别名
alias ll='ls -l --color=auto'
alias la='ls -la'
alias grep='grep --color=auto'

# 使用别名
ll /etc/

案例2:安全别名(防止误操作)

bash 复制代码
# 删除前确认
alias rm='rm -i'

# 复制前确认
alias cp='cp -i'

# 移动前确认
alias mv='mv -i'

# 危险操作双确认
alias shutdown='echo "Use shutdown -h now"'

案例3:带参数的复杂别名

bash 复制代码
# 查看端口占用
alias port='ss -tnlp | grep'

# 使用
port 8080

# 查看磁盘占用前10
alias duf='du -h --max-depth=1 | sort -hr | head -10'

案例4:查看和删除别名

bash 复制代码
# 查看特定别名
alias ll

# 删除别名
unalias ll

# 临时禁用别名(使用原始命令)
\rm file.txt      # 使用\绕过别名
/bin/rm file.txt  # 使用完整路径

⚠️ 别名注意事项:

  • 🔥仅在当前会话有效:退出终端后消失
  • 永久别名 :写入~/.bashrc/etc/bashrc
  • 脚本中无效 :Shell脚本默认不继承交互模式的别名,需shopt -s expand_aliases
  • 别名冲突:别名名与系统命令冲突时,别名优先

案例5:永久别名配置

bash 复制代码
# 用户级(仅当前用户)
nano ~/.bashrc
# 添加:
alias ll='ls -l --color=auto'
alias rm='rm -i'

# 生效
source ~/.bashrc

# 系统级(所有用户)
nano /etc/bashrc
# 在末尾添加别名

# 对所有用户生效
source /etc/bashrc

七、📅 日期时间命令

1. date- 显示/设置系统时间 ⭐

语法:

bash 复制代码
date [选项] [+格式]
date [MMDDhhmm[[CC]YY][.ss]]  # 设置时间

案例1:显示日期

bash 复制代码
# 默认格式
date
# Fri Nov 15 17:30:45 CST 2024

# 显示UTC时间
date -u
# Fri Nov 15 09:30:45 UTC 2024

案例2:自定义格式(Shell脚本常用)

bash 复制代码
# 常用格式化
date +"%Y-%m-%d"          # 2024-11-15
date +"%H:%M:%S"          # 17:30:45
date +"%Y%m%d_%H%M%S"     # 20241115_173045(文件名用)

# 完整日期时间
date +"%Y-%m-%d %H:%M:%S"
# 2024-11-15 17:30:45

# 显示星期
date +"%A"                # Friday
date +"%a"                # Fri

案例3:设置系统时间(需root)

bash 复制代码
# 设置时间为2024-12-31 18:00:00
date -s "2024-12-31 18:00:00"

# 仅设置日期
date -s "2024-12-31"

# 仅设置时间
date -s "18:00:00"

案例4:时间戳转换

bash 复制代码
# 显示秒级时间戳(Epoch time)
date +%s
# 1731672645

# 时间戳转日期
date -d @1731672645
# Fri Nov 15 17:30:45 CST 2024

# 指定格式转换
date -d @1731672645 +"%Y-%m-%d %H:%M:%S"

案例5:计算相对时间

bash 复制代码
# 显示昨天
date -d "yesterday"

# 显示明天
date -d "tomorrow"

# 显示7天前
date -d "7 days ago" +"%Y-%m-%d"
# 2024-11-08

# 显示1小时后
date -d "+1 hour"

# 显示下周同星期几
date -d "next Friday"

⚠️ date注意事项:

  • 🔥时区影响date显示本地时区,日志分析时注意统一时区
  • NTP同步 :生产环境应使用ntpdchronyd自动同步,不要手动 date -s
  • 硬件时钟date设置的是系统时间,需hwclock -w同步到硬件时钟

2. timedatectl - systemd时间管理 ⭐

语法:

bash 复制代码
timedatectl [选项] [命令]

案例1:查看时间状态

bash 复制代码
timedatectl
# 输出:
#       Local time: Fri 2024-11-15 17:30:45 CST
#   Universal time: Fri 2024-11-15 09:30:45 UTC
#         RTC time: Fri 2024-11-15 09:30:45
#        Time zone: Asia/Shanghai (CST, +0800)
#      NTP enabled: yes
# NTP synchronized: yes
#  RTC in local TZ: no
#       DST active: n/a

案例2:设置时区

bash 复制代码
# 查看可用时区
timedatectl list-timezones | grep Shanghai

# 设置时区
timedatectl set-timezone Asia/Shanghai

# 设置UTC时区
timedatectl set-timezone UTC

案例3:启用NTP同步

bash 复制代码
# 启用NTP(推荐)
timedatectl set-ntp true

# 禁用NTP
timedatectl set-ntp false

# 查看NTP状态
timedatectl status | grep NTP

⚠️ timedatectl优势 :取代datehwclock,统一管理时间和时区


3. hwclock- 硬件时钟管理

语法:

bash 复制代码
hwclock [选项]

核心选项:

  • -r:显示硬件时钟
  • -w:将系统时间写入硬件
  • -s:将硬件时间写入系统

案例:

bash 复制代码
# 查看硬件时钟
hwclock
# Fri 15 Nov 2024 05:30:45 PM CST  -0.453818 seconds

# 系统时间写入硬件(date修改后必须执行)
hwclock -w

# 硬件时间写入系统(从硬件恢复)
hwclock -s

八、🔍 其他实用命令

1. which /whereis- 查找命令位置

案例:

bash 复制代码
# 查找命令路径(从PATH中)
which python
# /usr/bin/python

# 查找命令及相关文件
whereis python
# python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 ...

# 查找所有匹配
which -a python
# /usr/bin/python
# /usr/local/bin/python  (如果存在)

2. type- 查看命令类型

案例:

bash 复制代码
# 查看ls是别名
type ls
# ls is aliased to `ls --color=auto'

# 查看cd是内置命令
type cd
# cd is a shell builtin

# 查看which是外部命令
type which
# which is /usr/bin/which

3. wc- 统计字数

**案例:`

bash 复制代码
# 统计行数
wc -l /etc/passwd
# 45 /etc/passwd

# 统计单词数
wc -w file.txt

# 统计字节数
wc -c file.txt

# 同时统计
wc file.txt
# 45  120  1800 file.txt  (行 词 字节)

# 管道使用
ps aux | wc -l

4. sort /uniq- 排序去重

案例:

bash 复制代码
# 排序
sort file.txt

# 去重(必须先排序)
sort file.txt | uniq

# 统计重复次数
sort file.txt | uniq -c | sort -nr

# 实战:统计访问IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

5. diff /cmp- 文件比较

案例:

bash 复制代码
# 比较文件差异
diff file1.txt file2.txt

# 并排比较
diff -y file1.txt file2.txt

# 二进制比较
cmp file1.bin file2.bin

6. file- 识别文件类型

案例:

bash 复制代码
file /bin/bash
# /bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked

file /etc/passwd
# /etc/passwd: ASCII text

file script.sh
# script.sh: Bourne-Again shell script, ASCII text executable

7. basename /dirname- 路径处理

案例:

bash 复制代码
# 获取文件名
basename /etc/nginx/nginx.conf
# nginx.conf

# 获取目录名
dirname /etc/nginx/nginx.conf
# /etc/nginx

# 脚本中常用
LOG_FILE="/var/log/app/20241115.log"
DATE=$(basename $LOG_FILE .log)  # 20241115
DIR=$(dirname $LOG_FILE)         # /var/log/app

8. seq- 生成序列

案例:

bash 复制代码
# 生成1-10
seq 10

# 生成5-15
seq 5 15

# 生成10-1倒序
seq 10 -1 1

# 带前导零
seq -f "%03g" 1 5
# 001
# 002
# 003
# 004
# 005

# for循环中
for i in $(seq 1 10); do echo "Number: $i"; done

9. tr- 字符转换

案例:

bash 复制代码
# 小写转大写
echo "hello" | tr a-z A-Z
# HELLO

# 删除字符
echo "hello world" | tr -d ' '
# helloworld

# 替换字符
echo "hello" | tr 'aeiou' '12345'
# h2ll4

10. cut- 字段提取

案例:

bash 复制代码
# 提取第1列(:分隔)
cut -d: -f1 /etc/passwd

# 提取1-3列
cut -d: -f1-3 /etc/passwd

# 按字符位置提取
echo "abcdef" | cut -c1-3
# abc

11. xargs- 参数构建器

案例:

bash 复制代码
# 删除find找到的文件
find /tmp -name "*.tmp" | xargs rm -f

# 并行处理(-P)
find . -type f | xargs -P 4 -I {} gzip {}

# 限制参数数量(-n)
ls | xargs -n 3 echo
# 每行输出3个文件名

12. timeout- 命令超时控制

案例:

bash 复制代码
# 5秒后终止命令
timeout 5 ping www.baidu.com

# 超时返回非0码
timeout 2 sleep 10
# echo $?
# 124(超时退出码)

# 超时后kill(默认TERM,-s指定信号)
timeout -s KILL 10 ./slow_script.sh

九、📋 终极常用命令速查表

功能 命令 示例
关机 shutdown -h shutdown -h +10
重启 shutdown -r shutdown -r now
主机名 hostnamectl hostnamectl set-hostname web01
内核 uname -r uname -a
CPU lscpu `lscpu
内存 free -h free -m
网络 ip addr ip a show eth0
配置IP nmcli nmcli con mod eth0 ipv4.addr...
创建目录 mkdir mkdir -p /a/b/c
创建文件 touch touch file.txt
复制 cp cp -a src/ dst/
移动/重命名 mv mv old.txt new.txt
删除 rm rm -rf /data/* (⚠️)
链接 ln ln -s /opt/app /opt/current
别名 alias alias ll='ls -l'
日期 date date +"%Y%m%d"
变量 VAR=val export PATH="/opt/bin:$PATH"
命令路径 which which python
命令类型 type type ls
统计 wc -l wc -l file.txt
排序 sort sort -nr file.txt
去重 uniq `sort file.txt
转换 tr `echo hello
提取 cut cut -d: -f1 /etc/passwd
超时 timeout timeout 10 cmd

十、🛡️ 安全操作终极检查清单

在执行高危操作前,务必运行以下检查:

bash 复制代码
# 1. 确认当前用户和主机
whoami
hostname

# 2. 确认当前目录
pwd

# 3. 确认命令路径
which rm cp mv

# 4. 确认别名
alias rm cp mv

# 5. 高危操作二次确认函数
confirm() {
  read -p "确定执行: $@ ? [y/N] " -n 1 -r
  echo
  if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo "操作已取消"
    exit 1
  fi
}

# 使用
confirm "rm -rf /data/temp/*"

十一、🎓 命令行效率提升技巧

1. 命令补全(Tab键)

  • 单次Tab:补全命令/文件名
  • 双次Tab:列出所有匹配项

2. 历史命令(history)

bash 复制代码
# 查看历史
history
# !123    执行第123条命令
# !!      执行上一条命令
# !ls     执行最近以ls开头的命令
# Ctrl+R  搜索历史命令

3. 快捷键

bash 复制代码
# Ctrl+A  行首
# Ctrl+E  行尾
# Ctrl+C  中断
# Ctrl+Z  挂起
# Ctrl+L  清屏
# Ctrl+U  删除到行首
# Ctrl+K  删除到行尾

🎓 总结:基础命令的"黄金法则"

  1. 确认再执行 :特别是rm -rf,先用ls确认
  2. 备份是王道 :重要文件先cp file file.bak
  3. 使用绝对路径:避免相对路径的歧义
  4. 善用别名alias rm='rm -i'保命
  5. 变量加引号"$VAR" 而非 $VAR
  6. 记录操作 :重要操作script session.log记录会话

记住:基础不牢,地动山摇。这些命令看似简单,但熟练组合使用能解决90%的日常问题!



📖原文: 在时间的长河中,或许我们会忘记一些人和事,但那些曾经触动我们心灵的瞬间,却永远铭刻在记忆深处,成为我们生命中不可磨灭的印记。 -- 《狐妖小狐娘》

⌛怡然 : ...



🪁 LuminKu looks forward to seeing you again 🌌


相关推荐
-dcr2 小时前
39.华为云运维类服务
运维·服务器·华为云·lts·cts·ces·smn
是Judy咋!2 小时前
RabbitMQ---集群搭建(HAProxy负载均衡高可用)
centos·rabbitmq·负载均衡
偶像你挑的噻3 小时前
3-Linux驱动开发-简单内核模块代码详解
linux·驱动开发·stm32·嵌入式硬件
赖small强3 小时前
【Linux驱动开发】 Linux字符设备开发详细指南
linux·驱动开发·字符设备
p66666666683 小时前
【☀Linux驱动开发笔记☀】linux下led驱动(非设备树)_03
linux·驱动开发·笔记·嵌入式硬件·学习
木易 士心3 小时前
Protocol Buffers (Protobuf) 详解
运维·服务器
百***24133 小时前
Nginx反向代理出现502 Bad Gateway问题的解决方案
运维·nginx·gateway
以琦琦为中心4 小时前
在RK3568开发板嵌入式开发中,配置NFS服务是实现与Ubuntu虚拟机之间文件共享的常用方法
linux·运维·ubuntu·rk3568
Nimsolax4 小时前
Linux网络DNS与ICMP
linux·网络