操作系统命令: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
:打印工作目录
在脚本中经常需要“锁定现场”,尤其是涉及相对路径时。
pwd # 打印当前工作目录(逻辑路径,默认等同 -L)
pwd -P # 打印“物理路径”,不解析符号链接
echo $? # 打印上一条命令的退出状态码(0=成功,非0=失败)
-P
能规避符号链接带来的路径混淆,有利于排查真实目录位置。
1.2 ls
:列出文件与属性
先观察再操作,能明显降低误删与误覆盖的概率。
ls -lah # 以长格式、含隐藏项、可读单位显示当前目录内容
ls -lt # 按修改时间倒序列出(最新在前)
ls -R /etc # 递归列出 /etc 下的层级与文件
-l/-a/-h
是通用三件套,-t/-S
让你按时间或大小快速定位目标。
三、目录切换与路径规则
2.1 cd
:绝对/相对/快捷定位
路径的三种前缀决定解析起点:/
=根、~
=家目录、相对路径=当前工作目录。
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
:复制(文件/目录)
复制目录必须带递归;要保留属性请选择归档模式。
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
:移动/重命名
一次动作同时承担“移动”和“改名”。
mv old.txt new.txt # 同目录重命名
mv -i *.log /var/log/ # 交互式移动,存在同名目标时询问
mv -n report.csv /tmp/ # 目标存在则“不覆盖”
-i/-f/-n
是互斥语义,最后出现的那个生效。
3.3 rm
:删除(慎用)
删除不可逆,先 ls
再 rm
是好习惯。
rm -i file.txt # 交互式删除,逐一确认
rm -r old_data/ # 递归删除目录(可能大量文件)
rm -rf cache/ # 强制+递归,无提示删除(谨慎)
在生产环境避免滥用 -rf
,可通过权限/白名单降低风险。
五、目录创建与层级管理
4.1 mkdir
:一次性创建多级目录
创建树状目录请使用 -p
,可避免“父目录不存在”的报错。
mkdir -p /data/apps/demo/logs # 递归创建多级目录
mkdir -m 750 private # 指定权限创建目录(rwx=7, rx=5, x=1)
-p
与 -m
结合,既稳又安全。
六、挂载与卸载:本地/ISO/网络
把“外部文件系统”映射到本地目录称为挂载(mount),断开映射称为卸载(umount)。
5.1 本地分区与ISO
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)
sudo mount -t nfs server:/data /mnt/nfs # 以NFS类型挂载远端共享
sudo umount /mnt/nfs # 使用完毕及时卸载
日志/数据共享常用NFS,注意网络与权限策略。
七、时间戳与空文件
6.1 touch
:创建或更新时间
touch
是脚本初始化与构造测试文件的利器。
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
以“模式化编辑”著称:普通/插入/可视/命令行四种模式切换自如。
vim +20 /etc/hosts # 打开并跳到第20行
# 在 vim 内:i 插入;Esc 返回普通;:wq 保存退出;:q! 强退不保存
掌握 i/Esc/:wq/:q!
与 /pattern
搜索,你已能完成90%的日常编辑。
7.2 gedit
(GUI编辑)
在桌面环境下,gedit
是轻量易上手的GUI编辑器。
gedit config.ini & # 后台打开文件,不阻塞当前终端
gedit --wait README.md # 等待编辑完成后再返回(适合脚本)
--wait
便于脚本化:编辑→保存→继续流水线。
九、查看/分页/截取与日志追踪
8.1 cat
:显示与拼接
cat -n app.log # 带行号查看
cat a.txt b.txt > all.txt # 拼接并重定向到新文件
小文件直看,长文件配合分页器更友好。
8.2 more
:分页
ls -l /var/log | more -d # 长列表分页查看,底部显示按键提示
空格翻页、回车前进一行、q 退出。
8.3 tail
/ head
:尾部追踪与头部预览
tail -F /var/log/nginx/access.log # 追踪日志轮换后的新文件
head -n 20 README.md # 预览前20行
-F
比 -f
更适配“日志切割”,可自动重新打开新文件。
十、差异比较与补丁格式
9.1 diff
:从“对比”到“补丁”
diff -u before.conf after.conf > patch.diff # 生成统一diff补丁
diff -y file1 file2 --width=120 # 并排对比,直观看差异
-u
是代码评审与补丁提交的事实标准。
十一、输出文本与重定向
10.1 echo
:打印与构造文本
echo -e "Line1\nLine2\tTabbed" # 解析转义:换行与制表
echo "Hello" > hello.txt # 覆盖写入
echo "World" >> hello.txt # 追加写入
>
与 >>
分别对应覆盖与追加,脚本里要留心幂等性。
十二、实战串联:从创建到查看到清理
把上面命令连成一次“可复现”的小流程,更能加深记忆。
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中,高质量的日常操作来自“路径与权限的准确理解、命令选项的少而精、以及对退出码与重定向的敏感”。围绕本文的命令族,你可以完成从“定位目录→浏览与编辑→复制/移动/删除→挂载与追踪→对比与产出补丁”的完整闭环。把示例命令直接融入你的常用脚本与速查清单,你的平均定位与处理时间会显著下降。