操作系统命令:Linux与Shell(Operating System & Command Line, OS/CLI)目录导航、文件操作与日志查看命令实践

操作系统命令:Linux与Shell(Operating System & Command Line, OS/CLI)目录导航、文件操作与日志查看命令实践

摘要

掌握常用Shell命令是高效使用Linux的核心能力 。本文系统梳理 pwd / ls / cd / cp / mv / rm / mkdir / mount|umount / touch / vi|vim / cat / more / tail / head / diff / echo / gedit 等基础命令,配合逐行注释的可直接执行示例、术语表与流程图,帮助你在日常开发与运维中快速定位问题与稳定复现操作。

概述

Shell是命令行解释器(Command-Line Interpreter, CLI),用于与内核交互并驱动系统工具执行 。命令既有状态返回码 (0=成功,非0=失败)也有标准输出/错误输出的行为区别;理解这些基本规则,有助于在脚本与终端中做出可预测、可恢复的操作决策。常见名词示意如下表:

名称 英文全拼(缩写) 说明
操作系统 Operating System(OS) 资源管理与程序调度的基础软件
命令行界面 Command Line Interface(CLI) 通过文本命令与系统交互的方式
图形用户界面 Graphical User Interface(GUI) 通过窗口与控件与系统交互
网络文件系统 Network File System(NFS) 使远端目录像本地盘一样挂载访问
统一Diff Unified Diff(无缩写) diff -u 的标准补丁格式

结论先行:把"路径语义、权限模型、I/O重定向、退出码"四件事吃透,你的Linux操作将更快更稳


一、命令速查与场景映射

目标 首选命令 常用选项/补充
查看当前位置 pwd -L(逻辑路径,默认)、-P(物理路径)
列目录与属性 ls -l/-a/-h/-R/-t/-S--color=auto
切换目录 cd 绝对/相对路径、~..--P 物理
复制 cp 文件:直接;目录:-r;保留属性:-a;更新:-u
移动/重命名 mv 覆盖互斥:-i/-f/-n-t 指定目标目录
删除 rm 文件:直删;目录:-r;强制:-f;组合:-rf
建目录 mkdir 递归父目录:-p;权限:-m MODE
挂载/卸载 mount / umount ISO:-o loop;NFS:-t nfs
时间戳或空文件 touch -c 不创建、-t/-d 指定时间、-r 引用
文本编辑 vi/vim :wq / :q! / :set number
显示/拼接 cat -n/-A/-s;与管道联动
分页查看 more -d/+NUM/管道
尾部追踪 tail -n/-f/-F
头部预览 head -n/-c
差异比较 diff -u/-y/-r/-w
打印文本 echo -n/-e/-E;重定向 > >>
GUI编辑 gedit --new-window / --wait

二、目录定位与查看

1.1 pwd:打印工作目录

在脚本中经常需要"锁定现场",尤其是涉及相对路径时。

bash 复制代码
pwd               # 打印当前工作目录(逻辑路径,默认等同 -L)
pwd -P            # 打印"物理路径",不解析符号链接
echo $?           # 打印上一条命令的退出状态码(0=成功,非0=失败)

-P 能规避符号链接带来的路径混淆,有利于排查真实目录位置

1.2 ls:列出文件与属性

先观察再操作,能明显降低误删与误覆盖的概率

bash 复制代码
ls -lah           # 以长格式、含隐藏项、可读单位显示当前目录内容
ls -lt            # 按修改时间倒序列出(最新在前)
ls -R /etc        # 递归列出 /etc 下的层级与文件

-l/-a/-h 是通用三件套,-t/-S 让你按时间或大小快速定位目标


三、目录切换与路径规则

2.1 cd:绝对/相对/快捷定位

路径的三种前缀决定解析起点/=根、~=家目录、相对路径=当前工作目录。

bash 复制代码
cd /etc           # 切到绝对路径 /etc
cd -              # 切回"上一次所在目录"
cd ../..          # 向上两级
cd ~/Documents    # 切到家目录下的 Documents

相对路径更短,绝对路径更稳,按场景取舍

路径前缀对比

前缀 含义 示例(假设当前 /home/admin,家目录 /home/admin
/ 绝对路径 /var/log/syslog
~ 家目录 ~/work/home/admin/work
./ 当前目录 ./run.sh
.. 父目录 ../assets

四、文件与目录的复制/移动/删除

3.1 cp:复制(文件/目录)

复制目录必须带递归;要保留属性请选择归档模式

bash 复制代码
cp file.txt /tmp/          # 复制文件到 /tmp
cp -r src/ dst/            # 递归复制目录 src 到 dst(dst 不存在会新建)
cp -a app/ /opt/app.bak/   # 归档复制,保留权限/时间/链接等属性

-a 等同 -dR --preserve=all,是做备份时的首选

3.2 mv:移动/重命名

一次动作同时承担"移动"和"改名"

bash 复制代码
mv old.txt new.txt         # 同目录重命名
mv -i *.log /var/log/      # 交互式移动,存在同名目标时询问
mv -n report.csv /tmp/     # 目标存在则"不覆盖"

-i/-f/-n 是互斥语义,最后出现的那个生效

3.3 rm:删除(慎用)

删除不可逆,先 lsrm 是好习惯

bash 复制代码
rm -i file.txt             # 交互式删除,逐一确认
rm -r old_data/            # 递归删除目录(可能大量文件)
rm -rf cache/              # 强制+递归,无提示删除(谨慎)

在生产环境避免滥用 -rf,可通过权限/白名单降低风险


五、目录创建与层级管理

4.1 mkdir:一次性创建多级目录

创建树状目录请使用 -p,可避免"父目录不存在"的报错

bash 复制代码
mkdir -p /data/apps/demo/logs   # 递归创建多级目录
mkdir -m 750 private            # 指定权限创建目录(rwx=7, rx=5, x=1)

-p-m 结合,既稳又安全


六、挂载与卸载:本地/ISO/网络

把"外部文件系统"映射到本地目录称为挂载(mount),断开映射称为卸载(umount)
块设备/镜像/网络共享 mount 挂载到目录 读写像本地目录 umount 卸载

5.1 本地分区与ISO

bash 复制代码
sudo mount /dev/sdb1 /mnt/usb      # 将U盘分区挂载到 /mnt/usb
sudo mount -o loop ubuntu.iso /mnt/iso  # 用loop把ISO当块设备挂载
sudo umount /mnt/usb               # 卸载挂载点

挂载点必须是"已存在且为空"的目录,否则会混淆文件视图

5.2 NFS(Network File System, NFS)

bash 复制代码
sudo mount -t nfs server:/data /mnt/nfs   # 以NFS类型挂载远端共享
sudo umount /mnt/nfs                      # 使用完毕及时卸载

日志/数据共享常用NFS,注意网络与权限策略


七、时间戳与空文件

6.1 touch:创建或更新时间

touch 是脚本初始化与构造测试文件的利器

bash 复制代码
touch demo.log                     # 不存在则创建空文件,存在则更新时间戳
touch -t 202507161200.30 stamp     # 指定时间戳:2025-07-16 12:00:30
touch -c -t 202501010000 report    # 不创建,仅在存在时更新时间戳

-t-c 组合可"只调时,不建文件"


八、文本编辑器与终端编辑工作流

7.1 vi/vim(Visual Editor / Vi IMproved)

vim 以"模式化编辑"著称:普通/插入/可视/命令行四种模式切换自如

bash 复制代码
vim +20 /etc/hosts                # 打开并跳到第20行
# 在 vim 内:i 插入;Esc 返回普通;:wq 保存退出;:q! 强退不保存

掌握 i/Esc/:wq/:q!/pattern 搜索,你已能完成90%的日常编辑

7.2 gedit(GUI编辑)

在桌面环境下,gedit 是轻量易上手的GUI编辑器

bash 复制代码
gedit config.ini &                 # 后台打开文件,不阻塞当前终端
gedit --wait README.md            # 等待编辑完成后再返回(适合脚本)

--wait 便于脚本化:编辑→保存→继续流水线


九、查看/分页/截取与日志追踪

8.1 cat:显示与拼接

bash 复制代码
cat -n app.log                     # 带行号查看
cat a.txt b.txt > all.txt          # 拼接并重定向到新文件

小文件直看,长文件配合分页器更友好

8.2 more:分页

bash 复制代码
ls -l /var/log | more -d           # 长列表分页查看,底部显示按键提示

空格翻页、回车前进一行、q 退出

8.3 tail / head:尾部追踪与头部预览

bash 复制代码
tail -F /var/log/nginx/access.log  # 追踪日志轮换后的新文件
head -n 20 README.md               # 预览前20行

-F-f 更适配"日志切割",可自动重新打开新文件


十、差异比较与补丁格式

9.1 diff:从"对比"到"补丁"

bash 复制代码
diff -u before.conf after.conf > patch.diff   # 生成统一diff补丁
diff -y file1 file2 --width=120               # 并排对比,直观看差异

-u 是代码评审与补丁提交的事实标准


十一、输出文本与重定向

10.1 echo:打印与构造文本

bash 复制代码
echo -e "Line1\nLine2\tTabbed"    # 解析转义:换行与制表
echo "Hello" > hello.txt          # 覆盖写入
echo "World" >> hello.txt         # 追加写入

>>> 分别对应覆盖与追加,脚本里要留心幂等性


十二、实战串联:从创建到查看到清理

把上面命令连成一次"可复现"的小流程,更能加深记忆

bash 复制代码
mkdir -p /tmp/demo/logs            # 1) 创建演示目录树
echo "hello" > /tmp/demo/a.txt     # 2) 生成内容文件(覆盖写入)
cp -a /tmp/demo /tmp/demo.bak      # 3) 做一次属性保留的归档拷贝
ls -lah /tmp/demo                  # 4) 检查结果(长格式+隐藏项+可读单位)
diff -u /tmp/demo /tmp/demo.bak    # 5) 期望无差异(备份一致)
tail -n 1 /tmp/demo/a.txt          # 6) 查看文件尾部一行
rm -rf /tmp/demo /tmp/demo.bak     # 7) 清理演示目录(谨慎使用 -rf)

流程化把控"创建→校验→比较→清理",能让你的日常操作既规范又可回滚


结论或总结

在Linux中,高质量的日常操作来自"路径与权限的准确理解、命令选项的少而精、以及对退出码与重定向的敏感" 。围绕本文的命令族,你可以完成从"定位目录→浏览与编辑→复制/移动/删除→挂载与追踪→对比与产出补丁"的完整闭环。把示例命令直接融入你的常用脚本与速查清单,你的平均定位与处理时间会显著下降

相关推荐
夜月yeyue3 小时前
多级流水线与指令预测
linux·网络·stm32·单片机·嵌入式硬件
IvanCodes3 小时前
十五、深入理解 SELinux
linux·运维·服务器
云博客-资源宝3 小时前
【防火墙源码】WordPress防火墙插件1.0测试版
linux·服务器·数据库
qq_479875433 小时前
systemd-resolved.service实验实战2
linux·服务器·网络
CS Beginner6 小时前
【Linux】安装配置mysql中出现的问题2
linux·mysql·adb
君之嘞12 小时前
【操作系统基础】认识操作系统:系统调用
linux·运维·microsoft
渡我白衣12 小时前
访问文件后出现的 ~$ 文件是什么?它和缓冲机制、数据丢失有什么关系?
linux
爱倒腾的老唐12 小时前
07、Linux 文件管理
linux·运维·服务器
Raymond运维13 小时前
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
linux·运维·数据库·mysql