接手一台Linux服务器,SSH一登上去,光标就在那儿一闪一闪等你输命令,很多新手的第一反应是懵的。哪怕手边放着一本《Linux命令大全》,也不知道该从哪条开始查,因为命令大全本质上是字典,不是地图。这篇内容我准备换个思路讲——把我实际用Linux这些年最常用的操作、踩过的坑、面试新人时最爱问的点,按“使用场景”而不是按“字母顺序”串起来,覆盖文件操作、用户权限、网络命令、系统状态、软件部署和日常排错。不管你是刚入行的运维,还是做开发想补Linux基础,或者正在准备Linux相关面试,这篇都可以当一份“按图索骥”的操作手册来用,跟着敲一遍比看十遍都有用。
1. 先把学习思路理清:命令不是背出来的
1.1 一切皆文件,命令的基本结构
Linux有一个核心思想叫“一切皆文件”。磁盘是文件、网卡是文件、进程信息也在文件里,甚至两个程序之间的通信管道也被抽象成文件。理解这一点之后,很多命令不用背也能猜出七八分——所谓命令,本质就是对文件做操作的程序:读取、创建、修改、删除、查看状态。
命令本身的结构也很规律,通常是“命令 + 选项 + 参数”。比如 ls -l /home,ls 是命令,-l 是选项(以长格式显示),/home 是参数(告诉命令操作哪个对象)。绝大多数选项都有英文缩写来源:ls 是 list(列出),pwd 是 print working directory(打印当前工作目录),rm 是 remove(删除),cp 是 copy(复制),mv 是 move(移动)。明白这层关系后,你根本不需要死记硬背,看到一条陌生命令,拆开念一遍基本能猜个大概。
这里我还想专门提一下 type 命令。它用来查看一个命令到底是“内建命令”“外部命令”“别名”还是“函数”。比如输入 type cd,系统会告诉你 cd 是 shell 内建命令,而 type ls 可能会显示 ls is aliased to 'ls --color=auto',说明你敲的 ls 实际上是带颜色输出的别名。排查命令行为异常时,type 能帮你少走很多弯路——很多“命令不好使”的问题,其实是命中了别名或者系统里有多个同名版本。
1.2 不认识命令怎么办:man、--help 和 which
遇到没见过的命令,首选不是去搜索引擎,而是先在系统里看帮助。man 命令名 能打开该命令的完整手册,命令名 --help 或 命令名 -h 能快速查看简版用法。英文不好的朋友也别怕,不用从头读,只看“SYNOPSIS(语法概要)”和“EXAMPLES(示例)”两段就足够日常使用了,按 q 键退出。
再看命令到底装在哪,用 which。例如 which nginx 会打印出 nginx 可执行文件的绝对路径,比如 /usr/sbin/nginx。排查“命令明明存在却提示 not found”时,十有八九是 PATH 环境变量没包含对应路径,这种问题在源码编译安装软件后尤其常见。
我的体会是,学 Linux 命令最忌讳的方法就是拿一份“500条命令大全”从头背到尾。正确方式是先掌握高频的三十来个命令,在日常操作中反复用到形成肌肉记忆,再遇到新需求时,用 man、which、type 现场查,查完用几次就又会一条。下面几节,我把这套高频命令按场景拆开讲。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件与目录操作:一天用上百次的高频命令
2.1 目录切换、内容查看与日志跟踪
先说说每天都要敲几十遍的“三连”:pwd 看我现在在哪,ls 看目录里有什么,cd 去别处。ls 的高频选项建议直接记死:-l 看详细信息和权限,-a 显示隐藏文件,-h 让文件大小带上 K/M/G 单位,-t 按修改时间倒序排列,排最上面的就是刚改过的文件。排查问题时,ls -lht 是我用得最多的组合。
cd 有两个容易被忽略但非常好用的回退方式:cd .. 是回到上一级目录,cd - 是回到上一次所在的目录。很多用 Xshell 或 SecureCRT 的小伙伴说“回退目录”老是敲错,其实就是没分清这两个——如果你在两个深路径之间反复切换,cd - 比连着 cd ../../.. 高效得多。这个技巧在“shell 命令 cd”相关搜索里也非常常见,建议直接记下来。
查看文件内容,我习惯分三种情况选工具:小文件直接 cat;大文件用 less,支持上下键翻页、/关键字 搜索、按 q 退出;要实时看日志翻滚,就用 tail -f,比如排查 Nginx 访问异常时,tail -f /var/log/nginx/access.log 边访问边看,新记录会实时刷出来。head -n 20 则用来只查看文件开头二十行,比如确认日志格式、查看 csv 表头。
2.2 文件与文件夹的增删改查:几个“不要”的提醒
创建和复制操作不难:mkdir -p a/b/c 可以一次建多级目录,touch file.txt 创建空文件或刷新时间戳,cp -r dir1 dir2 递归复制整个目录,mv old new 既改文件名也移动位置。难的是删除。
很多教程会告诉你删除文件夹用 rm -rf 文件夹名,这句话没错,但执行前一定要先 ls 或 pwd 确认自己在哪、删的是谁。我见过不止一个同事在 /tmp 下操作,路径少打一个字母,把整个项目目录删没了。如果你要删除的是一个很大的目录,还有一个更稳妥的思路——用 rsync -a --delete /空目录/ 待删目录/ 来清空,这样做的好处是删除过程可控,中断后重新执行即可,不会像 rm -rf 一样删到一半就不可恢复了。
修改文件内容前,养成备份习惯:cp nginx.conf nginx.conf.bak。这行命令成本几乎为零,但关键时刻能救命。ZIP 压缩与解压也是高频需求:zip -r archive.zip dir 压缩目录,unzip archive.zip 解压,unzip -l archive.zip 只查看压缩包内容不解压。
2.3 查找和筛选:find、grep 与管道
文件一多,光靠 ls 就不行了,这时候用 find 和 grep 两个命令配合管道符 |。find 按文件属性找:find /var/log -name "*.log" 按名字找,find / -size +1G 找大于 1G 的大文件,find /home -mtime -7 找七天之内改过的文件。grep 按内容筛:grep "ERROR" error.log 只显示含 ERROR 的行,grep -r "password" /etc/nginx/ 递归搜索目录下所有内容匹配的行,grep -i 忽略大小写。
管道符 | 的核心作用是把前一个命令的输出,作为后一个命令的输入,这是 Linux 比 Windows 原生命令行高效很多的地方。一个典型组合:find / -size +1G 2>/dev/null | grep -v proc,意思是找出全盘大于 1G 的文件,过滤掉 proc 目录的干扰项,其中 2>/dev/null 是把没有权限访问产生的错误信息丢进“黑洞”,避免刷屏。这种“多命令串起来干活”的思路,是 Linux 命令真正拉开差距的地方。
3. 用户与权限:新建用户、改权限的那些坑
3.1 新建用户正确姿势
很多教程让你敲 useradd zhangsan,但敲完就会发现,这个用户没有家目录,也没法登录,原因是 useradd 在默认设置下不会创建家目录、不会设置密码、不会生成 shell 环境。这是 Linux 让新手最困惑的“坑”之一。
正规做法分两步。第一步,用 useradd -m -s /bin/bash zhangsan 创建用户并同时创建家目录、指定 bash shell;第二步,用 passwd zhangsan 设置密码,按提示输入两次即可。如果你是在 Ubuntu/Debian 系系统上,更推荐直接用 adduser zhangsan,它是一个交互式脚本,会一路上问你把家目录、密码、用户信息都配好,对新手友好很多。
创建完用户后,我通常会顺手检查文件:id zhangsan 查看用户 UID、GID 和所属组,ls -ld /home/zhangsan 确认家目录归属是否正确。给用户加 sudo 权限的常用命令是 usermod -aG sudo zhangsan(Debian/Ubuntu 用 sudo 组,CentOS/RHEL 用 wheel 组),用 -aG 而不是直接 -G 是为了“追加”而不是“覆盖”,否则很容易把用户原本所在的组全部移除。
3.2 权限到底怎么读:rwx 与数字法
ls -l 输出的第一列像 drwxr-xr-x,读法是:第一个字符表示类型,d 是目录、- 是普通文件、l 是软链接;后面九个字符分成三组,每组三个,依次是“所有者(u)”“所属组(g)”“其他人(o)”的权限。每组里 r 是读(4)、w 是写(2)、x 是执行(1)。所以 755 表示所有者可以读写执行(4+2+1),组和其他人只能读和执行(4+1)。
修改权限和归属用 chmod 和 chown。chmod 755 script.sh 给脚本执行权限,chmod -R 755 /data/www 递归修改整个目录。chown 则改“属于谁”:比如从 root 账户把目录交给 zhangsan,需要 chown -R zhangsan:zhangsan /data/app。
这里分享一个排查权限问题的经验:提示 Permission denied 时,不一定是你对文件本身没有权限,更可能是其路径上的某个目录缺少 x(执行)权限。执行权限对目录的意义是“允许进入该目录”,如果 /data 没有 x,那么就算 /data/app/file.txt 权限是 777,普通用户照样进不去。所以排查时用 namei -l /data/app/file.txt 可以把路径每层权限一次性列出来,非常直观。
3.3 sudo 配置别乱改
新手特别喜欢直接 vim /etc/sudoers,结果把系统弄到 su 都用不了。正确修改方式是 visudo,它自带的语法检查能防止你保存一个非法配置。一个常见需求是让某用户执行 sudo 不用输密码:在 sudoers 文件里加一行 zhangsan ALL=(ALL) NOPASSWD: ALL。生产环境中更细的玩法是只放行特定命令,比如 zhangsan ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx,这样既满足日常工作,又不至于把整个 root 能力都交出去。
4. 文本编辑与处理:vim、grep、sed 与管道重定向
4.1 vim 三模式,记住这张地图
vim 让无数新手望而却步,其实只要记住一个模型就行:vim 有三种状态——命令模式、插入模式、末行模式。刚打开文件时处于命令模式,此时按 i 进入插入模式开始打字,编辑完成按 Esc 退回命令模式,再输入 :wq 保存退出。如果只想看不保存,就在命令模式输入 :q! 强制退出。绝大多数 Linux 服务器只装 vim,没有图形化编辑器,所以这一步绕不过去。
命令模式下的高频操作再补充几个:gg 跳到文件首行,G 跳到末行,0 到行首,$ 到行尾;dd 删除当前行,yy 复制当前行,p 粘贴;查找用 /关键字 回车后按 n 跳下一个;u 撤销。刚接触时只记这些就够干活了,其他技巧以后按需慢慢学。很多教程列了 50 多个快捷键,老实说新手根本记不住,反而容易被劝退。
4.2 管道、重定向与 sed/awk 实战
重定向也很重要:> 把输出写入文件(覆盖),>> 追加到文件末尾,2> 单独重定向错误输出。比如 echo "hello" > /tmp/test.txt 写文件,ls /nonexist 2>> /tmp/error.log 把错误追加到日志里。命令执行的整个输出流包含标准输出(1)和标准错误(2),两者分别重定向是排查脚本问题时的常用手段。
sed 和 awk 我合起来讲,因为它们合起来能解决文本处理的 80% 需求。sed -i 's/旧/新/g' file 是全局替换,比如批量把配置文件里所有 127.0.0.1 替换成服务器内网 IP;awk '{print $1}' 按空格或 Tab 分割后取第一列,比如 df -h | awk '{print $5}' 提取磁盘使用率列。记住 sed 擅长“修改替换”,awk 擅长“取列统计”,配合 | 管道串联,就是一行命令版的文本处理流水线。
shell 脚本里还有一个小众但实用的命令 shift。它用于把位置参数向左移动:$1 变成原来的 $2,$2 变成原来的 $3,以此类推。写启动脚本时,比如处理 ./deploy.sh start -f config.yml 这类带多个选项的参数场景,用 while [ $# -gt 0 ]; do case $1 in ... esac; shift; done 循环解析,非常顺滑。
4.3 改配置前先备份,这是个职业习惯
在编辑配置文件这一步,我给团队定的规矩很简单:凡是 vim 改系统配置文件,先执行 cp 文件 文件.bak.日期,比如 cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.20251201。改坏了能立刻回滚,这在生产环境里能省下几个小时的恢复时间。别嫌麻烦,等你把配置改坏又没人能帮你恢复的时候,就会后悔当初没敲这一个回车。
5. 网络命令与远程传输:从 telnet 到 scp 的真实用法
5.1 测试端口通不通:telnet 与 nc
很多公司出于安全考虑不给服务器装 telnet 客户端,但在排查网络问题时,telnet 目标IP 端口 仍然是最直观的端口连通性测试方法。连上了会显示连接成功,连不上会一直卡住然后超时。需要注意,这种明文协议本身不适合传输数据,在此仅作为连通性测试工具使用,生产环境不要在业务上依赖它。
如果系统里实在没有 telnet,可以用 nc -vz 目标IP 端口 替代,-v 显示详细信息,-z 表示只扫描端口不发送数据。比如 nc -vz 192.168.1.10 3306 就能快速判断 MySQL 端口是否对外开放。测端口不通时,按顺序排查:先看服务有没有起,systemctl status;再看本机监听,ss -lntp | grep 3306;最后看防火墙,firewall-cmd --list-all 或 iptables -L -n。这套排查逻辑比盲目重装服务靠谱得多。
5.2 文件传输:scp、rsync 和 wget/curl
Linux 服务器之间传文件,scp 是最容易上手的命令,它的语法跟 cp 差不多,只是多了“在哪里”的概念。scp file.txt root@192.168.1.20:/data/ 把本机文件传到远端,scp -r /data/app root@192.168.1.20:/data/ 传整个目录,远端 SSH 端口不是 22 时加 -P 端口。传完文件后习惯性在远端 ls -l 确认大小一致,避免传了个残缺文件还不自知。
如果文件很大、需要增量同步,用 rsync -avz /data/app/ root@192.168.1.20:/data/app/。-a 保持属主时间戳等属性,-v 显示过程,-z 传输压缩。rsync 还会跳过内容没变化的文件,第二次同步会飞快。批量部署时我通常先 rsync 再远程执行命令刷新服务,这套组合不知道帮我省了多少时间。
下载互联网资源则用 curl 和 wget。wget -O filename.tar.gz "下载地址" 下载并改名,curl -O 保留原始文件名下载。日常调试接口时 curl -I https://example.com 只看响应头,curl -X POST -d 'key=value' http://127.0.0.1:8080/api 发 POST 请求,排查 Web 服务非常方便。
5.3 SSH 远程连接的小技巧
日常连接服务器用 ssh 用户名@IP -p 端口 就够了。频繁登录的机器建议配置免密登录:在本地执行 ssh-keygen -t ed25519 生成密钥对,然后把公钥追加到服务器 ~/.ssh/authorized_keys 文件里。这一步用 ssh-copy-id 用户名@IP 一条命令就能完成。免密登录的好处不只是便利,更关键的是可以禁止密码登录,减少被暴力破解的风险。改 /etc/ssh/sshd_config 里的 PasswordAuthentication no 前,务必先开一个永远不要断的测试窗口,因为一旦配错,你可能直接把自己锁在门外。
6. 系统状态、软件安装与服务部署实操
6.1 看一眼系统到底“什么样”
拿到一台新机器,第一件事永远是搞清楚系统底细。uname -a 查看内核版本,cat /etc/os-release 查看发行版名称和版本号(新版 CentOS、Ubuntu、统信 UOS 都支持这个文件),lscpu 看 CPU 型号与核数,free -h 看内存总量和剩余量,df -h 看磁盘分区使用率。这些命令执行完,一台机器的基本画像就出来了。
如果要看 CPU 缓存,lscpu | grep -i cache 能列出 L1/L2/L3 缓存大小,这在判断某些应用是否受缓存影响时有用。深度学习场景下经常遇到多张 GPU 卡,想看“三个 GPU 同时测试”时的负载和温度,用 nvidia-smi 可以列出所有 GPU 的利用率、显存占用和温度,配合 watch -n 1 nvidia-smi 可以每秒刷新一次,做压力测试时能直观看到三张卡的工作状态是否均衡。
6.2 软件包管理、systemd 与服务部署实战
Debian/Ubuntu 系用 apt:apt update 刷新索引,apt install nginx 安装软件;CentOS/RHEL 系用 yum 或 dnf 替代同样的操作。装完软件后,现在几乎都是通过 systemd 管理服务:systemctl start nginx 启动,systemctl enable nginx 设置开机自启,systemctl status nginx 查看运行状态。两个常用组合是 systemctl enable --now nginx,一条命令同时完成“开机自启 + 立即启动”。
以安装 Nginx 为例,完整流程是:apt update && apt install -y nginx,然后用 nginx -t 检查配置文件语法,通过后 systemctl restart nginx,最后 curl -I http://127.0.0.1 验证首页是否返回 200。这个“装软件 → 改配置 → 语法检查 → 重启服务 → 本机验证”五步流程,几乎是所有 WEB 服务部署的通用模板,建议养成固定习惯。
容器场景里,Containerd 作为当前主流的容器运行时,命令体系和 docker 不太一样。ctr 是 containerd 自带命令,但参数比较低级;日常运维更多用 crictl 配合 Kubernetes 使用,例如 crictl ps 查看容器列表、crictl logs 容器ID 看容器日志。如果你安装了 nerdctl,则可以用接近 docker 的语法操作 containerd,迁移成本会低很多。
源码编译安装软件也很常见,比如在 Linux 上安装 Python:优先用包管理器 apt install python3,如果需要特定版本,可以下载源码包,通过 ./configure && make && make install 三步编译安装。编译 Python 经常缺依赖,常见的报错是缺 libssl-dev、zlib1g-dev 等开发包,用 apt build-dep python3 一键补全可以省很多事。还有一类软件如 MATLAB 2022b for Linux,安装包是图形安装向导,但运行时会因为缺共享库而报错,用 ldd 查看可执行文件的动态库依赖,缺哪个用包管理器补哪个即可,不要一报错就重装。
6.3 桌面端与国产 Linux 发行版
Linux 不是只有服务器,这几年国产 Linux 发行版(如统信 UOS、麒麟系统)在桌面办公场景的推广也越来越多,很多朋友正在基于国产系统做日常办公。UOS 底层基于 Debian,命令体系与 Debian 一致,用 sudo apt install 软件包 安装软件,系统参数和服务管理同样走 systemd。搜狗输入法、企业微信、希沃白板等应用都针对 Linux 出了原生版本,安装包一般是 deb 格式,用 sudo dpkg -i 包名.deb 安装,如果报依赖缺失,执行 sudo apt -f install 自动修复依赖。
Windows 下用 WSL 跑 Linux 子系统也是很多开发者的日常。如果你启动 WSL 时看到“适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续”的提示,一般是 WSL 内核组件过旧,在管理员 PowerShell 里执行 wsl --update 更新内核即可。这类问题本质是环境版本不匹配,更新之后重新打开终端就能正常进入 Linux 环境。对于想低成本体验 Linux 的 Windows 用户,WSL 是一个低门槛的起步选项,适合学习命令和做开发,但涉及 systemd 管理、网络隔离等高级操作时,还是建议用虚拟机或实体机。
7. 日常排错与面试常见问题实录
7.1 高频问题速查表
下面这些问题,是我在带新人和日常答疑中反复遇到的,整理成一个速查表,每条都能对应一个真实场景:
| 问题 | 现象 | 解决思路 |
|---|---|---|
| 端口连不通 | telnet 卡住或超时 | 查服务状态 → 查监听 → 查防火墙 |
| Xshell 回退目录失败 | 一直在深层目录出不来 | 用 cd .. 逐级回退,用 cd - 回到上次目录 |
| vim 无法保存 | E212: Can't open file for writing | 当前用户对文件没有写权限,sudo vim 或用 :w !sudo tee % |
| WSL 无法启动 | 提示需要更新版本 | 管理员 PowerShell 执行 wsl --update |
| 明明有权限却 denied | 文件权限 777 仍无法访问 | 用 namei -l 检查父目录的 x 权限 |
| 磁盘快满了 | df -h 使用率 100% |
du -sh /* 逐层定位大目录,find / -size +1G 找大文件 |
| 服务起不来 | systemctl 显示 failed | journalctl -u 服务名 -xe 查看最近日志 |
顺带提醒一句:很多人会把 Windows 的命令习惯带到 Linux 里,比如搜“C 盘清理命令”“gpedit.msc 打不开”这类,其实这些是 Windows 的 cmd 命令,在 Linux 里没有对应概念。刚切换系统时,有这种混淆很正常,关键是先认清当前操作系统的“语法体系”,再动手查方案。
7.2 Linux 命令类面试高频考点
准备 Linux 面试的话,以下几个点被问到的概率非常高。第一个是软链接和硬链接的区别:ln -s 生成软链接,类似 Windows 快捷方式,删除源文件后链接失效;ln 生成硬链接,本质是同一个 inode 的多个文件名,删除源文件不影响硬链接访问。第二个是查找问题:如何找出占用磁盘空间最大的文件,标准答案是 du -sh * | sort -rh | head 或 find / -type f -size +1G。第三个是进程管理:ps -ef | grep nginx 查进程 PID,kill -9 PID 强杀,但如果不确认进程身份就强杀,可能引发连锁故障,建议先 kill PID 发 TERM 信号,让程序优雅退出,不行再 -9。第四是定时任务:crontab -e 编辑,格式是“分 时 日 月 周 命令”,比如每天凌晨两点执行备份脚本就写 0 2 * * * /opt/backup.sh,改完用 crontab -l 确认。第五是开机自启:用 systemd 的 systemctl enable 统一管理,比改 /etc/rc.local 符合现在的发行版习惯。
7.3 判断 Linux 基础是否过关的“五步检验法”
我面试运维或偏运维的后端开发时,经常给一个实战小测:给一台干净的 Ubuntu 虚拟机,要求在半小时内完成五件事——新建一个用户并加入 sudo 组、用 scp 把一个文件传到目标机器、安装并启动 Nginx、修改 Nginx 默认首页内容、最后用 grep 从访问日志中筛选出某个 IP 的请求。这五件事恰好覆盖用户管理、网络传输、软件安装、文本编辑、日志过滤五个核心场景。能独立走完这套流程的人,无论嘴上说没说过“精通 Linux”,实际动手能力都是过关的。你也可以拿这套流程自测,哪一步卡住了,就回到对应章节再敲一遍,比刷十套题都有效。
最后再分享一点个人经验:Linux 命令的学习回报率非常高,但前提是动手。看一百篇教程,不如自己走一遍“装系统 → 配用户 → 部署服务 → 写脚本 → 排错”的完整链路。刚开始慢一点没关系,每条命令都搞清楚“为什么这么写、不这么写行不行”,坚持两个月,你会发现自己已经能独立处理大部分日常运维任务了。
