Shell 是终端程序的统称,是多数 Linux 发行版默认的 Shell 解释器
Bash 四大核心优势:
上下方向键调取历史命令
Tab 键自动补全
强大的批处理脚本
环境变量管理功能

命令名称 [命令参数] [命令对象]
长格式参数:-- 前缀,如 man --help
短格式参数:- 前缀,如 man -h
命令、参数、对象之间用空格分隔,严格区分大小写
man ls # 查看 ls 命令的帮助手册
man man # 查看 man 自身的帮助
| /关键词 | |
| ?关键词 | |

man 手册结构说明:
╭─www21@52Herts ~/tmp
╰─$
| www21 | |
| 52Herts | |
| ~ | |
| $ |

输入命令或路径的前几个字符,按 Tab 键自动补全;按两下 Tab 列出所有候选项。
re<Tab><Tab> # 列出所有 re 开头的命令
reb<Tab> # 自动补全为 reboot

echo LinuxProbe.com # 输出字符串
echo $SHELL # 输出变量值
echo $HOME # 输出当前用户家目录

输出解释:echo $SHELL 打印出当前使用的 Shell 路径,通常为 /bin/bash
date # 默认格式查看当前时间
date "+%Y-%m-%d %H:%M:%S" # 自定义格式
date "+%j" # 查看今天是今年第几天
date -s "20250518 8:30:00" # 设置系统时间
| %Y | %m | ||
| %d | %H | ||
| %M | %S | ||
| %j | %A |

timedatectl status # 查看时间与时区状态
timedatectl list-timezones # 列出所有可用时区
timedatectl set-timezone Asia/Shanghai # 设置时区
timedatectl set-ntp false # 关闭 NTP 自动同步
timedatectl set-time 2025-05-18 # 手动设置日期
timedatectl set-time 9:30 # 手动设置时间

输出解释: 设置时间前需要先关闭 NTP 同步(set-ntp false)
reboot # 重启系统(需 root 权限)
poweroff # 关闭系统(需 root 权限)
wget https://www.linuxprobe.com/docs/LinuxProbe.pdf # 下载文件
wget -b https://www.linuxprobe.com/docs/LinuxProbe.pdf # 后台下载
wget -c https://www.linuxprobe.com/docs/LinuxProbe.pdf # 断点续传
wget -r -p https://www.linuxprobe.com # 递归下载整站
| -b | |
| -P | |
| -c | |
| -t | |
| -r | |
| -p |

ps aux # 查看所有进程的详细信息(最常用)
ps -ef # 另一种全格式显示
ps -u root # 查看 root 用户的进程
| -a | |
| -u | |
| -x |
5 种进程状态:

pstree # 显示所有进程树
pstree -p # 同时显示 PID

输出解释: 以树状结构展示进程父子关系,根进程是 systemd,往下逐级展开
top # 进入动态监控界面(按 q 退出)
前5行统计信息:

nice -n -20 bash # 以最高优先级启动 bash
nice -n 10 command # 以较低优先级运行
优先级范围:-20(最高)\~ 19(最低),数字越低优先级越高

pidof ssh # 查看 ssh 服务的 PID
pidof httpd # 查看 httpd(Apache)的 PID

kill 1777 # 正常终止 PID=1340 的进程
kill -9 1340 # 强制终止(最高级别信号)
killall httpd # 终止所有 httpd 进程

ifconfig # 查看所有活跃网卡
ifconfig ens160 # 查看指定网卡
重点关注:
网卡名称:RHEL 5/6时代是 eth0,RHEL 8/9/10 通常是 ens160
IP 地址:inet 字段
MAC 地址:ether 字段
收发流量:RX packets/bytes 和 TX packets/bytes

uname -a # 完整系统信息
uname -r # 仅内核版本
cat /etc/redhat-release # 查看系统发行版本

uptime # 查看运行时间与负载

输出解释: 三个负载值分别对应 1分钟、5分钟、15分钟的平均负载
经验值: 单核心不超过 1,生产环境不超过 5;多核心不超过核心数的两倍。
free -h # 人性化显示

who # 查看所有登录用户及终端

输出解释: 列出登录用户名、终端设备(如 www21、pts/1)、登录时间
last # 查看所有历史登录记录
last -n 10 # 只看最近10条

ping -c 4 127.0.0.1 # 发送4个数据包后停止
ping -c 4 -i 0.5 127.0.0.1 # 每0.5秒发一次
ping -c 4 -W 2 127.0.0.1 # 超时时间2秒
| -c | |
| -i | |
| -W |

netstat -a # 显示所有连接
netstat -tuln # 查看所有监听的 TCP/UDP 端口
netstat -i # 显示网卡列表信息
netstat -r # 显示路由表
| -a | |
| -t | |
| -u | |
| -l | |
| -n | |
| -p | |
| -i | |
| -r |

history # 查看历史命令列表
!3 # 重复执行编号为3的命令
cat ~/.bash_history # 查看持久化的历史命令文件
history -c # 清空当前会话的命令历史

输出解释: 默认保存最近 1000 条命令记录,存储在 ~/.bash_history 文件中
pwd # 打印当前目录路径

cd /etc # 切换到 /etc 目录
cd /bin # 切换到 /bin 目录
cd - # 返回上一次所在的目录
cd ~ # 切换到家目录
cd .. # 返回上一级目录

输出解释:cd - 在 /etc 和 /bin 之间来回切换,非常实用
ls # 列出当前目录内容
ls -l # 长格式(详细信息)
ls -a # 显示隐藏文件(含 . 开头文件)
ls -al # 长格式 + 隐藏文件(最常用)
ls -ld /etc # 查看目录本身的属性
ls -lh # 人性化显示文件大小

输出解释: 每行格式 -rw-r--r-- 1 www21 www21 0 Jul 3 16:51 test.sh:第1个字符是文件类型(-普通文件、d目录、l链接),之后9个字符是三组 rwx 权限,接着是硬链接数、所有者、所属组、大小、时间、文件名。
tree # 显示当前目录树
tree /etc/ssh # 显示指定目录树
tree -L 2 # 只显示两层深度

# 按名称查找
find /etc -name "host*" # /etc下所有host开头的文件
# 按权限查找
find / -perm -4000 # 查找所有含SUID权限的文件
# 按用户查找
find / -user linuxprobe # 查找属主为linuxprobe的文件
# 按时间查找
find / -mtime -7 # 7天内修改过的文件
# 按类型查找
find / -type f -name "*.conf" # 查找所有.conf普通文件
# 按大小查找
find / -size +50M # 查找大于50MB的文件
# 组合查找并执行操作
find / -user linuxprobe -exec cp -a {} /root/findresults \;
| -name | |
| -perm | |
| -user | |
| -group | |
| -mtime -n/+n | |
| -atime -n/+n | |
| -type | |
| -size | |
| -exec ... \; |

输出解释:-exec ... {} \; 是 find 最强大的功能,{} 代表查找到的每个文件,\; 是命令结束标记
whereis ls # 查找 ls 的二进制和帮助文件
whereis pwd # 查找 pwd

输出解释: 返回命令二进制路径 + 手册路径,如 ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
which ls # ls 命令在哪个路径
which locate # locate 命令位置
which python3 # 查看 Python 路径

输出解释: which 在 $PATH 环境变量中搜索,只返回二进制文件路径
管道符 | 将前一个命令的标准输出作为后一个命令的标准输入。
# 基础语法
命令A | 命令B | 命令C

输出解释:ls -l /etc 的输出通过管道传给 head -n 5,只显示前5行
cat /etc/passwd # 查看文件内容
cat -n /etc/passwd # 带行号查看
cat file1 file2 > merged # 合并多个文件

more /etc/passwd # 分页查看(空格翻页,q退出)

head -n 10 test.sh # 查看前10行
head -n 20 /etc/passwd # 查看前20行

tail -n 10 /etc/passwd # 查看最后10行

输出解释:tail -f 是运维最常用命令之一,持续监控日志新增内容,排查故障必备
cat anaconda-ks.cfg | tr 'a-z' 'A-Z' # 全部转为大写
echo "hello world" | tr 'a-z' 'A-Z' # 管道配合使用

wc -l /etc/passwd # 统计行数(= 系统用户数)
wc -w file.txt # 统计单词数
wc -c file.txt # 统计字节数
cat /etc/passwd | wc -l # 管道配合:统计用户数
| -l | |
| -w | |
| -c |

stat test.sh # 查看文件所有时间戳
三种时间状态:

grep /sbin/nologin /etc/passwd # 搜索不能登录的用户
grep -n /sbin/nologin /etc/passwd # 带行号
grep -v /sbin/nologin /etc/passwd # 反向选择(不含该关键词)
grep -i "error" /var/log/messages # 忽略大小写
grep -c "root" /etc/passwd # 只显示匹配行数
# 管道组合
ps aux | grep sshd # 查找sshd进程
netstat -an | grep 80 # 查看80端口连接
cat /etc/passwd | grep /bin/bash # 查看可登录用户
| -i | |
| -n | |
| -v | |
| -c |

cut -d : -f 1 /etc/passwd # 以冒号分隔,提取第1列(用户名)
cut -d : -f 1,3 /etc/passwd # 提取第1和第3列(用户名+UID)
cut -d : -f 1 /etc/passwd | head -n 5 # 前5个用户名

输出解释:-d 指定分隔符(delimiter),-f 指定字段(field)。/etc/passwd 以 : 分隔共7列:用户名、密码占位、UID、GID、描述、家目录、Shell
diff --brief fileA.txt fileB.txt # 快速判断是否相同
diff -c fileA.txt fileB.txt # 详细对比差异

uniq uniq.txt # 去除连续重复行
sort uniq.txt | uniq # 排序后再去重(去除所有重复)
sort uniq.txt | uniq -c # 去重并统计重复次数

输出解释:uniq 只去除连续重复行,通常配合 sort 先排序再 uniq 达到完全去重
sort fruit.txt # 默认字母顺序排序
sort -u sort.txt # 排序并去重
sort -n number.txt # 按数字大小排序
sort -r number.txt # 反向排序
sort -t : -k 3 -n /etc/passwd # 以冒号分隔,按第3列(UID)排序
| -f | |
| -n | |
| -r | |
| -u | |
| -t | |
| -k |

# 统计 /etc 下 .conf 文件数量
ls -l /etc | grep "\.conf$" | wc -l
# 查看可登录用户,按 UID 排序
grep -v /sbin/nologin /etc/passwd | sort -t : -k 3 -n
# 统计各 Shell 类型使用人数
cut -d : -f 7 /etc/passwd | sort | uniq -c | sort -rn

一般配置文件的路径在:/etc/NetworkManager/system-connections路径下

内容一般类似下面的内容:
[connection]
id=mylan
type=ethernet
interface-name=ens160
autoconnect=true
[ipv4]
method=auto
[ipv6]
method=disabled
利用VIM进行编辑这个文件,改成类似下面的内容
[connection]
id=mylan
type=ethernet
interface-name=ens160
autoconnect=true
[ipv4]
address=172.31.57.254/18
method=manual
gateway=172.31.63.254
dns=8.8.8.8
[ipv6]
method=disabled

保存退出,然后重新启动网卡服务
输入命令:
nmcli connection reload #重新加载网卡
然后输入ip a看看是否变成了我们自己设置的IP

然后利用主机ping测试,看看是否可以通

在做这个实验的时候,遇到了一个问题,正常来说,虚拟机默认的都是开启了DHCP服务的,会自动获取IP,比如虚拟机连接模式是Net模式的时候,就会自己获取一个IP地址,所以当我们换到桥接模式的时候,同样的应该会获取一个IP地址,但是当我切换到桥接模式的时候,我输入ip a并没有看到自动获取的IP地址,所以我觉得这里可能存在一些问题,如下:
可以看到,并没有IPv4的地址,这说明,并没有获取到IP地址

然后上网查了一下,是因为现在的WiFi非常安全,我连接的是我的随身WiFi,安全模式设置的比较高,所以导致没有办法让虚拟机通过无线网桥桥接到我本机的无线网卡上,也就是获取不到IP的根本原因,这里的解决办法就是换一个WiFi,然后再次尝试获取IP,就可以获取到正常的IP,然后就可以正常的进行改静态IP,然后测试和主机的互通性

现进入配置文件的目录下,一般配置文件目录是:/etc/yum.repos.d

创建一个新的yum配置文件,防止影响到系统默认的配置文件
vim zh.repo
文件内容写入类似下面的:
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0

然后创建挂载点,把CD/DVD挂载到虚拟机中
现输入lsblk,查看当前存储设备
可以看到,我的光盘名称是sr0

挂载到mnt下,先在根目录下面创建一个/media/cdrom文件夹
mkdir /media/cdrom

然后把sr0挂载到cdrom下
mount /dev/sr0 /media/cdrom

备份系统原有的yum源,只保留自己创建的yum源
cd /etc/yum.repos.d/
mkdir backup
mv ./*.repo ./backup
mv ./backup/zh.repo ./

然后清理yum的缓存并重载
yum clean all
yum makecache

尝试安装一个软件
yum install httpd

本次学习了 Linux 系统的核心基础知识,涵盖 45+ 个命令 和 2 个实操项目,整体按照"基础操作 → 系统管理 → 文件查找 → 文本处理 → 网络与软件配置"的顺序递进:
命令模块:从 Shell 基础(man、Tab 补全、快捷键)开始,掌握了 echo/date/ps/top/kill 系统工作命令,以及 ifconfig/ping/netstat/free/uptime 状态检测命令。查文件用 find(核心,支持 -exec 执行后续操作),查命令位置用 whereis/which
管道符是关键转折点:| 串联命令形成了文本处理流水线——cat/head/tail 查看内容,grep 过滤搜索,cut 按列提取,sort/uniq/wc 排序统计,tr/diff 做变换对比
两个实操:
① 配置网卡静态 IP(修改 NetworkManager 配置文件 → nmcli connection reload),踩了桥接模式 WiFi 安全策略导致无法获取 IP 的坑;
② 搭建本地 Yum 源(创建 .repo → 挂载光盘 sr0 → yum makecache)。
整体从命令行交互到系统运维实操,构建了 Linux 基础操作能力