Linux常用命令合集:从新手到高手的核心操作指南
1. 项目概述:为什么我们需要一个“常用命令合集”?
在Linux世界里摸爬滚打十几年,我见过太多新手,也包括一些从其他平台转过来的老手,面对黑漆漆的终端窗口时那种手足无措的茫然。Linux的强大,根植于其命令行界面,但这也恰恰是它最陡峭的学习曲线。你可能会问,图形界面不是挺好吗?确实,但对于服务器管理、自动化脚本、性能调优乃至日常的高效文件操作,命令行是无可替代的利器。它直接、高效,一个简单的命令组合,其威力可能远超在图形界面里点上一分钟鼠标。
“Linux最常用命令合集”这个项目,其核心价值就在于降本增效。它不是一本包罗万象的百科全书,而是经过实战筛选的“瑞士军刀”。对于新手,它是一个清晰的路标,告诉你哪些命令是必须优先掌握的“生存技能”;对于有经验的用户,它是一个高效的备忘录和最佳实践指南,能帮你快速回忆起某个命令的精妙用法,避免在浩如烟海的手册页中迷失方向。这个合集解决的,就是“知道要做什么,但记不住具体命令或参数”的痛点,将碎片化的知识系统化、场景化,让你在需要的时候能立刻找到趁手的工具。
2. 命令合集的构建逻辑与分类体系
一个杂乱无章的列表是毫无价值的。一个好的命令合集,必须基于清晰的逻辑进行分类,让用户能根据意图而非死记硬背的命令名来查找和使用。我倾向于按照命令的核心功能域和使用频率来构建一个四层金字塔结构。
2.1 核心分类原则:从生存到精通
最底层是生存必备层,这包括了任何用户登录系统后,为了不“抓瞎”而必须掌握的几个命令。比如,pwd(我在哪?)、ls(这里有什么?)、cd(我要去哪?)。这一层命令数量少,但使用频率极高,是所有操作的基础。
第二层是文件操作层。Linux中“一切皆文件”,因此对文件的增删改查、权限管理是日常工作的核心。这一层命令如cp,mv,rm,cat,more/less,chmod,chown等,构成了文件系统交互的骨架。
第三层是系统洞察层。当基础操作熟练后,你需要了解系统在“干什么”。这包括查看进程(ps,top)、监控资源(free,df,du)、分析网络(ping,netstat/ss,curl)以及搜索内容(grep,find)。这一层命令帮助你从被动的操作者,转变为主动的观察者和诊断者。
最顶层是效率工具层。这是高手和新手的分水岭,涉及将简单命令组合成强大管道的技巧,以及使用awk,sed,vim等工具进行文本处理和高效编辑。掌握这一层,你才能真正体会到Linux命令行的优雅与强大。
2.2 命令的“上下文”与参数记忆法
记住命令本身的名字往往不难,难的是记住那些关键且常用的参数。我的经验是,不要孤立地记忆,而是建立“场景-命令-参数”的联想。例如:
- 查看详细文件列表:你会想到
ls,进而联想到需要看到权限、大小、时间等详细信息,于是参数-l(long listing)就自然关联上了。如果再需要看到隐藏文件,那就是-a(all)。组合起来就是ls -la,这是一个高频场景。 - 递归操作:当你需要对一个目录及其所有子目录进行操作时,很多命令都共享一个参数
-r(recursive)或-R。无论是复制目录 (cp -r)、删除目录 (rm -r),还是更改目录所有权 (chown -R),这个“递归”的概念是通用的。 - 人性化显示:对于显示大小的命令,如
df(磁盘空间)、du(目录大小)、ls -lh,参数-h(human-readable)会将字节数自动转换为K、M、G,这是提高可读性的黄金参数。
建立这种模式化的记忆,比死记硬背每个命令的独立参数表要高效得多。
3. 生存必备层:文件与目录导航
这是你命令行之旅的起点。如果连“我在哪”和“这里有什么”都搞不清楚,后续所有操作都无从谈起。
3.1 定位与列表:pwd,ls,cd
pwd(Print Working Directory) 是最简单的命令,但它至关重要。它告诉你当前终端会话所在的确切绝对路径。尤其是在通过符号链接进入目录后,pwd -P(显示物理路径)可以帮你厘清实际位置。
ls(List) 是使用频率可能最高的命令。它的基础用法是列出当前目录的内容,但其威力在于参数:
ls -l:以长格式显示,包含文件权限、链接数、所有者、组、大小、修改时间和文件名。权限栏的第一个字符尤其重要:-代表普通文件,d代表目录,l代表符号链接。ls -a:显示所有文件,包括以点.开头的隐藏文件(如.bashrc)。ls -lh:-l的长格式结合-h的人性化大小显示(如 4.0K, 1.5M)。ls -t:按修改时间排序,最新的在前。ls -tr则是反向,最旧的在前。ls -R:递归列出子目录内容。
一个强大的组合是ls -lath,它可以按时间倒序列出所有文件(包括隐藏文件)的详细信息,并以人性化格式显示大小,非常适合查看最近变动。
cd(Change Directory) 用于切换目录。除了使用绝对路径 (cd /usr/local/bin) 或相对路径 (cd ../parent):
cd ~或直接cd:快速回到当前用户的家目录。cd -:在两个最近工作过的目录之间快速切换,非常实用。cd ..:进入上级目录。
注意:在脚本中,使用
cd时最好总是检查是否成功,因为目标目录可能不存在或无权访问。可以写成cd /some/path || exit 1。
3.2 目录管理:mkdir,rmdir
mkdir(Make Directory) 创建目录。最常用的参数是-p(parents),它可以一次性创建多级嵌套的目录,如果中间目录不存在会自动创建。例如mkdir -p project/{src,doc,test}会创建project目录,并在其下同时创建src,doc,test三个子目录(这里用到了大括号扩展,也是一个实用技巧)。
rmdir(Remove Directory) 删除空目录。它的限制很严格,目录必须为空才能删除。这其实是一个安全特性,防止误删。更常用的删除目录命令是rm -r。
4. 文件操作层:增删改查与权限
掌握了导航,接下来就是对文件本身进行操作。这是日常工作中最密集的命令区域。
4.1 文件内容查看:cat,more,less,head,tail
cat(Concatenate):本意是连接文件并输出,但最常用于快速查看短小文件的全内容。例如cat /etc/hostname。切忌用cat查看巨大的日志文件,它会瞬间刷屏且无法交互。more:一个简单的分页器,允许你逐屏查看长文件。按空格向下翻页,按q退出。功能比less弱。less:more的增强版,是查看长文本文件的首选工具。它支持向前/向后滚动、搜索(按/然后输入关键词,n下一个,N上一个)、跳转到行首(g)或行尾(G)。查看日志、配置文件、手册页 (man命令内部用的就是less) 都用它。head:显示文件开头部分,默认10行。head -n 20 file.log显示前20行。常用于查看文件格式或开头部分。tail:显示文件末尾部分,默认10行。最重要的用法是tail -f file.log,它会实时跟踪并显示文件新增的内容,是监控日志文件增长的“神器”。tail -n 50 file.log显示最后50行。
4.2 文件操作:cp,mv,rm
cp(Copy):复制文件或目录。cp source.txt dest.txt:复制文件。cp -r source_dir/ dest_dir/:递归复制整个目录。cp -i source dest:交互模式,覆盖前询问。建议新手将-i设为默认别名(在~/.bashrc中添加alias cp='cp -i'),这是一个重要的安全习惯。cp -u source dest:仅当源文件比目标文件新,或目标文件不存在时才复制(update)。
mv(Move):移动或重命名文件/目录。它本质上是改变文件在文件系统中的路径名。mv oldname.txt newname.txt:重命名。mv file.txt /target/dir/:移动到目标目录。- 同样建议为
mv设置alias mv='mv -i'以防误覆盖。
rm(Remove):删除文件或目录。这是最危险的命令之一,尤其是结合-r和-f时。rm file.txt:删除文件。rm -r dir/:递归删除目录及其下所有内容。rm -f file:强制删除,不提示。-f会忽略不存在的文件。- 绝对禁忌:
rm -rf /或rm -rf /*。这会尝试递归强制删除根目录下的所有文件,导致系统毁灭。即使在有保护的系统上,也可能造成灾难。永远不要在命令中随意组合-rf,并且确保你清楚地知道当前目录 (pwd) 和目标路径。
4.3 文件权限与所有权:chmod,chown
Linux的权限系统是安全基石。使用ls -l查看时,权限栏类似-rwxr-xr--。
- 第一位:文件类型 (
-,d,l等)。 - 后九位:每三位一组,分别代表所有者(u)、所属组(g)、其他用户(o)的权限。
- 每组的三个字符:
r(读,4)、w(写,2)、x(执行,1)。无权限用-表示。
chmod(Change Mode) 修改权限。有两种方法:
- 数字法(最精确):将每组权限的数值相加。
rwxr-xr--换算为:所有者=4+2+1=7, 组=4+0+1=5, 其他=4+0+0=4。所以chmod 754 filename就设定了该权限。 - 符号法(更直观):
chmod u+x file(给所有者增加执行权限),chmod go-w file(移除组和其他用户的写权限),chmod a+r file(给所有用户增加读权限)。
chown(Change Owner) 修改文件所有者和所属组。
chown user:group file:将文件的所有者改为user,组改为group。chown :group file:只修改组。chown user file:只修改所有者。- 通常需要
root权限来执行。递归修改目录下所有文件用-R参数。
5. 系统洞察层:进程、资源与网络
当系统出现性能问题或需要了解运行状态时,这一层的命令就是你的“听诊器”和“显微镜”。
5.1 进程管理:ps,top,kill
ps(Process Status):查看进程快照。最常用的组合是ps aux。a:显示所有用户的进程。u:以用户为主的格式显示。x:显示没有控制终端的进程(通常是后台守护进程)。- 输出列中,
%CPU、%MEM、COMMAND是关键信息。常结合grep使用:ps aux | grep nginx。
top:动态、实时地查看系统进程和资源占用情况。它是一个交互式工具。- 运行后,按
P按CPU使用率排序,M按内存使用率排序,q退出。 - 首部信息区显示了系统负载(load average)、总进程数、CPU使用率分布、内存和交换空间使用情况。load average三个值分别代表过去1、5、15分钟的平均负载,通常高于CPU核心数就需要关注。
htop是top的增强版,界面更友好,支持鼠标操作,强烈推荐安装使用。
- 运行后,按
kill:向进程发送信号。kill -9 PID是强制终止进程,但这是最后手段,因为进程无法捕获此信号进行清理。应先尝试kill PID(默认发送TERM信号,允许进程优雅退出)或kill -15 PID(同TERM)。kill -l可以列出所有信号。
5.2 资源监控:df,du,free
df(Disk Free):报告文件系统磁盘空间使用情况。df -h是最常用的,以人性化单位显示所有挂载点的空间信息。重点关注Use%列,超过80%就需要考虑清理或扩容。du(Disk Usage):估算文件和目录的磁盘使用量。du -sh *:以人性化格式 (-h) 汇总 (-s) 显示当前目录下每个文件和目录的大小 (*)。du -sh /path/to/dir:显示某个目录的总大小。du -ah /path | sort -rh | head -20:这是一个经典组合,找出指定路径下最大的20个文件/目录。
free:显示内存使用情况。free -h以人性化单位显示。关键看available列,它表示可供应用程序使用的内存量,比free列更准确(因为Linux会利用空闲内存做缓存和缓冲)。
5.3 网络诊断:ping,netstat/ss,curl,wget
ping:测试与目标主机的网络连通性。ping -c 4 google.com发送4个包后停止。高延迟或丢包表明网络有问题。netstat(旧) /ss(新,Socket Statistics):查看网络连接、路由表、接口统计等。ss速度更快,信息更详细,是netstat的现代替代品。ss -tuln:查看所有监听的TCP(-t)和UDP(-u)端口,并以数字(-n)形式显示,不解析服务名(-l表示 listening)。这是检查服务器开放了哪些端口的标准命令。ss -tunp:显示所有TCP/UDP连接,并显示对应的进程PID和名称(-p)。
curl:一个强大的命令行数据传输工具,支持多种协议。常用于测试HTTP API、下载文件等。curl -I http://example.com:只获取HTTP头部信息,用于检查状态码、服务器类型等。curl -o filename.url http://example.com/file:下载文件并保存为指定文件名。curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://api.example.com:发送POST请求。
wget:另一个经典的命令行下载工具,支持递归下载、断点续传。wget -c http://example.com/large.iso可以继续未完成的下载 (-c表示 continue)。
5.4 文本搜索与处理:grep,find
grep(Global Regular Expression Print):在文件中搜索匹配指定模式的行。它是文本处理的基石。grep "error" /var/log/syslog:在系统日志中搜索包含“error”的行。grep -r "function_name" /path/to/src/:递归(-r)搜索目录下所有文件。grep -i "warning" file:忽略大小写(-i)搜索。grep -v "INFO" file:反向选择,输出不包含“INFO”的行。grep -E "error|fail" file:使用扩展正则表达式(-E),匹配“error”或“fail”。grep -c "pattern" file:只统计匹配的行数。- 常与管道
|连用:ps aux | grep nginx。
find:在目录树中查找文件,功能极其强大。find /home -name "*.txt":在/home目录下查找所有.txt文件。find . -type f -mtime -7:在当前目录(.)下查找过去7天内修改过(-mtime -7)的普通文件(-type f)。find /var/log -size +10M:查找/var/log下大小超过10MB的文件。find . -name "*.tmp" -delete:查找并删除所有.tmp文件(慎用!先不加-delete运行确认结果)。find . -type f -exec grep -l "search_string" {} \;:查找包含特定字符串的文件。-exec参数允许对找到的每个文件执行命令。
6. 效率工具层:管道、重定向与文本三剑客
这是将简单命令组合成复杂工作流的艺术,也是Linux命令行生产力爆炸性提升的关键。
6.1 管道与重定向:|,>,>>,<,2>&1
- 管道
|:将一个命令的标准输出作为下一个命令的标准输入。这是Linux哲学“一个程序只做好一件事,并通过管道协作”的完美体现。- 例如:
ps aux | grep python | wc -l统计正在运行的Python进程数量。
- 例如:
- 输出重定向
>:将命令的输出重定向到文件,会覆盖原文件内容。ls > filelist.txt。 - 追加输出重定向
>>:将命令的输出追加到文件末尾。echo "new line" >> file.txt。 - 输入重定向
<:将文件内容作为命令的输入。sort < unsorted.txt > sorted.txt。 - 错误重定向
2>:标准错误(文件描述符2)重定向。command 2> error.log。 - 合并标准输出和错误输出
2>&1:将标准错误重定向到标准输出。常用于将命令的所有输出都记录到文件或通过管道传递:command > output.log 2>&1或command 2>&1 | grep error。
6.2 文本处理三剑客:awk,sed,vim
awk:不仅仅是一个命令,它是一门强大的文本处理编程语言。它擅长处理结构化文本(如日志、CSV),按行处理,并可以按列(字段)进行操作。awk '{print $1}' file.txt:打印文件每一行的第一列(默认以空格或制表符分隔)。awk -F',' '{print $2}' data.csv:指定逗号,作为字段分隔符(-F','),打印第二列。awk '$3 > 100 {print $0}' log.txt:如果第三列的值大于100,则打印整行($0)。awk 'BEGIN{sum=0} {sum+=$1} END{print sum}' numbers.txt:计算第一列的总和。BEGIN和END块分别在处理开始前和处理结束后执行。awk是系统管理员和开发者的利器,用于快速生成报告、数据提取和转换。
sed(Stream Editor):流编辑器,主要用于对文本进行过滤和转换。它按行处理,基于模式匹配进行替换、删除、插入等操作。sed 's/old/new/g' file.txt:将文件中所有old替换为new。s表示替换,g表示全局(一行内所有匹配)。sed -i.bak 's/foo/bar/g' file.txt:直接修改原文件(-i),并创建备份文件file.txt.bak。sed '/^#/d' config.txt:删除所有以#开头的行(常用于删除配置文件中的注释)。sed -n '10,20p' file.txt:只打印文件的第10到20行(-n抑制默认输出,p打印)。sed在处理大量文本的批量替换、删除空行、提取特定行等场景下效率极高。
vim:一个模态文本编辑器。虽然学习曲线陡峭,但一旦掌握,编辑效率远超普通编辑器。它不是一条命令,而是一个环境。这里只提几个最核心的生存命令:- 打开文件:
vim filename - 模式切换:这是关键。启动后处于普通模式(按
Esc键总能回到此模式)。在普通模式下按i进入插入模式(开始编辑文字)。按:进入命令行模式(执行保存、退出等命令)。 - 保存与退出(在命令行模式下):
:w保存:q退出:wq或:x保存并退出:q!不保存强制退出
- 移动光标(普通模式下):
h(左),j(下),k(上),l(右)。gg跳到文件首,G跳到文件尾。 - 搜索(普通模式下):
/keyword向下搜索,?keyword向上搜索,按n查找下一个。 - 对于新手,可以先掌握
vimtutor命令,它会启动一个交互式教程,是学习vim的最佳起点。
- 打开文件:
7. 系统信息与帮助:uname,history,man,which
uname:打印系统信息。uname -a显示所有信息(内核名称、主机名、内核版本、系统架构等)。uname -r专门查看内核版本。history:查看当前用户在终端中执行过的命令历史。可以用!n(n是历史编号)重新执行第n条命令,或用!!执行上一条命令。history | grep keyword可以搜索历史命令。man(Manual):命令的官方手册。遇到任何不熟悉的命令,第一反应应该是man command。手册页结构清晰,包含描述、语法、选项、示例等。按/可以搜索,q退出。which:显示某个命令的完整路径。例如which python会告诉你系统默认调用的python命令位于哪个目录。这在存在多个版本时非常有用。alias:创建命令别名。可以将复杂的命令简化,例如alias ll='ls -alF'。在~/.bashrc中定义的别名会在每次打开新终端时生效。
8. 压缩与归档:tar,gzip,zip
在服务器间传输文件或备份时,压缩和打包是家常便饭。
tar(Tape Archive):最初用于磁带备份,现在是标准的归档工具,将多个文件/目录打包成一个.tar文件(注意,它默认不压缩)。- 创建归档:
tar -cvf archive.tar /path/to/dir(c=create创建,v=verbose显示过程,f=file指定文件名) - 解压归档:
tar -xvf archive.tar(x=extract解压) - 查看归档内容:
tar -tvf archive.tar(t=list列出)
- 创建归档:
- 结合压缩:
tar通常与压缩工具联用。.tar.gz或.tgz:tar -czvf archive.tar.gz /path(z代表用gzip压缩),解压用tar -xzvf archive.tar.gz。.tar.bz2:tar -cjvf archive.tar.bz2 /path(j代表用bzip2压缩,压缩率更高但更慢),解压用tar -xjvf archive.tar.bz2。.tar.xz:tar -cJvf archive.tar.xz /path(J代表用xz压缩),解压用tar -xJvf archive.tar.xz。
gzip/gunzip:单独的压缩/解压工具。gzip file.txt会生成file.txt.gz并删除原文件。gunzip file.txt.gz解压。zip/unzip:处理.zip格式的压缩文件,跨平台兼容性好。zip -r archive.zip dir/递归压缩目录。unzip archive.zip解压。
9. 用户与权限进阶:sudo,su,passwd,useradd
sudo(SuperUser DO):以超级用户(或其他用户)的身份执行命令。这是执行需要root权限操作的安全方式,避免了直接使用root账户。系统通过/etc/sudoers文件配置哪些用户可以使用sudo以及能执行哪些命令。sudo apt update:以root权限更新软件包列表。sudo -i或sudo su -:启动一个root用户的交互式shell(操作需极其谨慎)。
su(Switch User):切换用户。su username切换到指定用户,需要输入该用户的密码。su - username中的-会同时切换环境变量到目标用户的环境,更彻底。passwd:修改用户密码。普通用户只能修改自己的密码。root用户可以修改任何用户的密码:passwd username。useradd/adduser:创建新用户。adduser是一个更友好的交互式脚本,会提示设置密码等信息,而useradd是底层命令,需要更多参数。通常推荐使用adduser。
10. 实操心得与避坑指南
命令背得再熟,没有实战经验也容易踩坑。下面分享一些我多年积累的、教科书里不一定写的“血泪教训”。
10.1 安全第一:rm命令的终极防护
误删是运维和开发中最常见的灾难之一。除了前面提到的为rm,cp,mv设置-i别名外,还有更保险的做法:
- 使用
trash-cli:安装一个命令行回收站工具。trash-put file将文件移到回收站,而不是永久删除。这给了你反悔的机会。 - 养成“先
ls,后rm”的习惯:尤其是在使用通配符*时。计划执行rm *.log前,先执行ls *.log确认一下会匹配到哪些文件。 - 对重要目录设置
chattr +i:使用chattr +i /critical/dir给目录加上“不可修改”属性,连root用户都无法删除或重命名其中的文件。需要修改时再用chattr -i解除。注意:这会影响正常操作,仅用于极端保护。 - 备份!备份!备份!:任何自动化删除脚本上线前,必须有完备且可验证的备份机制。
rsync是一个优秀的增量备份工具。
10.2 高效搜索:find与grep的组合艺术
单独使用find或grep已经很强,组合起来威力更大,但要注意性能。
- 在大量文件中搜索文本:
find /path -type f -name "*.log" -exec grep -l "error" {} \;这个命令会为每个找到的文件启动一个grep进程,如果文件很多,效率很低。 - 更高效的做法:
find /path -type f -name "*.log" -print0 | xargs -0 grep -l "error"。这里-print0和xargs -0配合,可以正确处理包含空格的文件名,并且xargs会将多个文件一次性传给grep,大大减少进程启动开销。 - 最快的做法(如果支持):
grep -r --include="*.log" "error" /path。grep自己的递归搜索通常已经优化得很好。
10.3 终端多路复用:tmux或screen
如果你通过SSH连接到服务器工作,最怕的就是网络一断,正在运行的命令也跟着中断。tmux或screen可以创建持久化的会话,即使断开连接,任务也在后台继续运行,重连后可以恢复。
- 基本流程:连接服务器后,先运行
tmux新建一个会话。然后在这个会话里进行所有工作。 - 断开连接:按
Ctrl+b,然后按d(detach)。你的会话会在后台保持运行。 - 重新连接:再次登录服务器,运行
tmux attach就能回到之前的会话,所有窗口和命令状态都保持不变。 - 窗口管理:
tmux还支持分割窗口 (Ctrl+b %垂直分割,Ctrl+b "水平分割),切换窗口等,是远程工作的必备神器。screen功能类似,但tmux的配置更现代、更强大。
10.4 命令历史的高级用法
history命令不只是看看而已。
Ctrl+r:进入反向搜索模式,输入关键词,可以动态搜索历史命令,按Ctrl+r继续向前搜索,找到后按回车执行。这比用history | grep快得多。!$:代表上一个命令的最后一个参数。例如,你刚执行了ls /very/long/path/to/file.txt,接下来想用cat查看它,只需输入cat !$即可。!!:执行上一条命令。当你执行一条需要sudo权限但忘了加的命令时,可以快速sudo !!。- 在
~/.bashrc中设置HISTTIMEFORMAT="%F %T ",可以让history命令显示每条命令的执行时间,便于回溯。
10.5 利用好命令的--help和man页
最后,也是最重要的经验:官方文档是你最好的朋友。任何命令,加上--help或-h参数,通常都会给出一个简洁的参数说明。而man command则会提供最权威、最详细的文档,包括描述、所有选项、返回值、环境变量、示例等。养成遇到不确定的参数先查man的习惯,远比在网上搜索零碎的博客要可靠和高效。man页里还有一个SEE ALSO部分,会列出相关命令,是发现新工具的好途径。
