前段时间有同学问我:linux指令那么多,怎么去学?实际上这个问题也曾经困扰着我,多年走来,我总结了一个经验:优先学习你马上要用到的,而不是上来就体系的全部学习一遍。
可能很多同学会不太适应这样的方式,不体系的学习那很多知识不就跃层了吗?根本不理解什么意思?为什么这样,是什么原理?
但是大家要把握一点,这个行业的技术日新月异,作为后端开发甚至是运维而言,永远有比linux指令更要紧的技能要求你掌握。而linux指令本身,就像你操作window电脑,你一开始玩电脑的时候是先把电脑说明书看一遍吗?还不是打开游戏,玩起了你感兴趣的,马上要用到的。
于是乎好多同学甚至学会了输入游戏后台作弊指令这样的高阶操作,却还不知道怎么书写一个word文档。但那个时候的你会因为不会写word,不会写PPT焦虑吗?不会!因为用不着。
所以这就是说了这么多废话,要告诉大家的一个学习道理,开发这行,要求大家学最紧俏的,快速掌握实用,后续深入原理。学习是个循环往复的过程!
1. 常用指令以下命名已根据多年开发经验的使用频次做了一定精炼,只列举了个人认为最常用的,大家应该优先掌握的指令和参数,更多的用法大家可以根据自己的情况进行拓展学习
1.1 基础掌握- 1、进入目录指令
cd
我们进入linux系统,要想在这个黑色的世界自由行走,先要了解的就是cd指令,它能帮助我们进入到我们想要去的地方
比如想要去/usr/local
文件夹,那么执行cd /usr/local
即可。注意linux的路径和window的有所区分,就不再是以盘符开头
# 进入/root目录
cd ~
# 返回上一级目录
cd ..
# 进入当前目录下的bin目录
cd ./bin 或者 cd bin
# 进入兄弟目录xxx(返回上一级,再进入该目录即可)
cd ../xxx
- 2、查询列表指令
ll
或ls
ls
指令用来列举目录下的文件,支持的参数有多种
# 获取当前列表下全部文件,包括隐藏文件
ls -a
# 获取当前列表下文件的全部信息,包括权限、大小、最近修改时间,ll指令就是该指令的快捷输入
ls -l 或 ll
# 获取当前列表下的全部文件,包括子目录
ls -R
# 将文件按最近一次修改时间排序
ls -i
需要注意的是这些参数是可以组合使用的,比如:
ls -li
- 3、文本修改指令
vim
\vi
vim
是文本修改指令,我们在环境部署时经常需要修改配置文件,因此vim指令的使用必不可少。但是需要注意的是如果你的linux系统安装的时候是用的最小化安装,那么是不自带vim指令的,需要单独安装,或者使用vi
指令,虽然没有vim那么功能丰富,但是单纯的修改保存是完全没有问题的
vim 基础操作:
# 修改文件
vim fileName
# 切换修改模式
a
# 保存
esc + :wq
# 强制保存
:!wq
# 直接退出,不保存修改
:q
vim高级操作:
# 向后查找指定内容
:/xxx
# 向前查找指定内容
:?xxx
# 替换所有的xxx为yyy
:%s/^xxx/yyy/g
# 切换到第一行
gg
# 切换到最后一行
GG
# 跳转指定行
:row_number
# 显示行号
:set nu
# 取消显示行好
:set nonu
# 删除光标所在行
dd
# 全部删除(三步)
esc
gg
d + G (注意这里不是输入+,而是连续操作)
- 4、文本文件查看指令
cat
\more
\less
cat 指令:
# 一次性显示文件全部内容,适合于较小的文件
cat xxx
# 加上行号显示
cat -n xxx
less指令
# 分页显示文件内容,适合较大的文件
less xxx
# less操作
空格键:前进一页
b键:后退一页
q键:退出阅读
/键:搜索模式
n键:搜索模式下,跳转下一个匹配行
N键:搜索模式下,跳转上一个匹配行
- 5、查看尾行指令 tail
tail
指令用于查询文本内容的最后几行,适用于针对较大的日志文件进行查询,并且能够实时显示文本内容,可以实时看到新产生的日志内容
# 查询文件末尾几行(默认10行)
tail xxx
# 查询文件末尾100行
tail -n 100 xxx
# 实时查看文件默认100行(会持续输出文件产生的新内容)
tail -f -n 100 xxx
- 6、查看文件的头几行指令
head
head
指令与tail相对,用于查询文件的头几行内容
head xxx
# 指定100行
head -n 100 xxx
- 7、转移文件指令
mv
mv
指令也就是window中我们常用的剪切指令,用于移动文件
mv 原文件名 目标文件名
# 如将当前目录下的vim_test文件移动到上级目录,并重命名为vim_test2
mv vim_test.txt ../vim_test2.txt
- 8、复制文件指令
cp
cp
也是我们比较常用的指令,用于文件复制
mv 原文件名 目标文件名
# 如将当前目录下的vim_test文件复制到上级目录,并重命名为vim_test2
cp vim_test.txt ../vim_test2.txt
- 9、远程复制指令
scp
scp
指令用于远程复制/传输文件,我们配置环境时,有时需要将一个配置文件传到另外一个服务器上,如果不想专门下载一个ftp软件的话,我们就可以用scp指令来实现
scp 文件名 目标服务器账号@目标服务器ip:目标路径
# 将当前目录下的source_project_cargo文件复制到192.168.244.11服务器上的/var/local目录下
scp source_project_cargo.sql root@192.168.244.11:/var/local/
- 10、删除文件指令
rm
rm
指令用于删除指定文件夹下的文件及子文件夹。该指令使用时要慎重,因为一旦删除是无法恢复的,所以开发圈盛传的删库跑路,就源于rm -rf
指令的强悍效果
# 强制删除文件
rm -f xxx
# 删除文件及子目录
rm -r xxx
# 强制删除文件及子目录
rm -rf xxx
- 11、创建文件夹指令
mkdir
# 创建文件夹xxx,只支持一级文件夹
mkdir xxx
# 创建多级文件夹
mkdir -p xxx/yyy/zzz
- 12、显示当前路径
pwd
有时我们不知道自己当前操作的文件夹路径时,就可以通过pwd
指令来查询当前所在路径
pwd
- 13、模糊查询指令
grep
grep
指令是我们在运维排查的过程中常用的指令,当出现报错时,我们就可以通过grep指令来定位报错的日志内容
grep [option] pattern filename
# 查询xxx.log中的“张三”所在行
grep '张三' xxx.log
# 查询xxx.log中“张三”所在行及之后的3行内容,A:after
grep -A 3 '张三' xxx.log
# 查询xxx.log中“张三”所在行及之前的3行内容,B:before
grep -B 3 '张三' xxx.log
# 查询xxx.log中“张三”所在行及前后的3行内容
grep -C 3 '张三' xxx.log
# 查询指定文件的总行数
grep -c '' /data/logs/xxx.log
# 查询指定张三出现的行数
grep -c '张三' /data/logs/xxx.log
# 查询并显示行号
grep -n -A 3 '张三' xxx.log
- 14、重启指令
reboot
重启大法能够解决"80%"的软件问题,这是我们必须掌握的指令!
reboot
- 15、切换用户指令
su
# 切换root账号
su
# 切换指定用户elastic
su elastic
1.2 进阶掌握
- 1、查找可执行文件的路径
which
有时我们会面临忘记自己安装的软件在哪个文件夹下,或者需要用到某个软件不知道放哪儿了,这时我们就可以通过which
来帮助我们寻找安装目录
# 查找java安装路径
which java
- 2、查找文件位置指令
find
find
指令用于查找指定文件的路径
find
# 在/var/local文件夹下查找xxx.log文件
find /var/local xxx.log
- 3、赋权指令
chmod
\chown
在linux系统中,文件具有不同的权限,针对没有写入权限的文件,我们是不能修改的,因此我们就需要修改文件权限,这时就需要用到chmod,chown指令
chown指令:改变文件所有者
# 将/var/local/elasticsearch文件夹的所有者改为elastic,群组改为elastic,-R表示递归设置所以的子文件夹
chown -R elastic:elastic /var/local/elasticsearch
chmod指令:修改文件权限
# 递归设置对/var/local/elasticsearch文件夹及子文件具有最高权限
chmod -R 777 /var/local/elasticsearch
针对权限内容,当然不止777最高权限,还分了其他很多权限等级,因篇幅关系,大家可自行学习,先做了解,实际应用时再深入理解即可
- 4、查询进程指令
ps
ps
指令可以让我们查询进程名,我们在linux系统中后台运行某些软件时,是不能想window那样有运行窗口可视化的,我们想要找到这些进程的话就需要利用ps指令
# 查询全部进程
ps -ef
# 结合grep指令实现查询指令名称的进程,如查询java进程
ps -ef | grep java
- 5、终止进程指令
kill
kill
用来强制杀死正在运行的进程,类似window中的强制退出,一般配合ps指令来使用,ps指令查询出指定的进程号,然后通过kill退出进程
kill 进程号
- 6、远程连接指令
ssh
ssh
用于我们远程连接服务器,如果不想下载远程连接软件的话,ssh指令是不错的选择
ssh 账号@服务器ip -p 端口
# 通过22端口远程连接192.168.244.11服务器
ssh root@192.168.244.11 -p 22
# 端口默认22,所以上述指令可以简写为
ssh root@192.168.244.11
- 7、软件下载指令
yum
yum
是一个软件包管理器,我们可以通过这个指令来快捷安装软件,以此来方便的搭建运行环境
# 显示已经安装的和可以安装的软件
yum list
# 查找安装包
yum search
# 安装软件包
yum install xxx
# -y是无需再询问是否安装,比如直接安装java
yum -y install java
# 卸载安装的软件
yum remove xxx
# 更新所有软件包
yum update
# 更新指定软件包
yum update xxx
- 8、下载文件指令
wget
wget
用于从指定的url下载文件,这样我们就不再需要在本地下载后再从本地上传到服务器了。当然该工具不是自带的,需要我们提前安装
# 通过yum安装wget
yum -y install wget
# 下载文件
wget url
# 下载文件并重命名
wget -O 55555.zip http://55555.com/download
- 9、打包、解压指令
tar
tar
指令用于打包文件夹, 或者解压压缩包,在环境搭建时非常常用
其支持的参数如下:
-c # 创建打包文件
-t # 查看压缩包含有哪些文件名
-x # 解压缩
-z # 通过gzip的方式进行压缩/解压缩
-v # 显示正在解压/打包的文件名
-f # 指定文件名
一般我们是将这些参数组合使用的,下面列举几个常用的:
# 压缩xxx文件夹为.tar.gz文件
tar -czvf xxx.tar.gz xxx
# 解压xxx.tar.gz文件
tar -zxvf xxx.tar.gz
# 显示压缩文件内容
tar -tzvg xxx.tar.gz
- 10、zip文件解压缩指令
zip
/unzip
zip
指令专用于解压/打包zip文件,同样需要提前安装
# yum安装zip,unzip指令
yum install zip
yum install unzip
# 解压zip文件
unzip xxx.zip
# 打包zip文件
zip [option] 文件名 路径
# 打包xxx文件夹为xxx.zip,-v表示可视化打包过程,-r表示递归打包所有子文件夹
zip -vr xxx.zip /var/local/xxx
# 追加user.txt文件到xxx.zip文件中
zip -u xxx.zip user.txt
# 加密压缩
zip -e xxx.zip /var/local/xxx
- 11、后台运行程序
nohup
nohup
指令用于后台运行程序,有时我们需要运行多个软件时,如果都在前台运行则只能运行一个,无法继续输入指令,这时我们就需要指定程序后台运行
# 后台运行xxx.jar,搭配“&”使用,表示退出终端程序依旧可以后台运行,不会挂断
nohup java -jar xxx.jar &
总结
本期的linux常用指令分享就到这里结束了,更加建议大家通过实操来熟悉这些指令,一次排查、一次环境搭建、一次日志查询,动起来吧~