1. Linux命令概述:从入门到精通的必备工具
作为一名在Linux环境下工作多年的系统管理员,我深知命令行操作对于工作效率的决定性影响。Linux命令是操作系统与用户交互的核心方式,也是区分普通用户和专业技术人员的重要标志。与图形界面相比,命令行提供了更直接、更高效的系统控制能力,特别是在服务器管理、批量处理和自动化任务方面具有无可替代的优势。
Linux命令的学习曲线看似陡峭,实则遵循着清晰的逻辑体系。所有命令都可以归为几大类:文件操作、文本处理、系统管理、网络通信和进程控制等。掌握这些命令不仅能提升日常工作效率,更是面试中展示技术能力的重要途径。根据我的经验,即使是经验丰富的工程师,也常常会因为忽视某些命令的细节而陷入困境。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件与目录操作:基础中的基础
2.1 核心文件操作命令
ls命令无疑是使用频率最高的命令之一,但大多数人只停留在ls -l的层面。实际上,ls -lah组合能显示包括隐藏文件在内的详细信息,并以人类可读的格式展示文件大小。-t参数按修改时间排序,-r反转排序结果,这些选项在查找最新或最旧文件时特别有用。
cp和mv命令看似简单,但-i(交互式)、-u(仅更新)和-v(详细输出)等选项能大幅提升操作安全性。特别值得注意的是,mv命令在同一个文件系统内是重命名操作,跨文件系统则实际执行复制+删除,这在处理大文件时可能产生性能差异。
rm命令的破坏性众所周知,但--preserve-root选项可以防止误删根目录。我强烈建议在.bashrc中添加alias rm='rm -i'来启用交互式删除。对于重要文件,可以先使用mv命令移动到临时目录,确认无误后再删除。
2.2 目录管理与导航技巧
cd命令配合~(家目录)、-(上一个目录)和..(上级目录)能快速导航。pushd和popd命令维护目录栈,适合在多个目录间频繁切换的场景。mkdir -p可以一次性创建多级目录,这在部署脚本中特别实用。
find命令是文件搜索的瑞士军刀。基本用法如find /path -name "*.log",但更强大的功能在于结合-exec参数执行后续操作。例如,find . -type f -mtime +30 -exec rm {} \;删除30天前的文件。-size参数可以按大小筛选,-perm按权限查找。
tree命令以树状图显示目录结构,-L控制深度,-d只显示目录。虽然不是所有系统都预装,但绝对值得安装。对于大型项目,tree -h会同时显示文件大小,便于快速了解项目结构。
3. 文本处理与查看:数据分析的利器
3.1 常用文本查看命令
cat命令虽然简单,但配合-n显示行号、-s压缩空行,在查看配置文件时很有帮助。tac反向输出在某些日志分析场景下意外地实用。
less比more功能更强大,支持搜索(/)、跳转(G和g)、标记位置(m+字母)等。-N显示行号,-S防止长行换行。我习惯设置export PAGER='less -RS'作为默认分页器。
head和tail命令分别查看文件开头和结尾,-n指定行数。tail -f实时跟踪日志更新,结合grep过滤特定内容,是调试服务的必备组合。tail -F更强大,能在文件被轮转(如logrotate)后继续跟踪新文件。
3.2 强大的文本处理工具
grep是文本搜索的核心工具,-i忽略大小写,-v反向匹配,-A/-B/-C显示匹配行前后的内容。-E启用扩展正则表达式,-P使用Perl正则(更强大)。我常用的组合是grep -rnw '/path/' -e 'pattern',递归搜索目录下所有文件。
awk和sed构成了Linux文本处理的中坚力量。awk '{print $1}'打印第一列只是入门,真正的威力在于其完整的编程语言特性。例如统计Nginx日志中每个IP的访问量:awk '{ips[$1]++} END {for(ip in ips) print ip, ips[ip]}' access.log | sort -nrk2 | head。
sed适合行编辑,-i原地修改文件,s/old/new/g全局替换。更复杂的如sed -n '5,10p'打印5-10行,/pattern/d删除匹配行。我常用sed -i.bak在修改前自动备份,防止误操作。
sort和uniq经常组合使用。sort -u直接去重,而sort file | uniq -c则统计出现次数。-n按数值排序,-r倒序,-k指定排序列。例如找出访问量最大的URL:cut -d' ' -f7 access.log | sort | uniq -c | sort -nr | head。
4. 系统管理与监控:深入掌握系统状态
4.1 进程管理命令
ps命令查看进程信息,aux参数组合显示所有用户的所有进程。-ef是另一种常用格式。ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head可以快速找出CPU占用最高的进程。
top和htop提供动态视图,htop更直观且支持鼠标操作。1键显示所有CPU核心,M按内存排序,P按CPU排序。F6可以选择排序字段,F4过滤进程。我习惯设置alias top='htop'来替代传统top。
kill和killall用于终止进程,-9强制终止是最后手段。pkill按名称杀进程,pgrep查找进程ID。更安全的做法是先发送SIGTERM(15),给进程清理的机会:kill -15 pid,必要时再用kill -9。
nohup和disown让进程在退出终端后继续运行。screen和tmux则提供更完整的终端复用功能,支持多个窗口和会话恢复。我强烈推荐学习tmux,它的分屏和会话保持功能对远程工作至关重要。
4.2 系统资源监控
free -h以易读格式显示内存使用情况,-s参数持续更新。vmstat 1提供系统整体状态,包括进程、内存、交换区、IO和CPU活动。iostat -xz 1监控磁盘IO,特别关注%util和await指标。
df -h查看磁盘空间,-T显示文件系统类型。du -sh *查看当前目录各文件/目录大小,--max-depth=1控制递归深度。ncdu工具提供交互式界面,更直观地分析磁盘使用。
lsof命令列出打开的文件,-i查看网络连接,-p按进程ID过滤。例如lsof -i :80找出所有使用80端口的进程。lsof /path查看谁在使用某个文件或目录,解决"设备忙"错误时特别有用。
netstat和ss显示网络连接,后者更现代高效。-tTCP连接,-uUDP,-l监听端口,-p显示进程。ss -tulnp是检查服务监听状态的经典组合。ip命令替代了老旧的ifconfig,提供更强大的网络配置功能。
5. 网络操作与数据传输
5.1 网络诊断工具
ping测试基本连通性,-c指定次数,-i设置间隔。traceroute(或tracepath)显示路由路径,诊断网络延迟问题。mtr结合了两者功能,提供实时更新的网络质量视图。
curl和wget用于HTTP请求和数据下载。curl -I只获取头部,-v详细输出,-o保存到文件。wget -c支持断点续传,-r递归下载整个网站。我常用curl ifconfig.me快速获取公网IP。
telnet和nc(netcat)测试端口连通性。telnet host port或nc -zv host port可以确认防火墙是否开放了特定端口。nc还能创建简单的TCP/UDP服务器,用于临时数据传输测试。
dig和nslookup查询DNS记录,前者输出更详细。+short简化输出,+trace显示完整解析过程。host命令是另一个替代品。我经常用dig +short myip.opendns.com @resolver1.opendns.com获取公网IP。
5.2 安全文件传输
scp是安全的远程拷贝工具,基本语法scp [options] source target。-r递归复制目录,-P指定端口(注意是大写),-C启用压缩。例如scp -P 2222 -r ~/project user@remote:/backup/。
rsync比scp更强大,支持增量同步和断点续传。-a归档模式(保留权限等),-z压缩传输,-v详细输出,--progress显示进度。--delete使目标与源完全一致,使用前务必先测试。
sftp提供交互式文件传输,支持目录浏览和批量操作。lcd切换本地目录,lls列出本地文件,put上传,get下载。比FTP安全,适合需要频繁交互的场景。
ssh本身也支持文件传输,通过重定向实现。例如ssh user@host "cat /path/remotefile" > localfile。结合tar可以传输整个目录:ssh user@host "tar czf - /path/to/dir" | tar xzvf - -C /local/path。
6. 权限管理与用户控制
6.1 文件权限与属性
chmod修改权限,数字模式(如755)或符号模式(如u+x)都可以。-R递归应用,但要小心使用。我建议先用find -type d -exec chmod 755 {} \;和find -type f -exec chmod 644 {} \;批量设置合理的默认权限。
chown改变文件所有者,chgrp改变组。-R同样递归应用。--reference=file参数可以参照另一个文件的权限设置,这在备份恢复时特别方便。
umask决定新建文件的默认权限,通常设置为022(目录755,文件644)或027(目录750,文件640)。可以在/etc/profile或用户.bashrc中永久设置。umask -S以符号格式显示当前值。
lsattr和chattr管理文件扩展属性,如+i使文件不可修改(连root也不行),+a只能追加。这些属性在安全加固中很有用,但要注意不要锁死关键系统文件。
6.2 用户与组管理
useradd和usermod管理用户账户。-m创建家目录,-s指定shell,-G加入附加组。userdel -r完全删除用户及其家目录。我习惯用adduser代替useradd,因为它提供交互式界面和更合理的默认设置。
passwd修改密码,--stdin从管道读取(用于脚本)。chage管理密码过期策略,-l查看当前设置。-M设置最大有效期,-W提前警告天数。企业环境中这些设置对安全合规很重要。
groupadd和groupmod管理组。gpasswd -a user group将用户加入组,-d移除。newgrp临时切换主要组,测试权限设置时很有用。id命令显示用户和组的详细信息。
sudo和su切换用户身份。visudo安全编辑/etc/sudoers文件。可以配置免密码sudo(NOPASSWD)、限制命令集、设置环境变量保留等。我建议通过/etc/sudoers.d/下的单独文件管理自定义规则,而不是直接修改主文件。
7. 压缩与归档:高效管理文件集合
7.1 常用压缩工具
gzip和gunzip处理.gz文件,-9最大压缩率,-d解压。zcat直接查看压缩文件内容,无需显式解压。gzip会替换原文件,保留原文件需要用gzip -c file > file.gz。
bzip2和bunzip2处理.bz2文件,通常比gzip压缩率更高但更慢。-k保留原文件,-d解压。bzcat对应zcat的功能。在需要高压缩率且时间不敏感的场景下是不错的选择。
xz提供更高的压缩率,生成.xz文件。-9极致压缩,-T使用多线程加速。unxz解压,xzcat查看内容。特别适合压缩大型静态数据文件,如数据库备份。
zip和unzip处理.zip文件,兼容Windows系统。-r递归压缩目录,-e加密,-x排除文件。unzip -l查看内容而不解压,-o覆盖现有文件。跨平台共享文件时的首选格式。
7.2 归档与高级用法
tar是最常用的归档工具,本身不压缩但常与压缩工具配合。-c创建,-x提取,-v详细输出,-f指定文件。经典组合:tar czvf archive.tar.gz dir/(创建gzip压缩包),tar xzvf archive.tar.gz(解压)。
tar可以排除特定文件:tar czvf backup.tar.gz --exclude='*.tmp' dir/。--wildcards支持通配符提取:tar xzvf archive.tar.gz --wildcards '*.conf'。-T从文件读取要包含的文件列表,适合大型备份。
dd命令直接操作磁盘和分区,常用于创建镜像:dd if=/dev/sda of=disk.img bs=4M。conv=noerror,sync参数可以在读取错误时继续。status=progress显示传输进度。警告:错误的dd参数可能导致数据丢失!
rsync也可以创建类似归档的效果:rsync -a --delete source/ dest/使目标与源完全同步。--link-dest参数创建硬链接节省空间,实现增量备份。结合cron可以建立自动备份系统。
8. 环境变量与Shell定制
8.1 环境变量管理
env显示所有环境变量,printenv显示特定变量:printenv PATH。export设置环境变量:export VAR=value,只在当前shell有效。要使设置永久生效,需要写入~/.bashrc或/etc/profile等启动文件。
PATH是最重要的环境变量,决定命令搜索路径。添加新路径:export PATH=$PATH:/new/path。我习惯在~/.bashrc中组织PATH设置,按功能分组并添加注释,便于维护。
set显示shell变量和函数,unset删除变量。declare或typeset显式声明变量属性,如-r只读,-i整数,-a数组。readonly创建只读变量,防止意外修改。
alias创建命令别名,如alias ll='ls -alF'。unalias删除别名。我建议将常用别名集中放在~/.bash_aliases中,然后在~/.bashrc中引用。type命令可以检查别名、函数和二进制文件的定义位置。
8.2 Shell配置与脚本基础
~/.bashrc是用户级交互式shell配置,~/.bash_profile或~/.profile用于登录shell。/etc目录下的对应文件是系统级配置。修改后可以用source ~/.bashrc或. ~/.bashrc立即生效而不必重新登录。
history查看命令历史,!number重复执行历史命令,!string重复以string开头的最近命令。Ctrl+R反向搜索历史,Ctrl+G退出搜索。HISTSIZE和HISTFILESIZE控制历史记录大小,HISTTIMEFORMAT添加时间戳。
bash脚本以#!/bin/bash开头(称为shebang)。set -e在出错时退出,set -x打印执行的命令,便于调试。$0脚本名,$1第一个参数,$#参数个数,$@所有参数。[[ ]]比[ ]提供更多功能且更安全。
cron定时任务通过crontab -e编辑。格式:分钟 小时 日 月 星期 命令。@reboot启动时运行,@daily等是预定义间隔。我习惯在脚本中添加>> /var/log/myscript.log 2>&1来记录输出和错误。
