作为一个程序员,不管你是做后端开发、运维还是前端,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、Mdf -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-xchmod +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.txtecho "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命令,工作顺利,效率满满!
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录