我第一次接触到Linux基本指令时,是在一台没有图形界面的服务器上,屏幕只有一个黑色的终端和闪烁的光标。身边的老同事丢给我一句话:“先 cd,再 ls,看到日志就用 tail -f 滚着看。”当时我连 cd 是切换目录都不确定,硬着头皮敲了一下午,误删过文件、改错过权限,甚至不知道该按 Ctrl+C 来终止命令。今天回头看,Linux基本指令没那么玄,它就是一套“定位—操作—观察—组合”的循环。这篇笔记写给刚入门的朋友,也写给那些马上就要去面试、被问“linux常用命令大全”时突然脑子一片空白的人。这篇文章覆盖文件目录操作、日志查询、权限用户、网络下载、系统进程这些日常最高频的场景,每一条命令都附上我在真实项目里怎么用、踩过什么坑,尽量让新人少走弯路。
1. 先找准你在目录树里的位置:pwd、ls、cd那些被低估的细节
很多新人学“linux基本指令”容易陷入一个误区:上来就死记 cp、mv、rm 的参数,结果真到服务器上,面对一屏输出根本不知道自己在哪、该往哪走。所以我想先花点篇幅把文件目录的“定位感”建立起来,这三条命令虽然基础,但几乎所有操作都建立在它们之上。
Linux 的文件系统就像一棵倒挂的树,根目录是 /,下面挂着 /etc、/home、/var、/usr 这些目录。你敲命令时永远会有一个“当前工作目录”,很多相对操作都是基于它展开的。我见过新手在某个目录下执行脚本,明明文件就在旁边,系统却提示找不到,其实就是没有建立起“当前位置”这个概念。
1.1 pwd:先搞清楚自己在哪
pwd(print working directory)的作用是打印当前工作目录的绝对路径。当你 SSH 登录一台服务器,或者刚打开终端时,最好先敲一下它:
bash复制$ pwd
/home/zhangsan
看到这个输出,你就知道:我现在在自己用户的家目录下。这个习惯尤其重要,因为你永远不知道某些自动化工具或者别人给你的机器,登录后默认目录会不会被改到奇怪的地方。
1.2 ls:目录里到底有什么
ls(list)负责列出目录内容。它可能是你每天敲得最多的命令,常用参数我整理成了表格:
| 命令 | 作用 | 使用场景 |
|---|---|---|
ls |
列出文件和文件夹名 | 最基础用法 |
ls -l |
显示详细信息(权限、属主、大小、时间) | 查看文件属性 |
ls -a |
显示隐藏文件(以 . 开头的) |
查看配置文件 |
ls -h |
让文件大小以 K/M/G 显示 | 常和 -l 配合,如 ls -lh |
ls -t |
按修改时间倒序排列 | 快速找最新文件 |
这里重点说 ls -l 的输出,很多教材跳过了这一行,但读不懂它,后面学到权限一定会卡住:
bash复制-rw-r--r-- 1 root root 4096 Jan 12 10:30 app.log
第一列 -rw-r--r-- 表示文件类型和权限:- 是普通文件,d 是目录;后面的 9 个字符每 3 个一组,依次是属主权限、属组权限、其他人权限。这一块放到第 4 节仔细讲。第二列是硬链接数,第 3、4 列是属主和属组,第 5 列是文件大小(单位是字节),后面是修改时间和文件名。
另外,ls 支持通配符,这个很容易被当成进阶技能,其实它很基础:
bash复制ls /var/log/*.log # 列出 /var/log 下所有 .log 结尾的文件
ls ???.txt # 列出文件名刚好三个字符的 .txt 文件
1.3 cd 和路径:怎么走最省事
cd(change directory)是切换目录,最常见用法如下:
bash复制cd /etc # 绝对路径,直接跳到 /etc
cd .. # 回到上一级目录
cd ~ # 回到当前用户的家目录
cd - # 回到上一次所在目录(这个很实用)
推荐一个习惯:在交互式终端里,路径打一半按 Tab 键自动补全。如果你按 Tab 没反应,通常是路径写错了,或者当前用户没有访问权限。另一个习惯是 cd -,在日志目录和项目目录之间来回切换时效率极高。
还有一点容易忽略:在脚本里写路径,尽量写绝对路径。因为脚本的执行位置可能和你预期的不一样,基于相对路径的逻辑一旦工作目录改变,就会出现“找不到文件”这种莫名其妙的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件与目录的增删改查:每天都要打几十遍的核心命令
有了定位基础,接下来就进入“linux基本指令”的重头戏:操作文件。这些命令本身不难,难的是知道每个参数在这个场景下意味着什么,以及哪些动作有风险。
2.1 mkdir 和 touch:创建目录与文件的正确姿势
创建目录用 mkdir。只要你不加参数,一次只能建一层;想一次建出嵌套目录,加 -p:
bash复制mkdir -p /data/web/nginx/logs
这条命令直接把三级目录建出来,如果父目录已存在也不会报错。这个参数是新手的救星,我见过有人一层层 mkdir 建到怀疑人生。
创建空文件,很多人想到 touch。但它的真实用途是更新时间戳,创建空文件只是顺带。如果你手动改了某个配置文件,系统判断是否需要重启服务,经常就看文件时间戳有没有变化。具体用法很简单:
bash复制touch /tmp/empty.txt
touch main.c # 如果文件已存在,更新时间戳,不会清空内容
2.2 cp、mv、rm:复制、移动和删除的注意事项
拷贝文件用 cp。最容易踩的坑是复制目录时忘了 -r(recursive 递归),系统直接提示 cp: -r not specified; omitting directory 'xxx'。如果你希望复制后保留原文件的权限、时间戳这些属性,再加 -p。默认 cp 是覆盖复制,想在覆盖前收到提示,用 -i:
bash复制cp -r /opt/project /backup/project
cp -p config.conf config_backup.conf
cp -i app.conf app_backup.conf # 如果存在会询问是否覆盖
移动目录或文件用 mv。它同时承担“重命名”功能,因为 mv 的逻辑就是“把 A 这个对象搬到 B 这个位置”,名字自然可以改:
bash复制mv old_name.txt new_name.txt
mv /home/user/file /home/user/docs/
这里有一个很多人不理解的细节:mv 跨文件系统时,本质上是先复制再删除原文件。如果文件很大,速度会明显比同分区移动慢,而且期间如果断电,可能会留下一个不完整的文件。所以生产环境移动大文件时,我一般用 rsync 这种带校验的工具,而不是纯 mv;基础阶段知道这个区别就够了。
删除命令 rm,我必须先说一句:这是所有 Linux 基本指令里最容易出事的几个字母之一。
bash复制rm file.txt
rm -r dir/ # 递归删除目录
rm -f file.txt # 忽略不存在的文件,不提示(force)
rm -rf 是很多运维事故的源头。我见过同事在自己家目录下想删除某个子目录,结果手一抖多敲了一个空格,把父目录整个删了。我的习惯是:删除之前一定先用 ls 看一眼要删的目标;能不用的 -f 就不用;可以在 ~/.bashrc 里给 rm 设置一个别名:
bash复制alias rm='rm -i'
这样 rm 默认会逐个询问,等于多了一道保险。需要批量操作时,再在命令前面加一个 \rm 绕过别名,或者直接写 /bin/rm。
2.3 find:找不到文件时用它
查找文件用 find。这是面试时经常被问到的命令,也是实际工作中避免“大海捞针”的关键。
bash复制find /data -name "nginx.conf" # 按文件名精确查找
find /data -name "*.log" # 按后缀查
find /data -type d -name "logs" # 只看目录
find /data -size +100M # 查找大于100MB的文件
find /data -mtime -7 # 最近7天修改过的文件
find 还能直接对结果做操作,比如把找到的日志文件列出来再清理:
bash复制find /var/log -name "*.log" -exec ls -lh {} \;
这个写法里的 {} 表示每次找到的文件,\; 表示 exec 命令结束。新手看到这行通常觉得晦涩,其实记住“-exec 后跟一条命令,用花括号代替结果,用反斜杠加 ; 结束”这个模板就行。它比先 find 再一条条手动处理高效得多。
3. 查日志、读文件、看动态输出:cat、less、tail和grep配合起来有多强
如果说文件操作命令是“四肢”,那文本查看和过滤命令就是“眼睛”。尤其在做服务端开发或运维时,大部分时间都花在读日志、分析日志上。
3.1 cat 适合小文件,less 适合大文件
很多人第一个学会的是 cat。它是 concatenate 的缩写,本意是拼接文件内容,所以:
bash复制cat /etc/hostname # 查看文件内容
cat a.txt b.txt > c.txt # 把a和b拼起来写入c
但 cat 会把整个文件一次性输出到屏幕。文件只有几行时用没问题,几十 MB 的日志用它就是灾难,终端会立刻被滚屏淹没。所以要养成习惯:看大文件用 less。
less 是个交互式分页查看器,支持方向键上下翻页、按空格往下翻、按 q 退出。最有用的功能是通过 /关键字 查找匹配内容,按 n 跳到下一处,按 N 跳到上一处:
bash复制less /var/log/syslog
# 进入之后直接输入 /error 回车,就能逐条定位 error
3.2 head 和 tail:看头部、尾部和实时日志
面试和日常里最常用的其实是 head 和 tail。head 看文件前几行,默认 10 行;tail 看末尾几行。重点说 tail -f,f 是 follow,也就是持续追踪文件新增内容:
bash复制tail -f /var/log/nginx/access.log
你开着这条命令,只要有人访问网站,日志就会实时滚出来。排查生产问题、观察应用启动状态时,这条命令使用频率非常高。如果只想看最后 100 行,写成 tail -100 或 tail -n 100:
bash复制tail -n 50 app.log
head -20 app.log
3.3 grep 和管道:从日志里捞出真正关心的内容
配合 grep,这套组合拳的威力才真正体现。grep 是做按行匹配搜索的,基本用法:
bash复制grep "ERROR" app.log # 列出所有包含ERROR的行
grep -i "error" app.log # 忽略大小写
grep -n "timeout" app.log # 带行号输出
grep -v "#" config.conf # 反选,输出不匹配的行
grep -r "redis" /etc/ # 递归搜索目录下所有文件
还有一个容易被忘记但非常有用的选项:-A 和 -B 显示匹配行的上下文。比如要查某次报错前后发生了什么:
bash复制grep -n -A 5 -B 3 "OutOfMemory" server.log
这条命令输出匹配行的同时,把后面 5 行、前面 3 行也带出来,排查日志时不用再单独翻上下文。
把多个命令用管道 | 串起来,是 Linux 指令真正的
