🌌提供:
- 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 # 停止系统(可能不断电)
⚠️ 注意 :现在poweroff和halt通常都指向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"❌ 会报错 - 引号使用:值含空格必须用引号括起
- 命名规则:只能字母、数字、下划线,不能以数字开头
- 大小写敏感 :
Var和var是不同的变量 - 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同步 :生产环境应使用
ntpd或chronyd自动同步,不要手动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优势 :取代date和hwclock,统一管理时间和时区
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 删除到行尾
🎓 总结:基础命令的"黄金法则"
- 确认再执行 :特别是
rm -rf,先用ls确认 - 备份是王道 :重要文件先
cp file file.bak - 使用绝对路径:避免相对路径的歧义
- 善用别名 :
alias rm='rm -i'保命 - 变量加引号 :
"$VAR"而非$VAR - 记录操作 :重要操作
script session.log记录会话
记住:基础不牢,地动山摇。这些命令看似简单,但熟练组合使用能解决90%的日常问题!
📖原文: 在时间的长河中,或许我们会忘记一些人和事,但那些曾经触动我们心灵的瞬间,却永远铭刻在记忆深处,成为我们生命中不可磨灭的印记。 -- 《狐妖小狐娘》
⌛怡然 : ...
🪁 LuminKu looks forward to seeing you again 🌌