Linux指令实战:40+核心命令的用法与思维模型

很多人把命令当成死记硬背的东西,敲了几个月还在频繁查ls -lls -a的区别。问题不在记忆力,在于没有把零散的命令串成一个操作模型。这篇文章不打算罗列所有参数,而是按"定位→查看→修改→搜索→打包→辅助"这条线,把日常高频指令的组织逻辑讲清楚。

目录

环境前提:从远程登录到Shell

[路径与定位:ls / cd / pwd](#路径与定位:ls / cd / pwd)

[文件操作:touch / mkdir / rmdir / rm / cp / mv](#文件操作:touch / mkdir / rmdir / rm / cp / mv)

[文本查看与分页:cat / more / less / head / tail](#文本查看与分页:cat / more / less / head / tail)

管道与重定向:思维的拐点

[搜索与查找:grep / find / which / whereis](#搜索与查找:grep / find / which / whereis)

[时间与系统:date / cal / top / uname](#时间与系统:date / cal / top / uname)

[打包与压缩:tar / zip / unzip](#打包与压缩:tar / zip / unzip)

[效率技巧:alias / Tab / Ctrl 组合键](#效率技巧:alias / Tab / Ctrl 组合键)

几点工程习惯


环境前提:从远程登录到Shell

生产环境没有GUI,一切都是通过终端完成。用XShell这类客户端SSH到服务器:

bash

复制代码
ssh user@192.168.1.100

XShell下的复制粘贴是Ctrl+Insert / Shift+Insert,不是Ctrl+C/V------后者在终端里是中断进程。这算第一个需要扭过来的习惯。

登录后,你面对的就是Shell------命令解释器。它不负责干活,只负责把你的意图转译给内核。你可以把它理解成一个"中间人",你告诉它要做什么,它去找内核执行,再把结果还给你。Bash是其中最常见的一种。

路径与定位:ls / cd / pwd

文件系统是一棵以/为根的目录树。在树上找东西,必须有一套唯一且高效的定位方式,这就是路径存在的意义。

绝对路径/开始,不依赖于当前所处位置,脚本和配置里应该尽量用绝对路径。相对路径 以当前目录为基准,..表示上级,.表示当前,命令行下手敲更便捷。

bash

复制代码
pwd                          # 我在哪
cd /home/user/test           # 绝对路径跳转
cd ../temp                   # 相对路径跳转
cd ~                         # 回自己家目录
cd -                         # 切回上一次所在目录

ls是目录浏览的基本功,几个常用组合:

bash

复制代码
ls -l        # 长格式,看权限、大小、时间
ls -a        # 包括隐藏文件(以.开头)
ls -lh       # 人类可读的大小
ls -lt       # 按修改时间排序,最新的在最前
ls -lS       # 按文件大小排序
ls -R        # 递归显示子目录
ls -d */     # 只列出目录本身,不展开

每个文件在内核里都有inode编号,ls -i可以查看。理解inode对后续理解硬链接、文件删除的底层行为很有帮助。

文件操作:touch / mkdir / rmdir / rm / cp / mv

创建:touchmkdir

touch主要用于更新文件时间戳,但它最常用的副作用是创建一个空文件:

bash

复制代码
touch newfile.txt
touch -a file    # 只改access time
touch -m file    # 只改modify time
stat file        # 查看所有时间戳

这里要区分三个时间:Access(访问时间)Modify(内容修改时间)Change(元数据变更时间) 。修改内容时M和C一起变,用chmod改权限只会更新C。很多备份工具依赖M时间做增量判断。

mkdir创建目录,-p可以递归创建整条路径,省去一层层建的麻烦:

bash

复制代码
mkdir -p a/b/c/d

删除:rmdirrm

rmdir只能删空目录,可用-p递归删除整条空路径,但凡中间有一个目录不为空,整个操作就失败。实际工程中rmdir用得很少,主力是rm

bash

复制代码
rm file
rm -r dir          # 递归删目录
rm -rf dir         # 强制递归(高危操作,慎用!)
rm -i file         # 删前询问

rm -rf /是老梗,但真有人手滑打错路径。建议养成良好的肌肉记忆:先ls确认路径,再敲rm ,或者给rm加别名alias rm='rm -i'

复制和移动:cpmv

bash

复制代码
cp source dest
cp -r dir dest     # 递归复制目录
cp -i source dest  # 覆盖前询问
cp *.txt dir/      # 通配符批量复制

mv兼具重命名和移动两个功能:如果目标是不存在的文件名,就是重命名;目标是已存在目录,则是移动。

bash

复制代码
mv old new         # 重命名
mv file dir/       # 移动到目录
mv -i source dest  # 覆盖前询问

文本查看与分页:cat / more / less / head / tail

cat用于一次性输出全部内容,适合小文件。常用-n加行号,-b对非空行编号,-s压缩连续空行。

文件一大,cat滚屏就没意义了。more支持分页,但只能向下翻。less才是正经的查看器:上下翻页、搜索、行号,启动还快------它不会一次性加载整个文件。

bash

复制代码
less -N large.log          # 带行号查看
# 进入less后:
/pattern   # 向下搜索
?pattern   # 向上搜索
n          # 下一个匹配
q          # 退出

headtail是看头看尾的利器,tail -f动态追踪日志增长:

bash

复制代码
head -20 file     # 前20行
tail -20 file     # 后20行
tail -f app.log   # 实时跟踪

结合管道,可以抽取任意行区间。显示第180~200行:

bash

复制代码
head -200 file | tail -21

管道与重定向:思维的拐点

管道和重定向是Linux命令行的精髓。管道 把前一个命令的stdout接到后一个命令的stdin,重定向则是把输出写到文件。

bash

复制代码
# 把多行文本输出到文件
cnt=0; while [ $cnt -le 1000 ]; do echo "hello $cnt"; let cnt++; done > output.txt
# 管道串联
cat output.txt | grep "hello 50" | wc -l
# 追加重定向
echo "append line" >> output.txt

很多命令本身不支持文件输入,但结合管道就可以灵活组合。习惯之后,你会发现自己慢慢在拼装一条条"数据处理流水线",这就是Unix哲学里的小程序组合思想。

搜索与查找:grep / find / which / whereis

grep在文件内容中匹配模式,-i忽略大小写,-n显示行号,-v反向匹配。

bash

复制代码
grep -in "error" app.log
grep -v "debug" app.log

find是在文件系统里按条件搜文件名、类型、时间等,功能极其强大,但参数也比较复杂。最常用的还是按名查找:

bash

复制代码
find ~ -name "*.cpp"

which定位你实际执行的命令在哪个路径,whereis顺便把手册页路径一块儿找出来:

bash

复制代码
which ls
whereis ls

当你发现which ls输出alias ls='ls --color=auto'时,就会意识到很多命令其实被别名包装过。

时间与系统:date / cal / top / uname

bash

复制代码
date "+%Y-%m-%d %H:%M:%S"   # 格式化输出
date +%s                     # 时间戳
date -d @1690000000          # 时间戳转可读时间
cal                          # 当月日历
cal 2025                     # 全年日历
top -d 1 -n 5                # 每1秒刷新,共5次
uname -r                     # 内核版本
uname -a                     # 全部信息

top是性能监控入口,第一眼应该看load average和内存/CPU占用最高的进程。

打包与压缩:tar / zip / unzip

tar本身只是"打包",把多个文件和目录打成一个tar包,不压缩。配合-z(gzip)或-j(bzip2)才做压缩。

bash

复制代码
tar -czvf archive.tar.gz dir/   # 打包并gzip压缩
tar -tzvf archive.tar.gz        # 不解压查看内容
tar -xzvf archive.tar.gz -C /target/dir   # 解压到指定目录

zip/unzip在跨平台交换时更通用:

bash

复制代码
zip -r dir.zip dir/
unzip dir.zip -d /tmp

rz/sz工具通过Zmodem协议在XShell里上传下载小文件,应急够用,大批量文件还是走scp或rsvp。

效率技巧:alias / Tab / Ctrl 组合键

把高频长命令别名化:

bash

复制代码
alias ll='ls -alF'
alias ..='cd ..'

Tab键自动补全命令和路径,是打命令的基础效率来源。Ctrl+C中断当前前台进程,Ctrl+D发送EOF或退出终端。

bc做快速浮点计算,file识别文件类型,这些是工具箱里的辅助小件,知道就行。

几点工程习惯

  1. 先用ls确认路径,再用rm 。尤其涉及通配符和-rf时,多用echo *pattern*预演。

  2. 写脚本尽量用绝对路径,避免依赖工作目录。

  3. 管道是思维工具,不是炫技。先想清楚数据流向,再堆命令。

  4. man是最好的离线文档,别一有问题就打开浏览器。

Linux指令不是背出来的,是用出来的。当你开始意识到"定位文件→查看内容→过滤加工→输出结果"这条链路可以完全在命令行内闭环时,才算真正入门了。

相关推荐
ZZZKKKRTSAE1 小时前
一篇猛攻zabbix
linux·运维·zabbix·redhat·rhel9
Csvn1 小时前
JS 技巧:设计模式(上)
前端·vue.js
中新传媒1 小时前
德宸堂心理双师同诊
java·前端·数据库
想唱rap1 小时前
NAT、内网穿透、代理服务
java·linux·网络·网络协议·udp·智能路由器
环流_1 小时前
nacos环境隔离
java·服务器·前端
森旺电子2 小时前
关键路径+松弛时间
linux·运维·服务器
liulilittle2 小时前
TCP BBR调优及监控
linux·网络·网络协议·tcp/ip·win
xuco2 小时前
如何让流式输出的 Markdown 渲染更丝滑
前端·agent