作为一个程序员,不管你是做后端开发、运维还是前端,Linux都是必备的技能。现在服务器基本上都是Linux系统,部署应用、排查问题、查看日志、管理文件等等,都需要用到Linux命令。但是很多人对Linux命令的掌握只是停留在ls、cd、pwd这几个最基础的命令,遇到复杂一点的操作就不知道怎么办了,只能去百度,效率很低。

其实Linux常用命令并不多,掌握了常用的几十个命令,再加上一些技巧,就能应对大部分的工作场景了。今天就来分享一下我在工作中常用的Linux命令和一些实战技巧。

一、文件和目录操作

文件和目录操作是最基础也是最常用的命令,这些命令每天都要用,必须熟练掌握。

1. ls - 列出目录内容

ls是最常用的命令,用来查看目录下有哪些文件。常用参数:

  • ls -l:长格式显示,显示文件的权限、所有者、大小、修改时间等详细信息
  • ls -a:显示所有文件,包括隐藏文件(以.开头的文件)
  • ls -lh:人性化显示文件大小,比如1K、2M、3G,而不是字节数
  • ls -lt:按修改时间排序,最新修改的在前面
  • ls -R:递归显示子目录的内容

我最常用的是ls -lh,既能看到详细信息,文件大小也很直观。

2. cd - 切换目录

cd用来切换工作目录,这个就不用多说了。几个常用的:

  • cd ~:回到用户主目录
  • cd -:回到上一次所在的目录,这个很实用,在两个目录之间切换很方便
  • cd ..:回到上一级目录
  • cd ../..:回到上两级目录

3. pwd - 显示当前目录

pwd用来显示当前所在的目录路径,有时候不知道自己在哪个目录了,敲一下pwd就知道了。

4. mkdir - 创建目录

mkdir用来创建目录。常用参数:

  • mkdir -p:递归创建目录,比如mkdir -p a/b/c,会一次性创建a、a/b、a/b/c三级目录,如果父目录不存在会自动创建,非常实用
  • mkdir -m:创建目录的时候指定权限,比如mkdir -m 755 test

5. cp - 复制文件或目录

cp用来复制文件或目录。常用参数:

  • cp -r:递归复制目录,复制目录的时候必须加这个参数,不然会报错
  • cp -i:覆盖前提示,避免不小心覆盖了重要文件
  • cp -p:复制的时候保留文件的属性,比如所有者、权限、修改时间等
  • cp -a:相当于cp -dpR,归档复制,保留所有属性,常用于备份

比如cp -r src/ dst/就是把src目录整个复制到dst目录下。

6. mv - 移动或重命名文件

mv用来移动文件或者重命名文件。常用参数:

  • mv -i:覆盖前提示
  • mv -f:强制覆盖,不提示
  • mv -n:不覆盖已存在的文件

比如mv oldname newname就是重命名,mv file /path/to/dir/就是把文件移动到指定目录。

7. rm - 删除文件或目录

rm用来删除文件或目录,这个命令要慎用,特别是rm -rf,删了就找不回来了。常用参数:

  • rm -r:递归删除目录,删除目录的时候必须加这个参数
  • rm -f:强制删除,不提示
  • rm -i:删除前提示,建议平时用这个,避免误删

重要提示:千万不要随便用rm -rf /,也不要在不确定的情况下用rm -rf *,特别是在根目录或者重要目录下,一不小心就会把系统删崩了。删除重要文件之前一定要再三确认,最好先备份。

8. find - 查找文件

find是一个非常强大的查找命令,能根据各种条件查找文件。常用用法:

  • find . -name "*.log":在当前目录及子目录下查找所有.log结尾的文件
  • find /path -type f -size +10M:查找指定目录下大于10M的文件
  • find . -mtime -7:查找最近7天内修改过的文件
  • find . -name "*.tmp" -delete:查找并删除所有.tmp文件
  • find . -type f -exec chmod 644 {} \;:查找所有文件并修改权限为644

find命令非常强大,参数也很多,熟练掌握之后查找文件会非常高效。

9. tar - 打包压缩

tar用来打包和压缩文件,Linux下最常用的压缩格式就是tar.gz。常用用法:

  • tar -czvf archive.tar.gz /path/to/dir:把目录打包并压缩成tar.gz格式

- c:创建新的归档文件 - z:用gzip压缩 - v:显示处理过程 - f:指定文件名

  • tar -xzvf archive.tar.gz:解压tar.gz文件

- x:解压

  • tar -tjvf archive.tar.bz2:查看tar.bz2压缩包的内容
  • tar -czvf archive.tar.gz --exclude="*.log" /path:打包的时候排除.log文件

我最常用的就是tar -czvf打包和tar -xzvf解压,记住这两个就够用了。

二、文件查看和编辑

查看和编辑文件也是经常要做的操作,特别是查看日志文件。

1. cat - 查看文件内容

cat用来查看文件的全部内容,适合看小文件,大文件的话内容会一闪而过看不完。常用参数:

  • cat -n:显示行号
  • cat -A:显示所有字符,包括不可见字符,比如换行符、制表符等

2. less - 分页查看文件

less是一个分页查看工具,比cat更适合查看大文件,因为它不会一次性把整个文件加载到内存,而且可以上下翻页、搜索。常用操作:

  • 上下方向键或者j/k:上下移动一行
  • 空格或者f:向下翻一页
  • b:向上翻一页
  • g:跳到文件开头
  • G:跳到文件末尾
  • /关键词:向下搜索关键词
  • ?关键词:向上搜索关键词
  • n:下一个搜索结果
  • N:上一个搜索结果
  • q:退出

我经常用less来查看日志文件,特别是大的日志文件,用less很方便,还能搜索关键词。

3. head - 查看文件开头

head用来查看文件的开头部分,默认显示前10行。常用参数:

  • head -n 20 file:显示前20行
  • head -c 100 file:显示前100个字节

4. tail - 查看文件末尾

tail用来查看文件的末尾部分,默认显示最后10行。常用参数:

  • tail -n 20 file:显示最后20行
  • tail -f file:实时追踪文件的新增内容,这个非常实用,查看实时日志的时候用这个,日志有新内容会自动显示出来
  • tail -F file:和-f类似,但是如果文件被删除重建了会自动重新打开,更健壮

排查问题的时候我最常用的就是tail -f app.log,实时看日志输出,非常方便。

5. grep - 搜索文件内容

grep是一个非常强大的文本搜索工具,能在文件中搜索匹配的行。常用参数:

  • grep "keyword" file:在文件中搜索包含keyword的行
  • grep -i "keyword" file:忽略大小写搜索
  • grep -n "keyword" file:显示行号
  • grep -v "keyword" file:反向搜索,显示不包含keyword的行
  • grep -r "keyword" /path:递归搜索目录下所有文件
  • grep -c "keyword" file:统计匹配的行数
  • grep -A 5 "keyword" file:显示匹配行及后面5行
  • grep -B 5 "keyword" file:显示匹配行及前面5行
  • grep -C 5 "keyword" file:显示匹配行及前后各5行

grep是排查问题的神器,比如要在日志里找某个错误,直接grep -n "ERROR" app.log就能把所有错误行找出来,还能显示行号。再配合-A、-B参数,还能看到错误的上下文,非常方便。

6. wc - 统计文件

wc用来统计文件的行数、单词数、字节数。常用参数:

  • wc -l file:统计行数
  • wc -w file:统计单词数
  • wc -c file:统计字节数

比如wc -l app.log就能知道日志文件有多少行。

7. vim/vi - 文本编辑器

vim是Linux下最常用的文本编辑器,功能非常强大,但是学习曲线也比较陡。作为程序员,至少要掌握vim的基本用法,因为很多服务器上只有vim,没有其他编辑器。

vim有三种模式:普通模式、插入模式、命令模式。刚打开vim的时候是普通模式,按i进入插入模式可以编辑文本,按Esc回到普通模式,在普通模式下按:进入命令模式,可以执行保存、退出等命令。

常用命令:

  • :w:保存
  • :q:退出
  • :wq:保存并退出
  • :q!:强制退出不保存
  • dd:删除当前行
  • yy:复制当前行
  • p:粘贴
  • /关键词:搜索
  • u:撤销
  • Ctrl + r:重做

掌握这些基本命令,就能用vim做简单的编辑了。如果想深入学习vim,还有很多高级用法,值得花时间学习,熟练之后编辑文本的效率会非常高。

三、系统和进程管理

1. ps - 查看进程

ps用来查看当前系统的进程状态。常用用法:

  • ps aux:查看所有进程的详细信息,包括用户、CPU占用、内存占用、启动时间等
  • ps -ef:另一种格式查看所有进程
  • ps aux | grep nginx:查找nginx相关的进程,这个非常常用

我一般用ps aux | grep 进程名来查找某个进程是否在运行,以及进程的PID。

2. top - 实时查看系统状态

top用来实时查看系统的CPU、内存、进程等状态,相当于Windows的任务管理器。进入top之后常用操作:

  • P:按CPU使用率排序
  • M:按内存使用率排序
  • q:退出
  • k:杀死某个进程(输入PID)
  • 1:显示每个CPU核心的使用情况

top能实时看到系统的负载情况,排查系统性能问题的时候很有用。

3. kill - 杀死进程

kill用来给进程发送信号,最常用的是杀死进程。常用用法:

  • kill PID:给进程发送TERM信号,让进程正常退出
  • kill -9 PID:强制杀死进程,进程会立即终止,不会做清理工作,慎用
  • killall 进程名:根据进程名杀死所有相关进程

如果进程卡住了正常退出不了,就用kill -9强制杀死,但是要注意,强制杀死可能会导致数据丢失或者资源没释放,不到万不得已不要用。

4. df - 查看磁盘使用情况

df用来查看磁盘的使用情况,包括总大小、已用、可用、挂载点等。常用参数:

  • df -h:人性化显示大小,比如G、M
  • df -T:显示文件系统类型

比如df -h就能看到各个磁盘分区的使用情况,排查磁盘满了的问题的时候首先用这个命令看一下。

5. du - 查看目录大小

du用来查看目录或文件占用的磁盘空间大小。常用参数:

  • du -h:人性化显示大小
  • du -sh /path:只显示指定目录的总大小
  • du -h --max-depth=1 /path:显示指定目录下一级子目录的大小

排查磁盘满了的时候,先用df看哪个分区满了,然后用du一层层往下找,就能找到是哪个目录占用空间大了。比如du -h --max-depth=1 /就能看到根目录下各个一级目录的大小,然后逐层深入,很快就能找到大文件。

6. free - 查看内存使用情况

free用来查看系统的内存使用情况,包括总内存、已用、空闲、缓存、交换分区等。常用参数:

  • free -h:人性化显示大小
  • free -m:以MB为单位显示

比如free -h就能看到内存的使用情况,排查内存问题的时候用。

7. uname - 查看系统信息

uname用来查看系统信息。常用参数:

  • uname -a:显示所有系统信息,包括内核版本、主机名、架构等
  • uname -r:显示内核版本

8. uptime - 查看系统运行时间和负载

uptime用来查看系统运行了多久,以及系统的平均负载。输出的三个数字分别是1分钟、5分钟、15分钟的平均负载。负载值如果持续大于CPU核心数,说明系统负载比较高,需要排查原因。

四、网络相关命令

1. ifconfig/ip - 查看网络接口信息

ifconfig用来查看和配置网络接口,不过现在很多新系统已经用ip命令替代了ifconfig。

  • ifconfig:查看所有网络接口的信息,包括IP地址、MAC地址等
  • ip addr:查看网络接口信息(新命令)
  • ip route:查看路由表

2. ping - 测试网络连通性

ping用来测试和目标主机的网络连通性。常用用法:

  • ping baidu.com:ping百度,看能不能通
  • ping -c 4 baidu.com:只发4个包就停止(Linux下默认会一直ping,需要Ctrl+C停止)
  • ping -i 0.5 baidu.com:设置发包间隔为0.5秒

ping是排查网络问题的第一步,先看能不能ping通目标地址,如果ping不通说明网络有问题。

3. netstat/ss - 查看网络连接

netstat用来查看网络连接、端口监听等信息,现在也被ss命令替代了,但是netstat还是很常用。

  • netstat -tlnp:查看所有TCP监听端口,以及对应的进程,这个非常常用,查看某个端口有没有被占用
  • netstat -anp:查看所有网络连接
  • ss -tlnp:ss命令版本,查看TCP监听端口
  • ss -s:显示网络连接统计

比如要查看80端口有没有被占用,就用netstat -tlnp | grep 80

4. curl - 网络请求工具

curl是一个非常强大的网络请求工具,能发送各种HTTP请求,下载文件等。常用用法:

  • curl http://example.com:发送GET请求,显示响应内容
  • curl -I http://example.com:只显示响应头
  • curl -X POST -d "key=value" http://example.com:发送POST请求
  • curl -H "Content-Type: application/json" -d '{"key":"value"}' http://example.com:发送JSON格式的POST请求
  • curl -O http://example.com/file.zip:下载文件
  • curl -L http://example.com:跟随重定向
  • curl -v http://example.com:显示详细的请求和响应信息,调试的时候很有用

curl是排查接口问题的神器,比如要测试一个接口能不能正常访问,直接curl一下就能看到响应内容和状态码,非常方便。

5. wget - 文件下载工具

wget用来从网络上下载文件,比curl更适合下载大文件。常用用法:

  • wget http://example.com/file.zip:下载文件
  • wget -c http://example.com/file.zip:断点续传,下载中断了可以继续下
  • wget -O newname.zip http://example.com/file.zip:下载并重命名
  • wget -b http://example.com/file.zip:后台下载

五、权限管理

1. chmod - 修改文件权限

chmod用来修改文件或目录的权限。Linux的权限分为读(r)、写(w)、执行(x)三种,分别对应所有者、所属组、其他用户三类。常用用法:

  • chmod 755 file:用数字方式设置权限,7=4+2+1=rwx,5=4+1=r-x,所以755就是所有者rwx,所属组和其他用户r-x
  • chmod +x file:给所有用户添加执行权限
  • chmod u+x file:只给所有者添加执行权限
  • chmod -R 755 /path:递归修改目录下所有文件的权限

常见的权限:755一般用于目录和可执行文件,644一般用于普通文件。

2. chown - 修改文件所有者

chown用来修改文件或目录的所有者和所属组。常用用法:

  • chown user:group file:同时修改所有者和所属组
  • chown user file:只修改所有者
  • chown :group file:只修改所属组
  • chown -R user:group /path:递归修改

比如文件的所有者不对导致访问不了,就用chown修改一下所有者。

六、实用技巧

1. 管道 |

管道是Linux中非常重要的概念,用|表示,作用是把前一个命令的输出作为后一个命令的输入。通过管道可以把多个简单的命令组合起来,实现复杂的功能。

比如:

  • ps aux | grep nginx:把ps的输出传给grep,过滤出nginx相关的进程
  • cat app.log | grep ERROR | wc -l:统计日志中ERROR的行数
  • ls -lh | sort -k5 -h:把ls的输出按第5列(文件大小)排序
  • du -h --max-depth=1 / | sort -h:查看根目录下各目录大小并排序

管道是Linux命令的精髓,熟练使用管道能大大提高效率。

2. 重定向 > 和 >>

重定向用来把命令的输出写入到文件中。

  • >:覆盖写入,如果文件存在会覆盖原来的内容
  • >>:追加写入,在文件末尾添加内容,不会覆盖

比如:

  • ls -lh > filelist.txt:把目录列表写入到filelist.txt
  • echo "hello" >> test.txt:把hello追加到test.txt末尾
  • command > output.txt 2>&1:把标准输出和错误输出都写入到output.txt

3. 历史命令

  • history:查看历史命令
  • !数字:执行历史命令中第几条命令
  • !!:执行上一条命令
  • !关键词:执行最近一条以关键词开头的命令
  • Ctrl + r:反向搜索历史命令,输入关键词就能找到之前执行过的命令,非常实用

熟练使用历史命令能省去很多重复输入的时间。

4. 快捷键

  • Ctrl + c:终止当前命令
  • Ctrl + z:挂起当前命令(用fg恢复)
  • Ctrl + d:退出当前shell或者结束输入
  • Ctrl + l:清屏,相当于clear命令
  • Ctrl + a:光标移到行首
  • Ctrl + e:光标移到行尾
  • Ctrl + u:删除光标到行首的内容
  • Ctrl + k:删除光标到行尾的内容
  • Ctrl + w:删除光标前一个单词

这些快捷键能大大提高命令行操作的效率,建议记住常用的几个。

七、写在最后

Linux常用命令实战:从入门到熟练的必备技能。

Linux命令看起来很多,但是常用的其实就那么几十个,把这些常用命令掌握了,再配合管道、重定向、历史命令等技巧,就能应对大部分的工作场景了。而且Linux命令是熟能生巧的,用多了自然就记住了,不用死记硬背。

作为程序员,Linux是必备技能,不管你是做什么方向的开发,都或多或少会用到Linux。花点时间把Linux命令学好,绝对是值得的,能大大提高你的工作效率,也能让你在排查问题的时候更得心应手。

这篇文章分享了我在工作中常用的Linux命令和技巧,希望能帮到大家。当然Linux的内容还有很多,这里只是冰山一角,大家可以根据自己的需求深入学习。

最后用一句话结尾:"Linux命令不难,难的是坚持学习和实践。多用多练,你也能成为Linux命令行高手。"

祝大家都能熟练掌握Linux命令,工作顺利,效率满满!