Linux指令实战:40+核心命令的用法与思维模型
很多人把命令当成死记硬背的东西,敲了几个月还在频繁查ls -l和ls -a的区别。问题不在记忆力,在于没有把零散的命令串成一个操作模型。这篇文章不打算罗列所有参数,而是按“定位→查看→修改→搜索→打包→辅助”这条线,把日常高频指令的组织逻辑讲清楚。
目录
文件操作:touch / mkdir / rmdir / rm / cp / mv
文本查看与分页:cat / more / less / head / tail
搜索与查找:grep / find / which / whereis
时间与系统:date / cal / top / uname
环境前提:从远程登录到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
创建:touch 和 mkdir
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
删除:rmdir 和 rm
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'。
复制和移动:cp 和 mv
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 # 退出
head和tail是看头看尾的利器,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识别文件类型,这些是工具箱里的辅助小件,知道就行。
几点工程习惯
-
先用
ls确认路径,再用rm。尤其涉及通配符和-rf时,多用echo *pattern*预演。 -
写脚本尽量用绝对路径,避免依赖工作目录。
-
管道是思维工具,不是炫技。先想清楚数据流向,再堆命令。
-
man是最好的离线文档,别一有问题就打开浏览器。
Linux指令不是背出来的,是用出来的。当你开始意识到“定位文件→查看内容→过滤加工→输出结果”这条链路可以完全在命令行内闭环时,才算真正入门了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)