ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

不懂Linux命令逻辑?一份带“为什么”的常用命令速查手册

不懂Linux命令逻辑?一份带“为什么”的常用命令速查手册 不知道你有没有经历过这种场景刚装好 Linux打开终端一排黑底白字跳出来人瞬间就懵了。很多人跑来问我“Linux 命令是不是特别多我看网上那些速查表好几百条这得背到什么时候”我每次都会回答真没必要背。Linux 入门最难的地方从来不是“记住命令”而是理解命令的运行逻辑。只要你搞懂命令的组成套路、文件系统的组织方式、权限和进程是怎么运作的绝大多数所谓“常用命令”其实都是可以现场推出来的。这篇东西我就把它当成一份带“为什么”的常用命令速查手册来写帮刚入门的同学把最基础的骨架搭起来后面你再遇到不认识的命令也知道怎么去拆解、怎么去查、怎么去组合着用。1. 先把命令的“语法骨架”看懂命令、选项、参数到底是什么关系1.1 一条命令在人眼里是命令在系统眼里是个程序很多新手第一次敲ls -l /home的时候心里想的是“ls 是一个命令-l 是一个参数/home 也是一个参数”。这么理解不算错但如果你想真正明白 Linux 命令的运行机制最好再往前走一步ls 本质上是一个存放在/usr/bin目录下的可执行文件。你敲下命令回车Shell 就去PATH环境变量列出的目录里找这个程序找到之后把它跑起来把你给的选项和参数传进去。这就解释了一个新手经常遇到的诡异问题明明安装了一个软件敲命令却提示command not found。大概率就是两种情况——要么这个程序安装时没有放到PATH包含的目录里去要么你敲的路径不对。你可以在终端里执行which ls看看命令到底在哪也可以执行echo $PATH看看系统会在哪些目录里找命令这两个命令都是排查“命令找不到”这类问题的基本功。命令的基本格式就一句话command [选项] [参数]command表示要运行的程序比如ls、cp、grep。[选项]用来调整命令的行为比如ls -l表示用长格式列出文件。[参数]是命令作用的对象比如ls /home里的/home。选项还分短选项和长选项。短选项是一个短横线加一个字母可以合并比如ls -la相当于ls -l -a长选项是两个短横线加一个单词比如ls --all等价于ls -a更易读但打字多。我自己的习惯是交互式手敲命令用短选项写脚本时用长选项这样脚本可读性更好别人看你的脚本时不用去猜-x到底是什么意思。1.2 不会用的命令先问它自己任何一条命令在你搞不清它有哪些选项时都可以先敲命令 --help看看它自带的帮助。比如tar --help会直接打印出 tar 的用法、选项、示例。大部分 GNU 命令还支持-h或-?但有的程序会把-h解释成“host”或者“home”所以最稳妥的是先试--help。如果--help输出太简略那就用man命令看完整手册。man ls会打开 ls 的官方手册页里面有每个选项的详细说明甚至包括一些“彩蛋”级别的冷门参数。我见过不少人在面试时被问“如何查看一个命令的文档”然后只回答 man其实man也分章节比如man 2 write看系统调用、man 3 printf看 C 库函数这个对入门阶段了解即可。还有一个对新手特别友好的工具叫tldrToo Long; Didnt Read安装之后你敲tldr tar它会把 tar 最常见的几种用法用示例的方式展示出来比 man 手册读起来轻松太多。如果你只是日常用tldr的效率比 man 高一个量级。1.3 别名把你最常用的命令改成最短的命令是可以起“外号”的。比如你每次都想让ls显示颜色、显示隐藏文件、用长格式总不能每次都敲ls -lah。在~/.bashrc里加一行alias llls -l alias lals -a alias l.ls -d .*这样你下次打开终端就能直接用ll代替那一长串。这也是为什么 Ubuntu 默认的 root 用户下ll还能用因为你切换到了 root 之后系统会去加载 root 用户自己的~/.bashrc而源里配置好的别名就在那。别名修改后要执行source ~/.bashrc才生效不然就要等下次登录。这里有个小坑如果你把命令改名成alias lsls --colorauto再执行ls时Shell 会先展开成ls --colorauto然后去找系统真实的 ls不会陷入死循环不用怕。2. 文件与目录操作每天都在用的命令以及藏在背后的坑2.1 定位和移动pwd、cd、ls 的三板斧新手第一次进入终端只要记住三个命令就能开始“走路”pwd打印当前目录cd切换目录ls列出目录内容。cd /切换到根目录cd ~回到家目录cd ..回到上一级目录cd -回到上一次所在的目录这个超好用在两个目录之间来回切换时比我手动输入路径快得多。ls最常用组合ls -l长格式ls -a显示隐藏文件ls -lh把大小显示成 KB/MB/GBls -t按修改时间排序ls -R递归列出子目录。路径分绝对路径和相对路径。绝对路径从/开始写比如/etc/nginx/nginx.conf相对路径从当前目录开始写比如cd ../conf/。新手最容易犯的毛病是明明在/etc目录里却写成cd etc然后报错找不到目录。记住不带/开头的都是相对路径是相对于当前目录去找的。2.2 创建、复制、移动、删除cp mv rm 的“日常套餐”日常操作里最频繁的就是这四个mkdir myproject # 创建目录 touch README.md # 创建空文件也可用于更新时间戳 cp -r project project_backup # 递归复制目录 mv oldname newname # 移动文件同时也是重命名 rm file.txt # 删除文件 rm -r dir/ # 删除目录cp复制时默认不复制目录所以要加-r递归rm删除目录也一样要加-r。mv是移动和重命名共用一条命令移动后文件名自然被改了。这里我想重点说一个坑在 Linux 中“重命名文件”没有专门的 rename 命令免费给你用很多人从 Windows 过来下意识找 rename其实直接mv 旧名 新名就行。如果你需要批量重命名一批文件比如把a1.txt、a2.txt改成b1.txt、b2.txt那再上rename或者写个 for 循环普通场景一个 mv 就解决。删除文件要格外小心。rm -rf里的-f表示强制删除不提示-r表示递归。我见过有人在自己服务器上执行rm -rf / usr之类的命令把根目录整个删了系统当场崩溃。建议新人在练习阶段一律把rm -rf写全先不加-f让系统多问一句给自己留个反应时间。另外Linux 下删除文件后不会进回收站基本无法后悔除非你提前做好备份。2.3 查看文件内容别一上来就用 cat很多人看文件的时候习惯用cat但 cat 有两个毛病一是文件太长时整个刷屏你只看得到最后几行二是二进制文件直接乱码。所以看文件要分场景小文件直接cat。大文件用less按空格翻页按/搜索关键字按q退出。只想看开头几十行用head -n 20。只想看结尾几十行用tail -n 20。实时追踪日志文件用tail -f /var/log/syslogCtrlC 退出。这个命令在排查问题时几乎是救命的后面我会专门讲。2.4 查找文件find 的正确打开方式find是查找文件的核心工具新手最常见的问题是“到底用 find 还是 grep还是用 whereis”。简单区分一下find是在文件系统里根据文件名、类型、时间等属性找文件grep是在文件内容里找文字whereis和which是找命令本身的位置。find /home -name *.log -type f # 在 /home 下找所有 .log 文件 find /tmp -type d -mtime 7 # 找 7 天以上没有被修改过的目录 find /var/log -name *.log -mtime 7 -delete # 删除 7 天前的日志文件-mtime 7表示修改时间超过 7 天-delete直接删除这是清理日志和临时文件时非常高效的组合。注意find如果搭配-exec或管道使用文件名里有空格会造成问题我一般在脚本里直接用find ... -print0 | xargs -0 ...来规避这个细节等你们写脚本时自然会遇到。3. 文件权限与用户管理从“一头雾水”到“一眼看穿”3.1 一行 ls -l 输出到底在说什么在终端里执行ls -l /etc你会看到类似这样的输出drwxr-xr-x 2 root root 4096 Apr 12 10:31 apt -rw-r--r-- 1 root root 2969 Apr 12 10:31 os-release这一行包含了大量信息从左到右拆开看第 1 个字符表示文件类型-普通文件d目录l符号链接。接着 9 个字符是权限位分成三组属主user、属组group、其他人others。后面是硬链接数、属主名、属组名、文件大小、最后修改时间、文件名。每组三个字符分别是r读、w写、x执行。对文件来说x表示可以执行对目录来说x表示可以“穿过”这个目录进入子目录。很多人不理解为什么目录明明可读cd却进不去十有八九是少了x权限。3.2 chmod 的两种改法数字法和符号法权限的表示还可以用数字。规则是r4w2x1把每一组三个数字加在一起就得到一个 3 位数字比如rwxr-xr-x就是755rw-r--r--就是644。组合数字含义rwx7读 写 执行rw-6读 写r-x5读 执行r--4只读---0无权限改权限时用chmodchmod 755 script.sh # 最常用的数字法属主可读写执行其他人可读可执行 chmod ux script.sh # 符号法给属主添加执行权限 chmod g-w file.txt # 符号法去掉属组的写权限 chmod -R 755 project/ # 递归修改目录下所有文件和目录权限符号法里的u是属主g是属组o是其他人a是所有人。实际工作中我更推荐数字法因为一眼能看懂写进脚本里可读性也好。744和755之间就差一个“组内其他人可读可执行”经常搞错判断时记住7是满权限5是读执行4是只读。3.3 属主属组调整chown 和 chgrp文件除了有权限位还有属主和属组。你用useradd创建了一个用户想让他能操作某个目录单改权限还不够得把属主或属组改过去chown user:group file.txt # 同时改属主和属组 chown -R user:group project/ # 递归修改整个目录 chgrp group file.txt # 只改属组这里有个经典坑用 root 解压一个 tar 包解压出来的文件和目录属主全是 root普通用户想改都没法改。原因在于 tar 保留了打包时的属主信息解压时 root 会尝试按原属主还原。解决办法是加--no-same-owner参数让文件属主变成当前用户。3.4 用户管理useradd、adduser、passwd、sudo 的区别创建一个新用户有两个命令都能用useradd和adduser。在 Debian/Ubuntu 系里adduser是一个交互式的封装脚本会引导你设置密码、填写用户信息useradd是底层的原生命令参数必须写全比如useradd -m -s /bin/bash alice # 创建用户 alice创建家目录指定 Shell passwd alice # 设置或修改密码 userdel -r alice # 删除用户并删掉家目录-m会自动创建/home/alice家目录这个参数忘了加新用户登录后没有家目录会很痛苦。创建完用户后要让它能使用sudo提权需要把它加入 sudo 用户组。Debian/Ubuntu 系是sudo组CentOS 系是wheel组usermod -aG sudo alicesu和sudo的区别要分清su alice是切换用户身份需要输入 alice 的密码sudo command是用 root 身份执行单条命令输入的是当前用户的密码前提是该用户有 sudo 权限。日常使用中优先用 sudo别随便切换到 root这样系统日志里能留下你到底执行了什么排查故障时有迹可循。遇到Permission denied提示先别慌按这个顺序排查这条命令是谁执行的、文件属主是谁、文件权限是什么、执行者是否在属组里。大多数情况下就是权限位数错了或者忘了加sudo。4. 进程与系统资源查看、关闭、定位问题的基本盘4.1 看进程ps 和 top 两个维度Linux 里最常用来查看进程的命令是ps和top。ps aux的输出包括进程 PID、CPU 占用、内存占用、启动时间、执行命令行等。我习惯这样用ps aux | grep nginx # 只看 nginx 相关进程 ps -ef | grep java # 另一种格式网络教程里也很常见 top # 动态刷新按 CPU 排序 htop # top 的加强版可交互操作新手视觉友好top进入之后有几点要注意默认按 CPU 占用排序按M可以按内存排序k可以输入 PID 杀进程q退出。htop如果没有安装用apt install htop装上界面好看太多。定位“哪个进程占 CPU 高”的基本套路就是top里看第一屏的进程列表记下 PID再ps -p PID -f看完整的命令行搞清楚是哪个程序、从哪个目录启动的。4.2 杀进程kill 不是只有 -9很多人一说到杀进程上手就是kill -9。其实kill默认发送的信号是SIGTERM15相当于礼貌地通知进程“请结束了”进程可以自己保存收尾kill -9发的是SIGKILL系统直接强杀进程没有机会做任何清理。我见过不少人用-9杀数据库进程结果留下未写完的事务重启后要花很长时间做恢复。kill 1234 # 发送 SIGTERM优先尝试 kill -9 1234 # 实在不行再强杀 pkill -f java # 按进程名匹配杀 killall nginx # 杀掉所有匹配名字的进程还有一种情况当你执行一个前台命令卡住了可以按CtrlZ将它挂起到后台再用jobs查看、用fg调回前台、用bg让它在后台运行。如果希望命令在终端关闭后继续运行标准写法是nohup ./run.sh run.log 21 nohup表示忽略挂断信号 run.log把标准输出重定向到日志文件21把错误也合入同一个文件最后的表示放入后台。新手最容易漏掉21结果程序报错时你什么也看不到全打印到了终端上关了终端就找不到了。4.3 systemctl管理服务的现代化方式现在主流发行版都使用 systemd 管理服务所以systemctl成为系统服务管理的基础命令systemctl status nginx # 查看服务状态 systemctl start nginx # 启动服务 systemctl enable nginx # 设置开机自启 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务在没装 systemd 的最小环境或容器里仍用老命令service nginx status。从速查角度看到“服务起不来”第一步都是看systemctl status它会直接告诉你服务进程状态、最近日志、有没有报错。4.4 磁盘、内存、系统时间free、df、du、date排查资源问题时最常用的三件套free -h # 看内存用量-h 显示成人类可读大小 df -h # 看文件系统磁盘占用 du -sh /var/log/ # 看某个目录到底占了多少磁盘 date # 查看当前时间 timedatectl # 查看时区和 NTP 同步状态du统计目录大小这个命令新手经常整不明白参数du -sh /var/log/是只看该目录汇总du -h --max-depth1 /var/log/是列出该目录下每个子目录各自多大。怀疑磁盘满了、但df -h显示还好时别忘了看 inodedf -i。inode 耗尽会出现磁盘明明有空间却写不进新文件的情况这个坑在大量小文件场景下特别常见。系统时间也是一个隐形问题。服务器时间不对最直接的影响是 HTTPS 证书验证失败、日志时间错乱、定时任务触发混乱。同步时间用systemctl enable --now chrony或timedatectl set-ntp true手动同步的话用chronyc sources查看同步源状态。别自己在生产服务器上乱调系统时间操作前务必想清楚。5. 文本处理三兄弟grep、sed、awk 是如何炼成的5.1 管道和重定向所有命令组合的“胶水”在学习 grep/sed/awk 之前必须先理解 Linux 里最强大的编程模型输入输出重定向和管道。三条基本规则把命令输出写到文件会覆盖原内容是追加不覆盖。把文件内容作为命令的输入这个用得少一些。|把左边命令的输出作为右边命令的输入。打个比方管道就像一个传送带前面的命令把处理结果放到传带上后面的命令从传带上取走继续加工。一条复杂的运维命令通常就是一堆简单的命令用管道串起来的。21刚才已经提过意思是把标准错误输出也重定向到标准输出所在的地方。写成2 error.log则是单独把错误信息存到另一个文件。tee命令则是一边输出到屏幕一边写进文件调试时很实用./build.sh | tee build.log5.2 grep从一堆文本里找你要的“关键词”grep实际上是一个“正则表达式匹配工具”但日常最常见用途就是找关键词。常用参数参数作用-i忽略大小写-r递归搜索目录下所有文件-n显示行号-v反向匹配显示不包含关键词的行-E使用扩展正则--color高亮匹配内容多数发行版默认开了实际例子grep -n ERROR app.log # 在文件里找 ERROR 关键字 grep -rn listen /etc/nginx/ # 递归搜索目录下所有包含 listen 的行 grep -v ^# /etc/nginx/nginx.conf # 去掉注释行 grep -E 2024-04-1[0-9] access.log # 匹配 4 月 10 日到 19 日的日志我常干的一件事是应用崩了直接grep -n Exception -A 5 /var/log/app.log-A 5表示打印匹配行之后的 5 行上下文-B 5打印前面的 5 行。没有上下文你只找到一个错误关键词根本推断不出前因后果。5.3 sed批量替换的“文本手术刀”sed最常见的三种用途替换、删除、打印指定行。sed s/old/new/g file.txt # 把每行的 old 替换成 newg 表示全部替换 sed -i s/8080/9090/g config.conf # -i 直接修改文件不加就只输出到终端 sed 10,20d file.txt # 删除第 10 到 20 行 sed -n 5p file.txt # 只打印第 5 行新手经常忘记-i结果执行完了发现文件没变以为没生效。-i是直接修改原文件很危险建议先把不带-i的输出看一遍确认无误后再加-i。批量改配置的场景sed 几乎是唯一选择比如一台机器上几十个配置文件端口要从 8080 改成 9090一条命令全部搞定。5.4 awk按列拆数据的“表格工具”如果说 grep 处理“哪一行有问题”那 awk 就是处理“这一行里的第几列是什么”。awk 默认按空白符拆列内置变量$1表示第一列$0表示整行NR表示行号NF表示列数。awk {print $1} /etc/passwd # 打印每行第一列 awk -F: {print $1} /etc/passwd # 按冒号拆分打印用户名 awk NR2 NR5 {print NR, $0} file.txt # 打印第 2 到 5 行并带行号 awk $3 100 {print $1} file.txt # 条件判断取第三列大于 100 的行-F可以指定分隔符/etc/passwd里的字段是用冒号隔开的直接awk -F: {print $1}就能把所有用户名列出来。grep、sed、awk 往往是组合上场的比如从配置文件里提取 IP先 grep 出含 IP 的行再 awk 取列再去重。5.5 排序统计组合拳sort、uniq、wc、xargs日志分析里最经典的“统计 IP 出现次数 Top 10”我几乎每次面试都考命令如下sort access.log | uniq -c | sort -rn | head -10拆开看sort把所有行排序让相同 IP 排到一起uniq -c统计连续相同行出现次数并加计数前缀sort -rn按计数逆序排head -10取前 10 条。这条组合命令几乎能解决所有“统计频次”类问题比如统计用户访问量、错误码出现次数、日志里某关键词计数。wc -l统计文件行数xargs把前一条命令的输出转成后一条命令的参数find /tmp -name *.tmp | xargs rm -f这段的意思是找到所有.tmp文件然后一行一行传给rm去删除。注意xargs默认遇到空格会切分路径里有空格会有问题所以更稳妥的是find ... -print0 | xargs -0 ...这个细节等你写脚本踩过坑自然会懂。6. 排查故障时的救命命令组合网络、磁盘、日志一条龙6.1 网络排查从 ping 到 ss 再到 lsof新手最常问的问题之一是“我的服务起了吗外面怎么访问不了”。排查网络问题有一套固定顺序ping -c 4 8.8.8.8 # 先测外网通不通 ping -c 4 网关IP # 再测局域网通不通 curl -v http://localhost:8080 # 测本机服务是否响应 ss -tlnp # 查看端口监听状态 lsof -i :8080 # 查看哪个进程占用了 8080 端口ss -tlnp是查看端口监听的主力命令-t只显示 TCP-l只显示监听状态的端口-n不解析主机名-p显示进程 PID 和名称。老一代的netstat -tlnp也还能用但现代系统里 ss 更推荐。lsof -i :端口在遇到“端口被占用了”时特别有用它会直接告诉你是谁在用这个端口。远程服务器连不上时先在客户端测试ping测通不通telnet IP 端口测端口通不通curl -v看 HTTP 响应过程traceroute看路由路径。从外到内一层层排除比瞎猜稳得多。6.2 磁盘满了的典型症状和处置流程“磁盘满了”是运维里最常见的故障之一。症状很典型服务写入日志失败、数据库报错、系统提示 read-only file system只读文件系统。排查顺序df -h # 看哪个文件系统满了 du -sh /* # 从根目录开始找哪个目录占空间大 du -h --max-depth1 /var 2/dev/null | sort -rh | head df -i # 看 inode 是否耗尽找到占空间的罪魁祸首后日志文件是最常见的大头。清空大日志文件时不要用rm删了再重启服务很多进程会持续向被删除的文件句柄里写入磁盘空间不会释放。正确做法是直接清空: /var/log/nginx/access.log: 是 bash 里清空文件的常用写法等价于truncate -s 0 file文件还存在进程句柄不受影响空间立刻释放。6.3 日志系统journalctl 与系统故障定位现在大部分发行版的日志都由 systemd-journald 管理journalctl就是查日志的统一入口journalctl -xe # 查看最近的系统错误日志并附带解释 journalctl -u nginx --since today # 查看 nginx 服务今天的日志 journalctl -u nginx -f # 实时跟踪某服务的日志应用自己的日志一般写在/var/log/下常见的有/var/log/syslog、/var/log/messages、/var/log/nginx/access.log等。当系统发生异常时还有一个经常被忽略的命令是dmesg它显示内核环形缓冲区的消息硬件报错、磁盘 I/O 错误、进程被杀OOM都能在这里看到痕迹。我遇到过几次“服务器突然负载很高但 top 里找不到进程”的怪事最后都是在 dmesg 里看到某个进程因为内存不足被内核 OOM Killer 杀掉了直接定位到原因。6.4 一个完整的故障排查流程从症状到根因我总结一个非常典型的排查链路大家以后遇到“服务不可用”可以照抄步骤命令目的1ping 网关确认网络通不通2systemctl status nginx确认服务进程状态3ss -tlnp确认监听端口是否正常4df -h确认磁盘是否写满5dmesg查看内核是否报错如 OOM6journalctl -u nginx -f实时看服务日志报什么错这套流程走完大多数“服务挂了”原因已经水落石出。我遇到过一个案例网站突然 502客户端连不上按流程走下来发现磁盘满了Nginx 写不了日志导致崩溃。清理了日志后服务就恢复了前前后后不到五分钟。7. 装软件与做开发包管理器和编译器速通7.1 先搞清你的发行版用的什么包管理Linux 发行版成百上千但包管理分成两大派系Debian 系使用apt/apt-getdpkg常见的有 Debian、Ubuntu、Deepin 等RedHat 系使用yum/dnfrpm常见的有 CentOS、Fedora、openEuler 等。先分清自己用的是哪种再记命令否则你会陷入“为什么网上教程说 apt 能用我这却提示 command not found”的困惑。cat /etc/os-release # 查看发行版信息 uname -a # 查看内核版本和架构apt 最常用的命令apt update # 更新软件源缓存不是升级软件 apt upgrade # 升级已安装的软件 apt install nginx # 安装软件包 apt remove nginx # 卸载软件保留配置文件 apt purge nginx # 卸载软件并清除配置文件 apt search 关键字 # 搜索软件 dpkg -i package.deb # 安装本地下载的 deb 包新手最容易忽略的是装软件之前先apt update。因为 apt 的软件源列表是缓存在本地的你不更新系统不知道源里现在有什么新版本安装时常常报“找不到软件包”或提示版本过期。跑一遍 update 再 install绝大多数问题都能解决。7.2 换国内软件源Debian 13 换清华源是怎么一回事镜像源问题是国内用户几乎绕不开的。默认源在国外下载软件包速度感人换成国内镜像源之后下载速度能快一个量级。以 Debian 13trixie为例编辑/etc/apt/sources.list或直接在/etc/apt/sources.list.d/下创建源文件把地址换成清华镜像的地址即可。网上教程之所以强调 Debian 13是因为新版本的官方源格式改成了一套新的配置方式老的写法可能不兼容。具体操作流程基本是备份原文件、把 URL 里的deb.debian.org替换为mirrors.tuna.tsinghua.edu.cn/debian、执行apt update。换完之后你会明显感觉到安装速度的提升。Debian 系和 Ubuntu 系的换源思路完全一样但 Ubuntu 要注意需不需要启用恰好对应版本的源目录细节可以在镜像站首页看到说明。7.3 手动安装软件包从安装搜狗输入法说开去很多人问“Linux 上怎么安装搜狗输入法”这类问题反映的其实是 Linux 软件安装的另一种思路很多 GUI 软件不会进发行版官方源而是由官网提供安装包。搜狗输入法提供的是.deb包你需要sudo dpkg -i sogoupinyin.deb # 可能报依赖错误 sudo apt -f install # 修复缺失的依赖第一步dpkg -i常常会报错因为缺了一堆依赖包第二步apt -f install的意思是“修复依赖关系”把缺的包自动补装。两个命令配合基本能装好大多数第三方.deb包。.rpm包在 RedHat 系里同理rpm -ivh package.rpm然后yum install -y补依赖。7.4 安装 Python 和 GCC开发环境的常规操作装 Python 时最简单的是直接apt install python3 python3-pip。但如果要指定版本比如项目需要 Python 3.11 而源里的是 3.9那就得考虑编译安装或用版本管理工具pyenv。编译安装的常规流程./configure --prefix/usr/local/python3.11 make -j$(nproc) make altinstall这里有个重要的坑编译安装 Python 时千万别用make install用make altinstall。altinstall会避免覆盖系统自带的python3可执行文件防止把系统环境搞坏。-j$(nproc)的意思是使用所有 CPU 核心同时编译加快速度--prefix指定安装目录避免和系统自带 Python 混在一起。安装 GCC 编译工具链Debian/Ubuntu 系一句话apt install build-essentialCentOS/openEuler 系则是yum groupinstall Development Tools装完之后可以用gcc --version验证。很多源码包编译时会报“缺少头文件”之类的错误大概率是缺build-essential或对应开发包比如apt install libssl-dev。源码编译三步走./configure make make install是 Linux 老传统遇到编译失败优先看./configure输出的 printf 类提示它通常已经把缺失的依赖告诉你了。8. 给新手的练习路径怎么把命令真正变成自己的8.1 先搭一个随便折腾不心疼的环境学 Linux 最怕的不是学不会而是没有一个能随便折腾的环境。推荐三种方式按预算和场景选本地虚拟机装 VirtualBox 或 VMware下载 Ubuntu Server 或 Debian ISO 镜像安装时分配 2 核 CPU、4GB 内存、30GB 硬盘就够日常练习了。虚拟机的好处是随便玩系统搞崩了重装也就十分钟。云服务器各大云厂商都有免费试用或低配学生机优点是随时可以从自己电脑 SSH 连上去真实感和成就感更强。Windows 上的 WSL如果你机器是 Windows 且只是体验WSL 是成本最低的入口但它和真实 Linux 服务器还有差异特别是 systemd 和网络行为。做练习时有一个原则不要怕打错命令但要分清哪些命令只能在自己的测试环境里跑。生产环境里不明不白的命令坚决先查清楚再执行。8.2 从“背命令”切换到“按需查命令”命令太多了你不可能全背下来我也不建议背。更高效的学习方式是先知道有哪些“分类”然后在遇到具体需求时按分类去查。比如你心里要有一张分类地图文件操作类ls、cp、mv、rm、find、文本处理类grep、sed、awk、sort、uniq、进程管理类ps、top、kill、systemctl、网络类ping、curl、ss、lsof、磁盘类df、du、mount、权限类chmod、chown、useradd、打包压缩类tar、zip、软件包类apt、yum。遇到问题先落到分类再查具体命令的用法一查一个准。8.3 一个小项目练手写个简单的日志监控脚本理论学习再多不如一个小项目来得实在。我建议新手尝试一个简单又实用的任务写一个用 shell 命令组合的日志分析脚本。比如目标统计/var/log/nginx/access.log中今天访问次数最多的 10 个 IP并输出到报告。你可能会用到date、grep、awk、sort、uniq、head甚至用crontab定时执行。做完这个你至少能熟练使用管道、重定向、文本处理三兄弟顺便理解脚本的#!/bin/bash结构和chmod x的执行权限。我见过不少从“只会敲单个命令”到“能写简单脚本”的新手都是通过这种小任务跨过门槛的。8.4 养成记录和复盘的微习惯最后给个我自己长期使用的习惯准备一个 Markdown 文件当“私人速查笔记”每遇到一个命令不仅记录语法更是记录“我当时为什么用它、用它解决了什么问题”。比如今天用tar -czvf backup.tar.gz /home备份目录就写下“-c 创建、-z 用 gzip 压缩、-v 显示过程、-f 指定文件备份目录而不是为了传给别人用”。下次再看见别人写tar -xzf你就能立刻判断出它的用途是解压某类备份包因为-x表示 extract。我个人的经验是Linux 命令的真正分水岭不是“记住了多少条命令”而是“能不能把几条命令组合起来解决一个完整的问题”。当你能从ps aux找到进程、用ss -tlnp找到端口、用tail -f盯住日志、再用grep过滤关键词把一条故障从症状一路追到根因的时候基本就算真正入门了。之后的路就是靠一个个真实问题和一次次组合查询越走越熟。
返回列表