1. 从“黑窗口”到“老朋友”:为什么你需要一份自己的Linux命令备忘录
如果你刚接触Linux,面对那个只有光标闪烁的黑色终端窗口,是不是感觉有点无从下手?或者你已经用了一段时间,但每次想改个文件权限、查个进程,还是得去网上搜半天命令?别担心,这种感觉每个Linux用户都经历过。Linux命令行,这个看似冰冷、由字母和符号组成的工具集,其实是与系统深度对话的桥梁。它不像图形界面那样直观,但一旦掌握,其高效、精准和强大的能力会让你再也回不去。
我刚开始用Linux那会儿,也是把各种命令写在便利贴上,贴满显示器边框。后来发现,零散的笔记效率太低,真正有用的是一套自己整理、理解透彻的“内功心法”。这份合集,就是我结合多年运维和开发经验,从海量命令中提炼出的“最高频”核心。它不追求大而全,而是聚焦于那些你几乎每天都会用到的操作,并解释清楚每个命令“为什么”要这么用,以及背后可能踩到的“坑”。
无论你是需要部署服务的后端开发者,管理服务器的运维工程师,还是单纯想更高效使用电脑的极客,这份指南都能帮你把Linux终端从“陌生工具”变成“得力助手”。我们不仅讲命令怎么敲,更会深入文件系统结构、权限设计哲学和进程管理逻辑,让你知其然,更知其所以然。
2. 基石认知:理解Linux的“世界观”与核心结构
在挥舞命令这把“利剑”之前,我们必须先了解它运行的“战场”——Linux操作系统本身的设计哲学。这绝非枯燥的理论,而是理解后续所有操作的基础。
2.1 操作系统的角色:不只是软件,更是资源大管家
通常我们说装个软件,比如浏览器、办公套件,它们是在一个已经搭建好的平台上运行。而操作系统(OS),就是这个平台的奠基者和总调度。你可以把它想象成一个超级智能的写字楼物业管理系统。硬件(CPU、内存、硬盘、网卡)是这栋楼里的电梯、供电、网络管线等基础设施。操作系统(物业系统)负责:
- 资源分配与管理:决定哪个程序(租户)能用多少CPU时间(电梯时长)、多大内存(办公面积)、硬盘空间(仓库)。
- 提供统一接口:为所有软件(租户)提供一套标准的用水、用电、网络接口(系统调用),让软件开发者不用关心底层硬件是“柴油发电机”还是“国家电网”。
- 抽象与隔离:让每个程序都感觉自己独享CPU和内存,互不干扰,就像给每个租户提供了独立的、安全的办公单元。
Linux是众多OS中的一种,以其开源、稳定、高效和安全著称,尤其在全球的服务器领域占据绝对主导地位。它的强大,很大程度上源于其清晰、严谨的设计结构。
2.2 Linux文件系统:一切皆文件的哲学与核心目录解析
Linux有一个著名设计哲学:一切皆文件。这不仅仅是文本、图片,硬件设备(如U盘、打印机)、进程信息、网络连接,甚至系统状态,都被抽象成“文件”放在目录树中。这种统一用“打开、读取、写入、关闭”来操作一切的方式,极大地简化了设计。而这一切的起点,就是根目录/。
下面这张表梳理了最核心的几个目录及其用途,理解它们是你不会在系统里“迷路”的关键:
| 目录路径 | 英文全称/含义 | 核心用途与典型内容 | 操作注意事项 |
|---|---|---|---|
/ | 根目录 | 整个文件系统的起点,所有其他目录的父目录。 | 切忌随意删除根目录下的任何你不完全理解的目录。 |
/bin | Binary | 存放系统最基础的命令(二进制可执行文件),如ls,cp,bash。这些命令在单用户维护模式(无法挂载其他分区时)也必须可用。 | 普通用户可执行,但不应在此目录存放个人脚本。 |
/etc | Etcetera(历史原因) | 系统配置文件的集中地。如网络配置 (/etc/network/)、用户信息 (/etc/passwd)、软件源 (/etc/apt/sources.list)。 | 修改前务必备份!这里的文件决定了系统的行为。 |
/home | 用户家目录 | 每个普通用户都有一个以自己用户名命名的子目录(如/home/zhangsan),用于存放个人文档、配置文件、桌面设置等。 | 用户的“主战场”,拥有最高自由度。系统盘空间告急时,常检查这里的大文件。 |
/root | 超级用户家目录 | 系统管理员(root用户)的个人目录。 | 普通用户无权访问。避免在root目录下进行日常操作,以防误操作。 |
/var | Variable | 存放经常变化的数据。如日志文件 (/var/log/)、邮件队列、网站数据 (/var/www/)、缓存文件。 | 此目录内容增长很快,是磁盘空间监控的重点区域。 |
/tmp | Temporary | 临时文件目录,所有用户都可读写。系统重启后,里面的文件通常会被清除。 | 适合存放进程间通信的临时文件,不要放重要数据。 |
/dev | Device | 设备文件目录。硬盘 (/dev/sda)、终端 (/dev/tty)、空设备 (/dev/null) 都以文件形式存在。 | 直接向某些设备文件写入数据等同于操作硬件,需格外小心。 |
/proc | Process | 虚拟文件系统,存在于内存中,是内核和进程信息的接口。通过读取如/proc/cpuinfo(CPU信息)、/proc/meminfo(内存信息)、/proc/[PID]/(某个进程详情)来获取实时系统状态。 | 这里的“文件”大小常显示为0,用cat或less查看其内容。 |
/usr | Unix System Resources | 次级层次结构,存放用户安装的应用程序、库文件、文档等。可理解为“用户软件资源库”。其下也有/usr/bin(非基础命令)、/usr/lib(库文件)等。 | 大多数通过包管理器安装的软件都在这里。 |
注意:不同的Linux发行版(如Ubuntu, CentOS)目录结构可能略有差异,但核心目录的用途基本一致。理解
/etc管配置、/home管个人、/var管变化、/proc管状态,就能把握住脉络。
3. 生存必备:文件与目录操作命令精讲
现在,我们进入实战环节。文件与目录操作是使用Linux的日常,以下命令的熟练程度直接决定了你的效率。
3.1 导航与查看:弄清楚“我在哪”和“这里有什么”
pwd(Print Working Directory):这是你的“GPS”。在复杂的目录树中穿梭时,随时用pwd确认当前绝对路径。cd(Change Directory):切换目录的“传送门”。cd /path/to/dir:切换到绝对路径。cd dir或cd ./dir:切换到当前目录下的子目录(相对路径)。cd ..:返回上一级目录。两个点 (..) 代表父目录,这是一个关键概念。cd ~或直接cd:快速回到当前用户的家目录。cd -:在最近两次所在目录之间快速切换,非常实用。
ls(List):列出目录内容,使用频率最高的命令之一。ls:简单列出文件名(隐藏文件不显示)。ls -l:长格式列表,显示详细信息(权限、所有者、大小、修改时间)。-l是必须掌握的参数。ls -a:显示所有文件,包括以点.开头的隐藏文件(如.bashrc配置文件)。ls -la或ls -l -a:结合上述两者,最常用的查看方式。ls -lh:-h参数使文件大小以人类可读的形式(K, M, G)显示,配合-l使用 (ls -lh) 体验更佳。
3.2 创建、删除与操作:塑造你的文件世界
mkdir(Make Directory):创建目录。mkdir new_dir:创建单个目录。mkdir -p a/b/c/d:递归创建多级目录。如果a不存在,它会自动创建a,再在a下创建b,以此类推。这是避免“目录不存在”错误的利器。
rmdir(Remove Directory):删除空目录。rmdir empty_dir。如果目录非空,此命令会失败。rm(Remove):删除文件或目录。这是最危险的命令之一,请谨慎使用!rm file.txt:删除文件。rm -r directory/:递归删除目录及其内部所有内容。-r(recursive) 是关键。rm -rf directory/:在递归删除基础上,-f(force) 表示强制删除,不进行任何确认提示。rm -rf /这样的命令会毁灭整个系统(需要root权限,但极其危险)。强烈建议新手永远不要养成使用-f的习惯,先使用-ri。rm -ri directory/:-i(interactive) 在删除每个文件前交互式询问,-r递归。这是相对安全的做法。
cp(Copy):复制。cp source.txt dest.txt:复制文件。cp -r source_dir/ dest_dir/:递归复制整个目录。cp -i source.txt dest/:-i在覆盖目标前提示确认,防止误覆盖重要文件。
mv(Move):移动或重命名。它在同一文件系统内是“重命名”操作,速度极快;跨文件系统则相当于“复制+删除”。mv old_name.txt new_name.txt:重命名文件。mv file.txt /path/to/dir/:将文件移动到目标目录。mv dir1/ dir2/:如果dir2存在,则将dir1移动到dir2内;如果dir2不存在,则将dir1重命名为dir2。
touch:主要功能是更新文件的时间戳(访问和修改时间)。如果文件不存在,则创建一个空文件。常用于触发某些依赖时间戳的构建工具,或快速创建空文件。
3.3 文件内容查看与编辑:从阅读到修改
cat(Concatenate):连接文件并打印到标准输出。适合查看内容较少的文本文件。cat file.txt:查看文件全部内容。cat file1.txt file2.txt:依次显示多个文件内容。cat > newfile.txt:从键盘输入创建新文件,按Ctrl+D结束输入。不常用,因为有更好的编辑器。
less/more:分页查看器,用于查看大文件。less比more功能更强(支持上下翻页、搜索等),是事实上的标准。less huge_log.log:进入浏览模式。常用操作:空格键(向下翻页),b键(向上翻页),/keyword(搜索),q键(退出)。
head/tail:查看文件开头或结尾部分。head -n 20 file.log:查看文件前20行。tail -n 30 file.log:查看文件末尾30行。tail -f app.log:动态追踪文件末尾。这个命令在实时查看日志时无比重要,它会持续显示文件新增的内容,直到你按Ctrl+C中断。
vi/vim:强大的终端文本编辑器。学习曲线陡峭,但一旦掌握,效率倍增。它有三种模式:- 普通模式 (Normal Mode):刚打开文件时进入。此模式下按键是命令,如
dd(删除整行),yy(复制整行),p(粘贴),/(搜索)。 - 插入模式 (Insert Mode):在普通模式下按
i(insert)、a(append)、o(open new line) 等键进入。此时可以像普通编辑器一样输入文本。 - 命令行模式 (Command-Line Mode):在普通模式下按
:进入。可以执行保存、退出等命令。:w保存,:q退出,:wq保存并退出,:q!不保存强制退出。- 初学者可以先记住:按
i开始编辑,编辑完后按Esc回到普通模式,再输入:wq回车保存退出。
- 普通模式 (Normal Mode):刚打开文件时进入。此模式下按键是命令,如
实操心得:对于文件删除,我的血泪教训是:永远先
ls确认一下目标路径,再用rm。尤其是在使用通配符*时,rm *.log和rm * .log(多了一个空格)是天壤之别。建议为rm设置别名到rm -i(在~/.bashrc中加入alias rm='rm -i'),增加一道安全锁。
4. 权限与用户管理:理解Linux的安全基石
Linux是一个多用户系统,精密的权限机制是其安全性的核心。不理解权限,你会在执行命令时频繁遇到“Permission denied”。
4.1 用户与用户组:权限的归属体系
- 用户 (User):系统资源的最终使用者。每个用户有唯一的用户名和UID(用户ID)。
root用户是超级管理员,UID为0,拥有至高无上的权限。 - 用户组 (Group):用户的集合。方便对一组用户进行统一的权限分配。每个组有唯一的GID(组ID)。创建用户时,系统会默认创建一个同名的私有组。
相关命令:
whoami:查看当前登录的用户名。id [username]:查看指定用户(或自己)的UID、GID及所属组列表。groups [username]:查看用户属于哪些组。su - username:切换用户。-符号代表使用目标用户的完整环境(如自己的bash配置)。从普通用户切换至root需要输入root密码,而root切换至任何用户都无需密码。sudo command:以超级用户权限执行一条命令。需要当前用户在sudoers配置列表中。比直接切换到root更安全、更推荐。useradd/usermod/userdel:添加、修改、删除用户(通常需要root权限)。passwd [username]:修改用户密码。普通用户只能修改自己的密码。
4.2 文件权限详解:rwx与数字表示法
使用ls -l查看文件详情时,第一列就是权限信息,如-rwxr-xr--。
- 第一个字符:
-表示普通文件,d表示目录,l表示链接文件。 - 后面9个字符,每3个一组,分别代表:
- 前3位:文件所有者 (Owner)的权限。
- 中3位:文件所属用户组 (Group)的权限。
- 后3位:其他用户 (Others)的权限。
- 每组中的三个字符,依次表示:
r(Read):读权限。对文件是可查看内容,对目录是可列出内容(ls)。w(Write):写权限。对文件是可修改,对目录是可创建/删除文件。x(Execute):执行权限。对文件是可作为程序运行,对目录是可进入(cd)。
权限的数字表示法:将rwx看作二进制位,有权限为1,无为0。
r--= 100 (二进制) = 4 (十进制)-w-= 010 = 2--x= 001 = 1rwx= 111 = 7 (4+2+1)r-x= 101 = 5 (4+1)
因此,rwxr-xr--用数字表示就是754(所有者7,组5,其他4)。
4.3 权限修改命令:chmod与chown
chmod(Change Mode):修改文件权限。- 数字模式(最常用):
chmod 755 script.sh。将script.sh设置为:所有者可读可写可执行(7),组用户可读可执行(5),其他用户可读可执行(5)。这是可执行脚本的常见权限。 - 符号模式:
chmod u+x,g-w,o=r file.txt。u(user/所有者)增加执行权限,g(group)去掉写权限,o(others)设置为只读。更灵活但稍复杂。
- 数字模式(最常用):
chown(Change Owner):修改文件的所有者和所属组。chown user:group file.txt:将文件所有者和组都修改。chown user file.txt:仅修改所有者。chown :group file.txt:仅修改所属组。- 通常需要root权限才能执行此命令。
注意事项:给目录赋予
x权限是进入该目录的前提。一个常见的坑是,目录只有r权限时,你可以ls看到文件名,但无法cd进入,也无法访问目录内的文件属性。目录的w权限意味着可以在其中创建和删除文件,即使你对文件本身没有写权限。这有时会导致奇怪的现象:你无法修改一个文件,却可以删除它(如果它的父目录你有w权限)。
5. 进程管理与系统窥探:掌控运行中的系统
程序是静态的指令集,而进程是程序的一次动态执行。管理进程就是管理正在运行的任务。
5.1 进程查看:ps与top
ps(Process Status):查看进程快照。ps aux:最常用的组合之一。a显示所有用户进程,u显示详细格式(包括用户、CPU、内存等),x显示没有控制终端的进程(如后台服务)。ps -ef:另一种常用格式,显示全格式列表,包含PPID(父进程ID)。- 通常结合
grep过滤:ps aux | grep nginx查找所有包含“nginx”的进程。
top/htop:动态、交互式查看进程和系统资源占用(CPU、内存)。htop是top的增强版,界面更友好,支持鼠标操作,强烈建议安装使用。在top界面中,按q退出,按k可以杀死指定PID的进程。
5.2 进程控制:kill与前后台作业
kill:向进程发送信号。默认发送SIGTERM(15),即终止信号,允许进程进行清理工作。kill PID:优雅地终止进程。kill -9 PID:发送SIGKILL(9) 信号,强制立即终止进程。这是“杀手锏”,进程无法捕获或忽略,可能导致数据丢失或状态不一致,应在kill无效时使用。killall process_name:根据进程名杀死所有同名进程。
- 前后台作业控制:
command &:在命令末尾加&,让命令在后台运行。Ctrl + Z:将当前前台运行的程序暂停,并放入后台。jobs:查看当前shell的后台作业列表。fg %n:将后台第n号作业调至前台继续运行。bg %n:让后台第n号暂停的作业在后台继续运行。
nohup:让进程在用户退出登录后仍继续运行,并且忽略挂断信号。nohup your_command > output.log 2>&1 &:这是启动一个持久化后台服务的经典命令组合。nohup:免疫挂断。your_command:你要运行的程序。> output.log:将标准输出重定向到output.log文件。2>&1:将标准错误 (2) 也重定向到标准输出 (1) 所在的地方(即同一个日志文件)。&:放入后台运行。
5.3 系统状态与信息查询
df -h:查看磁盘空间使用情况。-h参数使结果易读。du -sh [目录]:查看指定目录的磁盘使用总量。-s显示总计,-h易读。free -h:查看内存使用情况。uname -a:查看系统内核信息(内核版本、主机名等)。which command:查看某个命令的完整安装路径。例如which python。man command:查看命令的官方手册,是最权威的文档。按q退出。
6. 软件安装与管理:三大派系的包管理器
在Linux上安装软件,不同于Windows的“下一步”安装,主要通过包管理器。这能自动解决依赖关系,是Linux生态的一大优势。
6.1 安装方式概览
- 源码编译安装 (
tar.gz):最原始、最灵活的方式。通常步骤是./configure(配置)->make(编译)->make install(安装)。能获得最佳性能和控制,但过程繁琐,依赖需手动解决。 - 包管理器安装:主流方式,分为两大阵营:
- Debian/Ubuntu 系:使用
apt(Advanced Package Tool)。命令如apt update,apt install package_name。 - RHEL/CentOS/Fedora 系:使用
yum(Yellowdog Updater Modified) 或新一代的dnf。命令如yum install package_name。
- Debian/Ubuntu 系:使用
- RPM/DEB包直接安装:下载
.rpm(Red Hat系) 或.deb(Debian系) 包文件,用rpm -i或dpkg -i安装。但不会自动处理依赖,不推荐新手。
6.2 核心命令详解(以CentOS的yum和Ubuntu的apt为例)
对于基于RPM的发行版(如CentOS):
yum search keyword:搜索软件包。yum install package_name:安装软件包及其所有依赖。yum update package_name:更新指定软件包。yum update:更新所有可更新的软件包(系统升级)。yum remove package_name:卸载软件包(保留配置文件)。yum erase package_name:卸载软件包及其配置文件。rpm -qa | grep package_name:查询某个包是否已安装。rpm -ql package_name:查询某个已安装包的文件都装到了哪里。
对于基于DEB的发行版(如Ubuntu):
apt update:更新本地软件包索引(从服务器获取可用软件包列表)。这是安装前的好习惯。apt search keyword:搜索软件包。apt install package_name:安装软件包。apt upgrade:升级所有已安装的包(不处理依赖关系的改变)。apt full-upgrade:执行更智能的升级,可能会处理依赖关系的变更(如删除旧包)。apt remove package_name:卸载软件包(保留配置文件)。apt purge package_name:卸载软件包及其配置文件。dpkg -l | grep package_name:查询是否安装。dpkg -L package_name:列出已安装包的文件清单。
实操心得:在服务器上安装软件,尤其是生产环境,务必注意版本。直接
yum install nginx安装的可能是很旧的稳定版。如果需要新版,通常需要先添加官方的软件源(Repository)。例如,安装新版Nginx,需要先执行yum install epel-release(安装EPEL扩展源)或添加Nginx官方源。这个“配置软件源”的步骤,是新手常遇到的第一个坎。
7. 网络与连接:让系统与世界沟通
Linux服务器的大部分工作都离不开网络。
7.1 网络配置与诊断
ifconfig或ip addr:查看网络接口配置(IP地址、MAC地址等)。ifconfig是传统命令,ip命令更强大,是现代推荐的工具。ping host:测试与目标主机(域名或IP)的网络连通性。-c参数可指定发送次数,如ping -c 4 google.com。netstat或ss:查看网络连接、路由表、接口统计等信息。ss是netstat的现代替代品,速度更快。ss -tlnp:查看所有监听的TCP端口,以及对应的进程。-tTCP,-l监听,-n数字显示,-p显示进程。
curl与wget:命令行下载工具或HTTP客户端。curl -O http://example.com/file.tar.gz:下载文件。curl -I http://example.com:仅获取HTTP响应头,常用于检查网站状态。wget http://example.com/file.tar.gz:下载文件,支持断点续传。
7.2 远程连接:SSH
SSH (Secure Shell) 是远程安全登录和管理Linux服务器的标准协议。
- 连接服务器:
ssh username@remote_server_ip,例如ssh root@192.168.1.100。 - 指定端口:如果服务器SSH服务不在默认的22端口,使用
-p参数:ssh -p 2222 user@host。 - 使用密钥登录(免密码,更安全):
- 本地生成密钥对:
ssh-keygen -t rsa(一直回车即可,默认保存在~/.ssh/id_rsa和~/.ssh/id_rsa.pub)。 - 将公钥上传到服务器:
ssh-copy-id user@host。这会将你的公钥添加到服务器的~/.ssh/authorized_keys文件中。 - 之后登录就不再需要输入密码。
- 本地生成密钥对:
- 管理SSH服务(通常需要root权限):
systemctl start sshd:启动服务。systemctl stop sshd:停止服务。systemctl restart sshd:重启服务。systemctl status sshd:查看服务状态。
8. 文本处理三剑客:grep, sed, awk
这是三个功能极其强大的流式文本处理工具,是Shell脚本和日常文本分析的灵魂。
grep(Global Regular Expression Print):按行过滤文本,搜索匹配模式的行。grep "error" logfile:在文件中搜索包含“error”的行。grep -r "function_name" /path/to/code/:递归搜索目录下所有文件。grep -v "exclude_word" file:-v反向选择,输出不包含模式的行。grep -E "pattern1|pattern2" file:使用扩展正则表达式。
sed(Stream Editor):流编辑器,用于对文本进行替换、删除、插入等操作。sed 's/old/new/g' file:将文件中所有的“old”替换为“new”。s表示替换,g表示全局。sed -i.bak 's/old/new/g' file:-i直接修改原文件,.bak会先创建一个备份文件。sed '/pattern/d' file:删除匹配模式的行。
awk:一门强大的文本分析语言,擅长处理按列结构化的文本(如CSV、日志)。awk '{print $1, $3}' data.txt:打印文件的第一列和第三列(默认以空格或制表符分隔)。awk -F',' '{print $2}' data.csv:-F指定分隔符为逗号,打印第二列。awk '$3 > 100 {print $0}' data.txt:如果第三列的值大于100,则打印整行 ($0)。awk 'BEGIN{sum=0} {sum+=$1} END{print sum}' numbers.txt:计算第一列的总和。
掌握这三个工具的组合,可以让你在命令行中完成大部分简单的文本数据分析工作,效率远超手动操作或导入其他软件。
9. 高效工作流:组合命令与实用技巧
真正的Linux高手,善于将简单的命令通过管道 (|)、重定向 (>,>>) 和后台运行 (&) 组合起来,形成高效的工作流。
- 管道
|:将一个命令的输出作为另一个命令的输入。ps aux | grep python:先列出所有进程,然后过滤出包含“python”的行。cat logfile | grep "ERROR" | wc -l:查看日志文件中“ERROR”出现的行数。wc -l统计行数。
- 重定向:
command > file:将命令的标准输出重定向到文件,覆盖原文件。command >> file:将命令的标准输出重定向到文件,追加到文件末尾。command 2> error.log:将命令的标准错误重定向到文件。command > output.log 2>&1:将标准输出和标准错误都重定向到同一个文件。这是记录命令完整输出的常用方法。
- 命令替换
` `或$():将一个命令的输出作为另一个命令的参数。echo "Today is $(date)":date命令的输出被嵌入到echo的字符串中。tar -czf backup_$(date +%Y%m%d).tar.gz /path/to/backup:用当前日期动态生成备份文件名。
- 通配符:
*:匹配任意多个字符。rm *.tmp删除所有.tmp结尾的文件。?:匹配单个字符。ls file?.txt匹配file1.txt,fileA.txt。[abc]:匹配括号内的任意一个字符。ls file[123].txt匹配file1.txt,file2.txt,file3.txt。
- 历史与补全:
history:查看命令历史记录。!number:执行历史记录中第number条命令。!!:执行上一条命令。Ctrl + R:反向搜索历史命令,输入关键词即可查找。Tab键:命令/文件名补全,按一次自动补全,按两次显示所有可能选项。
最后,也是最重要的习惯:善用man和--help。当你不确定一个命令的用法时,man command或command --help是你最好的老师。这份合集是你探索Linux世界的起点和速查手册,但官方手册才是终极的权威指南。保持好奇心,多动手实践,很快你就会发现,这个黑色的终端窗口,是你掌控数字世界最强大的武器。