☰
Linux基础命令入门:终端文件操作与权限管理实战指南
2026/10/9 6:07:25 网站建设 项目流程

第一次打开 Linux 终端,大多数人心里都在打鼓:一个黑得发光的窗口,一行简短的文字,光标一闪一闪——我的桌面呢?我的鼠标呢?我要去哪儿点图标?其实你面前这一行,才是 Linux 最真实的样子。无论是给服务器装环境、写自动化脚本,还是以后做运维、接触嵌入式设备、云主机,最终都要回到这条“基础指令”上。图形界面是给普通用户准备的壳,真正干活的是你在终端里敲下的命令。这篇文章面向刚接触 Linux 的同学,不打算让你啃一本“命令字典”,而是把最常用的那批基础指令拆开揉碎,讲清楚每条命令解决什么问题、背后是什么逻辑、有哪些坑。你跟着敲一遍,就摸到 Linux 的脾气了。

1. 初识终端:别急着敲命令,先看懂它在跟你说话

1.1 为什么Linux一定要会命令行

很多人问过这个问题:Linux 明明有桌面版,图形界面不也能点鼠标吗?为什么非要学命令行?答案很现实:服务器通常没有桌面,嵌入式设备甚至没有屏幕,容器镜像里唯一稳定的操作入口就是命令。你在图形界面里每点一下鼠标,底层都是在调用某条命令;而你在命令行里敲的每一条命令,都是在直接和系统对话。

可以打个比方:图形界面的文件管理器像是饭店门口的迎宾员,帮你把需求转达给后厨;命令行就是直接走到后厨,对师父说“给我炒个回锅肉”。迎宾员态度再好,遇到后厨出菜慢、客人催单这种混乱时刻,你至少得听得懂师父在喊什么。等你要做自动化备份、批量部署、远程排查故障时,你会发现命令行才是效率的最终答案。

从技术层面说,Shell 是一个解释器,常见的有 bash、zsh。它把你输入的字符串按空格拆成“命令、选项、参数”,然后去系统目录里找到对应的可执行文件并执行。你敲date,其实是执行了/usr/bin/date;你敲ls,系统会在 PATH 环境变量指定的目录里找到/bin/ls。理解这一点,后面遇到“command not found”就不会发懵——要么命令没装,要么路径不在 PATH 里。

1.2 看懂提示符,少走一半弯路

终端里那一行user@ubuntu:~$不是装饰品,它自带信息量。user是当前用户名,ubuntu是主机名,~是当前目录,最后的$表示当前是普通用户。如果你切换到了管理员身份,提示符常会变成root@ubuntu:/home/user#,注意末尾从$变成了#。

这一行能帮你判断两件事:我在哪,我是谁。我带过的实习生里,有人辛辛苦苦敲了半天命令,才发现自己一直待在 root 权限下,随手一条操作就把系统配置改坏了。所以我的习惯是:只要看见#,删文件、改权限之前先停三秒,确认自己敲的是什么,再回车。

终端里还有几个快捷键,建议一开始就练成肌肉记忆:Tab补全命令和路径,Ctrl+C中断当前正在跑的命令,Ctrl+D退出当前登录,上下方向键翻历史命令。尤其是 Tab 补全,能省掉一半敲错路径的概率。

1.3 命令的通用结构和一个好帮手 man

Linux 命令的通用结构是“命令 选项 参数”,例如ls -l /home。选项通常以-开头,如-l、-a,也有长选项写法--all。短选项可以合并,比如ls -lh相当于ls -l -h。多数的选项顺序没有强制要求,但少数命令会区分先后,遇到报错时先检查语法。

如果遇到没见过的命令,不要慌。先试命令 --help,通常会有简短的参数说明;还看不懂就用man 命令,打开完整手册。man 手册里按空格翻页,按q退出,输入/关键词可以在手册内搜索。很多人问 Linux 面试题到底考什么,其实基础部分很少考冷门命令,反而很看重“遇到不认识的命令懂不懂得自己查”这个能力——这比背绕口令一样的参数清单值钱多了。

2. 文件与目录:Linux的“地址系统”没你想的难

2.1 先把地址搞清楚:绝对路径与相对路径

在 Linux 里,一切皆文件,目录也是文件。想在文件系统里找路,先分清绝对路径和相对路径。绝对路径永远从根目录/写起,比方说/etc/hosts;相对路径则从你当前所在位置开始。.代表当前目录,..代表上一级目录。可以这样理解:绝对路径是“北京市朝阳区某路某号”,无论你在哪儿都能找到;相对路径是“往前走两百米右转”,一旦你不在那个位置,就失效了。

新手最容易把根目录/和用户主目录~搞混。/是系统最顶层的目录,相当于 Windows 的磁盘根;~是你自己的家目录,通常叫/home/用户名。刚登录时终端会默认停在~,这里放的是你的配置和文档。至于/etc、/usr这些目录,里面是系统和软件文件,初学阶段先别乱翻。

迷路的时候,先敲pwd,它会把当前目录完整打印出来。很多人习惯在图形界面的文件管理器里看地址栏,但在命令行里,pwd就是你的定位器。一个建议:写脚本时尽量用绝对路径,因为脚本可能在任意目录下被调用;日常手动操作,相对路径更顺手。

2.2 目录操作三兄弟:ls、cd、mkdir

ls是 list 的缩写,列出目录内容。直接敲ls只显示文件名,我建议你习惯加参数:ls -lh能显示文件大小、修改时间、权限等,而且大小单位是 K、M、G,读起来不费劲。ls -a能显示以.开头的隐藏文件,ls -lrt则把最新修改的文件排在最后面,在日志目录里找最近一次生成的报告非常实用。

cd用来切换目录。不带参数直接回车,会回到自己的家目录~;cd -会回到上一个所在目录。我平时经常在两个目录之间来回切换,cd -比重新敲一长串路径省事太多。注意cd ..是往上一级,cd .是原地不动——别小看这点,很多人第一次敲错就懵了。

mkdir创建目录,常用参数是-p,可以一次性创建多级目录,比如mkdir -p /tmp/test/demo。接着回答很多人搜的问题:“Linux 删除文件夹命令”。空目录可以用rmdir,目录里有内容就得用rm -r 目录名。注意rm -r会连目录里的文件一起删除,而且没有回收站,回车后就是永别。

我强烈建议:文件名里不要用空格,改用-或_。如果你的文件叫my work.txt,每次敲命令都要加引号或转义符,写脚本时更是灾难。这不是强制规范,但能让你少踩很多坑。

2.3 文件操作与重命名实测:触摸、查看、复制、移动、删除

touch有两个用途:创建一个空文件,或者更新已有文件的时间戳。小文件用cat查看就够了,文件较长时用less,按空格翻页、按q退出,比cat刷屏舒服得多。

复制文件用cp,递归复制目录要加-r。cp -p可以保留原文件的权限和时间属性,做备份时非常实用;cp -a则是更完整的归档模式。移动文件或重命名用mv——很多人搜“linux 用 shell 重命名文件”,最简单的答案就是mv 旧名 新名。批量重命名需要配合循环语句,那是 shell 脚本的进阶内容,先把单条命令用熟。

删除文件用rm,删除目录要加-r。必须警告的是rm -rf这个组合:-r递归,“-f”强制,一旦指向系统目录,后果不堪设想。我亲眼见过有人把rm -rf test/多敲了一个空格,写成rm -rf test /,命令的含义就从“删除 test 目录”变成了“删除 test 目录和根目录下所有内容”。新版系统虽然对根目录有保护,但你的目标目录一旦选错,文件照样救不回来。想安全一点,删除重要目录前先mv 目录名 /tmp/,观察一阵子确认没问题,再回头删也不迟。

3. 权限和用户:为什么你老是“Permission denied”

3.1 先看懂那一串 drwxr-xr-x

用ls -l查看文件时,第一列是一串“天书”:drwxr-xr-x。拆开看就简单了。第一个字符表示类型:d是目录,-是普通文件,l是软链接。后面九位分三组,每组三个,依次表示文件属主、属组用户、其他用户各自的权限,r 是读,w 是写,x 是执行。

为什么 Linux 要搞权限?想象一张门禁卡:普通员工卡能进自己的工位,但不能进机房;管理员卡能进机房,也不能随便翻财务室。没有门禁,任何人都能乱动系统,服务本身也不安全。权限错乱导致的线上事故,我见过不止一次:要么服务起不来,要么不该公开的文件被人读了去。

3.2 权限数字法:644 和 755 到底怎么算

权限可以用数字表示:r=4,w=2,x=1,加总即可。例如chmod 644 file表示属主可读写(4+2=6),组和其他人只读(4)。chmod 755 script.sh表示属主可读写执行(7),其他人可读可执行(5)。如果你一次给错了,用数字法修正最直观。

场景权限位数字
普通配置文件rw-r--r--644
可执行脚本rwxr-xr-x755
私钥文件rw-------600
数据库数据目录rwx------700

为什么配置文件通常是 644,脚本是 755?因为配置文件只需要属主修改,其他人读就够了;脚本要被执行,所以必须有 x 权限。新建文件默认 644、新建目录默认 755,这套规则由 umask 决定,面试里也是常客。chmod +x 文件是给文件加执行权限的快捷写法,比记数字更直觉。

3.3 用户管理和 chown:新建用户怎么操作

权限是围绕用户和组运行的。先记住几个定位命令:whoami看当前是谁,id看 UID 和所属组。root 用户的 UID 固定为 0,普通用户的 UID 通常从 1000 开始。新建用户的命令是useradd 用户名,然后执行passwd 用户名设置密码,这两条命令都要在 root 权限下运行。

临时提权用sudo,切换用户用su -。很多新人图省事,常年用 root 干活。我的经验是:练习阶段强迫自己先用普通用户敲命令,提示权限不足时再加 sudo。这样你能更清楚地意识到哪些操作属于高风险,而不是稀里糊涂就把系统改了。

复制文件后,目标文件的属主会变成执行 cp 命令的用户。这也是“明明改了文件却写不进去”的常见原因——看看属主是不是自己。chown user:group 文件可以修改属主和属组,但这条命令需要 root 权限,初学阶段先知道有这回事就行。

4. 系统状态与进程:学会判断机器“忙不忙”

4.1 内存、磁盘、系统信息怎么看

先抛结论:看内存用free -h,不要光盯着网页监控面板。free -h里的 used 常常很吓人,但中间 buff/cache 列是内核缓存,关键时刻可以被回收,真正要关注的是 available,那才代表实际可用内存。这个误解几乎可以入选“linux 运维故障案例”常客榜。

磁盘用df -h看整体使用率,用du -sh /home/*查具体目录占用。很多人分不清 df 和 du 的区别:df 看的是文件系统总空间还剩多少,du 是在目录里把文件大小加起来算总账。疑心磁盘不够用时,两个命令一起用,你就能定位到是谁吃掉了空间。

查看内核版本用uname -a,查看发行版信息用cat /etc/os-release。还有一类高频需求是“linux 查看系统时间同步时间”:基础指令层面,date显示当前时间,timedatectl显示时区和 NTP 同步状态。如果发现服务器时间比实际慢了 8 小时,多半是时区没设对,timedatectl set-timezone Asia/Shanghai可以修正。

4.2 ps、top、kill:进程管理的三板斧

进程就是正在运行的程序。最常用的查看命令是ps -ef或ps aux,两者只是输出格式风格不同,都包含进程 PID。常见的姿势是ps -ef | grep nginx,快速找到目标进程的 PID。另一个实时工具是top,按大写 P 按 CPU 排序,按大写 M 按内存排序,按 q 退出。

要结束进程,先试kill PID。这相当于给进程发送 SIGTERM 信号,礼貌地请它收尾退出;如果程序不响应,再用kill -9 PID强制结束。很多新手一上来就kill -9,我的建议是尽量先给进程一个写日志、释放资源的机会,否则状态文件损坏、数据丢失都是常有的事。信号概念面试也常考:9 是强行结束,15 是默认终止,1 是挂断信号——后面讲后台运行还会用到它。

4.3 让命令在后台跑:nohup 与 &

这是很多人实战中第一个卡住的场景:用 SSH 连上服务器,运行一个 Python 脚本,结果一关终端,脚本也跟着停了。原因是关闭终端时,系统会给这个会话下的进程发送 SIGHUP 挂断信号,进程默认就退出。解决办法是nohup忽略挂断信号,配合&把进程放到后台,两者通常一起用。

nohup python3 app.py > app.log 2>&1 &

拆开这条命令:nohup让进程忽略 SIGHUP;> app.log把标准输出写进 app.log;2>&1把标准错误也合并到同一个文件,注意顺序不能反;最后的&表示放入后台。这样即使你关闭 SSH,脚本也会继续跑,日志随时可以用tail -f app.log查看。

如果 nohup 之后日志文件一直是空的,先检查程序是否把内容写到了标准错误,或者用了非缓冲输出——这不一定是命令的问题,而是程序的输出机制。初学阶段记住 nohup 这一套就够日常使用,更高级的 setsid、screen、tmux 可以等有需求再学。

5. 文本处理与管道:命令行高效工作的核心组合技

5.1 重定向:把输出接出去

命令默认把结果打印到屏幕,重定向就是改变这个去向。>把输出写入文件,注意它会覆盖原有内容;>>是追加;<从文件读入内容作为输入;2>把错误输出单独写进文件;2>&1把标准错误和标准输出合并。

>的破坏力比想象中强。一条cat file > file甚至可能把文件清空,因为打开文件的一瞬间,截断就已经发生了。我见过同事写脚本时忘写>>,每次运行都覆盖日志,排查问题时发现历史记录全丢了。养成习惯:日志场景用追加,备份场景用带时间戳的新文件名,别动老文件。

5.2 管道:像流水线一样处理文本

管道符|把左边命令的输出,当作右边命令的输入。最经典的组合:

ps -ef | grep nginx

这比在几十个窗口里翻进程高效得多。另一个常用组合是统计日志行数:grep 'ERROR' app.log | wc -l。有个小技巧:搜索进程时写grep '[n]ginx'可以避免 grep 进程自身出现在结果里,面试时偶尔会有这类题考观察力。

管道可以串联很多段:

cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head

这串命令统计访问日志里次数最多的 IP。从左往右:先把每行按空格切开取第一列,也就是 IP,然后排序、去重并计数、按计数倒序、取前十个。很多人问 Linux 常用命令学了有什么用,这就是典型场景——排查问题省的是小时起步的时间。

5.3 grep、sed、awk 入门路线

这三个命令被称为文本处理三剑客,但不需要一口气学完。先记住三个动作:grep 负责过滤,-v反选、-i忽略大小写、-c计数;sed 负责替换和按行提取,sed 's/old/new/g'是全局替换的写法,sed -n '5,10p'打印指定行;awk 负责按列切片,awk '{print $1,$3}',或者用-F','指定分割符。

我给新人的建议:别背参数表,从实际问题出发。比如日志里时间字段混进了多余字符,就查一下怎么用 sed 去掉;想统计某接口调用量,用 grep 加 wc 就够。遇到解决不了的问题再翻手册,记忆会深刻得多。这些命令组合起来就是 shell 脚本的雏形,等你把管道和重定向玩熟,写一个一键部署脚本并不难。

6. 软件安装与网络:给 Linux 配上干活工具

6.1 装软件先找包管理器:apt 与 yum/dnf

Linux 上装软件,首选不是到官网下载源码包,而是用发行版自带的包管理器。Debian/Ubuntu 系用 apt,CentOS/RHEL 系用 yum 或 dnf。基本流程是:先apt update更新索引,再apt install 软件名。比如网上搜“linux 系统安装 python”,多数情况下apt install python3就解决了;搜“linux 下载 gcc 编译器”,也是apt install gcc。

为什么不建议一上来就自己编译?包管理器负责解决依赖、提供统一卸载入口、还有签名校验。自己编译源码就像自己买菜做饭,口味确实更可控,但流程长、耗时多,依赖关系还可能滚雪球,把系统弄乱。等你需要特定版本、或者要改源码时,再学编译也不迟。

顺带一提,如果官方源下载太慢,可以把 apt 源换成国内镜像站。这是绕过“linux 镜像”相关搜索的一种常见做法,但前提是先搞清楚自己用的发行版代号,别改错文件把系统搞坏。

6.2 网络命令三件套:ping、curl、wget

ping测试主机是否可达,但“ping 通”不等于“服务正常”,它只验证到网络层。想看端口服务状态,用ss -ltnp或netstat -ltnp,能看到谁在监听哪个端口。

curl是发 HTTP 请求的小工具,curl -i可以看响应头,curl -L跟随重定向。wget更擅长下载文件和镜像网站内容。网上经常看到一行curl xxx | bash的安装命令,我的建议是:要么先下载下来看内容,要么确认来源可靠。盲跑脚本相当于把自己服务器的 root 权限交给陌生人,这不是危言耸听。

6.3 tar 打包与解压:归档不是复制粘贴

Linux 传统的打包格式是 tar,tar -czvf 名字.tar.gz 目录打包并压缩,tar -xzvf 名字.tar.gz解压。-c创建,-x解压,-z表示 gzip 压缩,-v显示过程,-f指定文件名。现在新版 tar 可以自动识别压缩格式,直接tar -xf 文件.tar.gz也能解压。

解压前最好先跑tar -tf 文件.tar.gz看看包里有什么,再配合-C 目录指定解压位置,避免解出来的文件散落一地。备份时也常用 tar 把整个项目目录打包,配合定时任务,就能形成一个最朴素的自动备份方案。

7. 新人最容易踩的坑:我的真实翻车记录

7.1 事故一:一个空格敲掉了半个系统

我第一份工作流传着一起经典翻车。有同事想清理/tmp/test,输入却写成了rm -rf /tmp/test /。多了一个空格,命令就多了一个删除对象:根目录。新版系统虽然对rm -rf /有保护,但某些老版本或者带上了--no-preserve-root的情况下,灾难就是一瞬间的事。就算保护生效,屏幕上刷出的错误提示也会把你吓出一身冷汗。

从那以后我给自己定了规矩:删除目录前,先ls -d确认路径;高危删除命令不带-f先跑一遍,确认无误再补上。另外,history里看到的旧命令不要直接回车执行,因为当初的命令也许就是错的。

7.2 事故二:服务起不来,权限却“看起来够”

有次部署一个 Web 服务,报错一直是 Permission denied。文件明明存在,权限也是 755,为什么还不行?查到最后,发现路径中间某个目录的权限是 700 且属主是 root,普通用户根本进不去——这就是目录执行权限的作用:即使文件本身可读,只要进不了它所在的目录,一切都白搭。

排查权限问题有个固定套路:ls -ld逐级检查路径上每一层目录,或者用namei -l 完整路径一次看全路径各段的权限。遇到权限问题,别偷懒直接chmod -R 777,那等于把整扇门都卸下来,安全风险极大。

7.3 事故三:磁盘没满,却报“No space left on device”

这个问题很多老手都会遇到:df -h显示还有不少空间,但写入文件时报磁盘满。原因是 inode 耗尽了——可以把它理解为文件系统里的“档案目录”写满了,不是位置不够,而是登记条目的格子供不应求。判断方法很简单:执行df -i,看 inode 使用率。

这件事让我意识到,基础指令只是入口。后面做运维还要懂文件系统原理、日志轮转、细碎文件清理,慢慢都会接触到。但先把df -h、df -i、du -sh这几个工具用利索,遇到磁盘类故障至少能做到正确定位。

7.4 事故四:时间不同步,日志乱成一锅粥

有次排查线上问题,发现日志时间顺序完全对不上:前一条是 11:30,后一条突然变成 03:20。最后发现服务器没有配时区和 NTP 同步,date显示的时间和实际差 8 小时。修正用timedatectl set-timezone Asia/Shanghai,再执行timedatectl set-ntp true打开时间同步,日志顺序立刻恢复了。

这类问题虽然不难,但它给我一个深刻教训:看日志之前先确认服务器时间。否则你会拿一条错误的时间线做一整天无效排查。基础指令里date、timedatectl不起眼,关键时刻真能救命。

带新人这几年,我最大的体会是:Linux 基础指令的学习拼的不是记忆力,而是“理解 + 手熟”。我当年也抱着几百页命令手册啃过,睡一觉忘掉大半,真正让我记住每条命令的,是某次排障时它真的帮我解决了问题。所以建议别给自己定“今天背十条命令”这种目标,而是给自己一个具体任务,比如把日志按 IP 统计排名、把一个项目部署到特定目录,用得上哪条就学哪条。学习过程中一定要亲手敲,敲错的记忆远比看十遍文档深刻。最后提醒一句:练习环境用虚拟机或临时云服务器,第一次装系统可以先从下载官方发行版镜像开始,装了系统想怎么折腾都行;看到#提示符时多留个心眼。基础打牢了,后面不管是学 shell 脚本、看内核,还是转运维,都不会觉得 Linux 神秘。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询