尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Ubuntu/Linux命令行核心技能:从基础操作到高效运维实战指南

Ubuntu/Linux命令行核心技能:从基础操作到高效运维实战指南 1. 项目概述为什么我们需要掌握Ubuntu命令如果你刚接触Ubuntu或者从Windows/macOS转过来面对那个黑漆漆的终端窗口心里可能会有点发怵。我刚开始用Ubuntu那会儿也是总觉得用鼠标点点图形界面更踏实。但用久了你会发现真正让你感觉“这台机器归我管了”的时刻恰恰是当你敲下一行行命令系统精准地执行你意图的时候。无论是安装软件、排查问题、管理文件还是自动化任务命令行都是最高效、最直接的工具没有之一。“Ubuntu系统的常用命令”这个主题听起来像是一份枯燥的清单但它的本质是一套生存技能和效率工具集。它不是为了让你死记硬背而是让你理解每个命令背后的逻辑它在操作什么为什么要这么操作有没有更优的写法掌握了这些你不仅能应付日常运维和开发更能深入理解Linux系统的工作方式。网络上搜索“linux常用命令大全”的人背后真实的需求往往是服务器卡了怎么查文件找不到了怎么办软件装不上怎么解决我们今天要聊的就是把这些散落的“答案”串联成一套你可以随时调用的“方法论”。2. 命令核心哲学与高效入门心法在罗列具体命令之前我们必须先建立两个核心认知这能让你未来的学习事半功倍。2.1 理解Linux的“一切皆文件”思想这是Linux/Unix系统设计的基石。在Ubuntu里硬件设备如/dev/sda、进程信息如/proc/下的文件、网络连接甚至系统配置大多都以文件或目录的形式呈现。命令的本质就是对这些特殊“文件”进行读、写、执行操作。例如ls /dev查看所有设备文件。cat /proc/cpuinfo查看CPU信息读一个“文件”。echo “value” /sys/class/backlight/…/brightness调节屏幕亮度写一个“文件”。理解这一点你就能明白为什么很多命令如cat,grep,echo能应用在看似不相关的场景——因为它们操作的对象在系统层面是统一的。2.2 终端、Shell与命令的关系我们常说的“命令行”、“终端”其实是一个组合体终端Terminal一个提供输入输出界面的程序窗口比如Ubuntu自带的GNOME Terminal或者更强大的MobaXtermWindows上连接Linux服务器的利器。Shell运行在终端里的“命令解释器”它是你和系统内核之间的翻译官。Ubuntu默认的Shell是BashBourne-Again SHell现在也逐渐转向Zsh。你输入的命令由Shell解析后交给系统执行。所以学习命令其实是在学习Shell的语法和系统提供的工具。掌握好Shell你就能写出脚本Shell Script将重复劳动自动化。实操心得不要死记硬背命令的每个参数。核心是掌握--help和man手册的用法。90%的问题可以通过命令 --help查看简要帮助或者man 命令查看完整手册来解决。这是你最重要的“元技能”。3. 文件与目录操作立足之本这是使用频率最高的一组命令是你管理系统的“手脚”。3.1 导航与查看你在哪里有什么pwd打印当前工作目录。这是你的“坐标”在复杂的目录结构中迷路时首先用它确认位置。ls列出目录内容。光是这个命令就有无数技巧ls -l # 长格式显示包含权限、所有者、大小、时间最常用 ls -a # 显示所有文件包括以.开头的隐藏文件如.bashrc ls -lh # -h 将文件大小以人类可读方式K, M, G显示配合 -l 使用 ls -lt # 按修改时间排序最新的在前 ls -la ~ # 列出家目录~下的所有文件包括隐藏的cd切换目录。cd /usr/local # 切换到绝对路径 cd .. # 切换到上级目录 cd ~ 或 cd # 切换回当前用户的家目录 cd - # 切换到上一个所在的目录在两个目录间快速切换时非常方便3.2 创建、删除与移动管理文件实体mkdir创建目录。mkdir new_folder # 创建单个目录 mkdir -p project/src/utils # -p 参数允许你创建多级目录如果父目录不存在会自动创建touch创建空文件或更新已有文件的时间戳。常用于快速创建测试文件或触发某些依赖文件时间的操作。touch new_file.txtcp复制文件或目录。cp file1.txt file2.txt # 复制file1为file2 cp -r dir1/ dir2/ # -r 递归复制整个目录 cp -v *.log /backup/ # -v 显示复制过程配合通配符*批量操作mv移动或重命名文件/目录。在Linux中重命名被视为“移动”到同一路径下的新名字。mv old_name.txt new_name.txt # 重命名 mv file.txt /target/directory/ # 移动文件rm删除。这是最危险的命令之一请谨慎使用rm file.txt # 删除文件 rm -r directory/ # -r 递归删除目录及其内容 rm -rf directory/ # -f 强制删除不提示。rm -rf /*是著名的“删库跑路”命令绝对禁止血泪教训在执行任何rm -rf操作前尤其是通配符操作如rm -rf *.log先用ls命令确认一下匹配的文件列表是否正确。最好养成用trash-cli命令行回收站替代rm的习惯。3.3 查看与编辑文件内容cat连接文件并打印到标准输出。适合查看较小的文件。cat /etc/os-release # 查看系统版本信息 cat file1.txt file2.txt # 依次显示两个文件的内容less/more分页查看大文件。less比more功能更强支持上下翻页、搜索是查看日志的首选。less /var/log/syslog # 按q退出/搜索n下一个匹配项head/tail查看文件开头或结尾部分。head -n 20 file.log # 查看前20行 tail -n 50 file.log # 查看末尾50行 tail -f /var/log/app.log # -f 实时追踪文件末尾新增的内容监控日志的神器nano/vim命令行文本编辑器。nano简单易用适合新手vim功能强大但学习曲线陡峭。系统配置编辑常用它们。sudo nano /etc/ssh/sshd_config # 编辑SSH配置文件4. 系统信息与进程管理洞察全局当系统变慢、程序无响应时这些命令是你的“诊断仪”。4.1 系统状态一览uname打印系统信息。uname -a # 打印所有信息内核名称、主机名、内核版本、系统架构等 uname -m # 查看系统架构如x86_64, aarch64**ubuntu查看系统架构**常用此命令。df报告文件系统磁盘空间使用情况。df -h # -h 人类可读格式查看各分区剩余空间du估算文件和目录的磁盘使用空间。du -sh /home/username # -s 总计-h 人类可读查看某个目录总大小 du -h --max-depth1 . # 查看当前目录下一级子目录的大小free显示内存使用情况。free -h # 以G、M为单位显示内存和交换空间使用量uptime显示系统运行时间、用户数和平均负载。平均负载1分钟/5分钟/15分钟值如果持续高于CPU核心数说明系统负载较重。4.2 进程的监控与管理ps报告当前进程的快照。ps aux # 最常用的组合查看所有用户的详细进程信息 ps -ef | grep nginx # 查找包含“nginx”的进程ps aux输出列解读USER用户、PID进程ID、%CPU、%MEM、VSZ虚拟内存、RSS物理内存、TTY终端、STAT状态、START启动时间、TIME占用CPU时间、COMMAND命令。top/htop动态、交互式地查看进程和系统资源占用。htop是top的增强版界面更友好支持鼠标操作建议安装sudo apt install htop。kill向进程发送信号。默认发送TERM15信号请求进程终止。kill 1234 # 请求PID为1234的进程终止 kill -9 1234 # 发送SIGKILL9信号强制杀死进程。应在kill无效时作为最后手段。pkill/killall通过进程名来杀死进程。pkill -f “python app.py” # 杀死所有匹配该字符串的进程 killall nginx # 杀死所有名为nginx的进程4.3 网络状态诊断ifconfig/ip addr查看和配置网络接口。ifconfig来自老旧的net-tools包ip命令来自更现代的iproute2包功能更强大。ip addr show # 查看所有网络接口的IP地址等信息ping测试到目标主机的网络连通性。ping -c 4 google.com # 发送4个ICMP包后停止netstat/ss查看网络连接、路由表、接口统计等。ss是netstat的现代替代品速度更快。ss -tlnp # 查看所有TCP监听端口及其对应进程**linux查询日志常用命令** 不直接相关但排查“端口占用”问题必用。 netstat -tulnp # 等效命令但执行更慢curl/wget命令行下载工具。curl更侧重于数据传输和调试wget更侧重于递归下载。curl -I http://example.com # 仅获取HTTP头部信息用于调试 wget http://example.com/file.iso # 下载文件5. 权限与用户管理安全之门Linux的权限系统是其安全性的重要保障。5.1 理解文件权限与所有权使用ls -l可以看到类似-rwxr-xr--的字符串这代表了权限。第一位-代表普通文件d代表目录l代表链接。后九位每三位一组分别代表所有者user、所属组group、**其他人others**的权限。每组的三个字符r读4、w写2、x执行1。无权限用-表示。数字表示法rwxr-xr--换算为数字是754(4217, 4015, 4004)。5.2 权限修改命令chmod改变文件模式权限。chmod x script.sh # 给script.sh增加对所有用户的执行权限 chmod 755 script.sh # 设置为rwxr-xr-x常用于可执行脚本 chmod 644 config.json # 设置为rw-r--r--常用于配置文件 chmod -R 755 directory/ # -R 递归修改目录下所有文件的权限chown改变文件所有者和所属组。sudo chown user:group file.txt # 将file.txt的所有者改为user组改为group sudo chown -R www-data:www-data /var/www/html # 递归修改网站目录所有者常见于Web部署sudo以超级用户root权限执行命令。普通用户通过sudo临时获得管理员权限。sudo apt update # 更新软件包列表需要root权限注意事项sudo不是万能的开关。系统通过/etc/sudoers文件精确控制哪些用户能以何种方式执行哪些命令。滥用sudo或编写不安全的sudo脚本是重大安全风险。5.3 用户与组管理whoami打印当前登录用户名。id显示当前用户的UID用户ID、GID组ID及所属组。passwd修改当前用户的密码。sudo passwd username可以修改其他用户的密码。useradd/usermod/userdel添加、修改、删除用户。groupadd/groupdel添加、删除组。这些命令通常需要sudo权限。对于桌面用户更常用图形化的“用户和组”设置。6. 软件包管理系统的应用商店Ubuntu基于Debian使用APTAdvanced Package Tool这套强大的包管理系统。这是你安装、卸载、更新软件的官方渠道。6.1 APT基础命令更新软件源列表这步是获取服务器上最新软件包信息不是更新软件本身。sudo apt update升级已安装的包sudo apt upgrade # 升级所有可升级的包 sudo apt full-upgrade # 执行更智能的升级可能会处理依赖冲突并移除旧包搜索软件包apt search “web server” # 在软件源描述中搜索安装软件包sudo apt install nginx vim # 安装nginx和vim移除软件包sudo apt remove nginx # 移除nginx软件包但保留配置文件 sudo apt purge nginx # 彻底移除nginx包括配置文件清理无用包定期运行可以释放磁盘空间。sudo apt autoremove # 移除自动安装且不再需要的依赖包 sudo apt autoclean # 清理已下载的旧版本软件包缓存6.2 处理依赖与故障apt-cache查询软件包信息。apt-cache show nginx # 显示nginx包的详细信息包括版本、依赖、描述。 apt-cache depends nginx # 查看nginx依赖哪些包 apt-cache rdepends nginx # 查看哪些包依赖nginx反向依赖dpkg底层的包管理工具。APT是它的前端。当APT安装失败时可能需要用dpkg来修复。sudo dpkg -i package.deb # 手动安装一个.deb包 sudo dpkg --configure -a # 尝试修复未完成配置的包常用在安装中断后实操心得sudo apt update报错“无法连接”“Hash校验和不符”等通常是软件源/etc/apt/sources.list配置问题或网络问题。可以尝试更换为国内镜像源如阿里云、清华源能极大提升下载速度。修改源文件后务必再次运行sudo apt update。7. 文本处理与搜索数据炼金术在服务器上你面对的大部分数据是日志、配置文件等文本。熟练使用文本处理三剑客grep, sed, awk能让你从海量文本中快速提取黄金信息。7.1 grep全局正则表达式搜索在文件中搜索包含特定模式的行。grep “error” /var/log/syslog # 在syslog中搜索包含“error”的行 grep -r “TODO” /project/src/ # -r 递归搜索目录 grep -i “warning” app.log # -i 忽略大小写 grep -v “debug” app.log # -v 反选输出不包含“debug”的行 grep -E “(error|fatal)” app.log # -E 使用扩展正则表达式匹配error或fatal grep -A 2 -B 2 “panic” app.log # -A 2 显示匹配行后2行-B 2显示前2行用于查看上下文grep是linux查询日志常用命令中的绝对主力。7.2 sed流编辑器用于对文本行进行过滤和转换特别适合执行批量替换。sed ‘s/foo/bar/g’ file.txt # 将文件中所有的foo替换为bars表示替换g表示全局 sed -i ‘s/old/new/g’ file.txt # -i 直接修改原文件危险操作前建议先不加-i测试 sed ‘/^#/d’ config.cfg # 删除所有以#开头的行常用于删除注释 sed -n ‘5,10p’ file.txt # -n 抑制默认输出只打印第5到第10行7.3 awk文本分析工具一门强大的编程语言擅长处理结构化文本如CSV、日志。它按行处理并将每行分割成字段默认以空格分隔。awk ‘{print $1}’ access.log # 打印access.log每行的第一个字段比如IP地址 awk -F‘,’ ‘{print $2}’ data.csv # -F 指定分隔符为逗号打印第二列 awk ‘$3 100 {print $0}’ data.txt # 如果第三列值大于100则打印整行 awk ‘{sum $1} END {print sum}’ numbers.txt # 计算第一列的总和awk功能极其强大上述只是冰山一角。对于复杂的日志分析它是无可替代的。7.4 find文件查找根据名称、类型、大小、时间等属性在目录树中查找文件。find /home -name “*.txt” # 在/home下查找所有.txt文件 find . -type f -size 10M # 在当前目录查找大于10MB的普通文件 find /var/log -mtime -7 # 查找/var/log下7天内修改过的文件 find . -name “*.tmp” -delete # 查找并删除所有.tmp文件务必先不加-delete测试 find . -type f -exec grep -l “pattern” {} \; # 查找内容包含“pattern”的文件find的-exec参数可以对接任何命令功能非常灵活。8. 压缩与归档打包的艺术在Linux世界.tar.gz和.tar.bz2比.zip更常见。tar打包归档工具本身不压缩常与压缩工具联用。tar -czvf archive.tar.gz directory/ # -c 创建-z 用gzip压缩-v 显示过程-f 指定文件名 tar -xzvf archive.tar.gz # -x 解压-z 解压gzip压缩包 tar -cjvf archive.tar.bz2 directory/ # -j 用bzip2压缩压缩率更高更慢 tar -xzvf archive.tar.gz -C /target/path # -C 解压到指定目录gzip/bzip2/xz压缩工具。通常与tar配合使用如上例。单独使用时gzip file.txt # 压缩为file.txt.gz并删除原文件 gunzip file.txt.gz # 解压9. 环境变量与Shell配置环境变量是影响Shell及运行程序行为的键值对。echo $PATH查看PATH变量系统查找可执行文件的目录列表。export设置环境变量对当前Shell及其子进程有效。export MY_VAR“hello” export PATH$PATH:/my/custom/bin # 将自定义目录加入PATHsource执行脚本文件并在当前Shell环境中生效。常用于加载配置。source ~/.bashrc # 重新加载.bashrc配置 . ~/.bashrc # 与source等效用户级的Shell配置通常在家目录的隐藏文件中~/.bashrcBash的交互式非登录Shell配置文件。你在这里做的别名、函数设置打开新终端窗口就会生效。~/.bash_profile或~/.profileBash的登录Shell配置文件。通常用于设置环境变量。~/.bash_aliases专门存放命令别名通常被.bashrc引用。一个常见的需求是自定义命令别名永久生效# 编辑 ~/.bashrc 或 ~/.bash_aliases alias ll‘ls -alF‘ alias la‘ls -A‘ alias grep‘grep --colorauto‘ # 让grep结果高亮 # 保存后运行 source ~/.bashrc10. 实操场景串联从问题到命令的解决路径光知道命令不够关键是如何组合使用。下面模拟几个真实场景场景一服务器磁盘空间告急如何快速定位并清理大文件宏观查看df -h确认是哪个分区比如/或/home快满了。定位大目录进入疑似分区du -sh * | sort -rh | head -10。这条命令组合了du查看大小、sort逆序、人类可读数字排序、head取前10行能立刻找出当前目录下最大的10个文件/目录。深入分析对找到的大目录继续用du命令深入。安全删除确认无用后使用rm删除。对于日志文件可以用truncate -s 0 big.log清空内容而非删除如果进程正在写入。场景二某个Java应用进程CPU占用100%如何排查定位进程top或htop按P按CPU排序找到异常的Java进程记下PID比如12345。查看线程top -H -p 12345查看该进程下的所有线程找出CPU高的线程IDTID比如12346。线程转栈将TID转换为16进制printf “%x\n“ 12346-303a。获取堆栈jstack 12345 | grep -A 20 0x303a如果安装了JDK。从堆栈信息中就能看到是哪个Java方法在疯狂运行。根据堆栈信息结合代码逻辑判断是死循环、密集计算还是其他问题。场景三从日志中统计某个API接口的访问次数和平均响应时间假设日志格式为时间 IP “GET /api/user?idxxx HTTP/1.1” 状态码 响应时间ms# 假设日志字段为$1日期 $2时间 $3IP $4方法 $5URL $6协议 $7状态码 $8响应时间 grep “/api/user” access.log | awk ‘{count; sum$8} END {print “请求次数“ count, “平均响应时间“ sum/count, “ms”}‘ # 更详细一点按状态码分组统计 grep “/api/user” access.log | awk ‘{code[$7]; sum[$7]$8} END {for(c in code) print c, “:“, code[c], “次平均“, sum[c]/code[c], “ms”}‘11. 进阶工具与技巧效率倍增器掌握了基础命令后这些工具能让你的命令行体验产生质变。tmux终端复用器。允许你在一个终端窗口中创建多个会话、窗口和面板并且会话可以持久化即使断开SSH连接任务仍在后台运行。这对于在远程服务器上进行长时间操作至关重要。ssh与scp远程连接与安全拷贝。ssh userremote_host # 连接远程主机 scp local_file userremote_host:/remote/path # 拷贝本地文件到远程 scp -r local_dir/ userremote_host:/remote/path # 递归拷贝目录cron定时任务调度器。通过crontab -e编辑当前用户的定时任务。# 示例每天凌晨2点执行备份脚本 0 2 * * * /home/user/backup.shrsync强大的远程或本地文件同步工具支持增量同步比scp更高效。rsync -avz /source/ userremote_host:/destination/ # -a归档模式-v详细-z压缩传输管道|与重定向,,这是Shell的灵魂。cat log.txt | grep “error” | wc -l # 管道统计log.txt中error出现的行数 ls file_list.txt # 重定向将ls输出写入文件覆盖 echo “new line” file_list.txt # 追加重定向追加到文件末尾 sort unsorted.txt # 输入重定向从文件读取内容作为命令输入 command 21 | tee output.log # 将标准输出和错误输出都重定向到文件并同时显示在屏幕12. 常见问题与排查技巧实录即使老手也会踩坑这里记录一些高频问题和我的解决思路。问题1命令找不到command not found原因命令不在PATH环境变量包含的目录中或者根本没有安装。排查which command_name或type command_name查看命令的完整路径。如果which返回空说明未安装。用apt search查找并安装对应包。如果which有路径但执行不了可能是权限问题ls -l查看或者是个Shell内置命令/函数/别名type会告诉你。问题2权限被拒绝Permission denied原因当前用户对文件/目录没有足够的读、写或执行权限。排查ls -l查看文件权限和所有者。如果需要读/写他人文件可能需要sudo。如果是脚本无法执行用chmod x script.sh添加执行权限。如果是访问系统目录如/etc,/usr/local通常需要sudo。问题3软件包安装依赖冲突现象sudo apt install时提示“依赖关系问题”、“无法安装”。解决sudo apt --fix-broken install尝试自动修复损坏的依赖。sudo apt update然后重试。如果冲突严重可以尝试sudo apt full-upgrade。使用aptitude工具sudo apt install aptitude它提供更智能的依赖解决方案。终极方案查阅错误信息中的具体包名尝试sudo apt remove --purge 有问题的包再重新安装。问题4磁盘空间不足但du和df显示不一致原因可能有文件被删除但还被某个进程占用着空间未释放或者存在大量小文件导致du统计慢/不准。排查lsof | grep deleted查找已被删除但仍被进程占用的文件。重启对应进程可以释放空间。对于小文件过多df是准确的。du可能因为权限或遍历深度问题统计不全可以尝试sudo du -x / | sort -rh | head -20-x不跨越文件系统边界。问题5SSH连接慢原因DNS反向解析、GSSAPI认证等。解决编辑/etc/ssh/sshd_config服务端或~/.ssh/config客户端。# 在客户端配置中针对某主机添加 Host myserver HostName server_ip GSSAPIAuthentication no # 如果不需要也可以禁用DNS解析 # UseDNS no 此选项在服务端配置修改服务端配置后需重启SSH服务sudo systemctl restart sshd。命令行的学习是一个持续的过程最好的方法就是在实践中遇到问题然后带着问题去搜索和学习。把这篇指南当作一个随时可查的备忘录和思路索引而不是需要一次性背下来的课本。当你习惯了用命令行思考和工作你会发现图形界面反而成了某种限制。
返回列表