
资料在文章末尾
系统版本: CentOS 7.9
用户权限: root
实验建议: 使用虚拟机或Docker容器进行练习,避免影响生产环境
# 基本用法ls # 列出当前目录内容ls /home# 指定目录# 常用参数详解ls -l# 长格式显示(权限、所有者、大小、时间)ls -a# 显示所有文件(包括隐藏文件)ls -lh# 人性化显示文件大小(K/M/G)ls -t# 按修改时间排序ls -r# 反向排序ls -R# 递归显示子目录# 组合示例ls -lha /var/log # 显示/var/log目录所有文件详细信息
实验操作:
创建测试目录和文件
mkdir -p /tmp/test_ls/{dir1,dir2}touch /tmp/test_ls/{.hidden,file1.txt,file2.log}echo "test" > /tmp/test_ls/file1.txt
执行不同参数对比
cd /tmp/test_ls #进入目录ls#列出当前目录内容

ls -a #显示所有文件包括隐藏文件
ls -l#长格式显示,简写ll
ls -la#以长格式显示所有文件目录
cd /home # 切换到/home目录cd ~ # 切换到用户家目录cd .. # 返回上级目录cd -# 返回上次所在目录

pwd # 显示当前工作目录绝对路径pwd -P# 显示物理路径(非链接路径)
mkdir newdir # 创建单个目录mkdir -p dir0/dir1/dir2 # 递归创建多级目录mkdir -m 755 mydir # 创建时指定权限mkdir dir{1..5} # 批量创建目录

touch file #创建单个文件touch file1 file2 file3 或者touch file{4..6} #创建多个文件
# 基本语法cp [选项] 源文件 目标文件# 常用参数cp -r source dest # 递归复制目录cp -i file1 file2 # 覆盖前提示cp -p file1 file2 # 保留原文件属性cp -u source dest # 仅复制更新的文件cp -v file1 file2 # 显示复制过程# 示例cp /etc/passwd /tmp/ # 复制文件到目录cp -r /etc/sysconfig/ /tmp/backup/
实验操作:
# 创建测试环境mkdir -p /tmp/cp_test/{source,dest}echo "original" > /tmp/cp_test/source/file1.txtyum -y install tree #安装tree命令,作用以递归模式展示目录tree /tmp/cp_test

# 复制实验cp /tmp/cp_test/source/file1.txt /tmp/cp_test/dest/cp -i /tmp/cp_test/source/file1.txt /tmp/cp_test/dest/ # 尝试重复复制cp -v /etc/hosts /tmp/cp_test/dest/


mv file1 file2 # 重命名mv file1 /tmp/ # 移动到目录mv -i old new # 覆盖前提示mv -u source dest # 仅更新目标不存在或较旧的文件mv -v file1 file2 # 显示移动过程


rm file.txt # 删除文件rm -r directory # 递归删除目录rm -f file # 强制删除(不提示)rm -rf /tmp/test/* # 强制递归删除(慎用!)rm -i *.txt # 删除前逐一确认



⚠️ 警告: rm -rf / 或 rm -rf /* 会删除系统所有文件!
cat file.txt # 查看文件内容cat -n file.txt # 显示行号cat -A file.txt # 显示所有字符(包括控制符)cat file1 file2 > file3 # 合并文件
less /var/log/messages # 可前后翻页(推荐)more /var/log/messages # 只能向前翻页# less常用操作键# 空格:下一页 b:上一页 /:搜索 q:退出
head -n 20 file.log # 查看前20行tail -n 30 file.log # 查看后30行tail -f /var/log/secure # 实时追踪文件变化(监控日志)tail -F file.log # 跟踪文件(即使文件被重命名)
vim file.txt # 打开/创建文件# 常用模式# 命令模式:按ESC# 插入模式:i(插入) a(追加) o(下一行)# 底行模式::# 常用命令:w # 保存:q # 退出:wq # 保存并退出:q! # 强制退出不保存/pattern # 搜索:%s/old/new/g # 全局替换
实验操作:
# 创建并编辑文件echo -e "Line1\nLine2\nLine3\nLine4\nLine5" > /tmp/test.txtvim /tmp/test.txt
# 在vim中练习:1. 按i进入插入模式,添加内容2. 按ESC返回命令模式3. 输入:set nu 显示行号4. 输入/Line 搜索5. 输入:wq保存退出



grep "error" file.log # 搜索包含error的行grep -i "ERROR" file.log # 忽略大小写grep -v "debug" file.log # 反向搜索(不包含debug)grep -r "config" /etc/ # 递归搜索目录grep -n "pattern" file # 显示行号grep -E "pattern1|pattern2" file # 扩展正则grep -c "error" file.log # 统计匹配行数# 结合管道ps aux | grep sshd # 查找sshd进程
实验操作:
# 准备测试文件echo -e "error: connection failed\ndebug: trying to connect\nERROR: timeout\ninfo: connected" > /tmp/grep_test.log

# 执行搜索grep "error" /tmp/grep_test.loggrep -i"error" /tmp/grep_test.loggrep -v"debug" /tmp/grep_test.loggrep -c"error" /tmp/grep_test.log -i

ps aux # 查看所有进程详细信息ps -ef# 完整格式列表ps -u root # 查看指定用户进程ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10# 查看内存使用前10# 字段解释USER: 进程所有者PID: 进程ID%CPU: CPU使用率%MEM: 内存使用率VSZ: 虚拟内存大小RSS: 驻留集大小TTY: 终端STAT: 进程状态START: 启动时间TIME: 运行时间COMMAND: 命令

top# 动态显示进程信息# top交互命令P: 按CPU排序M: 按内存排序N: 按PID排序k: 结束进程r: 修改进程优先级h: 显示帮助q: 退出
实验操作:
打开两个终端窗口

在第一个终端执行:dd if=/dev/zero of=/dev/null &

在第二个终端执行:top

观察进程变化,按P、M查看不同排序


free # 显示内存使用free -h# 人性化显示(单位K/M/G)free -m# 以MB为单位free -s 5# 每5秒刷新一次

df # 显示磁盘使用情况df -h# 人性化显示df -i# 显示inode使用情况df -T# 显示文件系统类型df -h /home # 查看指定目录所在分区


du -sh /var/log # 查看目录总大小du -h --max-depth=1 /home # 查看一级子目录大小du -ah /tmp | sort-rh | head -10# 查看/tmp下最大的10个文件
实验操作:
# 创建测试目录结构mkdir -p /tmp/du_test/{dir1,dir2,dir3}dd if=/dev/zero of=/tmp/du_test/dir1/bigfile bs=1M count=10dd if=/dev/zero of=/tmp/du_test/dir2/bigfile bs=1M count=5

# 查看大小du -sh /tmp/du_testdu -h --max-depth=1 /tmp/du_testfind /tmp/du_test -type f -exec du -h {} + | sort-rh

uname -a# 显示所有信息uname -r# 内核版本uname -m# 机器硬件架构uname -s# 内核名称
hostname # 显示主机名hostname -I# 显示所有IP地址hostnamectl set-hostname newname # 永久修改主机名(CentOS 7)
ping www.baidu.com # 测试连通性ping -c 4 8.8.8.8 # 指定发送次数ping -i 2 192.168.1.1 # 设置发送间隔(秒)ping -s 1024 192.168.1.1 # 指定数据包大小
# ifconfig(旧命令)ifconfig # 查看所有网络接口ifconfig eth0 # 查看指定接口ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # 临时配置IP# ip(新命令,推荐)ip addr show # 查看IP地址ip link show # 查看网络接口ip route show # 查看路由表ip -s link # 查看接口统计信息

# netstat(旧命令)netstat -tunlp# 查看所有监听端口netstat -an# 查看所有连接netstat -rn# 查看路由表# ss(新命令,更快)ss -tunlp# 查看监听端口ss -s# 显示统计信息ss -t state established # 查看已建立连接

实验操作:
# 启动一个测试服务python -m SimpleHTTPServer 8080 &# 查看端口监听netstat -tunlp | grep 8080ss -tunlp | grep 8080# 对比两种命令的输出

curl https://example.com # 获取网页内容curl -O http://example.com/file.zip # 下载文件curl -I https://example.com # 只显示头部信息wget http://example.com/file.zip # 下载文件wget -c http://example.com/bigfile.zip # 断点续传wget -r -l1 http://example.com # 递归下载一层
# 数字模式chmod 755 file.sh # rwxr-xr-xchmod 644 file.txt # rw-r--r--r读:4,w写:2,x执行:1# 符号模式chmod u+x file.sh # 给所有者添加执行权限chmod g-w file.txt # 移除组写权限chmod o=r file.txt # 设置其他用户只读chmod a+x script.sh # 给所有人添加执行权限# 递归修改chmod -R 755 directory/
chown user file.txt # 修改文件所有者chown :group file.txt # 修改文件所属组chown user:group file # 同时修改所有者和组chown -R user:group dir # 递归修改
chgrp group file.txt # 修改文件所属组chgrp -R www-data /var/www # 递归修改
权限实验:
# 创建测试环境mkdir /tmp/perm_testecho "secret" > /tmp/perm_test/secret.txt# 查看当前权限ls -l /tmp/perm_test/

# 修改权限实验chmod 777 /tmp/perm_test/secret.txtls -l /tmp/perm_test/chmod 600 /tmp/perm_test/secret.txtls -l /tmp/perm_test/

# 修改所有者useradd testuser 2>/dev/null || truechown testuser /tmp/perm_test/secret.txtls -l /tmp/perm_test/

# 打包压缩tar -czvf archive.tar.gz dir/ # 创建gzip压缩包tar -cjvf archive.tar.bz2 dir/ # 创建bzip2压缩包tar -cJvf archive.tar.xz dir/ # 创建xz压缩包# 解压tar -xzvf archive.tar.gz # 解压gziptar -xjvf archive.tar.bz2 # 解压bzip2tar -xJvf archive.tar.xz # 解压xz# 查看内容tar -tzvf archive.tar.gz # 查看压缩包内容# 参数说明-c: 创建压缩包-x: 解压-z: gzip压缩-j: bzip2压缩-J: xz压缩-v: 显示过程-f: 指定文件名-t: 列出内容
gzip file.txt # 压缩文件(生成file.txt.gz)gzip -9 file.txt # 最大压缩率gunzip file.txt.gz # 解压zcat file.txt.gz # 查看压缩文件内容
zip archive.zip file1 file2 # 压缩文件zip -r archive.zip dir/ # 递归压缩目录unzip archive.zip # 解压unzip -l archive.zip # 查看内容unzip -d target_dir archive.zip # 解压到指定目录
压缩实验:
# 创建测试文件mkdir -p /tmp/compress_testdd if=/dev/urandom of=/tmp/compress_test/file1.bin bs=1M count=1cp /tmp/compress_test/file1.bin /tmp/compress_test/file2.bin

# 使用不同工具压缩time tar -czf /tmp/test.tar.gz /tmp/compress_test/*time tar -cjf /tmp/test.tar.bz2 /tmp/compress_test/*time zip -r /tmp/test.zip /tmp/compress_test/*

# 查看压缩效果ls -lh /tmp/test.*

# 解压测试mkdir /tmp/extract_testtar -xzf /tmp/test.tar.gz -C /tmp/extract_testls -lh /tmp/extract_test/

yum update # 更新所有包yum install httpd # 安装软件包yum remove httpd # 删除软件包yum search nginx # 搜索软件包yum info httpd # 查看包信息yum list installed # 查看已安装包yum list available # 查看可用包yum clean all # 清理缓存yum history # 查看yum操作历史yum provides */nginx # 查看哪个包提供某文件yum groupinstall "Development Tools"# 安装软件组
更换国内yum源:
备份当前的仓库配置
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup清除 yum的缓存以确保使用最新的仓库信息
sudo yum clean all编辑仓库配置文件,没有安装vim的用vi
sudo vim /etc/yum.repos.d/CentOS-Base.repo修改或添加仓库源
在文件中,你可以找到类似下面的内容:
[base]name=CentOS-$releasever- Basebaseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

你可以修改 baseurl 指向不同的镜像站点,键盘切为英文模式,输入i,修改内容,其他内容用#注释或者删除。例如,使用阿里云的镜像:
[base]name=CentOS-$releasever- Base - Aliyun Mirrorbaseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

保存并关闭文件

清除并重新生成缓存
sudo yum clean allsudo yum makecache

测试配置
sudo yum repolist
安装常用工具
建议安装以下实用工具包:
网络诊断工具:net-tools
文件下载工具:wget、curl
文本编辑器:vim
文件传输工具:lrzsz
系统监控工具:lsof(可选)
执行安装命令:
sudo yum -y install net-tools wget curl vim lrzsz lsof
查看安装情况,例如
which wgetrpm -qi wget

卸载命令
yum remove 包名 -ysystemctl status sshd # 查看服务状态systemctl start httpd # 启动服务systemctl stop firewalld # 停止服务systemctl restart network # 重启服务systemctl enable nginx # 设置开机启动systemctl disable nginx # 禁用开机启动systemctl list-units --type=service# 列出所有服务systemctl daemon-reload # 重新加载配置
journalctl # 查看所有日志journalctl -u sshd # 查看指定服务日志journalctl -f# 实时查看日志journalctl --since "2023-01-01"# 查看指定时间后日志journalctl -p err # 查看错误级别日志journalctl -n 100# 查看最后100行journalctl --disk-usage# 查看日志占用空间
crontab -l# 查看当前用户的cron任务crontab -e# 编辑cron任务crontab -r# 删除所有cron任务# cron时间格式# * * * * * command# | | | | |# | | | | +----- 星期 (0-7) (0和7都表示周日)# | | | +------- 月份 (1-12)# | | +--------- 日 (1-31)# | +----------- 小时 (0-23)# +------------- 分钟 (0-59)# 示例* * * * * /path/to/command # 每分钟执行0 * * * * /path/to/command # 每小时执行00 * * * /path/to/command # 每天执行00 * * 0 /path/to/command # 每周日执行*/5 * * * * /path/to/command # 每5分钟执行
定时任务实验:
# 创建一个测试脚本echo 'echo "$(date): cron test" >> /tmp/cron_test.log' > /tmp/test_cron.shchmod +x /tmp/test_cron.sh

# 编辑crontabcrontab -e# 按i输入,添加一行:*/2 * * * * /tmp/test_cron.sh#按Esc键退出到命令模式,输入:wq保存

# 等待几分钟查看结果sleep 130cat /tmp/cron_test.log

# 清理crontab -r# 查看crontab -l

# 基本用法:awk 'pattern {action}' fileawk '{print $1}' file.txt # 打印第一列awk -F: '{print $1}' /etc/passwd # 指定分隔符为冒号awk '$3 > 1000' /etc/passwd # 第三列大于1000的行awk 'NR==2,NR==5' file.txt # 打印第2到5行awk '/root/ {print $0}' /etc/passwd # 包含root的行awk 'END {print NR}' file.txt # 统计行数awk '{sum+=$1} END {print sum}' file.txt # 第一列求和
sed 's/old/new/g' file.txt # 替换所有old为newsed -i 's/foo/bar/g' file.txt # 直接修改文件sed '2,5d' file.txt # 删除第2到5行sed '/pattern/d' file.txt # 删除包含pattern的行sed -n '10,20p' file.txt # 打印10到20行sed '1i\new line' file.txt # 在第一行前插入sed '$a\append line' file.txt # 在最后一行后追加
find /home -name"*.txt"# 按名称查找find /var -type f -mtime-7# 查找7天内修改的文件find /tmp -size+10M # 查找大于10M的文件find . -perm644# 查找权限为644的文件find /etc -type f -execgrep-l"pattern" {} \; # 查找包含内容的文件find /var/log -name"*.log"-execrm {} \; # 查找并删除find . -type f -empty# 查找空文件
文本处理综合实验:
# 创建测试数据cat > /tmp/data.txt << EOFJohn 25 Engineer 5000Alice 30 Doctor 8000Bob 22 Student 1000Carol 35 Teacher 6000David 28 Developer 7000EOF
# 使用awk处理awk '$4>5000 {print $1, $4}' /tmp/data.txtawk '{sum+=$4} END {printf "Avg: %.2f\n", sum/NR}' /tmp/data.txt

# 使用sed处理sed 's/Engineer/ENGINEER/g' /tmp/data.txtsed '3d' /tmp/data.txt

# 使用find和grep组合echo "test pattern" > /tmp/test1.txtecho "another test" > /tmp/test2.txtfind /tmp -name"*.txt"-execgrep-l"pattern" {} \;

sleep 100 & # 后台运行命令jobs # 查看后台作业fg %1 # 将作业1调到前台bg %1 # 将作业1调到后台Ctrl+Z # 暂停前台作业
kill PID # 终止指定进程kill -9 PID # 强制终止kill -15 PID # 正常终止(默认)pkill -u username # 终止用户的所有进程
nohup command & # 后台运行,终端关闭不影响nohup ./script.sh > output.log 2>&1 &
进程管理实验:
# 启动多个后台进程sleep 300 &sleep 400 &sleep 500 &

# 查看作业jobs -l

# 操作作业fg %1# 按Ctrl+Z暂停bg %1

# 查看进程ps aux | grep sleep

# 终止进程kill %2
vim /tmp/system_info.sh#将以下内容复制粘贴进去,:wq保存#!/bin/bash# 保存为 /tmp/system_info.shecho "=== 系统信息收集报告 ==="echo "生成时间: $(date)"echo ""echo "1. 系统基本信息"echo "主机名: $(hostname)"echo "内核版本: $(uname -r)"echo "系统架构: $(uname -m)"echo ""echo "2. 系统资源使用情况"echo "内存使用:"free -hecho ""echo "磁盘使用:"df -hecho""echo "3. 负载情况"uptimeecho ""echo "4. 登录用户"whoecho ""echo "5. 内存占用前10的进程"ps aux --sort=-%mem | head -11echo ""echo "6. CPU占用前10的进程"ps aux --sort=-%cpu | head -11echo ""echo "7. 网络连接"ss -tun | wc-lecho "ESTABLISHED连接数: $(ss -t state established | wc -l)"echo ""echo "8. 系统服务状态"systemctl list-units --type=service--state=running | head -10
执行与验证:
chmod +x /tmp/system_info.sh/tmp/system_info.sh > /tmp/system_report.txtcat /tmp/system_report.txt

Ctrl+C # 终止当前命令Ctrl+D # 退出终端/结束输入Ctrl+Z # 暂停进程Ctrl+L # 清屏Ctrl+A # 光标移动到行首Ctrl+E # 光标移动到行尾Ctrl+U # 删除光标前所有内容Ctrl+K # 删除光标后所有内容Ctrl+R # 搜索历史命令Tab # 命令/路径补全
命令组合
# 统计当前目录文件数ls -l | grep"^-" | wc-l# 查看最近使用的命令history | grep"ssh"# 批量重命名for file in *.txt; domv"$file""${file%.txt}.bak"; done
别名设置
# 临时别名alias ll='ls -lh'alias rm='rm -i'# 永久生效(添加到~/.bashrc)echo "alias ll='ls -lh'" >> ~/.bashrcsource ~/.bashrc
循序渐进:从基本命令开始,逐步掌握复杂命令
多动手实践:在实验环境中反复练习
善用帮助:man command 或 command --help
做好笔记:记录常用命令和参数
安全意识:谨慎使用root权限,特别是删除命令
版本注意:不同Linux发行版可能有差异
通过本文的系统学习,相信你已经掌握了Linux命令的基础框架。但技术的精进永无止境——真正的专家不是记住了所有命令,而是知道在什么场景下选择最合适的工具。
欢迎在评论区:
分享你在Linux使用中的独特技巧
提出学习中遇到的困惑和问题
纠正文中的任何错误或不准确之处
如果这篇文章帮你节省了搜索命令的时间,或者解决了某个困扰已久的问题,请考虑:
点赞让更多人看到这篇干货
收藏建立你的个人知识库
分享给正在学习Linux的小伙伴
关注获取持续的技术更新
记住:每一个Linux高手,都是从输入第一条命令开始的。现在,轮到你开始创造了——
打开终端,输入你的第一条命令,开始属于你的Linux征程吧!

资料下载

-END-
